diff --git a/.github/workflows/msys-cygwin.yml b/.github/workflows/msys-cygwin.yml index e76be9f0d..f2a4a742f 100644 --- a/.github/workflows/msys-cygwin.yml +++ b/.github/workflows/msys-cygwin.yml @@ -29,6 +29,7 @@ jobs: toolchain:p cmake:p - name: Configure + if: matrix.sys != 'clang64' run: | cmake -G"Unix Makefiles" \ -S . \ @@ -36,6 +37,15 @@ jobs: -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCMAKE_BUILD_TYPE=Release \ -DMINIZIP_ENABLE_BZIP2=ON + - name: Configure clang64 + if: matrix.sys == 'clang64' + run: | + CC=clang cmake -G"Unix Makefiles" \ + -S . \ + -B build \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DMINIZIP_ENABLE_BZIP2=ON - name: Build run: cmake --build build --config Release - name: Run tests diff --git a/CMakeLists.txt b/CMakeLists.txt index aa7359121..a57b58738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,8 @@ if(ZLIB_BUILD_SHARED) OUTPUT_NAME z) if(UNIX AND NOT APPLE - AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX)) + AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX) + AND NOT (${CMAKE_C_COMPILER_ID} STREQUAL "Clang")) # On unix-like platforms the library is almost always called libz set_target_properties( zlib @@ -200,7 +201,8 @@ if(ZLIB_BUILD_SHARED) endif( UNIX AND NOT APPLE - AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX)) + AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX) + AND NOT (${CMAKE_C_COMPILER_ID} STREQUAL "Clang")) endif(ZLIB_BUILD_SHARED) if(ZLIB_BUILD_STATIC) diff --git a/contrib/minizip/CMakeLists.txt b/contrib/minizip/CMakeLists.txt index 1aaf4ac74..01d40f916 100644 --- a/contrib/minizip/CMakeLists.txt +++ b/contrib/minizip/CMakeLists.txt @@ -89,6 +89,9 @@ check_c_source_compiles( unset(CMAKE_REQUIRED_FLAGS) +include(CheckSymbolExists) +check_symbol_exists(_WIN32 stdlib.h IS_WIN) + if(NOT TARGET ZLIB::ZLIB) find_package(ZLIB REQUIRED CONFIG) endif(NOT TARGET ZLIB::ZLIB) @@ -97,19 +100,19 @@ set(LIBMINIZIP_SRCS ioapi.c mztools.c unzip.c zip.c) set(LIBMINIZIP_HDRS crypt.h ints.h ioapi.h mztools.h unzip.h zip.h) -set(MINIZIP_SRCS ioapi.c $<$:iowin32.c> minizip.c zip.c) +set(MINIZIP_SRCS ioapi.c $<$:iowin32.c> minizip.c zip.c) -set(MINIZIP_HDRS crypt.h ints.h ioapi.h $<$:iowin32.h> skipset.h +set(MINIZIP_HDRS crypt.h ints.h ioapi.h $<$:iowin32.h> skipset.h zip.h) -set(MINIUNZIP_SRCS ioapi.c $<$:iowin32.c> miniunz.c unzip.c +set(MINIUNZIP_SRCS ioapi.c $<$:iowin32.c> miniunz.c unzip.c zip.c) set(MINIUNZIP_HDRS crypt.h ints.h ioapi.h - $<$:iowin32.h> + $<$:iowin32.h> skipset.h unzip.h zip.h) diff --git a/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in b/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in index 2b9fc68f3..d62995e50 100644 --- a/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +++ b/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in @@ -10,12 +10,15 @@ option(MINIZIP_BUILD_SHARED "" @MINIZIP_BUILD_SHARED@) option(MINIZIP_BUILD_STATIC "" @MINIZIP_BUILD_STATIC@) option(MINIZIP_ENABLE_BZIP2 "" @MINIZIP_ENABLE_BZIP2@) +include(CheckSymbolExists) +check_symbol_exists(_WIN32 stdlib.h IS_WIN) + add_subdirectory(@minizip_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/minizip EXCLUDE_FROM_ALL) set(MINIZIP_SRCS @minizip_SOURCE_DIR@/ioapi.c - $<$:@minizip_SOURCE_DIR@/iowin32.c> + $<$:@minizip_SOURCE_DIR@/iowin32.c> @minizip_SOURCE_DIR@/minizip.c @minizip_SOURCE_DIR@/zip.c) if(MINIZIP_BUILD_SHARED) diff --git a/contrib/minizip/test/add_subdirectory_test.cmake.in b/contrib/minizip/test/add_subdirectory_test.cmake.in index ca49895ba..30998081c 100644 --- a/contrib/minizip/test/add_subdirectory_test.cmake.in +++ b/contrib/minizip/test/add_subdirectory_test.cmake.in @@ -12,9 +12,12 @@ option(MINIZIP_ENABLE_BZIP2 "" @MINIZIP_ENABLE_BZIP2@) add_subdirectory(@minizip_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/minizip) +include(CheckSymbolExists) +check_symbol_exists(_WIN32 stdlib.h IS_WIN) + set(MINIZIP_SRCS @minizip_SOURCE_DIR@/ioapi.c - $<$:@minizip_SOURCE_DIR@/iowin32.c> + $<$:@minizip_SOURCE_DIR@/iowin32.c> @minizip_SOURCE_DIR@/minizip.c @minizip_SOURCE_DIR@/zip.c) if(MINIZIP_BUILD_SHARED) diff --git a/contrib/minizip/test/find_package_test.cmake.in b/contrib/minizip/test/find_package_test.cmake.in index 55272ba72..77ad5cd00 100644 --- a/contrib/minizip/test/find_package_test.cmake.in +++ b/contrib/minizip/test/find_package_test.cmake.in @@ -9,9 +9,12 @@ option(MINIZIP_BUILD_SHARED "" @MINIZIP_BUILD_SHARED@) option(MINIZIP_BUILD_STATIC "" @MINIZIP_BUILD_STATIC@) find_package(minizip ${minizip_VERSION} CONFIG REQUIRED) +include(CheckSymbolExists) +check_symbol_exists(_WIN32 stdlib.h IS_WIN) + set(MINIZIP_SRCS @minizip_SOURCE_DIR@/ioapi.c - $<$:@minizip_SOURCE_DIR@/iowin32.c> + $<$:@minizip_SOURCE_DIR@/iowin32.c> @minizip_SOURCE_DIR@/minizip.c @minizip_SOURCE_DIR@/zip.c) if(MINIZIP_BUILD_SHARED) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0d2844d8c..602001bdc 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -72,7 +72,7 @@ if(ZLIB_BUILD_STATIC) if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") set(CFLAGS_OLD ${CMAKE_C_FLAGS}) - set({CMAKE_C_FLAGS + set(CMAKE_C_FLAGS "" CACHE STRING "" FORCE) @@ -89,13 +89,15 @@ if(ZLIB_BUILD_STATIC) endforeach(ver RANGE 11 99) find_program(GCOV_EXECUTABLE NAMES ${llvm_names}) + set(llvm_option "gcov") + set(compile_opts -rtlib=compiler_rt) endif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") add_executable(infcover infcover.c) target_link_libraries(infcover ZLIB::ZLIBSTATIC) - target_compile_options(infcover PRIVATE -coverage) - target_link_options(infcover PRIVATE -coverage) + target_compile_options(infcover PRIVATE --coverage ${compile_opts}) + target_link_options(infcover PRIVATE --coverage) target_compile_definitions( infcover PRIVATE $<$:HAVE_HIDDEN>) add_test(NAME zlib-coverage COMMAND infcover) @@ -108,7 +110,7 @@ if(ZLIB_BUILD_STATIC) ${INFCOVER_DIR}/infcover.c.gcda) set_tests_properties(zlib-coverage-summary PROPERTIES DEPENDS zlib-coverage) - set({CMAKE_C_FLAGS + set(CMAKE_C_FLAGS ${CFLAGS_OLD} CACHE STRING "" FORCE) endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID}