|
1 | 1 | cmake_minimum_required(VERSION3.5.1) |
2 | 2 | cmake_policy(SETCMP0069NEW) |
3 | 3 |
|
4 | | -project(llhttp C) |
| 4 | +project(llhttp VERSION 6.0.5) |
| 5 | +include(GNUInstallDirs) |
5 | 6 |
|
6 | 7 | set(CMAKE_C_STANDARD 99) |
7 | 8 |
|
| 9 | +# By default build in relwithdebinfo type, supports both lowercase and uppercase |
| 10 | +if(NOTCMAKE_CONFIGURATION_TYPES) |
| 11 | +set(allowableBuileTypes DEBUG RELEASE RELWITHDEBINFO MINSIZEREL) |
| 12 | +set_property(CACHECMAKE_BUILD_TYPEPROPERTY STRINGS "${allowableBuileTypes}") |
| 13 | +if(NOTCMAKE_BUILD_TYPE) |
| 14 | +set(CMAKE_BUILD_TYPE RELWITHDEBINFO CACHESTRING""FORCE) |
| 15 | + else() |
| 16 | +string(TOUPPER${CMAKE_BUILD_TYPE}CMAKE_BUILD_TYPE) |
| 17 | +if(NOTCMAKE_BUILD_TYPEIN_LIST allowableBuileTypes) |
| 18 | +message(FATEL_ERROR "Invalid build type: ${CMAKE_BUILD_TYPE}") |
| 19 | + endif() |
| 20 | + endif() |
| 21 | +endif() |
| 22 | + |
8 | 23 | # |
9 | 24 | # Options |
10 | 25 | # |
11 | 26 | # Generic option |
12 | | -option(BUILD_SHARED_LIBS"Build shared libraries (.dll/.so) instead of static ones (.lib/.a)"OFF) |
| 27 | +option(BUILD_SHARED_LIBS"Build shared libraries (.dll/.so)"ON) |
| 28 | +option(BUILD_STATIC_LIBS"Build static libraries (.lib/.a)"OFF) |
13 | 29 |
|
14 | 30 | # Source code |
15 | 31 | set(LLHTTP_SOURCES |
16 | | - src/llhttp.c |
17 | | - src/http.c |
18 | | - src/api.c |
| 32 | +${CMAKE_CURRENT_SOURCE_DIR}/src/llhttp.c |
| 33 | +${CMAKE_CURRENT_SOURCE_DIR}/src/http.c |
| 34 | +${CMAKE_CURRENT_SOURCE_DIR}/src/api.c |
19 | 35 | ) |
20 | 36 |
|
21 | 37 | set(LLHTTP_HEADERS |
22 | | - include/llhttp.h |
| 38 | +${CMAKE_CURRENT_SOURCE_DIR}/include/llhttp.h |
23 | 39 | ) |
24 | 40 |
|
25 | | -add_library(llhttp) |
26 | | -add_library(llhttp::llhttpALIASllhttp) |
| 41 | +configure_file( |
| 42 | +${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc.in |
| 43 | +${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc |
| 44 | +@ONLY |
| 45 | +) |
27 | 46 |
|
28 | | -target_sources(llhttpPRIVATE${LLHTTP_SOURCES}${LLHTTP_HEADERS}) |
| 47 | +function(config_librarytarget) |
| 48 | +target_sources(${target}PRIVATE${LLHTTP_SOURCES}${LLHTTP_HEADERS}) |
29 | 49 |
|
30 | | -# On windows with Visual Studio, add a debug postfix so that release |
31 | | -# and debug libraries can coexist. |
32 | | -if(MSVC) |
33 | | -set(CMAKE_DEBUG_POSTFIX"d") |
34 | | -endif() |
| 50 | +target_include_directories(${target}PRIVATE |
| 51 | +${CMAKE_CURRENT_SOURCE_DIR}/include |
| 52 | + ) |
35 | 53 |
|
36 | | -target_include_directories(llhttpPUBLIC |
37 | | - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
38 | | - $<INSTALL_INTERFACE:include> |
39 | | -) |
| 54 | +set_target_properties(${target} PROPERTIES |
| 55 | +OUTPUT_NAME llhttp |
| 56 | +VERSION${PROJECT_VERSION} |
| 57 | +SOVERSION${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} |
| 58 | + PUBLIC_HEADER ${LLHTTP_HEADERS} |
| 59 | + ) |
40 | 60 |
|
41 | | -set_target_properties(llhttp PROPERTIES PUBLIC_HEADER ${LLHTTP_HEADERS}) |
| 61 | +install(TARGETS${target} |
| 62 | +EXPORT llhttp |
| 63 | +LIBRARYDESTINATION${CMAKE_INSTALL_LIBDIR} |
| 64 | +ARCHIVEDESTINATION${CMAKE_INSTALL_LIBDIR} |
| 65 | +PUBLIC_HEADERDESTINATION${CMAKE_INSTALL_INCLUDEDIR} |
| 66 | + ) |
42 | 67 |
|
43 | | -install(TARGETS llhttp |
44 | | -EXPORT llhttp |
45 | | -ARCHIVEDESTINATION lib |
46 | | -PUBLIC_HEADERDESTINATION include/ |
47 | | -) |
| 68 | +install(FILES |
| 69 | +${CMAKE_CURRENT_SOURCE_DIR}/libllhttp.pc |
| 70 | +DESTINATION${CMAKE_INSTALL_LIBDIR}/pkgconfig |
| 71 | + ) |
48 | 72 |
|
49 | | -# This is required to work with FetchContent |
50 | | -install(EXPORT llhttp |
| 73 | +# This is required to work with FetchContent |
| 74 | +install(EXPORT llhttp |
51 | 75 | FILE llhttp-config.cmake |
52 | 76 | NAMESPACE llhttp:: |
53 | | -DESTINATION lib/cmake/llhttp) |
| 77 | +DESTINATION${CMAKE_INSTALL_LIBDIR}/cmake/llhttp) |
| 78 | +endfunction(config_librarytarget) |
| 79 | + |
| 80 | +if(BUILD_SHARED_LIBS) |
| 81 | +add_library(llhttp_sharedSHARED |
| 82 | +${llhttp_src} |
| 83 | + ) |
| 84 | +add_library(llhttp::llhttpALIASllhttp_shared) |
| 85 | +config_library(llhttp_shared) |
| 86 | +endif() |
| 87 | + |
| 88 | +if(BUILD_STATIC_LIBS) |
| 89 | +add_library(llhttp_staticSTATIC |
| 90 | +${llhttp_src} |
| 91 | + ) |
| 92 | +if(BUILD_SHARED_LIBS) |
| 93 | +add_library(llhttp::llhttpALIASllhttp_shared) |
| 94 | + else() |
| 95 | +add_library(llhttp::llhttpALIASllhttp_static) |
| 96 | + endif() |
| 97 | +config_library(llhttp_static) |
| 98 | +endif() |
| 99 | + |
| 100 | +# On windows with Visual Studio, add a debug postfix so that release |
| 101 | +# and debug libraries can coexist. |
| 102 | +if(MSVC) |
| 103 | +set(CMAKE_DEBUG_POSTFIX"d") |
| 104 | +endif() |
| 105 | + |
| 106 | +# Print project configure summary |
| 107 | +message(STATUS"") |
| 108 | +message(STATUS"") |
| 109 | +message(STATUS"Project configure summary:") |
| 110 | +message(STATUS"") |
| 111 | +message(STATUS" CMake build type .................: ${CMAKE_BUILD_TYPE}") |
| 112 | +message(STATUS" Install prefix ...................: ${CMAKE_INSTALL_PREFIX}") |
| 113 | +message(STATUS" Build shared library .............: ${BUILD_SHARED_LIBS}") |
| 114 | +message(STATUS" Build static library .............: ${BUILD_STATIC_LIBS}") |
| 115 | +message(STATUS"") |
0 commit comments