CMakeLists.txt 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing#kwsys for details.
  3. # The Kitware System Library is intended to be included in other
  4. # projects. It is completely configurable in that the library's
  5. # namespace can be configured and the components that are included can
  6. # be selected invididually.
  7. # Typical usage is to import the kwsys directory tree into a
  8. # subdirectory under a parent project and enable the classes that will
  9. # be used. All classes are disabled by default. The CMake listfile
  10. # above this one configures the library as follows:
  11. #
  12. # SET(KWSYS_NAMESPACE foosys)
  13. # SET(KWSYS_USE_Directory 1) # Enable Directory class.
  14. # SUBDIRS(kwsys)
  15. #
  16. # Optional settings are as follows:
  17. #
  18. # KWSYS_HEADER_ROOT = The directory into which to generate the kwsys headers.
  19. # A directory called "${KWSYS_NAMESPACE}" will be
  20. # created under this root directory to hold the files.
  21. # KWSYS_SPLIT_OBJECTS_FROM_INTERFACE
  22. # = Instead of creating a single ${KWSYS_NAMESPACE} library
  23. # target, create three separate targets:
  24. # ${KWSYS_NAMESPACE}
  25. # - An INTERFACE library only containing usage
  26. # requirements.
  27. # ${KWSYS_NAMESPACE}_objects
  28. # - An OBJECT library for the built kwsys objects.
  29. # Note: This is omitted from the install rules
  30. # ${KWSYS_NAMESPACE}_private
  31. # - An INTERFACE library combining both that is
  32. # appropriate for use with PRIVATE linking in
  33. # target_link_libraries. Because of how interface
  34. # properties propagate, this target is not suitable
  35. # for use with PUBLIC or INTERFACE linking.
  36. #
  37. # Example:
  38. #
  39. # SET(KWSYS_HEADER_ROOT ${PROJECT_BINARY_DIR})
  40. # INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})
  41. #
  42. # Optional settings to setup install rules are as follows:
  43. #
  44. # KWSYS_INSTALL_BIN_DIR = The installation target directories into
  45. # KWSYS_INSTALL_LIB_DIR which the libraries and headers from
  46. # KWSYS_INSTALL_INCLUDE_DIR kwsys should be installed by a "make install".
  47. # The values should be specified relative to
  48. # the installation prefix and NOT start with '/'.
  49. # KWSYS_INSTALL_DOC_DIR = The installation target directory for documentation
  50. # such as copyright information.
  51. #
  52. # KWSYS_INSTALL_COMPONENT_NAME_RUNTIME = Name of runtime and development
  53. # KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT installation components.
  54. # If not given the install rules
  55. # will not be in any component.
  56. #
  57. # KWSYS_INSTALL_EXPORT_NAME = The EXPORT option value for install(TARGETS) calls.
  58. #
  59. # Example:
  60. #
  61. # SET(KWSYS_INSTALL_BIN_DIR bin)
  62. # SET(KWSYS_INSTALL_LIB_DIR lib)
  63. # SET(KWSYS_INSTALL_INCLUDE_DIR include)
  64. # SET(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME Runtime)
  65. # SET(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT Development)
  66. # Once configured, kwsys should be used as follows from C or C++ code:
  67. #
  68. # #include <foosys/Directory.hxx>
  69. # ...
  70. # foosys::Directory directory;
  71. #
  72. # NOTE: This library is intended for internal use by Kitware-driven
  73. # projects. In order to keep it simple no attempt will be made to
  74. # maintain backward compatibility when changes are made to KWSys.
  75. # When an incompatible change is made Kitware's projects that use
  76. # KWSys will be fixed, but no notification will necessarily be sent to
  77. # any outside mailing list and no documentation of the change will be
  78. # written.
  79. CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
  80. FOREACH(p
  81. CMP0022 # CMake 2.8, Define link interface - required by android_mk export
  82. CMP0025 # CMake 3.0, Compiler id for Apple Clang is now AppleClang.
  83. CMP0042 # CMake 3.0, MACOSX_RPATH is enabled by default.
  84. CMP0048 # CMake 3.0, Let the project command manage version variables.
  85. CMP0056 # CMake 3.2, Honor link flags in try_compile() source-file signature.
  86. CMP0063 # CMake 3.3, Honor visibility properties for all target types.
  87. )
  88. IF(POLICY ${p})
  89. CMAKE_POLICY(SET ${p} NEW)
  90. ENDIF()
  91. ENDFOREACH()
  92. SET(CMAKE_LEGACY_CYGWIN_WIN32 0)
  93. IF(CMAKE_VERSION VERSION_LESS 3.0)
  94. SET(KWSYS_SPLIT_OBJECTS_FROM_INTERFACE 0)
  95. ENDIF()
  96. #-----------------------------------------------------------------------------
  97. # If a namespace is not specified, use "kwsys" and enable testing.
  98. # This should be the case only when kwsys is not included inside
  99. # another project and is being tested.
  100. IF(NOT KWSYS_NAMESPACE)
  101. SET(KWSYS_NAMESPACE "kwsys")
  102. SET(KWSYS_STANDALONE 1)
  103. ENDIF()
  104. #-----------------------------------------------------------------------------
  105. # The project name is that of the specified namespace.
  106. PROJECT(${KWSYS_NAMESPACE})
  107. # Tell CMake how to follow dependencies of sources in this directory.
  108. SET_PROPERTY(DIRECTORY
  109. PROPERTY IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
  110. "KWSYS_HEADER(%)=<${KWSYS_NAMESPACE}/%>"
  111. )
  112. # Select library components.
  113. IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
  114. SET(KWSYS_ENABLE_C 1)
  115. # Enable all components.
  116. SET(KWSYS_USE_Base64 1)
  117. SET(KWSYS_USE_Directory 1)
  118. SET(KWSYS_USE_DynamicLoader 1)
  119. SET(KWSYS_USE_Encoding 1)
  120. SET(KWSYS_USE_Glob 1)
  121. SET(KWSYS_USE_MD5 1)
  122. SET(KWSYS_USE_Process 1)
  123. SET(KWSYS_USE_RegularExpression 1)
  124. SET(KWSYS_USE_System 1)
  125. SET(KWSYS_USE_SystemTools 1)
  126. SET(KWSYS_USE_CommandLineArguments 1)
  127. SET(KWSYS_USE_Terminal 1)
  128. SET(KWSYS_USE_IOStream 1)
  129. SET(KWSYS_USE_FStream 1)
  130. SET(KWSYS_USE_String 1)
  131. SET(KWSYS_USE_SystemInformation 1)
  132. SET(KWSYS_USE_ConsoleBuf 1)
  133. ENDIF()
  134. # Enforce component dependencies.
  135. IF(KWSYS_USE_SystemTools)
  136. SET(KWSYS_USE_Directory 1)
  137. SET(KWSYS_USE_FStream 1)
  138. SET(KWSYS_USE_Encoding 1)
  139. ENDIF()
  140. IF(KWSYS_USE_Glob)
  141. SET(KWSYS_USE_Directory 1)
  142. SET(KWSYS_USE_SystemTools 1)
  143. SET(KWSYS_USE_RegularExpression 1)
  144. SET(KWSYS_USE_FStream 1)
  145. SET(KWSYS_USE_Encoding 1)
  146. ENDIF()
  147. IF(KWSYS_USE_Process)
  148. SET(KWSYS_USE_System 1)
  149. SET(KWSYS_USE_Encoding 1)
  150. ENDIF()
  151. IF(KWSYS_USE_SystemInformation)
  152. SET(KWSYS_USE_Process 1)
  153. ENDIF()
  154. IF(KWSYS_USE_System)
  155. SET(KWSYS_USE_Encoding 1)
  156. ENDIF()
  157. IF(KWSYS_USE_Directory)
  158. SET(KWSYS_USE_Encoding 1)
  159. ENDIF()
  160. IF(KWSYS_USE_FStream)
  161. SET(KWSYS_USE_Encoding 1)
  162. ENDIF()
  163. IF(KWSYS_USE_ConsoleBuf)
  164. SET(KWSYS_USE_Encoding 1)
  165. ENDIF()
  166. # Setup the large file support default.
  167. IF(KWSYS_LFS_DISABLE)
  168. SET(KWSYS_LFS_REQUESTED 0)
  169. ELSE()
  170. SET(KWSYS_LFS_REQUESTED 1)
  171. ENDIF()
  172. # Specify default 8 bit encoding for Windows
  173. IF(NOT KWSYS_ENCODING_DEFAULT_CODEPAGE)
  174. SET(KWSYS_ENCODING_DEFAULT_CODEPAGE CP_ACP)
  175. ENDIF()
  176. # Enable testing if building standalone.
  177. IF(KWSYS_STANDALONE)
  178. INCLUDE(Dart)
  179. MARK_AS_ADVANCED(BUILD_TESTING DART_ROOT TCL_TCLSH)
  180. IF(BUILD_TESTING)
  181. ENABLE_TESTING()
  182. ENDIF()
  183. ENDIF()
  184. # Include helper macros.
  185. INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/kwsysPlatformTests.cmake)
  186. INCLUDE(CheckTypeSize)
  187. # Do full dependency headers.
  188. INCLUDE_REGULAR_EXPRESSION("^.*$")
  189. # Use new KWSYS_INSTALL_*_DIR variable names to control installation.
  190. # Take defaults from the old names. Note that there was no old name
  191. # for the bin dir, so we take the old lib dir name so DLLs will be
  192. # installed in a compatible way for old code.
  193. IF(NOT KWSYS_INSTALL_INCLUDE_DIR)
  194. STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_INCLUDE_DIR
  195. "${KWSYS_HEADER_INSTALL_DIR}")
  196. ENDIF()
  197. IF(NOT KWSYS_INSTALL_LIB_DIR)
  198. STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_LIB_DIR
  199. "${KWSYS_LIBRARY_INSTALL_DIR}")
  200. ENDIF()
  201. IF(NOT KWSYS_INSTALL_BIN_DIR)
  202. STRING(REGEX REPLACE "^/" "" KWSYS_INSTALL_BIN_DIR
  203. "${KWSYS_LIBRARY_INSTALL_DIR}")
  204. ENDIF()
  205. # Setup header install rules.
  206. SET(KWSYS_INSTALL_INCLUDE_OPTIONS)
  207. IF(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT)
  208. SET(KWSYS_INSTALL_INCLUDE_OPTIONS ${KWSYS_INSTALL_INCLUDE_OPTIONS}
  209. COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT}
  210. )
  211. ENDIF()
  212. # Setup library install rules.
  213. SET(KWSYS_INSTALL_LIBRARY_RULE)
  214. IF(KWSYS_INSTALL_LIB_DIR)
  215. IF(KWSYS_INSTALL_EXPORT_NAME)
  216. LIST(APPEND KWSYS_INSTALL_LIBRARY_RULE EXPORT ${KWSYS_INSTALL_EXPORT_NAME})
  217. ENDIF()
  218. # Install the shared library to the lib directory.
  219. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  220. LIBRARY DESTINATION ${KWSYS_INSTALL_LIB_DIR}
  221. )
  222. # Assign the shared library to the runtime component.
  223. IF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
  224. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  225. COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_RUNTIME}
  226. )
  227. ENDIF()
  228. # Install the archive to the lib directory.
  229. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  230. ARCHIVE DESTINATION ${KWSYS_INSTALL_LIB_DIR}
  231. )
  232. # Assign the archive to the development component.
  233. IF(KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT)
  234. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  235. COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT}
  236. )
  237. ENDIF()
  238. ENDIF()
  239. IF(KWSYS_INSTALL_BIN_DIR)
  240. # Install the runtime library to the bin directory.
  241. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  242. RUNTIME DESTINATION ${KWSYS_INSTALL_BIN_DIR}
  243. )
  244. # Assign the runtime library to the runtime component.
  245. IF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
  246. SET(KWSYS_INSTALL_LIBRARY_RULE ${KWSYS_INSTALL_LIBRARY_RULE}
  247. COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_RUNTIME}
  248. )
  249. ENDIF()
  250. ENDIF()
  251. # Do not support old KWSYS_*a_INSTALL_DIR variable names.
  252. SET(KWSYS_HEADER_INSTALL_DIR)
  253. SET(KWSYS_LIBRARY_INSTALL_DIR)
  254. # Generated source files will need this header.
  255. STRING(COMPARE EQUAL "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}"
  256. KWSYS_IN_SOURCE_BUILD)
  257. IF(NOT KWSYS_IN_SOURCE_BUILD)
  258. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/kwsysPrivate.h
  259. ${PROJECT_BINARY_DIR}/kwsysPrivate.h COPYONLY IMMEDIATE)
  260. ENDIF()
  261. # Select plugin module file name convention.
  262. IF(NOT KWSYS_DynamicLoader_PREFIX)
  263. SET(KWSYS_DynamicLoader_PREFIX ${CMAKE_SHARED_MODULE_PREFIX})
  264. ENDIF()
  265. IF(NOT KWSYS_DynamicLoader_SUFFIX)
  266. SET(KWSYS_DynamicLoader_SUFFIX ${CMAKE_SHARED_MODULE_SUFFIX})
  267. ENDIF()
  268. #-----------------------------------------------------------------------------
  269. # We require ANSI support from the C compiler. Add any needed flags.
  270. IF(CMAKE_ANSI_CFLAGS)
  271. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
  272. ENDIF()
  273. #-----------------------------------------------------------------------------
  274. # Adjust compiler flags for some platforms.
  275. IF(NOT CMAKE_COMPILER_IS_GNUCXX)
  276. IF(CMAKE_SYSTEM MATCHES "OSF1-V.*")
  277. STRING(REGEX MATCH "-timplicit_local"
  278. KWSYS_CXX_FLAGS_HAVE_IMPLICIT_LOCAL "${CMAKE_CXX_FLAGS}")
  279. STRING(REGEX MATCH "-no_implicit_include"
  280. KWSYS_CXX_FLAGS_HAVE_NO_IMPLICIT_INCLUDE "${CMAKE_CXX_FLAGS}")
  281. IF(NOT KWSYS_CXX_FLAGS_HAVE_IMPLICIT_LOCAL)
  282. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local")
  283. ENDIF()
  284. IF(NOT KWSYS_CXX_FLAGS_HAVE_NO_IMPLICIT_INCLUDE)
  285. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no_implicit_include")
  286. ENDIF()
  287. ENDIF()
  288. IF(CMAKE_SYSTEM MATCHES "HP-UX")
  289. SET(KWSYS_PLATFORM_CXX_TEST_EXTRA_FLAGS "+p")
  290. IF(CMAKE_CXX_COMPILER_ID MATCHES "HP")
  291. # it is known that version 3.85 fails and 6.25 works without these flags
  292. IF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4)
  293. # use new C++ library and improved template support
  294. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA +hpxstd98")
  295. ENDIF()
  296. ENDIF()
  297. ENDIF()
  298. ENDIF()
  299. IF(KWSYS_STANDALONE)
  300. IF(CMAKE_CXX_COMPILER_ID STREQUAL SunPro)
  301. IF(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
  302. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03")
  303. ELSE()
  304. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4")
  305. ENDIF()
  306. ENDIF()
  307. ENDIF()
  308. #-----------------------------------------------------------------------------
  309. # Configure Large File Support.
  310. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_CSTDIO
  311. "Checking whether header cstdio is available" DIRECT)
  312. SET(KWSYS_LFS_AVAILABLE 0)
  313. IF(KWSYS_LFS_REQUESTED)
  314. # Large File Support is requested.
  315. SET(KWSYS_LFS_REQUESTED 1)
  316. # Check for large file support.
  317. SET(KWSYS_PLATFORM_CXX_TEST_DEFINES
  318. -DKWSYS_CXX_HAS_CSTDIO=${KWSYS_CXX_HAS_CSTDIO})
  319. KWSYS_PLATFORM_CXX_TEST_RUN(KWSYS_LFS_WORKS
  320. "Checking for Large File Support" DIRECT)
  321. SET(KWSYS_PLATFORM_CXX_TEST_DEFINES)
  322. IF(KWSYS_LFS_WORKS)
  323. SET(KWSYS_LFS_AVAILABLE 1)
  324. ENDIF()
  325. ELSE()
  326. # Large File Support is not requested.
  327. SET(KWSYS_LFS_REQUESTED 0)
  328. ENDIF()
  329. #-----------------------------------------------------------------------------
  330. # Configure the standard library header wrappers based on compiler's
  331. # capabilities and parent project's request. Enforce 0/1 as only
  332. # possible values for configuration into Configure.hxx.
  333. # Check existence and uniqueness of long long and __int64.
  334. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_LONG_LONG
  335. "Checking whether C++ compiler has 'long long'" DIRECT)
  336. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS___INT64
  337. "Checking whether C++ compiler has '__int64'" DIRECT)
  338. IF(KWSYS_CXX_HAS___INT64)
  339. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_AND___INT64
  340. "Checking whether long and __int64 are the same type" DIRECT)
  341. IF(KWSYS_CXX_HAS_LONG_LONG)
  342. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_LONG_AND___INT64
  343. "Checking whether long long and __int64 are the same type" DIRECT)
  344. ENDIF()
  345. ENDIF()
  346. # Enable the "long long" type if it is available. It is standard in
  347. # C99 and C++03 but not in earlier standards.
  348. IF(KWSYS_CXX_HAS_LONG_LONG)
  349. SET(KWSYS_USE_LONG_LONG 1)
  350. ELSE()
  351. SET(KWSYS_USE_LONG_LONG 0)
  352. ENDIF()
  353. # Enable the "__int64" type if it is available and unique. It is not
  354. # standard.
  355. SET(KWSYS_USE___INT64 0)
  356. IF(KWSYS_CXX_HAS___INT64)
  357. IF(NOT KWSYS_CXX_SAME_LONG_AND___INT64)
  358. IF(NOT KWSYS_CXX_SAME_LONG_LONG_AND___INT64)
  359. SET(KWSYS_USE___INT64 1)
  360. ENDIF()
  361. ENDIF()
  362. ENDIF()
  363. IF(KWSYS_USE_Encoding)
  364. # Look for type size helper macros.
  365. KWSYS_PLATFORM_CXX_TEST(KWSYS_STL_HAS_WSTRING
  366. "Checking whether wstring is available" DIRECT)
  367. ENDIF()
  368. IF(KWSYS_USE_IOStream)
  369. # Determine whether iostreams support long long.
  370. IF(KWSYS_CXX_HAS_LONG_LONG)
  371. KWSYS_PLATFORM_CXX_TEST(KWSYS_IOS_HAS_ISTREAM_LONG_LONG
  372. "Checking if istream supports long long" DIRECT)
  373. KWSYS_PLATFORM_CXX_TEST(KWSYS_IOS_HAS_OSTREAM_LONG_LONG
  374. "Checking if ostream supports long long" DIRECT)
  375. ELSE()
  376. SET(KWSYS_IOS_HAS_ISTREAM_LONG_LONG 0)
  377. SET(KWSYS_IOS_HAS_OSTREAM_LONG_LONG 0)
  378. ENDIF()
  379. IF(KWSYS_CXX_HAS___INT64)
  380. KWSYS_PLATFORM_CXX_TEST(KWSYS_IOS_HAS_ISTREAM___INT64
  381. "Checking if istream supports __int64" DIRECT)
  382. KWSYS_PLATFORM_CXX_TEST(KWSYS_IOS_HAS_OSTREAM___INT64
  383. "Checking if ostream supports __int64" DIRECT)
  384. ELSE()
  385. SET(KWSYS_IOS_HAS_ISTREAM___INT64 0)
  386. SET(KWSYS_IOS_HAS_OSTREAM___INT64 0)
  387. ENDIF()
  388. ENDIF()
  389. IF(KWSYS_NAMESPACE MATCHES "^kwsys$")
  390. SET(KWSYS_NAME_IS_KWSYS 1)
  391. ELSE()
  392. SET(KWSYS_NAME_IS_KWSYS 0)
  393. ENDIF()
  394. # Choose default shared/static build if not specified.
  395. IF(KWSYS_BUILD_SHARED MATCHES "^KWSYS_BUILD_SHARED$")
  396. SET(KWSYS_BUILD_SHARED ${BUILD_SHARED_LIBS})
  397. ENDIF()
  398. IF(KWSYS_BUILD_SHARED)
  399. SET(KWSYS_BUILD_SHARED 1)
  400. SET(KWSYS_LIBRARY_TYPE SHARED)
  401. ELSE()
  402. SET(KWSYS_BUILD_SHARED 0)
  403. SET(KWSYS_LIBRARY_TYPE STATIC)
  404. ENDIF()
  405. #-----------------------------------------------------------------------------
  406. # Configure some implementation details.
  407. KWSYS_PLATFORM_C_TEST(KWSYS_C_HAS_PTRDIFF_T
  408. "Checking whether C compiler has ptrdiff_t in stddef.h" DIRECT)
  409. KWSYS_PLATFORM_C_TEST(KWSYS_C_HAS_SSIZE_T
  410. "Checking whether C compiler has ssize_t in unistd.h" DIRECT)
  411. IF(KWSYS_USE_Process)
  412. KWSYS_PLATFORM_C_TEST(KWSYS_C_HAS_CLOCK_GETTIME_MONOTONIC
  413. "Checking whether C compiler has clock_gettime" DIRECT)
  414. ENDIF()
  415. SET_SOURCE_FILES_PROPERTIES(ProcessUNIX.c System.c PROPERTIES
  416. COMPILE_FLAGS "-DKWSYS_C_HAS_PTRDIFF_T=${KWSYS_C_HAS_PTRDIFF_T} -DKWSYS_C_HAS_SSIZE_T=${KWSYS_C_HAS_SSIZE_T} -DKWSYS_C_HAS_CLOCK_GETTIME_MONOTONIC=${KWSYS_C_HAS_CLOCK_GETTIME_MONOTONIC}"
  417. )
  418. IF(DEFINED KWSYS_PROCESS_USE_SELECT)
  419. GET_PROPERTY(ProcessUNIX_FLAGS SOURCE ProcessUNIX.c PROPERTY COMPILE_FLAGS)
  420. SET_PROPERTY(SOURCE ProcessUNIX.c PROPERTY COMPILE_FLAGS "${ProcessUNIX_FLAGS} -DKWSYSPE_USE_SELECT=${KWSYSPE_USE_SELECT}")
  421. ENDIF()
  422. IF(KWSYS_USE_DynamicLoader)
  423. GET_PROPERTY(KWSYS_SUPPORTS_SHARED_LIBS GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
  424. IF(KWSYS_SUPPORTS_SHARED_LIBS)
  425. SET(KWSYS_SUPPORTS_SHARED_LIBS 1)
  426. ELSE()
  427. SET(KWSYS_SUPPORTS_SHARED_LIBS 0)
  428. ENDIF()
  429. SET_PROPERTY(SOURCE DynamicLoader.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  430. KWSYS_SUPPORTS_SHARED_LIBS=${KWSYS_SUPPORTS_SHARED_LIBS})
  431. ENDIF()
  432. IF(KWSYS_USE_SystemTools)
  433. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_SETENV
  434. "Checking whether CXX compiler has setenv" DIRECT)
  435. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_UNSETENV
  436. "Checking whether CXX compiler has unsetenv" DIRECT)
  437. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
  438. "Checking whether CXX compiler has environ in stdlib.h" DIRECT)
  439. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_UTIMES
  440. "Checking whether CXX compiler has utimes" DIRECT)
  441. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_UTIMENSAT
  442. "Checking whether CXX compiler has utimensat" DIRECT)
  443. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_STAT_HAS_ST_MTIM
  444. "Checking whether CXX compiler struct stat has st_mtim member" DIRECT)
  445. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_STAT_HAS_ST_MTIMESPEC
  446. "Checking whether CXX compiler struct stat has st_mtimespec member" DIRECT)
  447. SET_PROPERTY(SOURCE SystemTools.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  448. KWSYS_CXX_HAS_SETENV=${KWSYS_CXX_HAS_SETENV}
  449. KWSYS_CXX_HAS_UNSETENV=${KWSYS_CXX_HAS_UNSETENV}
  450. KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=${KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H}
  451. KWSYS_CXX_HAS_UTIMES=${KWSYS_CXX_HAS_UTIMES}
  452. KWSYS_CXX_HAS_UTIMENSAT=${KWSYS_CXX_HAS_UTIMENSAT}
  453. KWSYS_CXX_STAT_HAS_ST_MTIM=${KWSYS_CXX_STAT_HAS_ST_MTIM}
  454. KWSYS_CXX_STAT_HAS_ST_MTIMESPEC=${KWSYS_CXX_STAT_HAS_ST_MTIMESPEC}
  455. )
  456. IF(NOT WIN32)
  457. IF(KWSYS_STANDALONE)
  458. OPTION(KWSYS_SYSTEMTOOLS_SUPPORT_WINDOWS_SLASHES "If true, Windows paths will be supported on Unix as well" ON)
  459. ENDIF()
  460. IF(KWSYS_SYSTEMTOOLS_SUPPORT_WINDOWS_SLASHES)
  461. SET_PROPERTY(SOURCE SystemTools.cxx testSystemTools.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  462. KWSYS_SYSTEMTOOLS_SUPPORT_WINDOWS_SLASHES
  463. )
  464. ENDIF()
  465. ENDIF()
  466. # Disable getpwnam for static linux builds since it depends on shared glibc
  467. GET_PROPERTY(SHARED_LIBS_SUPPORTED GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
  468. IF(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT SHARED_LIBS_SUPPORTED)
  469. SET_PROPERTY(SOURCE SystemTools.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  470. HAVE_GETPWNAM=0
  471. )
  472. ENDIF()
  473. ENDIF()
  474. IF(KWSYS_USE_SystemInformation)
  475. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  476. COMPILE_DEFINITIONS SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P})
  477. IF(NOT CYGWIN)
  478. INCLUDE(CheckIncludeFiles)
  479. CHECK_INCLUDE_FILES("sys/types.h;ifaddrs.h" KWSYS_SYS_HAS_IFADDRS_H)
  480. IF(KWSYS_SYS_HAS_IFADDRS_H)
  481. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  482. COMPILE_DEFINITIONS KWSYS_SYS_HAS_IFADDRS_H=1)
  483. ENDIF()
  484. ENDIF()
  485. IF(WIN32)
  486. INCLUDE(CheckSymbolExists)
  487. SET(CMAKE_REQUIRED_LIBRARIES Psapi)
  488. CHECK_SYMBOL_EXISTS(GetProcessMemoryInfo "windows.h;psapi.h" KWSYS_SYS_HAS_PSAPI)
  489. UNSET(CMAKE_REQUIRED_LIBRARIES)
  490. IF(KWSYS_SYS_HAS_PSAPI)
  491. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  492. COMPILE_DEFINITIONS KWSYS_SYS_HAS_PSAPI=1)
  493. IF(MSVC70 OR MSVC71)
  494. # Suppress LNK4089: all references to 'PSAPI.DLL' discarded by /OPT:REF
  495. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /IGNORE:4089")
  496. ENDIF()
  497. ENDIF()
  498. ENDIF()
  499. IF(CMAKE_SYSTEM MATCHES "HP-UX")
  500. CHECK_INCLUDE_FILES("sys/mpctl.h" KWSYS_SYS_HAS_MPCTL_H)
  501. IF(KWSYS_SYS_HAS_MPCTL_H)
  502. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  503. COMPILE_DEFINITIONS KWSYS_SYS_HAS_MPCTL_H=1)
  504. ENDIF()
  505. ENDIF()
  506. IF(CMAKE_SYSTEM MATCHES "BSD")
  507. CHECK_INCLUDE_FILES("machine/cpu.h" KWSYS_SYS_HAS_MACHINE_CPU_H)
  508. IF(KWSYS_SYS_HAS_MACHINE_CPU_H)
  509. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  510. COMPILE_DEFINITIONS KWSYS_SYS_HAS_MACHINE_CPU_H=1)
  511. ENDIF()
  512. ENDIF()
  513. IF(KWSYS_LFS_AVAILABLE AND NOT KWSYS_LFS_DISABLE)
  514. SET(KWSYS_PLATFORM_CXX_TEST_DEFINES -DKWSYS_HAS_LFS=1)
  515. ENDIF()
  516. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_RLIMIT64
  517. "Checking whether CXX compiler has rlimit64" DIRECT)
  518. SET(KWSYS_PLATFORM_CXX_TEST_DEFINES)
  519. IF(KWSYS_CXX_HAS_RLIMIT64)
  520. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  521. COMPILE_DEFINITIONS KWSYS_CXX_HAS_RLIMIT64=1)
  522. ENDIF()
  523. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_ATOL
  524. "Checking whether CXX compiler has atol" DIRECT)
  525. IF(KWSYS_CXX_HAS_ATOL)
  526. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  527. COMPILE_DEFINITIONS KWSYS_CXX_HAS_ATOL=1)
  528. ENDIF()
  529. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_ATOLL
  530. "Checking whether CXX compiler has atoll" DIRECT)
  531. IF(KWSYS_CXX_HAS_ATOLL)
  532. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  533. COMPILE_DEFINITIONS KWSYS_CXX_HAS_ATOLL=1)
  534. ENDIF()
  535. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS__ATOI64
  536. "Checking whether CXX compiler has _atoi64" DIRECT)
  537. IF(KWSYS_CXX_HAS__ATOI64)
  538. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  539. COMPILE_DEFINITIONS KWSYS_CXX_HAS__ATOI64=1)
  540. ENDIF()
  541. IF(UNIX)
  542. INCLUDE(CheckIncludeFileCXX)
  543. # check for simple stack trace
  544. # usually it's in libc but on FreeBSD
  545. # it's in libexecinfo
  546. FIND_LIBRARY(EXECINFO_LIB "execinfo")
  547. MARK_AS_ADVANCED(EXECINFO_LIB)
  548. IF (NOT EXECINFO_LIB)
  549. SET(EXECINFO_LIB "")
  550. ENDIF()
  551. CHECK_INCLUDE_FILE_CXX("execinfo.h" KWSYS_CXX_HAS_EXECINFOH)
  552. IF (KWSYS_CXX_HAS_EXECINFOH)
  553. # we have the backtrace header check if it
  554. # can be used with this compiler
  555. SET(KWSYS_PLATFORM_CXX_TEST_LINK_LIBRARIES ${EXECINFO_LIB})
  556. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_BACKTRACE
  557. "Checking whether backtrace works with this C++ compiler" DIRECT)
  558. SET(KWSYS_PLATFORM_CXX_TEST_LINK_LIBRARIES)
  559. IF (KWSYS_CXX_HAS_BACKTRACE)
  560. # backtrace is supported by this system and compiler.
  561. # now check for the more advanced capabilities.
  562. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  563. COMPILE_DEFINITIONS KWSYS_SYSTEMINFORMATION_HAS_BACKTRACE=1)
  564. # check for symbol lookup using dladdr
  565. CHECK_INCLUDE_FILE_CXX("dlfcn.h" KWSYS_CXX_HAS_DLFCNH)
  566. IF (KWSYS_CXX_HAS_DLFCNH)
  567. # we have symbol lookup libraries and headers
  568. # check if they can be used with this compiler
  569. SET(KWSYS_PLATFORM_CXX_TEST_LINK_LIBRARIES ${CMAKE_DL_LIBS})
  570. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_DLADDR
  571. "Checking whether dladdr works with this C++ compiler" DIRECT)
  572. SET(KWSYS_PLATFORM_CXX_TEST_LINK_LIBRARIES)
  573. IF (KWSYS_CXX_HAS_DLADDR)
  574. # symbol lookup is supported by this system
  575. # and compiler.
  576. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  577. COMPILE_DEFINITIONS KWSYS_SYSTEMINFORMATION_HAS_SYMBOL_LOOKUP=1)
  578. ENDIF()
  579. ENDIF()
  580. # c++ demangling support
  581. # check for cxxabi headers
  582. CHECK_INCLUDE_FILE_CXX("cxxabi.h" KWSYS_CXX_HAS_CXXABIH)
  583. IF (KWSYS_CXX_HAS_CXXABIH)
  584. # check if cxxabi can be used with this
  585. # system and compiler.
  586. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_CXXABI
  587. "Checking whether cxxabi works with this C++ compiler" DIRECT)
  588. IF (KWSYS_CXX_HAS_CXXABI)
  589. # c++ demangle using cxxabi is supported with
  590. # this system and compiler
  591. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  592. COMPILE_DEFINITIONS KWSYS_SYSTEMINFORMATION_HAS_CPP_DEMANGLE=1)
  593. ENDIF()
  594. ENDIF()
  595. # basic backtrace works better with release build
  596. # don't bother with advanced features for release
  597. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  598. COMPILE_DEFINITIONS_DEBUG KWSYS_SYSTEMINFORMATION_HAS_DEBUG_BUILD=1)
  599. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  600. COMPILE_DEFINITIONS_RELWITHDEBINFO KWSYS_SYSTEMINFORMATION_HAS_DEBUG_BUILD=1)
  601. ENDIF()
  602. ENDIF()
  603. ENDIF()
  604. IF(BORLAND)
  605. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_BORLAND_ASM
  606. "Checking whether Borland CXX compiler supports assembler instructions" DIRECT)
  607. IF(KWSYS_CXX_HAS_BORLAND_ASM)
  608. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  609. COMPILE_DEFINITIONS KWSYS_CXX_HAS_BORLAND_ASM=1)
  610. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_BORLAND_ASM_CPUID
  611. "Checking whether Borland CXX compiler supports CPUID assembler instruction" DIRECT)
  612. IF(KWSYS_CXX_HAS_BORLAND_ASM_CPUID)
  613. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  614. COMPILE_DEFINITIONS KWSYS_CXX_HAS_BORLAND_ASM_CPUID=1)
  615. ENDIF()
  616. ENDIF()
  617. ENDIF()
  618. IF(KWSYS_USE___INT64)
  619. SET_PROPERTY(SOURCE SystemInformation.cxx testSystemInformation.cxx APPEND PROPERTY
  620. COMPILE_DEFINITIONS KWSYS_USE___INT64=1)
  621. ENDIF()
  622. IF(KWSYS_USE_LONG_LONG)
  623. SET_PROPERTY(SOURCE SystemInformation.cxx testSystemInformation.cxx APPEND PROPERTY
  624. COMPILE_DEFINITIONS KWSYS_USE_LONG_LONG=1)
  625. ENDIF()
  626. IF(KWSYS_IOS_HAS_OSTREAM_LONG_LONG)
  627. SET_PROPERTY(SOURCE SystemInformation.cxx testSystemInformation.cxx APPEND PROPERTY
  628. COMPILE_DEFINITIONS KWSYS_IOS_HAS_OSTREAM_LONG_LONG=1)
  629. ENDIF()
  630. IF(KWSYS_IOS_HAS_OSTREAM___INT64)
  631. SET_PROPERTY(SOURCE SystemInformation.cxx testSystemInformation.cxx APPEND PROPERTY
  632. COMPILE_DEFINITIONS KWSYS_IOS_HAS_OSTREAM___INT64=1)
  633. ENDIF()
  634. IF(KWSYS_BUILD_SHARED)
  635. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  636. COMPILE_DEFINITIONS KWSYS_BUILD_SHARED=1)
  637. ENDIF()
  638. IF(UNIX AND NOT CYGWIN)
  639. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_GETLOADAVG
  640. "Checking whether CXX compiler has getloadavg" DIRECT)
  641. IF(KWSYS_CXX_HAS_GETLOADAVG)
  642. SET_PROPERTY(SOURCE SystemInformation.cxx APPEND PROPERTY
  643. COMPILE_DEFINITIONS KWSYS_CXX_HAS_GETLOADAVG=1)
  644. ENDIF()
  645. ENDIF()
  646. ENDIF()
  647. IF(KWSYS_USE_FStream)
  648. KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H
  649. "Checking whether <ext/stdio_filebuf.h> is available" DIRECT)
  650. ENDIF()
  651. #-----------------------------------------------------------------------------
  652. # Choose a directory for the generated headers.
  653. IF(NOT KWSYS_HEADER_ROOT)
  654. SET(KWSYS_HEADER_ROOT "${PROJECT_BINARY_DIR}")
  655. ENDIF()
  656. SET(KWSYS_HEADER_DIR "${KWSYS_HEADER_ROOT}/${KWSYS_NAMESPACE}")
  657. INCLUDE_DIRECTORIES(${KWSYS_HEADER_ROOT})
  658. #-----------------------------------------------------------------------------
  659. IF(KWSYS_INSTALL_DOC_DIR)
  660. # Assign the license to the runtime component since it must be
  661. # distributed with binary forms of this software.
  662. IF(KWSYS_INSTALL_COMPONENT_NAME_RUNTIME)
  663. SET(KWSYS_INSTALL_LICENSE_OPTIONS ${KWSYS_INSTALL_LICENSE_OPTIONS}
  664. COMPONENT ${KWSYS_INSTALL_COMPONENT_NAME_RUNTIME}
  665. )
  666. ENDIF()
  667. # Install the license under the documentation directory.
  668. INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt
  669. DESTINATION ${KWSYS_INSTALL_DOC_DIR}/${KWSYS_NAMESPACE}
  670. ${KWSYS_INSTALL_LICENSE_OPTIONS})
  671. ENDIF()
  672. #-----------------------------------------------------------------------------
  673. # Build a list of classes and headers we need to implement the
  674. # selected components. Initialize with required components.
  675. SET(KWSYS_CLASSES)
  676. SET(KWSYS_H_FILES Configure SharedForward)
  677. SET(KWSYS_HXX_FILES Configure String)
  678. IF(NOT CMake_SOURCE_DIR)
  679. SET(KWSYS_HXX_FILES ${KWSYS_HXX_FILES}
  680. hashtable hash_fun hash_map hash_set
  681. )
  682. ENDIF()
  683. # Add selected C++ classes.
  684. SET(cppclasses
  685. Directory DynamicLoader Encoding Glob RegularExpression SystemTools
  686. CommandLineArguments IOStream FStream SystemInformation ConsoleBuf
  687. )
  688. FOREACH(cpp ${cppclasses})
  689. IF(KWSYS_USE_${cpp})
  690. # Use the corresponding class.
  691. SET(KWSYS_CLASSES ${KWSYS_CLASSES} ${cpp})
  692. # Load component-specific CMake code.
  693. IF(EXISTS ${PROJECT_SOURCE_DIR}/kwsys${cpp}.cmake)
  694. INCLUDE(${PROJECT_SOURCE_DIR}/kwsys${cpp}.cmake)
  695. ENDIF()
  696. ENDIF()
  697. ENDFOREACH()
  698. # Add selected C components.
  699. FOREACH(c
  700. Process Base64 Encoding MD5 Terminal System String
  701. )
  702. IF(KWSYS_USE_${c})
  703. # Use the corresponding header file.
  704. SET(KWSYS_H_FILES ${KWSYS_H_FILES} ${c})
  705. # Load component-specific CMake code.
  706. IF(EXISTS ${PROJECT_SOURCE_DIR}/kwsys${c}.cmake)
  707. INCLUDE(${PROJECT_SOURCE_DIR}/kwsys${c}.cmake)
  708. ENDIF()
  709. ENDIF()
  710. ENDFOREACH()
  711. #-----------------------------------------------------------------------------
  712. # Build a list of sources for the library based on components that are
  713. # included.
  714. SET(KWSYS_C_SRCS)
  715. SET(KWSYS_CXX_SRCS)
  716. # Add the proper sources for this platform's Process implementation.
  717. IF(KWSYS_USE_Process)
  718. IF(NOT UNIX)
  719. # Use the Windows implementation.
  720. SET(KWSYS_C_SRCS ${KWSYS_C_SRCS} ProcessWin32.c)
  721. ELSE()
  722. # Use the UNIX implementation.
  723. SET(KWSYS_C_SRCS ${KWSYS_C_SRCS} ProcessUNIX.c)
  724. ENDIF()
  725. ENDIF()
  726. # Add selected C sources.
  727. FOREACH(c Base64 Encoding MD5 Terminal System String)
  728. IF(KWSYS_USE_${c})
  729. IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${c}C.c)
  730. LIST(APPEND KWSYS_C_SRCS ${c}C.c)
  731. ELSE()
  732. LIST(APPEND KWSYS_C_SRCS ${c}.c)
  733. ENDIF()
  734. ENDIF()
  735. ENDFOREACH()
  736. # Configure headers of C++ classes and construct the list of sources.
  737. FOREACH(c ${KWSYS_CLASSES})
  738. # Add this source to the list of source files for the library.
  739. IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${c}CXX.cxx)
  740. LIST(APPEND KWSYS_CXX_SRCS ${c}CXX.cxx)
  741. ELSEIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${c}.cxx)
  742. LIST(APPEND KWSYS_CXX_SRCS ${c}.cxx)
  743. ENDIF()
  744. # Configure the header for this class.
  745. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/${c}.hxx.in ${KWSYS_HEADER_DIR}/${c}.hxx
  746. @ONLY IMMEDIATE)
  747. SET(KWSYS_CXX_SRCS ${KWSYS_CXX_SRCS} ${KWSYS_HEADER_DIR}/${c}.hxx)
  748. # Create an install target for the header.
  749. IF(KWSYS_INSTALL_INCLUDE_DIR)
  750. INSTALL(FILES ${KWSYS_HEADER_DIR}/${c}.hxx
  751. DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}
  752. ${KWSYS_INSTALL_INCLUDE_OPTIONS})
  753. ENDIF()
  754. ENDFOREACH()
  755. # Configure C headers.
  756. FOREACH(h ${KWSYS_H_FILES})
  757. # Configure the header into the given directory.
  758. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/${h}.h.in ${KWSYS_HEADER_DIR}/${h}.h
  759. @ONLY IMMEDIATE)
  760. SET(KWSYS_C_SRCS ${KWSYS_C_SRCS} ${KWSYS_HEADER_DIR}/${h}.h)
  761. # Create an install target for the header.
  762. IF(KWSYS_INSTALL_INCLUDE_DIR)
  763. INSTALL(FILES ${KWSYS_HEADER_DIR}/${h}.h
  764. DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}
  765. ${KWSYS_INSTALL_INCLUDE_OPTIONS})
  766. ENDIF()
  767. ENDFOREACH()
  768. # Configure other C++ headers.
  769. FOREACH(h ${KWSYS_HXX_FILES})
  770. # Configure the header into the given directory.
  771. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/${h}.hxx.in ${KWSYS_HEADER_DIR}/${h}.hxx
  772. @ONLY IMMEDIATE)
  773. SET(KWSYS_CXX_SRCS ${KWSYS_CXX_SRCS} ${KWSYS_HEADER_DIR}/${h}.hxx)
  774. # Create an install target for the header.
  775. IF(KWSYS_INSTALL_INCLUDE_DIR)
  776. INSTALL(FILES ${KWSYS_HEADER_DIR}/${h}.hxx
  777. DESTINATION ${KWSYS_INSTALL_INCLUDE_DIR}/${KWSYS_NAMESPACE}
  778. ${KWSYS_INSTALL_INCLUDE_OPTIONS})
  779. ENDIF()
  780. ENDFOREACH()
  781. #-----------------------------------------------------------------------------
  782. # Add the library with the configured name and list of sources.
  783. IF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS)
  784. IF(KWSYS_SPLIT_OBJECTS_FROM_INTERFACE)
  785. SET(KWSYS_TARGET_INTERFACE ${KWSYS_NAMESPACE})
  786. SET(KWSYS_TARGET_OBJECT ${KWSYS_NAMESPACE}_objects)
  787. SET(KWSYS_TARGET_LINK ${KWSYS_NAMESPACE}_private)
  788. SET(KWSYS_TARGET_INSTALL ${KWSYS_TARGET_INTERFACE} ${KWSYS_TARGET_LINK})
  789. SET(KWSYS_LINK_DEPENDENCY INTERFACE)
  790. ADD_LIBRARY(${KWSYS_TARGET_OBJECT} OBJECT
  791. ${KWSYS_C_SRCS} ${KWSYS_CXX_SRCS})
  792. IF(KWSYS_BUILD_SHARED)
  793. SET_PROPERTY(TARGET ${KWSYS_TARGET_OBJECT} PROPERTY
  794. POSITION_INDEPENDENT_CODE TRUE)
  795. ENDIF()
  796. ADD_LIBRARY(${KWSYS_TARGET_INTERFACE} INTERFACE)
  797. ADD_LIBRARY(${KWSYS_TARGET_LINK} INTERFACE)
  798. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_LINK} INTERFACE
  799. ${KWSYS_TARGET_INTERFACE})
  800. TARGET_SOURCES(${KWSYS_TARGET_LINK} INTERFACE
  801. $<TARGET_OBJECTS:${KWSYS_TARGET_OBJECT}>)
  802. ELSE()
  803. SET(KWSYS_TARGET_INTERFACE ${KWSYS_NAMESPACE})
  804. SET(KWSYS_TARGET_OBJECT ${KWSYS_NAMESPACE})
  805. SET(KWSYS_TARGET_LINK ${KWSYS_NAMESPACE})
  806. set(KWSYS_TARGET_INSTALL ${KWSYS_TARGET_LINK})
  807. SET(KWSYS_LINK_DEPENDENCY PUBLIC)
  808. ADD_LIBRARY(${KWSYS_TARGET_INTERFACE} ${KWSYS_LIBRARY_TYPE}
  809. ${KWSYS_C_SRCS} ${KWSYS_CXX_SRCS})
  810. ENDIF()
  811. SET_TARGET_PROPERTIES(${KWSYS_TARGET_OBJECT} PROPERTIES
  812. C_CLANG_TIDY ""
  813. CXX_CLANG_TIDY ""
  814. C_INCLUDE_WHAT_YOU_USE ""
  815. CXX_INCLUDE_WHAT_YOU_USE ""
  816. LABELS "${KWSYS_LABELS_LIB}")
  817. IF(KWSYS_USE_DynamicLoader)
  818. IF(UNIX)
  819. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY}
  820. ${CMAKE_DL_LIBS})
  821. ENDIF()
  822. ENDIF()
  823. IF(KWSYS_USE_SystemInformation)
  824. IF(WIN32)
  825. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY} ws2_32)
  826. IF(KWSYS_SYS_HAS_PSAPI)
  827. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY}
  828. Psapi)
  829. ENDIF()
  830. ELSEIF(UNIX)
  831. IF (EXECINFO_LIB AND KWSYS_CXX_HAS_BACKTRACE)
  832. # backtrace on FreeBSD is not in libc
  833. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY}
  834. ${EXECINFO_LIB})
  835. ENDIF()
  836. IF (KWSYS_CXX_HAS_DLADDR)
  837. # for symbol lookup using dladdr
  838. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY}
  839. ${CMAKE_DL_LIBS})
  840. ENDIF()
  841. IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  842. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_INTERFACE} ${KWSYS_LINK_DEPENDENCY}
  843. socket)
  844. ENDIF()
  845. ENDIF()
  846. ENDIF()
  847. # Apply user-defined target properties to the library.
  848. IF(KWSYS_PROPERTIES_CXX)
  849. SET_TARGET_PROPERTIES(${KWSYS_TARGET_INTERFACE} PROPERTIES
  850. ${KWSYS_PROPERTIES_CXX})
  851. ENDIF()
  852. # Set up include usage requirement
  853. IF(COMMAND TARGET_INCLUDE_DIRECTORIES)
  854. TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_INTERFACE} INTERFACE
  855. $<BUILD_INTERFACE:${KWSYS_HEADER_ROOT}>)
  856. IF(KWSYS_INSTALL_INCLUDE_DIR)
  857. TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_INTERFACE} INTERFACE
  858. $<INSTALL_INTERFACE:${KWSYS_INSTALL_INCLUDE_DIR}>)
  859. ENDIF()
  860. ENDIF()
  861. # Create an install target for the library.
  862. IF(KWSYS_INSTALL_LIBRARY_RULE)
  863. INSTALL(TARGETS ${KWSYS_TARGET_INSTALL} ${KWSYS_INSTALL_LIBRARY_RULE})
  864. ENDIF()
  865. ENDIF()
  866. # Add a C-only library if requested.
  867. IF(KWSYS_ENABLE_C AND KWSYS_C_SRCS)
  868. IF(KWSYS_SPLIT_OBJECTS_FROM_INTERFACE)
  869. SET(KWSYS_TARGET_C_INTERFACE ${KWSYS_NAMESPACE}_c)
  870. SET(KWSYS_TARGET_C_OBJECT ${KWSYS_NAMESPACE}_c_objects)
  871. SET(KWSYS_TARGET_C_LINK ${KWSYS_NAMESPACE}_c_private)
  872. SET(KWSYS_TARGET_C_INSTALL
  873. ${KWSYS_TARGET_C_INTERFACE} ${KWSYS_TARGET_C_LINK})
  874. SET(KWSYS_LINK_DEPENDENCY INTERFACE)
  875. ADD_LIBRARY(${KWSYS_TARGET_C_OBJECT} OBJECT ${KWSYS_C_SRCS})
  876. IF(KWSYS_BUILD_SHARED)
  877. SET_PROPERTY(TARGET ${KWSYS_TARGET_C_OBJECT} PROPERTY
  878. POSITION_INDEPENDENT_CODE TRUE)
  879. ENDIF()
  880. ADD_LIBRARY(${KWSYS_TARGET_C_INTERFACE} INTERFACE)
  881. ADD_LIBRARY(${KWSYS_TARGET_C_LINK} INTERFACE)
  882. TARGET_LINK_LIBRARIES(${KWSYS_TARGET_C_LINK} INTERFACE
  883. ${KWSYS_TARGET_C_INTERFACE})
  884. TARGET_SOURCES(${KWSYS_TARGET_C_LINK} INTERFACE
  885. $<TARGET_OBJECTS:${KWSYS_TARGET_C_OBJECT}>)
  886. ELSE()
  887. SET(KWSYS_TARGET_C_INTERFACE ${KWSYS_NAMESPACE}_c)
  888. SET(KWSYS_TARGET_C_OBJECT ${KWSYS_NAMESPACE}_c)
  889. SET(KWSYS_TARGET_C_LINK ${KWSYS_NAMESPACE}_c)
  890. SET(KWSYS_TARGET_C_INSTALL ${KWSYS_TARGET_C_LINK})
  891. SET(KWSYS_LINK_DEPENDENCY PUBLIC)
  892. ADD_LIBRARY(${KWSYS_TARGET_C_INTERFACE} ${KWSYS_LIBRARY_TYPE}
  893. ${KWSYS_C_SRCS})
  894. ENDIF()
  895. SET_TARGET_PROPERTIES(${KWSYS_TARGET_C_OBJECT} PROPERTIES
  896. LABELS "${KWSYS_LABELS_LIB}")
  897. # Apply user-defined target properties to the library.
  898. IF(KWSYS_PROPERTIES_C)
  899. SET_TARGET_PROPERTIES(${KWSYS_TARGET_C_INTERFACE} PROPERTIES
  900. ${KWSYS_PROPERTIES_C})
  901. ENDIF()
  902. # Set up include usage requirement
  903. IF(COMMAND TARGET_INCLUDE_DIRECTORIES)
  904. TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_C_INTERFACE} INTERFACE
  905. $<BUILD_INTERFACE:${KWSYS_HEADER_ROOT}>)
  906. IF(KWSYS_INSTALL_INCLUDE_DIR)
  907. TARGET_INCLUDE_DIRECTORIES(${KWSYS_TARGET_C_INTERFACE} INTERFACE
  908. $<INSTALL_INTERFACE:${KWSYS_INSTALL_INCLUDE_DIR}>)
  909. ENDIF()
  910. ENDIF()
  911. # Create an install target for the library.
  912. IF(KWSYS_INSTALL_LIBRARY_RULE)
  913. INSTALL(TARGETS ${KWSYS_TARGET_C_INSTALL})
  914. ENDIF()
  915. ENDIF()
  916. # For building kwsys itself, we use a macro defined on the command
  917. # line to configure the namespace in the C and C++ source files.
  918. ADD_DEFINITIONS("-DKWSYS_NAMESPACE=${KWSYS_NAMESPACE}")
  919. # Disable deprecation warnings for standard C functions.
  920. IF(MSVC OR (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Intel"))
  921. ADD_DEFINITIONS(
  922. -D_CRT_NONSTDC_NO_DEPRECATE
  923. -D_CRT_SECURE_NO_DEPRECATE
  924. -D_CRT_SECURE_NO_WARNINGS
  925. -D_SCL_SECURE_NO_DEPRECATE
  926. )
  927. ENDIF()
  928. IF(WIN32)
  929. # Help enforce the use of wide Windows apis.
  930. ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
  931. ENDIF()
  932. IF(KWSYS_USE_String)
  933. # Activate code in "String.c". See the comment in the source.
  934. SET_SOURCE_FILES_PROPERTIES(String.c PROPERTIES
  935. COMPILE_FLAGS "-DKWSYS_STRING_C")
  936. ENDIF()
  937. IF(KWSYS_USE_Encoding)
  938. # Set default 8 bit encoding in "EndcodingC.c".
  939. SET_PROPERTY(SOURCE EncodingC.c EncodingCXX.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  940. KWSYS_ENCODING_DEFAULT_CODEPAGE=${KWSYS_ENCODING_DEFAULT_CODEPAGE})
  941. ENDIF()
  942. #-----------------------------------------------------------------------------
  943. # Setup testing if not being built as part of another project.
  944. IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
  945. IF(BUILD_TESTING)
  946. # Compute the location of executables.
  947. SET(EXEC_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  948. IF(EXECUTABLE_OUTPUT_PATH)
  949. SET(EXEC_DIR "${EXECUTABLE_OUTPUT_PATH}")
  950. ENDIF()
  951. # C tests
  952. SET(KWSYS_C_TESTS
  953. testEncode.c
  954. testTerminal.c
  955. )
  956. IF(KWSYS_STANDALONE)
  957. SET(KWSYS_C_TESTS ${KWSYS_C_TESTS} testFail.c)
  958. ENDIF()
  959. CREATE_TEST_SOURCELIST(
  960. KWSYS_C_TEST_SRCS ${KWSYS_NAMESPACE}TestsC.c
  961. ${KWSYS_C_TESTS}
  962. )
  963. ADD_EXECUTABLE(${KWSYS_NAMESPACE}TestsC ${KWSYS_C_TEST_SRCS})
  964. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsC PROPERTY LABELS ${KWSYS_LABELS_EXE})
  965. TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE}TestsC ${KWSYS_TARGET_C_LINK})
  966. FOREACH(testfile ${KWSYS_C_TESTS})
  967. get_filename_component(test "${testfile}" NAME_WE)
  968. ADD_TEST(kwsys.${test} ${EXEC_DIR}/${KWSYS_NAMESPACE}TestsC ${test} ${KWSYS_TEST_ARGS_${test}})
  969. SET_PROPERTY(TEST kwsys.${test} PROPERTY LABELS ${KWSYS_LABELS_TEST})
  970. ENDFOREACH()
  971. # C++ tests
  972. IF(NOT WATCOM AND NOT CMake_SOURCE_DIR)
  973. SET(KWSYS_CXX_TESTS
  974. testHashSTL.cxx
  975. )
  976. ENDIF()
  977. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS}
  978. testConfigure.cxx
  979. testSystemTools.cxx
  980. testCommandLineArguments.cxx
  981. testCommandLineArguments1.cxx
  982. testDirectory.cxx
  983. )
  984. IF(KWSYS_STL_HAS_WSTRING)
  985. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS}
  986. testEncoding.cxx
  987. )
  988. ENDIF()
  989. IF(KWSYS_USE_FStream)
  990. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS}
  991. testFStream.cxx
  992. )
  993. ENDIF()
  994. IF(KWSYS_USE_ConsoleBuf)
  995. ADD_EXECUTABLE(testConsoleBufChild testConsoleBufChild.cxx)
  996. SET_PROPERTY(TARGET testConsoleBufChild PROPERTY C_CLANG_TIDY "")
  997. SET_PROPERTY(TARGET testConsoleBufChild PROPERTY CXX_CLANG_TIDY "")
  998. SET_PROPERTY(TARGET testConsoleBufChild PROPERTY C_INCLUDE_WHAT_YOU_USE "")
  999. SET_PROPERTY(TARGET testConsoleBufChild PROPERTY CXX_INCLUDE_WHAT_YOU_USE "")
  1000. SET_PROPERTY(TARGET testConsoleBufChild PROPERTY LABELS ${KWSYS_LABELS_EXE})
  1001. TARGET_LINK_LIBRARIES(testConsoleBufChild ${KWSYS_TARGET_LINK})
  1002. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS}
  1003. testConsoleBuf.cxx
  1004. )
  1005. IF("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" AND
  1006. CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "19.0.23506")
  1007. set_property(SOURCE testConsoleBuf.cxx testConsoleBufChild.cxx PROPERTY COMPILE_FLAGS /utf-8)
  1008. ENDIF()
  1009. SET_PROPERTY(SOURCE testConsoleBuf.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  1010. KWSYS_ENCODING_DEFAULT_CODEPAGE=${KWSYS_ENCODING_DEFAULT_CODEPAGE})
  1011. ENDIF()
  1012. IF(KWSYS_USE_SystemInformation)
  1013. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS} testSystemInformation.cxx)
  1014. ENDIF()
  1015. IF(KWSYS_USE_DynamicLoader)
  1016. SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS} testDynamicLoader.cxx)
  1017. # If kwsys contains the DynamicLoader, need extra library
  1018. ADD_LIBRARY(${KWSYS_NAMESPACE}TestDynload MODULE testDynload.c)
  1019. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestDynload PROPERTY LABELS ${KWSYS_LABELS_LIB})
  1020. ADD_DEPENDENCIES(${KWSYS_NAMESPACE}TestDynload ${KWSYS_TARGET_INTERFACE})
  1021. ENDIF()
  1022. CREATE_TEST_SOURCELIST(
  1023. KWSYS_CXX_TEST_SRCS ${KWSYS_NAMESPACE}TestsCxx.cxx
  1024. ${KWSYS_CXX_TESTS}
  1025. )
  1026. ADD_EXECUTABLE(${KWSYS_NAMESPACE}TestsCxx ${KWSYS_CXX_TEST_SRCS})
  1027. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsCxx PROPERTY C_CLANG_TIDY "")
  1028. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsCxx PROPERTY CXX_CLANG_TIDY "")
  1029. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsCxx PROPERTY C_INCLUDE_WHAT_YOU_USE "")
  1030. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsCxx PROPERTY CXX_INCLUDE_WHAT_YOU_USE "")
  1031. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestsCxx PROPERTY LABELS ${KWSYS_LABELS_EXE})
  1032. TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE}TestsCxx ${KWSYS_TARGET_LINK})
  1033. SET(TEST_SYSTEMTOOLS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  1034. SET(TEST_SYSTEMTOOLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  1035. CONFIGURE_FILE(
  1036. ${PROJECT_SOURCE_DIR}/testSystemTools.h.in
  1037. ${PROJECT_BINARY_DIR}/testSystemTools.h)
  1038. INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})
  1039. IF(CTEST_TEST_KWSYS)
  1040. CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/ExtraTest.cmake.in"
  1041. "${CMAKE_CURRENT_BINARY_DIR}/ExtraTest.cmake")
  1042. SET_DIRECTORY_PROPERTIES(PROPERTIES TEST_INCLUDE_FILE "${CMAKE_CURRENT_BINARY_DIR}/ExtraTest.cmake")
  1043. ENDIF()
  1044. SET(KWSYS_TEST_ARGS_testCommandLineArguments
  1045. --another-bool-variable
  1046. --long3=opt
  1047. --set-bool-arg1
  1048. -SSS ken brad bill andy
  1049. --some-bool-variable=true
  1050. --some-double-variable12.5
  1051. --some-int-variable 14
  1052. "--some-string-variable=test string with space"
  1053. --some-multi-argument 5 1 8 3 7 1 3 9 7 1
  1054. -N 12.5 -SS=andy -N 1.31 -N 22
  1055. -SS=bill -BBtrue -SS=brad
  1056. -BBtrue
  1057. -BBfalse
  1058. -SS=ken
  1059. -A
  1060. -C=test
  1061. --long2 hello
  1062. )
  1063. SET(KWSYS_TEST_ARGS_testCommandLineArguments1
  1064. --ignored
  1065. -n 24
  1066. --second-ignored
  1067. "-m=test value"
  1068. third-ignored
  1069. -p
  1070. some junk at the end
  1071. )
  1072. FOREACH(testfile ${KWSYS_CXX_TESTS})
  1073. get_filename_component(test "${testfile}" NAME_WE)
  1074. ADD_TEST(kwsys.${test} ${EXEC_DIR}/${KWSYS_NAMESPACE}TestsCxx ${test} ${KWSYS_TEST_ARGS_${test}})
  1075. SET_PROPERTY(TEST kwsys.${test} PROPERTY LABELS ${KWSYS_LABELS_TEST})
  1076. ENDFOREACH()
  1077. # Process tests.
  1078. ADD_EXECUTABLE(${KWSYS_NAMESPACE}TestProcess testProcess.c)
  1079. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestProcess PROPERTY LABELS ${KWSYS_LABELS_EXE})
  1080. TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE}TestProcess ${KWSYS_TARGET_C_LINK})
  1081. IF(NOT CYGWIN)
  1082. SET(KWSYS_TEST_PROCESS_7 7)
  1083. ENDIF()
  1084. FOREACH(n 1 2 3 4 5 6 ${KWSYS_TEST_PROCESS_7} 9 10)
  1085. ADD_TEST(kwsys.testProcess-${n} ${EXEC_DIR}/${KWSYS_NAMESPACE}TestProcess ${n})
  1086. SET_PROPERTY(TEST kwsys.testProcess-${n} PROPERTY LABELS ${KWSYS_LABELS_TEST})
  1087. SET_TESTS_PROPERTIES(kwsys.testProcess-${n} PROPERTIES TIMEOUT 120)
  1088. ENDFOREACH()
  1089. SET(testProcess_COMPILE_FLAGS "")
  1090. # Some Apple compilers produce bad optimizations in this source.
  1091. IF(APPLE AND CMAKE_C_COMPILER_ID MATCHES "^(GNU|LLVM)$")
  1092. SET(testProcess_COMPILE_FLAGS "${testProcess_COMPILE_FLAGS} -O0")
  1093. ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "XL" AND
  1094. NOT (CMAKE_SYSTEM MATCHES "Linux.*ppc64le" AND
  1095. NOT CMAKE_C_COMPILER_VERSION VERSION_LESS "13.1.1"))
  1096. # Tell IBM XL not to warn about our test infinite loop
  1097. # v13.1.1 and newer on Linux ppc64le is clang based and does not accept
  1098. # the -qsuppress option
  1099. SET(testProcess_COMPILE_FLAGS "${testProcess_COMPILE_FLAGS} -qsuppress=1500-010")
  1100. ENDIF()
  1101. IF(CMAKE_C_FLAGS MATCHES "-fsanitize=")
  1102. SET(testProcess_COMPILE_FLAGS "${testProcess_COMPILE_FLAGS} -DCRASH_USING_ABORT")
  1103. ENDIF()
  1104. SET_PROPERTY(SOURCE testProcess.c PROPERTY COMPILE_FLAGS "${testProcess_COMPILE_FLAGS}")
  1105. # Test SharedForward
  1106. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/testSharedForward.c.in
  1107. ${PROJECT_BINARY_DIR}/testSharedForward.c @ONLY IMMEDIATE)
  1108. ADD_EXECUTABLE(${KWSYS_NAMESPACE}TestSharedForward
  1109. ${PROJECT_BINARY_DIR}/testSharedForward.c)
  1110. SET_PROPERTY(TARGET ${KWSYS_NAMESPACE}TestSharedForward PROPERTY LABELS ${KWSYS_LABELS_EXE})
  1111. ADD_DEPENDENCIES(${KWSYS_NAMESPACE}TestSharedForward ${KWSYS_TARGET_C_LINK})
  1112. ADD_TEST(kwsys.testSharedForward ${EXEC_DIR}/${KWSYS_NAMESPACE}TestSharedForward 1)
  1113. SET_PROPERTY(TEST kwsys.testSharedForward PROPERTY LABELS ${KWSYS_LABELS_TEST})
  1114. # Configure some test properties.
  1115. IF(KWSYS_STANDALONE)
  1116. # We expect test to fail
  1117. SET_TESTS_PROPERTIES(kwsys.testFail PROPERTIES WILL_FAIL ON)
  1118. GET_TEST_PROPERTY(kwsys.testFail WILL_FAIL wfv)
  1119. SET_TESTS_PROPERTIES(kwsys.testFail PROPERTIES MEASUREMENT "Some Key=Some Value")
  1120. MESSAGE(STATUS "GET_TEST_PROPERTY returned: ${wfv}")
  1121. ENDIF()
  1122. # Set up ctest custom configuration file.
  1123. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/CTestCustom.cmake.in
  1124. ${PROJECT_BINARY_DIR}/CTestCustom.cmake @ONLY)
  1125. # Suppress known consistent failures on buggy systems.
  1126. IF(KWSYS_TEST_BOGUS_FAILURES)
  1127. SET_TESTS_PROPERTIES(${KWSYS_TEST_BOGUS_FAILURES} PROPERTIES WILL_FAIL ON)
  1128. ENDIF()
  1129. ENDIF()
  1130. ENDIF()