Skip to content

Commit 95db29b

Browse files
Merge #1679: cmake: Use PUBLIC_HEADER target property in installation logic
6f67151 cmake: Use `PUBLIC_HEADER` target property (Hennadii Stepanov) c32715b cmake, move-only: Move module option processing to `src/CMakeLists.txt` (Hennadii Stepanov) Pull request description: This PR updates the installation logic to the idiomatic approach. ACKs for top commit: theuni: utACK 6f67151 Tree-SHA512: b305c6ef15e8334a570823af4482dc097c09a1eec6472098bd2767bc2ad99c3c9e4b1b650087768160e682792ae8da15086bf5397b1d0f5fde4208b489781698
2 parents f24b838 + 6f67151 commit 95db29b

File tree

2 files changed

+52
-63
lines changed

2 files changed

+52
-63
lines changed

CMakeLists.txt

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -52,40 +52,6 @@ option(SECP256K1_ENABLE_MODULE_SCHNORRSIG "Enable schnorrsig module." ON)
5252
option(SECP256K1_ENABLE_MODULE_MUSIG "Enable musig module." ON)
5353
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
5454

55-
# Processing must be done in a topological sorting of the dependency graph
56-
# (dependent module first).
57-
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
58-
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
59-
endif()
60-
61-
if(SECP256K1_ENABLE_MODULE_MUSIG)
62-
if(DEFINED SECP256K1_ENABLE_MODULE_SCHNORRSIG AND NOT SECP256K1_ENABLE_MODULE_SCHNORRSIG)
63-
message(FATAL_ERROR "Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.")
64-
endif()
65-
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
66-
add_compile_definitions(ENABLE_MODULE_MUSIG=1)
67-
endif()
68-
69-
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
70-
if(DEFINED SECP256K1_ENABLE_MODULE_EXTRAKEYS AND NOT SECP256K1_ENABLE_MODULE_EXTRAKEYS)
71-
message(FATAL_ERROR "Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.")
72-
endif()
73-
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
74-
add_compile_definitions(ENABLE_MODULE_SCHNORRSIG=1)
75-
endif()
76-
77-
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
78-
add_compile_definitions(ENABLE_MODULE_EXTRAKEYS=1)
79-
endif()
80-
81-
if(SECP256K1_ENABLE_MODULE_RECOVERY)
82-
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
83-
endif()
84-
85-
if(SECP256K1_ENABLE_MODULE_ECDH)
86-
add_compile_definitions(ENABLE_MODULE_ECDH=1)
87-
endif()
88-
8955
option(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS "Enable external default callback functions." OFF)
9056
if(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS)
9157
add_compile_definitions(USE_EXTERNAL_DEFAULT_CALLBACKS=1)

src/CMakeLists.txt

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
1-
# Must be included before CMAKE_INSTALL_INCLUDEDIR is used.
2-
include(GNUInstallDirs)
1+
add_library(secp256k1)
2+
3+
set_property(TARGET secp256k1 PROPERTY PUBLIC_HEADER
4+
${PROJECT_SOURCE_DIR}/include/secp256k1.h
5+
${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h
6+
)
7+
8+
# Processing must be done in a topological sorting of the dependency graph
9+
# (dependent module first).
10+
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
11+
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
12+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_ellswift.h)
13+
endif()
14+
15+
if(SECP256K1_ENABLE_MODULE_MUSIG)
16+
if(DEFINED SECP256K1_ENABLE_MODULE_SCHNORRSIG AND NOT SECP256K1_ENABLE_MODULE_SCHNORRSIG)
17+
message(FATAL_ERROR "Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.")
18+
endif()
19+
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
20+
add_compile_definitions(ENABLE_MODULE_MUSIG=1)
21+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h)
22+
endif()
23+
24+
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
25+
if(DEFINED SECP256K1_ENABLE_MODULE_EXTRAKEYS AND NOT SECP256K1_ENABLE_MODULE_EXTRAKEYS)
26+
message(FATAL_ERROR "Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.")
27+
endif()
28+
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
29+
add_compile_definitions(ENABLE_MODULE_SCHNORRSIG=1)
30+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_schnorrsig.h)
31+
endif()
32+
33+
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
34+
add_compile_definitions(ENABLE_MODULE_EXTRAKEYS=1)
35+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_extrakeys.h)
36+
endif()
37+
38+
if(SECP256K1_ENABLE_MODULE_RECOVERY)
39+
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
40+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_recovery.h)
41+
endif()
42+
43+
if(SECP256K1_ENABLE_MODULE_ECDH)
44+
add_compile_definitions(ENABLE_MODULE_ECDH=1)
45+
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h)
46+
endif()
347

448
add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
549
precomputed_ecmult.c
@@ -8,7 +52,7 @@ add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
852

953
# Add objects explicitly rather than linking to the object libs to keep them
1054
# from being exported.
11-
add_library(secp256k1 secp256k1.c $<TARGET_OBJECTS:secp256k1_precomputed>)
55+
target_sources(secp256k1 PRIVATE secp256k1.c $<TARGET_OBJECTS:secp256k1_precomputed>)
1256

1357
add_library(secp256k1_asm INTERFACE)
1458
if(SECP256K1_ASM STREQUAL "arm32")
@@ -34,7 +78,6 @@ set_target_properties(secp256k1_precomputed PROPERTIES POSITION_INDEPENDENT_CODE
3478
target_include_directories(secp256k1 INTERFACE
3579
# Add the include path for parent projects so that they don't have to manually add it.
3680
$<BUILD_INTERFACE:$<$<NOT:$<BOOL:${PROJECT_IS_TOP_LEVEL}>>:${PROJECT_SOURCE_DIR}/include>>
37-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
3881
)
3982

4083
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
@@ -102,36 +145,16 @@ if(SECP256K1_BUILD_CTIME_TESTS)
102145
endif()
103146

104147
if(SECP256K1_INSTALL)
148+
include(GNUInstallDirs)
149+
target_include_directories(secp256k1 INTERFACE
150+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
151+
)
105152
install(TARGETS secp256k1
106153
EXPORT ${PROJECT_NAME}-targets
107154
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
108155
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
109156
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
110-
)
111-
set(${PROJECT_NAME}_headers
112-
"${PROJECT_SOURCE_DIR}/include/secp256k1.h"
113-
"${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h"
114-
)
115-
if(SECP256K1_ENABLE_MODULE_ECDH)
116-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h")
117-
endif()
118-
if(SECP256K1_ENABLE_MODULE_RECOVERY)
119-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_recovery.h")
120-
endif()
121-
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
122-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_extrakeys.h")
123-
endif()
124-
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
125-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_schnorrsig.h")
126-
endif()
127-
if(SECP256K1_ENABLE_MODULE_MUSIG)
128-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h")
129-
endif()
130-
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
131-
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ellswift.h")
132-
endif()
133-
install(FILES ${${PROJECT_NAME}_headers}
134-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
157+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
135158
)
136159

137160
install(EXPORT ${PROJECT_NAME}-targets

0 commit comments

Comments
 (0)