# FindMathematica @Mathematica_CMAKE_MODULE_VERSION@ documentation build script # JAVACMD is an environment variable that points to the full path to the Java runtime executable # used by the Apache Ant wrapper scripts set (ENV{JAVACMD} "@_option_JAVACMD@") set (Mathematica_KERNEL_EXECUTABLE "@Mathematica_KERNEL_EXECUTABLE@") set (Mathematica_ANT_EXECUTABLE "@Mathematica_ANT_EXECUTABLE@") set (Mathematica_JLink_PACKAGE_DIR "@Mathematica_JLink_PACKAGE_DIR@") set (Mathematica_DocumentationBuild_PACKAGE_DIR "@Mathematica_DocumentationBuild_PACKAGE_DIR@") set (Mathematica_DEBUG "@Mathematica_DEBUG@") set (DOCU_INPUT_DIRECTORY "@_option_INPUT_DIRECTORY@") set (DOCU_OUTPUT_DIRECTORY "@_option_OUTPUT_DIRECTORY@") set (DOCU_TYPE "@_option_DOCUMENTATION_TYPE@") set (DOCU_LANGUAGE "@_option_LANGUAGE@") set (DOCU_APP_NAME "@_option_APPLICATION_NAME@") set (CHECK_TIMESTAMPS "@_option_CHECK_TIMESTAMPS@") function(_to_native_path _inPath _outPathVariable) if (CYGWIN) execute_process( COMMAND cygpath "--mixed" "${_inPath}" TIMEOUT 5 OUTPUT_VARIABLE ${_outPathVariable} OUTPUT_STRIP_TRAILING_WHITESPACE) elseif (CMAKE_HOST_WIN32) string (REPLACE "/" "\\" ${_outPathVariable} "${_inPath}") else() # use CMake path literally set (${_outPathVariable} "${_inPath}") endif() set (${_outPathVariable} "${${_outPathVariable}}" PARENT_SCOPE) endfunction() set (_buildDocu TRUE) # handle CHECK_TIMESTAMPS option if (CHECK_TIMESTAMPS AND EXISTS "${DOCU_OUTPUT_DIRECTORY}") if (DOCU_TYPE MATCHES "[Nn]otebook") file (GLOB_RECURSE _docuSourceNBs RELATIVE "${DOCU_INPUT_DIRECTORY}" "${DOCU_INPUT_DIRECTORY}/*.nb") file (GLOB_RECURSE _docuBinaryNBs RELATIVE "${DOCU_OUTPUT_DIRECTORY}" "${DOCU_OUTPUT_DIRECTORY}/*.nb") if (_docuBinaryNBs) set (_docuNBs ${_docuSourceNBs} ${_docuBinaryNBs}) list (REMOVE_DUPLICATES _docuNBs) set (_docuNBTrigger "") foreach (_docuNB ${_docuNBs}) if ("${DOCU_INPUT_DIRECTORY}/${_docuNB}" IS_NEWER_THAN "${DOCU_OUTPUT_DIRECTORY}/${_docuNB}") list (APPEND _docuNBTrigger "${_docuNB}") list (LENGTH _docuNBTrigger _len) if (_len GREATER 10) # stop if many out-of-date files have been found break() endif() endif() endforeach() if (_docuNBTrigger) message (STATUS "Out-of-date ${DOCU_APP_NAME} Mathematica documentation notebooks: ${_docuNBTrigger}") else() message (STATUS "Built ${DOCU_APP_NAME} Mathematica ${DOCU_TYPE} documentation is up-to-date") set (_buildDocu FALSE) endif() endif() elseif (DOCU_TYPE MATCHES "HTML") file (GLOB_RECURSE _docuSourceNBs RELATIVE "${DOCU_INPUT_DIRECTORY}" "${DOCU_INPUT_DIRECTORY}/*.nb") file (GLOB_RECURSE _docuBinaryHTMLs RELATIVE "${DOCU_OUTPUT_DIRECTORY}" "${DOCU_OUTPUT_DIRECTORY}/*.html") if (_docuBinaryHTMLs) set (_docuNBTrigger "") foreach (_docuNB ${_docuSourceNBs}) get_filename_component(_docuBaseName "${_docuNB}" NAME_WE) string (REGEX MATCHALL "[^;]+/${_docuBaseName}\\.html" _docuHTMLNames "${_docuBinaryHTMLs}") if (_docuHTMLNames) foreach (_docuHTMLName ${_docuHTMLNames}) if ("${DOCU_INPUT_DIRECTORY}/${_docuNB}" IS_NEWER_THAN "${DOCU_OUTPUT_DIRECTORY}/${_docuHTMLName}") list (APPEND _docuNBTrigger "${_docuNB}") break() endif() endforeach() else() # no corresponding HTML document list (APPEND _docuNBTrigger "${_docuNB}") endif() list (LENGTH _docuNBTrigger _len) if (_len GREATER 10) # stop if many out-of-date files have been found break() endif() endforeach() if (_docuNBTrigger) message (STATUS "Out-of-date ${DOCU_APP_NAME} Mathematica documentation notebooks: ${_docuNBTrigger}") else() message (STATUS "Built ${DOCU_APP_NAME} Mathematica ${DOCU_TYPE} documentation is up-to-date") set (_buildDocu FALSE) endif() endif() endif() endif() if (_buildDocu) # clean previously built documentation files file (REMOVE_RECURSE "${DOCU_OUTPUT_DIRECTORY}") file (MAKE_DIRECTORY "${DOCU_OUTPUT_DIRECTORY}") get_filename_component(_appPath "${Mathematica_DocumentationBuild_PACKAGE_DIR}" DIRECTORY) string (TOLOWER "${DOCU_TYPE}.xml" _buildFileName) set (_buildFile "${Mathematica_DocumentationBuild_PACKAGE_DIR}/SystemFiles/ant/Build/${_buildFileName}") _to_native_path ("${Mathematica_ANT_EXECUTABLE}" _antExecutableNative) _to_native_path ("${_buildFile}" _buildFileNative) _to_native_path ("${_appPath}" _appPathNative) _to_native_path ("${Mathematica_KERNEL_EXECUTABLE}" _kernelExecutableNative) _to_native_path ("${Mathematica_JLink_PACKAGE_DIR}" _jlinkPathNative) _to_native_path ("${DOCU_INPUT_DIRECTORY}" _inputDirNative) _to_native_path ("${DOCU_OUTPUT_DIRECTORY}" _outputDirNative) set (_cmd COMMAND "${_antExecutableNative}") list (APPEND _cmd "-buildfile" "${_buildFileNative}") list (APPEND _cmd "-DappPath=${_appPathNative}") list (APPEND _cmd "-Dapp.name=${DOCU_APP_NAME}") list (APPEND _cmd "-DmathExe=${_kernelExecutableNative}") list (APPEND _cmd "-Djlinkpath=${_jlinkPathNative}") list (APPEND _cmd "-DinputDir=${_inputDirNative}") list (APPEND _cmd "-DoutputDir=${_outputDirNative}") list (APPEND _cmd "-Dlanguage=${DOCU_LANGUAGE}") list (APPEND _cmd "-DincludeLinkTrails=False") list (APPEND _cmd "-Dlocal=True") list (APPEND _cmd "-DcompleteHTMLQ=True") if (Mathematica_DEBUG) list (APPEND _cmd "-Ddebug=True") else() list (APPEND _cmd "-Ddebug=False") endif() list (APPEND _cmd RESULT_VARIABLE _result) if (Mathematica_DEBUG) message (STATUS "execute_process: ${_cmd}") endif() execute_process(${_cmd}) message(STATUS "${DOCU_APP_NAME} ${DOCU_TYPE} generation result=${_result}") endif()