cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR) project(BinPAC C CXX) include(cmake/CommonCMakeConfig.cmake) file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" BINPAC_VERSION LIMIT_COUNT 1) string(REPLACE "." " " _version_numbers ${BINPAC_VERSION}) separate_arguments(_version_numbers) list(GET _version_numbers 0 BINPAC_VERSION_MAJOR) list(GET _version_numbers 1 BINPAC_VERSION_MINOR) string(REGEX REPLACE "-[0-9]*$" "" BINPAC_VERSION_MINOR ${BINPAC_VERSION_MINOR}) # The SO number shall increase only if binary interface changes. set(BINPAC_SOVERSION 0) set(ENABLE_SHARED true) if(ENABLE_STATIC_ONLY) set(ENABLE_STATIC true) set(ENABLE_SHARED false) endif() # Set default install paths include(GNUInstallDirs) # ############################################################################## # Dependency Configuration find_package(FLEX REQUIRED) find_package(BISON REQUIRED) if(MSVC) add_compile_options(/J) # Similar to -funsigned-char on other platforms endif() # ############################################################################## # System Introspection configure_file(${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h) include_directories(BEFORE ${PROJECT_BINARY_DIR}) # ############################################################################## # Recurse on sub-directories add_subdirectory(lib) add_subdirectory(src) # ############################################################################## # Build Summary if(CMAKE_BUILD_TYPE) string(TOUPPER ${CMAKE_BUILD_TYPE} BuildType) endif() macro(display test desc summary) if(${test}) set(${summary} ${desc}) else() set(${summary} no) endif() endmacro() display(ENABLE_SHARED yes shared_summary) display(ENABLE_STATIC yes static_summary) message( "\n==================| BinPAC Build Summary |====================" "\nVersion: ${BINPAC_VERSION}" "\nSO version: ${BINPAC_SOVERSION}" "\n" "\nBuild Type: ${CMAKE_BUILD_TYPE}" "\nDebug mode: ${ENABLE_DEBUG}" "\nInstall prefix: ${CMAKE_INSTALL_PREFIX}" "\nShared libs: ${shared_summary}" "\nStatic libs: ${static_summary}" "\n" "\nCC: ${CMAKE_C_COMPILER}" "\nCFLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BuildType}}" "\nCXX: ${CMAKE_CXX_COMPILER}" "\nCXXFLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BuildType}}" "\nCPP: ${CMAKE_CXX_COMPILER}" "\n" "\n================================================================\n") include(UserChangedWarning)