File: CMakeLists.txt

package info (click to toggle)
libedlib 1.2.7-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 14,520 kB
  • sloc: cpp: 2,002; sh: 304; python: 131; makefile: 89; ansic: 7
file content (152 lines) | stat: -rw-r--r-- 5,280 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
project(edlib VERSION 1.2.7)

option(EDLIB_ENABLE_INSTALL "Generate the install target" ON)
option(EDLIB_BUILD_EXAMPLES "Build examples" ON)
option(EDLIB_BUILD_UTILITIES "Build utilities" ON)

set(MACOSX (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))

if(CMAKE_BUILD_TYPE MATCHES Debug)
  message("Debug mode")
endif()

include(GNUInstallDirs)
include(CheckCXXCompilerFlag)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)  # Falling back to different standard it not allowed.
set(CMAKE_CXX_EXTENSIONS OFF)  # Make sure no compiler-specific features are used.

# Build edlib as static library by default
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build all libraries as shared")

# Set strict warnings.
if(MSVC)
  # Force to always compile with W4
  if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
    string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
  endif()
else()
  message("Setting warning flags")

  check_cxx_compiler_flag(-Wold-style-cast WOLD_STYLE_CAST)
  if (WOLD_STYLE_CAST)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wold-style-cast")
  endif()
  check_cxx_compiler_flag(-Wshadow WSHADOW)
  if (WSHADOW)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
  endif()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
endif()

# Define output directories for created binaries and libraries.
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

file(GLOB SOURCES "edlib/src/*.cpp")

# Create libraries.
add_library(edlib SHARED ${SOURCES})

add_library(edlib_static STATIC ${SOURCES})
target_include_directories(edlib_static PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/edlib/include>
    $<INSTALL_INTERFACE:include>)

add_library(edlib::edlib ALIAS edlib)
set_target_properties(edlib
  PROPERTIES
    CXX_VISIBILITY_PRESET hidden
    VISIBILITY_INLINES_HIDDEN ON
    VERSION ${PROJECT_VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR}
)

target_compile_definitions(edlib PRIVATE DLIB_BUILD)
if(BUILD_SHARED_LIBS)
  target_compile_definitions(edlib PUBLIC EDLIB_SHARED)
endif()

target_include_directories(edlib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/edlib/include>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)

# Build binaries.
if(EDLIB_BUILD_EXAMPLES)
  add_executable(helloWorld apps/hello-world/helloWorld.c)
  target_link_libraries(helloWorld edlib)
endif()

include(CTest)
if (BUILD_TESTING)
  add_executable(runTests test/runTests.cpp)
  target_link_libraries(runTests edlib)

  add_test(edlib_tests ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/runTests)
endif()

if(EDLIB_BUILD_UTILITIES)
  if(NOT WIN32) # If on windows, do not build binaries that do not support windows.
    add_executable(edlib-aligner apps/aligner/aligner.cpp)
    target_link_libraries(edlib-aligner edlib_static)
  endif()
endif()

# configure and install pkg-config file
set(PKG_EDLIB_DEFS "")
get_target_property(EDLIB_INTERFACE_DEFS edlib INTERFACE_COMPILE_DEFINITIONS)
if(NOT (EDLIB_INTERFACE_DEFS STREQUAL "NOTFOUND" OR EDLIB_INTERFACE_DEFS STREQUAL "EDLIB_INTERFACE_DEFS-NOTFOUND"))
  foreach(EDLIB_INTERFACE_DEF ${EDLIB_INTERFACE_DEFS})
    list(APPEND PKG_EDLIB_DEFS "-D${EDLIB_INTERFACE_DEF}")
  endforeach()
endif()
string(REPLACE ";" " " PKG_EDLIB_DEFS "${PKG_EDLIB_DEFS}")
configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/edlib.pc.in
    ${CMAKE_CURRENT_BINARY_DIR}/edlib-${PROJECT_VERSION_MAJOR}.pc
    @ONLY)

if(EDLIB_ENABLE_INSTALL)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/edlib-${PROJECT_VERSION_MAJOR}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  include(CMakePackageConfigHelpers)
  set(EDLIB_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/edlib" CACHE STRING
    "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.")
  set(version_config "${PROJECT_BINARY_DIR}/edlib-config-version.cmake")
  set(project_config "${PROJECT_BINARY_DIR}/edlib-config.cmake")
  set(targets_export_name edlib-targets)

  # Generate the version, config and target files into the build directory.
  write_basic_package_version_file(
    ${version_config}
    VERSION ${VERSION}
    COMPATIBILITY AnyNewerVersion)
  configure_package_config_file(
    ${PROJECT_SOURCE_DIR}/edlib-config.cmake.in
    ${project_config}
    INSTALL_DESTINATION ${EDLIB_CMAKE_DIR})
  export(TARGETS edlib NAMESPACE edlib::
    FILE ${PROJECT_BINARY_DIR}/${targets_export_name}.cmake)

  # Install version, config and target files.
  # These are cmake config files and they are useful for some consumers, for example vcpkg.
  install(
    FILES ${project_config} ${version_config}
    DESTINATION ${EDLIB_CMAKE_DIR})
  install(EXPORT ${targets_export_name} DESTINATION ${EDLIB_CMAKE_DIR}
    NAMESPACE edlib::)
  
  # Create target 'install' for installing libraries.
  install(
    TARGETS edlib edlib_static
    EXPORT ${targets_export_name} 
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  )
  install(FILES edlib/include/edlib.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()