1#
2# Copyright by The HDF Group.
3# All rights reserved.
4#
5# This file is part of HDF5.  The full HDF5 copyright notice, including
6# terms governing use, modification, and redistribution, is contained in
7# the COPYING file, which can be found at the root of the source code
8# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
9# If you do not have access to either file, you may request a copy from
10# help@hdfgroup.org.
11#
12#-------------------------------------------------------------------------------
13macro (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
14  # May need to build JPEG with PIC on x64 machines with gcc
15  # Need to use CMAKE_ANSI_CFLAGS define so that compiler test works
16
17  if (${compress_type} MATCHES "SVN")
18    EXTERNALPROJECT_ADD (JPEG
19        SVN_REPOSITORY ${JPEG_URL}
20        # [SVN_REVISION rev]
21        INSTALL_COMMAND ""
22        CMAKE_ARGS
23            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
24            -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
25            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
26            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
27            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
28            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
29            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
30            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
31            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
32            -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
33    )
34  elseif (${compress_type} MATCHES "GIT")
35    EXTERNALPROJECT_ADD (JPEG
36        GIT_REPOSITORY ${JPEG_URL}
37        GIT_TAG ${JPEG_BRANCH}
38        INSTALL_COMMAND ""
39        CMAKE_ARGS
40            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
41            -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
42            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
43            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
44            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
45            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
46            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
47            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
48            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
49            -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
50    )
51  elseif (${compress_type} MATCHES "TGZ")
52    EXTERNALPROJECT_ADD (JPEG
53        URL ${JPEG_URL}
54        URL_MD5 ""
55        INSTALL_COMMAND ""
56        CMAKE_ARGS
57            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
58            -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
59            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
60            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
61            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
62            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
63            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
64            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
65            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
66            -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
67    )
68  endif ()
69  externalproject_get_property (JPEG BINARY_DIR SOURCE_DIR)
70
71##include (${BINARY_DIR}/${JPEG_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake)
72# Create imported target jpeg-static
73  add_library(jpeg-static STATIC IMPORTED)
74  HDF_IMPORT_SET_LIB_OPTIONS (jpeg-static "jpeg" STATIC "")
75  add_dependencies (JPEG jpeg-static)
76  set (JPEG_STATIC_LIBRARY "jpeg-static")
77  set (JPEG_LIBRARIES ${JPEG_STATIC_LIBRARY})
78  if (BUILD_SHARED_LIBS)
79    # Create imported target jpeg-shared
80    add_library(jpeg-shared SHARED IMPORTED)
81    HDF_IMPORT_SET_LIB_OPTIONS (jpeg-shared "jpeg" SHARED "")
82    add_dependencies (JPEG jpeg-shared)
83    set (JPEG_SHARED_LIBRARY "jpeg-shared")
84    set (JPEG_LIBRARIES ${JPEG_LIBRARIES} ${JPEG_SHARED_LIBRARY})
85  endif ()
86
87  set (JPEG_INCLUDE_DIR_GEN "${BINARY_DIR}")
88  set (JPEG_INCLUDE_DIR "${SOURCE_DIR}/src")
89  set (JPEG_FOUND 1)
90  set (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIR_GEN} ${JPEG_INCLUDE_DIR})
91endmacro ()
92
93#-------------------------------------------------------------------------------
94macro (PACKAGE_JPEG_LIBRARY compress_type)
95  add_custom_target (JPEG-GenHeader-Copy ALL
96      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${JPEG_INCLUDE_DIR_GEN}/jconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
97      COMMENT "Copying ${JPEG_INCLUDE_DIR_GEN}/jconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
98  )
99  set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jconfig.h)
100  if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
101    add_dependencies (JPEG-GenHeader-Copy JPEG)
102  endif ()
103endmacro ()
104
105#-------------------------------------------------------------------------------
106macro (EXTERNAL_SZIP_LIBRARY compress_type encoding)
107  if (${compress_type} MATCHES "SVN")
108    EXTERNALPROJECT_ADD (SZIP
109        SVN_REPOSITORY ${SZIP_URL}
110        # [SVN_REVISION rev]
111        INSTALL_COMMAND ""
112        CMAKE_ARGS
113            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
114            -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
115            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
116            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
117            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
118            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
119            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
120            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
121            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
122            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
123            -DSZIP_ENABLE_ENCODING:BOOL=${encoding}
124    )
125  elseif (${compress_type} MATCHES "GIT")
126    EXTERNALPROJECT_ADD (SZIP
127        GIT_REPOSITORY ${SZIP_URL}
128        GIT_TAG ${SZIP_BRANCH}
129        INSTALL_COMMAND ""
130        CMAKE_ARGS
131            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
132            -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
133            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
134            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
135            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
136            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
137            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
138            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
139            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
140            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
141            -DSZIP_ENABLE_ENCODING:BOOL=${encoding}
142    )
143  elseif (${compress_type} MATCHES "TGZ")
144    EXTERNALPROJECT_ADD (SZIP
145        URL ${SZIP_URL}
146        URL_MD5 ""
147        INSTALL_COMMAND ""
148        CMAKE_ARGS
149            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
150            -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
151            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
152            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
153            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
154            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
155            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
156            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
157            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
158            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
159            -DSZIP_ENABLE_ENCODING:BOOL=${encoding}
160    )
161  endif ()
162  externalproject_get_property (SZIP BINARY_DIR SOURCE_DIR)
163
164##include (${BINARY_DIR}/${SZIP_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake)
165# Create imported target szip-static
166  add_library(szip-static STATIC IMPORTED)
167  HDF_IMPORT_SET_LIB_OPTIONS (szip-static "szip" STATIC "")
168  add_dependencies (SZIP szip-static)
169  set (SZIP_STATIC_LIBRARY "szip-static")
170  set (SZIP_LIBRARIES ${SZIP_STATIC_LIBRARY})
171  if (BUILD_SHARED_LIBS)
172    # Create imported target szip-shared
173    add_library(szip-shared SHARED IMPORTED)
174    HDF_IMPORT_SET_LIB_OPTIONS (szip-shared "szip" SHARED "")
175    add_dependencies (SZIP szip-shared)
176    set (SZIP_SHARED_LIBRARY "szip-shared")
177    set (SZIP_LIBRARIES ${SZIP_LIBRARIES} ${SZIP_SHARED_LIBRARY})
178  endif ()
179
180  set (SZIP_INCLUDE_DIR_GEN "${BINARY_DIR}")
181  set (SZIP_INCLUDE_DIR "${SOURCE_DIR}/src")
182  set (SZIP_FOUND 1)
183  set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR_GEN} ${SZIP_INCLUDE_DIR})
184endmacro ()
185
186#-------------------------------------------------------------------------------
187macro (PACKAGE_SZIP_LIBRARY compress_type)
188  add_custom_target (SZIP-GenHeader-Copy ALL
189      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
190      COMMENT "Copying ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
191  )
192  set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SZconfig.h)
193  if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
194    add_dependencies (SZIP-GenHeader-Copy SZIP)
195  endif ()
196endmacro ()
197
198#-------------------------------------------------------------------------------
199macro (EXTERNAL_ZLIB_LIBRARY compress_type)
200  if (${compress_type} MATCHES "SVN")
201    EXTERNALPROJECT_ADD (ZLIB
202        SVN_REPOSITORY ${ZLIB_URL}
203        # [SVN_REVISION rev]
204        INSTALL_COMMAND ""
205        CMAKE_ARGS
206            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
207            -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
208            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
209            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
210            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
211            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
212            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
213            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
214            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
215            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
216    )
217  elseif (${compress_type} MATCHES "GIT")
218    EXTERNALPROJECT_ADD (ZLIB
219        GIT_REPOSITORY ${ZLIB_URL}
220        GIT_TAG ${ZLIB_BRANCH}
221        INSTALL_COMMAND ""
222        CMAKE_ARGS
223            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
224            -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
225            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
226            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
227            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
228            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
229            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
230            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
231            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
232            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
233    )
234  elseif (${compress_type} MATCHES "TGZ")
235    EXTERNALPROJECT_ADD (ZLIB
236        URL ${ZLIB_URL}
237        URL_MD5 ""
238        INSTALL_COMMAND ""
239        CMAKE_ARGS
240            -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
241            -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
242            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
243            -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
244            -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
245            -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
246            -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
247            -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
248            -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY}
249            -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
250    )
251  endif ()
252  externalproject_get_property (ZLIB BINARY_DIR SOURCE_DIR)
253
254  if (WIN32)
255    set (ZLIB_LIB_NAME "zlib")
256  else ()
257    set (ZLIB_LIB_NAME "z")
258  endif ()
259##include (${BINARY_DIR}/${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake)
260# Create imported target zlib-static
261  add_library(zlib-static STATIC IMPORTED)
262  HDF_IMPORT_SET_LIB_OPTIONS (zlib-static ${ZLIB_LIB_NAME} STATIC "")
263  add_dependencies (ZLIB zlib-static)
264  set (ZLIB_STATIC_LIBRARY "zlib-static")
265  set (ZLIB_LIBRARIES ${ZLIB_STATIC_LIBRARY})
266  if (BUILD_SHARED_LIBS)
267    # Create imported target zlib-shared
268    add_library(zlib-shared SHARED IMPORTED)
269    HDF_IMPORT_SET_LIB_OPTIONS (zlib-shared ${ZLIB_LIB_NAME} SHARED "")
270    add_dependencies (ZLIB zlib-shared)
271    set (ZLIB_SHARED_LIBRARY "zlib-shared")
272    set (ZLIB_LIBRARIES ${ZLIB_LIBRARIES} ${ZLIB_SHARED_LIBRARY})
273  endif ()
274
275  set (ZLIB_INCLUDE_DIR_GEN "${BINARY_DIR}")
276  set (ZLIB_INCLUDE_DIR "${SOURCE_DIR}")
277  set (ZLIB_FOUND 1)
278  set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR})
279endmacro ()
280
281#-------------------------------------------------------------------------------
282macro (PACKAGE_ZLIB_LIBRARY compress_type)
283  add_custom_target (ZLIB-GenHeader-Copy ALL
284      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ZLIB_INCLUDE_DIR_GEN}/zconf.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
285      COMMENT "Copying ${ZLIB_INCLUDE_DIR_GEN}/zconf.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
286  )
287  set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/zconf.h)
288  if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
289    add_dependencies (ZLIB-GenHeader-Copy ZLIB)
290  endif ()
291endmacro ()
292