Initial commit.
[CMakeLuaTailorHgBridge.git] / CMakeLua / Utilities / cmtar / CMakeLists.txt
blob328a9009e6259d9c7d7a5bc961b8d61df8e3521c
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.0)
2 PROJECT(LIBTAR C)
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.
10 IF(BORLAND)
11   SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
12 ENDIF(BORLAND)
14 # If we are on AIX, do the _ALL_SOURCE magic
15 IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
16   SET(_ALL_SOURCE 1)
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
70 FOREACH(file
71   "ctype.h"
72   "fnmatch.h"
73   "inttypes.h"
74   "io.h"
75   "libgen.h"
76   "memory.h"
77   "sys/mkdev.h"
78   "stdint.h"
79   "stdlib.h"
80   "stdio.h"
81   "string.h"
82   "strings.h"
83   "sys/param.h"
84   "sys/types.h"
85   "sys/stat.h"
86   "unistd.h"
87   "glob.h"
88   "dirent.h"
89   "sys/sysmacros.h"
90   )
91   CHECK_INCLUDE_FILE_CONCAT("${file}")
92 ENDFOREACH(file)
94 #check for the functions used by the program
95 FOREACH(func
96     basename
97     dirname
98     fnmatch
99     lchown
100     snprintf
101     strlcpy
102     strmode
103     strsep
104     strdup
105     strftime
106     vsnprintf
107     glob
108     major
109     minor
110     makedev
111     )
112   CHECK_SYMBOL_EXISTS_EX("${func}")
113 ENDFOREACH(func)
115 # on Syllable lchown() is there, but always returns "Not implemented"
116 IF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
117   SET(HAVE_LCHOWN 0)
118 ENDIF("${CMAKE_SYSTEM_NAME}" MATCHES syllable)
120 CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T)
121 IF(HAVE_SIZEOF_DEV_T)
122   SET (HAVE_DEV_T 1)
123 ELSE(HAVE_SIZEOF_DEV_T)
124   SET (HAVE_DEV_T 0)
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)
130   SET (HAVE_MAJOR_T 1)
131 ELSE(HAVE_SIZEOF_MAJOR_T)
132   SET (HAVE_MAJOR_T 0)
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)
138   SET (HAVE_MINOR_T 1)
139 ELSE(HAVE_SIZEOF_MINOR_T)
140   SET (HAVE_MINOR_T 0)
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)
146   SET (HAVE_NLINK_T 1)
147 ELSE(HAVE_SIZEOF_NLINK_T)
148   SET (HAVE_NLINK_T 0)
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)
162   SET (HAVE_GID_T 1)
163 ELSE(HAVE_SIZEOF_GID_T)
164   SET (HAVE_GID_T 0)
165   SET (gid_t "int")
166 ENDIF(HAVE_SIZEOF_GID_T)
168 CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T)
169 IF(HAVE_SIZEOF_MODE_T)
170   SET (HAVE_MODE_T 1)
171 ELSE(HAVE_SIZEOF_MODE_T)
172   SET (HAVE_MODE_T 0)
173   SET (mode_t "int")
174 ENDIF(HAVE_SIZEOF_MODE_T)
176 CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T)
177 IF(HAVE_SIZEOF_OFF_T)
178   SET (HAVE_OFF_T 1)
179 ELSE(HAVE_SIZEOF_OFF_T)
180   SET (HAVE_OFF_T 0)
181   SET (off_t "long")
182 ENDIF(HAVE_SIZEOF_OFF_T)
183 CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
184 IF(HAVE_SIZEOF_SIZE_T)
185   SET (HAVE_SIZE_T 1)
186 ELSE(HAVE_SIZEOF_SIZE_T)
187   SET (HAVE_SIZE_T 0)
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)
193   SET (HAVE_SSIZE_T 1)
194 ELSE(HAVE_SIZEOF_SSIZE_T)
195   SET (HAVE_SSIZE_T 0)
196   CHECK_TYPE_SIZE("long"  SIZEOF_LONG)
197   CHECK_TYPE_SIZE("__int64"  SIZEOF___INT64)
198   IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
199     SET(ssize_t "long")
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)
208   SET (HAVE_UID_T 1)
209 ELSE(HAVE_SIZEOF_UID_T)
210   SET (HAVE_UID_T 0)
211   SET (uid_t "int")
212 ENDIF(HAVE_SIZEOF_UID_T)
214 #SET (HAVE_BASENAME 0)
215 SET (HAVE_CTYPE_H 1) # all our platforms have <ctype.h>
216 #SET (HAVE_DEV_T 1)
217 #SET (HAVE_DIRNAME 0)
218 #SET (HAVE_FNMATCH 1)
219 #SET (HAVE_FNMATCH_H 1)
220 #SET (HAVE_INTTYPES_H 1)
221 #SET (HAVE_LCHOWN 1)
222 #SET (HAVE_LIBGEN_H 1)
223 SET (HAVE_LIBZ 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)
231 #SET (HAVE_STRDUP 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)
237 #SET (HAVE_STRSEP 1)
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)
248 IF(QNXNTO)
249   SET(MAKEDEV_THREE_ARGS 1)
250 ENDIF(QNXNTO)
251 #SET (NEED_BASENAME 0)
252 #SET (NEED_DIRNAME 0)
253 #SET (NEED_FNMATCH 1)
254 IF(UNIX)
255   SET (NEED_MAKEDEV 1)
256 ENDIF(UNIX)
257 #SET (NEED_SNPRINTF 0)
258 #SET (NEED_STRDUP 0)
259 #SET (NEED_STRLCPY 0)
260 #SET (NEED_STRMODE 1)
261 #SET (NEED_STRSEP 0)
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)
268 SET (const 0)
269 #SET (dev_t 0)
270 #SET (gid_t 0)
271 #SET (major_t "unsigned int")
272 #SET (minor_t "unsigned int")
273 #SET (mode_t 0)
274 #SET (nlink_t 0)
275 #SET (off_t 0)
276 #SET (size_t 0)
277 #SET (uid_t 0)
278 #SET (uint64_t 0)
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)
292 ENDFOREACH(hfile)
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)
298 ENDFOREACH(hfile)
299   
300 SET(libtar_SRC
301   append.c
302   block.c
303   decode.c
304   encode.c
305   extract.c
306   handle.c
307   ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c
308   ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c
309   output.c
310   util.c
311   wrapper.c
312   internal.h
313   ${LIBTAR_BINARY_DIR}/libtar/config.h
314   config.h.in
315   tar.h
316   libtar.h
317   compat/compat.h
318   
319 #  compat/strlcpy.c
320 #  compat/basename.c
321 #  compat/dirname.c
322 #  compat/strmode.c 
323 #  compat/strsep.c 
325 IF(NOT HAVE_DIRENT_H)
326   SET(libtar_SRC
327     ${libtar_SRC}
328     filesystem.c filesystem.h)
329 ENDIF(NOT HAVE_DIRENT_H)
331 IF(NOT HAVE_STRLCPY)
332 SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c)
333 SET(NEED_STRLCPY 1)
334 ENDIF(NOT HAVE_STRLCPY)
336 IF(NOT HAVE_STRMODE)
337 SET(libtar_SRC ${libtar_SRC} compat/strmode.c)
338 SET(NEED_STRMODE 1)
339 ENDIF(NOT HAVE_STRMODE)
341 IF(WIN32)
342 IF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
343 SET(libtar_SRC ${libtar_SRC} compat/snprintf.c)
344 SET(NEED_SNPRINTF 1)
345 ENDIF(NOT HAVE_SNPRINTF OR NOT HAVE_VSNPRINTF)
346 ENDIF(WIN32)
348 IF(NOT HAVE_DIRNAME)
349 SET(libtar_SRC ${libtar_SRC} compat/dirname.c)
350 SET(NEED_DIRNAME 1)
351 ENDIF(NOT HAVE_DIRNAME)
354 IF(NOT HAVE_STRSEP)
355 SET(libtar_SRC ${libtar_SRC} compat/strsep.c)
356 SET(NEED_STRSEP 1)
357 ENDIF(NOT HAVE_STRSEP)
360 IF(NOT HAVE_BASENAME)
361 SET(libtar_SRC ${libtar_SRC} compat/basename.c)
362 SET(NEED_BASENAME 1)
363 ENDIF(NOT HAVE_BASENAME)
365 IF(NOT HAVE_FNMATCH)
366 SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c)
367 SET(NEED_FNMATCH 1)
368 ENDIF(NOT HAVE_FNMATCH)
370 #IF(NOT HAVE_GLOB)
371 #SET(libtar_SRC ${libtar_SRC} compat/glob.c)
372 #SET(NEED_GLOB 1)
373 #ENDIF(NOT HAVE_GLOB)
375 # Setup zlib.
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})