tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

CMakeLists.txt (4326B)


      1 cmake_minimum_required(VERSION 3.11)
      2 project(function2 VERSION 4.2.0 LANGUAGES CXX)
      3 
      4 if (NOT FU2_IS_FIND_INCLUDED)
      5  string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}
      6                      FU2_IS_TOP_LEVEL_PROJECT)
      7 endif()
      8 
      9 if (FU2_IS_TOP_LEVEL_PROJECT)
     10  add_library(function2 INTERFACE)
     11 else()
     12  add_library(function2 INTERFACE IMPORTED GLOBAL)
     13 endif()
     14 
     15 add_library(function2::function2 ALIAS function2)
     16 
     17 target_include_directories(function2
     18  INTERFACE
     19    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
     20    $<INSTALL_INTERFACE:include>)
     21 
     22 target_compile_features(function2
     23  INTERFACE
     24    cxx_alias_templates
     25    cxx_auto_type
     26    cxx_constexpr
     27    cxx_decltype
     28    cxx_decltype_auto
     29    cxx_final
     30    cxx_lambdas
     31    cxx_lambda_init_captures
     32    cxx_generic_lambdas
     33    cxx_variadic_templates
     34    cxx_defaulted_functions
     35    cxx_nullptr
     36    cxx_trailing_return_types
     37    cxx_return_type_deduction)
     38 
     39 if (FU2_IS_TOP_LEVEL_PROJECT)
     40  include(ExternalProject)
     41  include(GNUInstallDirs)
     42  include(CMakePackageConfigHelpers)
     43 
     44  # Create an install target:
     45  # Headers and license files
     46  install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/function2"
     47          DESTINATION "include")
     48  install(FILES "LICENSE.txt" DESTINATION .)
     49  install(FILES "Readme.md" DESTINATION .)
     50 
     51  # Config.cmake
     52  write_basic_package_version_file(
     53    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
     54    VERSION ${PROJECT_VERSION}
     55    COMPATIBILITY SameMajorVersion)
     56  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
     57          DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
     58 
     59  # ConfigVersion.cmake
     60  configure_package_config_file("cmake/config.cmake.in"
     61    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
     62    INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
     63    # PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR
     64  )
     65  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
     66          DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
     67 
     68  # Targets.cmake
     69  export(TARGETS ${PROJECT_NAME}
     70         NAMESPACE ${PROJECT_NAME}::
     71         FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
     72  install(TARGETS ${PROJECT_NAME}
     73          EXPORT "${PROJECT_NAME}Targets"
     74          INCLUDES DESTINATION "include")
     75  install(EXPORT "${PROJECT_NAME}Targets"
     76          NAMESPACE ${PROJECT_NAME}::
     77          DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
     78 
     79  # Setup CPack for bundling
     80  set(CPACK_GENERATOR "ZIP")
     81  set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
     82  set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
     83  set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
     84 
     85  # Since the header only library is platform independent
     86  # we name the packages after the native line feed
     87  if(WIN32)
     88    set(CPACK_SYSTEM_NAME "crlf")
     89  else()
     90    set(CPACK_SYSTEM_NAME "lf")
     91  endif()
     92 
     93  include(CPack)
     94 
     95  if (MSVC)
     96    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
     97    string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
     98    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
     99    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
    100    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-")
    101  endif()
    102 
    103  include(cmake/CMakeLists.txt)
    104 
    105  include(CTest)
    106 
    107  option(FU2_WITH_NO_EXCEPTIONS
    108      "Test without exceptions"
    109      OFF)
    110  option(FU2_WITH_NO_DEATH_TESTS
    111      "Test without death tests"
    112      OFF)
    113  option(FU2_WITH_CPP_LATEST
    114      "Enable the highest C++ standard available for testing polyfills"
    115      OFF)
    116  option(FU2_WITH_LIMITED_EMPTY_PROPAGATION
    117      "Test limiting empty propagation to only function pointers, member pointers, std::function, and specializations of fu2::function_base"
    118      OFF)
    119 
    120  if (BUILD_TESTING)
    121    if (FU2_WITH_NO_EXCEPTIONS)
    122      message(STATUS "Testing with exceptions disabled")
    123      add_definitions(-DTESTS_NO_EXCEPTIONS)
    124    endif()
    125 
    126    if (FU2_WITH_NO_DEATH_TESTS)
    127      message(STATUS "Testing without death tests")
    128      add_definitions(-DTESTS_NO_DEATH_TESTS)
    129    endif()
    130 
    131    if (FU2_WITH_LIMITED_EMPTY_PROPAGATION)
    132      message(STATUS "Testing with limited empty propagation")
    133      add_definitions(-DFU2_WITH_LIMITED_EMPTY_PROPAGATION)
    134    endif()
    135 
    136    add_subdirectory(test)
    137  endif()
    138 endif ()