From 0c2a953cc612ef95eda925c3a5f27ad10370704d Mon Sep 17 00:00:00 2001 From: Michael Wild Date: Wed, 15 Jun 2011 09:58:21 +0200 Subject: [PATCH] FIX: Parallel builds of UserGuide were broken Signed-off-by: Michael Wild --- CMake/FOAMUse.cmake.in | 2 + CMake/FOAMUtilities.cmake | 33 +++++++++++--- doc/UserGuide/CMakeLists.txt | 105 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 113 insertions(+), 27 deletions(-) diff --git a/CMake/FOAMUse.cmake.in b/CMake/FOAMUse.cmake.in index c08fcf0dc..253a7f93a 100644 --- a/CMake/FOAMUse.cmake.in +++ b/CMake/FOAMUse.cmake.in @@ -341,6 +341,8 @@ # Compiles the Aymptote sources into images. will hold the names of # the produced files. is a list of graphics formats supported by asy # (such as pdf, eps, png, etc.). is one or more Asymptote source files. +# Files listed in the OBJECT_DEPENDS source file property are copied to the +# temporary work directory and added as a dependeny of the command. # # FOAM_FIX_APPLE_GCC_BUG() # diff --git a/CMake/FOAMUtilities.cmake b/CMake/FOAMUtilities.cmake index 72ea94cd5..f4d94bd51 100644 --- a/CMake/FOAMUtilities.cmake +++ b/CMake/FOAMUtilities.cmake @@ -1017,16 +1017,35 @@ function(foam_compile_asy outvar formats) endif() get_filename_component(d "${f}" PATH) get_filename_component(ff "${f}" NAME_WE) - string(REPLACE ".asy" "" o "${f}") - configure_file("${f}" "${CMAKE_CURRENT_BINARY_DIR}/${f}" COPYONLY) foreach(fmt IN LISTS formats) - list(APPEND output "${CMAKE_CURRENT_BINARY_DIR}/${o}.${fmt}") - add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${o}.${fmt}" + string(REPLACE ".asy" ".${fmt}" o "${CMAKE_CURRENT_BINARY_DIR}/${f}") + get_filename_component(bo "${o}" NAME) + set(tmpdir + "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${ff}_${fmt}.dir") + if(NOT IS_DIRECTORY "${tmpdir}") + file(MAKE_DIRECTORY "${tmpdir}") + endif() + get_source_file_property(deps ${f} OBJECT_DEPENDS) + if(deps STREQUAL NOTFOUND) + set(deps) + endif() + list(INSERT deps 0 ${f}) + foreach(dep IN LISTS deps) + if(NOT IS_ABSOLUTE "${dep}") + set(dep "${CMAKE_CURRENT_SOURCE_DIR}/${dep}") + endif() + file(RELATIVE_PATH rdep "${CMAKE_CURRENT_SOURCE_DIR}/${d}" "${dep}") + configure_file("${dep}" "${tmpdir}/${rdep}" COPYONLY) + endforeach() + add_custom_command(OUTPUT "${o}" COMMAND "${ASY_EXECUTABLE}" -f${fmt} -tex pdflatex "${ff}" - DEPENDS ${f} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${d}" - COMMENT "Creating Asymptote graphics ${o}.${fmt}" + COMMAND "${CMAKE_COMMAND}" -E rename + ${bo} "${o}" + DEPENDS ${deps} + WORKING_DIRECTORY "${tmpdir}" + COMMENT "Creating Asymptote graphics ${bo}" VERBATIM) + list(APPEND output "${o}") endforeach() endforeach() set(${outvar} "${output}" PARENT_SCOPE) diff --git a/doc/UserGuide/CMakeLists.txt b/doc/UserGuide/CMakeLists.txt index dd48dceea..f9f833c61 100644 --- a/doc/UserGuide/CMakeLists.txt +++ b/doc/UserGuide/CMakeLists.txt @@ -31,18 +31,6 @@ include(files.cmake) -# determine graphics formats to generate -set(GRAPHICS_FORMATS) -foreach(f IN LISTS FOAM_GUIDES_FORMATS) - if(f STREQUAL xhtml) - list(APPEND GRAPHICS_FORMATS png) - elseif(f STREQUAL pdf) - list(APPEND GRAPHICS_FORMATS pdf) - else() - message(SEND_ERROR "Unknown output format ${f}") - endif() -endforeach() - # copy files foam_configure_files(installFiles DESTDIR doc/UserGuide COPYONLY ${IMAGES}) set(COPY_OUTPUT) @@ -77,8 +65,82 @@ foreach(fd IN LISTS COPY_SRCS) endif() endforeach() -# run asymptote -foam_compile_asy(ASY_OUTPUT "${GRAPHICS_FORMATS}" ${ASY_SRCS}) +# set up and run asymptote +set_property(SOURCE + images/mesh_snappyHexMeshBlockMesh.asy + images/mesh_snappyHexMeshCellRemoval.asy + images/mesh_snappyHexMeshCellSplittingFeatures.asy + images/mesh_snappyHexMeshCellSplittingRegion.asy + images/mesh_snappyHexMeshCellSplittingSurface.asy + images/mesh_snappyHexMeshDescription.asy + images/mesh_snappyHexMeshLayers.asy + images/mesh_snappyHexMeshSnapping.asy + PROPERTY OBJECT_DEPENDS images/mesh_snappyHexMeshCommon.asy) +set_property(SOURCE images/post_displayPanel.asy PROPERTY + OBJECT_DEPENDS images/post_displayPanel-snapshot.png) +set_property(SOURCE images/post_parametersPanel.asy PROPERTY + OBJECT_DEPENDS images/post_parametersPanel-snapshot.png) +set_property(SOURCE images/post_paraviewToolbars.asy PROPERTY + OBJECT_DEPENDS images/post_paraviewToolbars-snapshot.png) +set_property(SOURCE images/post_UxResidual.asy PROPERTY + OBJECT_DEPENDS images/post_Ux_0) +set_property(SOURCE images/tut_damBreakFine_snapshot_1.asy PROPERTY + OBJECT_DEPENDS + images/tut_damBreak_commonDamBreak.asy + images/tut_damBreakFine_snapshot_field_1.png images/tut_damBreakFine_bar.png) +set_property(SOURCE images/tut_damBreakFine_snapshot_2.asy PROPERTY + OBJECT_DEPENDS + images/tut_damBreak_commonDamBreak.asy + images/tut_damBreakFine_snapshot_field_2.png + images/tut_damBreakFine_bar.png) +set_property(SOURCE images/tut_damBreak_initial.asy PROPERTY + OBJECT_DEPENDS + images/tut_damBreak_commonDamBreak.asy + images/tut_damBreak_initial_field.png + images/tut_damBreak_bar.png) +set_property(SOURCE images/tut_damBreak_snapshot_1.asy PROPERTY + OBJECT_DEPENDS + images/tut_damBreak_commonDamBreak.asy + images/tut_damBreak_snapshot_field_1.png + images/tut_damBreak_bar.png) +set_property(SOURCE images/tut_damBreak_snapshot_2.asy PROPERTY + OBJECT_DEPENDS + images/tut_damBreak_commonDamBreak.asy + images/tut_damBreak_snapshot_field_2.png + images/tut_damBreak_bar.png) +set_property(SOURCE images/tut_ico_cavity_paraFoamCavityGlyphParameters.asy + PROPERTY OBJECT_DEPENDS + images/tut_ico_cavity_paraFoamCavityGlyphParameters_snapshot.png) +set_property(SOURCE images/tut_ico_cavity_paraFoamCavityGraphParameters.asy + PROPERTY OBJECT_DEPENDS + images/tut_ico_cavity_paraFoamCavityGraphParameters_snapshot.png) +set_property(SOURCE images/tut_ico_cavity_paraFoamCavityMesh.asy PROPERTY + OBJECT_DEPENDS images/tut_ico_cavity_paraFoamCavityMesh_snapshot.png) +set_property(SOURCE images/tut_ico_cavity_paraFoamCavityPContourDisplay.asy + PROPERTY OBJECT_DEPENDS + images/tut_ico_cavity_paraFoamCavityPContourDisplay_snapshot.png) +set_property(SOURCE + images/tut_ico_cavity_paraFoamCavityStreamTracerParameters.asy PROPERTY + OBJECT_DEPENDS + images/tut_ico_cavity_paraFoamCavityStreamTracerParameters_snapshot.png) +set_property(SOURCE images/tut_plateHole_sigmaxx.asy PROPERTY + OBJECT_DEPENDS images/tut_plateHole_field.png images/tut_plateHole_bar.png) +set_property(SOURCE images/tut_plateHole_sigmaxx_profile.asy PROPERTY + OBJECT_DEPENDS images/tut_plateHole_leftPatch_sigmaxx.xy) + +# IMPORTANT: Each output file must only be depended on by one command, +# otherwise parallel builds break. If this ever changes, collect the output in +# a custom target, and use add_dependencies() instead of a direct DEPENDS in +# the depending custom command. +foreach(f IN LISTS FOAM_GUIDES_FORMATS) + if(f STREQUAL xhtml) + foam_compile_asy(ASY_${f}_OUTPUT png ${ASY_SRCS}) + elseif(f STREQUAL pdf) + foam_compile_asy(ASY_${f}_OUTPUT pdf ${ASY_SRCS}) + else() + message(SEND_ERROR "Unknown output format ${f}") + endif() +endforeach() # run asciidoc set(DBLATEX_XSL @@ -102,7 +164,7 @@ else() list(APPEND A2X_pdf_OPTS -a foam-use-dblatex ${A2X_pdf_dblatex_OPTS}) endif() -set(A2X_pdf_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.pdf") +set(A2X_pdf_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pdf/UserGuide.pdf") if(NOT FOAM_USE_FOP) set(A2X_pdf_EXTRA_DEPS @@ -138,7 +200,7 @@ if(NOT FOAM_ENABLE_MATHJAX) endif() set(A2X_xhtml_OUTPUT - "${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.chunked/index.html") + "${CMAKE_CURRENT_BINARY_DIR}/xhtml/UserGuide.chunked/index.html") set(A2X_xhtml_EXTRA_DEPS "${CMAKE_BINARY_DIR}/data/asciidoc/docbook-xsl/chunked.xsl" @@ -173,14 +235,17 @@ list(GET CONF_ASCIIDOC_SRCS 0 ASCIIDOC_MAIN_SRC) add_custom_target(UserGuides ALL) foreach(fmt IN LISTS FOAM_GUIDES_FORMATS) + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${fmt}") add_custom_command(OUTPUT "${A2X_${fmt}_OUTPUT}" COMMAND "${A2X_EXECUTABLE}" ${A2X_OPTS} ${A2X_${fmt}_OPTS} -d book - -D "${CMAKE_CURRENT_BINARY_DIR}/.." --icons + # IMPORTANT: format specific destination directories, otherwise parallel + # builds break + -D "${CMAKE_CURRENT_BINARY_DIR}/${fmt}" --icons -a builddir=${CMAKE_CURRENT_BINARY_DIR}/ "--asciidoc-opts=-f ${ADOC_${fmt}_MAIN_CONF}" -r "${CMAKE_CURRENT_BINARY_DIR}" "${ASCIIDOC_MAIN_SRC}" - DEPENDS ${CONF_ASCIIDOC_SRCS} ${IMAGES} ${ASY_OUTPUT} ${COPY_OUTPUT} + DEPENDS ${CONF_ASCIIDOC_SRCS} ${IMAGES} ${ASY_${fmt}_OUTPUT} ${COPY_OUTPUT} ${ADOC_${fmt}_ALL_CONF} ${A2X_${fmt}_EXTRA_DEPS} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" @@ -192,14 +257,14 @@ foreach(fmt IN LISTS FOAM_GUIDES_FORMATS) endforeach() if(FOAM_ENABLE_PDF_GUIDES) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.pdf + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pdf/UserGuide.pdf DESTINATION ${FOAM_INSTALL_DOC_PATH} COMPONENT doc ) endif() if(FOAM_ENABLE_XHTML_GUIDES) add_dependencies(UserGuide-xhtml MathJax) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../UserGuide.chunked/ + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/xhtml/UserGuide.chunked/ DESTINATION ${FOAM_INSTALL_DOC_PATH}/html/UserGuide COMPONENT doc ) endif() -- 2.11.4.GIT