From dd0e77fc0500465b48d5c25e1beee685961cf8a4 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Mon, 12 Jan 2015 12:25:56 +0100
Subject: [PATCH] New CMake option OGS_DOWNLOAD_ADDITIONAL_CONTENT.

- New function CMake DownloadAdditionalFilesForPackaging
  (scripts/packaging/PackagingMacros.cmake)

This is used for adding additional tools (OGSFileConverter) or documentation
(e.g. the user manual pdf) to the redistributable package.
---
 Applications/CLI/CMakeLists.txt               |  6 +--
 CMakeLists.txt                                |  4 +-
 scripts/cmake/packaging/Pack.cmake            | 47 ++++++++++++++-----
 scripts/cmake/packaging/PackagingMacros.cmake | 45 ++++++++++++++++++
 4 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/Applications/CLI/CMakeLists.txt b/Applications/CLI/CMakeLists.txt
index 0ea954cce5a..81f5cbefcef 100644
--- a/Applications/CLI/CMakeLists.txt
+++ b/Applications/CLI/CMakeLists.txt
@@ -23,11 +23,7 @@ INCLUDE(Tests.cmake)
 ####################
 ### Installation ###
 ####################
-IF(APPLE AND OGS_BUILD_GUI)
-	INSTALL (TARGETS ogs RUNTIME DESTINATION . COMPONENT ogs_cli)
-ELSE()
-	INSTALL (TARGETS ogs RUNTIME DESTINATION bin COMPONENT ogs_cli)
-ENDIF()
+INSTALL (TARGETS ogs RUNTIME DESTINATION bin COMPONENT ogs_cli)
 
 set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} "ogs" "OGS Simulator")
 cpack_add_component(ogs_cli
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1fee3e74968..933c6da1fc5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -92,9 +92,7 @@ ENDIF (OGS_CMAKE_DEBUG)
 OPTION(OGS_COVERAGE "Enables code coverage measurements with gcov/lcov." OFF)
 
 # Packaging
-IF(WIN32)
-	OPTION(OGS_PACKAGING_NSIS "Do you want to package with NSIS?")
-ENDIF()
+OPTION(OGS_DOWNLOAD_ADDITIONAL_CONTENT "Should addional content such as manuals be downloaded and packaged?" OFF)
 INCLUDE(scripts/cmake/packaging/Pack.cmake)
 
 ######################
diff --git a/scripts/cmake/packaging/Pack.cmake b/scripts/cmake/packaging/Pack.cmake
index ef21ffedef2..4fd76cfbe40 100644
--- a/scripts/cmake/packaging/Pack.cmake
+++ b/scripts/cmake/packaging/Pack.cmake
@@ -1,3 +1,5 @@
+INCLUDE(packaging/PackagingMacros)
+
 #### Packaging setup ####
 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OGS-6 THM/C Simulator")
 SET(CPACK_PACKAGE_VENDOR "OpenGeoSys Community (http://www.opengeosys.org)")
@@ -28,19 +30,32 @@ IF(APPLE)
 	INCLUDE (packaging/PackagingMac)
 ENDIF()
 
-# Additional binaries, i.e. OGS-5 file converter
-# Can be given as a list, paths must be relative to CMAKE_BINARY_DIR!
-IF(OGS_PACKAGE_ADDITIONAL_BINARIES)
-	FOREACH(ADDITIONAL_BINARY ${OGS_PACKAGE_ADDITIONAL_BINARIES})
-		GET_FILENAME_COMPONENT(ADDITIONAL_BINARY_NAME ${ADDITIONAL_BINARY} NAME)
-		MESSAGE(STATUS "Packaging additional binary: ${ADDITIONAL_BINARY_NAME}")
-		IF(APPLE AND OGS_BUILD_GUI)
-			SET(INSTALL_LOCATION DataExplorer.app/Contents/MacOS)
-		ELSE()
-			SET(INSTALL_LOCATION bin)
-		ENDIF()
-		INSTALL (PROGRAMS ${CMAKE_BINARY_DIR}/${ADDITIONAL_BINARY} DESTINATION ${INSTALL_LOCATION} COMPONENT ogs_extras)
-	ENDFOREACH()
+# Download additional content
+IF(OGS_DOWNLOAD_ADDITIONAL_CONTENT)
+	DownloadAdditionalFilesForPackaging(
+		URLS http://docs.opengeosys.org/assets/releases/head/docs/DataExplorer-Manual.pdf
+		     http://docs.opengeosys.org/assets/releases/head/docs/User_Manual.pdf
+		     http://docs.opengeosys.org/assets/releases/head/docs/Theory_Manual.pdf
+		DESTINATION docs
+		PACKAGE_GROUP ogs_docs
+	)
+
+	IF(WIN32)
+		DownloadAdditionalFilesForPackaging(
+			URLS http://docs.opengeosys.org/assets/releases/head/win/OGSFileConverter.exe
+			DESTINATION bin
+			EXECUTABLE TRUE
+			PACKAGE_GROUP ogs_converter
+		)
+	ENDIF()
+	IF(APPLE)
+		DownloadAdditionalFilesForPackaging(
+			URLS http://docs.opengeosys.org/assets/releases/head/mac/OGSFileConverter
+			DESTINATION bin
+			EXECUTABLE TRUE
+			PACKAGE_GROUP ogs_converter
+		)
+	ENDIF()
 ENDIF()
 
 INCLUDE (CPack)
@@ -63,3 +78,9 @@ cpack_add_component(ogs_extras
 	DESCRIPTION "Miscellaneous tools."
 	GROUP Utilities
 )
+
+cpack_add_component(ogs_docs
+	DISPLAY_NAME "OpenGeosys documentation"
+	DESCRIPTION "PDF documentation."
+	GROUP Utilities
+)
diff --git a/scripts/cmake/packaging/PackagingMacros.cmake b/scripts/cmake/packaging/PackagingMacros.cmake
index 0f089b2e47e..ff01c899e59 100644
--- a/scripts/cmake/packaging/PackagingMacros.cmake
+++ b/scripts/cmake/packaging/PackagingMacros.cmake
@@ -17,3 +17,48 @@ macro(ConfigureMacOSXBundle TARGET_NAME ICON_FILE_PATH)
 	SET_SOURCE_FILES_PROPERTIES(${ICON_FILE_PATH} PROPERTIES
 		MACOSX_PACKAGE_LOCATION Resources)
 endmacro()
+
+#
+# DownloadAdditionalFilesForPackaging
+# -------
+#
+# Downloads files (into build/AdditionalContent) and packages them. Order of arguments can be arbitrary.
+#
+# AddTest(
+#   URLS <multiple URLs>
+#   DESTINATION <install directory>
+#   PACKAGE_GROUP <name of the package to add these files to> # optional, defaults to ogs_extras
+#   EXECUTABLE <TRUE or FALSE, are these files executables?>  # optional, defaults to FALSE
+# )
+function(DownloadAdditionalFilesForPackaging)
+
+	# parse args
+	set(options NONE)
+	set(oneValueArgs DESTINATION EXECUTABLE PACKAGE_GROUP)
+	set(multiValueArgs URLS)
+	cmake_parse_arguments(DownloadAdditionalFilesForPackaging
+		"${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+	# set defaults
+	if(NOT DownloadAdditionalFilesForPackaging_EXECUTABLE)
+		set(DownloadAdditionalFilesForPackaging_EXECUTABLE FALSE)
+	endif()
+	if(NOT DownloadAdditionalFilesForPackaging_PACKAGE_GROUP)
+		set(DownloadAdditionalFilesForPackaging_PACKAGE_GROUP ogs_extras)
+	endif()
+
+	foreach(URL ${DownloadAdditionalFilesForPackaging_URLS})
+		get_filename_component(FILE_NAME ${URL} NAME)
+		get_filename_component(FILE_EXTENSION ${URL} EXT)
+		set(FILE_PATH ${CMAKE_BINARY_DIR}/AdditionalContent/${FILE_NAME})
+		if(NOT EXISTS ${FILE_PATH})
+			file(DOWNLOAD ${URL} ${FILE_PATH} SHOW_PROGRESS)
+		endif()
+		if(EXE)
+			install(PROGRAMS ${FILE_PATH} DESTINATION ${DownloadAdditionalFilesForPackaging_DESTINATION} COMPONENT ${DownloadAdditionalFilesForPackaging_PACKAGE_GROUP})
+		else()
+			install(FILES ${FILE_PATH} DESTINATION ${DownloadAdditionalFilesForPackaging_DESTINATION} COMPONENT ${DownloadAdditionalFilesForPackaging_PACKAGE_GROUP})
+		endif()
+	endforeach()
+
+endfunction()
-- 
GitLab