Rearrange the way mercurial-less build works (see issue 1342):

The cmake option AUTOMATED_BUILD_SYSTEM is removed and replaced by an automated
detection. Now it is possible to ship source tarballs that build without
mercurial on all platforms. The needed information is generated by the script
tools/generateReleaseInfo.{sh,bat} before the tarball is build.
This commit is contained in:
Philip Rinn
2012-06-18 17:35:53 +02:00
parent cbe233c8cf
commit 63cae64611
4 changed files with 99 additions and 123 deletions

View File

@@ -1,34 +1,39 @@
# cmakefile executed within a makefile target # 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 # 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 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) # If we find ReleaseInfo.cmake we use the info from there and don't need Mercurial to be installed
execute_process(COMMAND ${HG_CMD} parents --template={node|short} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE HG_CHANGESET OUTPUT_STRIP_TRAILING_WHITESPACE) find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${CMAKE_CURRENT_SOURCE_DIR}" NO_DEFAULT_PATH)
execute_process(COMMAND ${HG_CMD} parents --template={latesttagdistance} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE OUTPUT_STRIP_TRAILING_WHITESPACE) if (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
if (CACHE_NAME_SUFFIX STREQUAL "") # we look for the hg command in this paths by order of preference
execute_process(COMMAND ${HG_CMD} parents --template={latesttag} WORKING_DIRECTORY ${SRC_DIR} OUTPUT_VARIABLE CACHE_NAME_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE) if (WIN32)
endif () 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 # build version.h from template
configure_file (${SRC_DIR}/rtgui/version.h.in ${SRC_DIR}/rtgui/version.h) configure_file (${SRC_DIR}/rtgui/version.h.in ${SRC_DIR}/rtgui/version.h)

View File

@@ -66,8 +66,6 @@ endif (APPLE)
option(USE_CLANG "Build rawtherapee with clang" OFF) option(USE_CLANG "Build rawtherapee with clang" OFF)
option(USE_EXPERIMENTAL_LANG_VERSIONS "Build RT with -std=c++0x" 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 (BUILD_SHARED "Build rawtherapee with shared libraries" OFF)
option (WITH_BZIP "Build with Bzip2 support" ON) option (WITH_BZIP "Build with Bzip2 support" ON)
option (WITH_MYFILE_MMAP "Build using memory mapped file" 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 (TIFF REQUIRED)
find_package (ZLIB 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 set(ABOUT_COMMAND_WITH_ARGS ${CMAKE_COMMAND}
find_file(ABOUT_FILE AboutThisBuild.txt PATHS "${CMAKE_CURRENT_SOURCE_DIR}" NO_DEFAULT_PATH) -DSRC_DIR:STRING=${CMAKE_CURRENT_SOURCE_DIR}
if (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) -DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX}
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.") -DPROC_LABEL:STRING=\"${PROC_LABEL}\"
endif (ABOUT_FILE STREQUAL ABOUT_FILE-NOTFOUND) -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 if (WIN32)
find_file(VERSION_FILE version.h PATHS "${CMAKE_CURRENT_SOURCE_DIR}/rtgui" NO_DEFAULT_PATH) list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows
if (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) -DCXX_FLAGS:STRING=\"${CXX_FLAGS}\"
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.") -DLFLAGS:STRING=\"${LFLAGS}\")
endif (VERSION_FILE STREQUAL VERSION_FILE-NOTFOUND) 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 add_custom_target(AboutFile ALL
if (CMAKE_SIZEOF_VOID_P EQUAL 4) COMMAND ${ABOUT_COMMAND_WITH_ARGS}
set(PROC_BIT_DEPTH 32 bits) COMMENT "Creating the about file")
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_dependencies(AboutFile Debug Release MinSizeRel RelWithDebInfo)
## END: Generating AboutThisBuild.txt
# link witz bzip # link witz bzip
if (WITH_BZIP) if (WITH_BZIP)

14
tools/generateReleaseInfo Executable file
View File

@@ -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

View File

@@ -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