1 CMAKE_MINIMUM_REQUIRED(VERSION 2.0)
3 INCLUDE_REGULAR_EXPRESSION("^.*$")
5 # We need ansi c-flags, especially on HP
6 SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
7 SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
9 # Disable warnings on Borland to avoid changing 3rd party code.
11 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
14 # If we are on AIX, do the _ALL_SOURCE magic
15 IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
17 ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
19 # Include all the necessary files for macros
20 #SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
21 # Include all the necessary files for macros
22 INCLUDE (CheckIncludeFiles)
23 INCLUDE (CheckFunctionExists)
24 INCLUDE (CheckTypeSize)
25 INCLUDE (CheckSymbolExists)
26 INCLUDE (TestBigEndian)
28 MACRO(MANGLE_VARIABLE_NAME str var prefix)
29 STRING(TOUPPER "${str}" mangle_variable_name_var)
30 STRING(REGEX REPLACE "[/. ]" "_" mangle_variable_name_var "${mangle_variable_name_var}")
31 SET(${var} "${prefix}${mangle_variable_name_var}")
32 ENDMACRO(MANGLE_VARIABLE_NAME str var)
34 # Check if header file exists and add it to the list.
35 MACRO(CHECK_INCLUDE_FILE_CONCAT FILE)
36 MANGLE_VARIABLE_NAME("${FILE}" "CHECK_INCLUDE_FILE_CONCAT_VAR" "HAVE_")
37 CHECK_INCLUDE_FILES("${HEADER_INCLUDES};${FILE}" ${CHECK_INCLUDE_FILE_CONCAT_VAR})
38 IF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
39 SET(HEADER_INCLUDES ${HEADER_INCLUDES} ${FILE})
40 ENDIF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
41 ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
43 MACRO(CHECK_FUNCTION_EXISTS_EX FUNC)
44 MANGLE_VARIABLE_NAME("${FUNC}" "CHECK_FUNCTION_EXISTS_EX_VAR" "HAVE_")
45 CHECK_FUNCTION_EXISTS("${FUNC}" "${CHECK_FUNCTION_EXISTS_EX_VAR}")
46 ENDMACRO(CHECK_FUNCTION_EXISTS_EX)
48 MACRO(CHECK_SYMBOL_EXISTS_EX SYM)
49 MANGLE_VARIABLE_NAME("${SYM}" "CHECK_SYMBOL_EXISTS_EX_VAR" "HAVE_")
50 CHECK_SYMBOL_EXISTS("${SYM}" "${HEADER_INCLUDES}" "${CHECK_SYMBOL_EXISTS_EX_VAR}")
51 ENDMACRO(CHECK_SYMBOL_EXISTS_EX)
53 #MACRO(CHECK_TYPE_SIZE_EX type defualt_size)
54 # MANGLE_VARIABLE_NAME("${type}" "check_type_size_var" "")
55 # CHECK_TYPE_SIZE("${type}" "SIZEOF_${check_type_size_var}")
56 # IF(HAVE_${check_type_size_var})
57 # SET("HAVE_${check_type_size_var}" 1)
58 # ELSE(HAVE_${check_type_size_var})
59 # ENDIF(HAVE_${check_type_size_var})
60 #ENDMACRO(CHECK_TYPE_SIZE_EX)
64 INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")
66 #check for stdc headers
67 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
69 #check for other headers used by the program
91 CHECK_INCLUDE_FILE_CONCAT("${file}")
94 #check for the functions used by the program
112 CHECK_SYMBOL_EXISTS_EX("${func}")
115 # on Syllable lchown() is there, but always returns "Not implemented"
116 IF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
118 ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
120 CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T)
121 IF(HAVE_SIZEOF_DEV_T)
123 ELSE(HAVE_SIZEOF_DEV_T)
125 SET (dev_t "unsigned long")
126 ENDIF(HAVE_SIZEOF_DEV_T)
128 CHECK_TYPE_SIZE("major_t" SIZEOF_MAJOR_T)
129 IF(HAVE_SIZEOF_MAJOR_T)
131 ELSE(HAVE_SIZEOF_MAJOR_T)
133 SET (major_t "unsigned int")
134 ENDIF(HAVE_SIZEOF_MAJOR_T)
136 CHECK_TYPE_SIZE("minor_t" SIZEOF_MINOR_T)
137 IF(HAVE_SIZEOF_MINOR_T)
139 ELSE(HAVE_SIZEOF_MINOR_T)
141 SET (minor_t "unsigned int")
142 ENDIF(HAVE_SIZEOF_MINOR_T)
144 CHECK_TYPE_SIZE("nlink_t" SIZEOF_NLINK_T)
145 IF(HAVE_SIZEOF_NLINK_T)
147 ELSE(HAVE_SIZEOF_NLINK_T)
149 SET (nlink_t "unsigned short")
150 ENDIF(HAVE_SIZEOF_NLINK_T)
152 CHECK_TYPE_SIZE("uint64_t" SIZEOF_UINT64_T)
153 IF(HAVE_SIZEOF_UINT64_T)
154 SET (HAVE_UINT64_T 1)
155 ELSE(HAVE_SIZEOF_UINT64_T)
156 SET (HAVE_UINT64_T 0)
157 SET (uint64_t "long long")
158 ENDIF(HAVE_SIZEOF_UINT64_T)
160 CHECK_TYPE_SIZE("gid_t" SIZEOF_GID_T)
161 IF(HAVE_SIZEOF_GID_T)
163 ELSE(HAVE_SIZEOF_GID_T)
166 ENDIF(HAVE_SIZEOF_GID_T)
168 CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T)
169 IF(HAVE_SIZEOF_MODE_T)
171 ELSE(HAVE_SIZEOF_MODE_T)
174 ENDIF(HAVE_SIZEOF_MODE_T)
176 CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T)
177 IF(HAVE_SIZEOF_OFF_T)
179 ELSE(HAVE_SIZEOF_OFF_T)
182 ENDIF(HAVE_SIZEOF_OFF_T)
183 CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
184 IF(HAVE_SIZEOF_SIZE_T)
186 ELSE(HAVE_SIZEOF_SIZE_T)
188 SET (size_t "unsigned")
189 ENDIF(HAVE_SIZEOF_SIZE_T)
191 CHECK_TYPE_SIZE("ssize_t" SIZEOF_SSIZE_T)
192 IF(HAVE_SIZEOF_SSIZE_T)
194 ELSE(HAVE_SIZEOF_SSIZE_T)
196 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
197 CHECK_TYPE_SIZE("__int64" SIZEOF___INT64)
198 IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
200 ENDIF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
201 IF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
202 SET(ssize_t "__int64")
203 ENDIF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
204 ENDIF(HAVE_SIZEOF_SSIZE_T)
206 CHECK_TYPE_SIZE("uid_t" SIZEOF_UID_T)
207 IF(HAVE_SIZEOF_UID_T)
209 ELSE(HAVE_SIZEOF_UID_T)
212 ENDIF(HAVE_SIZEOF_UID_T)
214 #SET (HAVE_BASENAME 0)
215 SET (HAVE_CTYPE_H 1) # all our platforms have <ctype.h>
217 #SET (HAVE_DIRNAME 0)
218 #SET (HAVE_FNMATCH 1)
219 #SET (HAVE_FNMATCH_H 1)
220 #SET (HAVE_INTTYPES_H 1)
222 #SET (HAVE_LIBGEN_H 1)
224 #SET (HAVE_MAJOR_T 0)
225 #SET (HAVE_MEMORY_H 1)
226 #SET (HAVE_MINOR_T 0)
227 #SET (HAVE_NLINK_T 1)
228 #SET (HAVE_SNPRINTF 1)
229 #SET (HAVE_STDINT_H 1)
230 #SET (HAVE_STDLIB_H 1)
232 #SET (HAVE_STRFTIME 1)
233 #SET (HAVE_STRINGS_H 1)
234 #SET (HAVE_STRING_H 1)
235 #SET (HAVE_STRLCPY 0)
236 #SET (HAVE_STRMODE 0)
238 #SET (HAVE_SYS_STAT_H 1)
239 #SET (HAVE_SYS_TYPES_H 1)
240 #SET (HAVE_UINT64_T 1)
241 #SET (HAVE_UNISTD_H 1)
242 SET (MAJOR_IN_MKDEV 0)
243 SET (MAJOR_IN_SYSMACROS 0)
245 # for most systems makedev is two args on qnx it is three
246 # try run is nothing but trouble so just hard code it
247 SET (MAKEDEV_THREE_ARGS 0)
249 SET(MAKEDEV_THREE_ARGS 1)
251 #SET (NEED_BASENAME 0)
252 #SET (NEED_DIRNAME 0)
253 #SET (NEED_FNMATCH 1)
257 #SET (NEED_SNPRINTF 0)
259 #SET (NEED_STRLCPY 0)
260 #SET (NEED_STRMODE 1)
262 SET (PACKAGE_BUGREPORT "")
263 SET (PACKAGE_NAME "\"libtar\"")
264 SET (PACKAGE_STRING "\"libtar 1.2.11\"")
265 SET (PACKAGE_TARNAME "\"libtar\"")
266 SET (PACKAGE_VERSION "\"1.2.11\"")
267 #SET (STDC_HEADERS 1)
271 #SET (major_t "unsigned int")
272 #SET (minor_t "unsigned int")
279 SET (LISTHASH_PREFIX "libtar")
281 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/listhash.h.in
282 ${LIBTAR_BINARY_DIR}/libtar/libtar_listhash.h @ONLY IMMEDIATE)
283 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/list.c.in
284 ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c @ONLY IMMEDIATE)
285 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/hash.c.in
286 ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c @ONLY IMMEDIATE)
288 FOREACH(hfile libtar.h tar.h compat/compat.h)
289 GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
290 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
291 ${LIBTAR_BINARY_DIR}/libtar/${outname} @ONLY IMMEDIATE)
294 FOREACH(hfile internal.h filesystem.h)
295 GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
296 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
297 ${LIBTAR_BINARY_DIR}/libtarint/${outname} @ONLY IMMEDIATE)
307 ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c
308 ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c
313 ${LIBTAR_BINARY_DIR}/libtar/config.h
325 IF(NOT HAVE_DIRENT_H)
328 filesystem.c filesystem.h)
329 ENDIF(NOT HAVE_DIRENT_H)
332 SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c)
334 ENDIF(NOT HAVE_STRLCPY)
337 SET(libtar_SRC ${libtar_SRC} compat/strmode.c)
339 ENDIF(NOT HAVE_STRMODE)
342 IF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
343 SET(libtar_SRC ${libtar_SRC} compat/snprintf.c)
345 ENDIF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
349 SET(libtar_SRC ${libtar_SRC} compat/dirname.c)
351 ENDIF(NOT HAVE_DIRNAME)
355 SET(libtar_SRC ${libtar_SRC} compat/strsep.c)
357 ENDIF(NOT HAVE_STRSEP)
360 IF(NOT HAVE_BASENAME)
361 SET(libtar_SRC ${libtar_SRC} compat/basename.c)
363 ENDIF(NOT HAVE_BASENAME)
366 SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c)
368 ENDIF(NOT HAVE_FNMATCH)
371 #SET(libtar_SRC ${libtar_SRC} compat/glob.c)
373 #ENDIF(NOT HAVE_GLOB)
376 IF(NOT CMTAR_ZLIB_LIBRARIES)
377 MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_LIBRARIES.")
378 ENDIF(NOT CMTAR_ZLIB_LIBRARIES)
379 IF(NOT CMTAR_ZLIB_HEADER)
380 MESSAGE(FATAL_ERROR "Parent project must set CMTAR_ZLIB_HEADER.")
381 ENDIF(NOT CMTAR_ZLIB_HEADER)
382 INCLUDE_DIRECTORIES(${CMTAR_ZLIB_INCLUDE_DIRS})
384 CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/config.h.in
385 ${LIBTAR_BINARY_DIR}/libtar/config.h)
387 ADD_LIBRARY(cmtar STATIC ${libtar_SRC})
388 ADD_EXECUTABLE(tartest libtar.c)
389 TARGET_LINK_LIBRARIES(tartest cmtar ${CMTAR_ZLIB_LIBRARIES})