summaryrefslogtreecommitdiff
path: root/graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake')
-rw-r--r--graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake174
1 files changed, 174 insertions, 0 deletions
diff --git a/graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake b/graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake
new file mode 100644
index 0000000000..df0875a93b
--- /dev/null
+++ b/graphics/asymptote/cmake-scripts/win32-pre-nsis-installer.cmake
@@ -0,0 +1,174 @@
+if (NOT WIN32)
+ message(FATAL_ERROR "Pre-NSIS installation is intended for windows only!")
+endif()
+
+if (NOT ASY_WIN_RESOURCE_DIR)
+ message(FATAL_ERROR "ASY_WIN_RESOURCE_DIR is not defined.
+Please ensure win32-specific.cmake is included before this file!")
+endif()
+
+if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_CURRENT_SOURCE_DIR}/cmake-install-win32")
+endif()
+
+# helper target for files needed
+add_custom_target(asy-pre-nsis-targets DEPENDS asy asy-basefiles)
+
+# check done, start configuration
+set(ASYMPTOTE_NSI_CONFIGURATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/nsifiles)
+file(MAKE_DIRECTORY ${ASYMPTOTE_NSI_CONFIGURATION_DIR})
+
+configure_file(
+ ${ASY_WIN_RESOURCE_DIR}/AsymptoteInstallInfo.nsi.in
+ ${ASYMPTOTE_NSI_CONFIGURATION_DIR}/AsymptoteInstallInfo.nsi
+)
+
+set(ASY_INSTALL_DIRECTORY build-${ASY_VERSION})
+
+set(BUILD_ASY_INSTALLER_SCRIPT ${ASY_WIN_RESOURCE_DIR}/build-asymptote-installer.py)
+configure_file(
+ ${ASY_WIN_RESOURCE_DIR}/build-asy-installer.ps1.in
+ ${ASYMPTOTE_NSI_CONFIGURATION_DIR}/build-asy-installer.ps1
+)
+
+set(ASY_PRE_NSIS_COMPONENT_NAME asy-pre-nsis)
+set(ASY_NSIS_INSTALL_ARGUMENT
+ COMPONENT ${ASY_PRE_NSIS_COMPONENT_NAME}
+ DESTINATION ${ASY_INSTALL_DIRECTORY}
+)
+
+set(ASY_NSIS_TARGET_EXAMPLES_INSTALL_ARGUMENT
+ COMPONENT ${ASY_PRE_NSIS_COMPONENT_NAME}
+ DESTINATION ${ASY_INSTALL_DIRECTORY}/examples
+)
+
+
+set(ASY_NSIS_INSTALL_RESOURCES_ARGUMENT
+ COMPONENT ${ASY_PRE_NSIS_COMPONENT_NAME}
+ DESTINATION .
+)
+
+# <build-root>/asy.exe -> <install-root>/asy.exe
+install(TARGETS asy
+ RUNTIME_DEPENDENCIES
+ PRE_EXCLUDE_REGEXES "api-ms-" "ext-ms-"
+ POST_EXCLUDE_REGEXES ".*system32/.*\\.dll"
+ ${ASY_NSIS_INSTALL_ARGUMENT}
+)
+
+# <build-root>/base/*, <build-root>/examples -> <install-root>/
+install(
+ DIRECTORY ${ASY_BUILD_BASE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/examples
+ ${ASY_NSIS_INSTALL_ARGUMENT}
+)
+
+# extra doc files
+install(
+ FILES
+ ${ASY_DOC_DIR}/latexusage.tex
+ ${ASY_DOC_DIR}/externalprc.tex
+ ${ASY_NSIS_TARGET_EXAMPLES_INSTALL_ARGUMENT}
+)
+
+install(
+ DIRECTORY ${ASY_DOC_DIR}/
+ ${ASY_NSIS_TARGET_EXAMPLES_INSTALL_ARGUMENT}
+ FILES_MATCHING
+ PATTERN "*.asy"
+ PATTERN "*.csv"
+ PATTERN "*.dat"
+)
+
+# resources files for installer + nsi files
+
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
+ ${ASY_WIN_RESOURCE_DIR}/asy.ico
+ ${ASY_WIN_RESOURCE_DIR}/asymptote.nsi
+ ${ASYMPTOTE_NSI_CONFIGURATION_DIR}/AsymptoteInstallInfo.nsi
+ ${ASYMPTOTE_NSI_CONFIGURATION_DIR}/build-asy-installer.ps1
+ ${ASY_NSIS_INSTALL_RESOURCES_ARGUMENT}
+)
+
+install(
+ DIRECTORY ${ASY_WIN_RESOURCE_DIR}/
+ ${ASY_NSIS_INSTALL_RESOURCES_ARGUMENT}
+ FILES_MATCHING PATTERN "*.nsh"
+)
+
+# if a component is not buildable
+macro(action_if_component_not_buildable message)
+ message(WARNING "Please ensure this issue is resolved before installing. Message: ${message}")
+ if (ALLOW_PARTIAL_INSTALLATION)
+ install(CODE "message(WARNING \"${message}\")" COMPONENT ${ASY_PRE_NSIS_COMPONENT_NAME})
+ else()
+ install(CODE "message(FATAL_ERROR \"${message}\")" COMPONENT ${ASY_PRE_NSIS_COMPONENT_NAME})
+ endif()
+endmacro()
+
+# unfortuantely, we have to first call the "docgen" target manually
+# this can also be called from asy-pre-nsis-targets, which includes asy-with-basefiles alongside docgen.
+# this is a limitation of cmake currently (https://discourse.cmake.org/t/install-file-with-custom-target/2984/2)
+
+if (ASY_TEX_BUILD_ROOT)
+ add_dependencies(asy-pre-nsis-targets docgen)
+endif()
+
+macro(install_from_external_documentation_dir docfile_name)
+ set(DOCFILE_LOCATION ${EXTERNAL_DOCUMENTATION_DIR}/${docfile_name})
+ message(STATUS "Using external documentation file at ${DOCFILE_LOCATION}")
+
+ if (NOT EXISTS ${DOCFILE_LOCATION})
+ message(WARNING "${DOCFILE_LOCATION} not found.
+Please ensure this file exists before running \"cmake --install\"."
+ )
+ endif()
+
+ install(FILES ${DOCFILE_LOCATION} ${ASY_NSIS_INSTALL_ARGUMENT})
+endmacro()
+
+
+if (ASY_TEX_BUILD_ROOT) # basic docgen possible
+ install(
+ FILES ${BASE_ASYMPTOTE_DOC_AND_TEX_FILES}
+ ${ASY_NSIS_INSTALL_ARGUMENT}
+ )
+elseif(EXTERNAL_DOCUMENTATION_DIR)
+ set(
+ ASY_DOC_FILES_TO_COPY
+ asymptote.sty
+ asy-latex.pdf
+ CAD.pdf
+ TeXShopAndAsymptote.pdf
+ asyRefCard.pdf
+ )
+ foreach(ASY_DOC_FILE ${ASY_DOC_FILES_TO_COPY})
+ install_from_external_documentation_dir(${ASY_DOC_FILE})
+ endforeach()
+else()
+ action_if_component_not_buildable("base asymptote documentation cannot be found and is not buildable")
+endif()
+
+
+# asymptote.pdf
+if(ENABLE_ASYMPTOTE_PDF_DOCGEN)
+ message(STATUS "Using asymptote.pdf from ${ASY_TEX_BUILD_ROOT}/asymptote.pdf")
+ install(
+ FILES ${ASY_TEX_BUILD_ROOT}/asymptote.pdf
+ ${ASY_NSIS_INSTALL_ARGUMENT}
+ )
+elseif (EXTERNAL_DOCUMENTATION_DIR)
+ install_from_external_documentation_dir(asymptote.pdf)
+else()
+ action_if_component_not_buildable("asymptote.pdf cannot be found and is not buildable")
+endif()
+
+# README files
+install(
+ FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE
+ ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.LESSER
+ ${CMAKE_CURRENT_SOURCE_DIR}/README
+ ${ASY_WIN_RESOURCE_DIR}/asy.ico
+ ${ASY_NSIS_INSTALL_ARGUMENT}
+)