Resync
[CMakeLuaTailorHgBridge.git] / CMakeLua / Utilities / cmtar / CMakeLists.txt
blobb8e511833fe77b2bbd1d0998653e5bac59893b9a
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
2 IF(COMMAND CMAKE_POLICY)
3   CMAKE_POLICY(SET CMP0003 NEW)
4 ENDIF(COMMAND CMAKE_POLICY)
6 PROJECT(LIBTAR C)
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.
15 IF(BORLAND)
16   SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
17 ENDIF(BORLAND)
19 # If we are on AIX, do the _ALL_SOURCE magic
20 IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
21   SET(_ALL_SOURCE 1)
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
75 FOREACH(file
76   "ctype.h"
77   "fnmatch.h"
78   "inttypes.h"
79   "io.h"
80   "libgen.h"
81   "memory.h"
82   "sys/mkdev.h"
83   "stdint.h"
84   "stdlib.h"
85   "stdio.h"
86   "string.h"
87   "strings.h"
88   "sys/param.h"
89   "sys/types.h"
90   "sys/stat.h"
91   "unistd.h"
92   "glob.h"
93   "dirent.h"
94   "sys/sysmacros.h"
95   )
96   CHECK_INCLUDE_FILE_CONCAT("${file}")
97 ENDFOREACH(file)
99 #check for the functions used by the program
100 FOREACH(func
101     basename
102     dirname
103     fnmatch
104     lchown
105     snprintf
106     strlcpy
107     strmode
108     strsep
109     strdup
110     strftime
111     vsnprintf
112     glob
113     major
114     minor
115     makedev
116     )
117   CHECK_SYMBOL_EXISTS_EX("${func}")
118 ENDFOREACH(func)
120 # on Syllable lchown() is there, but always returns "Not implemented"
121 IF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
122   SET(HAVE_LCHOWN 0)
123 ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
125 CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T)
126 IF(HAVE_SIZEOF_DEV_T)
127   SET (HAVE_DEV_T 1)
128 ELSE(HAVE_SIZEOF_DEV_T)
129   SET (HAVE_DEV_T 0)
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)
135   SET (HAVE_MAJOR_T 1)
136 ELSE(HAVE_SIZEOF_MAJOR_T)
137   SET (HAVE_MAJOR_T 0)
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)
143   SET (HAVE_MINOR_T 1)
144 ELSE(HAVE_SIZEOF_MINOR_T)
145   SET (HAVE_MINOR_T 0)
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)
151   SET (HAVE_NLINK_T 1)
152 ELSE(HAVE_SIZEOF_NLINK_T)
153   SET (HAVE_NLINK_T 0)
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)
167   SET (HAVE_GID_T 1)
168 ELSE(HAVE_SIZEOF_GID_T)
169   SET (HAVE_GID_T 0)
170   SET (gid_t "int")
171 ENDIF(HAVE_SIZEOF_GID_T)
173 CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T)
174 IF(HAVE_SIZEOF_MODE_T)
175   SET (HAVE_MODE_T 1)
176 ELSE(HAVE_SIZEOF_MODE_T)
177   SET (HAVE_MODE_T 0)
178   SET (mode_t "int")
179 ENDIF(HAVE_SIZEOF_MODE_T)
181 CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T)
182 IF(HAVE_SIZEOF_OFF_T)
183   SET (HAVE_OFF_T 1)
184 ELSE(HAVE_SIZEOF_OFF_T)
185   SET (HAVE_OFF_T 0)
186   SET (off_t "long")
187 ENDIF(HAVE_SIZEOF_OFF_T)
188 CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
189 IF(HAVE_SIZEOF_SIZE_T)
190   SET (HAVE_SIZE_T 1)
191 ELSE(HAVE_SIZEOF_SIZE_T)
192   SET (HAVE_SIZE_T 0)
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)
198   SET (HAVE_SSIZE_T 1)
199 ELSE(HAVE_SIZEOF_SSIZE_T)
200   SET (HAVE_SSIZE_T 0)
201   CHECK_TYPE_SIZE("long"  SIZEOF_LONG)
202   CHECK_TYPE_SIZE("__int64"  SIZEOF___INT64)
203   IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
204     SET(ssize_t "long")
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)
213   SET (HAVE_UID_T 1)
214 ELSE(HAVE_SIZEOF_UID_T)
215   SET (HAVE_UID_T 0)
216   SET (uid_t "int")
217 ENDIF(HAVE_SIZEOF_UID_T)
219 #SET (HAVE_BASENAME 0)
220 SET (HAVE_CTYPE_H 1) # all our platforms have <ctype.h>
221 #SET (HAVE_DEV_T 1)
222 #SET (HAVE_DIRNAME 0)
223 #SET (HAVE_FNMATCH 1)
224 #SET (HAVE_FNMATCH_H 1)
225 #SET (HAVE_INTTYPES_H 1)
226 #SET (HAVE_LCHOWN 1)
227 #SET (HAVE_LIBGEN_H 1)
228 SET (HAVE_LIBZ 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)
236 #SET (HAVE_STRDUP 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)
242 #SET (HAVE_STRSEP 1)
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)
253 IF(QNXNTO)
254   SET(MAKEDEV_THREE_ARGS 1)
255 ENDIF(QNXNTO)
256 #SET (NEED_BASENAME 0)
257 #SET (NEED_DIRNAME 0)
258 #SET (NEED_FNMATCH 1)
259 IF(UNIX)
260   SET (NEED_MAKEDEV 1)
261 ENDIF(UNIX)
262 #SET (NEED_SNPRINTF 0)
263 #SET (NEED_STRDUP 0)
264 #SET (NEED_STRLCPY 0)
265 #SET (NEED_STRMODE 1)
266 #SET (NEED_STRSEP 0)
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)
273 SET (const 0)
274 #SET (dev_t 0)
275 #SET (gid_t 0)
276 #SET (major_t "unsigned int")
277 #SET (minor_t "unsigned int")
278 #SET (mode_t 0)
279 #SET (nlink_t 0)
280 #SET (off_t 0)
281 #SET (size_t 0)
282 #SET (uid_t 0)
283 #SET (uint64_t 0)
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)
297 ENDFOREACH(hfile)
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)
303 ENDFOREACH(hfile)
304   
305 SET(libtar_SRC
306   append.c
307   block.c
308   decode.c
309   encode.c
310   extract.c
311   handle.c
312   ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c
313   ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c
314   output.c
315   util.c
316   wrapper.c
317   internal.h
318   ${LIBTAR_BINARY_DIR}/libtar/config.h
319   config.h.in
320   tar.h
321   libtar.h
322   compat/compat.h
323   
324 #  compat/strlcpy.c
325 #  compat/basename.c
326 #  compat/dirname.c
327 #  compat/strmode.c 
328 #  compat/strsep.c 
330 IF(NOT HAVE_DIRENT_H)
331   SET(libtar_SRC
332     ${libtar_SRC}
333     filesystem.c filesystem.h)
334 ENDIF(NOT HAVE_DIRENT_H)
336 IF(NOT HAVE_STRLCPY)
337 SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c)
338 SET(NEED_STRLCPY 1)
339 ENDIF(NOT HAVE_STRLCPY)
341 IF(NOT HAVE_STRMODE)
342 SET(libtar_SRC ${libtar_SRC} compat/strmode.c)
343 SET(NEED_STRMODE 1)
344 ENDIF(NOT HAVE_STRMODE)
346 IF(WIN32)
347 IF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
348 SET(libtar_SRC ${libtar_SRC} compat/snprintf.c)
349 SET(NEED_SNPRINTF 1)
350 ENDIF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
351 ENDIF(WIN32)
353 IF(NOT HAVE_DIRNAME)
354 SET(libtar_SRC ${libtar_SRC} compat/dirname.c)
355 SET(NEED_DIRNAME 1)
356 ENDIF(NOT HAVE_DIRNAME)
359 IF(NOT HAVE_STRSEP)
360 SET(libtar_SRC ${libtar_SRC} compat/strsep.c)
361 SET(NEED_STRSEP 1)
362 ENDIF(NOT HAVE_STRSEP)
365 IF(NOT HAVE_BASENAME)
366 SET(libtar_SRC ${libtar_SRC} compat/basename.c)
367 SET(NEED_BASENAME 1)
368 ENDIF(NOT HAVE_BASENAME)
370 IF(NOT HAVE_FNMATCH)
371 SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c)
372 SET(NEED_FNMATCH 1)
373 ENDIF(NOT HAVE_FNMATCH)
375 #IF(NOT HAVE_GLOB)
376 #SET(libtar_SRC ${libtar_SRC} compat/glob.c)
377 #SET(NEED_GLOB 1)
378 #ENDIF(NOT HAVE_GLOB)
380 # Setup zlib.
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})