1 cmake_minimum_required(VERSION 3.12...3.31) 2 3 project( 4 iostreamV3 5 VERSION 1.0.0 6 LANGUAGES CXX 7 DESCRIPTION "A library for using C++ IOStreams with zlib V3" 8 HOMEPAGE_URL "https://www.zlib.net") 9 10 option(ZLIB_IOSTREAM3_BUILD_SHARED "Enable building blast shared library" ON) 11 option(ZLIB_IOSTREAM3_BUILD_STATIC "Enable building blast static library" ON) 12 option(ZLIB_IOSTREAM3_BUILD_TESTING "Enable building tests for blast" ON) 13 option(ZLIB_IOSTREAM3_INSTALL "Enable installation of iostream" ON) 14 15 include(GNUInstallDirs) 16 include(CMakePackageConfigHelpers) 17 18 if(NOT DEFINED ZLIB_BUILD_IOSTREAM3) 19 if(ZLIB_IOSTREAM3_BUILD_SHARED) 20 list(APPEND REQUIRED_COMPONENTS "shared") 21 endif(ZLIB_IOSTREAM3_BUILD_SHARED) 22 23 if(ZLIB_IOSTREAM3_BUILD_STATIC) 24 list(APPEND REQUIRED_COMPONENTS "static") 25 endif(ZLIB_IOSTREAM3_BUILD_STATIC) 26 27 find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG) 28 endif(NOT DEFINED ZLIB_BUILD_IOSTREAM3) 29 30 if(WIN32 OR CYGWIN) 31 set(zlibIOStream3_static_suffix "s") 32 set(CMAKE_DEBUG_POSTFIX "d") 33 endif(WIN32 OR CYGWIN) 34 35 36 function(iostreamv3_findTestEnv testName) 37 set(testEnv "PATH=") 38 39 if(MSVC OR MINGW) 40 set(separator "\\\;") 41 else() 42 set(separator ":") 43 endif() 44 45 string(APPEND testEnv "$<TARGET_FILE_DIR:zlib_iostream3_iostreamv3>${separator}") 46 string(APPEND testEnv "$<TARGET_FILE_DIR:ZLIB::ZLIB>${separator}") 47 string(APPEND testEnv "$ENV{PATH}") 48 49 set_tests_properties(${testName} PROPERTIES ENVIRONMENT "${testEnv}") 50 endfunction(iostreamv3_findTestEnv testName) 51 52 if(ZLIB_IOSTREAM3_BUILD_SHARED) 53 add_library(zlib_iostream3_iostreamv3 SHARED 54 zfstream.cc 55 zfstream.h) 56 57 add_library(IOSTREAMV3::IOSTREAMV3 ALIAS zlib_iostream3_iostreamv3) 58 59 if(NOT CYGWIN) 60 set_target_properties(zlib_iostream3_iostreamv3 61 PROPERTIES 62 SOVERSION ${iostreamV3_VERSION_MAJOR} 63 VERSION ${iostreamV3_VERSION}) 64 endif(NOT CYGWIN) 65 66 set_target_properties(zlib_iostream3_iostreamv3 67 PROPERTIES 68 EXPORT_NAME IOSTREAMV3 69 OUTPUT_NAME iostream3) 70 71 target_link_libraries(zlib_iostream3_iostreamv3 72 PUBLIC ZLIB::ZLIB) 73 74 if(ZLIB_IOSTREAM3_BUILD_TESTING) 75 enable_testing() 76 77 add_executable(zlib_iostream3_test test.cc zfstream.h) 78 79 target_link_libraries(zlib_iostream3_test 80 PRIVATE zlib_iostream3_iostreamv3) 81 82 add_test(NAME zlib_iostream3_test COMMAND zlib_iostream3_test) 83 84 set_tests_properties(zlib_iostream3_test 85 PROPERTIES 86 FIXTURES_REQUIRED zlib_iostream3_cleanup) 87 88 if(MSVC 89 OR MSYS 90 OR MINGW 91 OR CYGWIN) 92 iostreamv3_findtestenv(zlib_iostream3_test) 93 endif( 94 MSVC 95 OR MSYS 96 OR MINGW 97 OR CYGWIN) 98 endif(ZLIB_IOSTREAM3_BUILD_TESTING) 99 endif(ZLIB_IOSTREAM3_BUILD_SHARED) 100 101 if(ZLIB_IOSTREAM3_BUILD_STATIC) 102 add_library(zlib_iostream3_iostreamv3Static STATIC 103 zfstream.cc 104 zfstream.h) 105 106 add_library(IOSTREAMV3::IOSTREAMV3STATIC 107 ALIAS zlib_iostream3_iostreamv3Static) 108 109 target_link_libraries(zlib_iostream3_iostreamv3Static 110 PUBLIC ZLIB::ZLIBSTATIC) 111 112 set_target_properties(zlib_iostream3_iostreamv3Static 113 PROPERTIES 114 EXPORT_NAME IOSTREAMV3STATIC 115 OUTPUT_NAME iostream3${zlib_IOStream3_static_suffix}) 116 117 if(ZLIB_IOSTREAM3_BUILD_TESTING) 118 enable_testing() 119 120 add_executable(zlib_iostream3_testStatic test.cc zfstream.h) 121 122 target_link_libraries(zlib_iostream3_testStatic 123 PRIVATE zlib_iostream3_iostreamv3Static) 124 125 add_test(NAME zlib_iostream3_testStatic 126 COMMAND zlib_iostream3_testStatic) 127 128 set_tests_properties(zlib_iostream3_testStatic 129 PROPERTIES 130 FIXTURES_REQUIRED zlib_iostream3_cleanup) 131 endif(ZLIB_IOSTREAM3_BUILD_TESTING) 132 endif(ZLIB_IOSTREAM3_BUILD_STATIC) 133 134 if(ZLIB_IOSTREAM3_BUILD_TESTING) 135 add_test(NAME zlib_iostream3_cleanup COMMAND ${CMAKE_COMMAND} -E rm 136 ${CMAKE_CURRENT_BINARY_DIR}/test1.txt.gz 137 ${CMAKE_CURRENT_BINARY_DIR}/test2.txt.gz) 138 139 set_tests_properties(zlib_iostream3_cleanup 140 PROPERTIES 141 FIXTURES_CLEANUP zlib_iostream3_cleanup) 142 143 add_subdirectory(test) 144 endif(ZLIB_IOSTREAM3_BUILD_TESTING) 145 146 if(ZLIB_IOSTREAM3_INSTALL) 147 if(ZLIB_IOSTREAM3_BUILD_SHARED) 148 install( 149 TARGETS zlib_iostream3_iostreamv3 150 COMPONENT Runtime 151 EXPORT zlibiostream3SharedExport 152 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 153 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") 154 install( 155 EXPORT zlibiostream3SharedExport 156 FILE iostreamv3-shared.cmake 157 NAMESPACE IOSTREAMV3:: 158 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iostreamv3) 159 160 if(MSVC) 161 install( 162 FILES $<TARGET_PDB_FILE:zlib_iostream3_iostreamv3> 163 COMPONENT Development 164 DESTINATION ${CMAKE_INSTALL_BINDIR} 165 CONFIGURATIONS Debug OR RelWithDebInfo 166 OPTIONAL) 167 endif(MSVC) 168 endif(ZLIB_IOSTREAM3_BUILD_SHARED) 169 170 if(ZLIB_IOSTREAM3_BUILD_STATIC) 171 install( 172 TARGETS zlib_iostream3_iostreamv3Static 173 COMPONENT Development 174 EXPORT iostream3StaticExport 175 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") 176 install( 177 EXPORT iostream3StaticExport 178 FILE iostreamv3-static.cmake 179 NAMESPACE IOSTREAMV3:: 180 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iostreamv3) 181 endif(ZLIB_IOSTREAM3_BUILD_STATIC) 182 183 configure_package_config_file( 184 ${iostreamV3_SOURCE_DIR}/iostream3Config.cmake.in 185 ${iostreamV3_BINARY_DIR}/iostreamv3Config.cmake 186 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iostreamv3) 187 188 write_basic_package_version_file( 189 "${iostreamV3_BINARY_DIR}/iostreamv3ConfigVersion.cmake" 190 VERSION "${iostream3_VERSION}" 191 COMPATIBILITY AnyNewerVersion) 192 193 install(FILES ${iostreamV3_BINARY_DIR}/iostreamv3Config.cmake 194 ${iostreamV3_BINARY_DIR}/iostreamv3ConfigVersion.cmake 195 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iostreamv3) 196 install( 197 FILES zfstream.h 198 COMPONENT Development 199 DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") 200 endif(ZLIB_IOSTREAM3_INSTALL) 201