X-Git-Url: https://git.teslayout.com/public/public/public/?p=anna.git;a=blobdiff_plain;f=CMakeLists.txt;h=e35da4bcacd0c72e1f8b0029f944cd1af3a7f45e;hp=a4bc412281da110aaaa4033db4256286ef6d4f38;hb=HEAD;hpb=ec9c52668a43af61eb0c4e1f72bc69db78378e86 diff --git a/CMakeLists.txt b/CMakeLists.txt index a4bc412..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) @@ -23,9 +26,9 @@ 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}") @@ -63,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() @@ -90,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() @@ -101,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() # @@ -124,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) @@ -148,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") @@ -179,42 +195,48 @@ ENDFOREACH() # -enable_testing() -find_package(GTest REQUIRED) -include_directories(${GTEST_INCLUDE_DIRS}) +find_package(GTest) +IF(GTest_FOUND) -SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test) -FOREACH(module ${MODULES}) + enable_testing() + include_directories(${GTEST_INCLUDE_DIRS}) + + SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test) + FOREACH(module ${MODULES}) - message(STATUS "Processing basic test at: test/${module}") + message(STATUS "Processing basic test at: test/${module}") - # Sources - file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp) + # Sources + file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp) - # Executable - set(target "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") + # 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} ${GTEST_BOTH_LIBRARIES} pthread ${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(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}) + add_test(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}) -ENDFOREACH() + ENDFOREACH() +ENDIF(GTest_FOUND) # Install +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) +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) @@ -222,11 +244,11 @@ 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)