diff --git a/CMakeLists.txt b/CMakeLists.txt
index d9611d3fd..c56518b63 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -169,10 +169,14 @@ ENDIF(MSVC)
ADD_CUSTOM_TARGET(${_UNINST_TGT_NAME} "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" )
IF(OPTION_PACKAGING)
+ INCLUDE(cmake/packagemaker.cmake)
IF(MSVC)
INCLUDE(cmake/packagemaker-nsis.cmake)
ENDIF(MSVC)
+ IF(APPLE)
+ INCLUDE(cmake/packagemaker-dmg.cmake)
+ ENDIF(APPLE)
ELSE(OPTION_PACKAGING)
-# Configure CPack.
- INCLUDE(cmake/packagemaker.cmake)
+ # Configure CPack.
+ INCLUDE(CPack)
ENDIF(OPTION_PACKAGING)
\ No newline at end of file
diff --git a/cmake/packagemaker-dmg.cmake b/cmake/packagemaker-dmg.cmake
new file mode 100644
index 000000000..794332c26
--- /dev/null
+++ b/cmake/packagemaker-dmg.cmake
@@ -0,0 +1,66 @@
+#==============================================================================
+#
+# file : packagemaker-dmg.cmake
+# copyright : (C) 2020 Joe Thompson
+# email : beaglejoe@users.sourceforge.net
+# web : www.speed-dreams.org
+# version : $Id:$
+#
+#==============================================================================
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+#==============================================================================
+
+IF((APPLE) AND ("${CMAKE_INSTALL_PREFIX}" MATCHES "\\.app$"))
+
+MESSAGE(STATUS "TODO - need to clean this up.")
+ #ADD_CUSTOM_TARGET(package_base DEPENDS install)
+ # can't depend on built-in target install, so we ADD_CUSTOM_COMMAND
+ # below to make sure install is done
+ ADD_CUSTOM_TARGET(packing_install)
+
+#[[
+ ADD_CUSTOM_TARGET(package_all DEPENDS package_base
+ package_full)
+
+ ADD_CUSTOM_TARGET(package_base DEPENDS packing_install)
+ ADD_CUSTOM_TARGET(package_full DEPENDS packing_install)
+ ]]
+
+ ADD_CUSTOM_TARGET(package_full)
+
+
+ ADD_CUSTOM_COMMAND(TARGET packing_install
+ COMMAND "${CMAKE_COMMAND}" --build . --target install --config $
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Building install...")
+#[[
+ ADD_CUSTOM_COMMAND(TARGET package_base
+ COMMAND ${CMAKE_CPACK_COMMAND} -G "DragNDrop"--config ../CPackDMGBaseConfig.cmake
+ WORKING_DIRECTORY packaging
+ COMMENT "Building base package...")
+]]
+
+# COMMAND ${CMAKE_CPACK_COMMAND} -G "DragNDrop" --config ../CPackDMGFullConfig.cmake
+ ADD_CUSTOM_COMMAND(TARGET package_full
+ COMMAND "${CMAKE_COMMAND}" -P packagefulldmg.cmake
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Building full package...")
+
+
+
+ELSE((APPLE) AND ("${CMAKE_INSTALL_PREFIX}" MATCHES "\\.app$"))
+ MESSAGE(WARNING "Custom DMG creation requires *.app")
+ENDIF((APPLE) AND ("${CMAKE_INSTALL_PREFIX}" MATCHES "\\.app$"))
\ No newline at end of file
diff --git a/cmake/packagemaker.cmake b/cmake/packagemaker.cmake
index 5456d5a27..c10cdcc03 100644
--- a/cmake/packagemaker.cmake
+++ b/cmake/packagemaker.cmake
@@ -1,6 +1,14 @@
##########################################################################################
# Settings that are common to all target systems.
+IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+ SET(CPACK_SYSTEM_NAME "win32")
+ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ SET(CPACK_SYSTEM_NAME "macos")
+ELSE()
+ SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
+ENDIF()
+
SET(INTERNAL_NAME "speed-dreams")
SET(CPACK_PACKAGE_NAME "Speed Dreams")
@@ -88,7 +96,7 @@ IF(WIN32)
SET(PACKAGERS_SOURCE "ZIP" CACHE STRING "CPack source package generators to use (separated with ';', among TGZ, TBZ2, TZ, ZIP)")
MARK_AS_ADVANCED(PACKAGERS_SOURCE)
- SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_PREFIX}-${CPACK_PACKAGE_VERSION}-win32-setup")
+ SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_PREFIX}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-setup")
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_NSIS_DISPLAY_NAME}")
@@ -152,6 +160,20 @@ IF(APPLE)
SET(CPACK_INSTALLED_DIRECTORIES "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX};${CMAKE_INSTALL_PREFIX}")
SET(CPACK_INSTALL_CMAKE_PROJECTS "")
SET(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/packaging/OSX/DS_Store-full")
+
+ # TODO use ${CPACK_PACKAGE_NAME} ${VERSION}" ??
+ SET(DMG_VOL_NAME "Speed Dreams ${VERSION}")
+ SET(CPACK_DMG_VOLUME_NAME "${DMG_VOL_NAME}")
+
+ SET(READ_WRITE_DMG_NAME "${INTERNAL_NAME}-${VERSION}-r${SVN_REV}-${CPACK_SYSTEM_NAME}-rw.dmg")
+ SET(READ_ONLY_DMG_NAME "${INTERNAL_NAME}-${VERSION}-r${SVN_REV}-${CPACK_SYSTEM_NAME}.dmg")
+ SET(SD_BUNDLE_NAME "${CMAKE_INSTALL_PREFIX}")
+
+ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/packaging/OSX/packagefulldmg.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/packagefulldmg.cmake" @ONLY)
+
+ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/packaging/OSX/findersettings.scpt.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/findersettings.scpt" @ONLY)
ENDIF(APPLE)
@@ -160,4 +182,4 @@ ENDIF(APPLE)
SET(CPACK_GENERATOR ${PACKAGERS_BINARY})
SET(CPACK_SOURCE_GENERATOR ${PACKAGERS_SOURCE})
-INCLUDE(CPack)
+#INCLUDE(CPack)
diff --git a/packaging/OSX/findersettings.scpt.in b/packaging/OSX/findersettings.scpt.in
new file mode 100644
index 000000000..93830eeb5
--- /dev/null
+++ b/packaging/OSX/findersettings.scpt.in
@@ -0,0 +1,34 @@
+#==============================================================================
+#
+# Generated AppleScript file for setting the background image,
+# 'Finder' window options, and position of icons
+#
+#==============================================================================
+
+tell application "Finder"
+ tell disk "@DMG_VOL_NAME@"
+ open
+ set current view of container window to icon view
+ set theViewOptions to the icon view options of container window
+ set background picture of theViewOptions to file ".installer-mac-bg-22.png"
+ set arrangement of theViewOptions to not arranged
+ set icon size of theViewOptions to 128
+ delay 5
+ close
+
+ open
+ update without registering applications
+ tell container window
+ set sidebar width to 0
+ set statusbar visible to false
+ set toolbar visible to false
+ set the bounds to {400, 200, 1120, 665}
+ set position of item "@SD_BUNDLE_NAME@" to {229, 292}
+ set position of item "Applications" to {458, 292}
+ end tell
+ update without registering applications
+ delay 5
+ close
+ end tell
+ delay 1
+end tell
\ No newline at end of file
diff --git a/packaging/OSX/packagefulldmg.cmake.in b/packaging/OSX/packagefulldmg.cmake.in
new file mode 100644
index 000000000..2d4a4d272
--- /dev/null
+++ b/packaging/OSX/packagefulldmg.cmake.in
@@ -0,0 +1,64 @@
+#==============================================================================
+#
+# Generated Script file for creating the DMG file
+# Apple only
+#
+#==============================================================================
+
+set(_result )
+message(STATUS "Creating read/write dmg...")
+execute_process(COMMAND hdiutil create "./@READ_WRITE_DMG_NAME@" -volname "@DMG_VOL_NAME@" -size 4g -fs HFS+
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of hdiutil create = ${_result}")
+
+message(STATUS "Attaching read/write dmg...")
+execute_process(COMMAND hdiutil attach "./@READ_WRITE_DMG_NAME@" -nobrowse
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of hdiutil attach = ${_result}")
+
+
+# Copy the background image (renaming NOTE the leading . in target name)
+message(STATUS "Copying installer-mac-bg-22.png...")
+execute_process(COMMAND cp "@CMAKE_SOURCE_DIR@/packaging/OSX/installer-mac-bg-22.png" "/Volumes/@DMG_VOL_NAME@/.installer-mac-bg-22.png"
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of copying installer-mac-bg-22.png = ${_result}")
+
+# Create a link to Applications folder
+message(STATUS "Creating link to Applications...")
+execute_process(COMMAND ln -s /Applications "/Volumes/@DMG_VOL_NAME@/Applications"
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of creating link to Applications = ${_result}")
+
+# Copy the whole .app folder recursively
+message(STATUS "Copying the @SD_BUNDLE_NAME@ folder...")
+execute_process(COMMAND cp -r "@SD_BUNDLE_NAME@/" "/Volumes/@DMG_VOL_NAME@/@SD_BUNDLE_NAME@"
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of copying the @SD_BUNDLE_NAME@ folder = ${_result}")
+
+# run the generated 'Finder' script
+message(STATUS "Running the generated 'Finder' script...")
+execute_process(COMMAND osascript findersettings.scpt
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of running the generated 'Finder' script = ${_result}")
+
+
+message(STATUS "Detaching read/write dmg...")
+execute_process(COMMAND hdiutil detach "/Volumes/@DMG_VOL_NAME@/"
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of hdiutil detach = ${_result}")
+
+
+# create the Read only version
+message(STATUS "converting read/write dmg to read-only...")
+execute_process(COMMAND hdiutil convert "./@READ_WRITE_DMG_NAME@" -format UDZO -imagekey zlib-level=9 -o "./@READ_ONLY_DMG_NAME@"
+ RESULT_VARIABLE _result
+ COMMAND_ECHO STDOUT )
+message(STATUS "Result of hdiutil convert = ${_result}")
+