# cmake build file for Gammu # Copyright (c) 2007 - 2018 Michal Cihar # vim: expandtab sw=4 ts=4 sts=4: cmake_minimum_required (VERSION 3.0) INCLUDE (CMakeForceCompiler) project (Gammu C) # Where to lookup modules set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") # Silent some warnings from CMake 2.6 cmake_policy(SET CMP0003 NEW) cmake_policy(SET CMP0009 NEW) option (COVERAGE "Add flags for Coverage analysis" OFF) option (ONLINE_TESTING "Enable testing of parts which use remote servers" OFF) option (PSQL_TESTING "Enable testing of PostgreSQL SMSD backend" OFF) option (MYSQL_TESTING "Enable testing of MySQL SMSD backend" OFF) option (ODBC_TESTING "Enable testing of ODBC MySQL SMSD backend" OFF) option (BUILD_SHARED_LIBS "Build shared libraries" ON) option (LARGE_FILES "Support for large files" ON) if (LARGE_FILES) add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64) endif (LARGE_FILES) # Set version set (GAMMU_VERSION "1.42.0" CACHE INTERNAL "") string (REGEX REPLACE "^([0-9]*)\\.([0-9]*)\\.([0-9]*)$" "\\1" "GAMMU_VERSION_MAJOR" "${GAMMU_VERSION}") string (REGEX REPLACE "^([0-9]*)\\.([0-9]*)\\.([0-9]*)$" "\\2" "GAMMU_VERSION_MINOR" "${GAMMU_VERSION}") string (REGEX REPLACE "^([0-9]*)\\.([0-9]*)\\.([0-9]*)$" "\\3" "GAMMU_VERSION_PATCH" "${GAMMU_VERSION}") math(EXPR GAMMU_VERSION_NUM "${GAMMU_VERSION_MAJOR} * 10000 + ${GAMMU_VERSION_MINOR} * 100 + ${GAMMU_VERSION_PATCH}") message (STATUS "Configuring ${CMAKE_PROJECT_NAME} ${GAMMU_VERSION}") set(CMAKE_C_STANDARD 11) set (GAMMU_SOVERSION "8" CACHE INTERNAL "") if ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") message ("Warning: In tree build is not recommended way to build Gammu.") endif ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") # For debugging if (CMAKE_BUILD_TYPE STREQUAL "Debug") # set (CMAKE_VERBOSE_MAKEFILE ON) set (DEBUG 1) else (CMAKE_BUILD_TYPE STREQUAL "Debug") set (DEBUG 0) endif (CMAKE_BUILD_TYPE STREQUAL "Debug") # Standard packages include (CheckCSourceCompiles) include (CheckCCompilerFlag) include (CheckIncludeFile) include (CheckIncludeFiles) include (CheckFunctionExists) include (CheckSymbolExists) include (CheckTypeSize) include (CheckLibraryExists) include (FindPkgConfig) # Packages in our sources (mostly taken from KDE) include (MacroOptionalFindPackage) include (MacroAddDLL) include (MacroGammuOption) include (MacroTuneCompiler) include (MSVCRuntime) # WE use pkgconfig later find_package (PkgConfig) # enable code coverage find_package(codecov) # Standard packages macro_optional_find_package (Doxygen) # I'd say this is task of CMake to export this check_symbol_exists (__clang__ "" CLANG_COMPILER) # Configuration checks check_symbol_exists (strncasecmp "string.h" HAVE_STRNCASECMP) check_symbol_exists (strcasecmp "string.h" HAVE_STRCASECMP) check_symbol_exists (_strnicmp "string.h" HAVE_STRNICMP) check_symbol_exists (_stricmp "string.h" HAVE_STRICMP) check_function_exists (strcasestr HAVE_STRCASESTR) check_function_exists (strchrnul HAVE_STRCHRNUL) check_function_exists (strtoull HAVE_STRTOULL) check_include_file (dirent.h HAVE_DIRENT_H) check_include_file (sys/ioctl.h HAVE_SYS_IOCTL_H) check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H) check_include_file (unistd.h HAVE_UNISTD_H) check_include_file (wchar.h HAVE_WCHAR_H) if (HAVE_WCHAR_H) check_include_files ("wchar.h;wctype.h" HAVE_WCTYPE_H) check_symbol_exists (iswspace "wchar.h;wctype.h" HAVE_ISWSPACE) check_symbol_exists (towlower "wchar.h;wctype.h" HAVE_TOWLOWER) else (HAVE_WCHAR_H) check_include_file (wctype.h HAVE_WCTYPE_H) check_symbol_exists (iswspace "wctype.h" HAVE_ISWSPACE) check_symbol_exists (towlower "wctype.h" HAVE_TOWLOWER) endif (HAVE_WCHAR_H) check_symbol_exists (I_SETSIG "stropts.h" HAVE_I_SETSIG) check_include_file (strings.h HAVE_STRINGS_H) check_function_exists (scandir HAVE_SCANDIR) check_function_exists (alphasort HAVE_ALPHASORT) set (ENABLE_GETOPT ON CACHE BOOL "Enable getopt usage") set (USE_WCHAR_T ON CACHE BOOL "Use native wchar_t type") if (ENABLE_GETOPT) check_symbol_exists (getopt "unistd.h" HAVE_GETOPT) check_symbol_exists (getopt_long "getopt.h" HAVE_GETOPT_LONG) endif (ENABLE_GETOPT) check_symbol_exists (daemon "unistd.h" HAVE_DAEMON_UNISTD) check_symbol_exists (daemon "stdlib.h" HAVE_DAEMON_STDLIB) check_symbol_exists (kill "signal.h" HAVE_KILL) check_symbol_exists (sigtimedwait "signal.h" HAVE_SIGTIMEDWAIT) check_symbol_exists (getpwnam "pwd.h" HAVE_GETPWNAM) check_symbol_exists (getgrnam "grp.h" HAVE_GETGRNAM) check_symbol_exists (getpwuid "pwd.h" HAVE_GETPWUID) check_symbol_exists (getuid "unistd.h" HAVE_GETUID) check_symbol_exists (initgroups "grp.h" HAVE_INITGROUPS) check_symbol_exists (setuid "unistd.h" HAVE_SETUID) check_symbol_exists (setgid "unistd.h" HAVE_SETGID) check_symbol_exists (SIGHUP "signal.h" HAVE_SIGHUP) check_symbol_exists (SIGUSR1 "signal.h" HAVE_SIGUSR1) check_symbol_exists (SIGUSR2 "signal.h" HAVE_SIGUSR2) check_symbol_exists (dup "unistd.h" HAVE_DUP_UNISTD_H) check_symbol_exists (getpid "unistd.h" HAVE_GETPID) check_symbol_exists (getpass "unistd.h" HAVE_GETPASS) check_symbol_exists (alarm "unistd.h" HAVE_ALARM) check_symbol_exists (dup "io.h" HAVE_DUP_IO_H) check_symbol_exists (shmget "sys/shm.h" HAVE_SHM) check_c_source_compiles (" #define _XOPEN_SOURCE #define _BSD_SOURCE #include int main(void) { struct tm timestruct; strptime(\"11:22\", \"%H:%M\", ×truct); return 0; }" HAVE_STRPTIME) check_c_source_compiles (" #include #include #include int main(void) { syslog(LOG_NOTICE, \"aaa %d\", 1); return 0; } " HAVE_SYSLOG) # Some compilers (eg. BCC) have this in ctype.h if (NOT HAVE_TOWLOWER) check_symbol_exists (towlower "ctype.h" HAVE_TOWLOWER_CTYPE) if (HAVE_TOWLOWER_CTYPE) set (HAVE_TOWLOWER ${HAVE_TOWLOWER_CTYPE} CACHE INTERNAL "") endif (HAVE_TOWLOWER_CTYPE) endif (NOT HAVE_TOWLOWER) # Standard packages macro_optional_find_package (Threads) # Used (optionally for testing) find_program(SH_BIN sh) find_program(BASH_BIN bash) find_program(SQLITE_BIN sqlite3) find_program(SED_BIN sed) if (WIN32) find_program(MYSQL_BIN mysql $ENV{ProgramFiles}/MySQL/*/bin $ENV{SystemDrive}/MySQL/*/bin "c:/Program Files/MySQL/*/bin") find_program(PSQL_BIN psql $ENV{ProgramFiles}/PostgreSQL/*/bin $ENV{SystemDrive}/PostgreSQL/*/bin "c:/Program Files/PostgreSQL/*/bin") else() find_program(MYSQL_BIN mysql) find_program(PSQL_BIN psql) endif() find_package (Threads) # Packages in sources macro_optional_find_package (MySQL) macro_optional_find_package (ODBC) macro_optional_find_package (Postgres) macro_optional_find_package (LibDBI) macro_optional_find_package (Libintl) macro_optional_find_package (Iconv) macro_optional_find_package (CURL) macro_optional_find_package (Glib) macro_optional_find_package (GObject) macro_optional_find_package (SystemD) # Gudev stuff pkg_check_modules(GUDEV gudev-1.0) if (CMAKE_CROSSCOMPILING AND MINGW) set (HAVE_WINT_T True CACHE INTERNAL "") set (HAVE_WCHAR_T True CACHE INTERNAL "") else (CMAKE_CROSSCOMPILING AND MINGW) # Search for needed includes and functions if (HAVE_WCHAR_H) set (CMAKE_EXTRA_INCLUDE_FILES wchar.h) check_type_size (wchar_t WCHAR_T) check_type_size (wint_t WINT_T) endif (HAVE_WCHAR_H) set (CMAKE_EXTRA_INCLUDE_FILES) endif (CMAKE_CROSSCOMPILING AND MINGW) set (CMAKE_EXTRA_INCLUDE_FILES stdio.h) check_type_size (ssize_t SSIZE_T) set (CMAKE_EXTRA_INCLUDE_FILES) if (HAVE_UNISTD_H) set (CMAKE_EXTRA_INCLUDE_FILES unistd.h) check_type_size(intptr_t INTPTR_T) set (CMAKE_EXTRA_INCLUDE_FILES) else(HAVE_UNISTD_H) check_type_size(intptr_t INTPTR_T) endif (HAVE_UNISTD_H) check_c_source_compiles (" #include int main(void) { printf( __FUNCTION__); return 0; } " HAVE_MACRO_FUNCTION) check_c_source_compiles (" #include int main(void) { struct tm tm; tm.tm_zone; return 0; } " HAVE_STRUCT_TM_TM_ZONE) check_c_source_compiles (" #include int main(void) { struct tm tm; tm.tm_isdst = daylight; return 0; } " HAVE_DAYLIGHT) check_c_source_compiles (" #include int main(void) { printf( __FUNC__); return 0; } " HAVE_MACRO_FUNC) OPTION(WITH_BLUETOOTH "Bluetooth support" ON) if (WITH_BLUETOOTH) if (WIN32 AND NOT CYGWIN) # FIXME: This is currently hardcoded here, maybe there is test? set(BLUETOOTH_FOUND ON) message(STATUS "Using Windows native Bluetooth") set(BLUETOOTH_SEARCH TRUE) elseif(CYGWIN) message(STATUS "Bluetooth is currently not supported in Cygwin") message(STATUS "If you need it, contact us") else (WIN32 AND NOT CYGWIN) find_package (Bluez) if (BLUEZ_FOUND) set(BLUETOOTH_FOUND ON) set(BLUETOOTH_SEARCH TRUE) message(STATUS "Using BlueZ stack") endif (BLUEZ_FOUND) find_package (BSDBluetooth) if (BSD_BLUE_FOUND) set(BLUETOOTH_FOUND ON) message(STATUS "Using BSD Bluetooth stack") check_library_exists(bluetooth sdp_service_search_attribute "" HAVE_SDP_SERVICE_SEARCH_ATTRIBUTE) check_library_exists(bluetooth bt_devinquiry "" HAVE_BT_DEVINQUIRY) if (HAVE_SDP_SERVICE_SEARCH_ATTRIBUTE AND HAVE_BT_DEVINQUIRY) set(BLUETOOTH_SEARCH TRUE) endif (HAVE_SDP_SERVICE_SEARCH_ATTRIBUTE AND HAVE_BT_DEVINQUIRY) endif (BSD_BLUE_FOUND) find_package (OSXBluetooth) if (OSX_BLUE_FOUND) set(BLUETOOTH_FOUND ON) set(BLUETOOTH_SEARCH FALSE) message(STATUS "Using OSX Bluetooth stack") endif (OSX_BLUE_FOUND) endif (WIN32 AND NOT CYGWIN) else (WITH_BLUETOOTH) set(BLUETOOTH_FOUND FALSE) set(BLUETOOTH_INCLUDE_DIR) set(BLUETOOTH_INCLUDES) set(BLUETOOTH_LIBRARY) set(BLUETOOTH_LIBRARIES) endif (WITH_BLUETOOTH) if (BLUETOOTH_FOUND) message(STATUS "Bluetooth support enabled") else (BLUETOOTH_FOUND) if (WITH_BLUETOOTH AND NOT CYGWIN) message("Bluetooth support disabled, please install libbluetooth-dev or equivalent to enable Bluetooth.") endif (WITH_BLUETOOTH AND NOT CYGWIN) endif (BLUETOOTH_FOUND) macro_gammu_option (BLUETOOTH_RF_SEARCHING "Searching for RF channels with Bluetooth stack" ON BLUETOOTH_FOUND BLUETOOTH_SEARCH) if (WITH_BLUETOOTH_RF_SEARCHING) set (BLUETOOTH_RF_SEARCHING ON) endif (WITH_BLUETOOTH_RF_SEARCHING) OPTION(WITH_USB "Native USB support" ON) if (WITH_USB) find_package (LibUSB) endif (WITH_USB) OPTION(WITH_IRDA "IrDA support" ON) if (WITH_IRDA) if (WIN32 AND NOT CYGWIN) # FIXME: This is currently hardcoded here, maybe there is test? set (IRDA_FOUND TRUE) message(STATUS "Using Windows native IrDA") elseif(CYGWIN) message(STATUS "IrDA is currently not supported in Cygwin") message(STATUS "If you need it, contact us") set (IRDA_FOUND FALSE) else (WIN32 AND NOT CYGWIN) check_c_source_compiles ( " #include #include #include #include int main(int argc, char **argv) { return 0; } " IRDA_FOUND ) if (IRDA_FOUND) message(STATUS "Using Linux native IrDA") endif (IRDA_FOUND) endif (WIN32 AND NOT CYGWIN) else (WITH_IRDA) set (IRDA_FOUND FALSE) endif (WITH_IRDA) if (IRDA_FOUND) message(STATUS "IrDA support enabled") endif (IRDA_FOUND) if (MYSQL_FOUND) set (HAVE_MYSQL_MYSQL_H TRUE) if (WIN32) set(WIN_LIB_MYSQL libmysql.dll) endif () endif (MYSQL_FOUND) if (POSTGRES_FOUND) set (HAVE_POSTGRESQL_LIBPQ_FE_H TRUE) if (WIN32) set(WIN_LIB_PGSQL libpq.dll SSLEAY32.DLL LIBEAY32.DLL LIBINTL-8.DLL) endif () endif (POSTGRES_FOUND) set (GAMMU_LIBS "") if (BLUEZ_FOUND) if (NOT "${BLUEZ_LIBRARIES}" STREQUAL "") set (GAMMU_LIBS "${GAMMU_LIBS} -l${BLUEZ_LIBRARIES}") endif (NOT "${BLUEZ_LIBRARIES}" STREQUAL "") endif (BLUEZ_FOUND) if (BSD_BLUE_FOUND) if (NOT "${BSD_BLUE_LIBRARIES}" STREQUAL "") set (GAMMU_LIBS "${GAMMU_LIBS} -l${BSD_BLUE_LIBRARIES}") endif (NOT "${BSD_BLUE_LIBRARIES}" STREQUAL "") endif (BSD_BLUE_FOUND) if (ICONV_FOUND) if (NOT "${ICONV_LIBRARIES}" STREQUAL "") set (GAMMU_LIBS "${GAMMU_LIBS} -l${ICONV_LIBRARIES}") endif (NOT "${ICONV_LIBRARIES}" STREQUAL "") endif (ICONV_FOUND) if (LIBINTL_LIB_FOUND AND LIBINTL_LIBRARIES) set (GAMMU_LIBS "${GAMMU_LIBS} -l${LIBINTL_LIBRARIES}") endif (LIBINTL_LIB_FOUND AND LIBINTL_LIBRARIES) if (LIBUSB_FOUND) if (NOT "${LIBUSB_LIBRARIES}" STREQUAL "") set (GAMMU_LIBS "${GAMMU_LIBS} -l${LIBUSB_LIBRARIES}") endif (NOT "${LIBUSB_LIBRARIES}" STREQUAL "") endif (LIBUSB_FOUND) set (SMSD_LIBS "") if (MYSQL_FOUND) if (NOT "${MYSQL_LIBRARIES}" STREQUAL "") set (SMSD_LIBS "${SMSD_LIBS} -l${MYSQL_LIBRARIES}") endif (NOT "${MYSQL_LIBRARIES}" STREQUAL "") endif (MYSQL_FOUND) if (POSTGRES_FOUND) if (NOT "${POSTGRES_LIBRARY}" STREQUAL "") set (SMSD_LIBS "${SMSD_LIBS} -l${POSTGRES_LIBRARY}") endif (NOT "${POSTGRES_LIBRARY}" STREQUAL "") endif (POSTGRES_FOUND) # Tweak compiler flags if(MSVC) # MSVC needs different flags at all MACRO_TUNE_COMPILER("/W3") # we use old runtime add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) # we use strcpy instead of strcpy_s add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1) # we use ansi API for winsock add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS=1) # The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name add_definitions(-D_CRT_NONSTDC_NO_WARNINGS=1) # Generate PDB data even for release build set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") set(MATH_LIBS "") # Call cmake with "-DMSVC_RUNTIME=static" to link with static runtime libraries configure_msvc_runtime() else(MSVC) set(MATH_LIBS "-lm") endif(MSVC) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_MINGW OR CMAKE_COMPILER_IS_CYGWIN OR CMAKE_COMPILER_IS_GNUCXX OR CLANG_COMPILER) # Check for extra compiler flags we want to use if (NOT GAMMU_VERSION_PATCH LESS 90 OR "$ENV{TRAVIS}" STREQUAL "true") MACRO_TUNE_COMPILER("-Werror") endif (NOT GAMMU_VERSION_PATCH LESS 90 OR "$ENV{TRAVIS}" STREQUAL "true") # # Warnings related flags # MACRO_TUNE_COMPILER("-O2") MACRO_TUNE_COMPILER("-Wall") MACRO_TUNE_COMPILER("-Werror-implicit-function-declaration") MACRO_TUNE_COMPILER("-Wno-deprecated-declarations") MACRO_TUNE_COMPILER("-Wdeclaration-after-statement") MACRO_TUNE_COMPILER("-Wpointer-arith") MACRO_TUNE_COMPILER("-Wfloat-equal") MACRO_TUNE_COMPILER("-Wbad-function-cast") MACRO_TUNE_COMPILER("-Wmissing-format-attribute") MACRO_TUNE_COMPILER("-Wmissing-noreturn") # This should be enabled and only public functions exported, but it is far future # MACRO_TUNE_COMPILER("-Wmissing-prototypes") MACRO_TUNE_COMPILER("-Wpointer-arith") MACRO_TUNE_COMPILER("-Wshadow") MACRO_TUNE_COMPILER("-Wstrict-prototypes") MACRO_TUNE_COMPILER("-Wsign-compare") # We need some typecasting (especially for iconv) # MACRO_TUNE_COMPILER("-Wcast-qual") # Does not work well with default cases for enums MACRO_TUNE_COMPILER("-Wunreachable-code") MACRO_TUNE_COMPILER("-Wno-error=unreachable-code") # Just silent this for now, too much code to fix here MACRO_TUNE_COMPILER("-Wno-pointer-sign") MACRO_TUNE_COMPILER("-Wwrite-strings") MACRO_TUNE_COMPILER("-Wredundant-decls") if (DEBUG) MACRO_TUNE_COMPILER("-fstrict-aliasing") endif (DEBUG) # Check format strings MACRO_TUNE_COMPILER("-Wshadow") MACRO_TUNE_COMPILER("-Wformat=2") MACRO_TUNE_COMPILER("-Wno-format-y2k") MACRO_TUNE_COMPILER("-Wno-format-nonliteral") # Win32 implementation of gettext does not allow us to use so strict warnings if (WIN32 AND NOT CYGWIN) MACRO_TUNE_COMPILER("-Wno-format-nonliteral") MACRO_TUNE_COMPILER("-Wno-format-security") endif (WIN32 AND NOT CYGWIN) # Enable extra warnings MACRO_TUNE_COMPILER("-Wextra") if (NOT CLANG_COMPILER) MACRO_TUNE_COMPILER("-Wunused-but-set-variable") endif (NOT CLANG_COMPILER) # Just silent this for now, too much code to fix here MACRO_TUNE_COMPILER("-Wno-unused-parameter") # # Security related flags # if (NOT CLANG_COMPILER) set (ENABLE_PROTECTION ON CACHE BOOL "Enable compile time protections (stack, read only code, fortify in libc...)") endif (NOT CLANG_COMPILER) if (ENABLE_PROTECTION) # Need to enable -O to make fortify work set (CMAKE_C_FLAGS_DEBUG "-g -O") add_definitions(-D_FORTIFY_SOURCE=2) # Text address randomisation, disabled for now, seems to cause problems # MACRO_TUNE_COMPILER("-fPIE") # MACRO_TUNE_LINKER("-pie") # These do not work on Windows right now if (NOT WIN32) # Stack protector MACRO_TUNE_COMPILER("-fstack-protector") # Mark code read only MACRO_TUNE_LINKER("-Wl,-zrelro") endif (NOT WIN32) endif (ENABLE_PROTECTION) # # Other flags # if (WIN32 AND NOT CYGWIN AND BUILD_SHARED_LIBS) MACRO_TUNE_LINKER("-Wl,--enable-auto-import") endif (WIN32 AND NOT CYGWIN AND BUILD_SHARED_LIBS) MACRO_TUNE_LINKER("-Wl,--as-needed") if (NOT WIN32) set (PIC ON CACHE BOOL "Compile PIC code") if (PIC) MACRO_TUNE_COMPILER("-fPIC") endif (PIC) endif (NOT WIN32) # Specs for MinGW to change msvcrt # This is not supported by MinGW and is broken currently # if (CMAKE_COMPILER_IS_MINGW) # MACRO_TUNE_COMPILER("-specs=${CMAKE_CURRENT_SOURCE_DIR}/cmake/mingw.spec") # add_definitions(-D_MSVCRT_VERSION__=0x090) # endif (CMAKE_COMPILER_IS_MINGW) endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_MINGW OR CMAKE_COMPILER_IS_CYGWIN OR CMAKE_COMPILER_IS_GNUCXX OR CLANG_COMPILER) if(BORLAND) # Borland # Suggests parenthesis MACRO_TUNE_COMPILER("-wprc") # Do not warn about unused params MACRO_TUNE_COMPILER("-w-par") # Warn about unused vars MACRO_TUNE_COMPILER("-wuse") endif(BORLAND) # Define required libraries for gammu library if it is static if (BUILD_SHARED_LIBS) set (GAMMU_PRIVATE_LIBS "" CACHE INTERNAL "Private libraries for gammu library") set (SMSD_PRIVATE_LIBS "" CACHE INTERNAL "Private libraries for gammu smsd library") else (BUILD_SHARED_LIBS) string(REGEX REPLACE "-l(/usr)?(/local)?/lib(64)?/lib([^ ]*).so" "-l\\4" G_LIB "${GAMMU_LIBS}") string(REGEX REPLACE "-l(/usr)?(/local)?/lib(64)?/lib([^ ]*).so" "-l\\4" S_LIB "${SMSD_LIBS}") set (GAMMU_PRIVATE_LIBS "${G_LIB}" CACHE INTERNAL "Private libraries for gammu library") set (SMSD_PRIVATE_LIBS "${S_LIB}" CACHE INTERNAL "Private libraries for gammu smsd library") endif (BUILD_SHARED_LIBS) set (DOCS README.rst ChangeLog COPYING ) if (CMAKE_USE_PTHREADS_INIT) set (HAVE_PTHREAD ON) endif (CMAKE_USE_PTHREADS_INIT) if (UNIX) find_library (MATH_LIBRARIES m) # Install paths if ("${MATH_LIBRARIES}" MATCHES "/lib64/") set (LIB_SUFFIX "64" CACHE STRING "Suffix of library directory (usually 64 or empty)") else ("${MATH_LIBRARIES}" MATCHES "/lib64/") set (LIB_SUFFIX "" CACHE STRING "Suffix of library directory (usually 64 or empty)") endif ("${MATH_LIBRARIES}" MATCHES "/lib64/") endif (UNIX) set (INSTALL_BIN_DIR "bin" CACHE STRING "Path for binaries installation") mark_as_advanced (INSTALL_BIN_DIR) set (INSTALL_LIB_DIR "lib${LIB_SUFFIX}" CACHE STRING "Path for libraries installation") mark_as_advanced (INSTALL_LIB_DIR) set (INSTALL_LIBDATA_DIR "lib${LIB_SUFFIX}" CACHE STRING "Path for libraries data (eg. pkgconfig data) installation") mark_as_advanced (INSTALL_LIBDATA_DIR) set (INSTALL_INC_DIR "include/gammu" CACHE STRING "Path for includes installation") mark_as_advanced (INSTALL_INC_DIR) set (INSTALL_LOC_DIR "share/locale" CACHE STRING "Path for locales installation") mark_as_advanced (INSTALL_LOC_DIR) set (INSTALL_DATA_DIR "share/gammu" CACHE STRING "Path for data installation") mark_as_advanced (INSTALL_DATA_DIR) set (INSTALL_DOC_DIR "share/doc/gammu" CACHE STRING "Path for documentation installation") mark_as_advanced (INSTALL_DOC_DIR) set (INSTALL_MAN_DIR "share/man" CACHE STRING "Path for man pages installation") mark_as_advanced (INSTALL_MAN_DIR) # Phone and protocol configuration # Nokia phones macro_gammu_option (NOKIA_SUPPORT "Nokia support" ON ON ON) macro_gammu_option (MBUS2 "Nokia MBUS2 protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (FBUS2 "Nokia FBUS2 protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (FBUS2DLR3 "Nokia FBUS2DLR3 protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (DKU2PHONET "Nokia DKU2PHONET protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (DKU2AT "Nokia DKU2AT protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (DKU5FBUS2 "Nokia DKU5FBUS2 protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (FBUS2PL2303 "Nokia FBUS2PL2303 protocol" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (FBUS2BLUE "Nokia FBUS2BLUE protocol" ON WITH_NOKIA_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (PHONETBLUE "Nokia PHONETBLUE protocol" ON WITH_NOKIA_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (BLUEFBUS2 "Nokia BLUEFBUS2 protocol" ON WITH_NOKIA_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (BLUEPHONET "Nokia BLUEPHONET protocol" ON WITH_NOKIA_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (IRDAPHONET "Nokia IRDAPHONET protocol" ON WITH_NOKIA_SUPPORT IRDA_FOUND) macro_gammu_option (FBUS2IRDA "Nokia FBUS2IRDA protocol" ON WITH_NOKIA_SUPPORT IRDA_FOUND) macro_gammu_option (NOKIA3320 "Nokia 3320 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (NOKIA650 "Nokia 650 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (NOKIA6110 "Nokia 61xx and compatible phones support" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (NOKIA6510 "Nokia 6510 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (DCT4_CALENDAR_6210 "Force using 6210 frames for calendar for DCT4 phones" OFF WITH_NOKIA_SUPPORT WITH_NOKIA6510) if (WITH_DCT4_CALENDAR_6210) set (GSM_FORCE_DCT4_CALENDAR_6210 TRUE) endif (WITH_DCT4_CALENDAR_6210) macro_gammu_option (NOKIA7110 "Nokia 7110 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (NOKIA9210 "Nokia 9210 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) if (WITH_NOKIA7110 OR WITH_NOKIA9210) set (wITH_71_92 ON) else (WITH_NOKIA7110 OR WITH_NOKIA9210) set (wITH_71_92) endif (WITH_NOKIA7110 OR WITH_NOKIA9210) macro_gammu_option (N71_92INCOMINGINFO "Nokia 62xx/71xx/9xxx incoming call/SMS info" OFF WITH_NOKIA_SUPPORT WITH_71_92) macro_gammu_option (NOKIA3650 "Nokia 3650 and compatible phones support" ON WITH_NOKIA_SUPPORT ON) # AT phones macro_gammu_option (AT_SUPPORT "AT support" ON ON ON) macro_gammu_option (AT "AT protocol" ON WITH_AT_SUPPORT ON) macro_gammu_option (BLUEAT "AT protocol over Bluetooth" ON WITH_AT_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (IRDAAT "AT protocol over IrDA" ON WITH_AT_SUPPORT IRDA_FOUND) macro_gammu_option (ATGEN "AT phones support" ON WITH_AT_SUPPORT ON) macro_gammu_option (ALCATEL_SUPPORT "Alcatel support" ON WITH_AT_SUPPORT ON) macro_gammu_option (ALCABUS "Alcatel protocol" ON WITH_ALCATEL_SUPPORT ON) macro_gammu_option (ALCATEL "Alcatel phones support" ON WITH_ALCATEL_SUPPORT ON) # OBEX phones macro_gammu_option (OBEX_SUPPORT "OBEX compatible phones support" ON ON ON) macro_gammu_option (BLUEOBEX "OBEX protocol over Bluetooth" ON WITH_OBEX_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (IRDAOBEX "OBEX protocol over IrDA" ON WITH_OBEX_SUPPORT IRDA_FOUND) macro_gammu_option (OBEXGEN "Generic OBEX phones support" ON WITH_OBEX_SUPPORT ON) macro_gammu_option (ATOBEX "AT with OBEX phones support" ON WITH_OBEX_SUPPORT WITH_AT_SUPPORT) macro_gammu_option (ATOBEX_AUTO_MODE "Automatic switching to OBEX for AT+MODE capable phones" OFF WITH_ATOBEX_SUPPORT ON) macro_gammu_option (S60_SUPPORT "Symbian phones support (S60)" ON ON ON) macro_gammu_option (GNAPPLET_SUPPORT "Symbian phones support (gnapplet)" ON WITH_NOKIA_SUPPORT ON) macro_gammu_option (BLUEGNAPBUS "GNAPBUS protocol over Bluetooth" ON WITH_GNAPPLET_SUPPORT BLUETOOTH_FOUND) macro_gammu_option (IRDAGNAPBUS "GNAPBUS protocol over IrDA" ON WITH_GNAPPLET_SUPPORT IRDA_FOUND) macro_gammu_option (GNAPGEN "Gnapplet phones support" ON WITH_GNAPPLET_SUPPORT ON) macro_gammu_option (S60 "S60 phones support" ON WITH_S60_SUPPORT ON) # Some generic configurations macro_gammu_option (CELLBROADCAST "Cell Broadcast messages support" ON ON ON) macro_gammu_option (BACKUP "Backup/Restore functions" ON ON ON) # Generate Doxygen file set (DOXYGEN_INPUT "${CMAKE_CURRENT_BINARY_DIR}/include") set (DOXYGEN_INTERNAL_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/libgammu") set (DOXYGEN_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gammu-doc") set (DOXYGEN_INTERNAL_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gammu-internal-doc") if ("${DOXYGEN_DOT_EXECUTABLE}" STREQUAL DOXYGEN_DOT_EXECUTABLE-NOTFOUND) set (HAVE_DOT "NO") set (DOXYGEN_DOT_PATH "") else ("${DOXYGEN_DOT_EXECUTABLE}" STREQUAL DOXYGEN_DOT_EXECUTABLE-NOTFOUND) set (HAVE_DOT "YES") # Strip binary name from variable string (REGEX REPLACE "/dot$" "" DOXYGEN_DOT_PATH "${DOXYGEN_DOT_EXECUTABLE}") endif ("${DOXYGEN_DOT_EXECUTABLE}" STREQUAL DOXYGEN_DOT_EXECUTABLE-NOTFOUND) configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/Doxyfile.cmake" "${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile") configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/Doxyfile-internal.cmake" "${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile-internal") configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/api.desc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/doxygen/api.desc") configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/internals.desc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/doxygen/internals.desc") # Target for generating API documentation add_custom_target (apidoc ${DOXYGEN_EXECUTABLE} doxygen/Doxyfile COMMENT "Generating API documentation") add_custom_target (interndoc ${DOXYGEN_EXECUTABLE} doxygen/Doxyfile-internal COMMENT "Generating internal documentation") # CPP check find_program(CPPCHECK_EXECUTABLE NAMES cppcheck DOC "cppcheck - code checking tool") add_custom_target (cppcheck ${CPPCHECK_EXECUTABLE} -a -f -q "${CMAKE_CURRENT_SOURCE_DIR}/gammu" "${CMAKE_CURRENT_SOURCE_DIR}/smsd" "${CMAKE_CURRENT_SOURCE_DIR}/helper" "${CMAKE_CURRENT_SOURCE_DIR}/libgammu" "${CMAKE_CURRENT_SOURCE_DIR}/tests" "${CMAKE_CURRENT_SOURCE_DIR}/docs/manual/examples" "${CMAKE_CURRENT_SOURCE_DIR}/contrib/smscgi" COMMENT "Checking C code") # Generate pkgconfig file configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/gammu.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cfg/gammu.pc" @ONLY) configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/gammu-smsd.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cfg/gammu-smsd.pc" @ONLY) configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/gammu-uninstalled.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/gammu.pc" @ONLY) configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/gammu-smsd-uninstalled.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/gammu-smsd.pc" @ONLY) # Install instructions # Install Windows libraries if (WIN32 AND NOT CYGWIN) # MySQL if (MYSQL_FOUND) foreach(lib ${WIN_LIB_MYSQL}) ADD_DLL("${lib}" "${MYSQL_LIBRARIES}") endforeach(lib ${WIN_LIB_MYSQL}) endif (MYSQL_FOUND) # PostgreSQL and dependencies if (POSTGRES_FOUND) foreach(lib ${WIN_LIB_PGSQL}) ADD_DLL("${lib}" "${POSTGRES_LIBRARY}") endforeach(lib ${WIN_LIB_PGSQL}) endif (POSTGRES_FOUND) # iconv and dependencies if (ICONV_FOUND) foreach(lib ${WIN_LIB_ICONV}) ADD_DLL("${lib}" "${ICONV_LIBRARIES}") endforeach(lib ${WIN_LIB_ICONV}) endif (ICONV_FOUND) # Gettext and dependencies if (LIBINTL_LIB_FOUND) foreach(lib ${WIN_LIB_INTL}) ADD_DLL("${lib}" "${LIBINTL_LIBRARY}") endforeach(lib ${WIN_LIB_INTL}) endif (LIBINTL_LIB_FOUND) # Curl and dependencies if (CURL_FOUND) foreach(lib ${WIN_LIB_CURL}) ADD_DLL("${lib}" "${CURL_LIBRARIES}") endforeach(lib ${WIN_LIB_CURL}) endif (CURL_FOUND) # Glib and dependencies if (Glib_FOUND) foreach(lib ${WIN_LIB_GLIB}) ADD_DLL("${lib}" "${Glib_LIBRARIES}") endforeach(lib ${WIN_LIB_GLIB}) endif (Glib_FOUND) install (FILES ${WIN32_INSTALL_DLL} DESTINATION "${INSTALL_BIN_DIR}" COMPONENT dlls ) endif (WIN32 AND NOT CYGWIN) install ( FILES "${CMAKE_CURRENT_BINARY_DIR}/cfg/gammu.pc" "${CMAKE_CURRENT_BINARY_DIR}/cfg/gammu-smsd.pc" DESTINATION "${INSTALL_LIBDATA_DIR}/pkgconfig" COMPONENT "pkgconfig" ) # We want some tests. Even when cross compiling for Windows tests can be # done in Wine. This is better than nothing, even though Wine is a bit # more fault tolerant when linking DLLs. # Testing and dashboard include(CTest) enable_testing() include(Dart) # Packaging support set (CPACK_PACKAGE_NAME "Gammu") set (CPACK_PACKAGE_VERSION "${GAMMU_VERSION}") set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Gammu All Mobile Management Utilities ${GAMMU_VERSION}") if (WIN32) set (CPACK_PACKAGE_VENDOR "Michal Cihar") set (CPACK_PACKAGE_CONTACT "Michal Cihar ") else () set (CPACK_PACKAGE_VENDOR "Michal Čihař") set (CPACK_PACKAGE_CONTACT "Michal Čihař ") endif () set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/installer/description.txt") # On Mac OS, the file needs .txt extension, give it to them configure_file("${CMAKE_CURRENT_SOURCE_DIR}/README.rst" "${CMAKE_CURRENT_BINARY_DIR}/readme.txt" COPYONLY) set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_BINARY_DIR}/readme.txt") set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/installer/license.txt") set (CPACK_PACKAGE_VERSION_MAJOR "${GAMMU_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${GAMMU_VERSION_MINOR}") set (CPACK_PACKAGE_VERSION_PATCH "${GAMMU_VERSION_PATCH}") if (WIN32 AND NOT CYGWIN) set (CPACK_SYSTEM_NAME "Windows" CACHE STRING "Windows package name") endif (WIN32 AND NOT CYGWIN) # RPM set (CPACK_RPM_PACKAGE_LICENSE "GPLv2") if (EXISTS "/etc/SuSE-release") set (CPACK_RPM_PACKAGE_GROUP "Hardware/Mobile") else (EXISTS "/etc/SuSE-release") set (CPACK_RPM_PACKAGE_GROUP "Applications/Communications") endif (EXISTS "/etc/SuSE-release") # Components set (CPACK_COMPONENTS_ALL gammu library smsd headers utils manpages docs pkgconfig symbian examples manual) if (WIN32 AND NOT CYGWIN AND WIN32_INSTALL_DLL) list (APPEND CPACK_COMPONENTS_ALL dlls) endif (WIN32 AND NOT CYGWIN AND WIN32_INSTALL_DLL) set (CPACK_COMPONENT_GAMMU_DISPLAY_NAME "Gammu Application") set (CPACK_COMPONENT_SMSD_DISPLAY_NAME "Gammu SMS Daemon") set (CPACK_COMPONENT_LIBRARY_DISPLAY_NAME "Gammu Library") set (CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C Headers") set (CPACK_COMPONENT_UTILS_DISPLAY_NAME "Utility Scripts") set (CPACK_COMPONENT_MANPAGES_DISPLAY_NAME "Manual Pages") set (CPACK_COMPONENT_DOCS_DISPLAY_NAME "User Documentation") set (CPACK_COMPONENT_PKGCONFIG_DISPLAY_NAME "Pkg-config Data") set (CPACK_COMPONENT_SYMBIAN_DISPLAY_NAME "Applet for Symbian Phones") set (CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Examples Using Gammu") set (CPACK_COMPONENT_MANUAL_DISPLAY_NAME "Gammu Manual") set (CPACK_COMPONENT_MEDIA_DISPLAY_NAME "Media Files") set (CPACK_COMPONENT_DLLS_HIDDEN TRUE) set (CPACK_COMPONENT_DLLS_REQUIRED TRUE) set (CPACK_COMPONENT_LIBRARY_REQUIRED TRUE) set (CPACK_COMPONENT_GAMMU_DESCRIPTION "The gammu.exe program.") set (CPACK_COMPONENT_SMSD_DESCRIPTION "Gammu SMS Daemon which automatically sends and receives messages.") set (CPACK_COMPONENT_LIBRARY_DESCRIPTION "Gammu library.") set (CPACK_COMPONENT_HEADERS_DESCRIPTION "C headers for development own programs using Gammu library.") set (CPACK_COMPONENT_UTILS_DESCRIPTION "Utility scripts, mostly written using bourne shell, which you need to install on your own.") set (CPACK_COMPONENT_MANPAGES_DESCRIPTION "Manual pages for programs and configuration files.") set (CPACK_COMPONENT_DOCS_DESCRIPTION "User documentation in text files.") set (CPACK_COMPONENT_PKGCONFIG_DESCRIPTION "Data for pkg-config program (automatic finding of compiler parameters for libraries).") set (CPACK_COMPONENT_SYMBIAN_DESCRIPTION "Applet for Symbian phones, install it to phone to communicate with them using Gammu.") set (CPACK_COMPONENT_EXAMPLES_DESCRIPTION "Examples showing how to use Gammu, in PHP, Perl or C.") set (CPACK_COMPONENT_MANUAL_DESCRIPTION "User and Developer Manual") set (CPACK_COMPONENT_MEDIA_DESCRIPTION "Various media files which can be used with Gammu.") set (CPACK_COMPONENT_GROUP_RUNTIME_DESCRIPTION "Programs and libraries for general usage.") set (CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION "Headers and documentation used for development using Gammu.") set (CPACK_COMPONENT_GROUP_DOCUMENTATION_DESCRIPTION "Gammu documentation and usage examples.") set(CPACK_COMPONENT_GAMMU_DEPENDS library) if (WIN32 AND NOT CYGWIN AND WIN32_INSTALL_DLL) set(CPACK_COMPONENT_LIBRARY_DEPENDS dlls) endif (WIN32 AND NOT CYGWIN AND WIN32_INSTALL_DLL) set(CPACK_COMPONENT_SMSD_DEPENDS library) set(CPACK_COMPONENT_HEADERS_DEPENDS library) set(CPACK_COMPONENT_UTILS_DEPENDS gammu) set(CPACK_COMPONENT_PKGCONFIG_DEPENDS headers) set (CPACK_COMPONENT_GAMMU_GROUP "Runtime") set (CPACK_COMPONENT_SMSD_GROUP "Runtime") set (CPACK_COMPONENT_UTILS_GROUP "Runtime") set (CPACK_COMPONENT_LIBRARY_GROUP "Runtime") set (CPACK_COMPONENT_HEADERS_GROUP "Development") set (CPACK_COMPONENT_PKGCONFIG_GROUP "Development") set (CPACK_COMPONENT_MANPAGES_GROUP "Documentation") set (CPACK_COMPONENT_DOCS_GROUP "Documentation") set (CPACK_COMPONENT_EXAMPLES_GROUP "Documentation") set (CPACK_COMPONENT_MANUAL_GROUP "Documentation") set (CPACK_COMPONENT_MEDIA_GROUP "Documentation") set (CPACK_ALL_INSTALL_TYPES Full Standard Developer) set (CPACK_COMPONENT_GAMMU_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_SMSD_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_LIBRARY_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full) set (CPACK_COMPONENT_UTILS_INSTALL_TYPES Full) set (CPACK_COMPONENT_MANPAGES_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_DOCS_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_PKGCONFIG_INSTALL_TYPES Developer Full) set (CPACK_COMPONENT_SYMBIAN_INSTALL_TYPES Standard Developer Full) set (CPACK_COMPONENT_EXAMPLES_INSTALL_TYPES Developer Full) set (CPACK_COMPONENT_MANUAL_INSTALL_TYPES Developer Full) set (CPACK_COMPONENT_MEDIA_INSTALL_TYPES Full) if (WIN32 AND NOT CYGWIN) set (CPACK_PACKAGE_INSTALL_DIRECTORY "Gammu ${GAMMU_VERSION}") set (CPACK_NSIS_DISPLAY_NAME "Gammu ${GAMMU_VERSION}") set (CPACK_NSIS_HELP_LINK "https://wammu.eu/support/") set (CPACK_NSIS_URL_INFO_ABOUT "https://wammu.eu/gammu/") set (CPACK_NSIS_CONTACT "michal@cihar.com") set (CPACK_NSIS_MODIFY_PATH ON) SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait \\\"$INSTDIR\\\\bin\\\\gammu-smsd.exe -e \\\" ") SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " ExecWait \\\"$INSTDIR\\\\bin\\\\gammu-smsd.exe -E \\\" ") else (WIN32 AND NOT CYGWIN) set (CPACK_STRIP_FILES "gammu") set (CPACK_SOURCE_STRIP_FILES "") endif (WIN32 AND NOT CYGWIN) include (CPack) # Test files for Gammu set (RINGTONE_TEST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/contrib/media/axelf.txt) set (LOGO_TEST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/contrib/media/aliens.nlm) # Transverse to dirs add_subdirectory(include) add_subdirectory(libgammu) add_subdirectory(helper) add_subdirectory(tests) add_subdirectory(smsd) add_subdirectory(gammu) add_subdirectory(gammu-detect) add_subdirectory(locale) add_subdirectory(utils) option(INSTALL_DOC "Install documentation" ON) if(INSTALL_DOC) install ( FILES ${DOCS} DESTINATION "${INSTALL_DOC_DIR}" COMPONENT "docs" ) add_subdirectory(docs/config) add_subdirectory(docs/manual) add_subdirectory(docs/examples) add_subdirectory(docs/sql) add_subdirectory(docs/man) endif(INSTALL_DOC) add_subdirectory(contrib)