1 # - Utilities to build Third-Party libraries.
3 # FOAM_THIRDPARTY_OPTION(<name> <description> <pkgname> <optional> <enabled>)
5 # Offers the user with options related to a third-party library. If <optional>
6 # is TRUE, the option FOAM_<UPPER_name>_ENABLED is created with the initial
7 # value <enabled> and the description given in <description>. If <optional>
8 # is FALSE, the option is not generated, and <description> can be the empty
9 # string and the value of <enabled> is meaningless. The function then first
10 # tries to find the package <pkgname> using FIND_PACKAGE(). Depending on the
11 # result, the function creates the option FOAM_BUILD_PRIVATE_<UPPER_name>
12 # with the default value set to FALSE if FIND_PACKAGE() found <pkgname>,
13 # or TRUE otherwise. Lastly an entry in the feature-summary table is made.
14 # All remaining arguments are considered to be variables that have to be
15 # purged using FOAM_DEPENDENT_VARIABLES() when FOAM_BUILD_PRIVATE_<UPPER_name>
18 # FOAM_EXTERNAL_PROJECT_ADD(<name> [options ...])
20 # Like ExternalProject_Add() with simplified patching, MD5 checking and cache
21 # initialization. You can use the PATCH_FILE <patch> option to specify one
22 # patch file which is to be applied to the sources. Note that patch must apply
23 # with the patch-option -p1. If you want to compare a download against an MD5
24 # sum, use the URL_MD5 <sum> option to specify a file to check and the
25 # check-sum. CACHE_INIT can be used to specify a cache-initialization script.
27 # FOAM_WRITE_CACHE_INIT(<fname> [<varname1> ...])
29 # Write a cache initializer file <fname> that can be used for external
30 # projects. The file will contain SET() commands that pre-populate the cache of
31 # the external project with the variables <varname1>...
34 #-------------------------------------------------------------------------------
36 # | ____| _| |_ / __ \ /\ | \/ |
37 # | |__ _ __ ___ ___ / \| | | | / \ | \ / |
38 # | __| '__/ _ \/ _ ( (| |) ) | | |/ /\ \ | |\/| |
39 # | | | | | __/ __/\_ _/| |__| / ____ \| | | |
40 # |_| |_| \___|\___| |_| \____/_/ \_\_| |_|
42 # FreeFOAM: The Cross-Platform CFD Toolkit
44 # Copyright (C) 2008-2011 Michael Wild <themiwi@users.sf.net>
45 # Gerber van der Graaf <gerber_graaf@users.sf.net>
46 #-------------------------------------------------------------------------------
48 # This file is part of FreeFOAM.
50 # FreeFOAM is free software; you can redistribute it and/or modify it
51 # under the terms of the GNU General Public License as published by the
52 # Free Software Foundation; either version 2 of the License, or (at your
53 # option) any later version.
55 # FreeFOAM is distributed in the hope that it will be useful, but WITHOUT
56 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
57 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
60 # You should have received a copy of the GNU General Public License
61 # along with FreeFOAM; if not, write to the Free Software Foundation,
62 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
65 # Functions to build thirdparty libraries
67 #-------------------------------------------------------------------------------
70 set(_foam_sf_master "http://master.dl.sourceforge.net/project")
71 set(_foam_sf_url "${_foam_sf_master}/freefoam")
73 macro(foam_thirdparty_option name description
74 pkgname optional enable)
75 set(_tpo_name "${name}")
76 set(_tpo_description "${description}")
77 set(_tpo_pkgname "${pkgname}")
78 set(_tpo_optional "${optional}")
79 set(_tpo_enable "${enable}")
80 string(TOUPPER ${_tpo_name} _tpo_upper_name)
81 string(TOUPPER ${_tpo_pkgname} _tpo_upper_pkgname)
83 foam_option(FOAM_ENABLE_${_tpo_upper_name} "Enable ${_tpo_name}"
84 "${_tpo_description}" ${_tpo_enable})
86 if(FOAM_ENABLE_${_tpo_upper_name} OR NOT _tpo_optional)
87 if(NOT FOAM_BUILD_PRIVATE_${_tpo_upper_name})
88 find_package(${_tpo_pkgname} QUIET)
89 if(${_tpo_upper_pkgname}_FOUND)
97 foam_option(FOAM_BUILD_PRIVATE_${_tpo_upper_name}
98 "Build private ${_tpo_name}"
99 "Download and compile ${_tpo_name} instead of searching in on the system"
101 foam_dependent_variables(FOAM_BUILD_PRIVATE_${_tpo_upper_name}
102 ${_tpo_upper_name}_INCLUDE_DIR ${_tpo_upper_name}_LIBRARY ${ARGN})
103 if(FOAM_BUILD_PRIVATE_${_tpo_upper_name})
104 foam_build_thirdparty(${_tpo_upper_name})
105 elseif(NOT ${_tpo_upper_pkgname}_FOUND)
106 # just to get the not-found-message on the screen
107 find_package(${_tpo_pkgname})
109 " If you have ${_tpo_name} installed, edit the variables beginning"
110 " with ${_tpo_upper_name}_ to refer to the installation or enable the"
111 " setting FOAM_BUILD_PRIVATE_${_tpo_upper_name} in the cache.\n"
115 "FOAM_ENABLE_${_tpo_upper_name} is TRUE, but ${_tpo_name} cannot be"
116 " found." ${_tpo_msg}
120 "${_tpo_name} is required but cannot be found.\n"
125 # just to get the found-message on the screen
126 find_package(${_tpo_pkgname})
128 mark_as_advanced(FOAM_BUILD_PRIVATE_${_tpo_upper_name})
132 include(ExternalProject)
134 find_program(PATCH_EXECUTABLE patch)
135 mark_as_advanced(PATCH_EXECUTABLE)
136 configure_file("${CMAKE_SOURCE_DIR}/CMake/foam_apply_patch.cmake.in"
137 "${CMAKE_BINARY_DIR}/CMake/foam_apply_patch.cmake" @ONLY)
139 function(foam_external_project_add name)
141 foam_parse_arguments(_fepa
142 "CMAKE_ARGS;CACHE_INIT:1;PATCH_FILE:1" "" "${ARGN}")
143 set(args "${_fepa_DEFAULT_ARGS}")
145 if(NOT PATCH_EXECUTABLE)
146 message(SEND_ERROR "Required program `patch' not found")
148 list(APPEND args PATCH_COMMAND "${CMAKE_COMMAND}"
149 -DPATCH_FILE=${_fepa_PATCH_FILE}
150 -P "${CMAKE_BINARY_DIR}/CMake/foam_apply_patch.cmake")
152 if(_fepa_CMAKE_ARGS OR _fepa_CACHE_INIT)
153 list(APPEND args CMAKE_ARGS)
155 list(APPEND args -C ${_fepa_CACHE_INIT})
157 list(APPEND args ${_fepa_CMAKE_ARGS})
159 ExternalProject_Add(${name} "${args}")
162 function(_foam_append_init_var strvar)
163 foreach(varname ${ARGN})
164 get_property(type CACHE ${varname} PROPERTY TYPE)
165 get_property(help CACHE ${varname} PROPERTY HELPSTRING)
170 set(help "Set by CMake")
173 "${${strvar}}\nset(${varname} \"${${varname}}\" CACHE ${type} \"${help}\")")
175 set(${strvar} "${${strvar}}" PARENT_SCOPE)
178 function(foam_write_cache_init fname)
179 set(FOAM_CONFIGURABLE_CONTENT)
180 if(CMAKE_CONFIGURATION_TYPES)
181 string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" config_types)
183 set(config_types DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)
186 # make sure that the static libraries are suitable to be used in shared
188 set(CMAKE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_${lang}_FLAGS}")
189 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
190 CMAKE_${lang}_COMPILER CMAKE_${lang}_FLAGS)
191 foreach(config ${config_types})
192 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
193 CMAKE_${lang}_FLAGS_${config})
196 foreach(type EXE MODULE SHARED)
197 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT CMAKE_${type}_LINKER_FLAGS)
198 foreach(config ${config_types})
199 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
200 CMAKE_${type}_LINKER_FLAGS_${config})
203 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
204 A2X_EXECUTABLE ASCIIDOC_EXECUTABLE BISON_EXECUTABLE CMAKE_AR
205 CMAKE_BUILD_TYPE CMAKE_COLOR_MAKEFILE CMAKE_HAVE_HP_CMA CMAKE_HAVE_SPROC_H
206 CMAKE_HAVE_THR_CREATE CMAKE_INSTALL_NAME_TOOL CMAKE_LINKER
207 CMAKE_MAKE_PROGRAM CMAKE_NM CMAKE_OBJCOPY CMAKE_OBJDUMP
208 CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT
209 CMAKE_RANLIB CMAKE_SKIP_RPATH CMAKE_STRIP CMAKE_USE_RELATIVE_PATHS
210 CMAKE_VERBOSE_MAKEFILE FLEX_CXX_FLAGS FLEX_EXECUTABLE FL_LIBRARY MPIEXEC
211 MPIEXEC_MAX_NUMPROCS MPIEXEC_NUMPROC_FLAG MPIEXEC_POSTFLAGS
212 MPIEXEC_PREFLAGS MPI_COMPILER MPI_COMPILE_FLAGS MPI_EXTRA_LIBRARY
213 MPI_INCLUDE_PATH MPI_LIBRARY MPI_LINK_FLAGS ZLIB_INCLUDE_DIR ZLIB_LIBRARY)
215 "${CMAKE_SOURCE_DIR}/CMake/FOAMConfigurableFile.in" "${fname}" @ONLY)
219 function(foam_build_metis)
220 find_package(Threads REQUIRED)
221 _foam_ep_download_if_required(download_opts
222 "http://freefoam.sf.net/nonfree/metis-5.0.1.tar.gz"
223 "6daba5e64ed86d46e038437eda720532"
225 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/METIS/metis_init.cmake")
226 foam_external_project_add(METIS
227 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/METIS
229 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/METIS/metis_init.cmake"
230 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/METIS"
231 "-DGKLIB_PATH:PATH=<SOURCE_DIR>/GKlib"
233 # create imported library
234 ExternalProject_Get_Property(METIS prefix)
235 add_library(foam_metis STATIC IMPORTED)
236 set_target_properties(foam_metis PROPERTIES
238 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}metis${CMAKE_STATIC_LIBRARY_SUFFIX}"
240 # FindMETIS compatibility
241 set(METIS_INCLUDE_DIRS
242 ${CMAKE_BINARY_DIR}/ThirdParty/METIS/include PARENT_SCOPE)
243 set(METIS_LIBRARIES foam_metis PARENT_SCOPE)
244 set(METIS_LINK_FLAGS PARENT_SCOPE)
245 set(METIS_NEW_API TRUE PARENT_SCOPE)
246 # mark it for removal from the interface libraries by foam_install_targets
247 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_metis)
251 function(foam_build_parmetis)
252 find_package(Threads REQUIRED)
253 _foam_ep_download_if_required(download_opts
254 "http://freefoam.sf.net/nonfree/ParMetis-3.1.tar.gz"
255 "15f252eabc397a8c2f56fa1f5ed91354"
257 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/parmetis_init.cmake")
258 foam_external_project_add(ParMetis
259 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/ParMetis
261 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/parmetis.patch"
262 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/parmetis_init.cmake"
263 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/ParMetis"
265 # create imported library
266 ExternalProject_Get_Property(ParMetis prefix)
267 add_library(foam_parmetis STATIC IMPORTED)
268 set_target_properties(foam_parmetis PROPERTIES
270 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_parmetis${CMAKE_STATIC_LIBRARY_SUFFIX}"
272 # FindPARMETIS compatibility
273 set(PARMETIS_INCLUDE_DIRS
274 ${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/include PARENT_SCOPE)
275 set(PARMETIS_LIBRARIES foam_parmetis ${MPI_LIBRARIES} PARENT_SCOPE)
276 set(PARMETIS_COMPILE_FLAGS "${MPIL_COMPILE_FLAGS}" PARENT_SCOPE)
277 set(PARMETIS_LINK_FLAGS "${MPIL_LINK_FLAGS}" PARENT_SCOPE)
278 # mark it for removal from the interface libraries by foam_install_targets
279 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_parmetis)
283 function(foam_build_ccmio)
284 set(filename libccmio-2.6.1.tar.gz)
285 set(URL "http://freefoam.sf.net/nonfree/${filename}")
286 _foam_ep_download_if_required(download_opts
288 "f81fbdfb960b1a4f3bcc7feee491efe4"
290 list(FIND download_opts DOWNLOAD_COMMAND download_cmd)
291 if(download_cmd EQUAL -1)
292 # the file is not local, remove the URL
294 list(REMOVE_AT download_opts 0 1)
296 find_program(CURL_EXECUTABLE curl)
297 mark_as_advanced(CURL_EXECUTABLE)
298 set(filepath "${CMAKE_BINARY_DIR}/ThirdParty/ccmio/src/${filename}")
300 list(INSERT download_opts 0 DOWNLOAD_COMMAND
301 "${WGET_EXECUTABLE}" --no-check-certificate -O "${filename}" ${URL})
302 elseif(CURL_EXECUTABLE)
303 list(INSERT download_opts 0 DOWNLOAD_COMMAND
304 "${CURL_EXECUTABLE}" --insecure -o "${filename}" ${URL})
306 message(SEND_ERROR "Cannot download ${URL}\n"
307 "Please do so manually and place the file in\n"
308 "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
312 set(filepath "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
314 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/ccmio/ccmio_init.cmake")
315 foam_external_project_add(ccmio
316 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/ccmio
318 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/ccmio.patch"
319 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/ccmio/ccmio_init.cmake"
320 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/ccmio"
322 # have to manually unpack..
323 ExternalProject_Get_Property(ccmio source_dir download_dir stamp_dir tmp_dir)
324 file(WRITE "${stamp_dir}/extract-ccmio.cmake"
325 "# Make file names absolute:
327 get_filename_component(tmp_dir \"${tmp_dir}\" ABSOLUTE)
328 get_filename_component(source_dir \"${source_dir}\" ABSOLUTE)
330 message(STATUS \"extracting...
332 dst='\${source_dir}'\")
334 # Prepare a space for extracting:
337 while(EXISTS \"\${tmp_dir}/extract\${i}\")
338 math(EXPR i \"\${i} + 1\")
340 set(ut_dir \"\${tmp_dir}/extract\${i}\")
341 file(MAKE_DIRECTORY \"\${ut_dir}\")
345 message(STATUS \"extracting... [tar xzf]\")
346 execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E tar xzf ${filepath}
347 WORKING_DIRECTORY \${ut_dir}
351 message(STATUS \"extracting... [error clean up]\")
352 file(REMOVE_RECURSE \"\${ut_dir}\")
353 message(FATAL_ERROR \"error: extract of '${filepath}' failed\")
356 # Analyze what came out of the tar file:
358 message(STATUS \"extracting... [analysis]\")
359 file(GLOB contents \"\${ut_dir}/*\")
360 list(LENGTH contents n)
361 if(NOT n EQUAL 1 OR NOT IS_DIRECTORY \"\${contents}\")
362 set(contents \"\${ut_dir}\")
365 # Copy \"the one\" directory to the final directory:
367 message(STATUS \"extracting... [copy]\")
368 file(COPY \"\${contents}/\" DESTINATION \${source_dir})
372 message(STATUS \"extracting... [clean up]\")
373 file(REMOVE_RECURSE \"\${ut_dir}\")
375 message(STATUS \"extracting... done\")
378 ExternalProject_Add_Step(ccmio unpack
379 COMMENT "Performing extraction step for 'ccmio'"
380 COMMAND "${CMAKE_COMMAND}" -P "${stamp_dir}/extract-ccmio.cmake"
381 WORKING_DIRECTORY ${download_dir}
385 # create imported library
386 ExternalProject_Get_Property(ccmio prefix)
387 add_library(foam_ccmio STATIC IMPORTED)
388 set_target_properties(foam_ccmio PROPERTIES
390 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_ccmio${CMAKE_STATIC_LIBRARY_SUFFIX}"
392 # FindCcmio compatibility
393 set(CCMIO_INCLUDE_DIRS
394 ${CMAKE_BINARY_DIR}/ThirdParty/ccmio/include PARENT_SCOPE)
395 set(CCMIO_LIBRARIES foam_ccmio PARENT_SCOPE)
396 # mark it for removal from the interface libraries by foam_install_targets
397 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_ccmio)
401 function(foam_build_mgridgen)
402 _foam_ep_download_if_required(download_opts
403 "http://freefoam.sf.net/nonfree/ParMGridGen-1.0.tar.gz"
404 "2872fa95b7fb91d6bd525490eed62038"
406 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/mgridgen_init.cmake")
407 foam_external_project_add(MGridGen
408 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/MGridGen
410 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/mgridgen.patch"
411 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/mgridgen_init.cmake"
412 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/MGridGen"
414 # create imported library
415 ExternalProject_Get_Property(MGridGen prefix)
416 add_library(foam_mgridgen STATIC IMPORTED)
417 set_target_properties(foam_mgridgen PROPERTIES
419 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_mgridgen${CMAKE_STATIC_LIBRARY_SUFFIX}"
421 # FindMGRIDGEN compatibility
422 set(MGRIDGEN_INCLUDE_DIRS
423 ${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/include PARENT_SCOPE)
424 set(MGRIDGEN_LIBRARIES foam_mgridgen PARENT_SCOPE)
425 set(PARMETIS_LINK_FLAGS PARENT_SCOPE)
426 # mark it for removal from the interface libraries by foam_install_targets
427 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_mgridgen)
431 function(foam_build_scotch)
432 find_package(BISON REQUIRED)
433 find_package(FLEX REQUIRED)
434 find_package(Threads)
435 _foam_ep_download_if_required(download_opts
436 "${_foam_sf_url}/ThirdParty/scotch/scotch_5.1.7.dfsg.orig.tar.gz"
437 "53d9715e11ae8e4cec1a48e8859e817f"
439 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/scotch/scotch_init.cmake")
440 foam_external_project_add(scotch
441 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/scotch
443 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/scotch.patch"
444 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/scotch/scotch_init.cmake"
445 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/scotch"
447 # create imported library
448 ExternalProject_Get_Property(scotch prefix)
449 add_library(foam_scotch STATIC IMPORTED)
450 set_target_properties(foam_scotch PROPERTIES
452 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_scotch${CMAKE_STATIC_LIBRARY_SUFFIX}"
454 # FindSCOTCH compatibility
455 set(SCOTCH_INCLUDE_DIRS
456 ${CMAKE_BINARY_DIR}/ThirdParty/scotch/include PARENT_SCOPE)
457 set(SCOTCH_LIBRARIES foam_scotch PARENT_SCOPE)
458 # mark it for removal from the interface libraries by foam_install_targets
459 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_scotch)
463 function(foam_build_zlib)
464 _foam_ep_download_if_required(download_opts
465 "${_foam_sf_url}/ThirdParty/zlib/zlib-1.2.5.tar.gz"
466 "c735eab2d659a96e5a594c9e8541ad63"
468 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/zlib/zlib_init.cmake")
469 foam_external_project_add(ZLIB
470 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/zlib
472 PATCH_COMMAND "${CMAKE_COMMAND}" -E remove -f zconf.h
473 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/zlib/zlib_init.cmake"
474 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/zlib"
475 "-DBUILD_SHARED_LIBS=OFF"
477 # create imported library
478 ExternalProject_Get_Property(ZLIB prefix)
479 add_library(foam_zlib STATIC IMPORTED)
480 set_target_properties(foam_zlib PROPERTIES
482 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}z${CMAKE_STATIC_LIBRARY_SUFFIX}"
484 # FindZLIB compatibility
485 set(ZLIB_INCLUDE_DIRS
486 ${CMAKE_BINARY_DIR}/ThirdParty/zlib/include PARENT_SCOPE)
487 set(ZLIB_LIBRARIES foam_zlib PARENT_SCOPE)
488 # mark it for removal from the interface libraries by foam_install_targets
489 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_zlib)
493 function(foam_build_mathjax)
494 set(install_dir ${CMAKE_BINARY_DIR}/doc/MathJax)
495 _foam_ep_download_if_required(download_opts
496 "${_foam_sf_master}/mathjax/MathJax/v1.0.1/MathJax-v1.0.1a.zip"
497 "b93c1f1e26a898faee072ab7aec57251"
499 foam_external_project_add(MathJax-PreFontUpdate
500 PREFIX "${CMAKE_BINARY_DIR}/ThirdParty/MathJax"
504 INSTALL_DIR "${install_dir}"
505 INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory
506 <SOURCE_DIR> <INSTALL_DIR>
508 ExternalProject_Add_Step(MathJax-PreFontUpdate fontCleanup
509 COMMENT "Removing broken web fonts in MathJax"
510 COMMAND "${CMAKE_COMMAND}" -E remove_directory
511 "${install_dir}/MathJax/fonts/HTML-CSS/TeX/otf"
514 _foam_ep_download_if_required(download_opts
515 "http://www.mathjax.org/dl/MathJax-Font-Update.zip"
516 "03ce6b5a62cfb9a8a8d205aea2e6997e"
518 # download & install font update
519 foam_external_project_add(MathJax-FontUpdate
520 DEPENDS MathJax-PreFontUpdate
521 PREFIX "${CMAKE_BINARY_DIR}/ThirdParty/MathJax-FontUpdate"
525 INSTALL_DIR "${install_dir}/fonts/HTML-CSS/TeX/otf"
526 INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory
527 <SOURCE_DIR>/MathJax-Font-Update/otf <INSTALL_DIR>
529 add_custom_target(MathJax)
530 add_dependencies(MathJax MathJax-FontUpdate)
531 # FindMathJax compatibility
532 set(MATHJAX_DIR "${install_dir}" PARENT_SCOPE)
535 # build third-party library
536 macro(foam_build_thirdparty _btp_what)
537 if(${_btp_what} STREQUAL METIS)
539 elseif(${_btp_what} STREQUAL PARMETIS)
540 foam_build_parmetis()
541 elseif(${_btp_what} STREQUAL CCMIO)
543 elseif(${_btp_what} STREQUAL MGRIDGEN)
544 foam_build_mgridgen()
545 elseif(${_btp_what} STREQUAL SCOTCH)
547 elseif(${_btp_what} STREQUAL ZLIB)
549 elseif(${_btp_what} STREQUAL MATHJAX)
552 message(FATAL_ERROR "Unknown third-party package ${_btp_what}")
556 # Assemble download options for foam_external_project_add.
557 # If the file already exists in ${CMAKE_SOURCE_DIR}/ThirdParty, don't download
559 function(_foam_ep_download_if_required var url md5sum)
560 string(REGEX REPLACE "^.*/" "" filename "${url}")
561 set(filepath "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
562 if(EXISTS "${filepath}")
563 # it's already in ${CMAKE_SOURCE_DIR}/ThirdParty
564 set(${var} URL "${filepath}" URL_MD5 "${md5sum}" DOWNLOAD_COMMAND ""
567 # use ExternalCommand to download it
568 set(${var} URL "${url}" URL_MD5 "${md5sum}" PARENT_SCOPE)
572 # ------------------------- vim: set sw=2 sts=2 et: --------------- end-of-file