PROJECT(ACNG)
INCLUDE_DIRECTORIES(. include ${CMAKE_BINARY_DIR} )
FILE(GLOB SRCS "source/*.cc")

SET(SRCS ${SRCS} 3rd-party/md5.cc)

#FIXME: cope with CFLAGS from makefile wrapper somehow

#SET(CMAKE_CXX_FLAGS " )
SET(FLAGS_DEBUG " -O0 -g -pthread ")
SET(FLAGS_OPT " -O3 -pthread -fno-exceptions  ")
SET(FLAGS_EMBED "-static -Os -pthread -fno-exceptions ")

INCLUDE(FindBZip2)
INCLUDE(FindZLIB)

# make sure we get shared_ptr functionality
INCLUDE(CheckCXXSourceCompiles)
SET(TESTSRC "
#include <tr1/memory>
int main() { return NULL != std::tr1::shared_ptr<int>(new int(1)); }
")
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_TR1_SMART_POINTERS)
IF(NOT HAS_TR1_SMART_POINTERS)
   SET(HAS_TR1_SMART_POINTERS )
   ADD_DEFINITIONS(-DUSE_BOOST)
   SET(TESTSRC "
   #include <boost/smart_ptr.hpp>
   int main() { return NULL != boost::shared_ptr<int>(new int(1)); }
   ")
   CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_BOOST)
   IF(NOT HAS_BOOST)
      SET(HAS_BOOST )
      MESSAGE(FATAL_ERROR "No shared_ptr implementation found, install boost or modern GCC (4.x).")
   ENDIF(NOT HAS_BOOST)
ENDIF(NOT HAS_TR1_SMART_POINTERS)

SET(CMAKE_REQUIRED_LIBRARIES bz2)
SET(TESTSRC "
#include <bzlib.h>
bz_stream t; int main(){ return BZ2_bzDecompressInit(&t, 1, 0); }
")
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBBZ2)
IF(NOT HAS_LIBBZ2)
   # MARK_AS_ADVANCED(HAS_LIBBZ2)
   SET(HAS_LIBBZ2 )
   MESSAGE(FATAL_ERROR "Unable to use libbz2 development components. Install libbz2-dev.")
ENDIF(NOT HAS_LIBBZ2)

SET(CMAKE_REQUIRED_LIBRARIES z)
SET(TESTSRC "
#include <zlib.h>
z_stream t; int main(){ return inflateInit2(&t, 42); }
")
CHECK_CXX_SOURCE_COMPILES("${TESTSRC}" HAS_LIBZ)
MARK_AS_ADVANCED(HAS_LIBZ)
IF(NOT HAS_LIBZ)
#   SET(HAS_LIBZ )
   MESSAGE(FATAL_ERROR "Unable to use ZLib development components. Install libz-dev.")
ENDIF(NOT HAS_LIBZ)



ADD_EXECUTABLE(apt-cacher-ng ${SRCS})
TARGET_LINK_LIBRARIES(apt-cacher-ng pthread bz2 z)

ADD_EXECUTABLE(apt-cacher-ng-debug ${SRCS})
TARGET_LINK_LIBRARIES(apt-cacher-ng-debug pthread bz2 z)

SET_TARGET_PROPERTIES(apt-cacher-ng
                        PROPERTIES COMPILE_FLAGS "  ${FLAGS_OPT}  ")
SET_TARGET_PROPERTIES(apt-cacher-ng-debug
                        PROPERTIES COMPILE_FLAGS " ${FLAGS_DEBUG} ")
