From 2dcfdafcbd035f9a5701a4aa58cdfb2a7aab5eed Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Fri, 28 Aug 2020 12:32:54 +0200 Subject: [PATCH 1/6] CMake: Use BUILD_SHARED_LIBS instead of TANGO_BUILD_SHARED for windows In 4791f0dd (Rework static/shared variants into a configure-time build-switch (#688), 2020-05-28) the option TANGO_BUILD_SHARED was added to select a shared or static library. Internally BUILD_SHARED_LIBS was already set to the same value. Switching to BUILD_SHARED_LIBS and dropping TANGO_BUILD_SHARED allows us to replace a specialized option with the default one [1]. [1]: https://cmake.org/cmake/help/v3.18/command/add_library.html#command:add_library --- CMakeLists.txt | 1 + INSTALL.md | 1 + appveyor.yml | 4 ++-- configure/cmake_win.cmake | 7 ++----- configure/cmake_win_defs.cmake | 3 +-- configure/cpack_win.cmake | 2 +- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 445cc09ac..d86908801 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) include(CTest) option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF) +option(BUILD_SHARED_LIBS "Build a shared library instead of static" ON) option(USE_PCH "Use precompiled header for server/tango.h" OFF) if (USE_PCH AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "GNU|MSVC|Clang")) diff --git a/INSTALL.md b/INSTALL.md index 009d3559d..cc6f93245 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -29,6 +29,7 @@ - `-DTANGO_USE_USING_NAMESPACE=` choose `OFF` for modern builds - `-DUSE_PCH=` - `-DBUILD_TESTING=` Build the test suite (`ON` by default) +- `-DBUILD_SHARED_LIBS=` Build tango as shared library (`ON` by default) Typical output: diff --git a/appveyor.yml b/appveyor.yml index a6582ae0a..3204e954b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -126,10 +126,10 @@ install: #- cmd: cmake -G "%CMAKE_GENERATOR%" -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE - # Static builds - cmd: cd c:/projects/static_build - - cmd: cmake -G "%CMAKE_GENERATOR%" -DTANGO_BUILD_SHARED=OFF -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DCMAKE_CXX_FLAGS_RELEASE="/MT" -DCMAKE_CXX_FLAGS_DEBUG="/MTd" -DIDL_BASE="%IDL_BASE%" -DOMNI_BASE="%OMNI_BASE%" -DZMQ_BASE="%ZMQ_BASE%" -DCPPZMQ_BASE="%CPPZMQ_BASE%" -DPTHREAD_WIN=%PTHREAD_WIN% -DUSE_PCH=%USE_PCH% -DBUILD_TESTING=OFF ../cppTango + - cmd: cmake -G "%CMAKE_GENERATOR%" -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DCMAKE_CXX_FLAGS_RELEASE="/MT" -DCMAKE_CXX_FLAGS_DEBUG="/MTd" -DIDL_BASE="%IDL_BASE%" -DOMNI_BASE="%OMNI_BASE%" -DZMQ_BASE="%ZMQ_BASE%" -DCPPZMQ_BASE="%CPPZMQ_BASE%" -DPTHREAD_WIN=%PTHREAD_WIN% -DUSE_PCH=%USE_PCH% -DBUILD_TESTING=OFF ../cppTango # Dynamic builds - cmd: cd c:/projects/dynamic_build - - cmd: cmake -G "%CMAKE_GENERATOR%" -DTANGO_BUILD_SHARED=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DIDL_BASE="%IDL_BASE%" -DOMNI_BASE="%OMNI_BASE%" -DZMQ_BASE="%ZMQ_BASE%" -DCPPZMQ_BASE="%CPPZMQ_BASE%" -DPTHREAD_WIN=%PTHREAD_WIN% -DUSE_PCH=OFF -DBUILD_TESTING=OFF ../cppTango + - cmd: cmake -G "%CMAKE_GENERATOR%" -DBUILD_SHARED_LIBS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DIDL_BASE="%IDL_BASE%" -DOMNI_BASE="%OMNI_BASE%" -DZMQ_BASE="%ZMQ_BASE%" -DCPPZMQ_BASE="%CPPZMQ_BASE%" -DPTHREAD_WIN=%PTHREAD_WIN% -DUSE_PCH=OFF -DBUILD_TESTING=OFF ../cppTango clone_folder: C:\projects\cppTango diff --git a/configure/cmake_win.cmake b/configure/cmake_win.cmake index 915d721cc..8cb3a3a96 100644 --- a/configure/cmake_win.cmake +++ b/configure/cmake_win.cmake @@ -13,10 +13,7 @@ endif() # The name without the variant tag (i.e. -static) set(TANGO_LIBRARY_OUTPUT_NAME ${TANGO_LIBRARY_NAME}) -if (TANGO_BUILD_SHARED) - # https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html - set(BUILD_SHARED_LIBS ON) -else() +if(NOT BUILD_SHARED_LIBS) set(TANGO_LIBRARY_NAME ${TANGO_LIBRARY_NAME}-static) endif() @@ -46,7 +43,7 @@ set_target_properties(${TANGO_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS target_compile_options(${TANGO_LIBRARY_NAME} PUBLIC ${ZMQ_PKG_CFLAGS_OTHER} ${OMNIORB_PKG_CFLAGS_OTHER} ${OMNICOS_PKG_CFLAGS_OTHER} ${OMNIDYN_PKG_CFLAGS_OTHER}) -if(TANGO_BUILD_SHARED) +if(BUILD_SHARED_LIBS) target_link_libraries(${TANGO_LIBRARY_NAME} PUBLIC ${WIN32_LIBS} ${OMNIORB_PKG_LIBRARIES_DYN} ${ZMQ_PKG_LIBRARIES_DYN} ${PTHREAD_WIN_PKG_LIBRARIES_DYN} ${CMAKE_DL_LIBS}) else() target_link_libraries(${TANGO_LIBRARY_NAME} PUBLIC ${WIN32_LIBS} ${OMNIORB_PKG_LIBRARIES_STA} ${ZMQ_PKG_LIBRARIES_STA} ${PTHREAD_WIN_PKG_LIBRARIES_STA} ${CMAKE_DL_LIBS}) diff --git a/configure/cmake_win_defs.cmake b/configure/cmake_win_defs.cmake index a058870ba..27502aa47 100644 --- a/configure/cmake_win_defs.cmake +++ b/configure/cmake_win_defs.cmake @@ -1,5 +1,4 @@ #definitions and preprocessor -option(TANGO_BUILD_SHARED "Build a shared library instead of static" ON) option(TANGO_INSTALL_DEPENDENCIES "Install the libraries that tango depends on" ON) add_definitions(-D_WIN32) @@ -46,7 +45,7 @@ if(CMAKE_CL_64) endif(CMAKE_CL_64) message("dyn_defs: ${dyn_defs}") -if (TANGO_BUILD_SHARED) +if(BUILD_SHARED_LIBS) message("selected dynamic-library build") set(windows_defs ${dyn_defs}) else() diff --git a/configure/cpack_win.cmake b/configure/cpack_win.cmake index dfc19f45c..69747d9b2 100644 --- a/configure/cpack_win.cmake +++ b/configure/cpack_win.cmake @@ -7,7 +7,7 @@ else() set(ARCH_TAG "x86") endif() -if (TANGO_BUILD_SHARED) +if(BUILD_SHARED_LIBS) set(VARIANT_TAG "shared") else() set(VARIANT_TAG "static") From e978d239f633c6619628d4c0ebdddf7c592906bb Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Fri, 28 Aug 2020 12:50:36 +0200 Subject: [PATCH 2/6] configure/cmake_linux.cmake: Fix CURL variable checking It does not make sense to check if(A) ... elseif(A) ... endif() so let's change the elseif to an else. --- configure/cmake_linux.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure/cmake_linux.cmake b/configure/cmake_linux.cmake index 945e2d199..df95a56b7 100644 --- a/configure/cmake_linux.cmake +++ b/configure/cmake_linux.cmake @@ -53,6 +53,6 @@ if(CURL) COMMAND ${CURL} -v -T ${CPACK_PACKAGE_FILE_NAME}.deb -u$ENV{BINTRAY_USER_NAME}:$ENV{BINTRAY_API_KEY} \"https://api.bintray.com/content/tango-controls/debian/cppTango/${LIBRARY_VERSION}/pool/main/libt/${LINUX_FLAVOUR}/${CPACK_PACKAGE_FILE_NAME}.deb\;deb_distribution=${LINUX_FLAVOUR}\;deb_component=main\;deb_architecture=${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}\;publish=1\;override=1\" WORKING_DIRECTORY ${PROJECT_BINARY_DIR} DEPENDS ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.deb) -elseif(CURL) +else(CURL) message(WARNING "curl was not found deploy won't be possible") endif(CURL) From 02d4a62d5c828099c20c091fec9f190160fc95c3 Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Fri, 28 Aug 2020 12:56:07 +0200 Subject: [PATCH 3/6] CMake: Remove legacy argument for else()/endif() This is confusing and legacy according to [1]: Per legacy, the else() and endif() commands admit an optional argument. If used, it must be a verbatim repeat of the argument of the opening if command. [1]: https://cmake.org/cmake/help/v3.18/command/if.html#command:if --- CMakeLists.txt | 4 ++-- configure/CMakeLists.txt | 40 +++++++++++++++++----------------- configure/cmake_linux.cmake | 6 ++--- configure/cmake_win.cmake | 22 +++++++++---------- configure/cmake_win_defs.cmake | 8 +++---- configure/cpack_linux.cmake | 2 +- cppapi/server/CMakeLists.txt | 4 ++-- log4tango/config/config.cmake | 6 ++--- log4tango/src/CMakeLists.txt | 4 ++-- log4tango/tests/CMakeLists.txt | 4 ++-- 10 files changed, 50 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d86908801..7791986f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,8 +59,8 @@ endif() if(WIN32) include(configure/cmake_win.cmake) include(configure/cpack_win.cmake) -else(WIN32) +else() include(configure/cmake_linux.cmake) -endif(WIN32) +endif() include(CPack) diff --git a/configure/CMakeLists.txt b/configure/CMakeLists.txt index 74aef5fb3..66c952f26 100644 --- a/configure/CMakeLists.txt +++ b/configure/CMakeLists.txt @@ -11,12 +11,12 @@ set(PLATFORM 32) if(WIN32) if(CMAKE_CL_64) set(PLATFORM 64) - endif(CMAKE_CL_64) -else(WIN32) + endif() +else() if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) set(PLATFORM 64) endif() -endif(WIN32) +endif() message(STATUS "CMake: version ${CMAKE_VERSION}") message(STATUS "Target platform: ${CMAKE_SYSTEM_NAME} ${PLATFORM}-bit") @@ -33,14 +33,14 @@ endif() if(CPPZMQ_BASE) message("Using CPPZMQ_BASE=${CPPZMQ_BASE}") include_directories(${CPPZMQ_BASE}/include) -endif(CPPZMQ_BASE) +endif() if(IDL_BASE) message("Using IDL_BASEIDL_BASE=${IDL_BASE}") set(IDL_PKG_INCLUDE_DIRS ${IDL_BASE}/include) -else(IDL_BASE) +else() pkg_search_module(IDL_PKG REQUIRED tangoidl) -endif(IDL_BASE) +endif() if(OMNI_BASE) message("Using OMNI_BASE=${OMNI_BASE}") @@ -56,13 +56,13 @@ if(OMNI_BASE) set(OMNIORB_PKG_LIBRARIES_DYN "omniORB4_rt.lib;omniDynamic4_rt.lib;omnithread_rt.lib;COS4_rt.lib") set(OMNIORB_PKG_LIBRARIES_STA "omniORB4.lib;omniDynamic4.lib;omnithread.lib;COS4.lib") endif() - else(WIN32) + else() set(OMNIIDL_PATH ${OMNI_BASE}/bin/) include_directories(${OMNI_BASE}/include) link_directories(${OMNI_BASE}/lib) set(OMNIORB_PKG_LIBRARIES "-lomniORB4 -lomnithread -lCOS4 -lomniDynamic4") - endif(WIN32) -else(OMNI_BASE) + endif() +else() #CORBA pkg_search_module(OMNIORB_PKG REQUIRED omniORB4) #COS @@ -72,7 +72,7 @@ else(OMNI_BASE) if(NOT OMNIORB_PKG_FOUND) message(FATAL_ERROR "omniORB4 library is required for Tango") endif() -endif(OMNI_BASE) +endif() if(ZMQ_BASE) message("Using ZMQ_BASE=${ZMQ_BASE}") @@ -86,31 +86,31 @@ if(ZMQ_BASE) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(ZMQ_PKG_LIBRARIES_STA "libzmq-v140-mt-sgd-4_0_5.lib") set(ZMQ_PKG_LIBRARIES_DYN "libzmq-v140-mt-gd-4_0_5.lib") - else(CMAKE_BUILD_TYPE STREQUAL "Debug") + else() set(ZMQ_PKG_LIBRARIES_STA "libzmq-v140-mt-s-4_0_5.lib") set(ZMQ_PKG_LIBRARIES_DYN "libzmq-v140-mt-4_0_5.lib") - endif(CMAKE_BUILD_TYPE STREQUAL "Debug") - endif(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v140") + endif() + endif() if(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v141") if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(ZMQ_PKG_LIBRARIES_STA "libzmq-v141-mt-sgd-4_0_5.lib") set(ZMQ_PKG_LIBRARIES_DYN "libzmq-v141-mt-gd-4_0_5.lib") - else(CMAKE_BUILD_TYPE STREQUAL "Debug") + else() set(ZMQ_PKG_LIBRARIES_STA "libzmq-v141-mt-s-4_0_5.lib") set(ZMQ_PKG_LIBRARIES_DYN "libzmq-v141-mt-4_0_5.lib") - endif(CMAKE_BUILD_TYPE STREQUAL "Debug") - endif(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v141") + endif() + endif() else() set(ZMQ_PKG_LIBRARIES "-lzmq") link_directories(${ZMQ_BASE}/lib) endif() include_directories(${ZMQ_BASE}/include) -else(ZMQ_BASE) +else() pkg_search_module(ZMQ_PKG REQUIRED libzmq) if(NOT ZMQ_PKG_FOUND) message(FATAL_ERROR "ZMQ library is required for Tango") endif() -endif(ZMQ_BASE) +endif() if(PTHREAD_WIN) message("Using PTHREAD_WIN=${PTHREAD_WIN}") @@ -124,7 +124,7 @@ if(PTHREAD_WIN) set(PTHREAD_WIN_PKG_LIBRARIES_DYN "pthreadVC2.lib") set(PTHREAD_WIN_PKG_LIBRARIES_STA "pthreadVC2-s.lib") endif() -endif(PTHREAD_WIN) +endif() ##### Ensure zmq.hpp file is present ##### include(CheckIncludeFileCXX) @@ -152,7 +152,7 @@ if(NOT WIN32) else() set(TANGO_ZMQ_HAS_DISCONNECT TRUE) message(STATUS "Check if zmq::socket has a disconnect method: ${TANGO_ZMQ_HAS_DISCONNECT} (hardcoded)") -endif(NOT WIN32) +endif() message("Verifying ${OMNIIDL_PATH}omniidl") if(WIN32) diff --git a/configure/cmake_linux.cmake b/configure/cmake_linux.cmake index df95a56b7..93d91f05c 100644 --- a/configure/cmake_linux.cmake +++ b/configure/cmake_linux.cmake @@ -42,7 +42,7 @@ find_program(LSB_RELEASE lsb_release) if(NOT LSB_RELEASE) message(STATUS "Can not find lsb_release in your path, default to jessie.") set(LINUX_FLAVOUR jessie) -endif(NOT LSB_RELEASE) +endif() execute_process(COMMAND ${LSB_RELEASE} -cs OUTPUT_VARIABLE LINUX_FLAVOUR OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -53,6 +53,6 @@ if(CURL) COMMAND ${CURL} -v -T ${CPACK_PACKAGE_FILE_NAME}.deb -u$ENV{BINTRAY_USER_NAME}:$ENV{BINTRAY_API_KEY} \"https://api.bintray.com/content/tango-controls/debian/cppTango/${LIBRARY_VERSION}/pool/main/libt/${LINUX_FLAVOUR}/${CPACK_PACKAGE_FILE_NAME}.deb\;deb_distribution=${LINUX_FLAVOUR}\;deb_component=main\;deb_architecture=${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}\;publish=1\;override=1\" WORKING_DIRECTORY ${PROJECT_BINARY_DIR} DEPENDS ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.deb) -else(CURL) +else() message(WARNING "curl was not found deploy won't be possible") -endif(CURL) +endif() diff --git a/configure/cmake_win.cmake b/configure/cmake_win.cmake index 8cb3a3a96..46346a6c6 100644 --- a/configure/cmake_win.cmake +++ b/configure/cmake_win.cmake @@ -2,7 +2,7 @@ project(tango) if(CMAKE_CL_64) add_definitions(-D_64BITS) -endif(CMAKE_CL_64) +endif() set(TANGO_LIBRARY_NAME tango) @@ -29,7 +29,7 @@ include_directories(${PTHREAD_WIN_PKG_INCLUDE_DIRS}) set(WIN32_LIBS "ws2_32.lib;mswsock.lib;advapi32.lib;comctl32.lib;odbc32.lib;") if(PTHREAD_WIN) link_directories(${PTHREAD_WIN}/lib) -endif(PTHREAD_WIN) +endif() add_library(${TANGO_LIBRARY_NAME} $ $ @@ -111,7 +111,7 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{OMNI_BASE}/lib/x86_win32/COS421_rtd.lib DESTINATION lib COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/lib/x86_win32/msvcstubd.lib DESTINATION lib COMPONENT dynamic) - else(CMAKE_BUILD_TYPE STREQUAL "Debug") + else() #omniorb static lib install(FILES $ENV{OMNI_BASE}/lib/x86_win32/omniORB4.lib DESTINATION lib COMPONENT static) @@ -128,7 +128,7 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{OMNI_BASE}/lib/x86_win32/COS421_rt.lib DESTINATION lib COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/lib/x86_win32/msvcstub.lib DESTINATION lib COMPONENT dynamic) - endif(CMAKE_BUILD_TYPE STREQUAL "Debug") + endif() if(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v140") if(CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -139,7 +139,7 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{ZMQ_BASE}/lib/Debug/libzmq-v140-mt-gd-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/lib/Debug/libzmq-v140-mt-sgd-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/bin/Debug/libzmq-v140-mt-gd-4_0_5.dll DESTINATION bin COMPONENT dynamic) - else(CMAKE_BUILD_TYPE STREQUAL "Debug") + else() install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omniORB421_vc14_rt.dll DESTINATION bin COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omniDynamic421_vc14_rt.dll DESTINATION bin COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omnithread40_vc14_rt.dll DESTINATION bin COMPONENT dynamic) @@ -147,8 +147,8 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{ZMQ_BASE}/lib/Release/libzmq-v140-mt-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/lib/Release/libzmq-v140-mt-s-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/bin/Release/libzmq-v140-mt-4_0_5.dll DESTINATION bin COMPONENT dynamic) - endif(CMAKE_BUILD_TYPE STREQUAL "Debug") - endif(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v140") + endif() + endif() if(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v141") if(CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -159,7 +159,7 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{ZMQ_BASE}/lib/Debug/libzmq-v141-mt-gd-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/lib/Debug/libzmq-v141-mt-sgd-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/bin/Debug/libzmq-v141-mt-gd-4_0_5.dll DESTINATION bin COMPONENT dynamic) - else(CMAKE_BUILD_TYPE STREQUAL "Debug") + else() install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omniORB421_vc15_rt.dll DESTINATION bin COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omniDynamic421_vc15_rt.dll DESTINATION bin COMPONENT dynamic) install(FILES $ENV{OMNI_BASE}/bin/x86_win32/omnithread40_vc15_rt.dll DESTINATION bin COMPONENT dynamic) @@ -167,8 +167,8 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES $ENV{ZMQ_BASE}/lib/Release/libzmq-v141-mt-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/lib/Release/libzmq-v141-mt-s-4_0_5.lib DESTINATION lib COMPONENT static) install(FILES $ENV{ZMQ_BASE}/bin/Release/libzmq-v141-mt-4_0_5.dll DESTINATION bin COMPONENT dynamic) - endif(CMAKE_BUILD_TYPE STREQUAL "Debug") - endif(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v141") + endif() + endif() #pthreads if (PTHREAD_WIN) @@ -184,7 +184,7 @@ if (TANGO_INSTALL_DEPENDENCIES) install(FILES ${PTHREAD_WIN}/bin/pthreadVC2d.pdb DESTINATION bin COMPONENT dynamic) install(FILES ${PTHREAD_WIN}/bin/pthreadVC2d.exp DESTINATION bin COMPONENT dynamic) install(FILES ${PTHREAD_WIN}/bin/pthreadVC2d.ilk DESTINATION bin COMPONENT dynamic) - endif(PTHREAD_WIN) + endif() endif() configure_file(tango.pc.cmake tango.pc @ONLY) diff --git a/configure/cmake_win_defs.cmake b/configure/cmake_win_defs.cmake index 27502aa47..a416175bc 100644 --- a/configure/cmake_win_defs.cmake +++ b/configure/cmake_win_defs.cmake @@ -5,7 +5,7 @@ add_definitions(-D_WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) if(CMAKE_CL_64) add_definitions(-D_WIN64) -endif(CMAKE_CL_64) +endif() if(MSVC14) add_definitions(-D_TIMERS_T_) @@ -13,7 +13,7 @@ if(MSVC14) add_definitions(-D_TIMESPEC_DEFINED) add_definitions(-DSTRUCT_TIMESPEC_HAS_TV_SEC) add_definitions(-DSTRUCT_TIMESPEC_HAS_TV_NSEC) -endif(MSVC14) +endif() list(APPEND static_defs "_LIB") @@ -28,7 +28,7 @@ list(APPEND static_defs "OMNI_UNLOADABLE_STUBS") list(APPEND static_defs "ZMQ_STATIC") if(CMAKE_CL_64) list(REMOVE_ITEM static_defs "JPG_USE_ASM") -endif(CMAKE_CL_64) +endif() message("static_defs: ${static_defs}") list(APPEND dyn_defs "_LIB") @@ -42,7 +42,7 @@ list(APPEND dyn_defs "JPG_USE_ASM") list(APPEND dyn_defs "OMNI_UNLOADABLE_STUBS") if(CMAKE_CL_64) list(REMOVE_ITEM dyn_defs "JPG_USE_ASM") -endif(CMAKE_CL_64) +endif() message("dyn_defs: ${dyn_defs}") if(BUILD_SHARED_LIBS) diff --git a/configure/cpack_linux.cmake b/configure/cpack_linux.cmake index d978c1aa9..80313ae48 100644 --- a/configure/cpack_linux.cmake +++ b/configure/cpack_linux.cmake @@ -11,7 +11,7 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Release") set(CPACK_PACKAGE_NAME libtango9lts-dev) set(CPACK_DEBIAN_PACKAGE_DEPENDS "libcos4-1, libzmq5 | libzmq3") set(CPACK_DEBIAN_PACKAGE_CONFLICTS "libtango7-dev, libtango8-dev, libtango9-dev, libtango-dev, liblog4tango-dev, libtango9lts-dbg") -endif(CMAKE_BUILD_TYPE STREQUAL "Debug") +endif() set(CPACK_PACKAGE_VERSION "${LIBRARY_VERSION}") set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION}) set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION}) diff --git a/cppapi/server/CMakeLists.txt b/cppapi/server/CMakeLists.txt index 49b34b9a6..76c7bb8e9 100644 --- a/cppapi/server/CMakeLists.txt +++ b/cppapi/server/CMakeLists.txt @@ -152,7 +152,7 @@ if(WIN32) if(USE_PCH) tango_target_pch(server_objects) endif() -else(WIN32) +else() target_compile_options(server_objects PRIVATE -fPIC) if(CMAKE_BUILD_TYPE STREQUAL "Release") target_compile_definitions(server_objects PRIVATE _REENTRANT _TANGO_LIB) @@ -167,7 +167,7 @@ else(WIN32) tango_add_pch(tango_pch server_objects "") tango_target_pch(server_objects tango_pch) endif() -endif(WIN32) +endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tango_const.h.in ${CMAKE_CURRENT_BINARY_DIR}/tango_const.h) diff --git a/log4tango/config/config.cmake b/log4tango/config/config.cmake index 7a14b091d..5245e9413 100644 --- a/log4tango/config/config.cmake +++ b/log4tango/config/config.cmake @@ -58,12 +58,12 @@ check_type_size(int64_t INT64_SIZE) if(WIN32) if(CMAKE_CL_64) set(LOG4TANGO_HAVE_INT64_T "/**/") - endif(CMAKE_CL_64) -else(WIN32) + endif() +else() if(${INT64_SIZE} EQUAL 8) set(LOG4TANGO_HAVE_INT64_T "/**/") endif() -endif(WIN32) +endif() configure_file(config/config.h.in ${PROJECT_BINARY_DIR}/log4tango/include/log4tango/config.h) diff --git a/log4tango/src/CMakeLists.txt b/log4tango/src/CMakeLists.txt index ba5198f5a..2ed095c49 100644 --- a/log4tango/src/CMakeLists.txt +++ b/log4tango/src/CMakeLists.txt @@ -29,6 +29,6 @@ add_library(log4tango_objects OBJECT ${SOURCES}) if(WIN32) target_compile_definitions(log4tango_objects PRIVATE "${windows_defs}") -else(WIN32) +else() target_compile_options(log4tango_objects PRIVATE -fPIC) -endif(WIN32) +endif() diff --git a/log4tango/tests/CMakeLists.txt b/log4tango/tests/CMakeLists.txt index d7c1638c3..2f66aed20 100644 --- a/log4tango/tests/CMakeLists.txt +++ b/log4tango/tests/CMakeLists.txt @@ -24,10 +24,10 @@ if(WIN32) add_test("log4tango_test_sta" test_log4tango_sta) # add_test("log4tango_benchmark_sta" test_bench_sta) -else(WIN32) +else() add_executable(test_log4tango ${LOG4TANGO_TEST_SOURCES} $) add_executable(test_bench ${BENCH_TEST_SOURCES} $) add_test("log4tango_test" test_log4tango) # add_test("log4tango_benchmark" test_bench) -endif(WIN32) +endif() From d4f823f94103a76e39b78bed492b613d83deb194 Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Fri, 28 Aug 2020 13:03:24 +0200 Subject: [PATCH 4/6] CMake: Whitespace cleanup Remove trailing whitespace and empty lines at the front and back of the files. --- configure/cmake_pch_linux.cmake | 1 - configure/cmake_pch_win.cmake | 1 - configure/cmake_win_defs.cmake | 1 - configure/coveralls.cmake | 1 - configure/cpack_linux.cmake | 2 -- cppapi/server/jpeg/CMakeLists.txt | 2 +- log4tango/src/CMakeLists.txt | 2 +- 7 files changed, 2 insertions(+), 8 deletions(-) diff --git a/configure/cmake_pch_linux.cmake b/configure/cmake_pch_linux.cmake index ecc8bbf4c..995a40140 100644 --- a/configure/cmake_pch_linux.cmake +++ b/configure/cmake_pch_linux.cmake @@ -1,4 +1,3 @@ - # # Adds precompiled header (generated by the tango_pch target) to the ${target}. # diff --git a/configure/cmake_pch_win.cmake b/configure/cmake_pch_win.cmake index 819660de5..251221650 100644 --- a/configure/cmake_pch_win.cmake +++ b/configure/cmake_pch_win.cmake @@ -1,4 +1,3 @@ - function(tango_target_pch target) set(tango_pch_file "${CMAKE_CURRENT_BINARY_DIR}/pch_${target}.pch") diff --git a/configure/cmake_win_defs.cmake b/configure/cmake_win_defs.cmake index a416175bc..b38be5209 100644 --- a/configure/cmake_win_defs.cmake +++ b/configure/cmake_win_defs.cmake @@ -52,4 +52,3 @@ else() message("selected static-library build") set(windows_defs ${static_defs}) endif() - diff --git a/configure/coveralls.cmake b/configure/coveralls.cmake index a93e1795c..ccd75ae55 100644 --- a/configure/coveralls.cmake +++ b/configure/coveralls.cmake @@ -15,4 +15,3 @@ if (COVERALLS) ON # If we should upload. ) endif () - diff --git a/configure/cpack_linux.cmake b/configure/cpack_linux.cmake index 80313ae48..f3607a463 100644 --- a/configure/cpack_linux.cmake +++ b/configure/cpack_linux.cmake @@ -23,5 +23,3 @@ set(CPACK_DEBIAN_PACKAGE_DEBUG TRUE) add_custom_command(OUTPUT ${CPACK_PACKAGE_FILE_NAME}.deb COMMAND cpack -V) - - diff --git a/cppapi/server/jpeg/CMakeLists.txt b/cppapi/server/jpeg/CMakeLists.txt index ad0437301..43fb41dd5 100644 --- a/cppapi/server/jpeg/CMakeLists.txt +++ b/cppapi/server/jpeg/CMakeLists.txt @@ -4,7 +4,7 @@ set(SOURCES jpeg_bitstream.cpp jpeg_decoder.cpp jpeg_encoder.cpp jpeg_memory.cpp) - + add_library(jpeg_objects OBJECT ${SOURCES}) if(WIN32) diff --git a/log4tango/src/CMakeLists.txt b/log4tango/src/CMakeLists.txt index 2ed095c49..a93d67199 100644 --- a/log4tango/src/CMakeLists.txt +++ b/log4tango/src/CMakeLists.txt @@ -1,4 +1,4 @@ -set(SOURCES +set(SOURCES Appender.cpp AppenderAttachable.cpp LayoutAppender.cpp From 76268474c6f557eadc66b2fc713cf176d303c97c Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Fri, 28 Aug 2020 13:56:58 +0200 Subject: [PATCH 5/6] CMake on Linux: Only generate either the static or the dynamic library In af72afb0 (Generate static library and fix compilation definitions (#17) (#437), 2018-05-15) support was added for building a static library next to the dynamic one. As most users want to have only either library we use the newly introduced option BUILD_SHARED_LIBS to build either one. This also solves issues when cross-compiling where you might not have shared libraries for the target architecture. --- CMakeLists.txt | 5 +++++ configure/cmake_linux.cmake | 42 ++++++++++++++----------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7791986f2..500c24b86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,12 @@ add_subdirectory("log4tango") add_subdirectory("cppapi") if(BUILD_TESTING) + if(BUILD_SHARED_LIBS) add_subdirectory("cpp_test_suite") + else() + message(WARNING "Not building the tests, because that is currently supported only when BUILD_SHARED_LIBS is ON") + SET(BUILD_TESTING OFF) + endif() endif() if(WIN32) diff --git a/configure/cmake_linux.cmake b/configure/cmake_linux.cmake index 93d91f05c..96b298d3c 100644 --- a/configure/cmake_linux.cmake +++ b/configure/cmake_linux.cmake @@ -1,35 +1,25 @@ project(libtango) -add_library(tango SHARED $ - $ - $ - $ - $ - $) +add_library(tango $ + $ + $ + $ + $ + $) target_link_libraries(tango PUBLIC ${ZMQ_PKG_LIBRARIES} ${OMNIORB_PKG_LIBRARIES} ${OMNICOS_PKG_LIBRARIES} ${OMNIDYN_PKG_LIBRARIES} ${CMAKE_DL_LIBS}) -target_compile_options(tango PRIVATE -fPIC) target_include_directories(tango PUBLIC ${ZMQ_PKG_INCLUDE_DIRS} ${OMNIORB_PKG_INCLUDE_DIRS} ${OMNIDYN_PKG_INCLUDE_DIRS}) - target_compile_options(tango PUBLIC ${ZMQ_PKG_CFLAGS_OTHER} ${OMNIORB_PKG_CFLAGS_OTHER} ${OMNICOS_PKG_CFLAGS_OTHER} ${OMNIDYN_PKG_CFLAGS_OTHER}) -target_compile_definitions(tango PUBLIC _REENTRANT) - -set_target_properties(tango PROPERTIES - VERSION ${LIBRARY_VERSION} - SOVERSION ${SO_VERSION}) - -add_library(tango-static STATIC $ - $ - $ - $ - $ - $) -target_link_libraries(tango-static PUBLIC ${ZMQ_PKG_LIBRARIES} ${OMNIORB_PKG_LIBRARIES} ${OMNICOS_PKG_LIBRARIES} ${OMNIDYN_PKG_LIBRARIES} ${CMAKE_DL_LIBS}) -target_include_directories(tango-static PUBLIC ${ZMQ_PKG_INCLUDE_DIRS} ${OMNIORB_PKG_INCLUDE_DIRS} ${OMNIDYN_PKG_INCLUDE_DIRS}) -target_compile_options(tango-static PUBLIC ${ZMQ_PKG_CFLAGS_OTHER} ${OMNIORB_PKG_CFLAGS_OTHER} ${OMNICOS_PKG_CFLAGS_OTHER} ${OMNIDYN_PKG_CFLAGS_OTHER}) -set_target_properties(tango-static PROPERTIES OUTPUT_NAME tango) -install(TARGETS tango LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") -install(TARGETS tango-static ARCHIVE DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") +if(BUILD_SHARED_LIBS) + target_compile_options(tango PRIVATE -fPIC) + target_compile_definitions(tango PUBLIC _REENTRANT) + set_target_properties(tango PROPERTIES + VERSION ${LIBRARY_VERSION} + SOVERSION ${SO_VERSION}) + install(TARGETS tango LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") +else() + install(TARGETS tango ARCHIVE DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}") +endif() configure_file(tango.pc.cmake tango.pc @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tango.pc" From 998a008428d49a16a977543a16d0dcbb7c15d8f4 Mon Sep 17 00:00:00 2001 From: Thomas Braun Date: Tue, 1 Sep 2020 16:09:09 +0200 Subject: [PATCH 6/6] travis: Add job for compiling tango static library --- .travis.yml | 2 ++ .travis/run.sh | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 3eb256464..979bf3b88 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,11 +11,13 @@ env: - USE_PCH=ON - CMAKE_BUILD_TYPE=Debug - TANGO_USE_USING_NAMESPACE=ON + - BUILD_SHARED_LIBS=ON matrix: - OS_TYPE=llvm-latest RUN_TESTS=OFF WARNINGS_AS_ERRORS=ON TANGO_USE_USING_NAMESPACE=OFF USE_PCH=OFF - OS_TYPE=gcc-latest RUN_TESTS=OFF WARNINGS_AS_ERRORS=ON TANGO_USE_USING_NAMESPACE=OFF USE_PCH=OFF - OS_TYPE=ubuntu-20.04 - OS_TYPE=debian10 + - OS_TYPE=debian10 RUN_TESTS=OFF BUILD_SHARED_LIBS=OFF - OS_TYPE=debian10 USE_PCH=OFF RUN_TESTS=OFF - OS_TYPE=debian10 CMAKE_BUILD_TYPE=Release - OS_TYPE=debian9 diff --git a/.travis/run.sh b/.travis/run.sh index 2934d6a40..c8880687c 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -8,6 +8,7 @@ echo "OS_TYPE=$OS_TYPE" echo "TANGO_HOST=$TANGO_HOST" echo "COVERALLS=$COVERALLS" echo "USE_PCH=$USE_PCH" +echo "BUILD_SHARED_LIBS=$BUILD_SHARED_LIBS" echo "TANGO_USE_USING_NAMESPACE=$TANGO_USE_USING_NAMESPACE" echo "WARNINGS_AS_ERRORS=$WARNINGS_AS_ERRORS" echo "############################" @@ -18,12 +19,14 @@ docker exec cpp_tango mkdir -p /home/tango/src/build MAKEFLAGS=${MAKEFLAGS:- -j $(nproc)} COVERALLS=${COVERALLS:-OFF} USE_PCH=${USE_PCH:-OFF} +BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-ON} WARNINGS_AS_ERRORS=${WARNINGS_AS_ERRORS:-OFF} COVERALLS_MODULE_PATH=/home/tango/coveralls-cmake/cmake docker exec cpp_tango cmake \ -H/home/tango/src \ -B/home/tango/src/build \ + -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCPPZMQ_BASE=/home/tango \ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \