From 2f796b2d414209a62a74e210e60ed23825a45848 Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 29 Sep 2023 03:30:13 +1000 Subject: [PATCH 1/6] Update CMakeLists.txt Allow skip example build --- CMakeLists.txt | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae0f8ea29..58e95a7e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,20 +194,23 @@ endif() # Example binaries #============================================================================ -add_executable(example test/example.c) -target_link_libraries(example zlib) -add_test(example example) - -add_executable(minigzip test/minigzip.c) -target_link_libraries(minigzip zlib) - -if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") +if(NOT SKIP_EXAMPLE ) + add_executable(example test/example.c) + target_link_libraries(example zlib) + add_test(example example) + + add_executable(minigzip test/minigzip.c) + target_link_libraries(minigzip zlib) + + if(HAVE_OFF64_T) + add_executable(example64 test/example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 test/minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() endif() + From be6331ff13d3f08991621e079da33c9a12bf01ad Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 10 Nov 2023 16:03:47 +1100 Subject: [PATCH 2/6] Update CMakeLists.txt --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 58e95a7e2..82f62d289 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,10 +147,14 @@ if(MINGW) set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) endif(MINGW) +if(BUILD_SHARED_LIBS) add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) set_target_properties(zlib PROPERTIES SOVERSION 1) +endif() + +add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) + if(NOT CYGWIN) # This property causes shared libraries on Linux to have the full version From b4586030bbd3730fe8cb5fe2a0e7b2c24183f90d Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 1 Dec 2023 18:49:11 +1100 Subject: [PATCH 3/6] Update CMakeLists.txt Fixes for STATIC vs SHared libs fix Emscripten --- CMakeLists.txt | 175 ++++++++++++++++++++++--------------------------- 1 file changed, 80 insertions(+), 95 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82f62d289..4acf3b540 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,6 @@ +# Define the option to control static library build +option(BUILD_STATIC_LIBS "Build static libraries" ON) + cmake_minimum_required(VERSION 2.4.4...3.15.0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) @@ -21,13 +24,9 @@ check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(stdint.h HAVE_STDINT_H) check_include_file(stddef.h HAVE_STDDEF_H) -# -# Check to see if we have large file support -# +# Check for large file support set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) -# We add these other definitions here because CheckTypeSize.cmake -# in CMake 2.4.x does not automatically do so and we want -# compatibility with CMake 2.4.x. +# Add other definitions for compatibility if(HAVE_SYS_TYPES_H) list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) endif() @@ -41,19 +40,15 @@ check_type_size(off64_t OFF64_T) if(HAVE_OFF64_T) add_definitions(-D_LARGEFILE64_SOURCE=1) endif() -set(CMAKE_REQUIRED_DEFINITIONS) # clear variable +set(CMAKE_REQUIRED_DEFINITIONS) -# # Check for fseeko -# check_function_exists(fseeko HAVE_FSEEKO) if(NOT HAVE_FSEEKO) add_definitions(-DNO_FSEEKO) endif() -# # Check for unistd.h -# check_include_file(unistd.h Z_HAVE_UNISTD_H) if(MSVC) @@ -76,17 +71,11 @@ if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) endif() set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein - ${ZLIB_PC} @ONLY) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein - ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) - -#============================================================================ -# zlib -#============================================================================ - +# zlib sources and headers set(ZLIB_PUBLIC_HDRS ${CMAKE_CURRENT_BINARY_DIR}/zconf.h zlib.h @@ -122,99 +111,95 @@ set(ZLIB_SRCS if(NOT MINGW) set(ZLIB_DLL_SRCS - win32/zlib1.rc # If present will override custom build rule below. + win32/zlib1.rc ) endif() -# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) -string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" - "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) - -if(MINGW) - # This gets us DLL resource information when compiling on MinGW. - if(NOT CMAKE_RC_COMPILER) - set(CMAKE_RC_COMPILER windres.exe) - endif() - - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - COMMAND ${CMAKE_RC_COMPILER} - -D GCC_WINDRES - -I ${CMAKE_CURRENT_SOURCE_DIR} - -I ${CMAKE_CURRENT_BINARY_DIR} - -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj - -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) - set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) -endif(MINGW) - if(BUILD_SHARED_LIBS) -add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) -set_target_properties(zlib PROPERTIES SOVERSION 1) + add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) + set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) + set_target_properties(zlib PROPERTIES SOVERSION 1) endif() -add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) - +if(BUILD_STATIC_LIBS) + add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +endif() if(NOT CYGWIN) - # This property causes shared libraries on Linux to have the full version - # encoded into their final filename. We disable this on Cygwin because - # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll - # seems to be the default. - # - # This has no effect with MSVC, on that platform the version info for - # the DLL comes from the resource file win32/zlib1.rc - set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) -endif() - -if(UNIX) - # On unix-like platforms the library is almost always called libz - set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) - if(NOT APPLE) - set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") - endif() + set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) + if(NOT APPLE) + set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() elseif(BUILD_SHARED_LIBS AND WIN32) - # Creates zlib1.dll when building shared library version set_target_properties(zlib PROPERTIES SUFFIX "1.dll") endif() -if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) - install(TARGETS zlib zlibstatic - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) +if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) + if(BUILD_SHARED_LIBS) + install(TARGETS zlib + RUNTIME DESTINATION "${INSTALL_BIN_DIR}" + LIBRARY DESTINATION "${INSTALL_LIB_DIR}") + endif() + + if(BUILD_STATIC_LIBS) + install(TARGETS zlibstatic + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}") + endif() endif() -if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) + +if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") endif() -#============================================================================ -# Example binaries -#============================================================================ - -if(NOT SKIP_EXAMPLE ) - add_executable(example test/example.c) - target_link_libraries(example zlib) - add_test(example example) - - add_executable(minigzip test/minigzip.c) - target_link_libraries(minigzip zlib) - - if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - endif() -endif() +# Example binaries (conditionally built) +if(NOT SKIP_EXAMPLE) + if(BUILD_SHARED_LIBS) + add_executable(example test/example.c) + target_link_libraries(example zlib) + add_test(example example) + + add_executable(minigzip test/minigzip.c) + target_link_libraries(minigzip zlib) + endif() + + if(BUILD_STATIC_LIBS) + add_executable(example_static test/example.c) + target_link_libraries(example_static zlibstatic) + add_test(example_static example_static) + + add_executable(minigzip_static test/minigzip.c) + target_link_libraries(minigzip_static zlibstatic) + endif() + if(HAVE_OFF64_T) + if(BUILD_SHARED_LIBS) + add_executable(example64 test/example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 test/minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() + + if(BUILD_STATIC_LIBS) + add_executable(example64_static test/example.c) + target_link_libraries(example64_static zlibstatic) + set_target_properties(example64_static PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64_static example64_static) + + add_executable(minigzip64_static test/minigzip.c) + target_link_libraries(minigzip64_static zlibstatic) + set_target_properties(minigzip64_static PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() + endif() +endif() From 1b7d571d6e4cad06b428a78060de057b131a7d5d Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 1 Dec 2023 18:51:13 +1100 Subject: [PATCH 4/6] Update CMakeLists.txt --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4acf3b540..a6daf7e83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -203,3 +203,4 @@ if(NOT SKIP_EXAMPLE) endif() endif() endif() + From c921ccccfa763b2f40e001e4e50a1e459f95223c Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 1 Dec 2023 18:51:49 +1100 Subject: [PATCH 5/6] Update CMakeLists.txt --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6daf7e83..a3478aa69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ # Define the option to control static library build option(BUILD_STATIC_LIBS "Build static libraries" ON) +option(BUILD_SHARED_LIBS "Build shared libraries" OFF) cmake_minimum_required(VERSION 2.4.4...3.15.0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) From 90221fd99d58babd967d814b5249fdfb73b8dcf2 Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Fri, 1 Dec 2023 18:53:52 +1100 Subject: [PATCH 6/6] Update CMakeLists.txt --- CMakeLists.txt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a3478aa69..d62901944 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,12 +127,22 @@ if(BUILD_STATIC_LIBS) endif() if(NOT CYGWIN) - set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) - if(NOT APPLE) - set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + if(BUILD_SHARED_LIBS) + set_target_properties(zlib PROPERTIES OUTPUT_NAME z) + if(NOT APPLE) + set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() + endif() + if(BUILD_STATIC_LIBS) + set_target_properties(zlibstatic PROPERTIES OUTPUT_NAME z) + if(NOT APPLE) + set_target_properties(zlibstatic PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() endif() elseif(BUILD_SHARED_LIBS AND WIN32) - set_target_properties(zlib PROPERTIES SUFFIX "1.dll") + if(BUILD_SHARED_LIBS) + set_target_properties(zlib PROPERTIES SUFFIX "1.dll") + endif() endif() if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)