| From 6cb16322decd643fed9de332d9cda77f7738b7af Mon Sep 17 00:00:00 2001 |
| From: Adrian Perez de Castro <aperez@igalia.com> |
| Date: Mon, 7 Sep 2020 12:14:22 +0300 |
| Subject: [PATCH] CMake: Allow using BUILD_SHARED_LIBS to choose static/shared |
| libs |
| |
| By convention projects using CMake which can build either static or |
| shared libraries use a BUILD_SHARED_LIBS flag to allow selecting between |
| both: the add_library() command automatically switches between both using |
| this variable when the library kind is not passed to add_library(). It |
| is also usual to expose the BUILD_SHARED_LIBS as an user-facing setting |
| with the option() command. |
| |
| This way, the following will both work as expected: |
| |
| % cmake -DBUILD_SHARED_LIBS=OFF ... |
| % cmake -DBUILS_SHARED_LIBS=ON ... |
| |
| This is helpful for distributions which need (or want) to build only |
| static libraries. |
| |
| Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> |
| [Upstream status: https://github.com/google/brotli/pull/655] |
| --- |
| CMakeLists.txt | 46 ++++++++++++++----------------------------- |
| c/fuzz/test_fuzzer.sh | 6 +++--- |
| 2 files changed, 18 insertions(+), 34 deletions(-) |
| |
| diff --git a/CMakeLists.txt b/CMakeLists.txt |
| index 4ff3401..f889311 100644 |
| --- a/CMakeLists.txt |
| +++ b/CMakeLists.txt |
| @@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 2.8.6) |
| |
| project(brotli C) |
| |
| +option(BUILD_SHARED_LIBS "Build shared libraries" ON) |
| + |
| if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) |
| message(STATUS "Setting build type to Release as none was specified.") |
| set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) |
| @@ -137,10 +139,6 @@ set(BROTLI_LIBRARIES_CORE brotlienc brotlidec brotlicommon) |
| set(BROTLI_LIBRARIES ${BROTLI_LIBRARIES_CORE} ${LIBM_LIBRARY}) |
| mark_as_advanced(BROTLI_LIBRARIES) |
| |
| -set(BROTLI_LIBRARIES_CORE_STATIC brotlienc-static brotlidec-static brotlicommon-static) |
| -set(BROTLI_LIBRARIES_STATIC ${BROTLI_LIBRARIES_CORE_STATIC} ${LIBM_LIBRARY}) |
| -mark_as_advanced(BROTLI_LIBRARIES_STATIC) |
| - |
| if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") |
| add_definitions(-DOS_LINUX) |
| elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") |
| @@ -161,29 +159,25 @@ transform_sources_list("scripts/sources.lst" "${CMAKE_CURRENT_BINARY_DIR}/source |
| include("${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake") |
| |
| if(BROTLI_EMSCRIPTEN) |
| - set(BROTLI_SHARED_LIBS "") |
| -else() |
| - set(BROTLI_SHARED_LIBS brotlicommon brotlidec brotlienc) |
| - add_library(brotlicommon SHARED ${BROTLI_COMMON_C}) |
| - add_library(brotlidec SHARED ${BROTLI_DEC_C}) |
| - add_library(brotlienc SHARED ${BROTLI_ENC_C}) |
| + set(BUILD_SHARED_LIBS OFF) |
| endif() |
| |
| -set(BROTLI_STATIC_LIBS brotlicommon-static brotlidec-static brotlienc-static) |
| -add_library(brotlicommon-static STATIC ${BROTLI_COMMON_C}) |
| -add_library(brotlidec-static STATIC ${BROTLI_DEC_C}) |
| -add_library(brotlienc-static STATIC ${BROTLI_ENC_C}) |
| +add_library(brotlicommon ${BROTLI_COMMON_C}) |
| +add_library(brotlidec ${BROTLI_DEC_C}) |
| +add_library(brotlienc ${BROTLI_ENC_C}) |
| |
| # Older CMake versions does not understand INCLUDE_DIRECTORIES property. |
| include_directories(${BROTLI_INCLUDE_DIRS}) |
| |
| -foreach(lib IN LISTS BROTLI_SHARED_LIBS) |
| - target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) |
| - string(TOUPPER "${lib}" LIB) |
| - set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION") |
| -endforeach() |
| +if(BUILD_SHARED_LIBS) |
| + foreach(lib brotlicommon brotlidec brotlienc) |
| + target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) |
| + string(TOUPPER "${lib}" LIB) |
| + set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION") |
| + endforeach() |
| +endif() |
| |
| -foreach(lib IN LISTS BROTLI_SHARED_LIBS BROTLI_STATIC_LIBS) |
| +foreach(lib brotlicommon brotlidec brotlienc) |
| target_link_libraries(${lib} ${LIBM_LIBRARY}) |
| set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS}) |
| set_target_properties(${lib} PROPERTIES |
| @@ -200,9 +194,6 @@ target_link_libraries(brotlidec brotlicommon) |
| target_link_libraries(brotlienc brotlicommon) |
| endif() |
| |
| -target_link_libraries(brotlidec-static brotlicommon-static) |
| -target_link_libraries(brotlienc-static brotlicommon-static) |
| - |
| # For projects stuck on older versions of CMake, this will set the |
| # BROTLI_INCLUDE_DIRS and BROTLI_LIBRARIES variables so they still |
| # have a relatively easy way to use Brotli: |
| @@ -216,7 +207,7 @@ endif() |
| |
| # Build the brotli executable |
| add_executable(brotli ${BROTLI_CLI_C}) |
| -target_link_libraries(brotli ${BROTLI_LIBRARIES_STATIC}) |
| +target_link_libraries(brotli ${BROTLI_LIBRARIES}) |
| |
| # Installation |
| if(NOT BROTLI_EMSCRIPTEN) |
| @@ -233,13 +224,6 @@ if(NOT BROTLI_BUNDLED_MODE) |
| RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
| ) |
| |
| - install( |
| - TARGETS ${BROTLI_LIBRARIES_CORE_STATIC} |
| - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
| - ) |
| - |
| install( |
| DIRECTORY ${BROTLI_INCLUDE_DIRS}/brotli |
| DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
| -- |
| 2.28.0 |
| |