1 CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
2 IF(COMMAND CMAKE_POLICY)
3 CMAKE_POLICY(SET CMP0003 NEW)
4 ENDIF(COMMAND CMAKE_POLICY)
8 INCLUDE_REGULAR_EXPRESSION("^.*$")
10 # We need ansi c-flags, especially on HP
11 SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
12 SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
14 # Disable warnings on Borland to avoid changing 3rd party code.
16 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
19 # If we are on AIX, do the _ALL_SOURCE magic
20 IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
22 ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
24 # Include all the necessary files for macros
25 #SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
26 # Include all the necessary files for macros
27 INCLUDE (CheckIncludeFiles)
28 INCLUDE (CheckFunctionExists)
29 INCLUDE (CheckTypeSize)
30 INCLUDE (CheckSymbolExists)
31 INCLUDE (TestBigEndian)
33 MACRO(MANGLE_VARIABLE_NAME str var prefix)
34 STRING(TOUPPER "${str}" mangle_variable_name_var)
35 STRING(REGEX REPLACE "[/. ]" "_" mangle_variable_name_var "${mangle_variable_name_var}")
36 SET(${var} "${prefix}${mangle_variable_name_var}")
37 ENDMACRO(MANGLE_VARIABLE_NAME str var)
39 # Check if header file exists and add it to the list.
40 MACRO(CHECK_INCLUDE_FILE_CONCAT FILE)
41 MANGLE_VARIABLE_NAME("${FILE}" "CHECK_INCLUDE_FILE_CONCAT_VAR" "HAVE_")
42 CHECK_INCLUDE_FILES("${HEADER_INCLUDES};${FILE}" ${CHECK_INCLUDE_FILE_CONCAT_VAR})
43 IF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
44 SET(HEADER_INCLUDES ${HEADER_INCLUDES} ${FILE})
45 ENDIF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
46 ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
48 MACRO(CHECK_FUNCTION_EXISTS_EX FUNC)
49 MANGLE_VARIABLE_NAME("${FUNC}" "CHECK_FUNCTION_EXISTS_EX_VAR" "HAVE_")
50 CHECK_FUNCTION_EXISTS("${FUNC}" "${CHECK_FUNCTION_EXISTS_EX_VAR}")
51 ENDMACRO(CHECK_FUNCTION_EXISTS_EX)
53 MACRO(CHECK_SYMBOL_EXISTS_EX SYM)
54 MANGLE_VARIABLE_NAME("${SYM}" "CHECK_SYMBOL_EXISTS_EX_VAR" "HAVE_")
55 CHECK_SYMBOL_EXISTS("${SYM}" "${HEADER_INCLUDES}" "${CHECK_SYMBOL_EXISTS_EX_VAR}")
56 ENDMACRO(CHECK_SYMBOL_EXISTS_EX)
58 #MACRO(CHECK_TYPE_SIZE_EX type defualt_size)
59 # MANGLE_VARIABLE_NAME("${type}" "check_type_size_var" "")
60 # CHECK_TYPE_SIZE("${type}" "SIZEOF_${check_type_size_var}")
61 # IF(HAVE_${check_type_size_var})
62 # SET("HAVE_${check_type_size_var}" 1)
63 # ELSE(HAVE_${check_type_size_var})
64 # ENDIF(HAVE_${check_type_size_var})
65 #ENDMACRO(CHECK_TYPE_SIZE_EX)
69 INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")
71 #check for stdc headers
72 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
74 #check for other headers used by the program
96 CHECK_INCLUDE_FILE_CONCAT("${file}")
99 #check for the functions used by the program
117 CHECK_SYMBOL_EXISTS_EX("${func}")
120 # on Syllable lchown() is there, but always returns "Not implemented"
121 IF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
123 ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
125 CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T)
126 IF(HAVE_SIZEOF_DEV_T)
128 ELSE(HAVE_SIZEOF_DEV_T)
130 SET (dev_t "unsigned long")
131 ENDIF(HAVE_SIZEOF_DEV_T)
133 CHECK_TYPE_SIZE("major_t" SIZEOF_MAJOR_T)
134 IF(HAVE_SIZEOF_MAJOR_T)
136 ELSE(HAVE_SIZEOF_MAJOR_T)
138 SET (major_t "unsigned int")
139 ENDIF(HAVE_SIZEOF_MAJOR_T)
141 CHECK_TYPE_SIZE("minor_t" SIZEOF_MINOR_T)
142 IF(HAVE_SIZEOF_MINOR_T)
144 ELSE(HAVE_SIZEOF_MINOR_T)
146 SET (minor_t "unsigned int")
147 ENDIF(HAVE_SIZEOF_MINOR_T)
149 CHECK_TYPE_SIZE("nlink_t" SIZEOF_NLINK_T)
150 IF(HAVE_SIZEOF_NLINK_T)
152 ELSE(HAVE_SIZEOF_NLINK_T)
154 SET (nlink_t "unsigned short")
155 ENDIF(HAVE_SIZEOF_NLINK_T)
157 CHECK_TYPE_SIZE("uint64_t" SIZEOF_UINT64_T)
158 IF(HAVE_SIZEOF_UINT64_T)
159 SET (HAVE_UINT64_T 1)
160 ELSE(HAVE_SIZEOF_UINT64_T)
161 SET (HAVE_UINT64_T 0)
162 SET (uint64_t "long long")
163 ENDIF(HAVE_SIZEOF_UINT64_T)
165 CHECK_TYPE_SIZE("gid_t" SIZEOF_GID_T)
166 IF(HAVE_SIZEOF_GID_T)
168 ELSE(HAVE_SIZEOF_GID_T)
171 ENDIF(HAVE_SIZEOF_GID_T)
173 CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T)
174 IF(HAVE_SIZEOF_MODE_T)
176 ELSE(HAVE_SIZEOF_MODE_T)
179 ENDIF(HAVE_SIZEOF_MODE_T)
181 CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T)
182 IF(HAVE_SIZEOF_OFF_T)
184 ELSE(HAVE_SIZEOF_OFF_T)
187 ENDIF(HAVE_SIZEOF_OFF_T)
188 CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
189 IF(HAVE_SIZEOF_SIZE_T)
191 ELSE(HAVE_SIZEOF_SIZE_T)
193 SET (size_t "unsigned")
194 ENDIF(HAVE_SIZEOF_SIZE_T)
196 CHECK_TYPE_SIZE("ssize_t" SIZEOF_SSIZE_T)
197 IF(HAVE_SIZEOF_SSIZE_T)
199 ELSE(HAVE_SIZEOF_SSIZE_T)
201 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
202 CHECK_TYPE_SIZE("__int64" SIZEOF___INT64)
203 IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
205 ENDIF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
206 IF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
207 SET(ssize_t "__int64")
208 ENDIF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
209 ENDIF(HAVE_SIZEOF_SSIZE_T)
211 CHECK_TYPE_SIZE("uid_t" SIZEOF_UID_T)
212 IF(HAVE_SIZEOF_UID_T)
214 ELSE(HAVE_SIZEOF_UID_T)
217 ENDIF(HAVE_SIZEOF_UID_T)
219 #SET (HAVE_BASENAME 0)
220 SET (HAVE_CTYPE_H 1) # all our platforms have <ctype.h>
222 #SET (HAVE_DIRNAME 0)
223 #SET (HAVE_FNMATCH 1)
224 #SET (HAVE_FNMATCH_H 1)
225 #SET (HAVE_INTTYPES_H 1)
227 #SET (HAVE_LIBGEN_H 1)
229 #SET (HAVE_MAJOR_T 0)
230 #SET (HAVE_MEMORY_H 1)
231 #SET (HAVE_MINOR_T 0)
232 #SET (HAVE_NLINK_T 1)
233 #SET (HAVE_SNPRINTF 1)
234 #SET (HAVE_STDINT_H 1)
235 #SET (HAVE_STDLIB_H 1)
237 #SET (HAVE_STRFTIME 1)
238 #SET (HAVE_STRINGS_H 1)
239 #SET (HAVE_STRING_H 1)
240 #SET (HAVE_STRLCPY 0)
241 #SET (HAVE_STRMODE 0)
243 #SET (HAVE_SYS_STAT_H 1)
244 #SET (HAVE_SYS_TYPES_H 1)
245 #SET (HAVE_UINT64_T 1)
246 #SET (HAVE_UNISTD_H 1)
247 SET (MAJOR_IN_MKDEV 0)
248 SET (MAJOR_IN_SYSMACROS 0)
250 # for most systems makedev is two args on qnx it is three
251 # try run is nothing but trouble so just hard code it
252 SET (MAKEDEV_THREE_ARGS 0)
254 SET(MAKEDEV_THREE_ARGS 1)
256 #SET (NEED_BASENAME 0)
257 #SET (NEED_DIRNAME 0)
258 #SET (NEED_FNMATCH 1)
262 #SET (NEED_SNPRINTF 0)
264 #SET (NEED_STRLCPY 0)
265 #SET (NEED_STRMODE 1)
267 SET (PACKAGE_BUGREPORT "")
268 SET (PACKAGE_NAME "\"libtar\"")
269 SET (PACKAGE_STRING "\"libtar 1.2.11\"")
270 SET (PACKAGE_TARNAME "\"libtar\"")
271 SET (PACKAGE_VERSION "\"1.2.11\"")
272 #SET (STDC_HEADERS 1)
276 #SET (major_t "unsigned int")
277 #SET (minor_t "unsigned int")
284 SET (LISTHASH_PREFIX "libtar")
286 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/listhash.h.in
287 ${LIBTAR_BINARY_DIR}/libtar/libtar_listhash.h @ONLY IMMEDIATE)
288 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/list.c.in
289 ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c @ONLY IMMEDIATE)
290 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/hash.c.in
291 ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c @ONLY IMMEDIATE)
293 FOREACH(hfile libtar.h tar.h compat/compat.h)
294 GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
295 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
296 ${LIBTAR_BINARY_DIR}/libtar/${outname} @ONLY IMMEDIATE)
299 FOREACH(hfile internal.h filesystem.h)
300 GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
301 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
302 ${LIBTAR_BINARY_DIR}/libtarint/${outname} @ONLY IMMEDIATE)
312 ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c
313 ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c
318 ${LIBTAR_BINARY_DIR}/libtar/config.h
330 IF(NOT HAVE_DIRENT_H)
333 filesystem.c filesystem.h)
334 ENDIF(NOT HAVE_DIRENT_H)
337 SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c)
339 ENDIF(NOT HAVE_STRLCPY)
342 SET(libtar_SRC ${libtar_SRC} compat/strmode.c)
344 ENDIF(NOT HAVE_STRMODE)
347 IF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
348 SET(libtar_SRC ${libtar_SRC} compat/snprintf.c)
350 ENDIF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
354 SET(libtar_SRC ${libtar_SRC} compat/dirname.c)
356 ENDIF(NOT HAVE_DIRNAME)
360 SET(libtar_SRC ${libtar_SRC} compat/strsep.c)
362 ENDIF(NOT HAVE_STRSEP)
365 IF(NOT HAVE_BASENAME)
366 SET(libtar_SRC ${libtar_SRC} compat/basename.c)
368 ENDIF(NOT HAVE_BASENAME)
371 SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c)
373 ENDIF(NOT HAVE_FNMATCH)
376 #SET(libtar_SRC ${libtar_SRC} compat/glob.c)
378 #ENDIF(NOT HAVE_GLOB)
381 IF(NOT CMTAR_ZLIB_LIBRARIES)
382 MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_LIBRARIES.")
383 ENDIF(NOT CMTAR_ZLIB_LIBRARIES)
384 IF(NOT CMTAR_ZLIB_HEADER)
385 MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_HEADER.")
386 ENDIF(NOT CMTAR_ZLIB_HEADER)
387 INCLUDE_DIRECTORIES(${CMTAR_ZLIB_INCLUDE_DIRS})
389 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/config.h.in
390 ${LIBTAR_BINARY_DIR}/libtar/config.h)
392 ADD_LIBRARY(cmtar STATIC ${libtar_SRC})
393 ADD_EXECUTABLE(tartest libtar.c)
394 TARGET_LINK_LIBRARIES(tartest cmtar ${CMTAR_ZLIB_LIBRARIES})