summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rwxr-xr-xCMakeLists.txt200
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)
+
+