:: bzip3 / CMakeLists.txt 5.3 KB raw

1
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
2
3
project(
4
  bzip3
5
  VERSION 1.5.3
6
  DESCRIPTION "A better and stronger spiritual successor to BZip2"
7
  HOMEPAGE_URL "https://github.com/iczelia/bzip3"
8
  LANGUAGES C)
9
10
set(CMAKE_C_STANDARD 99)
11
12
option(BUILD_SHARED_LIBS "Build libbz3 as a shared library" ON)
13
option(BZIP3_BUILD_APPS "Build bzip3 applications" ON)
14
if(WIN32 AND NOT (MINGW OR CYGWIN))
15
  set(BZIP3_ENABLE_PTHREAD_DEFAULT OFF)
16
else()
17
  set(BZIP3_ENABLE_PTHREAD_DEFAULT ON)
18
endif()
19
option(BZIP3_ENABLE_PTHREAD "Enable use of pthread library" "${BZIP3_ENABLE_PTHREAD_DEFAULT}")
20
option(BZIP3_ENABLE_ARCH_NATIVE "Enable CPU-specific optimizations" OFF)
21
option(BZIP3_ENABLE_STATIC_EXE "Enable static builds of the executable" OFF)
22
23
include(CheckCCompilerFlag)
24
include(CheckSymbolExists)
25
include(GNUInstallDirs)
26
27
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
28
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
29
30
set(prefix ${CMAKE_INSTALL_PREFIX})
31
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
32
set(bindir ${CMAKE_INSTALL_FULL_BINDIR})
33
set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
34
set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
35
set(PACKAGE ${CMAKE_PROJECT_NAME})
36
set(PACKAGE_VERSION ${PROJECT_VERSION})
37
if(WIN32 AND BUILD_SHARED_LIBS)
38
  set(extra_cflags " -DBZIP3_DLL_IMPORT=1")
39
else()
40
  set(extra_cflags "")
41
endif()
42
configure_file(bzip3.pc.in ${CMAKE_CURRENT_BINARY_DIR}/bzip3.pc @ONLY)
43
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bzip3.pc
44
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
45
46
if(BZIP3_ENABLE_PTHREAD)
47
  set(THREADS_PREFER_PTHREAD_FLAG TRUE)
48
  find_package(Threads REQUIRED)
49
endif()
50
51
if(BUILD_SHARED_LIBS)
52
  add_library(bz3 SHARED)
53
else()
54
  add_library(bz3 STATIC)
55
endif()
56
target_sources(bz3 PRIVATE src/libbz3.c)
57
target_compile_definitions(bz3 PUBLIC VERSION="${PROJECT_VERSION}")
58
if(WIN32 AND BUILD_SHARED_LIBS)
59
  target_compile_definitions(bz3 PRIVATE BZIP3_DLL_EXPORT=1)
60
  target_compile_definitions(bz3 INTERFACE BZIP3_DLL_IMPORT=1)
61
endif()
62
target_include_directories(
63
  bz3
64
  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
65
  INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
66
if(BZIP3_ENABLE_PTHREAD)
67
  target_compile_definitions(bz3 PUBLIC PTHREAD)
68
  target_link_libraries(bz3 Threads::Threads)
69
endif()
70
if(BZIP3_ENABLE_ARCH_NATIVE)
71
  check_c_compiler_flag(-march=native CC_SUPPORT_MARCH_NATIVE_FLAG)
72
  check_c_compiler_flag(-mtune=native CC_SUPPORT_MTUNE_NATIVE_FLAG)
73
  if(CC_SUPPORT_MARCH_NATIVE_FLAG AND CC_SUPPORT_MTUNE_NATIVE_FLAG)
74
    target_link_options(bz3 PUBLIC -march=native -mtune=native)
75
  else()
76
    message(
77
      FATAL_ERROR
78
        "Compiler does not support native optimizations, disable `BZIP3_ENABLE_ARCH_NATIVE`"
79
    )
80
  endif()
81
endif()
82
set_target_properties(
83
  bz3
84
  PROPERTIES OUTPUT_NAME bzip3
85
             SOVERSION "1"
86
             PUBLIC_HEADER include/libbz3.h
87
             VERSION "1.0.0")
88
if(BUILD_SHARED_LIBS)
89
  set_target_properties(bz3 PROPERTIES POSITION_INDEPENDENT_CODE ON)
90
endif()
91
install(
92
  TARGETS bz3
93
  EXPORT ${CMAKE_PROJECT_NAME}-targets
94
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
95
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
96
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
97
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
98
install(
99
  EXPORT ${CMAKE_PROJECT_NAME}-targets
100
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}"
101
  NAMESPACE ${CMAKE_PROJECT_NAME}::)
102
configure_file(
103
  "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_PROJECT_NAME}-config.cmake.in"
104
  "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake"
105
  @ONLY)
106
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake"
107
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}")
108
if(BZIP3_BUILD_APPS)
109
  add_executable(bzip3)
110
  target_sources(bzip3 PRIVATE src/main.c)
111
  if(BZIP3_ENABLE_STATIC_EXE)
112
    if(BUILD_SHARED_LIBS)
113
      message(
114
        FATAL_ERROR
115
          "libbz3 is not built as a static library, disable `BUILD_SHARED_LIBS`"
116
      )
117
    endif()
118
    check_c_compiler_flag(-static CC_SUPPORT_STATIC_FLAG)
119
    if(CC_SUPPORT_STATIC_FLAG)
120
      target_link_options(bzip3 PRIVATE -static)
121
    else()
122
      message(
123
        FATAL_ERROR
124
          "Compiler does not support static linking, disable `BZIP3_ENABLE_STATIC_EXE`"
125
      )
126
    endif()
127
  endif()
128
  target_link_libraries(bzip3 PRIVATE bz3)
129
  install(TARGETS bzip3 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
130
131
  set(BZIP3_APP_SCRIPTS bunzip3 bz3cat bz3grep bz3less bz3more bz3most)
132
  install(PROGRAMS ${BZIP3_APP_SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR})
133
134
  if(UNIX)
135
    set(BZIP3_MANS
136
        bunzip3.1
137
        bz3cat.1
138
        bz3grep.1
139
        bz3less.1
140
        bz3more.1
141
        bz3most.1
142
        bzip3.1)
143
    foreach(BZIP3_MAN ${BZIP3_MANS})
144
      if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${BZIP3_MAN}.in)
145
        string(TIMESTAMP MAN_DATE "%d %B %Y" UTC)
146
        set(TRANSFORMED_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
147
        set(MAN_DATE ${MAN_DATE})
148
        set(VERSION ${PROJECT_VERSION})
149
        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${BZIP3_MAN}.in
150
		       ${CMAKE_CURRENT_BINARY_DIR}/${BZIP3_MAN}
151
                       @ONLY)
152
      else()
153
        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${BZIP3_MAN}
154
		       ${CMAKE_CURRENT_BINARY_DIR}/${BZIP3_MAN}
155
                       COPYONLY)
156
      endif()
157
      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BZIP3_MAN}
158
              DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
159
    endforeach()
160
  endif()
161
endif()
tab: 248 wrap: offon