diff --git a/About-Apple.cmake b/About-Apple.cmake index 6e8e77e3b..96a7913cf 100644 --- a/About-Apple.cmake +++ b/About-Apple.cmake @@ -1,41 +1,26 @@ -# this will generate a target that will never exist, so it will (should) be executed on each build -#WARNING: Actually, only Gcc is supported - -string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) +# cmakefile executed within a makefile target # we look for the hg command in this paths by order of preference find_file(HG_CMD hg PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin") find_file(HG_CMD hg) +# the hg command is looked for again, at build time if (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(FATAL_ERROR "hg command not found!") + message(FATAL_ERROR "hg command not found!") else (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(STATUS "hg command found: ${HG_CMD}") + message(STATUS "hg command found: ${HG_CMD}") endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) set (OUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt") set (SHELL "/bin/bash") -execute_process(COMMAND ${HG_CMD} parents --template={latesttag}.{latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_VERSION) -execute_process(COMMAND ${HG_CMD} parents --template={node|short} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_CHANGESET) -execute_process(COMMAND ${HG_CMD} parents --template={latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE) +# 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 ${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) # build version.h from template configure_file (${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h) - -add_custom_target (AboutFile ALL - COMMAND rm -f ${OUT_FILE} - COMMAND echo Branch: `${HG_CMD} -R ${CMAKE_CURRENT_SOURCE_DIR} branch` >>${OUT_FILE} - COMMAND echo Version: ${HG_VERSION} >>${OUT_FILE} - COMMAND echo Changeset: ${HG_CHANGESET} >>${OUT_FILE} - COMMAND echo Compiler: GCC `gcc -dumpversion` >>${OUT_FILE} - COMMAND echo Processor: ${PROC_LABEL} >>${OUT_FILE} - COMMAND echo Bit depth: ${PROC_BIT_DEPTH} >>${OUT_FILE} - COMMAND echo Gtkmm: V${GTKMM_VERSION} >>${OUT_FILE} - COMMAND echo Build type: ${CMAKE_BUILD_TYPE} >>${OUT_FILE} - COMMAND echo Build flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} >>${OUT_FILE} - COMMAND echo Link flags: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} >>${OUT_FILE} - COMMAND echo OpenMP support: ${OPTION_OMP} >>${OUT_FILE} - COMMAND echo MMAP support: ${WITH_MYFILE_MMAP} >>${OUT_FILE} - COMMAND echo Rawzor support: ${WITH_RAWZOR} >>${OUT_FILE} - COMMENT "Creating the about file" -) +# build AboutThisBuild.txt from template +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt) diff --git a/About-Linux.cmake b/About-Linux.cmake index f12e2bed4..26d58639b 100644 --- a/About-Linux.cmake +++ b/About-Linux.cmake @@ -1,40 +1,26 @@ -# this will generate a target that will never exist, so it will (should) be executed on each build -#WARNING: Actually, only Gcc is supported - -string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) +# cmakefile executed within a makefile target # we look for the hg command in this paths by order of preference find_file(HG_CMD hg) + +# the hg command is looked for again, at build time if (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(FATAL_ERROR "hg command not found!") + message(FATAL_ERROR "hg command not found!") else (HG_CMD STREQUAL HG_CMD-NOTFOUND) - message(STATUS "hg command found: ${HG_CMD}") + message(STATUS "hg command found: ${HG_CMD}") endif (HG_CMD STREQUAL HG_CMD-NOTFOUND) set (OUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt") set (SHELL "/bin/bash") -execute_process(COMMAND ${HG_CMD} parents --template={latesttag}.{latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_VERSION) -execute_process(COMMAND ${HG_CMD} parents --template={node|short} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_CHANGESET) -execute_process(COMMAND ${HG_CMD} parents --template={latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE) +# 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 ${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) # build version.h from template configure_file (${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h) - -add_custom_target (AboutFile ALL - COMMAND rm -f ${OUT_FILE} - COMMAND echo Branch: `${HG_CMD} -R ${CMAKE_CURRENT_SOURCE_DIR} branch` >>${OUT_FILE} - COMMAND echo Version: ${HG_VERSION} >>${OUT_FILE} - COMMAND echo Changeset: ${HG_CHANGESET} >>${OUT_FILE} - COMMAND echo Compiler: GCC `gcc -dumpversion` >>${OUT_FILE} - COMMAND echo Processor: ${PROC_LABEL} >>${OUT_FILE} - COMMAND echo Bit depth: ${PROC_BIT_DEPTH} >>${OUT_FILE} - COMMAND echo Gtkmm: V${GTKMM_VERSION} >>${OUT_FILE} - COMMAND echo Build type: ${CMAKE_BUILD_TYPE} >>${OUT_FILE} - COMMAND echo Build flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} >>${OUT_FILE} - COMMAND echo Link flags: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} >>${OUT_FILE} - COMMAND echo OpenMP support: ${OPTION_OMP} >>${OUT_FILE} - COMMAND echo MMAP support: ${WITH_MYFILE_MMAP} >>${OUT_FILE} - COMMAND echo Rawzor support: ${WITH_RAWZOR} >>${OUT_FILE} - COMMENT "Creating the about file" -) +# build AboutThisBuild.txt from template +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt) diff --git a/About-Windows.cmake b/About-Windows.cmake index af6df2727..b6e677511 100644 --- a/About-Windows.cmake +++ b/About-Windows.cmake @@ -1,30 +1,26 @@ -# this will generate a target that will never exist, so it will (should) be executed on each build -#WARNING: Actually, only Gcc is supported +# cmakefile executed within a makefile target -string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) +# we look for the hg command in this paths by order of preference +find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) + + +# 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 "${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt") -execute_process(COMMAND hg parents --template={latesttag}.{latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_VERSION) -execute_process(COMMAND hg parents --template={node|short} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_CHANGESET) -execute_process(COMMAND hg parents --template={latesttagdistance} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HG_TAGDISTANCE) +# 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 ${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) # build version.h from template configure_file (${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/rtgui/version.h) - -add_custom_target (AboutFile ALL - COMMAND for /F \"tokens=*\" %%i in \('hg -R \"${CMAKE_CURRENT_SOURCE_DIR}\" branch'\) do echo Branch: %%i >${OUT_FILE} - COMMAND echo Version: ${HG_VERSION} >>${OUT_FILE} - COMMAND echo Changeset: ${HG_CHANGESET} >>${OUT_FILE} - COMMAND for /F \"tokens=*\" %%i in \('gcc -dumpversion'\) do echo Compiler: GCC%%i >>${OUT_FILE} - COMMAND \(echo Processor: ${PROC_LABEL}\) >>${OUT_FILE} - COMMAND \(echo Bit depth: ${PROC_BIT_DEPTH}\) >>${OUT_FILE} - COMMAND \(echo Gtkmm: V${GTKMM_VERSION}\) >>${OUT_FILE} - COMMAND \(echo Build type: ${CMAKE_BUILD_TYPE}\) >>${OUT_FILE} - COMMAND \(echo Build flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} \) >>${OUT_FILE} - COMMAND \(echo Link flags: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} \) >>${OUT_FILE} - COMMAND \(echo OpenMP support: ${OPTION_OMP}\) >>${OUT_FILE} - COMMAND \(echo MMAP support: ${WITH_MYFILE_MMAP}\) >>${OUT_FILE} - COMMAND \(echo Rawzor support: ${WITH_RAWZOR}\) >>${OUT_FILE} - COMMENT "Creating the about file" -) +# build AboutThisBuild.txt from template +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/AboutThisBuild.txt) diff --git a/AboutThisBuild.txt.in b/AboutThisBuild.txt.in new file mode 100644 index 000000000..92a9a4b4c --- /dev/null +++ b/AboutThisBuild.txt.in @@ -0,0 +1,14 @@ +Branch: ${HG_BRANCH} +Version: ${HG_VERSION} +Changeset: ${HG_CHANGESET} +Compiler: GCC ${GCC_VERSION} +Processor: ${PROC_LABEL} +System: ${SYSTEM} +Bit depth: ${PROC_BIT_DEPTH} +Gtkmm: V${GTKMM_VERSION} +Build type: ${BUILD_TYPE} +Build flags: ${CXX_FLAGS} +Link flags: ${LFLAGS} +OpenMP support: ${OPTION_OMP} +MMAP support: ${WITH_MYFILE_MMAP} +Rawzor support: ${WITH_RAWZOR} diff --git a/CMakeLists.txt b/CMakeLists.txt index 49f262c1e..42445e39e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,16 +168,77 @@ else (AUTOMATED_BUILD_SYSTEM) set(PROC_BIT_DEPTH 64 bits) endif (CMAKE_SIZEOF_VOID_P EQUAL 4) + string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE) + #generating AboutThisBuild.txt if (WIN32) - include (About-Windows.cmake) + + add_custom_target (AboutFile ALL + COMMAND ${CMAKE_COMMAND} + -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} + -DWITH_RAWZOR:STRING=${WITH_RAWZOR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Windows.cmake + COMMENT "Creating the about file" + ) + find_file(HG_CMD hg.exe HINTS ENV Path PATH_SUFFIXES ../) + elseif (APPLE) - include (About-Apple.cmake) + + add_custom_target (AboutFile ALL + COMMAND ${CMAKE_COMMAND} + -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} + -DWITH_RAWZOR:STRING=${WITH_RAWZOR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Apple.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) - include (About-Linux.cmake) + + add_custom_target (AboutFile ALL + COMMAND ${CMAKE_COMMAND} + -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} + -DWITH_RAWZOR:STRING=${WITH_RAWZOR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/About-Linux.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) # link rawzor diff --git a/Win32CMakeOptions-Sample.txt b/Win32CMakeOptions-Sample.txt index 438826d04..2fabe11eb 100644 --- a/Win32CMakeOptions-Sample.txt +++ b/Win32CMakeOptions-Sample.txt @@ -24,6 +24,8 @@ set (PROC_TARGET_NUMBER 0 CACHE STRING "Target Processor") # If you want to force the target processor name, uncomment the next line, and replace labelWithoutQuotes by its value #set (PROC_FORCED_LABEL labelWithoutQuotes CACHE STRING "Target Processor label") +# Important: MinGW-w64 user may need to specify the -m32 or -m64 flag in CMAKE_CXX_FLAGS, +# CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS to selectect between 32/64bit build set(CMAKE_CXX_FLAGS "-mwin32 -mthreads" CACHE STRING "Compiler options for C++ source files") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g2" CACHE STRING "Compiler options for C++ source files and Debug target") set(CMAKE_CXX_FLAGS_RELEASE "-mwindows -DNDEBUG -O2" CACHE STRING "Compiler options for C++ source files and Release target")