From ac23ad182315eaff345b37742fc6c6dbeb74c5fe Mon Sep 17 00:00:00 2001 From: Freddie Akeroyd Date: Wed, 16 Dec 2015 11:31:52 +0000 Subject: [PATCH 1/4] First pass windows installer --- .gitattributes | 1 + CMakeLists.txt | 28 ++++++++++++++++++++++++++++ CPackOptions.cmake.in | 6 +++--- InstallerBits/nsis_install.nsh | 9 +++++++++ InstallerBits/nsis_uninstall.nsh | 9 +++++++++ 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 InstallerBits/nsis_install.nsh create mode 100644 InstallerBits/nsis_uninstall.nsh diff --git a/.gitattributes b/.gitattributes index dafb2fec..3a1e636a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,6 +15,7 @@ *.txt text *.in text *.rst text +*.nsh text # Declare files that will always have CRLF line endings on checkout. *.sln text eol=crlf diff --git a/CMakeLists.txt b/CMakeLists.txt index c4da5bf9..715059be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -267,3 +267,31 @@ endif() #add_subdirectory (third_party) #add_subdirectory (windows) #add_subdirectory (Windows_extra) + +# +# set CPack packaging options +# + +# needed for windows NSIS installer +file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_NATIVE) +file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} PROJECT_BINARY_DIR_NATIVE) +string(REPLACE "\\" "\\\\" PROJECT_SOURCE_DIR_NATIVE_D ${PROJECT_SOURCE_DIR_NATIVE}) +string(REPLACE "\\" "\\\\" PROJECT_BINARY_DIR_NATIVE_D ${PROJECT_BINARY_DIR_NATIVE}) + +configure_file("${PROJECT_SOURCE_DIR}/CPackOptions.cmake.in" "${PROJECT_BINARY_DIR}/CPackOptions.cmake" @ONLY) +set (CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CPackOptions.cmake") +set (CPACK_GENERATOR TGZ) # not use ZIP on UNIX as problem with symlinks +set (CPACK_SOURCE_GENERATOR TGZ) # not use ZIP on UNIX as problem with symlinks +if(WIN32) + set (CPACK_GENERATOR ${CPACK_GENERATOR};ZIP;NSIS) + set (CPACK_SOURCE_GENERATOR ${CPACK_SOURCE_GENERATOR};ZIP) +elseif(APPLE) + set (CPACK_GENERATOR ${CPACK_GENERATOR};PackageMaker) +elseif(CYGWIN) + set (CPACK_GENERATOR ${CPACK_GENERATOR};CygwinBinary) + set (CPACK_SOURCE_GENERATOR ${CPACK_SOURCE_GENERATOR};CygwinSource) +elseif(UNIX) + set (CPACK_GENERATOR ${CPACK_GENERATOR};DEB;RPM) +endif() +# Include of CPack must always be last +include(CPack) diff --git a/CPackOptions.cmake.in b/CPackOptions.cmake.in index b862a8e9..f54e94fa 100644 --- a/CPackOptions.cmake.in +++ b/CPackOptions.cmake.in @@ -53,7 +53,7 @@ set (CPACK_PACKAGE_FILE_NAME "nexus-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKA set (CPACK_SOURCE_PACKAGE_FILE_NAME "nexus-source-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set (CPACK_PACKAGE_INSTALL_DIRECTORY "NeXus Data Format") -set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/InstallerBits/Licences/COPYING.txt") +set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/InstallerBits/Licences/COPYING.rtf") set (CPACK_RESOURCE_FILE_README "@PROJECT_SOURCE_DIR@/cmake_include/nexus_description.txt") set (CPACK_RESOURCE_FILE_WELCOME "@PROJECT_SOURCE_DIR@/cmake_include/WELCOME.txt") set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/InstallerBits/nexus.ico") @@ -129,8 +129,8 @@ if (${CPACK_GENERATOR} STREQUAL "NSIS") set(CPACK_NSIS_URL_INFO_ABOUT "http://www.nexusformat.org/") set(CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}") set(CPACK_NSIS_MODIFY_PATH OFF) - set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "!include '@PROJECT_SOURCE_DIR_NATIVE@\nsis_install.nsh'") - set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "!include '@PROJECT_SOURCE_DIR_NATIVE@\nsis_uninstall.nsh'") +## set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "!include '@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nsis_install.nsh'") +## set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "!include '@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nsis_uninstall.nsh'") # set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") set(CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nexus.ico") set(CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nexus.ico") diff --git a/InstallerBits/nsis_install.nsh b/InstallerBits/nsis_install.nsh new file mode 100644 index 00000000..586eb219 --- /dev/null +++ b/InstallerBits/nsis_install.nsh @@ -0,0 +1,9 @@ +;;;;;;;;; !include "EnvVarUpdate.nsh" +${EnvVarUpdate} $0 "NEXUSDIR" "A" "HKLM" "$INSTDIR" +${EnvVarUpdate} $0 "NEXUSDIR${NEXUSDIRENVSUFFIX}" "A" "HKLM" "$INSTDIR" +${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" +${EnvVarUpdate} $0 "LIB" "A" "HKLM" "$INSTDIR\lib" +${EnvVarUpdate} $0 "INCLUDE" "A" "HKLM" "$INSTDIR\include" +${EnvVarUpdate} $0 "PYTHONPATH" "A" "HKLM" "$INSTDIR\python" +${EnvVarUpdate} $0 "PYTHONPATH" "A" "HKLM" "$INSTDIR\bin" +${EnvVarUpdate} $0 "CLASSPATH" "A" "HKLM" "$INSTDIR\java\jnexus.jar" \ No newline at end of file diff --git a/InstallerBits/nsis_uninstall.nsh b/InstallerBits/nsis_uninstall.nsh new file mode 100644 index 00000000..8da92bed --- /dev/null +++ b/InstallerBits/nsis_uninstall.nsh @@ -0,0 +1,9 @@ +;;;;;;;; !include "EnvVarUpdate.nsh" +${un.EnvVarUpdate} $0 "NEXUSDIR" "R" "HKLM" "$INSTDIR" +${un.EnvVarUpdate} $0 "NEXUSDIR${NEXUSDIRENVSUFFIX}" "R" "HKLM" "$INSTDIR" +${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "$INSTDIR\bin" +${un.EnvVarUpdate} $0 "LIB" "R" "HKLM" "$INSTDIR\lib" +${un.EnvVarUpdate} $0 "INCLUDE" "R" "HKLM" "$INSTDIR\include" +${un.EnvVarUpdate} $0 "PYTHONPATH" "R" "HKLM" "$INSTDIR\python" +${un.EnvVarUpdate} $0 "PYTHONPATH" "R" "HKLM" "$INSTDIR\bin" +${un.EnvVarUpdate} $0 "CLASSPATH" "R" "HKLM" "$INSTDIR\java\jnexus.jar" \ No newline at end of file From 15c5599152dcb006ccef4633c1932d73d06632c0 Mon Sep 17 00:00:00 2001 From: Freddie Akeroyd Date: Wed, 16 Dec 2015 18:34:42 +0000 Subject: [PATCH 2/4] Check for 64bit arch --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 715059be..3fbc2acb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -273,6 +273,14 @@ endif() # # needed for windows NSIS installer +if (CMAKE_SIZEOF_VOID_P MATCHES "8") + set(ARCH64 1) + set(ARCHSUFFIX "64") +else() + set(ARCH64 0) + set(ARCHSUFFIX "") +endif() + file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_NATIVE) file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} PROJECT_BINARY_DIR_NATIVE) string(REPLACE "\\" "\\\\" PROJECT_SOURCE_DIR_NATIVE_D ${PROJECT_SOURCE_DIR_NATIVE}) From 5c7c55ecd8a7f57b35a10b13e1f5d82ca843e727 Mon Sep 17 00:00:00 2001 From: Freddie Akeroyd Date: Wed, 16 Dec 2015 19:20:29 +0000 Subject: [PATCH 3/4] Package HDF DLLs --- CMakeLists.txt | 8 ++++++++ CPackOptions.cmake.in | 12 +++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fbc2acb..8f5cf73e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -281,6 +281,14 @@ else() set(ARCHSUFFIX "") endif() +if(WIN32) + file(GLOB HDF4_DLLS "${HDF4_LIBRARY_DIRS}/../bin/*.dll") + # for some reason HDF5_LIBRARY_DIRS is blank + file(GLOB HDF5_DLLS "${HDF5_INCLUDE_DIRS}/../bin/*.dll") + file(GLOB_RECURSE MXML_DLLS "${MXML_LIBRARY_DIRS}/*.dll") + install(FILES ${HDF4_DLLS} ${HDF5_DLLS} ${MXML_DLLS} DESTINATION bin COMPONENT Runtime) +endif() + file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_NATIVE) file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} PROJECT_BINARY_DIR_NATIVE) string(REPLACE "\\" "\\\\" PROJECT_SOURCE_DIR_NATIVE_D ${PROJECT_SOURCE_DIR_NATIVE}) diff --git a/CPackOptions.cmake.in b/CPackOptions.cmake.in index f54e94fa..55f24910 100644 --- a/CPackOptions.cmake.in +++ b/CPackOptions.cmake.in @@ -42,9 +42,9 @@ endif() set (CPACK_PACKAGE_NAME "NeXus") set (CPACK_PACKAGE_VENDOR "NeXus International Advisory Committee") -set (CPACK_PACKAGE_VERSION_MAJOR "4") -set (CPACK_PACKAGE_VERSION_MINOR "3") -set (CPACK_PACKAGE_VERSION_PATCH "0") +set (CPACK_PACKAGE_VERSION_MAJOR "@NEXUS_VERSION_MAJOR@") +set (CPACK_PACKAGE_VERSION_MINOR "@NEXUS_VERSION_MINOR@") +set (CPACK_PACKAGE_VERSION_PATCH "@NEXUS_VERSION_PATCH@") set (CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set (CPACK_PACKAGE_CONTACT "NeXus Developers ") set (CPACK_PACKAGE_DESCRIPTION_FILE "@PROJECT_SOURCE_DIR@/cmake_include/nexus_description.txt") @@ -135,7 +135,8 @@ if (${CPACK_GENERATOR} STREQUAL "NSIS") set(CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nexus.ico") set(CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nexus.ico") set(CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR_NATIVE_D@\\InstallerBits\\nexus.ico") - set(CPACK_NSIS_MENU_LINKS "http://www.nexusformat.org/" "NeXus Web Site" "bin\\nxvalidate.bat" "NXvalidate") +# set(CPACK_NSIS_MENU_LINKS "http://www.nexusformat.org/" "NeXus Web Site" "bin\\nxvalidate.bat" "NXvalidate") + set(CPACK_NSIS_MENU_LINKS "http://www.nexusformat.org/" "NeXus Web Site") if (@ARCH64@) set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") set(CPACK_NSIS_DEFINES "!define NEXUSDIRENVSUFFIX 64") @@ -158,7 +159,8 @@ if(WIN32) else() set(NXVALIDATE nxvalidate) endif() -set(CPACK_CREATE_DESKTOP_LINKS "nxbrowse" ${NXVALIDATE}) +#set(CPACK_CREATE_DESKTOP_LINKS "nxbrowse" "nxbrowse") + set(CPACK_PACKAGE_EXECUTABLES "nxbrowse" "NXbrowse") #cpack_add_component(Runtime From 7144746d1ba0e1867d9c6f37e66273281df32789 Mon Sep 17 00:00:00 2001 From: Freddie Akeroyd Date: Wed, 16 Dec 2015 19:35:38 +0000 Subject: [PATCH 4/4] Package system DLLs --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f5cf73e..f5b8f660 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,7 +107,7 @@ endif() #----------------------------------------------------------------------------- include(Utilities) include(CompilerChecks) - +include(InstallRequiredSystemLibraries) #----------------------------------------------------------------------------- # check for package config @@ -287,6 +287,7 @@ if(WIN32) file(GLOB HDF5_DLLS "${HDF5_INCLUDE_DIRS}/../bin/*.dll") file(GLOB_RECURSE MXML_DLLS "${MXML_LIBRARY_DIRS}/*.dll") install(FILES ${HDF4_DLLS} ${HDF5_DLLS} ${MXML_DLLS} DESTINATION bin COMPONENT Runtime) + INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT Runtime) endif() file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_NATIVE)