diff --git a/AboutThisBuild.cmake b/AboutThisBuild.cmake index 33caa64e0..99065f224 100644 --- a/AboutThisBuild.cmake +++ b/AboutThisBuild.cmake @@ -1,34 +1,39 @@ # cmakefile executed within a makefile target - -# we look for the hg command in this paths by order of preference -if (WIN32) - find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) -elseif (APPLE) - find_file(HG_CMD hg PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") - find_file(HG_CMD hg) - set (SHELL "/bin/bash") -else (WIN32) # Linux - find_file(HG_CMD hg) - set (SHELL "/bin/bash") -endif (WIN32) - -# the hg command is looked for again, at build time -if (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(FATAL_ERROR "hg command not found!") -else (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(STATUS "hg command found: ${HG_CMD}") -endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) - -set (OUT_FILE "${SRC_DIR}/AboutThisBuild.txt") # there should be a better way of getting the compiler + compiler version, not restrained to Gcc execute_process(COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process(COMMAND ${HG_CMD} -R ${SRC_DIR} branch OUTPUT_VARIABLE HG_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process(COMMAND ${HG_CMD} parents --template={latesttag}.{latesttagdistance} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE HG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process(COMMAND ${HG_CMD} parents --template={node|short} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE HG_CHANGESET OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process(COMMAND ${HG_CMD} parents --template={latesttagdistance} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE OUTPUT_STRIP_TRAILING_WHITESPACE) -if (CACHE_NAME_SUFFIX STREQUAL "") - execute_process(COMMAND ${HG_CMD} parents --template={latesttag} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE CACHE_NAME_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () + +# If we find ReleaseInfo.cmake we use the info from there and don't need Mercurial to be installed +find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${CMAKE_CURRENT_SOURCE_DIR}" NO_DEFAULT_PATH) +if (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) + # we look for the hg command in this paths by order of preference + if (WIN32) + find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) + elseif (APPLE) + find_file(HG_CMD hg PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") + find_file(HG_CMD hg) + set (SHELL "/bin/bash") + else (WIN32) # Linux + find_file(HG_CMD hg) + set (SHELL "/bin/bash") + endif (WIN32) + + # Fail if Mercurial is not installed + if (HG_CMD STREQUAL HG_CMD-NOTFOUND) + message(FATAL_ERROR "hg command not found!") + else (HG_CMD STREQUAL HG_CMD-NOTFOUND) + message(STATUS "hg command found: ${HG_CMD}") + endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) + + execute_process(COMMAND ${HG_CMD} -R ${CMAKE_CURRENT_SOURCE_DIR} branch OUTPUT_VARIABLE HG_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${HG_CMD} parents --template={latesttag}.{latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${HG_CMD} parents --template={node|short} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_CHANGESET OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${HG_CMD} parents --template={latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE OUTPUT_STRIP_TRAILING_WHITESPACE) + if (CACHE_NAME_SUFFIX STREQUAL "") + execute_process(COMMAND ${HG_CMD} parents --template={latesttag} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE CACHE_NAME_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE) + endif (CACHE_NAME_SUFFIX STREQUAL "") +else (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) + include(${CMAKE_CURRENT_SOURCE_DIR}/ReleaseInfo.cmake) +endif (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND) # build version.h from template configure_file (${SRC_DIR}/rtgui/version.h.in ${SRC_DIR}/rtgui/version.h) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24994e4e8..6feec631b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,8 +66,6 @@ endif (APPLE) option(USE_CLANG "Build rawtherapee with clang" OFF) option(USE_EXPERIMENTAL_LANG_VERSIONS "Build RT with -std=c++0x" OFF) -option (AUTOMATED_BUILD_SYSTEM "TRUE if built by an automate" OFF) - option (BUILD_SHARED "Build rawtherapee with shared libraries" OFF) option (WITH_BZIP "Build with Bzip2 support" ON) option (WITH_MYFILE_MMAP "Build using memory mapped file" ON) @@ -190,105 +188,50 @@ find_package (PNG REQUIRED) find_package (TIFF REQUIRED) find_package (ZLIB REQUIRED) -if (AUTOMATED_BUILD_SYSTEM) +## BEGIN: Generating AboutThisBuild.txt +# set the bit number information of the platform +if (CMAKE_SIZEOF_VOID_P EQUAL 4) + set(PROC_BIT_DEPTH 32 bits) +elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PROC_BIT_DEPTH 64 bits) +endif (CMAKE_SIZEOF_VOID_P EQUAL 4) - message(WARNING "Automated build system mode! You have to make sure that AboutThisBuild.txt and rtgui/version.h are up-to-date by building RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF.") +# Get c++ and linker flags +set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}") +set(LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}") - # Checking for the presence of AboutThisBuild.txt - find_file(ABOUT_FILE AboutThisBuild.txt PATHS "${CMAKE_CURRENT_SOURCE_DIR}" NO_DEFAULT_PATH) - if (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) - message(FATAL_ERROR "AboutThisBuild.txt not found! You have to build RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF to generate this file.") - endif (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) +set(ABOUT_COMMAND_WITH_ARGS ${CMAKE_COMMAND} + -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} + -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} + -DPROC_LABEL:STRING=\"${PROC_LABEL}\" + -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" + -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} + -DGTKMM_VERSION:STRING=${GTKMM_VERSION} + -DOPTION_OMP:STRING=${OPTION_OMP} + -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP}) - # Checking for the presence of version.h - find_file(VERSION_FILE version.h PATHS "${CMAKE_CURRENT_SOURCE_DIR}/rtgui" NO_DEFAULT_PATH) - if (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) - message(FATAL_ERROR "rtgui/version.h not found! You have to build RT at least one time with AUTOMATED_BUILD_SYSTEM=OFF to generate this file.") - endif (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) +if (WIN32) + list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows + -DCXX_FLAGS:STRING=\"${CXX_FLAGS}\" + -DLFLAGS:STRING=\"${LFLAGS}\") +elseif (APPLE) + list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple + -DCXX_FLAGS:STRING=${CXX_FLAGS} + -DLFLAGS:STRING=${LFLAGS}) +else (WIN32) + list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux + -DCXX_FLAGS:STRING=${CXX_FLAGS} + -DLFLAGS:STRING=${LFLAGS}) +endif (WIN32) -else (AUTOMATED_BUILD_SYSTEM) +list(APPEND ABOUT_COMMAND_WITH_ARGS -P ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.cmake) - # set the bit number information of the platform - if (CMAKE_SIZEOF_VOID_P EQUAL 4) - set(PROC_BIT_DEPTH 32 bits) - elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) - set(PROC_BIT_DEPTH 64 bits) - endif (CMAKE_SIZEOF_VOID_P EQUAL 4) - - #generating AboutThisBuild.txt - if (WIN32) - - add_custom_target (AboutFile ALL - COMMAND ${CMAKE_COMMAND} - -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} - -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} - -DSYSTEM:STRING=Windows - -DPROC_LABEL:STRING=\"${PROC_LABEL}\" - -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" - -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DGTKMM_VERSION:STRING=${GTKMM_VERSION} - -DCXX_FLAGS:STRING=\"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}\" - -DLFLAGS:STRING=\"${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}\" - -DOPTION_OMP:STRING=${OPTION_OMP} - -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} - -P ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.cmake - COMMENT "Creating the about file" - ) - find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) - - elseif (APPLE) - - add_custom_target (AboutFile ALL - COMMAND ${CMAKE_COMMAND} - -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} - -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} - -DSYSTEM:STRING=Apple - -DPROC_LABEL:STRING=\"${PROC_LABEL}\" - -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" - -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DGTKMM_VERSION:STRING=${GTKMM_VERSION} - -DCXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} - -DLFLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} - -DOPTION_OMP:STRING=${OPTION_OMP} - -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} - -P ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.cmake - COMMENT "Creating the about file" - ) - find_file(HG_CMD hg PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") - find_file(HG_CMD hg) - - else (WIN32) - - add_custom_target (AboutFile ALL - COMMAND ${CMAKE_COMMAND} - -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR} - -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX} - -DSYSTEM:STRING=Linux - -DPROC_LABEL:STRING=\"${PROC_LABEL}\" - -DPROC_BIT_DEPTH:STRING=\"${PROC_BIT_DEPTH}\" - -DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DGTKMM_VERSION:STRING=${GTKMM_VERSION} - -DCXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} - -DLFLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} - -DOPTION_OMP:STRING=${OPTION_OMP} - -DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP} - -P ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.cmake - COMMENT "Creating the about file" - ) - find_file(HG_CMD hg) - - endif (WIN32) - - add_dependencies(AboutFile Debug Release MinSizeRel RelWithDebInfo) - - if (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(FATAL_ERROR "hg command not found!") - else (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(STATUS "hg command found: ${HG_CMD}") - endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) - -endif (AUTOMATED_BUILD_SYSTEM) +add_custom_target(AboutFile ALL + COMMAND ${ABOUT_COMMAND_WITH_ARGS} + COMMENT "Creating the about file") +add_dependencies(AboutFile Debug Release MinSizeRel RelWithDebInfo) +## END: Generating AboutThisBuild.txt # link witz bzip if (WITH_BZIP) diff --git a/tools/generateReleaseInfo b/tools/generateReleaseInfo new file mode 100755 index 000000000..c53ac1fb4 --- /dev/null +++ b/tools/generateReleaseInfo @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +hgBranch="`hg branch`" +hgLatesttag="`hg parents --template '{latesttag}'`" +hgLatesttagdistance="`hg parents --template '{latesttagdistance}'`" +hgChangeset="`hg parents --template '{node|short}'`" + +echo "set(HG_BRANCH $hgBranch) +set(HG_VERSION $hgLatesttag.$hgLatesttagdistance) +set(HG_CHANGESET $hgChangeset) +set(HG_TAGDISTANCE $hgLatesttagdistance) +if (CACHE_NAME_SUFFIX STREQUAL \"\") + set(CACHE_NAME_SUFFIX $hgLatesttag) +endif()" > ReleaseInfo.cmake + diff --git a/tools/generateReleaseInfo.bat b/tools/generateReleaseInfo.bat new file mode 100644 index 000000000..1f0e21d70 --- /dev/null +++ b/tools/generateReleaseInfo.bat @@ -0,0 +1,14 @@ +@echo off +for /f "tokens=*" %%a in ('hg branch') do @set hgBranch=%%a +for /f "tokens=*" %%a in ('hg parents --template "{latesttag}"') do @set hgLatesttag=%%a +for /f "tokens=*" %%a in ('hg parents --template "{latesttagdistance}"') do @set hgLatesttagdistance=%%a +for /f "tokens=*" %%a in ('hg parents --template "{node|short}"') do @set hgChangeset=%%a + +echo set(HG_BRANCH %hgBranch%) > ReleaseInfo.cmake +echo set(HG_VERSION %hgLatesttag%.%hgLatesttagdistance%) >> ReleaseInfo.cmake +echo set(HG_CHANGESET %hgChangeset%) >> ReleaseInfo.cmake +echo set(HG_TAGDISTANCE %hgLatesttagdistance%) >> ReleaseInfo.cmake +echo if (CACHE_NAME_SUFFIX STREQUAL "") >> ReleaseInfo.cmake +echo set(CACHE_NAME_SUFFIX %hgLatesttag%) >> ReleaseInfo.cmake +echo endif() >> ReleaseInfo.cmake +