FIX: Missing sections in the application doc comments
[freefoam.git] / CMakeLists.txt
blob45d6eabb69d1def6f0501afa2708d267bb858fcf
1 #-------------------------------------------------------------------------------
2 #                ______             ______ ____          __  __
3 #               |  ____|           |  ____/ __ \   /\   |  \/  |
4 #               | |__ _ __ ___  ___| |__ | |  | | /  \  | \  / |
5 #               |  __| '__/ _ \/ _ \  __|| |  | |/ /\ \ | |\/| |
6 #               | |  | | |  __/  __/ |   | |__| / ____ \| |  | |
7 #               |_|  |_|  \___|\___|_|    \____/_/    \_\_|  |_|
9 #                   FreeFOAM: The Cross-Platform CFD Toolkit
11 # Copyright (C) 2008-2009 Michael Wild <themiwi@users.sf.net>
12 #                         Gerber van der Graaf <gerber_graaf@users.sf.net>
13 #-------------------------------------------------------------------------------
14 # License
15 #   This file is part of FreeFOAM.
17 #   FreeFOAM is free software; you can redistribute it and/or modify it
18 #   under the terms of the GNU General Public License as published by the
19 #   Free Software Foundation; either version 2 of the License, or (at your
20 #   option) any later version.
22 #   FreeFOAM is distributed in the hope that it will be useful, but WITHOUT
23 #   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
24 #   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25 #   for more details.
27 #   You should have received a copy of the GNU General Public License
28 #   along with FreeFOAM; if not, write to the Free Software Foundation,
29 #   Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #-------------------------------------------------------------------------------
32 project( FreeFOAM )
34 cmake_minimum_required( VERSION 2.6.0 )
36 # version information
37 set( FF_VERSION_MAJOR 0 )
38 set( FF_VERSION_MINOR 1 )
39 set( FF_VERSION_PATCH 0 )
40 set( FF_VERSION ${FF_VERSION_MAJOR}.${FF_VERSION_MINOR} )
41 set( FF_VERSION_FULL ${FF_VERSION}.${FF_VERSION_PATCH} )
43 # set up custom cmake module path
44 set( CMAKE_MODULE_PATH
45   ${CMAKE_SOURCE_DIR}/CMake
46   ${CMAKE_SOURCE_DIR}/CMake/Modules
47   )
49 # determine computer system
50 include( FFDetermineArch )
52 # select precision
53 option( FF_DOUBLE_PRECISION "Compile FreeFOAM with double precision floating point arithmetics." ON )
54 if( FF_DOUBLE_PRECISION )
55   set( FF_PRECISION DP )
56 else( FF_DOUBLE_PRECISION )
57   set( FF_PRECISION SP )
58 endif( FF_DOUBLE_PRECISION )
60 # select whether we want to build framewors on Mac OS X
61 if( APPLE )
62   option( FF_BUILD_FRAMEWORK "Build frameworks on Mac OS X" OFF )
63 else( APPLE )
64   set( FF_BUILD_FRAMEWORK OFF )
65 endif( APPLE )
66 mark_as_advanced( FF_BUILD_FRAMEWORK )
68 # we want shared libraries
69 set( BUILD_SHARED_LIBS SHARED )
71 # installation directories
72 set( FF_INSTALL_BIN_PATH bin CACHE STRING
73   "Executables installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
74 if( APPLE AND FF_BUILD_FRAMEWORK )
75   set( FF_INSTALL_FRAMEWORK_PATH /Library/Frameworks CACHE STRING
76     "Framework installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
77 endif( APPLE AND FF_BUILD_FRAMEWORK )
78 set( FF_INSTALL_LIB_PATH lib/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL} CACHE
79   STRING "Library installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
80 set( FF_INSTALL_LIBEXEC_BASE_PATH libexec/${CMAKE_PROJECT_NAME} CACHE STRING
81   "Installation path for executables not on PATH (absolute or relative to CMAKE_INSTALL_PREFIX). The ${CMAKE_PROJECT_NAME} version number will be appended as a sub-directory." )
82 set( FF_INSTALL_LIBEXEC_PATH ${FF_INSTALL_LIBEXEC_BASE_PATH}/${FF_VERSION_FULL} )
83 set( FF_INSTALL_HEADER_PATH include/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}
84   CACHE STRING "Header installation path (absolute or relative to CMAKE_INSTALL_PREFIX, not for frameworks)" )
85 set( FF_INSTALL_CONFIG_PATH etc/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL} CACHE
86   STRING "Configuration files installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
87 set( FF_INSTALL_DATA_PATH share/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL} CACHE
88   STRING "Data files installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
89 set( FF_INSTALL_DOC_PATH share/doc/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}
90   CACHE STRING "Documentation files installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
91 set( FF_INSTALL_MAN_PATH share/man CACHE STRING
92   "Man-pages installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
93 set( FF_INSTALL_TUTORIALS_PATH share/doc/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}
94   CACHE STRING "Tutorials installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
95 set( FF_INSTALL_CMAKE_PATH share/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}/CMake
96   CACHE STRING "CMake configuration files installation path (absolute or relative to CMAKE_INSTALL_PREFIX)" )
97 set( FF_INSTALL_PVFOAMREADER_PATH lib/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}/plugins/PVFoamReader
98   CACHE STRING "ParaView2 OpenFOAM-reader plugin installation path" )
99 set( FF_INSTALL_PV3FOAMREADER_PATH lib/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}/plugins/PV3FoamReader
100   CACHE STRING "ParaView3 OpenFOAM-reader plugin installation path" )
101 set( FF_INSTALL_USERDFOAM_PATH ib/${CMAKE_PROJECT_NAME}-${FF_VERSION_FULL}/plugins/ensightReader
102   CACHE STRING "Ensight OpenFOAM-reader plugin installation path" )
103 mark_as_advanced( FF_INSTALL_BIN_PATH FF_INSTALL_FRAMEWORK_PATH
104   FF_INSTALL_LIB_PATH  FF_INSTALL_LIBEXEC_BASE_PATH FF_INSTALL_LIBEXEC_PATH
105   FF_INSTALL_HEADER_PATH FF_INSTALL_CONFIG_PATH FF_INSTALL_DATA_PATH
106   FF_INSTALL_MAN_PATH FF_INSTALL_DOC_PATH FF_INSTALL_TUTORIALS_PATH
107   FF_INSTALL_CMAKE_PATH FF_INSTALL_PVFOAMREADER_PATH
108   FF_INSTALL_PV3FOAMREADER_PATH FF_INSTALL_USERDFOAM_PATH )
110 # make absolute paths
111 foreach( _p FF_INSTALL_BIN_PATH FF_INSTALL_LIB_PATH
112     FF_INSTALL_LIBEXEC_BASE_PATH FF_INSTALL_LIBEXEC_PATH
113     FF_INSTALL_FRAMEWORK_PATH FF_INSTALL_HEADER_PATH FF_INSTALL_CONFIG_PATH
114     FF_INSTALL_DATA_PATH FF_INSTALL_DOC_PATH FF_INSTALL_MAN_PATH
115     FF_INSTALL_TUTORIALS_PATH FF_INSTALL_CMAKE_PATH )
116   if( NOT IS_ABSOLUTE ${${_p}} )
117     set( ${_p} "${CMAKE_INSTALL_PREFIX}/${${_p}}" )
118   endif( NOT IS_ABSOLUTE ${${_p}} )
119 endforeach( _p )
121 # determine the INSTALL_NAME_DIR of potential frameworks
122 if( APPLE AND FF_BUILD_FRAMEWORK )
123   set( FF_FRAMEWORK_INSTALL_NAME_DIR ${FF_INSTALL_FRAMEWORK_PATH} )
124 else( APPLE AND FF_BUILD_FRAMEWORK )
125   set( FF_FRAMEWORK_INSTALL_NAME_DIR ${FF_INSTALL_LIB_PATH} )
126 endif( APPLE AND FF_BUILD_FRAMEWORK )
128 # select html documentation browser (try a few well known ones for default)
129 # have to loop, because find_program( HTML_DOC_BROWSER NAMES ... ) garbles things up
130 foreach( browser open gnome-open kde-open x-www-browser www-browser
131     firefox epiphany konqueror w3m lynx launch open )
132   find_program( HTML_DOC_BROWSER ${browser}
133     DOC "Program to open an HTML file" )
134   if( HTML_DOC_BROWSER )
135     break()
136   endif( HTML_DOC_BROWSER )
137 endforeach( browser )
138 if( NOT HTML_DOC_BROWSER )
139   message( STATUS
140     "Failed to find a program to open HTML pages with (a.k.a a browser). Point HTML_DOC_BROWSER to a suitable program." )
141   set( HTML_DOC_BROWSER "ECHO" CACHE STRING "Command to open an HTML file (ECHO will print it to STDOUT)" FORCE )
142 endif( NOT HTML_DOC_BROWSER )
143 set( FF_HTML_DOC_BROWSER_COMMAND "\${HTML_DOC_BROWSER} %f" CACHE STRING "Command to open an HTML file" )
144 string( CONFIGURE "${FF_HTML_DOC_BROWSER_COMMAND}" FF_HTML_DOC_BROWSER_COMMAND ESCAPE_QUOTES )
145 mark_as_advanced( HTML_DOC_BROWSER FF_HTML_DOC_BROWSER_COMMAND )
147 # set up the RPATH for installation
148 set( CMAKE_INSTALL_RPATH ${FF_INSTALL_LIB_PATH} )
150 # we want executables and libraries in uniform places
151 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libexec/FreeFOAM/${FF_VERSION_FULL} )
152 set( FF_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/FreeFOAM-${FF_VERSION_FULL} )
153 set( FF_FRAMEWORK_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Library/Frameworks )
154 if( FF_BUILD_FRAMEWORK )
155   set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${FF_FRAMEWORK_OUTPUT_DIRECTORY} )
156 else( FF_BUILD_FRAMEWORK )
157   set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${FF_LIBRARY_OUTPUT_DIRECTORY} )
158 endif( FF_BUILD_FRAMEWORK )
159 set( FF_ARCHIVE_OUTPUT_DIRECTORY ${FF_LIBRARY_OUTPUT_DIRECTORY} )
161 # find parallel libraries
162 option( FF_USE_MPI "Build ${CMAKE_PROJECT} against MPI parallel libraries" ON )
163 if( FF_USE_MPI )
164   find_package( MPI REQUIRED )
165 endif( FF_USE_MPI )
166 if( CMAKE_SYSTEM_NAME STREQUAL Linux )
167   option( FF_USE_GAMMA "Build ${CMAKE_PROJECT} against GAMMA parallel libraries" OFF )
168   if( FF_USE_GAMMA )
169     find_package( GAMMA REQUIRED )
170   endif( FF_USE_GAMMA )
171 endif( CMAKE_SYSTEM_NAME STREQUAL Linux )
172 if( MPI_FOUND OR GAMMA_FOUND )
173   set( FF_USE_PARALLEL TRUE )
174 endif( MPI_FOUND OR GAMMA_FOUND )
175 mark_as_advanced( FF_USE_MPI FF_USE_GAMMA )
177 # find flex
178 if(EXISTS ${CMAKE_ROOT}/Modules/FindFLEX.cmake)
179   find_package( FLEX REQUIRED )
180 else(EXISTS ${CMAKE_ROOT}/Modules/FindFLEX.cmake)
181   find_package( FLEXFreeFOAM REQUIRED )
182 endif(EXISTS ${CMAKE_ROOT}/Modules/FindFLEX.cmake)
183 include_directories( ${FLEX_INCLUDE_DIRS} )
184 set( FLEX_CXX_FLAGS "-+" CACHE STRING "Flags used by the flex compiler for flex++ targets." )
185 mark_as_advanced( FLEX_CXX_FLAGS )
187 # find zlib
188 find_package( ZLIB REQUIRED )
189 if( NOT ZLIB_FOUND )
190   message( SEND_ERROR "zlib is required! Override ZLIB_* settings [advanced]." )
191 endif( NOT ZLIB_FOUND )
193 # find readline
194 find_package( Readline )
196 # utility
197 include( FFConfigureFiles )
198 include( FFDetectChangedValue )
199 include( FFExportTargetsToBuildTree )
200 include( FFAddExecutableToDocIndex )
201 include( FFLinkLoadableLibrary )
202 include( FFCreateManPage )
203 include( FFCheckAndCompileFlex )
205 # find metis (recent distros have it in their repository, so default to search for that)
206 option( FF_BUILD_PRIVATE_METIS "Download and compile private METIS library instead of searching the system for it" OFF )
207 ff_detect_changed_value( FF_BUILD_PRIVATE_METIS_CHANGED FF_BUILD_PRIVATE_METIS
208   METIS_INCLUDE_DIR METIS_LIBRARY )
209 if( FF_BUILD_PRIVATE_METIS )
210   find_package( Threads REQUIRED )
211   add_subdirectory( ThirdParty/METIS )
212 else( FF_BUILD_PRIVATE_METIS )
213   find_package( Metis REQUIRED )
214   if( NOT METIS_FOUND )
215     message( SEND_ERROR "metis is required! Override METIS_* settings [advanced]." )
216   endif( NOT METIS_FOUND )
217   if( METIS_REQUIRES_MPI AND NOT FF_USE_MPI )
218     message( SEND_ERROR
219       "Your metis implementation requires FF_USE_MPI to be enabled. If you don't have/want MPI, enable FF_BUILD_PRIVATE_METIS instead." )
220   endif( METIS_REQUIRES_MPI AND NOT FF_USE_MPI )
221 endif( FF_BUILD_PRIVATE_METIS )
223 # find ParMetis (recent distros have it in their repository, so default to search for that)
224 if( FF_USE_MPI )
225   option( FF_BUILD_PRIVATE_PARMETIS "Download and compile private ParMetis library instead of searching the system for it" OFF )
226   ff_detect_changed_value( FF_BUILD_PRIVATE_PARMETIS_CHANGED FF_BUILD_PRIVATE_PARMETIS
227     PARMETIS_INCLUDE_DIR PARMETIS_metis_LIBRARY PARMETIS_parmetis_LIBRARY )
228   if( FF_BUILD_PRIVATE_PARMETIS )
229     add_subdirectory( ThirdParty/ParMetis )
230   else( FF_BUILD_PRIVATE_PARMETIS )
231     find_package( ParMetis REQUIRED )
232     if( NOT PARMETIS_FOUND )
233       message( SEND_ERROR "ParMetis is required! Override PARMETIS_* settings [advanced]." )
234     endif( NOT PARMETIS_FOUND )
235   endif( FF_BUILD_PRIVATE_PARMETIS )
236 else( FF_USE_MPI )
237   message( STATUS "NOTE: Not using ParMetis because FF_USE_MPI not selected." )
238 endif( FF_USE_MPI )
240 # find SCOTCH (recent distros have it in their repository, so default to search for that)
241 option( FF_BUILD_PRIVATE_SCOTCH "Download and compile private SCOTCH library instead of searching the system for it" OFF )
242 ff_detect_changed_value( FF_BUILD_PRIVATE_SCOTCH_CHANGED FF_BUILD_PRIVATE_SCOTCH
243   SCOTCH_INCLUDE_DIR SCOTCH_LIBRARY )
244 if( FF_BUILD_PRIVATE_SCOTCH )
245   find_package( Threads REQUIRED )
246   add_subdirectory( ThirdParty/SCOTCH )
247 else( FF_BUILD_PRIVATE_SCOTCH )
248   find_package( SCOTCH REQUIRED )
249   if( NOT SCOTCH_FOUND )
250     message( SEND_ERROR "SCOTCH is required! Override SCOTCH_* settings [advanced]." )
251   endif( NOT SCOTCH_FOUND )
252   set( SCOTCH_LIBRARIES ${SCOTCH_LIBRARY} ${SCOTCH_scotcherrexit_LIBRARY} )
253 endif( FF_BUILD_PRIVATE_SCOTCH )
255 # do not enable (par)mgridgen by default (licensing issues)
256 option( FF_ENABLE_PARMGRIDGEN "Enable PARMGRIDGEN support (required by the MGridGen GAMG agglomerator option). LICENSE UNCLEAR" OFF )
257 if( FF_ENABLE_PARMGRIDGEN )
258   # find mgridgen (not commonly available, default to private build)
259   option( FF_BUILD_PRIVATE_PARMGRIDGEN "Download and compile private PARMGRIDGEN library instead of searching the system for it" OFF )
260   ff_detect_changed_value( FF_BUILD_PRIVATE_PARMGRIDGEN_CHANGED FF_BUILD_PRIVATE_PARMGRIDGEN
261     MGRIDGEN_INCLUDE_DIR MGRIDGEN_LIBRARY )
262   if( FF_BUILD_PRIVATE_PARMGRIDGEN )
263     add_subdirectory( ThirdParty/PARMGRIDGEN )
264   else( FF_BUILD_PRIVATE_PARMGRIDGEN )
265     if( NOT FF_DOUBLE_PRECISION )
266       set( MGRIDGEN_USE_REAL ON )
267     endif( NOT FF_DOUBLE_PRECISION )
268     find_package( MGRIDGEN REQUIRED )
269     if( NOT MGRIDGEN_FOUND )
270       message( SEND_ERROR "MGRIDGEN is required! Override MGRIDGEN_* settings [advanced]." )
271     endif( NOT MGRIDGEN_FOUND )
272   endif( FF_BUILD_PRIVATE_PARMGRIDGEN )
273 endif( FF_ENABLE_PARMGRIDGEN )
275 # do not enable libccmio by default (proprietary license)
276 option( FF_ENABLE_CCMIO "Enable libccmio support (required by the ccm26ToFoam grid converter). REQUIRES PERMISSION BY CDADAPCO!" OFF )
277 if( FF_ENABLE_CCMIO )
278   # find ccmio (not commonly available, default to private build)
279   option( FF_BUILD_PRIVATE_CCMIO "Download and compile private CCMIO library instead of searching the system for it" OFF )
280   ff_detect_changed_value( FF_BUILD_PRIVATE_CCMIO_CHANGED FF_BUILD_PRIVATE_CCMIO
281     CCMIO_INCLUDE_DIR CCMIO_LIBRARY )
282   if( FF_BUILD_PRIVATE_CCMIO )
283     add_subdirectory( ThirdParty/ccmio )
284   else( FF_BUILD_PRIVATE_CCMIO )
285     find_package( Ccmio REQUIRED )
286     if( NOT CCMIO_FOUND )
287       message( SEND_ERROR "ccmio is required! Override CCMIO_* settings [advanced]." )
288     endif( NOT CCMIO_FOUND )
289   endif( FF_BUILD_PRIVATE_CCMIO )
290 endif( FF_ENABLE_CCMIO )
292 mark_as_advanced( FF_BUILD_PRIVATE_CCMIO FF_BUILD_PRIVATE_METIS
293   FF_BUILD_PRIVATE_PARMETIS FF_BUILD_PRIVATE_PARMGRIDGEN FF_DOUBLE_PRECISION
294   FF_BUILD_PRIVATE_SCOTCH FF_ENABLE_PARMGRIDGEN FF_ENABLE_CCMIO )
296 # ask user whether she wants to build ParaView plugins
297 option( FF_BUILD_PARAVIEW_PLUGINS "Build the ParaView plugins. Requires a ParaView build tree." OFF )
298 if( FF_BUILD_PARAVIEW_PLUGINS )
299   # find ParaView, which also find the VTK which has been used to build ParaView
300   find_package( ParaView REQUIRED )
301   if( NOT ParaView_FOUND )
302     message( FATAL_ERROR "Failed to find the ParaView build tree. Specify ParaView_DIR or disable FF_BUILD_PARAVIEW_PLUGINS" )
303   endif( NOT ParaView_FOUND )
304   # find the installed ParaView executable
305   find_program(
306     FF_PARAVIEW3_APP NAMES paraview paraview.app
307     PATHS ${ParaView_DIR}/bin
308     DOC "Path to the ParaView 3 executable (or application bundle on Mac OS X)"
309     )
310   if( NOT FF_PARAVIEW3_APP )
311     message( FATAL_ERROR "Failed to find the ParaView 3 executable or application bundle" )
312   endif( NOT FF_PARAVIEW3_APP )
313 endif( FF_BUILD_PARAVIEW_PLUGINS )
314 mark_as_advanced( FF_BUILD_PARAVIEW_PLUGINS FF_PARAVIEW3_APP )
316 # figure out default Pstream library
317 if( FF_USE_MPI )
318   set( _FF_DEFAULT_PSTREAM mpi )
319 elseif( FF_USE_GAMMA )
320   set( _FF_DEFAULT_PSTREAM gamma )
321 else( FF_USE_MPI )
322   set( _FF_DEFAULT_PSTREAM dummy )
323 endif( FF_USE_MPI )
324 set( FF_DEFAULT_PSTREAM ${_FF_DEFAULT_PSTREAM} CACHE STRING "Default Pstream library implementation [dummy|mpi|gamma]" )
325 mark_as_advanced( FF_DEFAULT_PSTREAM )
327 # ask user whether she wants to build Doxygen docs
328 option( FF_ENABLE_DOXYGEN_DOCS "Build the Doxygen documentation" OFF )
329 if( FF_ENABLE_DOXYGEN_DOCS )
330   find_package( Doxygen REQUIRED )
331   option( FF_DOXYDOCS_FOR_SF "Build the Doxygen docs for deployment on SourceForge" OFF )
332   mark_as_advanced( FF_DOXYDOCS_FOR_SF )
333 endif( FF_ENABLE_DOXYGEN_DOCS )
334 mark_as_advanced( FF_ENABLE_DOXYGEN_DOCS )
336 # ask user whether she wants to build man-pages
337 option( FF_ENABLE_MAN_PAGES "Build the man-pages (requires asciidoc toolchain)" OFF )
338 if( FF_ENABLE_MAN_PAGES )
339   find_package( AsciiDoc REQUIRED )
340   set( FF_MAN_PAGES_FORMAT "man" CACHE STRING "Output format of the man-pages [man|html]")
341   if( NOT FF_MAN_PAGES_FORMAT MATCHES "man|html" )
342     message( SEND_ERROR "FF_MAN_PAGES_FORMAT must be set to one of [man|html]" )
343   endif( NOT FF_MAN_PAGES_FORMAT MATCHES "man|html" )
344   if( FF_MAN_PAGES_FORMAT STREQUAL "man" AND NOT A2X_EXECUTABLE )
345     message( SEND_ERROR "To create the man-pages in man-format, a2x is required" )
346   endif( FF_MAN_PAGES_FORMAT STREQUAL "man" AND NOT A2X_EXECUTABLE )
347   mark_as_advanced( FF_MAN_PAGES_FORMAT )
348 endif( FF_ENABLE_MAN_PAGES )
349 mark_as_advanced( FF_ENABLE_MAN_PAGES )
351 # ask user whether she prefers local or www docs
352 option( FF_USE_LOCAL_DOXYGEN_DOCS
353   "Use the local Doxygen documentation instead of the one on http://freefoam.sf.net/doc/Doxygen/html" OFF )
354 mark_as_advanced( FF_USE_LOCAL_DOXYGEN_DOCS )
356 # find m4 macro processor
357 find_program( M4_EXECUTABLE m4 DOC "Path to the m4 macro processor" )
358 mark_as_advanced( M4_EXECUTABLE )
359 if( NOT M4_EXECUTABLE )
360   message( "WARNING: Failed to find M4 macro processor. Some of the tutorials will fail if it can't be found." )
361   set( M4_EXECUTABLE m4 )
362 endif( NOT M4_EXECUTABLE )
364 # on APPLE use cp -R -P -p, otherwise use cp -a
365 if( APPLE )
366   set( FF_CP_A_FLAGS "-R -P -p" )
367 else( APPLE )
368   set( FF_CP_A_FLAGS "-a" )
369 endif( APPLE )
371 # execinfo.h and cxxabi.h only work using GNU gcc and Debug config
372 # assume that if we have execinfo.h, cxxabi.h is also present.
373 if( CMAKE_COMPILER_IS_GNUCXX AND CMAKE_BUILD_TYPE STREQUAL Debug )
374   find_package( Execinfo )
375 endif( CMAKE_COMPILER_IS_GNUCXX AND CMAKE_BUILD_TYPE STREQUAL Debug )
377 # create the FreeFOAMConfig.h file
378 configure_file( ${CMAKE_SOURCE_DIR}/FreeFOAMConfig.h.in
379   ${CMAKE_BINARY_DIR}/include/FreeFOAMConfig.h @ONLY )
381 # on Solaris/SunOS fix up the shebangs
382 if( CMAKE_SYSTEM_NAME STREQUAL SunOS AND NOT EXISTS ${CMAKE_BINARY_DIR}/replaceAllShellSun.run )
383   message( STATUS "Fixing shell-interpreter for SunOS and Solaris" )
384   execute_process(
385     COMMAND ${CMAKE_SOURCE_DIR}/data/utilities/replaceAllShellSun bin
386     COMMAND ${CMAKE_SOURCE_DIR}/data/utilities/replaceAllShellSun data
387     COMMAND ${CMAKE_SOURCE_DIR}/data/utilities/replaceAllShellSun tutorials
388     COMMAND ${CMAKE_SOURCE_DIR}/data/utilities/replaceAllShellSun doc
389     COMMAND ${CMAKE_COMMAND} -E touch${CMAKE_BINARY_DIR}/replaceAllShellSun.run
390     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
391     )
392 endif( CMAKE_SYSTEM_NAME STREQUAL SunOS AND NOT EXISTS ${CMAKE_BINARY_DIR}/replaceAllShellSun.run )
394 # set up defines
395 add_definitions(
396   -D${FF_PRECISION}
397   -DNoRepository
398   -D${FF_OS}
399   )
401 # tools for building the include tree
402 include( createIncludeWrappers )
403 include_directories( ${CMAKE_BINARY_DIR}/include )
405 # descend into the sources...
406 add_subdirectory( bin )
407 add_subdirectory( etc )
408 add_subdirectory( data )
409 add_subdirectory( src )
410 add_subdirectory( applications )
411 add_subdirectory( tutorials )
412 add_subdirectory( doc )
414 # export the library dependencies to the build tree
415 ff_export_targets_to_build_tree()
417 # write the doc index file and install it
418 ff_write_doc_index()
419 install( FILES
420   ${CMAKE_BINARY_DIR}/InstallFiles/data/DoxyDocIndex
421   DESTINATION ${FF_INSTALL_DATA_PATH}
422   COMPONENT data
423   )
425 # export build settings and library dependencies
426 include( CMakeExportBuildSettings )
427 cmake_export_build_settings( ${CMAKE_BINARY_DIR}/FreeFOAMBuildSettings.cmake )
429 # create FreeFOAMConfig.cmake for the build and install tree
430 set( CONFIG_DEFINITIONS -DNoRepository -D${FF_OS} -D${FF_PRECISION} )
431 if( APPLE )
432   list( APPEND CONFIG_DEFINITIONS -Ddarwin )
433 endif( APPLE )
434 ff_configure_files( FFConfigBuildFiles FFConfigInstallFiles ""
435   FreeFOAMConfig.cmake.in
436   COPYONLY
437   FreeFOAMUse.cmake
438   )
440 # install the CMake config files
441 install( FILES
442   ${FFConfigInstallFiles}
443   ${CMAKE_BINARY_DIR}/FreeFOAMBuildSettings.cmake
444   DESTINATION ${FF_INSTALL_CMAKE_PATH}
445   COMPONENT dev
446   )
448 # install the FreeFOAMLibraryDepends.cmake file
449 install( EXPORT FreeFOAMLibraryDepends
450   DESTINATION ${FF_INSTALL_CMAKE_PATH}
451   NAMESPACE FF_
452   COMPONENT dev
453   )
455 # pack things up
456 include( FreeFOAMCPack )
458 # uninstall target
459 configure_file(
460   "${CMAKE_SOURCE_DIR}/CMake/Modules/cmake_uninstall.cmake.in"
461   "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
462   @ONLY
463   )
465 add_custom_target( uninstall
466   "${CMAKE_COMMAND}" -P "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
467   )
469 # ------------------------- vim: set sw=2 sts=2 et: --------------- end-of-file