diff options
Diffstat (limited to 'CMakeLists.txt')
-rwxr-xr-x | CMakeLists.txt | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..399e776 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,200 @@ +# Copyright (C) 2009 Werner Dittman +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +cmake_minimum_required(VERSION 2.6) + +PROJECT(libzrtpcpp) +set (VERSION 2.3.4) +set (PACKAGE libzrtpcpp) +set (SOVERSION ${VERSION}) +STRING(REGEX REPLACE "[.].*$" "" SOVERSION ${SOVERSION}) + +SET(CPACK_PACKAGE_VERSION_MAJOR ${SOVERSION}) +SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION}) +SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION}) +STRING(REGEX REPLACE "[.][0-9]*$" "" CPACK_PACKAGE_VERSION_MINOR ${VERSION}) +STRING(REGEX REPLACE ".*[.]" "" CPACK_PACKAGE_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) +STRING(REGEX REPLACE ".*[.]" "" CPACK_PACKAGE_VERSION_PATCH ${VERSION}) + +if(CMAKE_GENERATOR MATCHES "Unix Makefiles") + add_custom_target(cleandist + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.gz" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}_*.dsc" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-*.rpm" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.deb" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}[-_]*.changes" + COMMAND rm -f "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-*.zip" + ) + + add_custom_target(dist + DEPENDS cleandist + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND git archive --format tar --output="${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-${VERSION}.tar" --prefix="${PACKAGE}-${VERSION}/" HEAD + COMMAND gzip "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}-${VERSION}.tar" + ) +endif() + +if(MSVC60) + set(BUILD_STATIC ON CACHE BOOL "static linking only" FORCE) + MARK_AS_ADVANCED(BUILD_STATIC) +else() + option(BUILD_STATIC "Set to OFF to build shared libraries" OFF) +endif() + +# set to true for debug and trace during CMakeLists development +set(CMAKE_VERBOSE_MAKEFILE FALSE) + +MESSAGE( STATUS "Configuring GNU ${PROJECT_NAME} ${VERSION}...") + +# include most of the fine stuff we need +include(cmake/Modules/FindGcryptConfig.cmake) +include(FindPkgConfig) +include(CheckLibraryExists) +include(CheckIncludeFiles) +include(cmake/Modules/AutoArgs.cmake) + +if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME}) + include(cmake/Modules/GeneratePackage.cmake) + + GENERATE_PACKAGING(${PACKAGE} ${VERSION}) +endif() + +# check the -Denable-ccrtp setting, defaults to true +enable_arg(ccrtp true "Enable GNU ccRTP support for GNU ZRTP") +args_help() + +if (NOT LIB_SUFFIX) + set(LIBDIRNAME "lib") + # this caused problems in debian where it has to always be lib.... + if (NOT EXISTS /etc/debian_version) + if ( "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" ) + set(LIBDIRNAME "lib64") + endif() + endif() +else() + set(LIBDIRNAME "lib${LIB_SUFFIX}") +endif() + +# setup the Thread include and lib +find_package(Threads) +if(CMAKE_HAVE_PTHREAD_H) + set(HAVE_PTHREAD_H TRUE) +endif() +set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) + +# define the name of the lib. zrtpcppcore does not include the ccRTP stuff. +set(zrtplib zrtpcppcore) +if(enable_ccrtp) + if (USES_CCRTP_INCLUDE_DIRS) + message(STATUS " Using local commoncpp dependency") + else() + find_package(PkgConfig) + pkg_check_modules(USES_CCRTP libccrtp>=2.0.0) + endif() + include_directories(${USES_CCRTP_INCLUDE_DIRS}) + link_directories(${USES_CRTP_LIBRARY_DIRS}) + add_definitions(${USES_CCRTP_CFLAGS}) + set (LIBS ${LIBS} ${USES_CCRTP_LDFLAGS} ${USES_CCRTP_LIBRARIES}) + set(zrtplib zrtpcpp) +endif() + +# now get info about crypto libraries +pkg_check_modules(OPENSSL libcrypto>=0.9.8) +if (OPENSSL_FOUND) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS}) #update include files search directory + check_include_files(openssl/bn.h HAVE_OPENSSL_BN_H) + check_include_files(openssl/aes.h HAVE_OPENSSL_AES_H) + check_include_files(openssl/sha.h HAVE_OPENSSL_SHA_H) + check_include_files(openssl/ec.h HAVE_OPENSSL_EC_H) + check_library_exists(crypto EVP_CipherInit_ex "${OPENSSL_LIBDIR}" HAVE_SSL_CRYPT) #use search lib directory from pkg-config + set(LIBS ${LIBS} -lcrypto) + set(CRYPTOBACKEND "libcrypto >= 0.9.8") + set(BUILD_REQ "libopenssl-devel >= 0.9.8") + set(PACKAGE_REQ "libopenssl >= 0.9.8") + include_directories(${OPENSSL_INCLUDE_DIRS}) #update includes directory from pkg-config +endif() + +if(NOT HAVE_OPENSSL_EC_H) + gcr_check(GCRYPT gcrypt) + if(GCRYPT_FOUND) + check_include_files(gcrypt.h HAVE_GCRYPT_H) + set(LIBS ${LIBS} ${GCRYPT_LIBRARIES}) + set(BUILD_REQ "libgcrypt-devel") + set(CRYPTOBACKEND="") + set(PACKAGE_REQ "libgcrypt") + endif() +endif() + +if(NOT OPENSSL_FOUND AND NOT GCRYPT_FOUND) + message(FATAL_ERROR "No crypto library found") +endif() + +check_include_files(stdlib.h HAVE_STDLIB_H) +check_include_files(string.h HAVE_STRING_H) + +# necessary and required modules checked, ready to generate config.h +configure_file(libzrtpcpp-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/libzrtpcpp-config.h) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +# the following set(...) commands are only to have backward +# compatibility with autoconf stuff to generate the pc file +set(prefix ${CMAKE_INSTALL_PREFIX}) +set(exec_prefix ${prefix}/bin) +set(libdir ${prefix}/${LIBDIRNAME}) +set(includedir ${prefix}/include) +set(PACKAGE pkgconfig) +configure_file(libzrtpcpp.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lib${zrtplib}.pc @ONLY) + +configure_file(libzrtpcpp.spec.cmake ${CMAKE_CURRENT_BINARY_DIR}/libzrtpcpp.spec @ONLY) + +#to make sure includes are first taken from those directory +include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src) + +add_definitions(-g -O2 -fno-strict-aliasing) +if(CMAKE_COMPILER_IS_GNUCXX) + add_definitions(-Wno-long-long -Wno-char-subscripts) + add_definitions(-Wall -pedantic) + add_definitions(-DNEW_STDCPP) +endif() + +add_subdirectory(src) + +if (enable_ccrtp) + add_subdirectory(demo) +endif() + +if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/package/) + MESSAGE(STATUS "package dir not found") + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/package/) +endif() + +########### install files ############### +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${zrtplib}.pc DESTINATION ${LIBDIRNAME}/pkgconfig) + +if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME}) + + ########### Add uninstall target ############### + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + add_custom_target(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + +endif() +##very usefull for macosx, specially when using gtkosx bundler +if(APPLE) + if (NOT CMAKE_INSTALL_NAME_DIR) + set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "CMAKE_INSTALL_NAME_DIR set for macosx" ) + endif (NOT CMAKE_INSTALL_NAME_DIR) +endif(APPLE) + + |