Changeset: 902063ff11bc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=902063ff11bc Added Files: buildtools/CMakeLists.txt buildtools/conf/CMakeLists.txt testing/CMakeLists.txt Modified Files: CMakeLists.txt monetdb5/CMakeLists.txt sql/CMakeLists.txt testing/Mtest.py.in tools/merovingian/CMakeLists.txt tools/mserver/CMakeLists.txt tools/mserver/monet_version.c.in Branch: cmake-fun Log Message:
Progress in many fields: -Compiles and install Mtest and builtools directories -Replaced add_link_options call with direct manipulation of LINK_OPTIONS variable for compatibility with cmake 3.12 -Added compilation flags for MSVC builds and checks for other compilers. diffs (truncated from 989 to 300 lines): diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ cmake_policy(SET CMP0075 NEW) # Save default cmake options in the begining set(PREV_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") +set(NEW_LINK_OPTIONS "${LINK_OPTIONS}") function(MT_clibsToCmake INPUT_INCS OUTPUT_INCS) # Remove -I before the include path string(LENGTH "${INPUT_INCS}" INPUT_INCS_LENGTH) @@ -41,8 +42,6 @@ function(MT_clibsToCmake INPUT_INCS OUTP set(${OUTPUT_INCS} "${HELPER}" PARENT_SCOPE) endfunction() -# set prefix with -DCMAKE_INSTALL_PREFIX=... - # set host data string(TOLOWER "${CMAKE_SYSTEM_NAME}" CMAKE_SYSTEM_NAME_LOWER) string(TOLOWER "${CMAKE_C_COMPILER_ID}" CMAKE_C_COMPILER_ID_LOWER) @@ -99,9 +98,11 @@ endif() if(EXISTS "${CMAKE_SOURCE_DIR}/vertoo.data") set(DFT_STRICT "YES") set(DFT_ASSERT "YES") + set(DFT_DEVELOPER "YES") else() set(DFT_STRICT "NO") set(DFT_ASSERT "NO") + set(DFT_DEVELOPER "NO") endif() # modules to use @@ -166,11 +167,35 @@ endif() set(ENABLE_ASSERT "${DFT_ASSERT}" CACHE STRING "Enable assertions in the code (default=yes for development sources)") set(ENABLE_STRICT "${DFT_STRICT}" CACHE STRING "Enable strict compiler flags (default=yes for development sources)") set(ENABLE_SANITIZER "NO" CACHE STRING "Enable support for the GCC address sanitizer (default=no)") +set(ENABLE_DEVELOPER "${DFT_DEVELOPER}" CACHE STRING "Enable full debugging (default=yes for development sources)") +if(NOT ${ENABLE_DEVELOPER} STREQUAL "NO") + set(HAVE_DEVELOPER ON) +endif() set(ENABLE_STATIC_ANALYSIS "NO" CACHE STRING "Configure for static code analysis (use only if you know what you are doing)") if(NOT ${ENABLE_STATIC_ANALYSIS} STREQUAL "NO") set(STATIC_CODE_ANALYSIS ON) endif() +if(UNIX OR APPLE) # instalation directories. This has to come earlier + include(GNUInstallDirs REQUIRED) + + set(LOGDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/monetdb" CACHE STRING "Where to put log files (LOCALSTATEDIR/log/monetdb)") + set(RUNDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run/monetdb" CACHE STRING "Where to put pid files (LOCALSTATEDIR/run/monetdb)") + set(BINDIR "${CMAKE_INSTALL_FULL_BINDIR}") + set(DATADIR "${CMAKE_INSTALL_FULL_DATADIR}") + set(DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}") + set(DATAROOTDIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}") + set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") + set(LIBEXECDIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}") + set(LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}") + set(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/monetdb") + set(PKGCONFIGDIR "${LIBDIR}/pkgconfig") + set(SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}") + set(MANDIR "${CMAKE_INSTALL_FULL_MANDIR}") + set(INFODIR "${CMAKE_INSTALL_FULL_INFODIR}") +endif() +set(PROGRAM_PERMISSIONS_DEFAULT OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + # password hash algorithm set(PASSWORD_BACKEND "SHA512" CACHE STRING "Password hash algorithm, one of MD5, SHA1, RIPEMD160, SHA224, SHA256, SHA384, SHA512, defaults to SHA512") if(${PASSWORD_BACKEND} MATCHES "^MD5|SHA1|RIPEMD160|SHA224|SHA256|SHA384|SHA512$") @@ -272,7 +297,14 @@ endif() # Check for compiler flags if(NOT CMAKE_C_FLAGS) - set(CMAKE_C_FLAGS " ") + set(CMAKE_C_FLAGS "") +endif() +if(MSVC) + addCompilerFlag("/GF" "/GF" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS) + addCompilerFlag("/W3" "/W3" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS) + addCompilerFlag("/nologo" "/nologo" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS) + addCompilerFlag("/Zi" "/Zi" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS) + addCompilerFlag("/Oi" "/Oi" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS) endif() set(X_CFLAGS "") @@ -296,11 +328,27 @@ elseif(${ENABLE_ASSERT} STREQUAL "YES" A set(X_CFLAGS "${X_CFLAGS} -wd279") endif() -if(MSVC) # Remove existing -Ox flags - removeCompilerFlag("/O[0-1sS]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) - removeCompilerFlag("/O[0-1sS]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) - addCompilerFlag("/O2" "/O2" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) +if(MSVC) + # Remove all /Ox but /Oi on all, /Od on Debug and /Ox on others + removeCompilerFlag("/O[0-9a-ce-hj-zA-CE-HJ-Z]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) + removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) + removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL) + + addCompilerFlag("/Od" "/Od" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) + addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) + addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL) + + addCompilerFlag("/RTC1" "/RTC1" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + addCompilerFlag("/D_DEBUG" "/D_DEBUG" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + + addCompilerFlag("/MDd" "/MDd" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) + addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) + addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL) else() + # Remove existing -Ox flags removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE) removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) @@ -314,42 +362,47 @@ else() addCompilerFlag("-O2" "-O2" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" CMAKE_C_FLAGS_RELWITHDEBINFO) addCompilerFlag("-O2" "-O2" "${CMAKE_C_FLAGS_MINSIZEREL}" CMAKE_C_FLAGS_MINSIZEREL) endif() -endif() -if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ") # hack - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ") + # Replace -g flag with -g3 + if(${CMAKE_C_FLAGS_DEBUG} MATCHES "-g$") # hack + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ") + endif() removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ") # hack - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ") - addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) - addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) -endif() - -if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") # Add fomit-frame-pointer to Clang compilation - addCompilerFlag("-fomit-frame-pointer" "-fomit-frame-pointer" "${CMAKE_C_FLAGS}" "Release" CMAKE_C_FLAGS) -endif() + if("${CMAKE_C_FLAGS_DEBUG}" STREQUAL "") # hack + set(CMAKE_C_FLAGS_DEBUG "-g3") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3") + message(STATUS "Added -g3 flag for Debug and RelWithDebugInfo build(s)") + else() + addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) + endif() -if(${ENABLE_ASSERT} STREQUAL "YES" AND NOT MSVC) # Remove -fomit-frame-pointer in assert builds - removeCompilerFlag("-fomit-frame-pointer[ ]?" "-fomit-frame-pointer" "${CMAKE_C_FLAGS}" "Debug" CMAKE_C_FLAGS) -endif() + if(NOT ${CMAKE_C_FLAGS_RELEASE} MATCHES "D_FORTIFY_SOURCE") + cmake_push_check_state() + set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_FORTIFY_SOURCE=2") + check_c_compiler_flag("" HAVE_FORTIFY_SOURCE) + cmake_pop_check_state() + if(HAVE_FORTIFY_SOURCE) + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_FORTIFY_SOURCE=2") + set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -D_FORTIFY_SOURCE=2") + message(STATUS "Added definition _FORTIFY_SOURCE=2 for Release build") + endif() + endif() -if(NOT MSVC AND NOT ${CMAKE_C_FLAGS_RELEASE} MATCHES "D_FORTIFY_SOURCE") - cmake_push_check_state() - set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_FORTIFY_SOURCE=2") - check_c_compiler_flag("" HAVE_FORTIFY_SOURCE) - cmake_pop_check_state() - if(HAVE_FORTIFY_SOURCE) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_FORTIFY_SOURCE=2") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_FORTIFY_SOURCE=2") - set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -D_FORTIFY_SOURCE=2") - message(STATUS "Added definition _FORTIFY_SOURCE=2 for Release build") + if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") # Add fomit-frame-pointer to Clang compilation + addCompilerFlag("-fomit-frame-pointer" "-fomit-frame-pointer" "${CMAKE_C_FLAGS}" "Release" CMAKE_C_FLAGS) + endif() + + if(${ENABLE_ASSERT} STREQUAL "YES" AND NOT MSVC) # Remove -fomit-frame-pointer in assert builds + removeCompilerFlag("-fomit-frame-pointer[ ]?" "-fomit-frame-pointer" "${CMAKE_C_FLAGS}" "Debug" CMAKE_C_FLAGS) endif() endif() function(checkCompilerFlag Flag) - if(NOT ${CMAKE_C_FLAGS} MATCHES "${Flag}") + if(NOT "${CMAKE_C_FLAGS}" MATCHES "${Flag}") check_c_compiler_flag("${Flag}" COMPILE_SUCCEEDED) if(COMPILE_SUCCEEDED) message(STATUS "Test for ${Flag} succeeded") @@ -361,7 +414,7 @@ function(checkCompilerFlag Flag) endfunction() if(${ENABLE_STRICT} STREQUAL "YES") - if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") + if(${CMAKE_C_COMPILER_ID} MATCHES "^GNU|Clang|AppleClang$") checkCompilerFlag("-Werror") checkCompilerFlag("-Wall") checkCompilerFlag("-Wextra") @@ -404,12 +457,12 @@ if(${ENABLE_STRICT} STREQUAL "YES") endif() elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Intel") if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10) - add_link_options(-i_dynamic) + set(NEW_LINK_OPTIONS "${NEW_LINK_OPTIONS} -i_dynamic") else() - add_link_options(-shared-intel) + set(NEW_LINK_OPTIONS "${NEW_LINK_OPTIONS} -shared-intel") endif() if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1 AND CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 11) - add_link_options(-wd1418) + set(NEW_LINK_OPTIONS "${NEW_LINK_OPTIONS} -wd1418") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -we140 -we147") if(CMAKE_C_COMPILER_VERSION VERSION_LESS 8 OR CMAKE_C_COMPILER_VERSION VERSION_GREATER 17) @@ -429,6 +482,8 @@ if(${ENABLE_STRICT} STREQUAL "YES") elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1 OR CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 9.9 OR (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10 AND CMAKE_C_COMPILER_VERSION VERSION_EQUAL 11)) set(X_CFLAGS "${X_CFLAGS},1572,1599") endif() + elseif(MSVC) + checkCompilerFlag("/WX") endif() endif() @@ -439,13 +494,13 @@ if(NOT ${ENABLE_SANITIZER} STREQUAL "NO" checkCompilerFlag("-fno-omit-frame-pointer") add_compile_definitions(NO_ATOMIC_INSTRUCTIONS) else() - message(FATAL_ERROR " Sanitizer only supported with GCC") + message(FATAL_ERROR "Sanitizer only supported with GCC") endif() endif() message(STATUS "Test if compiler supports -Wl,-Bsymbolic-functions flag") cmake_push_check_state() -add_link_options(-Wl,-Bsymbolic-functions) +set(NEW_LINK_OPTIONS "${NEW_LINK_OPTIONS} -Wl,-Bsymbolic-functions") check_c_compiler_flag("" HAVE_WL_BSYMBOLIC_FUNCTIONS) if(NOT HAVE_WL_BSYMBOLIC_FUNCTIONS) cmake_pop_check_state() @@ -454,7 +509,8 @@ endif() set(PYTHON2 "AUTO" CACHE STRING "python2 is installed in DIR") set(PYTHON3 "AUTO" CACHE STRING "python3 is installed in DIR") message(STATUS "Checking major version of Python interpreter") -exec_program("python" ARGS "-V" OUTPUT_VARIABLE PY_OUPUT_RES RETURN_VALUE PY_RETURN_CODE) +find_program(PYTHON_INTERPRETER python) +exec_program("${PYTHON_INTERPRETER}" ARGS "-V" OUTPUT_VARIABLE PY_OUPUT_RES RETURN_VALUE PY_RETURN_CODE) if(PY_RETURN_CODE EQUAL 0 AND PY_OUPUT_RES) string(FIND "${PY_OUPUT_RES}" "Python 2" MAJOR_IS_PYTHON2) string(FIND "${PY_OUPUT_RES}" "Python 3" MAJOR_IS_PYTHON3) @@ -467,9 +523,10 @@ if(PY_RETURN_CODE EQUAL 0 AND PY_OUPUT_R set(HAVE_PYTHON3 YES) set(PY3_OUPUT_RES "${PY_OUPUT_RES}") else() - message(FATAL_ERROR " Only python versions 2 and 3 are supported by MonetDB") + message(FATAL_ERROR "Only python versions 2 and 3 are supported by MonetDB") endif() if(MAJOR_IS_PYTHON2 OR MAJOR_IS_PYTHON3) + set(HAVE_PYTHON YES) message(STATUS "Major Python interpreter: ${MAJOR_PYTHON}") endif() endif() @@ -477,9 +534,9 @@ endif() if(NOT ${PYTHON2} STREQUAL "NO") if(${PYTHON2} STREQUAL "AUTO") if(MAJOR_PYTHON EQUAL 2) - set(PYTHON2_INTERPRETER "python") + set(PYTHON2_INTERPRETER "${PYTHON_INTERPRETER}") else() - set(PYTHON2_INTERPRETER "python2") + find_program(PYTHON2_INTERPRETER python2) endif() else() set(PYTHON2_INTERPRETER "${PYTHON2}/python2") @@ -491,7 +548,7 @@ if(NOT ${PYTHON2} STREQUAL "NO") string(FIND "${PY2_CUSTOM_OUPUT_RES}" "Python 2" HAS_PYTHON2) if(HAS_PYTHON2 EQUAL -1) if(${PYTHON2} STREQUAL "YES") - message(FATAL_ERROR " Python 2 executable not found") + message(FATAL_ERROR "Python 2 executable not found") else() message(WARNING " Python 2 executable not found") endif() @@ -502,7 +559,7 @@ if(NOT ${PYTHON2} STREQUAL "NO") endif() if(NOT HAVE_PYTHON2) if(${PYTHON2} STREQUAL "YES") - message(FATAL_ERROR " Python 2 executable not found") + message(FATAL_ERROR "Python 2 executable not found") else() message(WARNING " Python 2 executable not found") endif() @@ -515,7 +572,7 @@ if(NOT ${PYTHON2} STREQUAL "NO") if(PY2_VERSION LESS 6) set(HAVE_PYTHON2 NO) if(${PYTHON2} STREQUAL "YES") - message(FATAL_ERROR " Python 2 executable is too old (<2.6)") + message(FATAL_ERROR "Python 2 executable is too old (<2.6)") else() _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list