Fix local server for multiple applications
[anna.git] / CMakeLists.txt
index ef993e9..fcaf4ad 100644 (file)
@@ -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}")
@@ -67,7 +70,7 @@ 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_COMPILER             "/usr/bin/g++")
-    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                "${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")
@@ -77,7 +80,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES Clang)
     #execute_process(COMMAND clang++ --version >/dev/null 2>/dev/null)
     add_definitions(-DIS_CLANG)
     set(CMAKE_CXX_COMPILER             "/usr/bin/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                "${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")
@@ -97,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()
@@ -108,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)
 
 # <source>
 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()
 
 # <dynamic>
@@ -131,20 +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})
+  add_library(anna_launcher_procedure_${libpath}_shared SHARED ${SRCS})
 
-  set(target_dirname build/${CMAKE_BUILD_TYPE}/lib/dynamic/launcher/${rel})
+  set(target_dirname ${CMAKE_CURRENT_SOURCE_DIR}/build/${CMAKE_BUILD_TYPE}/lib/dynamic/launcher/${rel})
 
-  set(target_basename launcher_procedure_${libpath}_shared)
+  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:
 # <example>
 SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/example)
@@ -157,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")
@@ -188,33 +195,36 @@ ENDFOREACH()
 
 
 # <test>
-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})
 
-  message(STATUS "Processing basic test at: test/${module}")
+  SUBDIRLIST(MODULES ${CMAKE_CURRENT_SOURCE_DIR}/test)
+  FOREACH(module ${MODULES})
 
-  # Sources
-  file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp)
+    message(STATUS "Processing basic test at: test/${module}")
 
-  # 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")
+    # Sources
+    file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test/${module}/*.cpp)
 
-  if(EXISTS "${libraries_file}")
-    file (STRINGS "${libraries_file}" LIBS)
-    #message(STATUS "Libraries: ${LIBS}")
-    target_link_libraries(${target} ${GTEST_BOTH_LIBRARIES} pthread ${LIBS})
-  endif()
+    # 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")
 
-  add_test(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target})
+    if(EXISTS "${libraries_file}")
+      file (STRINGS "${libraries_file}" LIBS)
+      #message(STATUS "Libraries: ${LIBS}")
+      target_link_libraries(${target} ${GTEST_BOTH_LIBRARIES} pthread ${LIBS})
+    endif()
 
-ENDFOREACH()
+    add_test(${target} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target})
+
+  ENDFOREACH()
+ENDIF(GTest_FOUND)
 
 
 # Install
@@ -234,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)