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-2012 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 3 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, see <http://www.gnu.org/licenses/>.
64 # Functions to build thirdparty libraries
66 #-------------------------------------------------------------------------------
69 set(_foam_sf_master "http://master.dl.sourceforge.net/project")
70 set(_foam_sf_url "${_foam_sf_master}/freefoam")
72 macro(foam_thirdparty_option name description
73 pkgname optional enable)
74 set(_tpo_name "${name}")
75 set(_tpo_description "${description}")
76 set(_tpo_pkgname "${pkgname}")
77 set(_tpo_optional "${optional}")
78 set(_tpo_enable "${enable}")
79 string(TOUPPER ${_tpo_name} _tpo_upper_name)
80 string(TOUPPER ${_tpo_pkgname} _tpo_upper_pkgname)
82 foam_option(FOAM_ENABLE_${_tpo_upper_name} "Enable ${_tpo_name}"
83 "${_tpo_description}" ${_tpo_enable})
85 if(FOAM_ENABLE_${_tpo_upper_name} OR NOT _tpo_optional)
86 if(NOT FOAM_BUILD_PRIVATE_${_tpo_upper_name})
87 find_package(${_tpo_pkgname} QUIET)
88 if(${_tpo_upper_pkgname}_FOUND)
96 foam_option(FOAM_BUILD_PRIVATE_${_tpo_upper_name}
97 "Build private ${_tpo_name}"
98 "Download and compile ${_tpo_name} instead of searching in on the system"
100 foam_dependent_variables(FOAM_BUILD_PRIVATE_${_tpo_upper_name}
101 ${_tpo_upper_name}_INCLUDE_DIR ${_tpo_upper_name}_LIBRARY ${ARGN})
102 if(FOAM_BUILD_PRIVATE_${_tpo_upper_name})
103 foam_build_thirdparty(${_tpo_upper_name})
104 elseif(NOT ${_tpo_upper_pkgname}_FOUND)
105 # just to get the not-found-message on the screen
106 find_package(${_tpo_pkgname})
108 " If you have ${_tpo_name} installed, edit the variables beginning"
109 " with ${_tpo_upper_name}_ to refer to the installation or enable the"
110 " setting FOAM_BUILD_PRIVATE_${_tpo_upper_name} in the cache.\n"
114 "FOAM_ENABLE_${_tpo_upper_name} is TRUE, but ${_tpo_name} cannot be"
115 " found." ${_tpo_msg}
119 "${_tpo_name} is required but cannot be found.\n"
124 # just to get the found-message on the screen
125 find_package(${_tpo_pkgname})
127 mark_as_advanced(FOAM_BUILD_PRIVATE_${_tpo_upper_name})
131 include(ExternalProject)
133 find_program(PATCH_EXECUTABLE patch)
134 mark_as_advanced(PATCH_EXECUTABLE)
135 configure_file("${CMAKE_SOURCE_DIR}/CMake/foam_apply_patch.cmake.in"
136 "${CMAKE_BINARY_DIR}/CMake/foam_apply_patch.cmake" @ONLY)
138 function(foam_external_project_add name)
140 foam_parse_arguments(_fepa
141 "CMAKE_ARGS;CACHE_INIT:1;PATCH_FILE:1" "" "${ARGN}")
142 set(args "${_fepa_DEFAULT_ARGS}")
144 if(NOT PATCH_EXECUTABLE)
145 message(SEND_ERROR "Required program `patch' not found")
147 list(APPEND args PATCH_COMMAND "${CMAKE_COMMAND}"
148 -DPATCH_FILE=${_fepa_PATCH_FILE}
149 -P "${CMAKE_BINARY_DIR}/CMake/foam_apply_patch.cmake")
151 if(_fepa_CMAKE_ARGS OR _fepa_CACHE_INIT)
152 list(APPEND args CMAKE_ARGS)
154 list(APPEND args -C ${_fepa_CACHE_INIT})
156 list(APPEND args ${_fepa_CMAKE_ARGS})
158 ExternalProject_Add(${name} "${args}")
161 function(_foam_append_init_var strvar)
162 foreach(varname ${ARGN})
163 get_property(type CACHE ${varname} PROPERTY TYPE)
164 get_property(help CACHE ${varname} PROPERTY HELPSTRING)
169 set(help "Set by CMake")
172 "${${strvar}}\nset(${varname} \"${${varname}}\" CACHE ${type} \"${help}\")")
174 set(${strvar} "${${strvar}}" PARENT_SCOPE)
177 function(foam_write_cache_init fname)
178 set(FOAM_CONFIGURABLE_CONTENT)
179 if(CMAKE_CONFIGURATION_TYPES)
180 string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" config_types)
182 set(config_types DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)
185 # make sure that the static libraries are suitable to be used in shared
187 set(CMAKE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_${lang}_FLAGS}")
188 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
189 CMAKE_${lang}_COMPILER CMAKE_${lang}_FLAGS)
190 foreach(config ${config_types})
191 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
192 CMAKE_${lang}_FLAGS_${config})
195 foreach(type EXE MODULE SHARED)
196 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT CMAKE_${type}_LINKER_FLAGS)
197 foreach(config ${config_types})
198 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
199 CMAKE_${type}_LINKER_FLAGS_${config})
202 _foam_append_init_var(FOAM_CONFIGURABLE_CONTENT
203 A2X_EXECUTABLE ASCIIDOC_EXECUTABLE BISON_EXECUTABLE CMAKE_AR
204 CMAKE_BUILD_TYPE CMAKE_COLOR_MAKEFILE CMAKE_HAVE_HP_CMA CMAKE_HAVE_SPROC_H
205 CMAKE_HAVE_THR_CREATE CMAKE_INSTALL_NAME_TOOL CMAKE_LINKER
206 CMAKE_MAKE_PROGRAM CMAKE_NM CMAKE_OBJCOPY CMAKE_OBJDUMP
207 CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT
208 CMAKE_RANLIB CMAKE_SKIP_RPATH CMAKE_STRIP CMAKE_USE_RELATIVE_PATHS
209 CMAKE_VERBOSE_MAKEFILE FLEX_CXX_FLAGS FLEX_EXECUTABLE FL_LIBRARY MPIEXEC
210 MPIEXEC_MAX_NUMPROCS MPIEXEC_NUMPROC_FLAG MPIEXEC_POSTFLAGS
211 MPIEXEC_PREFLAGS MPI_COMPILER MPI_COMPILE_FLAGS MPI_EXTRA_LIBRARY
212 MPI_INCLUDE_PATH MPI_LIBRARY MPI_LINK_FLAGS ZLIB_INCLUDE_DIR ZLIB_LIBRARY)
214 "${CMAKE_SOURCE_DIR}/CMake/FOAMConfigurableFile.in" "${fname}" @ONLY)
218 function(foam_build_metis)
219 find_package(Threads REQUIRED)
220 _foam_ep_download_if_required(download_opts
221 "http://freefoam.sf.net/nonfree/metis-5.0.1.tar.gz"
222 "6daba5e64ed86d46e038437eda720532"
224 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/METIS/metis_init.cmake")
225 foam_external_project_add(METIS
226 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/METIS
228 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/METIS/metis_init.cmake"
229 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/METIS"
230 "-DGKLIB_PATH:PATH=<SOURCE_DIR>/GKlib"
232 # create imported library
233 ExternalProject_Get_Property(METIS prefix)
234 add_library(foam_metis STATIC IMPORTED)
235 set_target_properties(foam_metis PROPERTIES
237 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}metis${CMAKE_STATIC_LIBRARY_SUFFIX}"
239 # FindMETIS compatibility
240 set(METIS_INCLUDE_DIRS
241 ${CMAKE_BINARY_DIR}/ThirdParty/METIS/include PARENT_SCOPE)
242 set(METIS_LIBRARIES foam_metis PARENT_SCOPE)
243 set(METIS_LINK_FLAGS PARENT_SCOPE)
244 set(METIS_NEW_API TRUE PARENT_SCOPE)
245 # mark it for removal from the interface libraries by foam_install_targets
246 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_metis)
250 function(foam_build_parmetis)
251 find_package(Threads REQUIRED)
252 _foam_ep_download_if_required(download_opts
253 "http://freefoam.sf.net/nonfree/ParMetis-3.1.tar.gz"
254 "15f252eabc397a8c2f56fa1f5ed91354"
256 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/parmetis_init.cmake")
257 foam_external_project_add(ParMetis
258 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/ParMetis
260 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/parmetis.patch"
261 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/parmetis_init.cmake"
262 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/ParMetis"
264 # create imported library
265 ExternalProject_Get_Property(ParMetis prefix)
266 add_library(foam_parmetis STATIC IMPORTED)
267 set_target_properties(foam_parmetis PROPERTIES
269 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_parmetis${CMAKE_STATIC_LIBRARY_SUFFIX}"
271 # FindPARMETIS compatibility
272 set(PARMETIS_INCLUDE_DIRS
273 ${CMAKE_BINARY_DIR}/ThirdParty/ParMetis/include PARENT_SCOPE)
274 set(PARMETIS_LIBRARIES foam_parmetis ${MPI_LIBRARIES} PARENT_SCOPE)
275 set(PARMETIS_COMPILE_FLAGS "${MPIL_COMPILE_FLAGS}" PARENT_SCOPE)
276 set(PARMETIS_LINK_FLAGS "${MPIL_LINK_FLAGS}" PARENT_SCOPE)
277 # mark it for removal from the interface libraries by foam_install_targets
278 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_parmetis)
282 function(foam_build_ccmio)
283 set(filename libccmio-2.6.1.tar.gz)
284 set(URL "http://freefoam.sf.net/nonfree/${filename}")
285 _foam_ep_download_if_required(download_opts
287 "f81fbdfb960b1a4f3bcc7feee491efe4"
289 list(FIND download_opts DOWNLOAD_COMMAND download_cmd)
290 if(download_cmd EQUAL -1)
291 # the file is not local, remove the URL
293 list(REMOVE_AT download_opts 0 1)
295 find_program(CURL_EXECUTABLE curl)
296 mark_as_advanced(CURL_EXECUTABLE)
297 set(filepath "${CMAKE_BINARY_DIR}/ThirdParty/ccmio/src/${filename}")
299 list(INSERT download_opts 0 DOWNLOAD_COMMAND
300 "${WGET_EXECUTABLE}" --no-check-certificate -O "${filename}" ${URL})
301 elseif(CURL_EXECUTABLE)
302 list(INSERT download_opts 0 DOWNLOAD_COMMAND
303 "${CURL_EXECUTABLE}" --insecure --location -o "${filename}" ${URL})
305 message(SEND_ERROR "Cannot download ${URL}\n"
306 "Please do so manually and place the file in\n"
307 "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
311 set(filepath "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
313 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/ccmio/ccmio_init.cmake")
314 foam_external_project_add(ccmio
315 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/ccmio
317 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/ccmio.patch"
318 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/ccmio/ccmio_init.cmake"
319 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/ccmio"
321 # have to manually unpack..
322 ExternalProject_Get_Property(ccmio source_dir download_dir stamp_dir tmp_dir)
323 file(WRITE "${stamp_dir}/extract-ccmio.cmake"
324 "# Make file names absolute:
326 get_filename_component(tmp_dir \"${tmp_dir}\" ABSOLUTE)
327 get_filename_component(source_dir \"${source_dir}\" ABSOLUTE)
329 message(STATUS \"extracting...
331 dst='\${source_dir}'\")
333 # Prepare a space for extracting:
336 while(EXISTS \"\${tmp_dir}/extract\${i}\")
337 math(EXPR i \"\${i} + 1\")
339 set(ut_dir \"\${tmp_dir}/extract\${i}\")
340 file(MAKE_DIRECTORY \"\${ut_dir}\")
344 message(STATUS \"extracting... [tar xzf]\")
345 execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E tar xzf ${filepath}
346 WORKING_DIRECTORY \${ut_dir}
350 message(STATUS \"extracting... [error clean up]\")
351 file(REMOVE_RECURSE \"\${ut_dir}\")
352 message(FATAL_ERROR \"error: extract of '${filepath}' failed\")
355 # Analyze what came out of the tar file:
357 message(STATUS \"extracting... [analysis]\")
358 file(GLOB contents \"\${ut_dir}/*\")
359 list(LENGTH contents n)
360 if(NOT n EQUAL 1 OR NOT IS_DIRECTORY \"\${contents}\")
361 set(contents \"\${ut_dir}\")
364 # Copy \"the one\" directory to the final directory:
366 message(STATUS \"extracting... [copy]\")
367 file(COPY \"\${contents}/\" DESTINATION \${source_dir})
371 message(STATUS \"extracting... [clean up]\")
372 file(REMOVE_RECURSE \"\${ut_dir}\")
374 message(STATUS \"extracting... done\")
377 ExternalProject_Add_Step(ccmio unpack
378 COMMENT "Performing extraction step for 'ccmio'"
379 COMMAND "${CMAKE_COMMAND}" -P "${stamp_dir}/extract-ccmio.cmake"
380 WORKING_DIRECTORY ${download_dir}
384 # create imported library
385 ExternalProject_Get_Property(ccmio prefix)
386 add_library(foam_ccmio STATIC IMPORTED)
387 set_target_properties(foam_ccmio PROPERTIES
389 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_ccmio${CMAKE_STATIC_LIBRARY_SUFFIX}"
391 # FindCcmio compatibility
392 set(CCMIO_INCLUDE_DIRS
393 ${CMAKE_BINARY_DIR}/ThirdParty/ccmio/include PARENT_SCOPE)
394 set(CCMIO_LIBRARIES foam_ccmio PARENT_SCOPE)
395 # mark it for removal from the interface libraries by foam_install_targets
396 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_ccmio)
400 function(foam_build_mgridgen)
401 _foam_ep_download_if_required(download_opts
402 "http://freefoam.sf.net/nonfree/ParMGridGen-1.0.tar.gz"
403 "2872fa95b7fb91d6bd525490eed62038"
405 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/mgridgen_init.cmake")
406 foam_external_project_add(MGridGen
407 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/MGridGen
409 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/mgridgen.patch"
410 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/mgridgen_init.cmake"
411 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/MGridGen"
413 # create imported library
414 ExternalProject_Get_Property(MGridGen prefix)
415 add_library(foam_mgridgen STATIC IMPORTED)
416 set_target_properties(foam_mgridgen PROPERTIES
418 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_mgridgen${CMAKE_STATIC_LIBRARY_SUFFIX}"
420 # FindMGRIDGEN compatibility
421 set(MGRIDGEN_INCLUDE_DIRS
422 ${CMAKE_BINARY_DIR}/ThirdParty/MGridGen/include PARENT_SCOPE)
423 set(MGRIDGEN_LIBRARIES foam_mgridgen PARENT_SCOPE)
424 set(PARMETIS_LINK_FLAGS PARENT_SCOPE)
425 # mark it for removal from the interface libraries by foam_install_targets
426 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_mgridgen)
430 function(foam_build_scotch)
431 find_package(BISON REQUIRED)
432 find_package(FLEX REQUIRED)
433 find_package(Threads)
434 _foam_ep_download_if_required(download_opts
435 "${_foam_sf_url}/ThirdParty/scotch/scotch_5.1.7.dfsg.orig.tar.gz"
436 "53d9715e11ae8e4cec1a48e8859e817f"
438 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/scotch/scotch_init.cmake")
439 foam_external_project_add(scotch
440 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/scotch
442 PATCH_FILE "${CMAKE_SOURCE_DIR}/ThirdParty/scotch.patch"
443 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/scotch/scotch_init.cmake"
444 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/scotch"
446 # create imported library
447 ExternalProject_Get_Property(scotch prefix)
448 add_library(foam_scotch STATIC IMPORTED)
449 set_target_properties(foam_scotch PROPERTIES
451 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}foam_scotch${CMAKE_STATIC_LIBRARY_SUFFIX}"
453 # FindSCOTCH compatibility
454 set(SCOTCH_INCLUDE_DIRS
455 ${CMAKE_BINARY_DIR}/ThirdParty/scotch/include PARENT_SCOPE)
456 set(SCOTCH_LIBRARIES foam_scotch PARENT_SCOPE)
457 # mark it for removal from the interface libraries by foam_install_targets
458 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_scotch)
462 function(foam_build_zlib)
463 _foam_ep_download_if_required(download_opts
464 "${_foam_sf_url}/ThirdParty/zlib/zlib-1.2.5.tar.gz"
465 "c735eab2d659a96e5a594c9e8541ad63"
467 foam_write_cache_init("${CMAKE_BINARY_DIR}/ThirdParty/zlib/zlib_init.cmake")
468 foam_external_project_add(ZLIB
469 PREFIX ${CMAKE_BINARY_DIR}/ThirdParty/zlib
471 PATCH_COMMAND "${CMAKE_COMMAND}" -E remove -f zconf.h
472 CACHE_INIT "${CMAKE_BINARY_DIR}/ThirdParty/zlib/zlib_init.cmake"
473 CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ThirdParty/zlib"
474 "-DBUILD_SHARED_LIBS=OFF"
476 # create imported library
477 ExternalProject_Get_Property(ZLIB prefix)
478 add_library(foam_zlib STATIC IMPORTED)
479 set_target_properties(foam_zlib PROPERTIES
481 "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}z${CMAKE_STATIC_LIBRARY_SUFFIX}"
483 # FindZLIB compatibility
484 set(ZLIB_INCLUDE_DIRS
485 ${CMAKE_BINARY_DIR}/ThirdParty/zlib/include PARENT_SCOPE)
486 set(ZLIB_LIBRARIES foam_zlib PARENT_SCOPE)
487 # mark it for removal from the interface libraries by foam_install_targets
488 set_property(GLOBAL APPEND PROPERTY FOAM_THIRDPARTY_LIBRARIES foam_zlib)
492 function(foam_build_mathjax)
493 set(install_dir ${CMAKE_BINARY_DIR}/doc/MathJax)
494 _foam_ep_download_if_required(download_opts
495 "${_foam_sf_master}/mathjax/MathJax/v1.0.1/MathJax-v1.0.1a.zip"
496 "b93c1f1e26a898faee072ab7aec57251"
498 foam_external_project_add(MathJax-PreFontUpdate
499 PREFIX "${CMAKE_BINARY_DIR}/ThirdParty/MathJax"
503 INSTALL_DIR "${install_dir}"
504 INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory
505 <SOURCE_DIR> <INSTALL_DIR>
507 ExternalProject_Add_Step(MathJax-PreFontUpdate fontCleanup
508 COMMENT "Removing broken web fonts in MathJax"
509 COMMAND "${CMAKE_COMMAND}" -E remove_directory
510 "${install_dir}/MathJax/fonts/HTML-CSS/TeX/otf"
513 _foam_ep_download_if_required(download_opts
514 "http://www.mathjax.org/dl/MathJax-Font-Update.zip"
515 "03ce6b5a62cfb9a8a8d205aea2e6997e"
517 # download & install font update
518 foam_external_project_add(MathJax-FontUpdate
519 DEPENDS MathJax-PreFontUpdate
520 PREFIX "${CMAKE_BINARY_DIR}/ThirdParty/MathJax-FontUpdate"
524 INSTALL_DIR "${install_dir}/fonts/HTML-CSS/TeX/otf"
525 INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory
526 <SOURCE_DIR>/MathJax-Font-Update/otf <INSTALL_DIR>
528 add_custom_target(MathJax)
529 add_dependencies(MathJax MathJax-FontUpdate)
530 # FindMathJax compatibility
531 set(MATHJAX_DIR "${install_dir}" PARENT_SCOPE)
534 # build third-party library
535 macro(foam_build_thirdparty _btp_what)
536 if(${_btp_what} STREQUAL METIS)
538 elseif(${_btp_what} STREQUAL PARMETIS)
539 foam_build_parmetis()
540 elseif(${_btp_what} STREQUAL CCMIO)
542 elseif(${_btp_what} STREQUAL MGRIDGEN)
543 foam_build_mgridgen()
544 elseif(${_btp_what} STREQUAL SCOTCH)
546 elseif(${_btp_what} STREQUAL ZLIB)
548 elseif(${_btp_what} STREQUAL MATHJAX)
551 message(FATAL_ERROR "Unknown third-party package ${_btp_what}")
555 # Assemble download options for foam_external_project_add.
556 # If the file already exists in ${CMAKE_SOURCE_DIR}/ThirdParty, don't download
558 function(_foam_ep_download_if_required var url md5sum)
559 string(REGEX REPLACE "^.*/" "" filename "${url}")
560 set(filepath "${CMAKE_SOURCE_DIR}/ThirdParty/${filename}")
561 if(EXISTS "${filepath}")
562 # it's already in ${CMAKE_SOURCE_DIR}/ThirdParty
563 set(${var} URL "${filepath}" URL_MD5 "${md5sum}" DOWNLOAD_COMMAND ""
566 # use ExternalCommand to download it
567 set(${var} URL "${url}" URL_MD5 "${md5sum}" PARENT_SCOPE)
571 # ------------------------- vim: set sw=2 sts=2 et: --------------- end-of-file