From c49b48d0ac51d570799736106d1f075b4fdb82d5 Mon Sep 17 00:00:00 2001
From: Sergey Yakubov <sergey.yakubov@desy.de>
Date: Wed, 3 Jan 2018 16:11:12 +0100
Subject: [PATCH] refactor so that only single library and single header were
 needed, add independent Makefile and CMakeLists to example. Add install
 commands

---
 CMakeLists.txt                                |  2 --
 common/cpp/CMakeLists.txt                     |  4 ++-
 examples/worker/process_folder/CMakeLists.txt | 21 +++++++++-------
 .../process_folder/CMakeLists_separate.in     | 22 ++++++++++++++++
 examples/worker/process_folder/Makefile.in    | 25 +++++++++++++++++++
 .../worker/process_folder/process_folder.cpp  |  2 +-
 producer/api/CMakeLists.txt                   |  3 +--
 .../read_file_content/CMakeLists.txt          |  5 ++--
 .../read_files_in_folder/CMakeLists.txt       |  6 ++---
 .../worker/connect_multithread/CMakeLists.txt |  2 +-
 tests/worker/next_multithread/CMakeLists.txt  |  2 +-
 worker/api/cpp/CMakeLists.txt                 | 18 +++++++------
 worker/api/cpp/include/hidra2_worker.h        |  6 +++++
 worker/api/cpp/include/worker/data_broker.h   |  3 ++-
 14 files changed, 91 insertions(+), 30 deletions(-)
 create mode 100644 examples/worker/process_folder/CMakeLists_separate.in
 create mode 100644 examples/worker/process_folder/Makefile.in
 create mode 100644 worker/api/cpp/include/hidra2_worker.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 78e4d6160..6ee7afc36 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,8 +7,6 @@ ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
 ENDIF(WIN32)
 
-message(STATUS ${CMAKE_CXX_COMPILER_ID})
-
 option(BUILD_TESTS "Uses googletest to build tests" OFF)
 option(BUILD_INTEGRATION_TESTS "Include integration tests (CMAKE >3.7 is needed)" OFF)
 option(BUILD_DOCS "Uses doxygen to build the documentaion" OFF)
diff --git a/common/cpp/CMakeLists.txt b/common/cpp/CMakeLists.txt
index 0cf8083f6..3d3950be1 100644
--- a/common/cpp/CMakeLists.txt
+++ b/common/cpp/CMakeLists.txt
@@ -15,7 +15,9 @@ ENDIF(WIN32)
 ################################
 # Library
 ################################
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} OBJECT ${SOURCE_FILES})
 #add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
 target_include_directories(${TARGET_NAME} PUBLIC include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
+
+install(DIRECTORY include/ DESTINATION include)
diff --git a/examples/worker/process_folder/CMakeLists.txt b/examples/worker/process_folder/CMakeLists.txt
index 91328be81..4ec508a10 100644
--- a/examples/worker/process_folder/CMakeLists.txt
+++ b/examples/worker/process_folder/CMakeLists.txt
@@ -1,15 +1,8 @@
 set(TARGET_NAME worker_processfolder)
 set(SOURCE_FILES process_folder.cpp)
 
-
-################################
-# Executable and link
-################################
-#if (CMAKE_BUILD_TYPE STREQUAL "Release")
-#set(CMAKE_FIND_STATIC FIRST)
-#endif()
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} common worker-api ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} hidra2-worker ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 #use expression generator to get rid of VS adding Debug/Release folders
 set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
@@ -22,6 +15,16 @@ message (STATUS  ${VAR})
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
 endif()
-#set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-static-libstdc++")
 
 add_example_test("${TARGET_NAME}")
+
+
+set (dir examples/worker/process_folder)
+install(TARGETS ${TARGET_NAME} DESTINATION "${dir}")
+install(FILES ${SOURCE_FILES} DESTINATION "${dir}")
+
+configure_file(CMakeLists_separate.in CMakeLists_separate.txt @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeLists_separate.txt DESTINATION "${dir}" RENAME CMakeLists.txt)
+
+configure_file(Makefile.in Makefile_LINUX @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Makefile_LINUX DESTINATION "${dir}")
diff --git a/examples/worker/process_folder/CMakeLists_separate.in b/examples/worker/process_folder/CMakeLists_separate.in
new file mode 100644
index 000000000..cd02b336c
--- /dev/null
+++ b/examples/worker/process_folder/CMakeLists_separate.in
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(worker_processfolder)
+
+set(CMAKE_CXX_STANDARD 11)
+
+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
+ENDIF()
+
+find_package (Threads)
+
+set(TARGET_NAME ${CMAKE_PROJECT_NAME})
+
+set(SOURCE_FILES process_folder.cpp)
+
+link_directories(@CMAKE_INSTALL_PREFIX@/lib)
+
+add_executable(${TARGET_NAME} ${SOURCE_FILES})
+target_include_directories(${TARGET_NAME} PUBLIC @CMAKE_INSTALL_PREFIX@/include)
+target_link_libraries(${TARGET_NAME} hidra2-worker ${CMAKE_THREAD_LIBS_INIT})
+
diff --git a/examples/worker/process_folder/Makefile.in b/examples/worker/process_folder/Makefile.in
new file mode 100644
index 000000000..f71764db4
--- /dev/null
+++ b/examples/worker/process_folder/Makefile.in
@@ -0,0 +1,25 @@
+PROGRAM=worker_processfolder
+
+CXX=g++
+CXXFLAGS=-std=c++11
+LDFLAGS=-pthread  -static-libgcc -static-libstdc++
+LIBS=-L @CMAKE_INSTALL_PREFIX@/lib -lhidra2-worker
+INCLUDE=@CMAKE_INSTALL_PREFIX@/include
+RM=rm -f
+
+SRCS=process_folder.cpp
+OBJS=$(subst .cpp,.o,$(SRCS))
+
+all: $(PROGRAM)
+
+$(PROGRAM): $(OBJS)
+	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -I$(INCLUDE) -c -o $@ $<
+
+clean:
+	$(RM) $(OBJS)
+
+distclean: clean
+	$(RM) $(PROGRAM)
diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp
index c2c0b0587..54935ab54 100644
--- a/examples/worker/process_folder/process_folder.cpp
+++ b/examples/worker/process_folder/process_folder.cpp
@@ -6,7 +6,7 @@
 #include <chrono>
 #include <iomanip>
 
-#include "worker/data_broker.h"
+#include "hidra2_worker.h"
 
 using hidra2::WorkerErrorCode;
 using std::chrono::high_resolution_clock;
diff --git a/producer/api/CMakeLists.txt b/producer/api/CMakeLists.txt
index b09e6b457..4bd5421db 100644
--- a/producer/api/CMakeLists.txt
+++ b/producer/api/CMakeLists.txt
@@ -5,9 +5,8 @@ set(SOURCE_FILES src/producer/producer.cpp include/producer/producer.h)
 ################################
 # Library
 ################################
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:common>)
 target_include_directories(${TARGET_NAME} PUBLIC include)
-target_link_libraries(${TARGET_NAME} common)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/system_io/read_file_content/CMakeLists.txt b/tests/system_io/read_file_content/CMakeLists.txt
index 21ad081c5..55a84f07f 100644
--- a/tests/system_io/read_file_content/CMakeLists.txt
+++ b/tests/system_io/read_file_content/CMakeLists.txt
@@ -5,8 +5,9 @@ set(SOURCE_FILES read_file_content.cpp)
 ################################
 # Executable and link
 ################################
-add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common )
+add_executable(${TARGET_NAME} ${SOURCE_FILES} $<TARGET_OBJECTS:common> )
+target_link_libraries(${TARGET_NAME} test_common)
+target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/common/cpp/include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/system_io/read_files_in_folder/CMakeLists.txt b/tests/system_io/read_files_in_folder/CMakeLists.txt
index d8019e0e8..cb22f8bd7 100644
--- a/tests/system_io/read_files_in_folder/CMakeLists.txt
+++ b/tests/system_io/read_files_in_folder/CMakeLists.txt
@@ -5,9 +5,9 @@ set(SOURCE_FILES read_folder_content.cpp)
 ################################
 # Executable and link
 ################################
-add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common)
-#target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/tests/common/cpp/include)
+add_executable(${TARGET_NAME} ${SOURCE_FILES}  $<TARGET_OBJECTS:common>)
+target_link_libraries(${TARGET_NAME} test_common)
+target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/common/cpp/include)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 ################################
diff --git a/tests/worker/connect_multithread/CMakeLists.txt b/tests/worker/connect_multithread/CMakeLists.txt
index 8dc1b8ae7..31364d77e 100644
--- a/tests/worker/connect_multithread/CMakeLists.txt
+++ b/tests/worker/connect_multithread/CMakeLists.txt
@@ -6,7 +6,7 @@ set(SOURCE_FILES content_multithread.cpp)
 # Executable and link
 ################################
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common worker-api ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} test_common hidra2-worker ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
diff --git a/tests/worker/next_multithread/CMakeLists.txt b/tests/worker/next_multithread/CMakeLists.txt
index 13de6686b..a386726ec 100644
--- a/tests/worker/next_multithread/CMakeLists.txt
+++ b/tests/worker/next_multithread/CMakeLists.txt
@@ -6,7 +6,7 @@ set(SOURCE_FILES next_multithread.cpp)
 # Executable and link
 ################################
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} test_common common worker-api  ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} test_common hidra2-worker  ${CMAKE_THREAD_LIBS_INIT})
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 if (CMAKE_COMPILER_IS_GNUCXX)
     set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage")
diff --git a/worker/api/cpp/CMakeLists.txt b/worker/api/cpp/CMakeLists.txt
index da84ebcfb..da6376a3f 100644
--- a/worker/api/cpp/CMakeLists.txt
+++ b/worker/api/cpp/CMakeLists.txt
@@ -1,18 +1,18 @@
-set(TARGET_NAME worker-api)
+set(TARGET_NAME hidra2-worker)
 
-set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h)
+set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h)
 
 
 ################################
 # Library
 ################################
-#add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
-add_library(${TARGET_NAME} STATIC ${SOURCE_FILES})
+add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:common>)
 
-target_include_directories(${TARGET_NAME} PUBLIC include)
-target_link_libraries(${TARGET_NAME} common)
+target_include_directories(${TARGET_NAME} PUBLIC include ${CMAKE_SOURCE_DIR}/common/cpp/include)
+#target_link_libraries(${TARGET_NAME} $<TARGET_OBJECTS:common>)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
+
 ################################
 # Testing
 ################################
@@ -21,4 +21,8 @@ set(TEST_SOURCE_FILES unittests/test_worker_api.cpp
 set(TEST_LIBRARIES "${TARGET_NAME}")
 
 
-gtest(${TARGET_NAME} "${TEST_SOURCE_FILES}" "${TEST_LIBRARIES}")
\ No newline at end of file
+gtest(${TARGET_NAME} "${TEST_SOURCE_FILES}" "${TEST_LIBRARIES}")
+
+install(TARGETS ${TARGET_NAME} DESTINATION lib)
+
+install(DIRECTORY include/ DESTINATION include)
diff --git a/worker/api/cpp/include/hidra2_worker.h b/worker/api/cpp/include/hidra2_worker.h
new file mode 100644
index 000000000..f919a5496
--- /dev/null
+++ b/worker/api/cpp/include/hidra2_worker.h
@@ -0,0 +1,6 @@
+#ifndef HIDRA2_HIDRA2_WORKER_H
+#define HIDRA2_HIDRA2_WORKER_H
+
+#include "worker/data_broker.h"
+
+#endif //HIDRA2_HIDRA2_WORKER_H
diff --git a/worker/api/cpp/include/worker/data_broker.h b/worker/api/cpp/include/worker/data_broker.h
index 4383aeeb2..57393eab7 100644
--- a/worker/api/cpp/include/worker/data_broker.h
+++ b/worker/api/cpp/include/worker/data_broker.h
@@ -3,7 +3,8 @@
 
 #include <memory>
 #include <string>
-#include <common/file_info.h>
+
+#include "common/file_info.h"
 
 namespace hidra2 {
 
-- 
GitLab