CMakeLists.txt 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.0)
  2. PROJECT(LIBTAR C)
  3. INCLUDE_REGULAR_EXPRESSION("^.*\\.h$")
  4. # We need ansi c-flags, especially on HP
  5. SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
  6. SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
  7. # If we are on AIX, do the _ALL_SOURCE magic
  8. IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
  9. SET(_ALL_SOURCE 1)
  10. ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
  11. # Include all the necessary files for macros
  12. #SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
  13. # Include all the necessary files for macros
  14. INCLUDE (CheckIncludeFiles)
  15. INCLUDE (CheckFunctionExists)
  16. INCLUDE (CheckTypeSize)
  17. INCLUDE (CheckSymbolExists)
  18. INCLUDE (TestBigEndian)
  19. MACRO(MANGLE_VARIABLE_NAME str var prefix)
  20. STRING(TOUPPER "${str}" mangle_variable_name_var)
  21. STRING(REGEX REPLACE "[/. ]" "_" mangle_variable_name_var "${mangle_variable_name_var}")
  22. SET(${var} "${prefix}${mangle_variable_name_var}")
  23. ENDMACRO(MANGLE_VARIABLE_NAME str var)
  24. # Check if header file exists and add it to the list.
  25. MACRO(CHECK_INCLUDE_FILE_CONCAT FILE)
  26. MANGLE_VARIABLE_NAME("${FILE}" "CHECK_INCLUDE_FILE_CONCAT_VAR" "HAVE_")
  27. CHECK_INCLUDE_FILES("${HEADER_INCLUDES};${FILE}" ${CHECK_INCLUDE_FILE_CONCAT_VAR})
  28. IF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
  29. SET(HEADER_INCLUDES ${HEADER_INCLUDES} ${FILE})
  30. ENDIF(${CHECK_INCLUDE_FILE_CONCAT_VAR})
  31. ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
  32. MACRO(CHECK_FUNCTION_EXISTS_EX FUNC)
  33. MANGLE_VARIABLE_NAME("${FUNC}" "CHECK_FUNCTION_EXISTS_EX_VAR" "HAVE_")
  34. CHECK_FUNCTION_EXISTS("${FUNC}" "${CHECK_FUNCTION_EXISTS_EX_VAR}")
  35. ENDMACRO(CHECK_FUNCTION_EXISTS_EX)
  36. MACRO(CHECK_SYMBOL_EXISTS_EX SYM)
  37. MANGLE_VARIABLE_NAME("${SYM}" "CHECK_SYMBOL_EXISTS_EX_VAR" "HAVE_")
  38. CHECK_SYMBOL_EXISTS("${SYM}" "${HEADER_INCLUDES}" "${CHECK_SYMBOL_EXISTS_EX_VAR}")
  39. ENDMACRO(CHECK_SYMBOL_EXISTS_EX)
  40. #MACRO(CHECK_TYPE_SIZE_EX type defualt_size)
  41. # MANGLE_VARIABLE_NAME("${type}" "check_type_size_var" "")
  42. # CHECK_TYPE_SIZE("${type}" "SIZEOF_${check_type_size_var}")
  43. # IF(HAVE_${check_type_size_var})
  44. # SET("HAVE_${check_type_size_var}" 1)
  45. # ELSE(HAVE_${check_type_size_var})
  46. # ENDIF(HAVE_${check_type_size_var})
  47. #ENDMACRO(CHECK_TYPE_SIZE_EX)
  48. INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")
  49. INCLUDE_DIRECTORIES(${CURL_SPECIAL_LIBZ_INCLUDES})
  50. #check for stdc headers
  51. CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
  52. #check for other headers used by the program
  53. FOREACH(file
  54. "ctype.h"
  55. "fnmatch.h"
  56. "inttypes.h"
  57. "libgen.h"
  58. "memory.h"
  59. "sys/mkdev.h"
  60. "stdint.h"
  61. "stdlib.h"
  62. "stdio.h"
  63. "string.h"
  64. "strings.h"
  65. "sys/types.h"
  66. "sys/stat.h"
  67. "unistd.h"
  68. "glob.h"
  69. )
  70. CHECK_INCLUDE_FILE_CONCAT("${file}")
  71. ENDFOREACH(file)
  72. #check for the functions used by the program
  73. FOREACH(func
  74. basename
  75. dirname
  76. fnmatch
  77. lchown
  78. snprintf
  79. strlcpy
  80. strmode
  81. strsep
  82. strdup
  83. strftime
  84. glob
  85. )
  86. CHECK_SYMBOL_EXISTS_EX("${func}")
  87. ENDFOREACH(func)
  88. CHECK_TYPE_SIZE("dev_t" SIZEOF_DEV_T)
  89. IF(HAVE_SIZEOF_DEV_T)
  90. SET (HAVE_DEV_T 1)
  91. ELSE(HAVE_SIZEOF_DEV_T)
  92. SET (HAVE_DEV_T 0)
  93. SET (dev_t "unsigned long")
  94. ENDIF(HAVE_SIZEOF_DEV_T)
  95. CHECK_TYPE_SIZE("major_t" SIZEOF_MAJOR_T)
  96. IF(HAVE_SIZEOF_MAJOR_T)
  97. SET (HAVE_MAJOR_T 1)
  98. ELSE(HAVE_SIZEOF_MAJOR_T)
  99. SET (HAVE_MAJOR_T 0)
  100. SET (major_t "unsigned int")
  101. ENDIF(HAVE_SIZEOF_MAJOR_T)
  102. CHECK_TYPE_SIZE("minor_t" SIZEOF_MINOR_T)
  103. IF(HAVE_SIZEOF_MINOR_T)
  104. SET (HAVE_MINOR_T 1)
  105. ELSE(HAVE_SIZEOF_MINOR_T)
  106. SET (HAVE_MINOR_T 0)
  107. SET (minor_t "unsigned int")
  108. ENDIF(HAVE_SIZEOF_MINOR_T)
  109. CHECK_TYPE_SIZE("nlink_t" SIZEOF_NLINK_T)
  110. IF(HAVE_SIZEOF_NLINK_T)
  111. SET (HAVE_NLINK_T 1)
  112. ELSE(HAVE_SIZEOF_NLINK_T)
  113. SET (HAVE_NLINK_T 0)
  114. SET (nlink_t "unsigned short")
  115. ENDIF(HAVE_SIZEOF_NLINK_T)
  116. CHECK_TYPE_SIZE("uint64_t" SIZEOF_UINT64_T)
  117. IF(HAVE_SIZEOF_UINT64_T)
  118. SET (HAVE_UINT64_T 1)
  119. ELSE(HAVE_SIZEOF_UINT64_T)
  120. SET (HAVE_UINT64_T 0)
  121. SET (uint64_t "long long")
  122. ENDIF(HAVE_SIZEOF_UINT64_T)
  123. CHECK_TYPE_SIZE("socklen_t" SIZEOF_SOCKLEN_T)
  124. IF(HAVE_SIZEOF_SOCKLEN_T)
  125. SET (HAVE_SOCKLEN_T 1)
  126. ELSE(HAVE_SIZEOF_SOCKLEN_T)
  127. SET (HAVE_SOCKLEN_T 0)
  128. SET (socklen_t "unsigned long")
  129. ENDIF(HAVE_SIZEOF_SOCKLEN_T)
  130. CHECK_TYPE_SIZE("gid_t" SIZEOF_GID_T)
  131. IF(HAVE_SIZEOF_GID_T)
  132. SET (HAVE_GID_T 1)
  133. ELSE(HAVE_SIZEOF_GID_T)
  134. SET (HAVE_GID_T 0)
  135. SET (gid_t "int")
  136. ENDIF(HAVE_SIZEOF_GID_T)
  137. CHECK_TYPE_SIZE("mode_t" SIZEOF_MODE_T)
  138. IF(HAVE_SIZEOF_MODE_T)
  139. SET (HAVE_MODE_T 1)
  140. ELSE(HAVE_SIZEOF_MODE_T)
  141. SET (HAVE_MODE_T 0)
  142. SET (mode_t "int")
  143. ENDIF(HAVE_SIZEOF_MODE_T)
  144. CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T)
  145. IF(HAVE_SIZEOF_OFF_T)
  146. SET (HAVE_OFF_T 1)
  147. ELSE(HAVE_SIZEOF_OFF_T)
  148. SET (HAVE_OFF_T 0)
  149. SET (off_t "long")
  150. ENDIF(HAVE_SIZEOF_OFF_T)
  151. CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T)
  152. IF(HAVE_SIZEOF_SIZE_T)
  153. SET (HAVE_SIZE_T 1)
  154. ELSE(HAVE_SIZEOF_SIZE_T)
  155. SET (HAVE_SIZE_T 0)
  156. SET (size_t "unsigned")
  157. ENDIF(HAVE_SIZEOF_SIZE_T)
  158. CHECK_TYPE_SIZE("ssize_t" SIZEOF_SSIZE_T)
  159. IF(HAVE_SIZEOF_SSIZE_T)
  160. SET (HAVE_SSIZE_T 1)
  161. ELSE(HAVE_SIZEOF_SSIZE_T)
  162. SET (HAVE_SSIZE_T 0)
  163. SET (ssize_t "int")
  164. ENDIF(HAVE_SIZEOF_SSIZE_T)
  165. CHECK_TYPE_SIZE("uid_t" SIZEOF_UID_T)
  166. IF(HAVE_SIZEOF_UID_T)
  167. SET (HAVE_UID_T 1)
  168. ELSE(HAVE_SIZEOF_UID_T)
  169. SET (HAVE_UID_T 0)
  170. SET (uid_t "int")
  171. ENDIF(HAVE_SIZEOF_UID_T)
  172. #SET (HAVE_BASENAME 0)
  173. #SET (HAVE_CTYPE_H 0)
  174. #SET (HAVE_DEV_T 1)
  175. #SET (HAVE_DIRNAME 0)
  176. #SET (HAVE_FNMATCH 1)
  177. #SET (HAVE_FNMATCH_H 1)
  178. #SET (HAVE_INTTYPES_H 1)
  179. #SET (HAVE_LCHOWN 1)
  180. #SET (HAVE_LIBGEN_H 1)
  181. SET (HAVE_LIBZ 1)
  182. #SET (HAVE_MAJOR_T 0)
  183. #SET (HAVE_MEMORY_H 1)
  184. #SET (HAVE_MINOR_T 0)
  185. #SET (HAVE_NLINK_T 1)
  186. #SET (HAVE_SNPRINTF 1)
  187. #SET (HAVE_SOCKLEN_T 1)
  188. #SET (HAVE_STDINT_H 1)
  189. #SET (HAVE_STDLIB_H 1)
  190. #SET (HAVE_STRDUP 1)
  191. #SET (HAVE_STRFTIME 1)
  192. #SET (HAVE_STRINGS_H 1)
  193. #SET (HAVE_STRING_H 1)
  194. #SET (HAVE_STRLCPY 0)
  195. #SET (HAVE_STRMODE 0)
  196. #SET (HAVE_STRSEP 1)
  197. #SET (HAVE_SYS_STAT_H 1)
  198. #SET (HAVE_SYS_TYPES_H 1)
  199. #SET (HAVE_UINT64_T 1)
  200. #SET (HAVE_UNISTD_H 1)
  201. SET (MAJOR_IN_MKDEV 0)
  202. SET (MAJOR_IN_SYSMACROS 0)
  203. SET (MAKEDEV_THREE_ARGS 0)
  204. #SET (NEED_BASENAME 0)
  205. #SET (NEED_DIRNAME 0)
  206. #SET (NEED_FNMATCH 1)
  207. IF(UNIX)
  208. SET (NEED_MAKEDEV 1)
  209. ENDIF(UNIX)
  210. #SET (NEED_SNPRINTF 0)
  211. #SET (NEED_STRDUP 0)
  212. #SET (NEED_STRLCPY 0)
  213. #SET (NEED_STRMODE 1)
  214. #SET (NEED_STRSEP 0)
  215. SET (PACKAGE_BUGREPORT "")
  216. SET (PACKAGE_NAME "\"libtar\"")
  217. SET (PACKAGE_STRING "\"libtar 1.2.11\"")
  218. SET (PACKAGE_TARNAME "\"libtar\"")
  219. SET (PACKAGE_VERSION "\"1.2.11\"")
  220. #SET (STDC_HEADERS 1)
  221. SET (const 0)
  222. #SET (dev_t 0)
  223. #SET (gid_t 0)
  224. #SET (major_t "unsigned int")
  225. #SET (minor_t "unsigned int")
  226. #SET (mode_t 0)
  227. #SET (nlink_t 0)
  228. #SET (off_t 0)
  229. #SET (size_t 0)
  230. #SET (socklen_t 0)
  231. #SET (uid_t 0)
  232. #SET (uint64_t 0)
  233. SET (LISTHASH_PREFIX "libtar")
  234. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/listhash.h.in
  235. ${LIBTAR_BINARY_DIR}/libtar/libtar_listhash.h @ONLY IMMEDIATE)
  236. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/list.c.in
  237. ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c @ONLY IMMEDIATE)
  238. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/listhash/hash.c.in
  239. ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c @ONLY IMMEDIATE)
  240. FOREACH(hfile libtar.h tar.h compat/compat.h)
  241. GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
  242. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
  243. ${LIBTAR_BINARY_DIR}/libtar/${outname} @ONLY IMMEDIATE)
  244. ENDFOREACH(hfile)
  245. FOREACH(hfile internal.h filesystem.h)
  246. GET_FILENAME_COMPONENT(outname "${hfile}" NAME)
  247. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/${hfile}
  248. ${LIBTAR_BINARY_DIR}/libtarint/${outname} @ONLY IMMEDIATE)
  249. ENDFOREACH(hfile)
  250. SET(libtar_SRC
  251. append.c
  252. block.c
  253. decode.c
  254. encode.c
  255. extract.c
  256. handle.c
  257. ${LIBTAR_BINARY_DIR}/listhash/libtar_hash.c
  258. ${LIBTAR_BINARY_DIR}/listhash/libtar_list.c
  259. output.c
  260. util.c
  261. wrapper.c
  262. internal.h
  263. ${LIBTAR_BINARY_DIR}/libtar/config.h
  264. config.h.in
  265. tar.h
  266. libtar.h
  267. compat/compat.h
  268. # compat/strlcpy.c
  269. # compat/basename.c
  270. # compat/dirname.c
  271. # compat/strmode.c
  272. # compat/strsep.c
  273. )
  274. IF(NOT UNIX)
  275. SET(libtar_SRC
  276. ${libtar_SRC}
  277. filesystem.c filesystem.h)
  278. ENDIF(NOT UNIX)
  279. IF(NOT HAVE_STRLCPY)
  280. SET(libtar_SRC ${libtar_SRC} compat/strlcpy.c)
  281. SET(NEED_STRLCPY 1)
  282. ENDIF(NOT HAVE_STRLCPY)
  283. IF(NOT HAVE_STRMODE)
  284. SET(libtar_SRC ${libtar_SRC} compat/strmode.c)
  285. SET(NEED_STRMODE 1)
  286. ENDIF(NOT HAVE_STRMODE)
  287. IF(WIN32)
  288. IF(NOT HAVE_SNPRINTF)
  289. SET(libtar_SRC ${libtar_SRC} compat/snprintf.c)
  290. SET(NEED_SNPRINTF 1)
  291. ENDIF(NOT HAVE_SNPRINTF)
  292. ENDIF(WIN32)
  293. IF(NOT HAVE_DIRNAME)
  294. SET(libtar_SRC ${libtar_SRC} compat/dirname.c)
  295. SET(NEED_DIRNAME 1)
  296. ENDIF(NOT HAVE_DIRNAME)
  297. IF(NOT HAVE_STRSEP)
  298. SET(libtar_SRC ${libtar_SRC} compat/strsep.c)
  299. SET(NEED_STRSEP 1)
  300. ENDIF(NOT HAVE_STRSEP)
  301. IF(NOT HAVE_BASENAME)
  302. SET(libtar_SRC ${libtar_SRC} compat/basename.c)
  303. SET(NEED_BASENAME 1)
  304. ENDIF(NOT HAVE_BASENAME)
  305. IF(NOT HAVE_FNMATCH)
  306. SET(libtar_SRC ${libtar_SRC} compat/fnmatch.c)
  307. SET(NEED_FNMATCH 1)
  308. ENDIF(NOT HAVE_FNMATCH)
  309. #IF(NOT HAVE_GLOB)
  310. #SET(libtar_SRC ${libtar_SRC} compat/glob.c)
  311. #SET(NEED_GLOB 1)
  312. #ENDIF(NOT HAVE_GLOB)
  313. CONFIGURE_FILE(${LIBTAR_SOURCE_DIR}/config.h.in
  314. ${LIBTAR_BINARY_DIR}/libtar/config.h)
  315. ADD_LIBRARY(tar STATIC ${libtar_SRC})
  316. ADD_EXECUTABLE(tartest libtar.c)
  317. TARGET_LINK_LIBRARIES(tartest tar ${CMAKE_ZLIB_LIBRARIES})