Add separate options to disable shared/static libraries build.
diff --git a/CMakeLists.txt b/CMakeLists.txt index 99b9258..4970fd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -6,6 +6,9 @@ project(brotli C) +option(BUILD_SHARED_LIBS "Build shared libraries" ON) +option(BUILD_STATIC_LIBS "Build static libraries" ON) + # If Brotli is being bundled in another project, we don't want to # install anything. However, we want to let people override this, so # we'll use the BROTLI_BUNDLED_MODE variable to let them do that; just @@ -110,11 +113,19 @@ set(BROTLI_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/c/include") mark_as_advanced(BROTLI_INCLUDE_DIRS) -set(BROTLI_LIBRARIES_CORE brotlienc brotlidec brotlicommon) +if(BUILD_SHARED_LIBS) + set(BROTLI_LIBRARIES_CORE brotlienc brotlidec brotlicommon) +else() + set(BROTLI_LIBRARIES_CORE "") +endif() set(BROTLI_LIBRARIES ${BROTLI_LIBRARIES_CORE} ${LIBM_LIBRARY}) mark_as_advanced(BROTLI_LIBRARIES) -set(BROTLI_LIBRARIES_CORE_STATIC brotlienc-static brotlidec-static brotlicommon-static) +if(BUILD_STATIC_LIBS) + set(BROTLI_LIBRARIES_CORE_STATIC brotlienc-static brotlidec-static brotlicommon-static) +else() + set(BROTLI_LIBRARIES_CORE_STATIC "") +endif() set(BROTLI_LIBRARIES_STATIC ${BROTLI_LIBRARIES_CORE_STATIC} ${LIBM_LIBRARY}) mark_as_advanced(BROTLI_LIBRARIES_STATIC) @@ -137,24 +148,28 @@ transform_sources_list("scripts/sources.lst" "${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake") -add_library(brotlicommon SHARED ${BROTLI_COMMON_C}) -add_library(brotlidec SHARED ${BROTLI_DEC_C}) -add_library(brotlienc SHARED ${BROTLI_ENC_C}) +if(BUILD_SHARED_LIBS) + add_library(brotlicommon SHARED ${BROTLI_COMMON_C}) + add_library(brotlidec SHARED ${BROTLI_DEC_C}) + add_library(brotlienc SHARED ${BROTLI_ENC_C}) +endif() -add_library(brotlicommon-static STATIC ${BROTLI_COMMON_C}) -add_library(brotlidec-static STATIC ${BROTLI_DEC_C}) -add_library(brotlienc-static STATIC ${BROTLI_ENC_C}) +if(BUILD_STATIC_LIBS) + add_library(brotlicommon-static STATIC ${BROTLI_COMMON_C}) + add_library(brotlidec-static STATIC ${BROTLI_DEC_C}) + add_library(brotlienc-static STATIC ${BROTLI_ENC_C}) +endif() # Older CMake versions does not understand INCLUDE_DIRECTORIES property. include_directories(${BROTLI_INCLUDE_DIRS}) -foreach(lib brotlicommon brotlidec brotlienc) +foreach(lib ${BROTLI_LIBRARIES_CORE}) target_compile_definitions(${lib} PUBLIC "BROTLI_SHARED_COMPILATION" ) string(TOUPPER "${lib}" LIB) set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL "${LIB}_SHARED_COMPILATION" ) endforeach() -foreach(lib brotlicommon brotlidec brotlienc brotlicommon-static brotlidec-static brotlienc-static) +foreach(lib ${BROTLI_LIBRARIES_CORE} ${BROTLI_LIBRARIES_CORE_STATIC}) target_link_libraries(${lib} ${LIBM_LIBRARY}) set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS}) set_target_properties(${lib} PROPERTIES @@ -164,11 +179,15 @@ set_property(TARGET ${lib} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${BROTLI_INCLUDE_DIRS}") endforeach() -target_link_libraries(brotlidec brotlicommon) -target_link_libraries(brotlienc brotlicommon) +if(BUILD_SHARED_LIBS) + 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) +if(BUILD_STATIC_LIBS) + target_link_libraries(brotlidec-static brotlicommon-static) + target_link_libraries(brotlienc-static brotlicommon-static) +endif() # For projects stuck on older versions of CMake, this will set the # BROTLI_INCLUDE_DIRS and BROTLI_LIBRARIES variables so they still @@ -182,29 +201,35 @@ endif() # Build the brotli executable -add_executable(brotli ${BROTLI_CLI_C}) -target_link_libraries(brotli ${BROTLI_LIBRARIES_STATIC}) +if(BUILD_STATIC_LIBS) + add_executable(brotli ${BROTLI_CLI_C}) + target_link_libraries(brotli ${BROTLI_LIBRARIES_STATIC}) +endif() # Installation if(NOT BROTLI_BUNDLED_MODE) - install( - TARGETS brotli - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - ) + if(BUILD_STATIC_LIBS) + install( + TARGETS brotli + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ) - install( - TARGETS ${BROTLI_LIBRARIES_CORE} - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - 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}" + ) + endif() - install( - TARGETS ${BROTLI_LIBRARIES_CORE_STATIC} - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - ) + if(BUILD_SHARED_LIBS) + install( + TARGETS ${BROTLI_LIBRARIES_CORE} + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ) + endif() install( DIRECTORY ${BROTLI_INCLUDE_DIRS}/brotli @@ -214,6 +239,10 @@ # Tests +if(NOT BUILD_STATIC_LIBS) + set(BROTLI_DISABLE_TESTS TRUE) +endif() + # If we're targeting Windows but not running on Windows, we need Wine # to run the tests... if(NOT BROTLI_DISABLE_TESTS) @@ -336,19 +365,19 @@ file(WRITE ${OUTPUT_FILE} ${TEXT}) endfunction() -transform_pc_file("scripts/libbrotlicommon.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" "${BROTLI_VERSION}") +if(BUILD_SHARED_LIBS) + transform_pc_file("scripts/libbrotlicommon.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" "${BROTLI_VERSION}") + transform_pc_file("scripts/libbrotlidec.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc" "${BROTLI_VERSION}") + transform_pc_file("scripts/libbrotlienc.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" "${BROTLI_VERSION}") -transform_pc_file("scripts/libbrotlidec.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc" "${BROTLI_VERSION}") - -transform_pc_file("scripts/libbrotlienc.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" "${BROTLI_VERSION}") - -if(NOT BROTLI_BUNDLED_MODE) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + if(NOT BROTLI_BUNDLED_MODE) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() endif() if (ENABLE_COVERAGE STREQUAL "yes")