From 04cab3de1647a07946338cb325233c8bd66de95a Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Fri, 11 Oct 2019 17:23:36 +0200 Subject: [PATCH] zlib: use nicer patch to install cmake config This cmake patch seems nicer because it also installs the cmake config. --- third_party/zlib/CMakeLists.txt | 6 +- third_party/zlib/build_shared_libs.patch | 89 ------ third_party/zlib/pr-337-cmake-update.patch | 309 +++++++++++++++++++++ 3 files changed, 313 insertions(+), 91 deletions(-) delete mode 100644 third_party/zlib/build_shared_libs.patch create mode 100644 third_party/zlib/pr-337-cmake-update.patch diff --git a/third_party/zlib/CMakeLists.txt b/third_party/zlib/CMakeLists.txt index fb6722e5c0..dfef7f1229 100644 --- a/third_party/zlib/CMakeLists.txt +++ b/third_party/zlib/CMakeLists.txt @@ -18,7 +18,9 @@ ExternalProject_add( zlib GIT_REPOSITORY https://github.com/madler/zlib GIT_TAG v1.2.11 - PREFIX zlib - PATCH_COMMAND git apply ${PROJECT_SOURCE_DIR}/build_shared_libs.patch + # Patch taken from: https://github.com/madler/zlib/pull/337/files + # Thanks to @Mizux + PATCH_COMMAND git apply ${PROJECT_SOURCE_DIR}/pr-337-cmake-update.patch CMAKE_ARGS "${CMAKE_ARGS}" ) + diff --git a/third_party/zlib/build_shared_libs.patch b/third_party/zlib/build_shared_libs.patch deleted file mode 100644 index 509031ff0b..0000000000 --- a/third_party/zlib/build_shared_libs.patch +++ /dev/null @@ -1,89 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0fe939d..1873459 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -123,7 +123,7 @@ set(ZLIB_SRCS - zutil.c - ) - --if(NOT MINGW) -+if(BUILD_SHARED_LIBS AND NOT MINGW) - set(ZLIB_DLL_SRCS - win32/zlib1.rc # If present will override custom build rule below. - ) -@@ -167,7 +167,7 @@ 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) -+if(BUILD_SHARED_LIBS AND MINGW) - # This gets us DLL resource information when compiling on MinGW. - if(NOT CMAKE_RC_COMPILER) - set(CMAKE_RC_COMPILER windres.exe) -@@ -181,37 +181,42 @@ if(MINGW) - -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) -- --add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) --add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) --set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) --set_target_properties(zlib PROPERTIES SOVERSION 1) -- --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() - -+add_library(zlib ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -+ - 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() --elseif(BUILD_SHARED_LIBS AND WIN32) -- # Creates zlib1.dll when building shared library version -- set_target_properties(zlib PROPERTIES SUFFIX "1.dll") -+ set_target_properties(zlib PROPERTIES OUTPUT_NAME z) -+endif() -+ -+if(BUILD_SHARED_LIBS) -+ set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) -+ set_target_properties(zlib PROPERTIES SOVERSION 1) -+ -+ 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 AND NOT APPLE) -+ set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") -+ endif() -+ -+ if(WIN32) -+ # Creates zlib1.dll when building shared library version -+ set_target_properties(zlib PROPERTIES SUFFIX "1.dll") -+ endif() - endif() - - if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) -- install(TARGETS zlib zlibstatic -+ install(TARGETS zlib - RUNTIME DESTINATION "${INSTALL_BIN_DIR}" - ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" - LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) diff --git a/third_party/zlib/pr-337-cmake-update.patch b/third_party/zlib/pr-337-cmake-update.patch new file mode 100644 index 0000000000..7d91c291b1 --- /dev/null +++ b/third_party/zlib/pr-337-cmake-update.patch @@ -0,0 +1,309 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0fe939d..a9097eb 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,24 +1,29 @@ +-cmake_minimum_required(VERSION 2.4.4) +-set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) +- +-project(zlib C) ++cmake_minimum_required(VERSION 3.0.2) ++if(POLICY CMP0048) ++ cmake_policy(SET CMP0048 NEW) ++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}) + +-set(VERSION "1.2.11") ++project(zlib VERSION ${ZLIB_FULL_VERSION} LANGUAGES C) + +-option(ASM686 "Enable building i686 assembly implementation") +-option(AMD64 "Enable building amd64 assembly implementation") ++option(ASM686 "Enable building i686 assembly implementation" OFF) ++option(AMD64 "Enable building amd64 assembly implementation" OFF) + +-set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") +-set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") +-set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") +-set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages") +-set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") ++include(GNUInstallDirs) ++set(INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Installation directory for executables") ++set(INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation directory for libraries") ++set(INSTALL_INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Installation directory for headers") ++set(INSTALL_MAN_DIR "${CMAKE_INSTALL_MANDIR}" CACHE PATH "Installation directory for manual pages") ++set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") + + include(CheckTypeSize) + include(CheckFunctionExists) + include(CheckIncludeFile) + include(CheckCSourceCompiles) +-enable_testing() ++include(CTest) + + check_include_file(sys/types.h HAVE_SYS_TYPES_H) + check_include_file(stdint.h HAVE_STDINT_H) +@@ -42,7 +47,7 @@ if(HAVE_STDDEF_H) + endif() + check_type_size(off64_t OFF64_T) + if(HAVE_OFF64_T) +- add_definitions(-D_LARGEFILE64_SOURCE=1) ++ add_definitions(-D_LARGEFILE64_SOURCE=1) + endif() + set(CMAKE_REQUIRED_DEFINITIONS) # clear variable + +@@ -63,7 +68,6 @@ if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) +- include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) +@@ -75,15 +79,14 @@ if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) + message(STATUS "to 'zconf.h.included' because this file is included with zlib") + message(STATUS "but CMake generates it automatically in the build directory.") + file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) +- endif() ++ endif() + endif() + + set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein +- ${ZLIB_PC} @ONLY) ++ ${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}) ++ ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) + + + #============================================================================ +@@ -93,7 +96,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) + set(ZLIB_PUBLIC_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h + zlib.h +-) ++ ) + set(ZLIB_PRIVATE_HDRS + crc32.h + deflate.h +@@ -104,7 +107,7 @@ set(ZLIB_PRIVATE_HDRS + inftrees.h + trees.h + zutil.h +-) ++ ) + set(ZLIB_SRCS + adler32.c + compress.c +@@ -121,52 +124,46 @@ set(ZLIB_SRCS + trees.c + uncompr.c + zutil.c +-) ++ ) + + if(NOT MINGW) + set(ZLIB_DLL_SRCS + win32/zlib1.rc # If present will override custom build rule below. +- ) ++ ) + endif() + + if(CMAKE_COMPILER_IS_GNUCC) + if(ASM686) + set(ZLIB_ASMS contrib/asm686/match.S) +- elseif (AMD64) ++ elseif(AMD64) + set(ZLIB_ASMS contrib/amd64/amd64-match.S) +- endif () ++ endif() + +- if(ZLIB_ASMS) +- add_definitions(-DASMV) +- set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE) +- endif() ++ if(ZLIB_ASMS) ++ add_definitions(-DASMV) ++ set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE) ++ endif() + endif() + + if(MSVC) + if(ASM686) +- ENABLE_LANGUAGE(ASM_MASM) ++ ENABLE_LANGUAGE(ASM_MASM) + set(ZLIB_ASMS +- contrib/masmx86/inffas32.asm +- contrib/masmx86/match686.asm +- ) +- elseif (AMD64) +- ENABLE_LANGUAGE(ASM_MASM) ++ contrib/masmx86/inffas32.asm ++ contrib/masmx86/match686.asm ++ ) ++ elseif(AMD64) ++ ENABLE_LANGUAGE(ASM_MASM) + set(ZLIB_ASMS +- contrib/masmx64/gvmat64.asm +- contrib/masmx64/inffasx64.asm +- ) ++ contrib/masmx64/gvmat64.asm ++ contrib/masmx64/inffasx64.asm ++ ) ++ endif() ++ if(ZLIB_ASMS) ++ add_definitions(-DASMV -DASMINF) + endif() +- +- if(ZLIB_ASMS) +- add_definitions(-DASMV -DASMINF) +- endif() + 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) +@@ -174,47 +171,78 @@ if(MINGW) + 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) ++ 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) + + add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) ++target_include_directories(zlib PUBLIC ++ $ ++ $ ++ $) ++set_target_properties(zlib PROPERTIES ++ DEFINE_SYMBOL ZLIB_DLL ++ SOVERSION ${PROJECT_VERSION_MAJOR}) ++ + add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +-set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) +-set_target_properties(zlib PROPERTIES SOVERSION 1) ++target_include_directories(zlibstatic PUBLIC ++ $ ++ $ ++ $) ++ ++if(BUILD_SHARED_LIBS) ++ add_library(ZLIB::ZLIB ALIAS zlib) ++else() ++ add_library(ZLIB::ZLIB ALIAS zlibstatic) ++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 ++ # it causes cygz-${PROJECT_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}) ++ set_target_properties(zlib PROPERTIES VERSION ${PROJECT_VERSION}) ++ set_target_properties(zlibstatic PROPERTIES VERSION ${PROJECT_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 ) ++if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) + install(TARGETS zlib zlibstatic ++ EXPORT ZLIBTargets + RUNTIME DESTINATION "${INSTALL_BIN_DIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" +- LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) ++ LIBRARY DESTINATION "${INSTALL_LIB_DIR}") ++ install(EXPORT ZLIBTargets ++ NAMESPACE ZLIB:: ++ DESTINATION lib/cmake/ZLIB) ++ include(CMakePackageConfigHelpers) ++ write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake" ++ VERSION ${PROJECT_VERSION} ++ COMPATIBILITY SameMajorVersion) ++ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake" ++ "include(\"\${CMAKE_CURRENT_LIST_DIR}/ZLIBTargets.cmake\")" ++ ) ++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake" ++ "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake" ++ DESTINATION lib/cmake/ZLIB) + endif() + if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) + install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") +@@ -229,21 +257,22 @@ 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(BUILD_TESTING) ++ 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()