cmake_minimum_required(VERSION 3.12...3.31) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") project( zlibAda VERSION 1.0.0 LANGUAGES C ADA DESCRIPTION "A library for creating zipfiles based in zlib" HOMEPAGE_URL "https://www.zlib.net") option(ZLIB_ADA_BUILD_SHARED "Enable building ada bindings shared library" ON) option(ZLIB_ADA_BUILD_STATIC "Enable building ada bindings static library" ON) option(ZLIB_ADA_BUILD_TESTING "Enable building tests for ada bindings library" ON) if(WIN32 OR CYGWIN) set(zlib_Ada_static_suffix "s") set(CMAKE_DEBUG_POSTFIX "d") endif(WIN32 OR CYGWIN) if(NOT DEFINED ZLIB_BUILD_ADA) if(ZLIB_ADA_BUILD_SHARED) list(APPEND REQUIRED_COMPONENTS "shared") endif(ZLIB_ADA_BUILD_SHARED) if(ZLIB_ADA_BUILD_STATIC) list(APPEND REQUIRED_COMPONENTS "static") endif(ZLIB_ADA_BUILD_STATIC) find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG) endif(NOT DEFINED ZLIB_BUILD_ADA) function(ZLIB_ADA_findTestEnv testName) set(testEnv "PATH=") if(MSVC OR MINGW) set(separator "\\\;") else() set(separator ":") endif() string(APPEND testEnv "$${separator}") string(APPEND testEnv "$ENV{PATH}") set_tests_properties(${testName} PROPERTIES ENVIRONMENT "${testEnv}") endfunction(ZLIB_ADA_findTestEnv testName) if(ZLIB_ADA_BUILD_SHARED) ada_add_library(zlib_ada_Ada SHARED zlib-thin.adb zlib.adb) set_target_properties(zlib_ada_Ada PROPERTIES OUTPUT_NAME zlib-ada) target_link_libraries(zlib_ada_Ada INTERFACE ZLIB::ZLIB) ada_add_library(zlib_ada_streams SHARED zlib-streams.adb) target_link_libraries(zlib_ada_streams PUBLIC zlib_ada_Ada) ada_find_ali(zlib_ada_streams) if(ZLIB_ADA_BUILD_TESTING) enable_testing() ada_add_executable(zlib_ada_test test.adb) target_link_libraries(zlib_ada_test PRIVATE zlib_ada_Ada zlib_ada_streams) ada_find_ali(zlib_ada_test) add_test(NAME zlib_ada_ada-test COMMAND zlib_ada_test) set_tests_properties(zlib_ada_ada-test PROPERTIES FIXTURES_REQUIRED zlib_ada_cleanup) if(MSVC OR MSYS OR MINGW OR CYGWIN) zlib_ada_findtestenv(zlib_ada_ada-test) endif( MSVC OR MSYS OR MINGW OR CYGWIN) ada_add_executable(zlib_ada_buffer_demo buffer_demo.adb) target_link_libraries(zlib_ada_buffer_demo PRIVATE zlib_ada_Ada) ada_find_ali(zlib_ada_buffer_demo) add_test(NAME zlib_ada_buffer-demo COMMAND zlib_ada_buffer_demo) if(MSVC OR MSYS OR MINGW OR CYGWIN) zlib_ada_findtestenv(zlib_ada_buffer-demo) endif( MSVC OR MSYS OR MINGW OR CYGWIN) ada_add_executable(zlib_ada_mtest mtest.adb) target_link_libraries(zlib_ada_mtest PRIVATE zlib_ada_Ada) ada_find_ali(zlib_ada_mtest) #Not adding test as this is an endless-loop ada_add_executable(zlib_ada_read read.adb) target_link_libraries(zlib_ada_read PRIVATE zlib_ada_Ada) ada_find_ali(zlib_ada_read) add_test(NAME zlib_ada_read COMMAND zlib_ada_read) if(MSVC OR MSYS OR MINGW OR CYGWIN) zlib_ada_findtestenv(zlib_ada_read) endif( MSVC OR MSYS OR MINGW OR CYGWIN) endif(ZLIB_ADA_BUILD_TESTING) endif(ZLIB_ADA_BUILD_SHARED) if(ZLIB_ADA_BUILD_STATIC) ada_add_library(zlib_ada_AdaStatic STATIC zlib-thin.adb zlib.adb) target_link_libraries(zlib_ada_AdaStatic INTERFACE ZLIB::ZLIBSTATIC) set_target_properties(zlib_ada_AdaStatic PROPERTIES OUTPUT_NAME zlib-ada${zlib_Ada_static_suffix}) ada_add_library(zlib_ada_streamsStatic STATIC zlib-streams.adb) target_link_libraries(zlib_ada_streamsStatic PUBLIC zlib_ada_AdaStatic) ada_find_ali(zlib_ada_streamsStatic) if(ZLIB_ADA_BUILD_TESTING) enable_testing() ada_add_executable(zlib_ada_testStatic test.adb) target_link_libraries(zlib_ada_testStatic PRIVATE zlib_ada_AdaStatic zlib_ada_streamsStatic) ada_find_ali(zlib_ada_testStatic) add_test(NAME zlib_ada_testStatic COMMAND zlib_ada_testStatic) set_tests_properties(zlib_ada_testStatic PROPERTIES FIXTURES_REQUIRED zlib_ada_cleanup) ada_add_executable(zlib_ada_buffer-demoStatic buffer_demo.adb) target_link_libraries(zlib_ada_buffer-demoStatic PRIVATE zlib_ada_AdaStatic) ada_find_ali(zlib_ada_buffer-demoStatic) add_test(NAME zlib_ada_buffer-demoStatic COMMAND zlib_ada_buffer-demoStatic) ada_add_executable(zlib_ada_mtestStatic mtest.adb) target_link_libraries(zlib_ada_mtestStatic PRIVATE zlib_ada_AdaStatic) ada_find_ali(zlib_ada_mtestStatic) # Not adding test as this is an endless-loop ada_add_executable(zlib_ada_readStatic read.adb) target_link_libraries(zlib_ada_readStatic PRIVATE zlib_ada_AdaStatic) ada_find_ali(zlib_ada_readStatic) add_test(NAME zlib_ada_readStatic COMMAND zlib_ada_readStatic) endif(ZLIB_ADA_BUILD_TESTING) endif(ZLIB_ADA_BUILD_STATIC) if(ZLIB_ADA_BUILD_TESTING) add_test(NAME zlib_ada_cleanup COMMAND ${CMAKE_COMMAND} -E rm ${CMAKE_CURRENT_BINARY_DIR}/testzlib.in ${CMAKE_CURRENT_BINARY_DIR}/testzlib.out ${CMAKE_CURRENT_BINARY_DIR}/testzlib.zlb) set_tests_properties(zlib_ada_cleanup PROPERTIES FIXTURES_CLEANUP zlib_ada_cleanup) endif(ZLIB_ADA_BUILD_TESTING)