summaryrefslogtreecommitdiff
path: root/contrib/ada/CMakeLists.txt
blob: b7a2e4dcba9112d54d5ff4553a395f7cdcb1a36b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
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 "$<TARGET_FILE_DIR:ZLIB::ZLIB>${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)