re-indent some scripts w/cmake_format and beautify_bash

This commit is contained in:
Richard Barber
2020-02-23 20:35:45 -08:00
parent f32602b550
commit 4bd6383c07
3 changed files with 476 additions and 306 deletions

View File

@@ -7,17 +7,22 @@ endif()
# Must stay before the project() command: # Must stay before the project() command:
if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4") if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
set(CMAKE_CXX_COMPILER_ARG1 "-std=c++11" CACHE STRING "C++ version for eclipse" FORCE) set(CMAKE_CXX_COMPILER_ARG1
"-std=c++11"
CACHE STRING "C++ version for eclipse" FORCE)
# Users building with Eclipse should set CMAKE_ECLIPSE_VERSION through the # Users building with Eclipse should set CMAKE_ECLIPSE_VERSION through the
# command line to their current version of Eclipse: # command line to their current version of Eclipse:
#set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE) # set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE)
endif() endif()
project(RawTherapee) project(RawTherapee)
# The default target is Debug: # The default target is Debug:
if(CMAKE_BUILD_TYPE STREQUAL "") if(CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE Debug CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel" FORCE) set(CMAKE_BUILD_TYPE
Debug
CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel"
FORCE)
endif() endif()
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE)
@@ -26,11 +31,15 @@ string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION
message(FATAL_ERROR "Building RawTherapee requires using GCC version 4.9 or higher!") VERSION_LESS "4.9")
message(
FATAL_ERROR
"Building RawTherapee requires using GCC version 4.9 or higher!")
endif() endif()
# We might want to build using the old C++ ABI, even when using a new GCC version: # We might want to build using the old C++ ABI, even when using a new GCC
# version:
if(USE_OLD_CXX_ABI) if(USE_OLD_CXX_ABI)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
endif() endif()
@@ -46,30 +55,50 @@ message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
# Cache name suffix examples: "" = ~/.config/RawTherapee, "5" = ~/.config/RawTherapee-5, "_testing" = ~/.config/RawTherapee_testing # Cache name suffix examples: "" = ~/.config/RawTherapee, "5" =
# Use "" for stable releases and "5-dev" for anything else. # ~/.config/RawTherapee-5, "_testing" = ~/.config/RawTherapee_testing Use "" for
set(CACHE_NAME_SUFFIX "" CACHE STRING "RawTherapee's cache folder suffix") # stable releases and "5-dev" for anything else.
set(CACHE_NAME_SUFFIX
""
CACHE STRING "RawTherapee's cache folder suffix")
# By default we don't use a specific processor target, so PROC_TARGET_NUMBER is set to 0. # By default we don't use a specific processor target, so PROC_TARGET_NUMBER is
# Specify other values to optimize for specific processor architecture as listed in ProcessorTargets.cmake: # set to 0. Specify other values to optimize for specific processor architecture
set(PROC_TARGET_NUMBER 0 CACHE STRING "Selected target processor from the list above (taken from ProcessorTargets.cmake)") # as listed in ProcessorTargets.cmake:
set(PROC_TARGET_NUMBER
0
CACHE
STRING
"Selected target processor from the list above (taken from ProcessorTargets.cmake)"
)
# Set special compilation flags for rtengine which get added to CMAKE_CXX_FLAGS: # Set special compilation flags for rtengine which get added to CMAKE_CXX_FLAGS:
# Some Linux distros build with -O2 instead of -O3. We explicitly enable auto vectorization by using -ftree-vectorize # Some Linux distros build with -O2 instead of -O3. We explicitly enable auto
set(RTENGINE_CXX_FLAGS "-ftree-vectorize" CACHE STRING "Special compilation flags for RTEngine") # vectorization by using -ftree-vectorize
set(RTENGINE_CXX_FLAGS
"-ftree-vectorize"
CACHE STRING "Special compilation flags for RTEngine")
# Loads the ProcessorTargets list: # Loads the ProcessorTargets list:
include(ProcessorTargets.cmake) include(ProcessorTargets.cmake)
set(PROC_LABEL "undefined" CACHE STRING "Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2") set(PROC_LABEL
set(PROC_FLAGS "" CACHE STRING "Target processor related build/link flags") "undefined"
CACHE STRING
"Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2")
set(PROC_FLAGS
""
CACHE STRING "Target processor related build/link flags")
if((NOT (PROC_TARGET_NUMBER EQUAL 0)) AND (NOT (PROC_TARGET_NUMBER EQUAL 2))) if((NOT (PROC_TARGET_NUMBER EQUAL 0)) AND (NOT (PROC_TARGET_NUMBER EQUAL 2)))
set(PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL}) set(PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL})
endif() endif()
if(NOT(PROC_TARGET_NUMBER EQUAL 0)) if(NOT (PROC_TARGET_NUMBER EQUAL 0))
set(PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS}) set(PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS})
endif() endif()
if(UNIX AND PROC_LABEL STREQUAL "undefined") if(UNIX AND PROC_LABEL STREQUAL "undefined")
execute_process(COMMAND uname -p OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE cpu) execute_process(
COMMAND uname -p
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE cpu)
if("${cpu}" STREQUAL "unknown") if("${cpu}" STREQUAL "unknown")
set(PROC_LABEL "${CMAKE_SYSTEM_PROCESSOR}") set(PROC_LABEL "${CMAKE_SYSTEM_PROCESSOR}")
else() else()
@@ -77,7 +106,8 @@ if(UNIX AND PROC_LABEL STREQUAL "undefined")
endif() endif()
endif() endif()
# If PROC_FORCED_LABEL exists, its value is loaded in PROC_LABEL to override the one from ProcessorTargets: # If PROC_FORCED_LABEL exists, its value is loaded in PROC_LABEL to override the
# one from ProcessorTargets:
if(DEFINED PROC_FORCED_LABEL) if(DEFINED PROC_FORCED_LABEL)
set(PROC_LABEL ${PROC_FORCED_LABEL}) set(PROC_LABEL ${PROC_FORCED_LABEL})
endif() endif()
@@ -87,7 +117,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROC_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROC_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROC_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PROC_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PROC_FLAGS}")
# Stop compilation on typos such as std:swap (missing colon will be detected as unused label): # Stop compilation on typos such as std:swap (missing colon will be detected as
# unused label):
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-label") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-label")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=delete-incomplete") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=delete-incomplete")
@@ -106,21 +137,35 @@ endif()
include(FindUnalignedMalloc) include(FindUnalignedMalloc)
if(WIN32) if(WIN32)
# Add additional paths. Look in the MinGW path first, then in the Gtkmm path. # Add additional paths. Look in the MinGW path first, then in the Gtkmm
# If you wish to build some dependent libraries, you have to install them in MinGW to use them: # path. If you wish to build some dependent libraries, you have to install
set(CMAKE_PREFIX_PATH $ENV{MINGW_BASEPATH} $ENV{GTKMM_BASEPATH} CACHE STRING "Additional search paths") # them in MinGW to use them:
set(CMAKE_PREFIX_PATH
$ENV{MINGW_BASEPATH} $ENV{GTKMM_BASEPATH}
CACHE STRING "Additional search paths")
endif() endif()
if(APPLE) if(APPLE)
if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]") if(CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]"
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib -Wl,-headerpad_max_install_names -mtune=generic") OR CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]")
message(STATUS "CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib -Wl,-headerpad_max_install_names -mtune=generic"
)
message(
STATUS
"CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}"
)
endif() endif()
# Set minimum system version # Set minimum system version
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") set(CMAKE_CXX_FLAGS
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}"
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names -mtune=generic") )
set(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names -mtune=generic"
)
endif() endif()
option(USE_EXPERIMENTAL_LANG_VERSIONS "Build with -std=c++0x" OFF) option(USE_EXPERIMENTAL_LANG_VERSIONS "Build with -std=c++0x" OFF)
@@ -132,18 +177,33 @@ option(WITH_SAN "Build with run-time sanitizer" OFF)
option(WITH_PROF "Build with profiling instrumentation" OFF) option(WITH_PROF "Build with profiling instrumentation" OFF)
option(WITH_SYSTEM_KLT "Build using system KLT library." OFF) option(WITH_SYSTEM_KLT "Build using system KLT library." OFF)
option(OPTION_OMP "Build with OpenMP support" ON) option(OPTION_OMP "Build with OpenMP support" ON)
option(STRICT_MUTEX "True (recommended): MyMutex will behave like POSIX Mutex; False: MyMutex will behave like POSIX RecMutex; Note: forced to ON for Debug builds" ON) option(
option(TRACE_MYRWMUTEX "Trace custom R/W Mutex (Debug builds only); redirecting std::out to a file is strongly recommended!" OFF) STRICT_MUTEX
option(AUTO_GDK_FLUSH "Use gdk_flush on all gdk_thread_leave other than the GUI thread; set it ON if you experience X Server warning/errors" OFF) "True (recommended): MyMutex will behave like POSIX Mutex; False: MyMutex will behave like POSIX RecMutex; Note: forced to ON for Debug builds"
#option(TARGET32BIT "Build for 32-bit architecture when ON, otherwise 64-bit. Default is OFF" OFF) ON)
option(
TRACE_MYRWMUTEX
"Trace custom R/W Mutex (Debug builds only); redirecting std::out to a file is strongly recommended!"
OFF)
option(
AUTO_GDK_FLUSH
"Use gdk_flush on all gdk_thread_leave other than the GUI thread; set it ON if you experience X Server warning/errors"
OFF)
# option(TARGET32BIT "Build for 32-bit architecture when ON, otherwise 64-bit.
# Default is OFF" OFF)
option(ENABLE_TCMALLOC "Use the tcmalloc library if available" OFF) option(ENABLE_TCMALLOC "Use the tcmalloc library if available" OFF)
set(TCMALLOC_LIB_DIR "" CACHE PATH "Custom path for the tcmalloc library") set(TCMALLOC_LIB_DIR
""
CACHE PATH "Custom path for the tcmalloc library")
# Set installation directories: # Set installation directories:
if(WIN32 OR APPLE) if(WIN32 OR APPLE)
if(BUILD_BUNDLE) if(BUILD_BUNDLE)
message(STATUS "You have set BUILD_BUNDLE=ON but this is not necessary - the option is forced to ON for Windows and macOS.") message(
STATUS
"You have set BUILD_BUNDLE=ON but this is not necessary - the option is forced to ON for Windows and macOS."
)
endif() endif()
set(BUILD_BUNDLE ON FORCE) set(BUILD_BUNDLE ON FORCE)
endif() endif()
@@ -281,7 +341,7 @@ if(NOT DEFINED APPDATADIR)
endif() endif()
endif() endif()
if (NOT APPLE) if(NOT APPLE)
if(DEFINED LENSFUNDBDIR AND NOT IS_ABSOLUTE "${LENSFUNDBDIR}") if(DEFINED LENSFUNDBDIR AND NOT IS_ABSOLUTE "${LENSFUNDBDIR}")
set(LENSFUNDBDIR "${DATADIR}/${LENSFUNDBDIR}") set(LENSFUNDBDIR "${DATADIR}/${LENSFUNDBDIR}")
endif() endif()
@@ -289,18 +349,27 @@ endif()
if(APPLE) if(APPLE)
if("${CODESIGNID}") if("${CODESIGNID}")
set(CODESIGNID "${CODESIGNID}" CACHE STRING "Codesigning Identity") set(CODESIGNID
"${CODESIGNID}"
CACHE STRING "Codesigning Identity")
endif() endif()
if("${NOTARY}") if("${NOTARY}")
set(NOTARY "${NOTARY}" CACHE STRING "Notarization Identity") set(NOTARY
"${NOTARY}"
CACHE STRING "Notarization Identity")
endif() endif()
if("${LOCAL_PREFIX}") if("${LOCAL_PREFIX}")
set(LOCAL_PREFIX "${LOCAL_PREFIX}" CACHE STRING "macos/gtk parent directory ie /usr or /opt") set(LOCAL_PREFIX
"${LOCAL_PREFIX}"
CACHE STRING "macos/gtk parent directory ie /usr or /opt")
elseif(NOT DEFINED LOCAL_PREFIX) elseif(NOT DEFINED LOCAL_PREFIX)
set(LOCAL_PREFIX "/usr") set(LOCAL_PREFIX "/usr")
endif() endif()
if("${FANCY_DMG}") if("${FANCY_DMG}")
set(FANCY_DMG ON CACHE BOOL "Use the andreyvit/create-dmg script to make a fancy .dmg") set(FANCY_DMG
ON
CACHE BOOL
"Use the andreyvit/create-dmg script to make a fancy .dmg")
endif() endif()
endif() endif()
@@ -308,7 +377,10 @@ endif()
if(NOT BUILD_BUNDLE) if(NOT BUILD_BUNDLE)
foreach(path BINDIR DATADIR LIBDIR DOCDIR CREDITSDIR LICENCEDIR) foreach(path BINDIR DATADIR LIBDIR DOCDIR CREDITSDIR LICENCEDIR)
if(NOT (IS_ABSOLUTE "${${path}}")) if(NOT (IS_ABSOLUTE "${${path}}"))
message(FATAL_ERROR "The ${path} path has to be absolute when using -DBUILD_BUNDLE=OFF") message(
FATAL_ERROR
"The ${path} path has to be absolute when using -DBUILD_BUNDLE=OFF"
)
endif() endif()
endforeach() endforeach()
endif() endif()
@@ -337,11 +409,11 @@ endif()
find_package(PkgConfig) find_package(PkgConfig)
if(WIN32) if(WIN32)
pkg_check_modules (GTK REQUIRED gtk+-3.0>=3.22.24) pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.22.24)
pkg_check_modules (GTKMM REQUIRED gtkmm-3.0>=3.22) pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.22)
else() else()
pkg_check_modules (GTK REQUIRED gtk+-3.0>=3.16) pkg_check_modules(GTK REQUIRED gtk+-3.0>=3.16)
pkg_check_modules (GTKMM REQUIRED gtkmm-3.0>=3.16) pkg_check_modules(GTKMM REQUIRED gtkmm-3.0>=3.16)
endif() endif()
if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7") if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7")
@@ -350,19 +422,26 @@ if(GTK_VERSION VERSION_GREATER "3.24.1" AND GTK_VERSION VERSION_LESS "3.24.7")
else() else()
set(CERTAINTY "likely to") set(CERTAINTY "likely to")
endif() endif()
message(WARNING "\nWarning! You are using GTK+ version " ${GTK_VERSION} " which is " ${CERTAINTY} " have an issue where combobox menu scroll-arrows are missing when a Gtk::ComboBox list does not fit vertically on the screen. As a result, users of your build will not be able to select items in the following comboboxes: Processing Profiles, Film Simulation, and the camera and lens profiles in Profiled Lens Correction.\nIt is recommended that you either downgrade GTK+ to <= 3.24.1 or upgrade to >= 3.24.7.") message(
WARNING
"\nWarning! You are using GTK+ version "
${GTK_VERSION}
" which is "
${CERTAINTY}
" have an issue where combobox menu scroll-arrows are missing when a Gtk::ComboBox list does not fit vertically on the screen. As a result, users of your build will not be able to select items in the following comboboxes: Processing Profiles, Film Simulation, and the camera and lens profiles in Profiled Lens Correction.\nIt is recommended that you either downgrade GTK+ to <= 3.24.1 or upgrade to >= 3.24.7."
)
endif() endif()
pkg_check_modules (GLIB2 REQUIRED glib-2.0>=2.44) pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.44)
pkg_check_modules (GLIBMM REQUIRED glibmm-2.4>=2.44) pkg_check_modules(GLIBMM REQUIRED glibmm-2.4>=2.44)
pkg_check_modules (CAIROMM REQUIRED cairomm-1.0) pkg_check_modules(CAIROMM REQUIRED cairomm-1.0)
pkg_check_modules (GIO REQUIRED gio-2.0>=2.44) pkg_check_modules(GIO REQUIRED gio-2.0>=2.44)
pkg_check_modules (GIOMM REQUIRED giomm-2.4>=2.44) pkg_check_modules(GIOMM REQUIRED giomm-2.4>=2.44)
pkg_check_modules (GTHREAD REQUIRED gthread-2.0>=2.44) pkg_check_modules(GTHREAD REQUIRED gthread-2.0>=2.44)
pkg_check_modules (GOBJECT REQUIRED gobject-2.0>=2.44) pkg_check_modules(GOBJECT REQUIRED gobject-2.0>=2.44)
pkg_check_modules (SIGC REQUIRED sigc++-2.0>=2.3.1) pkg_check_modules(SIGC REQUIRED sigc++-2.0>=2.3.1)
pkg_check_modules (LENSFUN REQUIRED lensfun>=0.2) pkg_check_modules(LENSFUN REQUIRED lensfun>=0.2)
pkg_check_modules (RSVG REQUIRED librsvg-2.0>=2.40) pkg_check_modules(RSVG REQUIRED librsvg-2.0>=2.40)
if(WIN32) if(WIN32)
add_definitions(-DWIN32) add_definitions(-DWIN32)
@@ -389,7 +468,7 @@ if(WITH_SYSTEM_KLT)
endif() endif()
# Check for libcanberra-gtk3 (sound events on Linux): # Check for libcanberra-gtk3 (sound events on Linux):
if(UNIX AND(NOT APPLE)) if(UNIX AND (NOT APPLE))
pkg_check_modules(CANBERRA-GTK REQUIRED libcanberra-gtk3) pkg_check_modules(CANBERRA-GTK REQUIRED libcanberra-gtk3)
endif() endif()
@@ -400,9 +479,12 @@ endif()
if(WITH_LTO) if(WITH_LTO)
# Using LTO with older versions of binutils requires setting extra flags # Using LTO with older versions of binutils requires setting extra flags
set(BINUTILS_VERSION_MININUM "2.29") set(BINUTILS_VERSION_MININUM "2.29")
execute_process(COMMAND ar --version OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED) execute_process(COMMAND ar --version
string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED "${BINUTILS_VERSION_DETECTED}") OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED)
if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS "${BINUTILS_VERSION_MININUM}") string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED
"${BINUTILS_VERSION_DETECTED}")
if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS
"${BINUTILS_VERSION_MININUM}")
if(APPLE) if(APPLE)
if(!CMAKE_AR) if(!CMAKE_AR)
set(CMAKE_AR "/opt/local/bin/ar") set(CMAKE_AR "/opt/local/bin/ar")
@@ -414,7 +496,15 @@ if(WITH_LTO)
set(CMAKE_AR "/usr/bin/gcc-ar") set(CMAKE_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/gcc-ranlib") set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")
endif() endif()
message(STATUS "Binutils version detected as less than " ${BINUTILS_VERSION_MININUM} " - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\"" ${CMAKE_AR} "\"\n CMAKE_RANLIB=\"" ${CMAKE_RANLIB} "\"") message(
STATUS
"Binutils version detected as less than "
${BINUTILS_VERSION_MININUM}
" - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\""
${CMAKE_AR}
"\"\n CMAKE_RANLIB=\""
${CMAKE_RANLIB}
"\"")
endif() endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto")
@@ -425,7 +515,8 @@ endif()
if(WITH_SAN) if(WITH_SAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${WITH_SAN}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${WITH_SAN}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${WITH_SAN}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${WITH_SAN}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}") set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}")
endif() endif()
if(WITH_PROF) if(WITH_PROF)
@@ -434,11 +525,14 @@ if(WITH_PROF)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Wcast-qual -Wno-deprecated-declarations -Wno-unused-result -Wunused-macros") set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Wcast-qual -Wno-deprecated-declarations -Wno-unused-result -Wunused-macros"
)
if(OPTION_OMP) if(OPTION_OMP)
find_package(OpenMP) find_package(OpenMP)
if(OPENMP_FOUND) if(OPENMP_FOUND)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas") set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas")
endif() endif()
endif() endif()
@@ -452,13 +546,14 @@ if(OPENMP_FOUND)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${_f}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${_f})
endforeach() endforeach()
check_c_source_compiles( check_c_source_compiles(
"#include <fftw3.h> "#include <fftw3.h>
int main() int main()
{ {
fftwf_init_threads(); fftwf_init_threads();
fftwf_plan_with_nthreads(1); fftwf_plan_with_nthreads(1);
return 0; return 0;
}" _fftw3f_multithread) }"
_fftw3f_multithread)
if(_fftw3f_multithread) if(_fftw3f_multithread)
add_definitions(-DRT_FFTW3F_OMP) add_definitions(-DRT_FFTW3F_OMP)
else() else()
@@ -476,63 +571,83 @@ get_filename_component(ABS_BINARY_DIR "${CMAKE_BINARY_DIR}" ABSOLUTE)
set(OUT_OF_SOURCE_BUILD TRUE) set(OUT_OF_SOURCE_BUILD TRUE)
if(ABS_SOURCE_DIR STREQUAL ABS_BINARY_DIR) if(ABS_SOURCE_DIR STREQUAL ABS_BINARY_DIR)
set(OUT_OF_SOURCE_BUILD FALSE) set(OUT_OF_SOURCE_BUILD FALSE)
message(WARNING "You are performing an in-source build. This is discouraged. For an explanation and the advantages of out-of-source builds, please refer to http://www.cmake.org/Wiki/CMake_FAQ#What_is_an_.22out-of-source.22_build.3F") message(
WARNING
"You are performing an in-source build. This is discouraged. For an explanation and the advantages of out-of-source builds, please refer to http://www.cmake.org/Wiki/CMake_FAQ#What_is_an_.22out-of-source.22_build.3F"
)
endif() endif()
# Remove files which could require manual work. # Remove files which could require manual work. We will remove this after some
# We will remove this after some time to have a clean build system without file modifications in the source tree again. (?) # time to have a clean build system without file modifications in the source
set(OOSB_FILES "${PROJECT_SOURCE_DIR}/rtdata/rawtherapee.desktop" "${PROJECT_SOURCE_DIR}/rtgui/version.h" "${PROJECT_SOURCE_DIR}/rtgui/config.h" "${PROJECT_SOURCE_DIR}/AboutThisBuild.txt") # tree again. (?)
set(OOSB_FILES
"${PROJECT_SOURCE_DIR}/rtdata/rawtherapee.desktop"
"${PROJECT_SOURCE_DIR}/rtgui/version.h"
"${PROJECT_SOURCE_DIR}/rtgui/config.h"
"${PROJECT_SOURCE_DIR}/AboutThisBuild.txt")
if(OUT_OF_SOURCE_BUILD) if(OUT_OF_SOURCE_BUILD)
foreach(f ${OOSB_FILES}) foreach(f ${OOSB_FILES})
file(REMOVE "${f}") file(REMOVE "${f}")
endforeach() endforeach()
endif() endif()
# Check for generated files in the source tree which should not be there when doing an out-of-source build. # Check for generated files in the source tree which should not be there when
# Without checking for this it might happen that old versions are used for the compilation: # doing an out-of-source build. Without checking for this it might happen that
# old versions are used for the compilation:
if(OUT_OF_SOURCE_BUILD) if(OUT_OF_SOURCE_BUILD)
foreach(f ${OOSB_FILES}) foreach(f ${OOSB_FILES})
if(EXISTS "${f}") if(EXISTS "${f}")
message(SEND_ERROR "Generated \"${f}\" found inside the source tree. Please remove it as it is a relic of the old build system and prevents valid compilation now.") message(
SEND_ERROR
"Generated \"${f}\" found inside the source tree. Please remove it as it is a relic of the old build system and prevents valid compilation now."
)
endif() endif()
endforeach() endforeach()
endif() endif()
### Start generating AboutThisBuild.txt # Start generating AboutThisBuild.txt Set the platform bit-depth:
# Set the platform bit-depth:
if(CMAKE_SIZEOF_VOID_P EQUAL 4) if(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(PROC_BIT_DEPTH 32 bits) set(PROC_BIT_DEPTH 32 bits)
else() else()
set(PROC_BIT_DEPTH 64 bits) set(PROC_BIT_DEPTH 64 bits)
endif() endif()
# Get compiler name and version. # Get compiler name and version. Only CMake > 2.8.7 knows
# Only CMake > 2.8.7 knows CMAKE_*_COMPILER_VERSION # CMAKE_*_COMPILER_VERSION
if(CMAKE_VERSION VERSION_GREATER 2.8.7) if(CMAKE_VERSION VERSION_GREATER 2.8.7)
get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE) get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE)
set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}") set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}")
else() else()
execute_process(COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(
COMMAND gcc -dumpversion
OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
set(COMPILER_INFO "gcc ${GCC_VERSION}") set(COMPILER_INFO "gcc ${GCC_VERSION}")
endif() endif()
# Get C++ and linker flags for rtengine (the GUI's C++ flags may have fewer flags): # Get C++ and linker flags for rtengine (the GUI's C++ flags may have fewer
set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} ${RTENGINE_CXX_FLAGS}") # flags):
set(LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}") set(CXX_FLAGS
"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} ${RTENGINE_CXX_FLAGS}"
)
set(LFLAGS
"${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}"
)
set(ABOUT_COMMAND_WITH_ARGS ${CMAKE_COMMAND} set(ABOUT_COMMAND_WITH_ARGS
-DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR} ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR}
-DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX}
-DPROC_LABEL:STRING="${PROC_LABEL}" -DPROC_LABEL:STRING="${PROC_LABEL}"
-DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}" -DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}"
-DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DGTKMM_VERSION:STRING=${GTKMM_VERSION} -DOPTION_OMP:STRING=${OPTION_OMP}
-DOPTION_OMP:STRING=${OPTION_OMP}
-DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP}
-DLENSFUN_VERSION:STRING=${LENSFUN_VERSION}) -DLENSFUN_VERSION:STRING=${LENSFUN_VERSION})
if(WIN32) if(WIN32)
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows list(
APPEND
ABOUT_COMMAND_WITH_ARGS
-DSYSTEM:STRING=Windows
-DCXX_FLAGS:STRING="${CXX_FLAGS}" -DCXX_FLAGS:STRING="${CXX_FLAGS}"
-DLFLAGS:STRING="${LFLAGS}" -DLFLAGS:STRING="${LFLAGS}"
-DCOMPILER_INFO:STRING="${COMPILER_INFO}" -DCOMPILER_INFO:STRING="${COMPILER_INFO}"
@@ -540,39 +655,45 @@ if(WIN32)
-DBIT_DEPTH:STRING="${CMAKE_SIZEOF_VOID_P}") -DBIT_DEPTH:STRING="${CMAKE_SIZEOF_VOID_P}")
elseif(APPLE) elseif(APPLE)
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple
-DCXX_FLAGS:STRING=${CXX_FLAGS} -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS}
-DLFLAGS:STRING=${LFLAGS} -DCOMPILER_INFO:STRING=${COMPILER_INFO})
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
else() else()
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux
-DCXX_FLAGS:STRING=${CXX_FLAGS} -DCXX_FLAGS:STRING=${CXX_FLAGS} -DLFLAGS:STRING=${LFLAGS}
-DLFLAGS:STRING=${LFLAGS} -DCOMPILER_INFO:STRING=${COMPILER_INFO})
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
endif() endif()
list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake") list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake")
add_custom_target(UpdateInfo ALL add_custom_target(
UpdateInfo ALL
COMMAND ${ABOUT_COMMAND_WITH_ARGS} COMMAND ${ABOUT_COMMAND_WITH_ARGS}
COMMENT "Creating AboutThisBuild.txt and other version-dependent files") COMMENT "Creating AboutThisBuild.txt and other version-dependent files")
### End generating AboutThisBuild.txt # End generating AboutThisBuild.txt
install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}") install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}")
install(FILES LICENSE.txt DESTINATION "${LICENCEDIR}") install(FILES LICENSE.txt DESTINATION "${LICENCEDIR}")
install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt" DESTINATION "${CREDITSDIR}") install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt"
install(FILES RELEASE_NOTES.txt DESTINATION "${CREDITSDIR}" OPTIONAL) DESTINATION "${CREDITSDIR}")
install(
FILES RELEASE_NOTES.txt
DESTINATION "${CREDITSDIR}"
OPTIONAL)
# The standard location for man pages in Linux is /usr/share/man # The standard location for man pages in Linux is /usr/share/man Use "manpath"
# Use "manpath" to see the search paths for man pages on your system. # to see the search paths for man pages on your system.
if(BUILD_BUNDLE) if(BUILD_BUNDLE)
if(APPLE) if(APPLE)
install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/man/man1") install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1"
DESTINATION "${DATADIR}/man/man1")
else() else()
install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${DATADIR}/share/man/man1") install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1"
DESTINATION "${DATADIR}/share/man/man1")
endif() endif()
else() else()
install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1") install(FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1"
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
endif() endif()
if(WIN32) if(WIN32)
@@ -580,7 +701,8 @@ if(WIN32)
endif() endif()
if(UNIX) if(UNIX)
install(FILES com.rawtherapee.RawTherapee.appdata.xml DESTINATION "${APPDATADIR}") install(FILES com.rawtherapee.RawTherapee.appdata.xml
DESTINATION "${APPDATADIR}")
endif() endif()
# check whether the used version of lensfun has lfDatabase::LoadDirectory # check whether the used version of lensfun has lfDatabase::LoadDirectory
@@ -608,26 +730,31 @@ int main()
lfDatabase *db = 0; lfDatabase *db = 0;
bool b = db->LoadDirectory(0); bool b = db->LoadDirectory(0);
return 0; return 0;
}" LENSFUN_HAS_LOAD_DIRECTORY) }"
LENSFUN_HAS_LOAD_DIRECTORY)
set(TCMALLOC_LIB_DIR) set(TCMALLOC_LIB_DIR)
if(ENABLE_TCMALLOC) if(ENABLE_TCMALLOC)
if(TCMALLOC_LIB_DIR) if(TCMALLOC_LIB_DIR)
find_library(TCMALLOC_LIBRARIES tcmalloc PATHS ${TCMALLOC_LIB_DIR} NO_DEFAULT_PATH) find_library(TCMALLOC_LIBRARIES tcmalloc PATHS ${TCMALLOC_LIB_DIR}
NO_DEFAULT_PATH)
else() else()
find_library(TCMALLOC_LIBRARIES tcmalloc) find_library(TCMALLOC_LIBRARIES tcmalloc)
endif() endif()
if(TCMALLOC_LIBRARIES) if(TCMALLOC_LIBRARIES)
message(STATUS "using tcmalloc library in ${TCMALLOC_LIBRARIES}") message(STATUS "using tcmalloc library in ${TCMALLOC_LIBRARIES}")
else() else()
set(TCMALLOC_LIBRARIES "" CACHE INTERNAL "" FORCE) set(TCMALLOC_LIBRARIES
""
CACHE INTERNAL "" FORCE)
message(STATUS "tcmalloc not found") message(STATUS "tcmalloc not found")
endif() endif()
else() else()
set(TCMALLOC_LIBRARIES "" CACHE INTERNAL "" FORCE) set(TCMALLOC_LIBRARIES
""
CACHE INTERNAL "" FORCE)
endif() endif()
add_subdirectory(rtexif) add_subdirectory(rtexif)
add_subdirectory(rtengine) add_subdirectory(rtengine)
add_subdirectory(rtgui) add_subdirectory(rtgui)

View File

@@ -1,13 +1,21 @@
# cmakefile executed within a makefile target # cmakefile executed within a makefile target
# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed # If we find ReleaseInfo.cmake we use the info from there and don't need Git to
find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH) # be installed
find_file(
REL_INFO_FILE ReleaseInfo.cmake
PATHS "${PROJECT_SOURCE_DIR}"
NO_DEFAULT_PATH)
if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
# we look for the git command in this paths by order of preference # we look for the git command in this paths by order of preference
if(WIN32) if(WIN32)
find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../) find_program(
GIT_CMD git.exe
HINTS ENV Path
PATH_SUFFIXES ../)
elseif(APPLE) elseif(APPLE)
find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin"
"/usr/bin")
find_program(GIT_CMD git) find_program(GIT_CMD git)
set(SHELL "/bin/bash") set(SHELL "/bin/bash")
else(WIN32) # Linux else(WIN32) # Linux
@@ -22,46 +30,72 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
message(STATUS "git command found: ${GIT_CMD}") message(STATUS "git command found: ${GIT_CMD}")
endif() endif()
# Get version description. # Get version description. Depending on whether you checked out a branch
# Depending on whether you checked out a branch (dev) or a tag (release), # (dev) or a tag (release), "git describe" will return
# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. # "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively.
execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} describe --tags --always
OUTPUT_VARIABLE GIT_DESCRIBE
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Get branch name. # Get branch name. Will return empty if you checked out a commit or tag.
# Will return empty if you checked out a commit or tag. Empty string handled later. # Empty string handled later.
execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD
OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Get commit hash. # Get commit hash.
execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} rev-parse --short --verify HEAD
OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Get commit date, YYYY-MM-DD. # Get commit date, YYYY-MM-DD.
execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d
OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Get number of commits since tagging. This is what "GIT_DESCRIBE" uses. # Get number of commits since tagging. This is what "GIT_DESCRIBE" uses.
# Works when checking out branch, tag or commit. # Works when checking out branch, tag or commit. Get a list of all tags in
# Get a list of all tags in repo: # repo:
execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} tag --merged HEAD
OUTPUT_VARIABLE GIT_TAG
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Replace newlines with semicolons so that it can be split: # Replace newlines with semicolons so that it can be split:
string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}") string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}")
execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST}
OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# Get number of commits since branching. # Get number of commits since branching. Works when checking out branch, tag
# Works when checking out branch, tag or commit. # or commit.
execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") execute_process(
COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags
OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
# If user checked-out something which is not a branch, use the description as branch name. # If user checked-out something which is not a branch, use the description
# as branch name.
if(GIT_BRANCH STREQUAL "") if(GIT_BRANCH STREQUAL "")
set(GIT_BRANCH "${GIT_DESCRIBE}") set(GIT_BRANCH "${GIT_DESCRIBE}")
endif() endif()
# Create numeric version. # Create numeric version. This version is nonsense, either don't use it at
# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. # all or use it only where you have no other choice, e.g. Inno Setup's
# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). # VersionInfoVersion. Strip everything after hyphen, e.g. "5.0-gtk2" ->
# "5.0", "5.1-rc1" -> "5.1" (ergo BS).
if(GIT_COMMITS_SINCE_TAG STREQUAL "") if(GIT_COMMITS_SINCE_TAG STREQUAL "")
set(GIT_NUMERIC_VERSION_BS "0.0.0") set(GIT_NUMERIC_VERSION_BS "0.0.0")
else() else()
string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE}) string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE})
set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}") set(GIT_NUMERIC_VERSION_BS
"${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}")
endif() endif()
message(STATUS "Git checkout information:") message(STATUS "Git checkout information:")
@@ -75,7 +109,10 @@ if(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
if(NOT DEFINED CACHE_NAME_SUFFIX) if(NOT DEFINED CACHE_NAME_SUFFIX)
set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}") set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}")
message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"") message(
STATUS
"CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\""
)
else() else()
message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"") message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"")
endif() endif()
@@ -87,7 +124,8 @@ endif(REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
if(WIN32) if(WIN32)
if(BIT_DEPTH EQUAL 4) if(BIT_DEPTH EQUAL 4)
set(BUILD_BIT_DEPTH 32) set(BUILD_BIT_DEPTH 32)
# 32 bits builds has to be installable on 64 bits system, to support WinXP/64. # 32 bits builds has to be installable on 64 bits system, to support
# WinXP/64.
set(ARCHITECTURE_ALLOWED "x86 x64 ia64") set(ARCHITECTURE_ALLOWED "x86 x64 ia64")
# installing in 32 bits mode even on 64 bits OS and architecture # installing in 32 bits mode even on 64 bits OS and architecture
set(INSTALL_MODE "") set(INSTALL_MODE "")
@@ -95,16 +133,21 @@ if(WIN32)
set(BUILD_BIT_DEPTH 64) set(BUILD_BIT_DEPTH 64)
# Restricting the 64 bits builds to 64 bits systems only # Restricting the 64 bits builds to 64 bits systems only
set(ARCHITECTURE_ALLOWED "x64 ia64") set(ARCHITECTURE_ALLOWED "x64 ia64")
# installing in 64 bits mode for all 64 bits processors, even for itanium architecture # installing in 64 bits mode for all 64 bits processors, even for
# itanium architecture
set(INSTALL_MODE "x64 ia64") set(INSTALL_MODE "x64 ia64")
endif(BIT_DEPTH EQUAL 4) endif(BIT_DEPTH EQUAL 4)
# set part of the output archive name # set part of the output archive name
set(SYSTEM_NAME "WinVista") set(SYSTEM_NAME "WinVista")
configure_file("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss") configure_file(
"${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in"
"${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss")
endif(WIN32) endif(WIN32)
# build version.h from template # build version.h from template
configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h") configure_file("${PROJECT_SOURCE_DIR}/rtgui/version.h.in"
"${CMAKE_BINARY_DIR}/rtgui/version.h")
# build AboutThisBuild.txt from template # build AboutThisBuild.txt from template
configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt") configure_file("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in"
"${CMAKE_BINARY_DIR}/AboutThisBuild.txt")

View File

@@ -16,79 +16,79 @@ fMagenta="$(tput setaf 5)"
fRed="$(tput setaf 1)" fRed="$(tput setaf 1)"
function msg { function msg {
printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" printf "\\n${fBold}-- %s${fNormal}\\n" "${@}"
} }
function msgError { function msgError {
printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}" printf "\\n${fBold}Error:${fNormal}\\n%s\\n" "${@}"
} }
function GetDependencies { function GetDependencies {
otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }'
} }
function CheckLink { function CheckLink {
GetDependencies "$1" | while read -r; do GetDependencies "$1" | while read -r; do
local dest="${LIB}/$(basename "${REPLY}")" local dest="${LIB}/$(basename "${REPLY}")"
test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; } test -f "${dest}" || { ditto --arch "${arch}" "${REPLY}" "${dest}"; CheckLink "${dest}"; }
done done
} }
function ModifyInstallNames { function ModifyInstallNames {
find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do find -E "${CONTENTS}" -type f -regex '.*/(rawtherapee-cli|rawtherapee|.*\.(dylib|so))' | while read -r x; do
msg "Modifying install names: ${x}" msg "Modifying install names: ${x}"
{ {
# id # id
if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then if [ ${x:(-6)} == ".dylib" ] || [ f${x:(-3)} == ".so" ]; then
install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x}
fi fi
GetDependencies "${x}" | while read -r y GetDependencies "${x}" | while read -r y
do do
install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x}
done done
} | bash -v } | bash -v
done done
} }
# Source check # Source check
if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then if [[ ! -d "${CMAKE_BUILD_TYPE}" ]]; then
msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first." msgError "${PWD}/${CMAKE_BUILD_TYPE} folder does not exist. Please execute 'make install' first."
exit 1 exit 1
fi fi
# Update project version # Update project version
if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then if [[ -x "$(which git)" && -d "${PROJECT_SOURCE_DIR}/.git" ]]; then
### This section is copied from tools/generateReleaseInfo ### This section is copied from tools/generateReleaseInfo
# Get version description. # Get version description.
# Depending on whether you checked out a branch (dev) or a tag (release), # Depending on whether you checked out a branch (dev) or a tag (release),
# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively. # "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively.
gitDescribe="$(git describe --tags --always)" gitDescribe="$(git describe --tags --always)"
# Apple requires a numeric version of the form n.n.n # Apple requires a numeric version of the form n.n.n
# https://goo.gl/eWDQv6 # https://goo.gl/eWDQv6
# Get number of commits since tagging. This is what gitDescribe uses. # Get number of commits since tagging. This is what gitDescribe uses.
# Works when checking out branch, tag or commit. # Works when checking out branch, tag or commit.
gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))" gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))"
# Create numeric version. # Create numeric version.
# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion. # This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion.
# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS). # Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS).
if [[ -z $gitCommitsSinceTag ]]; then if [[ -z $gitCommitsSinceTag ]]; then
gitVersionNumericBS="0.0.0" gitVersionNumericBS="0.0.0"
else else
gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen. gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen.
gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0 gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0
fi fi
### Copy end. ### Copy end.
PROJECT_FULL_VERSION="$gitDescribe" PROJECT_FULL_VERSION="$gitDescribe"
PROJECT_VERSION="$gitVersionNumericBS" PROJECT_VERSION="$gitVersionNumericBS"
fi fi
MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')" MINIMUM_SYSTEM_VERSION="$(otool -l "${CMAKE_BUILD_TYPE}"/MacOS/rawtherapee | grep -A2 'LC_VERSION_MIN_MACOSX' | awk '$1 ~ /version/ { printf $2 }')"
if [[ -z "${MINIMUM_SYSTEM_VERSION}" ]]; then if [[ -z "${MINIMUM_SYSTEM_VERSION}" ]]; then
MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)" MINIMUM_SYSTEM_VERSION="$(sw_vers -productVersion | cut -d. -f-2)"
fi fi
arch=x86_64 arch=x86_64
@@ -111,7 +111,7 @@ CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)"
NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)" NOTARY="$(cmake .. -LA -N | grep "NOTARY" | cut -d "=" -f2)"
FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)" FANCY_DMG="$(cmake .. -LA -N | grep "FANCY_DMG" | cut -d "=" -f2)"
if [[ -n ${FANCY_DMG} ]] ; then if [[ -n ${FANCY_DMG} ]] ; then
echo "Fancy .dmg build is ON." echo "Fancy .dmg build is ON."
fi fi
APP="${PROJECT_NAME}.app" APP="${PROJECT_NAME}.app"
@@ -212,8 +212,8 @@ ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/themes/Default/gtk-3.0/gtk-
msg "Copy Adwaita icons" msg "Copy Adwaita icons"
iconfolders=("16x16/actions" "16x16/devices" "16x16/mimetypes" "16x16/places" "16x16/status" "48x48/devices") iconfolders=("16x16/actions" "16x16/devices" "16x16/mimetypes" "16x16/places" "16x16/status" "48x48/devices")
for f in "${iconfolders[@]}"; do for f in "${iconfolders[@]}"; do
mkdir -p ${RESOURCES}/share/icons/Adwaita/${f} mkdir -p ${RESOURCES}/share/icons/Adwaita/${f}
ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f} ditto ${LOCAL_PREFIX}/local/share/icons/Adwaita/${f}/* "${RESOURCES}"/share/icons/Adwaita/${f}
done done
ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/icons/Adwaita/index.theme ditto {"${LOCAL_PREFIX}/local","${RESOURCES}"}/share/icons/Adwaita/index.theme
"${LOCAL_PREFIX}/local/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita" "${LOCAL_PREFIX}/local/bin/gtk-update-icon-cache" "${RESOURCES}/share/icons/Adwaita"
@@ -263,133 +263,133 @@ ModifyInstallNames
# fix @rpath in Frameworks # fix @rpath in Frameworks
msg "Registering @rpath in Frameworks folder." msg "Registering @rpath in Frameworks folder."
for frameworklibs in "${LIB}"/*{dylib,so} ; do for frameworklibs in "${LIB}"/*{dylib,so} ; do
install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}" install_name_tool -delete_rpath ${LOCAL_PREFIX}/local/lib "${frameworklibs}"
install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}"
done done
install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli
install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli install_name_tool -add_rpath @executable_path "${EXECUTABLE}"-cli
# Codesign the app # Codesign the app
if [ -n "${CODESIGNID}" ] ; then if [ -n "${CODESIGNID}" ] ; then
msg "Codesigning Application." msg "Codesigning Application."
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements
plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements plutil -convert binary1 "${CMAKE_BUILD_TYPE}"/rt.entitlements
mv "${EXECUTABLE}"-cli "${LIB}" mv "${EXECUTABLE}"-cli "${LIB}"
for frameworklibs in "${LIB}"/* ; do for frameworklibs in "${LIB}"/* ; do
codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}" codesign -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee --force --verbose -o runtime --timestamp "${frameworklibs}"
done done
codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" codesign --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}"
spctl -a -vvvv "${APP}" spctl -a -vvvv "${APP}"
fi fi
# Notarize the app # Notarize the app
if [ -n "$NOTARY" ] ; then if [ -n "$NOTARY" ] ; then
msg "Notarizing the application:" msg "Notarizing the application:"
ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip" ditto -c -k --sequesterRsrc --keepParent "${APP}" "${APP}.zip"
uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee.RawTherapee" ${NOTARY} --file "${APP}.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'`
echo "Result= $uuid" # Display identifier string echo "Result= $uuid" # Display identifier string
sleep 15 sleep 15
while : while :
do do
fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status
status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'`
if [ "$status1" = "success" ]; then if [ "$status1" = "success" ]; then
xcrun stapler staple *app # staple the ticket xcrun stapler staple *app # staple the ticket
xcrun stapler validate -v *app xcrun stapler validate -v *app
echo "Notarization success" echo "Notarization success"
break break
elif [ "$status1" = "in" ]; then elif [ "$status1" = "in" ]; then
echo "Notarization still in progress, sleeping for 15 seconds and trying again" echo "Notarization still in progress, sleeping for 15 seconds and trying again"
sleep 15 sleep 15
else else
echo "Notarization failed fullstatus below" echo "Notarization failed fullstatus below"
echo "$fullstatus" echo "$fullstatus"
exit 1 exit 1
fi fi
done done
fi fi
function CreateDmg { function CreateDmg {
local srcDir="$(mktemp -dt $$)" local srcDir="$(mktemp -dt $$)"
msg "Preparing disk image sources at ${srcDir}:" msg "Preparing disk image sources at ${srcDir}:"
cp -R "${APP}" "${srcDir}" cp -R "${APP}" "${srcDir}"
cp "${RESOURCES}"/share/LICENSE.txt "${srcDir}" cp "${RESOURCES}"/share/LICENSE.txt "${srcDir}"
ln -s /Applications "${srcDir}" ln -s /Applications "${srcDir}"
# Web bookmarks # Web bookmarks
function CreateWebloc { function CreateWebloc {
defaults write "${srcDir}/$1" URL "$2" defaults write "${srcDir}/$1" URL "$2"
mv "${srcDir}/$1".{plist,webloc} mv "${srcDir}/$1".{plist,webloc}
} }
CreateWebloc 'Website' 'https://www.rawtherapee.com/' CreateWebloc 'Website' 'https://www.rawtherapee.com/'
CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/' CreateWebloc 'Documentation' 'https://rawpedia.rawtherapee.com/'
CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee' CreateWebloc 'Forum' 'https://discuss.pixls.us/c/software/rawtherapee'
CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new'
# Disk image name # Disk image name
dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}" dmg_name="${PROJECT_NAME// /_}_OSX_${MINIMUM_SYSTEM_VERSION}_${PROC_BIT_DEPTH}_${PROJECT_FULL_VERSION}"
lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")"
if [[ ${lower_build_type} != release ]]; then if [[ ${lower_build_type} != release ]]; then
dmg_name="${dmg_name}_${lower_build_type}" dmg_name="${dmg_name}_${lower_build_type}"
fi fi
msg "Creating disk image:" msg "Creating disk image:"
if [ ! -z ${FANCY_DMG} ] ; then if [ ! -z ${FANCY_DMG} ] ; then
echo "Building Fancy .dmg" echo "Building Fancy .dmg"
mkdir "${srcDir}/.background" mkdir "${srcDir}/.background"
cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg.icns" "${srcDir}/.VolumeIcon.icns"
cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png" cp -R "${PROJECT_SOURCE_DATA_DIR}/rtdmg-bkgd.png" "${srcDir}/.background/background.png"
SetFile -c incC "${srcDir}/.VolumeIcon.icns" SetFile -c incC "${srcDir}/.VolumeIcon.icns"
create-dmg "${dmg_name}.dmg" "${srcDir}" \ create-dmg "${dmg_name}.dmg" "${srcDir}" \
--volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ --volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \
--volicon "${srcDir}/.VolumeIcon.icns" \ --volicon "${srcDir}/.VolumeIcon.icns" \
--sandbox-safe \ --sandbox-safe \
--no-internet-enable \ --no-internet-enable \
--eula LICENSE.txt \ --eula LICENSE.txt \
--hdiutil-verbose \ --hdiutil-verbose \
--rez /Library/Developer/CommandLineTools/usr/bin/Rez --rez /Library/Developer/CommandLineTools/usr/bin/Rez
else else
hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg" hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
fi fi
# Sign disk image # Sign disk image
if [ -n "$CODESIGNID" ] ; then if [ -n "$CODESIGNID" ] ; then
codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg" codesign --deep --force -v -s "${CODESIGNID}" --timestamp "${dmg_name}.dmg"
fi fi
# Notarize the dmg # Notarize the dmg
if ! test -z "$NOTARY" ; then if ! test -z "$NOTARY" ; then
msg "Notarizing the dmg:" msg "Notarizing the dmg:"
zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg"
uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'`
echo "dmg Result= $uuid" # Display identifier string echo "dmg Result= $uuid" # Display identifier string
sleep 15 sleep 15
while : while :
do do
fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status fullstatus=`xcrun altool --notarization-info "$uuid" ${NOTARY} 2>&1` # get the status
status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'` status1=`echo "$fullstatus" | grep 'Status\:' | awk '{ print $2 }'`
if [ "$status1" = "success" ]; then if [ "$status1" = "success" ]; then
xcrun stapler staple "${dmg_name}.dmg" # staple the ticket xcrun stapler staple "${dmg_name}.dmg" # staple the ticket
xcrun stapler validate -v "${dmg_name}.dmg" xcrun stapler validate -v "${dmg_name}.dmg"
echo "dmg Notarization success" echo "dmg Notarization success"
break break
elif [ "$status1" = "in" ]; then elif [ "$status1" = "in" ]; then
echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again" echo "dmg Notarization still in progress, sleeping for 15 seconds and trying again"
sleep 15 sleep 15
else else
echo "dmg Notarization failed fullstatus below" echo "dmg Notarization failed fullstatus below"
echo "$fullstatus" echo "$fullstatus"
exit 1 exit 1
fi fi
done done
fi fi
# Zip disk image for redistribution # Zip disk image for redistribution
msg "Zipping disk image for redistribution:" msg "Zipping disk image for redistribution:"
rm "${dmg_name}.dmg" rm "${dmg_name}.dmg"
msg "Removing disk image caches:" msg "Removing disk image caches:"
rm -rf "${srcDir}" rm -rf "${srcDir}"
} }
CreateDmg CreateDmg
msg "Finishing build:" msg "Finishing build:"