X-Git-Url: https://git.teslayout.com/public/public/public/?p=anna.git;a=blobdiff_plain;f=CMakeLists.txt;h=e35da4bcacd0c72e1f8b0029f944cd1af3a7f45e;hp=7acd9b10812a1fc753e02a379978882f3d06f83e;hb=HEAD;hpb=4b79e398beb48eaa5c96b914b84e9fe77dea9da4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 7acd9b1..fcaf4ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,10 @@ enable_language(C CXX) # Project version set(VERSION_MAJOR 1) set(VERSION_MINOR 0) -set(VERSION_PATCH 0) +set(VERSION_PATCH 6) + +# Dynamic libraries not linked to build tree: +set(CMAKE_SKIP_RPATH TRUE) # Build type: if(NOT CMAKE_BUILD_TYPE) @@ -20,11 +23,12 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE) +message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") # Build output directory: -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY build/${CMAKE_BUILD_TYPE}/bin) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY build/${CMAKE_BUILD_TYPE}/lib) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY build/${CMAKE_BUILD_TYPE}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/lib) message(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY is ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") message(STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY is ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") message(STATUS "CMAKE_ARCHIVE_OUTPUT_DIRECTORY is ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") @@ -62,18 +66,25 @@ message(STATUS "The c++ compiler is ${CMAKE_CXX_COMPILER}") message(STATUS "The build type is ${CMAKE_BUILD_TYPE}") # Example how to set c++ compiler flags for GNU +message(STATUS "CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}") if(CMAKE_CXX_COMPILER_ID MATCHES GNU) #execute_process(COMMAND g++ --version >/dev/null 2>/dev/null) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-unknown-pragmas -Wno-sign-compare -Woverloaded-virtual -Wwrite-strings -Wno-unused") - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") - set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_COMPILER "/usr/bin/g++") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wno-deprecated -Wwrite-strings -Wno-unknown-pragmas -Wno-sign-compare -Wno-maybe-uninitialized -Wno-unused -Wno-reorder") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") + set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") elseif(CMAKE_CXX_COMPILER_ID MATCHES Clang) #execute_process(COMMAND clang++ --version >/dev/null 2>/dev/null) add_definitions(-DIS_CLANG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-unknown-pragmas -Wno-sign-compare -Woverloaded-virtual -Wwrite-strings -Wno-unused -Wno-parentheses-equality") - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") - set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_COMPILER "/usr/bin/clang++") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wno-deprecated -Wwrite-strings -Wno-unknown-pragmas -Wno-sign-compare -Wno-maybe-uninitialized -Wno-unused -Wno-reorder -Wno-parentheses-equality") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3") + set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") endif() @@ -89,6 +100,15 @@ MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) SET(dirlist "") FOREACH(child ${children}) + + # EXCLUDE DATABASE RESOURCES (-DSKIP_DATABASE_BUILD) + if(SKIP_DATABASE_BUILD) + string(REGEX MATCH "dbms|dbos" DATABASE ${child}) + IF(DATABASE) + CONTINUE() + ENDIF() + ENDIF() + IF(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) ENDIF() @@ -100,17 +120,17 @@ ENDMACRO() add_definitions(-DLDAP_DEPRECATED) # General includes: -include_directories(include/anna) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(/usr/include/libxml2) -include_directories(/usr/lib/oracle/12.1/client64/include) +include_directories(/usr/include/oracle/19.6/client64) # SUBDIRLIST(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR}/source) FOREACH(subdir ${SUBDIRS}) message(STATUS "Processing library at: source/${subdir}") file(GLOB_RECURSE SRCS source/${subdir}/*.cpp) - add_library(${subdir}_static STATIC ${SRCS}) - add_library(${subdir}_shared SHARED ${SRCS}) + add_library(anna_${subdir}_static STATIC ${SRCS}) + add_library(anna_${subdir}_shared SHARED ${SRCS}) ENDFOREACH() # @@ -123,18 +143,15 @@ FOREACH(procedure ${DYNAMIC_PROCEDURES}) message(STATUS "Processing dynamic library at: dynamic/launcher/${rel}") file(GLOB_RECURSE SRCS dynamic/launcher/${rel}/*.cpp) - add_library(launcher_procedure_${libpath}_shared SHARED ${SRCS}) - set(target_dirname build/${CMAKE_BUILD_TYPE}/lib/dynamic_launcher/${libpath}) - set(target_basename launcher_procedure_${libpath}_shared) + add_library(anna_launcher_procedure_${libpath}_shared SHARED ${SRCS}) + + set(target_dirname ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/lib/dynamic/launcher/${rel}) + + set(target_basename anna_launcher_procedure_${libpath}_shared) set_target_properties(${target_basename} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${target_dirname}) #file(RENAME ${target_dirname}/lib${target_basename}.so ${target_dirname}/libprocedure.so) ENDFOREACH() -# Linking example: -#file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/example/core/genLogon/*.cpp) -#add_executable(genLogon ${SRCS}) -#target_link_libraries(genLogon core_static app_static core_static test_static xml_static io_static crypto xml2 rt) - # Generalization: # SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/example) @@ -147,8 +164,8 @@ FOREACH(module ${MODULES}) file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/example/${module}/${subdir}/*.cpp) # Executable - set(target "${module}_${subdir}") - add_executable(${target} "${SRCS}") + set(target "anna_${module}_${subdir}") + add_executable(${target} ${SRCS}) set_target_properties(${target} PROPERTIES LINKER_LANGUAGE CXX) set(libraries_file "${CMAKE_CURRENT_SOURCE_DIR}/example/${module}/${subdir}/libraries.txt") set(includes_file "${CMAKE_CURRENT_SOURCE_DIR}/example/${module}/${subdir}/includes.txt") @@ -178,49 +195,60 @@ ENDFOREACH() # -find_package(Boost COMPONENTS system filesystem REQUIRED) -SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test) -FOREACH(module ${MODULES}) +find_package(GTest) +IF(GTest_FOUND) - message(STATUS "Processing basic test at: test/${module}") + enable_testing() + include_directories(${GTEST_INCLUDE_DIRS}) - # Sources - file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp) + SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test) + FOREACH(module ${MODULES}) - # Executable - set(target "${module}") - find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED) - add_executable(${target} "${SRCS}") - set_target_properties(${target} PROPERTIES LINKER_LANGUAGE CXX) + message(STATUS "Processing basic test at: test/${module}") + # Sources + file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp) - set(libraries_file "${CMAKE_CURRENT_SOURCE_DIR}/example/${module}/${subdir}/libraries.txt") + # Executable + set(target "anna_test_${module}") + add_executable(${target} ${SRCS}) + target_link_libraries(${target} ${GTEST_BOTH_LIBRARIES} pthread) + set(libraries_file "${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/libraries.txt") - if(EXISTS "${libraries_file}") - file (STRINGS "${libraries_file}" LIBS) - #message(STATUS "Libraries: ${LIBS}") - target_link_libraries(${target} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${LIBS}) - endif() + if(EXISTS "${libraries_file}") + file (STRINGS "${libraries_file}" LIBS) + #message(STATUS "Libraries: ${LIBS}") + target_link_libraries(${target} ${GTEST_BOTH_LIBRARIES} pthread ${LIBS}) + endif() - add_test(tester tester) + add_test(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}) -ENDFOREACH() + ENDFOREACH() +ENDIF(GTest_FOUND) # Install -# see http://stackoverflow.com/questions/14084759/keep-a-single-files-permissions-when-using-install-in-cmake -####set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/deploy") -####install(FILES build/lib/libtools_static.a DESTINATION lib) -####install(PROGRAMS build/lib/libtools_shared.so DESTINATION lib) -####install(PROGRAMS build/bin/hello DESTINATION bin) +SET(MY_OWN_INSTALL_PREFIX "/opt/anna" CACHE PATH "Prefix prepended to install directories") +SET(CMAKE_INSTALL_PREFIX "${MY_OWN_INSTALL_PREFIX}" CACHE INTERNAL "Prefix prepended to install directories" FORCE) + +message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") +# Binaries: +file(GLOB_RECURSE BINARIES ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/bin/*) +install(PROGRAMS ${BINARIES} DESTINATION bin) +# Headers: +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/anna DESTINATION include) +# Libraries: +file(GLOB_RECURSE LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/lib/*) +install(FILES ${LIBRARIES} DESTINATION lib) + # Add target for API documentation with Doxygen find_package(Doxygen) -if(DOXYGEN_FOUND) -add_custom_target(doc - ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/docs/doxygen/Doxyfile - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/doxygen - COMMENT "Generating API documentation with Doxygen" VERBATIM -) -endif(DOXYGEN_FOUND) +IF(Doxygen_FOUND) + add_custom_target(doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/docs/doxygen/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/doxygen + COMMENT "Generating API documentation with Doxygen" VERBATIM + ) +ENDIF(Doxygen_FOUND)