From f322c616eae9397aa82fe40326b6a6b1bdc30562 Mon Sep 17 00:00:00 2001 From: Lytsing Huang Date: Fri, 20 Dec 2013 03:03:35 +0800 Subject: [PATCH] use cmake --- CMakeLists.txt | 141 ++++++++++++++++++++++++++++ CMakeModules/BaseConfig.cmake | 29 ++++++ CMakeModules/FindLibEvent.cmake | 23 +++++ CMakeModules/FindLibMemcached.cmake | 36 +++++++ CMakeModules/Findlibevhtp.cmake | 14 +++ 5 files changed, 243 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 CMakeModules/BaseConfig.cmake create mode 100644 CMakeModules/FindLibEvent.cmake create mode 100644 CMakeModules/FindLibMemcached.cmake create mode 100644 CMakeModules/Findlibevhtp.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..25cf424 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,141 @@ +cmake_minimum_required(VERSION 2.8) +project(zimg) + +set(PROJECT_MAJOR_VERSION 1) +set(PROJECT_MINOR_VERSION 0) +set(PROJECT_PATCH_VERSION 0) + +set (PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}) +set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules) + +INCLUDE (CheckFunctionExists) +INCLUDE (CheckIncludeFiles) +INCLUDE (CheckTypeSize) + +CHECK_FUNCTION_EXISTS(alloca C_ALLOCA) +CHECK_FUNCTION_EXISTS(memcmp HAVE_MEMCMP) +CHECK_FUNCTION_EXISTS(strndup HAVE_STRNDUP) +CHECK_FUNCTION_EXISTS(strnlen HAVE_STRNLEN) + +CHECK_INCLUDE_FILES(alloca.h HAVE_ALLOCA_H) +CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H) +CHECK_INCLUDE_FILES(string.h HAVE_STRING_H) +CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H) +CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H) +CHECK_INCLUDE_FILES(sys/times.h HAVE_SYS_TIMES_H) +CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H) +CHECK_INCLUDE_FILES(memory.h HAVE_MEMORY_H) +CHECK_INCLUDE_FILES(stdarg.h HAVE_STDARG_PROTOTYPES) +CHECK_INCLUDE_FILES(sys/tree.h HAVE_SYS_TREE) +CHECK_INCLUDE_FILES(sys/queue.h HAVE_SYS_QUEUE) +CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN) + +CHECK_TYPE_SIZE("int" SIZEOF_INT) +CHECK_TYPE_SIZE("long" SIZEOF_LONG) +CHECK_TYPE_SIZE("short" SIZEOF_SHORT) + +if (NOT HAVE_STRNDUP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_STRNDUP") +endif(NOT HAVE_STRNDUP) + +if (NOT HAVE_STRNLEN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_STRNLEN") +endif(NOT HAVE_STRNLEN) + +if (NOT HAVE_SYS_UN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_SYS_UN") +endif(NOT HAVE_SYS_UN) + +# -DEVHTP_DISABLE_SSL:STRING=ON +OPTION(EVHTP_DISABLE_SSL "Disable ssl support" OFF) + +# -DEVHTP_DISABLE_EVTHR:STRING=ON +OPTION(EVHTP_DISABLE_EVTHR "Disable evthread support" OFF) + +# -DEVHTP_DISABLE_REGEX:STRING=ON +OPTION(EVHTP_DIABLE_REGEX "Disable regex support" OFF) + +# -DEVHTP_BUILD_SHARED:STRING=ON +OPTION(EVHTP_BUILD_SHARED "Build shared library too" OFF) + +# -DEVHTP_USE_DEFER_ACCEPT:STRING=ON +OPTION(EVHTP_USE_DEFER_ACCEPT "Enable TCP_DEFER_ACCEPT" OFF) + +if (EVHTP_USE_DEFER_ACCEPT) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_DEFER_ACCEPT") +endif(EVHTP_USE_DEFER_ACCEPT) + +SET(CMAKE_INCLUDE_CURRENT_DIR ON) + +include(BaseConfig) + +message("Build Type: ${CMAKE_BUILD_TYPE}") +message("Std CFLAGS: ${CMAKE_C_FLAGS}") +message("Dbg CFLAGS: ${CMAKE_C_FLAGS_DEBUG}") +message("Rel CFLAGS: ${CMAKE_C_FLAGS_RELEASE}") + +find_package(LibEvent REQUIRED) +find_package(OpenSSL) +find_package(ImageMagick COMPONENTS MagickWand REQUIRED) +find_package(LibMemcached REQUIRED) +find_package(libevhtp REQUIRED) + +find_path(LIBEVENT_INCLUDE_DIR event2/event.h REQUIRED) + +set(IMAGEMAGICK_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS}) +set(IMAGEMAGICK_LIBRARIES ${ImageMagick_LIBRARIES}) + +if (NOT OPENSSL_FOUND) + message("Diabling SSL") + set (EVHTP_DISABLE_SSL ON) + set (OPENSSL_CRYPTO_LIBRARY "") + set (OPENSSL_INCLUDE_DIR "") + set (OPENSSL_LIBRARIES "") + set (LIBEVENT_OPENSSL_LIBRARY "") +endif() + + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${OPENSSL_INCLUDE_DIR} + ${LIBEVENT_INCLUDE_DIR} + ${ImageMagick_MagickWand_INCLUDE_DIR} +) + +set(ZIMG_EXTERNAL_LIBS + ${LIBEVENT_LIBRARY} + ${LIBEVENT_PTHREADS_LIBRARY} + ${LIBEVENT_OPENSSL_LIBRARY} + ${OPENSSL_LIBRARIES} + ${ImageMagick_MagickWand_LIBRARY} + ${LIBEVHTP_LIBRARY} + ${LIBEVENT_LIBRARY} + ${LIBMEMCACHED_LIBRARY} +) + +if (NOT ${LIBEVENT_PTHREADS_FOUND}) + set(EVHTP_DISABLE_EVTHR 1) +endif(NOT ${LIBEVENT_PTHREADS_FOUND}) + +if (NOT ${LIBEVENT_OPENSSL_FOUND}) + set (EVHTP_DISABLE_SSL 1) +endif(NOT ${LIBEVENT_OPENSSL_FOUND}) + +set(ZIMG_SOURCES zhttpd.c zspinlock.c zlog.c zmd5.c zutil.c zcache.c zimg.c main.c) + +if (NOT EVHTP_DISABLE_EVTHR) + set (ZIMG_EXTERNAL_LIBS ${ZIMG_EXTERNAL_LIBS} pthread) +endif(NOT EVHTP_DISABLE_EVTHR) + +if (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG") +endif (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug") + +if (EVHTP_DISABLE_SSL) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEVHTP_DISABLE_SSL") +endif() + +set(CMAKE_EXE_LINKER_FLAGS "-L/usr/lib") +add_executable(zimg ${ZIMG_SOURCES}) +target_link_libraries(zimg ${ZIMG_EXTERNAL_LIBS}) + diff --git a/CMakeModules/BaseConfig.cmake b/CMakeModules/BaseConfig.cmake new file mode 100644 index 0000000..467caf1 --- /dev/null +++ b/CMakeModules/BaseConfig.cmake @@ -0,0 +1,29 @@ +if (CMAKE_COMPILER_IS_GNUCC) + + set(RSN_BASE_C_FLAGS "-Wall -fno-strict-aliasing") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${RSN_BASE_C_FLAGS} -DPROJECT_VERSION=\"${PROJECT_VERSION}\"") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${RSN_BASE_C_FLAGS} -ggdb") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${RSN_BASE_C_FLAGS}") + + if(APPLE) + # Newer versions of OSX will spew a bunch of warnings about deprecated ssl functions, + # this should be addressed at some point in time, but for now, just ignore them. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -Wno-deprecated-declarations") + elseif(UNIX) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112") + endif(APPLE) + +endif(CMAKE_COMPILER_IS_GNUCC) + +if (EVHTP_DISABLE_EVTHR) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEVHTP_DISABLE_EVTHR") +endif(EVHTP_DISABLE_EVTHR) + +if (EVHTP_DISABLE_SSL) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEVHTP_DISABLE_SSL") +endif(EVHTP_DISABLE_SSL) + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif(NOT CMAKE_BUILD_TYPE) + diff --git a/CMakeModules/FindLibEvent.cmake b/CMakeModules/FindLibEvent.cmake new file mode 100644 index 0000000..744c06c --- /dev/null +++ b/CMakeModules/FindLibEvent.cmake @@ -0,0 +1,23 @@ +# - Try to find the LibEvent config processing library +# Once done this will define +# +# LIBEVENT_FOUND - System has LibEvent +# LIBEVENT_INCLUDE_DIR - the LibEvent include directory +# LIBEVENT_LIBRARIES 0 The libraries needed to use LibEvent + +FIND_PATH(LIBEVENT_INCLUDE_DIR NAMES event.h) +FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event) +FIND_LIBRARY(LIBEVENT_CORE_LIBRARY NAMES event_core) +FIND_LIBRARY(LIBEVENT_PTHREADS_LIBRARY NAMES event_pthreads) +FIND_LIBRARY(LIBEVENT_EXTRA_LIBRARY NAMES event_extra) +FIND_LIBRARY(LIBEVENT_OPENSSL_LIBRARY NAMES event_openssl) + + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEvent DEFAULT_MSG LIBEVENT_LIBRARY LIBEVENT_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEventPthreads DEFAULT_MSG LIBEVENT_PTHREADS_LIBRARY LIBEVENT_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEventCore DEFAULT_MSG LIBEVENT_CORE_LIBRARY LIBEVENT_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEventExtra DEFAULT_MSG LIBEVENT_EXTRA_LIBRARY LIBEVENT_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEventOpenssl DEFAULT_MSG LIBEVENT_OPENSSL_LIBRARY LIBEVENT_INCLUDE_DIR) + +MARK_AS_ADVANCED(LIBEVENT_INCLUDE_DIR LIBEVENT_LIBRARY LIBEVENT_PTHREADS_LIBRARY LIBEVENT_OPENSSL_LIBRARY LIBEVENT_CORE_LIBRARY LIBEVENT_EXTRA_LIBRARY) diff --git a/CMakeModules/FindLibMemcached.cmake b/CMakeModules/FindLibMemcached.cmake new file mode 100644 index 0000000..07ee3bb --- /dev/null +++ b/CMakeModules/FindLibMemcached.cmake @@ -0,0 +1,36 @@ +# Try to find the libmemcached +# +# LIBMEMCACHED_FOUND - system has the libmemcached library +# LIBMEMCACHED_INCLUDE_DIR - the libmemcached include directory +# LIBMEMCACHED_LIBRARIES - The libraries needed to use libmemcached + +FIND_PATH(LIBMEMCACHED_INCLUDE_DIR libmemcached/memcached.h) + +FIND_LIBRARY(LIBMEMCACHED_LIBRARY NAMES memcached libmemcached PATH /usr/lib /usr/local/lib) + +IF(LIBMEMCACHED_INCLUDE_DIR AND LIBMEMCACHED_LIBRARY) + SET(LIBMEMCACHED_FOUND 1) + SET(LIBMEMCACHED_LIBRARIES ${LIBMEMCACHED_LIBRARY}) + SET(LIBMEMCACHED_INCLUDE_DIRS ${LIBMEMCACHED_INCLUDE_DIR}) +ELSE (LIBMEMCACHED_INCLUDE_DIR AND LIBMEMCACHED_LIBRARY) + SET(LIBMEMCACHED_FOUND 0) + SET(LIBMEMCACHED_LIBRARIES) + SET(LIBMEMCACHED_INCLUDE_DIRS) +ENDIF (LIBMEMCACHED_INCLUDE_DIR AND LIBMEMCACHED_LIBRARY) + +# Report the results. +IF (NOT LIBMEMCACHED_FOUND) + SET(LIBMEMCACHED_DIR_MESSAGE "Libmemcached was not found.") + IF (NOT LIBMEMCACHED_FIND_QUIETLY) + MESSAGE(STATUS "${LIBMEMCACHED_DIR_MESSAGE}") + ELSE (NOT LIBMEMCACHED_FIND_QUIETLY) + IF (LIBMEMCACHED_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "${LIBMEMCACHED_DIR_MESSAGE}") + ENDIF (LIBMEMCACHED_FIND_REQUIRED) + ENDIF (NOT LIBMEMCACHED_FIND_QUIETLY) +ENDIF (NOT LIBMEMCACHED_FOUND) + +MARK_AS_ADVANCED( + LIBMEMCACHED_LIBRARY + LIBMEMCACHED_INCLUDE_DIR +) diff --git a/CMakeModules/Findlibevhtp.cmake b/CMakeModules/Findlibevhtp.cmake new file mode 100644 index 0000000..3adf3cc --- /dev/null +++ b/CMakeModules/Findlibevhtp.cmake @@ -0,0 +1,14 @@ +# - Try to find the libevhtp +# Once done this will define +# +# LIBEVHTP_FOUND - System has libevhtp +# LIBEVHTP_INCLUDE_DIR - the libevhtp include directory +# LIBEVHTP_LIBRARY 0 The library needed to use libevhtp + +FIND_PATH(LIBEVHTP_INCLUDE_DIR NAMES evhtp.h) +FIND_LIBRARY(LIBEVHTP_LIBRARY NAMES evhtp PATH /usr/lib /usr/local/lib) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(libevhtp DEFAULT_MSG LIBEVHTP_LIBRARY LIBEVHTP_INCLUDE_DIR) +MARK_AS_ADVANCED(LIBEVHTP_INCLUDE_DIR LIBEVHTP_LIBRARY) +