CMakeLists.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. #=============================================================================
  2. # CMake - Cross Platform Makefile Generator
  3. # Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
  4. #
  5. # Distributed under the OSI-approved BSD License (the "License");
  6. # see accompanying file Copyright.txt for details.
  7. #
  8. # This software is distributed WITHOUT ANY WARRANTY; without even the
  9. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. # See the License for more information.
  11. #=============================================================================
  12. INCLUDE(CheckIncludeFile)
  13. # Check if we can build support for ELF parsing.
  14. CHECK_INCLUDE_FILE("elf.h" HAVE_ELF_H)
  15. IF(HAVE_ELF_H)
  16. SET(CMAKE_USE_ELF_PARSER 1)
  17. ELSE(HAVE_ELF_H)
  18. SET(CMAKE_USE_ELF_PARSER)
  19. ENDIF(HAVE_ELF_H)
  20. SET(EXECUTABLE_OUTPUT_PATH ${CMake_BIN_DIR})
  21. # configure the .h file
  22. CONFIGURE_FILE(
  23. "${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in"
  24. "${CMake_BINARY_DIR}/Source/cmConfigure.h"
  25. )
  26. CONFIGURE_FILE(
  27. "${CMake_SOURCE_DIR}/Source/cmVersionConfig.h.in"
  28. "${CMake_BINARY_DIR}/Source/cmVersionConfig.h"
  29. )
  30. CONFIGURE_FILE(
  31. "${CMake_SOURCE_DIR}/Source/CPack/cmCPackConfigure.h.in"
  32. "${CMake_BINARY_DIR}/Source/CPack/cmCPackConfigure.h"
  33. )
  34. # add the include path to find the .h
  35. INCLUDE_DIRECTORIES(
  36. "${CMake_BINARY_DIR}/Source"
  37. "${CMake_SOURCE_DIR}/Source"
  38. ${CMAKE_ZLIB_INCLUDES}
  39. ${CMAKE_EXPAT_INCLUDES}
  40. ${CMAKE_TAR_INCLUDES}
  41. ${CMAKE_COMPRESS_INCLUDES}
  42. )
  43. # let cmake know it is supposed to use it
  44. ADD_DEFINITIONS(-DCMAKE_BUILD_WITH_CMAKE)
  45. OPTION(CMAKE_REGENERATE_YACCLEX
  46. "Regenerate YACC and LEXX files" OFF)
  47. MARK_AS_ADVANCED(CMAKE_REGENERATE_YACCLEX)
  48. IF(CMAKE_REGENERATE_YACCLEX)
  49. SET(parsersLexers cmDependsFortran cmCommandArgument cmExpr)
  50. FIND_PROGRAM(YACC_EXECUTABLE
  51. NAMES yacc bison
  52. PATHS /usr/bin
  53. DOC "Yacc or Bison executable")
  54. FIND_PROGRAM(FLEX_EXECUTABLE
  55. NAMES flex
  56. PATHS /usr/bin
  57. DOC "Flex executable")
  58. MARK_AS_ADVANCED(YACC_EXECUTABLE FLEX_EXECUTABLE)
  59. IF(YACC_EXECUTABLE)
  60. SET(BISON_FLAGS)
  61. IF(YACC_EXECUTABLE MATCHES "bison")
  62. SET(BISON_FLAGS "--yacc")
  63. ENDIF(YACC_EXECUTABLE MATCHES "bison")
  64. SET(yacc_files)
  65. FOREACH(name ${parsersLexers})
  66. SET(src "${CMAKE_CURRENT_SOURCE_DIR}/${name}Parser.y")
  67. SET(dst "${CMAKE_CURRENT_BINARY_DIR}/${name}Parser.cxx")
  68. SET(hdr "${CMAKE_CURRENT_BINARY_DIR}/${name}ParserTokens.h")
  69. ADD_CUSTOM_COMMAND(
  70. OUTPUT "${dst}"
  71. DEPENDS "${src}"
  72. COMMAND
  73. ${YACC_EXECUTABLE}
  74. --name-prefix=${name}_yy --defines=${hdr} -o${dst} ${src}
  75. )
  76. SET(yacc_files ${yacc_files} "${dst}")
  77. ENDFOREACH(name)
  78. ADD_CUSTOM_TARGET(RerunYacc DEPENDS ${yacc_files})
  79. ENDIF(YACC_EXECUTABLE)
  80. IF(FLEX_EXECUTABLE)
  81. SET(lex_files)
  82. FOREACH(name ${parsersLexers})
  83. SET(src "${CMAKE_CURRENT_SOURCE_DIR}/${name}Lexer.in.l")
  84. SET(dst "${CMAKE_CURRENT_BINARY_DIR}/${name}Lexer.cxx")
  85. SET(hdr "${CMAKE_CURRENT_BINARY_DIR}/${name}Lexer.h")
  86. ADD_CUSTOM_COMMAND(
  87. OUTPUT "${dst}"
  88. DEPENDS "${src}"
  89. COMMAND
  90. ${FLEX_EXECUTABLE}
  91. --prefix=${name}_yy --header-file=${hdr} -o${dst} ${src}
  92. )
  93. SET(lex_files ${lex_files} "${dst}")
  94. ENDFOREACH(name)
  95. ADD_CUSTOM_TARGET(RerunLex DEPENDS ${lex_files})
  96. ENDIF(FLEX_EXECUTABLE)
  97. ENDIF(CMAKE_REGENERATE_YACCLEX)
  98. # Check if we can build the ELF parser.
  99. IF(CMAKE_USE_ELF_PARSER)
  100. SET(ELF_SRCS cmELF.h cmELF.cxx)
  101. ENDIF(CMAKE_USE_ELF_PARSER)
  102. #
  103. # Sources for CMakeLib
  104. #
  105. SET(SRCS
  106. cmBootstrapCommands.cxx
  107. cmCacheManager.cxx
  108. cmCacheManager.h
  109. cmCommands.cxx
  110. cmCommands.h
  111. cmCommandArgumentLexer.cxx
  112. cmCommandArgumentParser.cxx
  113. cmCommandArgumentParserHelper.cxx
  114. cmComputeComponentGraph.cxx
  115. cmComputeComponentGraph.h
  116. cmComputeLinkDepends.cxx
  117. cmComputeLinkDepends.h
  118. cmComputeLinkInformation.cxx
  119. cmComputeLinkInformation.h
  120. cmComputeTargetDepends.h
  121. cmComputeTargetDepends.cxx
  122. cmCustomCommand.cxx
  123. cmCustomCommand.h
  124. cmDefinitions.cxx
  125. cmDefinitions.h
  126. cmDepends.cxx
  127. cmDepends.h
  128. cmDependsC.cxx
  129. cmDependsC.h
  130. cmDependsFortran.cxx
  131. cmDependsFortran.h
  132. cmDependsFortranLexer.cxx
  133. cmDependsFortranParser.cxx
  134. cmDependsFortranParser.h
  135. cmDependsJava.cxx
  136. cmDependsJava.h
  137. cmDependsJavaLexer.cxx
  138. cmDependsJavaParser.cxx
  139. cmDependsJavaParserHelper.cxx
  140. cmDependsJavaParserHelper.h
  141. cmDocumentation.cxx
  142. cmDocumentationFormatter.cxx
  143. cmDocumentationFormatterHTML.cxx
  144. cmDocumentationFormatterDocbook.cxx
  145. cmDocumentationFormatterMan.cxx
  146. cmDocumentationFormatterText.cxx
  147. cmDocumentationFormatterUsage.cxx
  148. cmDocumentationSection.cxx
  149. cmDocumentVariables.cxx
  150. cmDynamicLoader.cxx
  151. cmDynamicLoader.h
  152. ${ELF_SRCS}
  153. cmExprLexer.cxx
  154. cmExprParser.cxx
  155. cmExprParserHelper.cxx
  156. cmExportBuildFileGenerator.h
  157. cmExportBuildFileGenerator.cxx
  158. cmExportFileGenerator.h
  159. cmExportFileGenerator.cxx
  160. cmExportInstallFileGenerator.h
  161. cmExportInstallFileGenerator.cxx
  162. cmExtraEclipseCDT4Generator.cxx
  163. cmExtraEclipseCDT4Generator.h
  164. cmFileTimeComparison.cxx
  165. cmFileTimeComparison.h
  166. cmGeneratedFileStream.cxx
  167. cmGeneratorExpression.cxx
  168. cmGeneratorExpression.h
  169. cmGlobalGenerator.cxx
  170. cmGlobalGenerator.h
  171. cmGlobalUnixMakefileGenerator3.cxx
  172. cmGlobalUnixMakefileGenerator3.h
  173. cmGraphAdjacencyList.h
  174. cmInstallGenerator.h
  175. cmInstallGenerator.cxx
  176. cmInstallExportGenerator.cxx
  177. cmInstallFilesGenerator.h
  178. cmInstallFilesGenerator.cxx
  179. cmInstallScriptGenerator.h
  180. cmInstallScriptGenerator.cxx
  181. cmInstallTargetGenerator.h
  182. cmInstallTargetGenerator.cxx
  183. cmInstallDirectoryGenerator.h
  184. cmInstallDirectoryGenerator.cxx
  185. cmListFileCache.cxx
  186. cmListFileCache.h
  187. cmListFileLexer.c
  188. cmLocalGenerator.cxx
  189. cmLocalGenerator.h
  190. cmLocalUnixMakefileGenerator3.cxx
  191. cmMakeDepend.cxx
  192. cmMakeDepend.h
  193. cmMakefile.cxx
  194. cmMakefile.h
  195. cmMakefileTargetGenerator.cxx
  196. cmMakefileExecutableTargetGenerator.cxx
  197. cmMakefileLibraryTargetGenerator.cxx
  198. cmMakefileUtilityTargetGenerator.cxx
  199. cmOrderDirectories.cxx
  200. cmOrderDirectories.h
  201. cmPolicies.h
  202. cmPolicies.cxx
  203. cmProcessTools.cxx
  204. cmProcessTools.h
  205. cmProperty.cxx
  206. cmProperty.h
  207. cmPropertyDefinition.cxx
  208. cmPropertyDefinition.h
  209. cmPropertyDefinitionMap.cxx
  210. cmPropertyDefinitionMap.h
  211. cmPropertyMap.cxx
  212. cmPropertyMap.h
  213. cmScriptGenerator.h
  214. cmScriptGenerator.cxx
  215. cmSourceFile.cxx
  216. cmSourceFile.h
  217. cmSourceFileLocation.cxx
  218. cmSourceFileLocation.h
  219. cmSourceGroup.cxx
  220. cmSourceGroup.h
  221. cmSystemTools.cxx
  222. cmSystemTools.h
  223. cmTarget.cxx
  224. cmTarget.h
  225. cmTest.cxx
  226. cmTest.h
  227. cmTestGenerator.cxx
  228. cmTestGenerator.h
  229. cmVariableWatch.cxx
  230. cmVariableWatch.h
  231. cmVersion.cxx
  232. cmVersion.h
  233. cmXMLParser.cxx
  234. cmXMLParser.h
  235. cmXMLSafe.cxx
  236. cmXMLSafe.h
  237. cmake.cxx
  238. cmake.h
  239. cmakewizard.cxx
  240. cmakewizard.h
  241. cm_utf8.h
  242. cm_utf8.c
  243. )
  244. # Kdevelop only works on UNIX and not windows
  245. IF(UNIX)
  246. SET(SRCS ${SRCS} cmGlobalKdevelopGenerator.cxx)
  247. ENDIF(UNIX)
  248. IF(NOT CYGWIN)
  249. SET(SRCS ${SRCS} cmExtraCodeBlocksGenerator.cxx)
  250. ENDIF(NOT CYGWIN)
  251. # XCode only works on apple
  252. IF(APPLE)
  253. SET(SRCS ${SRCS}
  254. cmXCodeObject.cxx
  255. cmXCode21Object.cxx
  256. cmGlobalXCodeGenerator.cxx
  257. cmGlobalXCodeGenerator.h
  258. cmLocalXCodeGenerator.cxx
  259. cmLocalXCodeGenerator.h)
  260. ENDIF(APPLE)
  261. IF (WIN32)
  262. SET(SRCS ${SRCS}
  263. cmCallVisualStudioMacro.cxx
  264. cmCallVisualStudioMacro.h
  265. )
  266. IF(NOT UNIX)
  267. SET(SRCS ${SRCS}
  268. cmGlobalBorlandMakefileGenerator.cxx
  269. cmGlobalBorlandMakefileGenerator.h
  270. cmGlobalMSYSMakefileGenerator.cxx
  271. cmGlobalMinGWMakefileGenerator.cxx
  272. cmGlobalNMakeMakefileGenerator.cxx
  273. cmGlobalNMakeMakefileGenerator.h
  274. cmGlobalJOMMakefileGenerator.cxx
  275. cmGlobalJOMMakefileGenerator.h
  276. cmGlobalVisualStudio6Generator.cxx
  277. cmGlobalVisualStudio6Generator.h
  278. cmGlobalVisualStudio71Generator.cxx
  279. cmGlobalVisualStudio71Generator.h
  280. cmGlobalVisualStudio7Generator.cxx
  281. cmGlobalVisualStudio7Generator.h
  282. cmGlobalVisualStudio8Generator.cxx
  283. cmGlobalVisualStudio8Generator.h
  284. cmGlobalVisualStudio9Generator.cxx
  285. cmGlobalVisualStudio9Generator.h
  286. cmGlobalVisualStudio8Win64Generator.cxx
  287. cmGlobalVisualStudio8Win64Generator.h
  288. cmGlobalVisualStudio9Win64Generator.cxx
  289. cmGlobalVisualStudio9Win64Generator.h
  290. cmVisualStudioGeneratorOptions.h
  291. cmVisualStudioGeneratorOptions.cxx
  292. cmVisualStudio10TargetGenerator.h
  293. cmVisualStudio10TargetGenerator.cxx
  294. cmLocalVisualStudio10Generator.cxx
  295. cmLocalVisualStudio10Generator.h
  296. cmGlobalVisualStudio10Generator.h
  297. cmGlobalVisualStudio10Generator.cxx
  298. cmGlobalVisualStudio10Win64Generator.h
  299. cmGlobalVisualStudio10Win64Generator.cxx
  300. cmGlobalVisualStudioGenerator.cxx
  301. cmGlobalVisualStudioGenerator.h
  302. cmGlobalWatcomWMakeGenerator.cxx
  303. cmIDEFlagTable.h
  304. cmIDEOptions.cxx
  305. cmIDEOptions.h
  306. cmLocalVisualStudio6Generator.cxx
  307. cmLocalVisualStudio6Generator.h
  308. cmLocalVisualStudio7Generator.cxx
  309. cmLocalVisualStudio7Generator.h
  310. cmLocalVisualStudioGenerator.cxx
  311. cmLocalVisualStudioGenerator.h
  312. cmWin32ProcessExecution.cxx
  313. cmWin32ProcessExecution.h
  314. )
  315. ENDIF(NOT UNIX)
  316. ENDIF (WIN32)
  317. # create a library used by the command line and the GUI
  318. ADD_LIBRARY(CMakeLib ${SRCS})
  319. TARGET_LINK_LIBRARIES(CMakeLib cmsys
  320. ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES}
  321. ${CMAKE_TAR_LIBRARIES} ${CMAKE_COMPRESS_LIBRARIES}
  322. ${CMAKE_CURL_LIBRARIES} )
  323. # On Apple we need Carbon
  324. IF(APPLE)
  325. TARGET_LINK_LIBRARIES(CMakeLib "-framework CoreFoundation")
  326. ENDIF(APPLE)
  327. # On some platforms we need the rpcrt4 library for the VS 7 generators.
  328. IF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
  329. TARGET_LINK_LIBRARIES(CMakeLib rpcrt4)
  330. ENDIF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
  331. #
  332. # CTestLib
  333. #
  334. INCLUDE_DIRECTORIES(
  335. "${CMAKE_SOURCE_DIR}/Source/CTest"
  336. ${CMAKE_XMLRPC_INCLUDES}
  337. ${CMAKE_CURL_INCLUDES}
  338. )
  339. #
  340. # Sources for CTestLib
  341. #
  342. SET(CTEST_SRCS cmCTest.cxx
  343. CTest/cmProcess.cxx
  344. CTest/cmCTestBatchTestHandler.cxx
  345. CTest/cmCTestBuildAndTestHandler.cxx
  346. CTest/cmCTestBuildCommand.cxx
  347. CTest/cmCTestBuildHandler.cxx
  348. CTest/cmCTestConfigureCommand.cxx
  349. CTest/cmCTestConfigureHandler.cxx
  350. CTest/cmCTestCoverageCommand.cxx
  351. CTest/cmCTestCoverageHandler.cxx
  352. CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
  353. CTest/cmCTestGenericHandler.cxx
  354. CTest/cmCTestHandlerCommand.cxx
  355. CTest/cmCTestLaunch.cxx
  356. CTest/cmCTestMemCheckCommand.cxx
  357. CTest/cmCTestMemCheckHandler.cxx
  358. CTest/cmCTestMultiProcessHandler.cxx
  359. CTest/cmCTestReadCustomFilesCommand.cxx
  360. CTest/cmCTestRunScriptCommand.cxx
  361. CTest/cmCTestRunTest.cxx
  362. CTest/cmCTestScriptHandler.cxx
  363. CTest/cmCTestSleepCommand.cxx
  364. CTest/cmCTestStartCommand.cxx
  365. CTest/cmCTestSubmitCommand.cxx
  366. CTest/cmCTestSubmitHandler.cxx
  367. CTest/cmCTestTestCommand.cxx
  368. CTest/cmCTestTestHandler.cxx
  369. CTest/cmCTestUpdateCommand.cxx
  370. CTest/cmCTestUpdateHandler.cxx
  371. CTest/cmCTestVC.cxx
  372. CTest/cmCTestVC.h
  373. CTest/cmCTestGlobalVC.cxx
  374. CTest/cmCTestGlobalVC.h
  375. CTest/cmCTestCVS.cxx
  376. CTest/cmCTestCVS.h
  377. CTest/cmCTestSVN.cxx
  378. CTest/cmCTestSVN.h
  379. CTest/cmCTestBZR.cxx
  380. CTest/cmCTestBZR.h
  381. CTest/cmCTestGIT.cxx
  382. CTest/cmCTestGIT.h
  383. CTest/cmCTestHG.cxx
  384. CTest/cmCTestHG.h
  385. )
  386. # Build CTestLib
  387. ADD_LIBRARY(CTestLib ${CTEST_SRCS})
  388. TARGET_LINK_LIBRARIES(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES} ${CMAKE_XMLRPC_LIBRARIES})
  389. #
  390. # Sources for CPack
  391. #
  392. SET(CPACK_SRCS
  393. CPack/cmCPackArchiveGenerator.cxx
  394. CPack/cmCPackComponentGroup.cxx
  395. CPack/cmCPackGeneratorFactory.cxx
  396. CPack/cmCPackGenerator.cxx
  397. CPack/cmCPackLog.cxx
  398. CPack/cmCPackNSISGenerator.cxx
  399. CPack/cmCPackSTGZGenerator.cxx
  400. CPack/cmCPackTGZGenerator.cxx
  401. CPack/cmCPackTarBZip2Generator.cxx
  402. CPack/cmCPackTarCompressGenerator.cxx
  403. CPack/cmCPackZIPGenerator.cxx
  404. )
  405. IF(WIN32 AND UNIX)
  406. SET(CPACK_SRCS ${CPACK_SRCS}
  407. CPack/cmCPackCygwinBinaryGenerator.cxx
  408. CPack/cmCPackCygwinSourceGenerator.cxx
  409. )
  410. ENDIF(WIN32 AND UNIX)
  411. IF(UNIX)
  412. SET(CPACK_SRCS ${CPACK_SRCS}
  413. CPack/cmCPackDebGenerator.cxx
  414. CPack/cmCPackRPMGenerator.cxx
  415. )
  416. ENDIF(UNIX)
  417. IF(APPLE)
  418. SET(CPACK_SRCS ${CPACK_SRCS}
  419. CPack/cmCPackBundleGenerator.cxx
  420. CPack/cmCPackDragNDropGenerator.cxx
  421. CPack/cmCPackOSXX11Generator.cxx
  422. CPack/cmCPackPackageMakerGenerator.cxx
  423. )
  424. ENDIF(APPLE)
  425. # Build CPackLib
  426. ADD_LIBRARY(CPackLib ${CPACK_SRCS})
  427. TARGET_LINK_LIBRARIES(CPackLib CMakeLib)
  428. IF(APPLE)
  429. ADD_EXECUTABLE(cmakexbuild cmakexbuild.cxx)
  430. TARGET_LINK_LIBRARIES(cmakexbuild CMakeLib)
  431. ADD_EXECUTABLE(OSXScriptLauncher
  432. CPack/OSXScriptLauncher.cxx)
  433. TARGET_LINK_LIBRARIES(OSXScriptLauncher cmsys)
  434. TARGET_LINK_LIBRARIES(OSXScriptLauncher "-framework Carbon")
  435. ENDIF(APPLE)
  436. # Build CMake executable
  437. ADD_EXECUTABLE(cmake cmakemain.cxx)
  438. TARGET_LINK_LIBRARIES(cmake CMakeLib)
  439. # Build special executable for running programs on Windows 98
  440. IF(WIN32)
  441. IF(NOT UNIX)
  442. ADD_EXECUTABLE(cmw9xcom cmw9xcom.cxx)
  443. TARGET_LINK_LIBRARIES(cmw9xcom CMakeLib)
  444. INSTALL_TARGETS(/bin cmw9xcom)
  445. ENDIF(NOT UNIX)
  446. ENDIF(WIN32)
  447. # Build CTest executable
  448. ADD_EXECUTABLE(ctest ctest.cxx)
  449. TARGET_LINK_LIBRARIES(ctest CTestLib)
  450. # Build CPack executable
  451. ADD_EXECUTABLE(cpack CPack/cpack.cxx)
  452. TARGET_LINK_LIBRARIES(cpack CPackLib)
  453. # Curses GUI
  454. IF(BUILD_CursesDialog)
  455. INCLUDE(${CMake_SOURCE_DIR}/Source/CursesDialog/CMakeLists.txt)
  456. ENDIF(BUILD_CursesDialog)
  457. # Qt GUI
  458. OPTION(BUILD_QtDialog "Build Qt dialog for CMake" FALSE)
  459. IF(BUILD_QtDialog)
  460. SUBDIRS(QtDialog)
  461. ENDIF(BUILD_QtDialog)
  462. INCLUDE (${CMAKE_BINARY_DIR}/Source/LocalUserOptions.cmake OPTIONAL)
  463. INCLUDE (${CMAKE_SOURCE_DIR}/Source/LocalUserOptions.cmake OPTIONAL)
  464. INSTALL_TARGETS(/bin cmake)
  465. INSTALL_TARGETS(/bin ctest)
  466. INSTALL_TARGETS(/bin cpack)
  467. IF(APPLE)
  468. INSTALL_TARGETS(/bin cmakexbuild)
  469. ENDIF(APPLE)
  470. INSTALL_FILES(${CMAKE_DATA_DIR}/include cmCPluginAPI.h)