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:
@@ -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)
|
||||
|
133
CMakeLists.txt
133
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)
|
||||
|
14
tools/generateReleaseInfo
Executable file
14
tools/generateReleaseInfo
Executable 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
|
||||
|
14
tools/generateReleaseInfo.bat
Normal file
14
tools/generateReleaseInfo.bat
Normal 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
|
||||
|
Reference in New Issue
Block a user