| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 |
- cmake_minimum_required ( VERSION 3.17 )
- FOREACH (policy CMP0012 CMP0013 CMP0014 CMP0048 CMP0074 CMP0077 CMP0091 CMP0110)
- IF (POLICY ${policy})
- CMAKE_POLICY ( SET ${policy} NEW )
- ENDIF ()
- ENDFOREACH ()
- if (DEFINED ENV{CMAKE_INTERPROCEDURAL_OPTIMIZATION})
- set ( CMAKE_INTERPROCEDURAL_OPTIMIZATION $ENV{CMAKE_INTERPROCEDURAL_OPTIMIZATION} )
- endif ()
- set ( CMAKE_ENABLE_EXPORTS ON )
- set ( _CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} )
- PROJECT ( MANTICORE )
- # sometimes CMAKE_BUILD_TYPE became set after PROJECT statement, undo it.
- if (NOT _CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE)
- unset ( CMAKE_BUILD_TYPE CACHE )
- endif ()
- SET ( CMAKE_CXX_STANDARD 17 )
- SET ( MANTICORE_CMAKE_DIR "${MANTICORE_SOURCE_DIR}/cmake" )
- SET ( CMAKE_MODULE_PATH "${MANTICORE_SOURCE_DIR}/cmake" )
- SET ( MANTICORE_MODULE_PATH "${CMAKE_MODULE_PATH}" )
- include ( init_cache_settings ) # set libs_bundle, cacheb, diagnostic. etc.
- include ( helpers )
- # Set a default build type for single-configuration CMake generators if no build type is set.
- get_property ( isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG )
- if (NOT isMultiConfig AND NOT CMAKE_BUILD_TYPE)
- set ( CMAKE_BUILD_TYPE RelWithDebInfo )
- message ( STATUS "Automatically set build type to RelWithDebInfo since no other provided" )
- endif ()
- if (WIN32 AND WIN_BUNDLE)
- list ( APPEND CMAKE_PREFIX_PATH "${WIN_BUNDLE}" )
- set ( CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE )
- endif ()
- if (NOT DEFINED BUILD_TAG AND DEFINED ENV{BUILD_TAG})
- set ( BUILD_TAG $ENV{BUILD_TAG} CACHE STRING "The tag which will be added to build" )
- elseif (NOT DEFINED BUILD_TAG)
- set ( BUILD_TAG "" CACHE STRING "The tag which will be added to build" )
- endif()
- set ( PACKAGE_NAME "manticore" )
- set ( COMPANY_NAME "Manticore Software LTD" )
- set ( CPACK_PACKAGE_NAME "${PACKAGE_NAME}" )
- include ( setup_distribution_build ) # process PACK, DISTR_BUILD and ENV{DISTR}
- include ( FeatureSummary )
- # Option to build Source RPMs (SRPMs) - provides instructions for proper SRPM generation
- set ( BUILD_SRPMS OFF CACHE BOOL "Show instructions for building Source RPMs (SRPMs)" )
- if (BUILD_SRPMS)
- set ( CPACK_RPM_PACKAGE_SOURCES ON )
- message ( STATUS "SRPM generation requested - will provide instructions for proper SRPM creation" )
- endif ()
- add_feature_info ( "SRPM generation" BUILD_SRPMS "Show instructions for building Source RPM packages" )
- # cast away too old gcc compiler (Minspec is 4.7.2)
- if (CXX_COMPILER_ID STREQUAL GNU AND CXX_COMPILER_VERSION VERSION_LESS 4.7.2)
- message ( FATAL_ERROR "Gcc version error. Minspec is 4.7.2" )
- endif ()
- # Collect string information which will be included into binaries
- include ( banner )
- bannervar ( DISTR_BUILD )
- add_library ( lextra INTERFACE ) # main interface lib to collect all build-wide libs and options
- # Looking for threads library
- set ( THREADS_PREFER_PTHREAD_FLAG ON )
- find_package ( Threads REQUIRED )
- target_link_libraries ( lextra INTERFACE Threads::Threads )
- if (QFUZZER)
- if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- target_compile_options ( lextra INTERFACE -g -fsanitize=address,fuzzer )
- target_compile_definitions ( lextra INTERFACE DISABLE_MEMROUTINES=1 )
- set ( DISABLE_MEMROUTINES ON CACHE BOOL "If the build is broken because new/delete override, this option will disable the overriding" FORCE )
- else()
- message(FATAL_ERROR "QFUZZER requires Clang compiler")
- endif()
- endif()
- # Checking for specific headers
- include ( CheckIncludeFile )
- # that part is safe on windows, however these libs are absent there, so no reason to spend time on them
- if (NOT WIN32)
- # Checking if mincore has unsigned 3-rd param
- include ( mincore_test )
- add_lib_for ( getaddrinfo_a anl lextra )
- add_lib_for ( setsockopt socket lextra )
- add_lib_for ( getaddrinfo "nsl;socket;resolv" lextra )
- add_lib_for ( clock_gettime rt lextra )
- add_lib_for ( logf m lextra )
- set ( CMAKE_REQUIRED_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} )
- check_function_exists ( poll HAVE_POLL )
- check_function_exists ( pthread_mutex_timedlock HAVE_PTHREAD_MUTEX_TIMEDLOCK )
- check_function_exists ( pthread_cond_timedwait HAVE_PTHREAD_COND_TIMEDWAIT )
- check_function_exists ( pread HAVE_PREAD )
- check_function_exists ( backtrace HAVE_BACKTRACE )
- check_function_exists ( backtrace_symbols HAVE_BACKTRACE_SYMBOLS )
- check_function_exists ( mremap HAVE_MREMAP )
- check_function_exists ( eventfd HAVE_EVENTFD )
- check_function_exists ( kqueue HAVE_KQUEUE )
- check_function_exists ( pthread_getname_np HAVE_PTHREAD_GETNAME_NP )
- check_function_exists ( getrlimit HAVE_GETRLIMIT )
- check_function_exists ( setrlimit HAVE_SETRLIMIT )
- check_function_exists ( epoll_ctl HAVE_EPOLL )
- # Checking for few other flags
- include ( CheckSymbolExists )
- check_symbol_exists ( F_SETLKW "fcntl.h" HAVE_F_SETLKW )
- check_symbol_exists ( SO_REUSEPORT "sys/types.h;sys/socket.h" HAVE_SO_REUSEPORT )
- check_symbol_exists ( malloc_trim "malloc.h" HAVE_MALLOC_TRIM )
- check_symbol_exists ( malloc_stats "malloc.h" HAVE_MALLOC_STATS )
- # Checking for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP flag
- include ( check_rwlock_prefer_writer )
- # Check availabiliby of pthread_setname_np and whether it pick 1 or 2 params
- include ( check_vitable_pthread_setname_np )
- set ( STATIC_BINARY OFF CACHE BOOL "Produce statically linked ELF" )
- add_feature_info ( Static STATIC_BINARY "make pure static build undependent of any local libraries" )
- endif ()
- if (STATIC_BINARY)
- # options for clang/gcc c and c++
- target_compile_options ( lextra INTERFACE $<${ONLYGNUCLANGC_CXX}:-static> )
- set ( HAVE_DLOPEN 0 CACHE BOOL "" FORCE )
- set ( HAVE_GETADDRINFO_A 0 CACHE BOOL "" FORCE )
- set ( WITH_ODBC 0 CACHE BOOL "" FORCE )
- set ( WITH_MYSQL 0 CACHE BOOL "" FORCE )
- set ( WITH_POSTGRESQL 0 CACHE BOOL "" FORCE )
- set ( WITH_GALERA 0 CACHE BOOL "" FORCE )
- set ( WITH_SSL 0 CACHE BOOL "" FORCE )
- set ( WITH_ZSTD 0 CACHE BOOL "" FORCE )
- set ( WITH_CURL 0 CACHE BOOL "" FORCE )
- SET ( BUILD_TESTING 0 CACHE BOOL "" FORCE )
- elseif (NOT WIN32)
- if (CMAKE_DL_LIBS) # CMAKE internal, usually '-ldl' on most UNIX machines
- target_link_libraries ( lextra INTERFACE ${CMAKE_DL_LIBS} )
- endif ()
- set ( CMAKE_REQUIRED_LIBRARIES "${CMAKE_DL_LIBS}" )
- check_symbol_exists ( dlopen "dlfcn.h" HAVE_DLOPEN )
- else ()
- set ( HAVE_DLOPEN 1 CACHE BOOL "Use emulated dlopen" FORCE )
- endif ()
- include ( TestBigEndian ) # fixme! That is deprecated in cmake 3.20 in favor to CMAKE_<LANG>_BYTE_ORDER var
- test_big_endian ( USE_BIG_ENDIAN )
- target_compile_options ( lextra INTERFACE $<$<COMPILE_LANG_AND_ID:CXX,MSVC>:-D_CRT_SECURE_NO_WARNINGS -wd4996 -wd4706 -wd4244 -wd4702 -wd4577> )
- include ( CheckFunctionExists )
- check_function_exists ( strnlen HAVE_STRNLEN )
- # Checking for atomic function
- include ( check_atomic_intrinsics )
- set ( DISABLE_MEMROUTINES OFF CACHE BOOL "If the build is broken because new/delete override, this option will disable the overriding" )
- mark_as_advanced ( DISABLE_MEMROUTINES )
- # Option USE_SYSLOG
- check_include_file ( "syslog.h" HAVE_SYSLOG_H )
- set ( USE_SYSLOG ${HAVE_SYSLOG_H} CACHE BOOL "compile with possibility to use syslog for logging" )
- bannervar ( USE_SYSLOG )
- # options for clang/gcc c and c++
- target_compile_options ( lextra INTERFACE $<${ONLYGNUCLANGC_CXX}:-D_FILE_OFFSET_BITS=64 -Wall -Wstrict-aliasing> )
- target_compile_options ( lextra INTERFACE $<${CLANGWIN}:-Wstrict-aliasing -Wno-format -Wno-uninitialized-const-reference -Wno-unneeded-internal-declaration
- -Wno-deprecated-declarations -Wno-implicit-const-int-float-conversion -Wno-missing-braces -Wno-unused-function> )
- # disable rtti
- target_compile_options ( lextra INTERFACE $<${ONLYGNUCLANGCXX}:-fno-rtti>$<${MSCXX}:/GR-> ) # no rtti
- if (WIN32)
- target_compile_definitions ( lextra INTERFACE
- _CRT_SECURE_NO_DEPRECATE=1
- _CRT_NONSTDC_NO_DEPRECATE=1
- )
- # that is necessary only for IDE correct highlighting. Note, that is only global (not target-located) definitions, global-wide
- # add_compile_definitions ( _WIN32=1 )
- endif()
- if (COVERAGE_TEST)
- target_compile_options ( lextra INTERFACE $<${ONLYGNUCLANGC_CXX}:-fprofile-arcs -ftest-coverage> )
- target_link_options ( lextra INTERFACE
- $<$<LINK_LANG_AND_ID:CXX,GNU>:-lgcov --coverage>
- $<$<LINK_LANG_AND_ID:C,GNU>:-lgcov --coverage>
- $<$<LINK_LANG_AND_ID:CXX,Clang,AppleClang>: --coverage>
- $<$<LINK_LANG_AND_ID:C,Clang,AppleClang>: --coverage>
- )
- endif (COVERAGE_TEST)
- # options for clang in C++
- target_compile_options ( lextra INTERFACE $<${CLANGCXX}:
- -Wno-deprecated-register -Wno-missing-exception-spec -Wno-implicit-exception-spec-mismatch -Wno-invalid-offsetof -Wc++11-narrowing> )
- # Checking for unaligned RAM access
- if (CMAKE_CROSSCOMPILING)
- string ( TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _PROC )
- if (_PROC MATCHES "^(i.86|x86(_64)?)$"
- OR _PROC STREQUAL amd64
- OR _PROC STREQUAL arm64
- OR _PROC STREQUAL aarch64
- OR _PROC STREQUAL s390x)
- set ( UNALIGNED_RAM_ACCESS_EXITCODE "0" CACHE STRING "Result from TRY_RUN" )
- set ( UNALIGNED_RAM_ACCESS_EXITCODE__TRYRUN_OUTPUT "" CACHE STRING "Output from TRY_RUN" )
- endif ()
- endif ()
- include ( check_unaligned_ram_access )
- option ( USE_SMALLALLOC "Use 'small allocator' derived from loki lib. Bench! Glibc allocator now is fast enough!" )
- bannervar ( WITH_SMALLALLOC )
- mark_as_advanced ( WITH_SMALLALLOC )
- #check galera, as it is not available on win, to fail early
- if (WIN32)
- if (WITH_GALERA)
- message ( FATAL_ERROR "Galera is not supported on win; reconfigure with WITH_GALERA=FALSE" )
- endif ()
- else ()
- include ( GetGALERA )
- if (WITH_GALERA)
- cache_galera_module_name () # write GALERA_SONAME as var to cache
- endif ()
- diag ( WITH_GALERA )
- bannervar ( WITH_GALERA )
- endif ()
- # Check for RE2 build
- set ( WITH_RE2_FORCE_STATIC 1 CACHE BOOL "force to compile re2 from sources" )
- with_get ( re2 "RE2" "a regular expression library" )
- # Check for Libstemmer build
- set ( WITH_STEMMER_FORCE_STATIC 1 CACHE BOOL "force to compile stemmer from sources" )
- with_get ( stemmer "Stemmer" "stemming library (Snowball)" )
- get_dep ( nlohmann_json NLJSON "JSON for Modern C++ library" )
- get_dep ( uni-algo UniAlgo "unicode algorithm implementation for C/C++" )
- # Check for ICU build
- set ( WITH_ICU_FORCE_STATIC 1 CACHE BOOL "force to compile ICU from sources" )
- if (STATIC_BINARY)
- set ( WITH_ICU_FORCE_STATIC ON CACHE BOOL "force to compile ICU from sources" FORCE )
- set ( WITH_ICU_FORCE_BUILD ON )
- endif ()
- with_get ( icu "ICU" "International Components for Unicode" )
- include ( GetCCTZ )
- target_link_libraries ( lextra INTERFACE cctz::cctz )
- include ( GetxxHash )
- target_link_libraries ( lextra INTERFACE xxHash::xxhash )
- with_get ( jieba "Jieba" "Chinese text segmentation tool" )
- # Support for OpenSSL
- set ( OPENSSL_USE_STATIC_LIBS ON )
- include ( GetSSL )
- with_menu_comp ( OpenSSL SSL "OpenSSL" "for encrypted networking" )
- win_install_c ( OpenSSL SSL daemon )
- trace ( OpenSSL::Crypto )
- # Support for ZLIB
- with_menu ( ZLIB "zlib" "for compressed data and networking" )
- win_install ( ZLIB common )
- with_menu ( ZSTD "libzstd" "for compressed networking" )
- dl_package ( ZSTD "zstd" )
- win_install ( ZSTD daemon )
- with_menu_libname ( CURL libcurl "libCURL" "for enhanced network communication" )
- dl_package_comp ( CURL libcurl "curl" )
- win_install_lib ( CURL libcurl daemon )
- # ODBC and it's dynamic linking
- with_menu ( ODBC "ODBC/UnixODBC/iODBC" "for indexing MSSQL (windows) and generic ODBC sources with indexer" )
- dl_package ( ODBC "ODBC/UnixODBC/iODBC" )
- # EXPAT and it's dynamic linking
- with_menu ( EXPAT "expat" "for indexing xmlpipe sources with indexer" )
- dl_package ( EXPAT "expat" )
- win_install ( EXPAT common )
- # test for ICONV
- if (WITH_EXPAT)
- with_menu ( Iconv "iconv" "for support different encodings when indexing xmlpipe sources with indexer" )
- if (Iconv_IS_BUILT_IN)
- set_target_properties ( Iconv::Iconv PROPERTIES INTERFACE_COMPILE_DEFINITIONS LIBICONV_PLUG )
- else ()
- dl_package ( Iconv "iconv" )
- win_install ( Iconv common )
- endif ()
- include ( check_const_iconv )
- diag ( Iconv_IS_BUILT_IN )
- endif ()
- # MYSQL and it's dynamic linking
- set ( WITH_STATIC_MYSQL OFF CACHE BOOL "link to mysql library statically" )
- if (WITH_STATIC_MYSQL)
- set ( MYSQL_USE_STATIC_LIBS ON )
- endif ()
- with_menu ( Mysql "mysql" "for indexing mysql sources with indexer" )
- dl_package ( Mysql "mysql" )
- # roll-back to 'unversioned' mysql dylib on macos (#2997)
- if (CMAKE_SYSTEM_NAME STREQUAL Darwin)
- if (TARGET Mysql::Mysql_ld)
- if ( DL_MYSQL )
- GET_FILENAME_COMPONENT ( __mysql_21_dylib_name ${MYSQL_LIB} NAME )
- get_target_property ( _mysql_dylib Mysql::Mysql LOCATION )
- GET_FILENAME_COMPONENT ( __mysql_dylib_name ${_mysql_dylib} NAME )
- if ( NOT __mysql_21_dylib_name STREQUAL ${__mysql_dylib_name} )
- GET_FILENAME_COMPONENT ( __mysql_dir ${MYSQL_LIB} DIRECTORY )
- set ( MYSQL_LIB "${__mysql_dir}/${__mysql_dylib_name}" CACHE FILEPATH "Library file of Mysql" FORCE )
- infomsg ( "Mysql lib name fixed from ${__mysql_21_dylib_name} to ${__mysql_dylib_name} (${MYSQL_LIB})" )
- endif()
- endif ()
- endif ()
- endif ()
- win_install ( Mysql indexer )
- # PostgreSQL and it's dynamic linking
- with_menu ( PostgreSQL "pgsql" "for indexing postgresql sources with indexer" )
- dl_package ( PostgreSQL "pgsql" )
- win_install ( PostgreSQL indexer )
- # Storing compiler version
- set ( COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}" )
- diag ( COMPILER )
- # Storing system name
- set ( HOST_SYSTEM "${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_PROCESSOR}" )
- set ( TARGET_SYSTEM "${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}" )
- set ( HOST_DISTRO "${HOST_SYSTEM}" )
- set ( TARGET_DISTRO "${TARGET_SYSTEM}" )
- if (DISTR)
- set ( HOST_DISTRO "${HOST_DISTRO} (${DISTR})" )
- set ( TARGET_DISTRO "${TARGET_DISTRO} (${DISTR})" )
- endif ()
- if (CMAKE_CROSSCOMPILING)
- if (HOST_SYSTEM STREQUAL "${TARGET_SYSTEM}")
- SET ( OS_UNAME "${HOST_DISTRO} (cross-compiled)" )
- else ()
- SET ( OS_UNAME "${HOST_SYSTEM} for ${TARGET_DISTRO}" )
- endif ()
- else ()
- SET ( OS_UNAME "${HOST_DISTRO}" )
- endif ()
- diag ( OS_UNAME )
- diag ( SPLIT )
- configure_file ( "LICENSE" "${MANTICORE_BINARY_DIR}/LICENSE" COPYONLY )
- # Common all-packages info
- include ( ${MANTICORE_SOURCE_DIR}/sphinxrev.cmake )
- include ( CommonInfo )
- include( builds/VersionDeps )
- message("EXECUTOR image: manticoresearch/manticore-executor:${EXECUTOR_VERNUM}")
- # set final paths for build
- set ( only_set_paths ON )
- include ( SetBuildType )
- diag ( installed )
- if (NOT installed) # GNUInstallDirs wasn't yet included...
- include ( GNUInstallDirs )
- SET ( LOCALDATADIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}" ) # will be used also in the app
- if (WIN32)
- set ( CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc" )
- SET ( FULL_SHARE_DIR "${CMAKE_INSTALL_FULL_DATADIR}" )
- SET ( CMAKE_INSTALL_FULL_LOCALLIBDIR "usr/local/lib" )
- install ( DIRECTORY api doc contrib DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT common )
- install ( FILES example.sql DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT tools )
- install ( DIRECTORY misc/stopwords DESTINATION ${CMAKE_INSTALL_DATADIR} COMPONENT common )
- install ( FILES LICENSE INSTALL manticore.conf.in DESTINATION . COMPONENT common )
- install ( DIRECTORY DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR}/log COMPONENT searchd )
- install ( DIRECTORY DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR} COMPONENT common )
- if (WITH_ICU AND WITH_ICU_FORCE_STATIC)
- install_icudata ( ${CMAKE_INSTALL_DATADIR}/icu )
- endif ()
- else ()
- set ( CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/manticore" )
- configure_config ( lib/manticore )
- SET ( FULL_SHARE_DIR "${CMAKE_INSTALL_FULL_DATADIR}/manticore" )
- SET ( CMAKE_INSTALL_FULL_LOCALLIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}" )
- install ( FILES ${MANTICORE_BINARY_DIR}/manticore.conf DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/manticoresearch COMPONENT common )
- install ( DIRECTORY misc/stopwords DESTINATION ${CMAKE_INSTALL_DATADIR}/manticore COMPONENT common )
- install ( DIRECTORY DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR}/lib/manticore COMPONENT common )
- install ( DIRECTORY DESTINATION ${CMAKE_INSTALL_RUNSTATEDIR}/manticore COMPONENT searchd )
- install ( DIRECTORY DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR}/log/manticore COMPONENT searchd )
- if (WITH_ICU AND WITH_ICU_FORCE_STATIC)
- install_icudata ( ${CMAKE_INSTALL_DATADIR}/manticore/icu )
- endif ()
- endif ()
- endif ()
- set ( CPACK_RPM_COMPONENT_INSTALL 1 )
- set ( CPACK_DEB_COMPONENT_INSTALL 1 )
- set ( CPACK_ARCHIVE_COMPONENT_INSTALL 1 )
- bannervar ( LOCALDATADIR )
- bannervar ( FULL_SHARE_DIR )
- set ( CPACK_PROJECT_CONFIG_FILE "${MANTICORE_BINARY_DIR}/config/CPackOptions.cmake" )
- set ( DEFAULT_CTEST_CONFIGURATION_TYPE "Debug" )
- include ( CTest )
- add_subdirectory ( src )
- if (BUILD_TESTING)
- add_subdirectory ( test )
- if (NOT TEST_SPECIAL_EXTERNAL)
- add_subdirectory ( api/libsphinxclient )
- endif ()
- endif ()
- # run setBuildType again, full pass. Select distribution build and install rules for most of the files
- if (installed)
- set ( only_set_paths OFF )
- include ( SetBuildType )
- endif ()
- cmake_print_variables ( CMAKE_INSTALL_PREFIX )
- foreach (var BINDIR SBINDIR LIBEXECDIR SYSCONFDIR SHAREDSTATEDIR LOCALSTATEDIR RUNSTATEDIR LIBDIR INCLUDEDIR OLDINCLUDEDIR DATAROOTDIR DATADIR INFODIR LOCALEDIR MANDIR DOCDIR LOCALLIBDIR)
- cmake_print_variables ( CMAKE_INSTALL_${var} CMAKE_INSTALL_FULL_${var} )
- endforeach ()
- # Configure CPack source packaging for SRPM generation
- set ( CPACK_SOURCE_GENERATOR "RPM" )
- set ( CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}" )
- # For source RPMs: Override the make command to use cmake --build instead
- # This automatically handles any generator (Unix Makefiles, Ninja, etc.)
- if (CPACK_SOURCE_GENERATOR STREQUAL "RPM" OR CPACK_RPM_PACKAGE_SOURCES)
- set ( CPACK_RPM_SPEC_MORE_DEFINE "${CPACK_RPM_SPEC_MORE_DEFINE}
- %global __make cmake --build . --parallel")
- endif()
- # Configure source directories for debuginfo packages
- # This is required when debuginfo packaging is enabled
- set ( CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR};${CMAKE_BINARY_DIR}" )
- if (NOT CPack_CMake_INCLUDED)
- include ( CPack )
- endif ()
- cpack_add_component ( server GROUP main )
- cpack_add_component ( searchd GROUP main )
- cpack_add_component ( common GROUP main )
- cpack_add_component ( tools GROUP main )
- cpack_add_component ( meta )
- cpack_add_component ( devel GROUP main )
- cpack_add_component ( converter GROUP helpers )
- cpack_add_component_group ( main EXPANDED )
- cpack_add_component_group ( helpers EXPANDED )
- if (WITH_ICU)
- cpack_add_component ( icudata )
- endif ()
- #if (WITH_JIEBA)
- # cpack_add_component ( jiebadicts )
- #endif ()
- if (WIN32)
- cpack_add_component ( runtime GROUP main )
- endif ()
- #feature_summary (
- # INCLUDE_QUIET_PACKAGES
- # DESCRIPTION "Enabled Features1:"
- # VAR enabledFeaturesText
- # WHAT ALL)
- #message (STATUS "${enabledFeaturesText}")
- feature_summary ( WHAT ENABLED_FEATURES INCLUDE_QUIET_PACKAGES DESCRIPTION "Enabled features compiled in:" )
- feature_summary ( WHAT RUNTIME_PACKAGES_FOUND INCLUDE_QUIET_PACKAGES DESCRIPTION "Available runtime features:" )
- #feature_summary (WHAT ALL DESCRIPTION "Enabled ALL features4:")
|