summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CMakeLists.txt248
1 files changed, 248 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..a451844
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,248 @@
+set(CPACK_RPM_COMPONENT_INSTALL ON)
+cmake_minimum_required(VERSION 3.1)
+
+project(opentracing-cpp)
+
+# ==============================================================================
+# Version information
+
+# Increment ABI version for any ABI-breaking change.
+#
+# Also, whenever the ABI is between versions and in development
+# suffix the ABI version number with "_unstable".
+set(OPENTRACING_ABI_VERSION "3")
+
+# Version number follows semver
+# See https://semver.org/
+set(OPENTRACING_VERSION_MAJOR "1")
+set(OPENTRACING_VERSION_MINOR "6")
+set(OPENTRACING_VERSION_PATCH "0")
+set(OPENTRACING_VERSION_STRING
+ "${OPENTRACING_VERSION_MAJOR}.${OPENTRACING_VERSION_MINOR}.${OPENTRACING_VERSION_PATCH}")
+
+# ==============================================================================
+# Set up cpack
+
+SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "C++ implementation of the OpenTracing API")
+SET(CPACK_PACKAGE_VENDOR "opentracing.io")
+SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
+SET(CPACK_RPM_PACKAGE_GROUP "Development/Libraries")
+
+SET(CPACK_PACKAGE_VERSION_MAJOR ${OPENTRACING_VERSION_MAJOR})
+SET(CPACK_PACKAGE_VERSION_MINOR ${OPENTRACING_VERSION_MINOR})
+SET(CPACK_PACKAGE_VERSION_PATCH ${OPENTRACING_VERSION_PATCH})
+set(CPACK_RPM_DIST_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/runldconfig)
+set(CPACK_RPM_DIST_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/runldconfig)
+set(CPACK_COMPONENTS_ALL DIST DEVEL)
+set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
+set(CPACK_GENERATOR "RPM")
+set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
+
+include(CPack)
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
+
+# ==============================================================================
+# Configure compilers
+
+set(CMAKE_CXX_STANDARD 11)
+if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything \
+ -Wno-c++98-compat \
+ -Wno-c++98-compat-pedantic \
+ -Wno-c++98-compat-bind-to-temporary-copy \
+ -Wno-weak-vtables \
+ -Wno-exit-time-destructors \
+ -Wno-global-constructors \
+ -Wno-padded")
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
+endif()
+
+# ==============================================================================
+# Set up linter
+
+option(ENABLE_LINTING "Run clang-tidy on source files" ON)
+if(ENABLE_LINTING)
+ find_program(CLANG_TIDY_EXE NAMES "clang-tidy"
+ DOC "Path to clang-tidy executable")
+ if(NOT CLANG_TIDY_EXE)
+ message(STATUS "clang-tidy not found.")
+ else()
+ message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
+ set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-checks=*,-clang-analyzer-alpha.*")
+ endif()
+endif()
+
+# ==============================================================================
+# Check for weak symbol support
+
+try_compile(
+ SUPPORTS_WEAK_SYMBOLS
+ "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp"
+ SOURCES ${CMAKE_CURRENT_LIST_DIR}/cmake/weak_symbol.cpp)
+
+# ==============================================================================
+# Set up options
+
+option(BUILD_SHARED_LIBS "Build as a shared library" ON)
+option(BUILD_STATIC_LIBS "Build as a static library" ON)
+option(BUILD_MOCKTRACER "Build mocktracer library" ON)
+option(BUILD_DYNAMIC_LOADING "Build with dynamic loading support" ON)
+
+if (BUILD_DYNAMIC_LOADING)
+ if (NOT WIN32)
+ if (NOT SUPPORTS_WEAK_SYMBOLS OR NOT UNIX)
+ message(WARNING "Building without dynamic loading support.")
+ set(BUILD_DYNAMIC_LOADING OFF)
+ endif()
+ endif()
+endif()
+
+set(OPENTRACING_BUILD_DYNAMIC_LOADING ${BUILD_DYNAMIC_LOADING})
+
+if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
+ message(FATAL_ERROR "One or both of BUILD_SHARED_LIBS or BUILD_STATIC_LIBS must be set to ON to build")
+endif()
+
+# ==============================================================================
+# Set up libdir
+
+if (NOT DEFINED LIB_INSTALL_DIR)
+ set(LIB_INSTALL_DIR lib)
+endif()
+
+# ==============================================================================
+# Set up generated header files config.h and version.h
+
+configure_file(version.h.in include/opentracing/version.h)
+configure_file(config.h.in include/opentracing/config.h)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/opentracing
+ DESTINATION include
+ COMPONENT DEVEL)
+
+# ==============================================================================
+# OpenTracing library targets
+
+include_directories(include)
+include_directories(SYSTEM 3rd_party/include)
+
+set(SRCS src/propagation.cpp
+ src/dynamic_load.cpp
+ src/noop.cpp
+ src/tracer.cpp
+ src/tracer_factory.cpp
+ src/ext/tags.cpp)
+
+if (BUILD_DYNAMIC_LOADING)
+ if (WIN32)
+ list(APPEND SRCS src/dynamic_load_windows.cpp)
+ else()
+ list(APPEND SRCS src/dynamic_load_unix.cpp)
+ endif()
+else()
+ list(APPEND SRCS src/dynamic_load_unsupported.cpp)
+endif()
+
+list(APPEND LIBRARIES "")
+if (BUILD_DYNAMIC_LOADING)
+ list(APPEND LIBRARIES ${CMAKE_DL_LIBS})
+endif()
+
+
+if (BUILD_SHARED_LIBS)
+ add_library(opentracing SHARED ${SRCS})
+ target_link_libraries(opentracing ${LIBRARIES})
+ target_include_directories(opentracing INTERFACE "$<INSTALL_INTERFACE:include/>")
+ set_target_properties(opentracing PROPERTIES VERSION ${OPENTRACING_VERSION_STRING}
+ SOVERSION ${OPENTRACING_VERSION_MAJOR})
+ target_compile_definitions(opentracing PRIVATE OPENTRACING_EXPORTS)
+ install(TARGETS opentracing EXPORT OpenTracingTargets
+ COMPONENT DIST
+ RUNTIME DESTINATION ${LIB_INSTALL_DIR}
+ LIBRARY DESTINATION ${LIB_INSTALL_DIR}
+ ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
+ )
+ if (CLANG_TIDY_EXE)
+ set_target_properties(opentracing PROPERTIES
+ CXX_CLANG_TIDY "${DO_CLANG_TIDY}")
+ endif()
+endif()
+
+if (BUILD_STATIC_LIBS)
+ add_library(opentracing-static STATIC ${SRCS})
+ target_link_libraries(opentracing-static ${LIBRARIES})
+ # Windows generates a lib and dll files for a shared library. using the same name will override the lib file generated by the shared target
+ if (NOT WIN32)
+ set_target_properties(opentracing-static PROPERTIES OUTPUT_NAME opentracing)
+ endif()
+ target_compile_definitions(opentracing-static PUBLIC OPENTRACING_STATIC)
+ target_include_directories(opentracing-static INTERFACE "$<INSTALL_INTERFACE:include/>")
+ install(TARGETS opentracing-static EXPORT OpenTracingTargets
+ ARCHIVE DESTINATION ${LIB_INSTALL_DIR})
+endif()
+
+
+install(DIRECTORY 3rd_party/include/opentracing/expected
+ COMPONENT DEVEL
+ DESTINATION include/opentracing
+ FILES_MATCHING PATTERN "*.hpp"
+ PATTERN "*.h")
+install(DIRECTORY 3rd_party/include/opentracing/variant
+ COMPONENT DEVEL
+ DESTINATION include/opentracing
+ FILES_MATCHING PATTERN "*.hpp"
+ PATTERN "*.h")
+install(DIRECTORY include/opentracing
+ COMPONENT DEVEL
+ DESTINATION include
+ FILES_MATCHING PATTERN "*.h")
+
+
+if (BUILD_MOCKTRACER)
+ add_subdirectory(mocktracer)
+endif()
+
+# ==============================================================================
+# Package configuration setup
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/OpenTracingConfigVersion.cmake"
+ VERSION ${OPENTRACING_VERSION_STRING}
+ COMPATIBILITY AnyNewerVersion)
+export(EXPORT OpenTracingTargets
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/OpenTracingTargets.cmake"
+ NAMESPACE OpenTracing::)
+configure_file(cmake/OpenTracingConfig.cmake
+ "${CMAKE_CURRENT_BINARY_DIR}/OpenTracingConfig.cmake"
+ COPYONLY)
+set(ConfigPackageLocation ${LIB_INSTALL_DIR}/cmake/OpenTracing)
+install(EXPORT OpenTracingTargets
+ FILE OpenTracingTargets.cmake
+ NAMESPACE OpenTracing::
+ DESTINATION ${ConfigPackageLocation})
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenTracingConfig.cmake
+ "${CMAKE_CURRENT_BINARY_DIR}/OpenTracingConfigVersion.cmake"
+ DESTINATION ${ConfigPackageLocation}
+ COMPONENT Devel)
+
+# ==============================================================================
+# Testing
+
+include(CTest)
+if(BUILD_TESTING)
+ add_subdirectory(test)
+endif()
+
+# ==============================================================================
+# Examples
+
+if(BUILD_TESTING)
+ add_subdirectory(example)
+endif()