Skip to content

Commit 567211b

Browse files
committed
top-level-only cmake
1 parent 079bab2 commit 567211b

File tree

8 files changed

+1113
-0
lines changed

8 files changed

+1113
-0
lines changed

0001-required-source-changes-for-windows-build.patch

Lines changed: 805 additions & 0 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
cmake_minimum_required(VERSION 3.7.0)
2+
include(CMakePrintHelpers)
3+
4+
# set the project name
5+
project(FastJetContrib VERSION 1.101)
6+
# set a pre-release version if relevant, e.g. "-beta1"
7+
#set(PROJECT_VERSION_PRERELEASE "")
8+
set(PROJECT_VERSION_PRERELEASE "-devel")
9+
10+
if(MSVC)
11+
execute_process(COMMAND
12+
git apply --whitespace=fix 0001-required-source-changes-for-windows-build.patch
13+
WORKING_DIRECTORY
14+
${CMAKE_CURRENT_SOURCE_DIR}
15+
)
16+
endif()
17+
18+
#----------------------------------------------------------------------
19+
# version information
20+
set(FASTJETCONTRIB_VERSION "${PROJECT_VERSION}${PROJECT_VERSION_PRERELEASE}")
21+
22+
set(FASTJETCONTRIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
23+
set(FASTJETCONTRIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
24+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL "${PROJECT_VERSION_PATCH}")
25+
set(FASTJETCONTRIB_VERSION_PRERELEASE "${PROJECT_VERSION_PRERELEASE}")
26+
# build a unique version number
27+
if (FASTJETCONTRIB_VERSION_MINOR LESS 10)
28+
set(FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER "0${FASTJETCONTRIB_VERSION_MINOR}")
29+
else()
30+
set(FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER "${FASTJETCONTRIB_VERSION_MINOR}")
31+
endif()
32+
if (FASTJETCONTRIB_VERSION_PATCHLEVEL LESS 10)
33+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER "0${FASTJETCONTRIB_VERSION_PATCHLEVEL}")
34+
else()
35+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER "${FASTJETCONTRIB_VERSION_PATCHLEVEL}")
36+
endif()
37+
set(FASTJETCONTRIB_VERSION_NUMBER "${FASTJETCONTRIB_VERSION_MAJOR}${FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER}${FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER}")
38+
39+
# print out the project name and version
40+
cmake_print_variables(PROJECT_NAME FASTJETCONTRIB_VERSION)
41+
42+
# need this to be able to set the installation prefix in fastjet-config
43+
include(GNUInstallDirs)
44+
45+
#----------------------------------------------------------------------
46+
# basic C++ checks
47+
#----------------------------------------------------------------------
48+
49+
# specify the C++ standard
50+
set(CMAKE_CXX_STANDARD 14)
51+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
52+
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
53+
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
54+
if (MSVC)
55+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
56+
endif()
57+
58+
59+
if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") # Intel compilers are used with -O3
60+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -Wshadow")
61+
elseif (MSVC)
62+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus /utf-8 /W4 /Ox")
63+
else()
64+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wshadow")
65+
endif()
66+
67+
# all contribs require fastjet so get it now!
68+
if(NOT TARGET fastjet::fastjet)
69+
find_package(fastjet REQUIRED)
70+
endif()
71+
72+
# automatically determine the list of contribs, as done in configure
73+
file(GLOB MAYBE_CONTRIB_DIRS LIST_DIRECTORIES true RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/*")
74+
foreach(MAYBE_CONTRIB_DIR ${MAYBE_CONTRIB_DIRS})
75+
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${MAYBE_CONTRIB_DIR} AND NOT ${MAYBE_CONTRIB_DIR} STREQUAL "Template")
76+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MAYBE_CONTRIB_DIR}/VERSION
77+
OR EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MAYBE_CONTRIB_DIR}/FJCONTRIB.cfg
78+
)
79+
list(APPEND fjcontrib_DIRNAMES ${MAYBE_CONTRIB_DIR})
80+
endif()
81+
endif()
82+
endforeach()
83+
84+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
85+
string(TOUPPER ${FJCONTRIB_NAME} FJCONTRIB_NAME_UPPER)
86+
option(FASTJETCONTRIB_ENABLE_${FJCONTRIB_NAME_UPPER} "Enable the ${FJCONTRIB_NAME} Contrib [default=ON]" ON)
87+
endforeach()
88+
option(FASTJETCONTRIB_ENABLE_FRAGILELIB "Enable fragile combined mono-library [default=OFF]" OFF)
89+
90+
set(fjcontrib_combined_TARGETS)
91+
92+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
93+
94+
string(TOUPPER ${FJCONTRIB_NAME} FJCONTRIB_NAME_UPPER)
95+
string(TOLOWER ${FJCONTRIB_NAME} FJCONTRIB_NAME_LOWER)
96+
if (FASTJETCONTRIB_ENABLE_${FJCONTRIB_NAME_UPPER})
97+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake-templates/defines.h.in ${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h)
98+
99+
set(SRCLINE)
100+
set(INCLLINE)
101+
set(DEPLINE)
102+
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/Makefile FJCONTRIB_MAKEFILE)
103+
while(FJCONTRIB_MAKEFILE)
104+
list(POP_FRONT FJCONTRIB_MAKEFILE MAKEFILE_LINE)
105+
#message("${MAKEFILE_LINE}")
106+
if(MAKEFILE_LINE MATCHES "^SRCS=")
107+
string(REPLACE "SRCS=" "" SRCLINE "${MAKEFILE_LINE}")
108+
set(${FJCONTRIB_NAME_LOWER}_SOURCES "${SRCLINE}")
109+
endif()
110+
if(MAKEFILE_LINE MATCHES "^INSTALLED_HEADERS=")
111+
string(REPLACE "INSTALLED_HEADERS=" "" INCLLINE "${MAKEFILE_LINE}")
112+
set(${FJCONTRIB_NAME_LOWER}_INCLUDES "${INCLLINE}")
113+
endif()
114+
if(MAKEFILE_LINE MATCHES "^DEPENDS_ON\ =")
115+
string(REPLACE "DEPENDS_ON\ =" "" DEPLINE "${MAKEFILE_LINE}")
116+
string(STRIP "${DEPLINE}" DEPLINE)
117+
set(${FJCONTRIB_NAME_LOWER}_DEPENDENCIES "${DEPLINE}")
118+
endif()
119+
endwhile()
120+
121+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include)
122+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake-templates/incfastjet_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/CMakeLists.txt COPYONLY)
123+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake-templates/inccontrib_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/fastjet/CMakeLists.txt COPYONLY)
124+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake-templates/incdir_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/fastjet/contrib/CMakeLists.txt)
125+
endif()
126+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake-templates/contrib_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/CMakeLists.txt)
127+
128+
add_subdirectory(${FJCONTRIB_NAME})
129+
if (TARGET ${FJCONTRIB_NAME})
130+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
131+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE True)
132+
endif()
133+
if (MSVC)
134+
target_compile_definitions(${FJCONTRIB_NAME} PUBLIC _USE_MATH_DEFINES)
135+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
136+
target_compile_definitions(${FJCONTRIB_NAME} PRIVATE fastjetcontrib_EXPORTS)
137+
else()
138+
target_compile_definitions(${FJCONTRIB_NAME} PRIVATE ${FJCONTRIB_NAME_LOWER}_EXPORTS)
139+
endif()
140+
endif()
141+
list(APPEND fjcontrib_combined_TARGETS $<TARGET_OBJECTS:${FJCONTRIB_NAME}>)
142+
endif()
143+
endif()
144+
145+
endforeach()
146+
147+
if (fjcontrib_combined_TARGETS AND FASTJETCONTRIB_ENABLE_FRAGILELIB)
148+
add_library(fastjetcontribfragile SHARED ${fjcontrib_combined_TARGETS})
149+
target_link_libraries(fastjetcontribfragile PUBLIC fastjet::fastjettools)
150+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
151+
target_include_directories(fastjetcontribfragile
152+
PUBLIC
153+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include>
154+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include>
155+
$<INSTALL_INTERFACE:include>
156+
)
157+
endforeach()
158+
159+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
160+
set_target_properties(fastjetcontribfragile PROPERTIES INSTALL_RPATH "@loader_path")
161+
elseif (NOT MSVC)
162+
set_target_properties(fastjetcontribfragile PROPERTIES INSTALL_RPATH "$ORIGIN")
163+
endif()
164+
165+
add_library(fastjet::contrib::fastjetcontribfragile ALIAS fastjetcontribfragile)
166+
install(TARGETS
167+
fastjetcontribfragile
168+
EXPORT
169+
FastjetContribTargets
170+
RUNTIME
171+
COMPONENT Runtime
172+
DESTINATION ${CMAKE_INSTALL_BINDIR}
173+
LIBRARY
174+
COMPONENT Runtime
175+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
176+
ARCHIVE
177+
COMPONENT Development
178+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
179+
)
180+
endif()
181+
182+
# allow Fastjet Contrib to work with find_package
183+
export(EXPORT FastjetContribTargets
184+
NAMESPACE fastjet::contrib::
185+
FILE "${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribTargets.cmake"
186+
)
187+
188+
install(EXPORT FastjetContribTargets
189+
NAMESPACE fastjet::contrib::
190+
FILE fastjetcontribTargets.cmake
191+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib
192+
)
193+
194+
include(CMakePackageConfigHelpers)
195+
196+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
197+
"${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfig.cmake"
198+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib"
199+
NO_SET_AND_CHECK_MACRO
200+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
201+
)
202+
203+
write_basic_package_version_file(
204+
"${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfigVersion.cmake"
205+
VERSION "${PROJECT_VERSION}"
206+
COMPATIBILITY AnyNewerVersion
207+
)
208+
209+
install(FILES
210+
${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfig.cmake
211+
${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfigVersion.cmake
212+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib
213+
)
214+

Config.cmake.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
find_package(fastjet REQUIRED)
4+
5+
include ( "${CMAKE_CURRENT_LIST_DIR}/fastjetcontribTargets.cmake" )
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include)
2+
add_subdirectory(include)
3+
install(FILES
4+
${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h
5+
DESTINATION
6+
include/fastjet/contrib
7+
)
8+
else()
9+
file(COPY ${${FJCONTRIB_NAME_LOWER}_INCLUDES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/fastjet/contrib)
10+
install(FILES
11+
${${FJCONTRIB_NAME_LOWER}_INCLUDES}
12+
${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h
13+
DESTINATION
14+
include/fastjet/contrib
15+
)
16+
endif()
17+
18+
if(${FJCONTRIB_NAME_LOWER}_SOURCES)
19+
20+
21+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
22+
add_library(${FJCONTRIB_NAME} OBJECT ${${FJCONTRIB_NAME_LOWER}_SOURCES})
23+
else()
24+
add_library(${FJCONTRIB_NAME} SHARED ${${FJCONTRIB_NAME_LOWER}_SOURCES})
25+
endif()
26+
target_link_libraries(${FJCONTRIB_NAME} PUBLIC fastjet::fastjettools ${${FJCONTRIB_NAME_LOWER}_DEPENDENCIES})
27+
if("${FJCONTRIB_NAME}" STREQUAL "SDFPlugin")
28+
target_link_libraries(${FJCONTRIB_NAME} PUBLIC fastjet::fastjetplugins)
29+
endif()
30+
target_include_directories(${FJCONTRIB_NAME}
31+
PUBLIC
32+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include>
33+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include>
34+
$<INSTALL_INTERFACE:include>
35+
)
36+
37+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
38+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
39+
elseif (NOT MSVC)
40+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
41+
endif()
42+
43+
if (NOT FASTJETCONTRIB_ENABLE_FRAGILELIB)
44+
add_library(fastjet::contrib::${FJCONTRIB_NAME} ALIAS ${FJCONTRIB_NAME})
45+
install(TARGETS
46+
${FJCONTRIB_NAME}
47+
EXPORT
48+
FastjetContribTargets
49+
RUNTIME
50+
COMPONENT Runtime
51+
DESTINATION ${CMAKE_INSTALL_BINDIR}
52+
LIBRARY
53+
COMPONENT Runtime
54+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
55+
ARCHIVE
56+
COMPONENT Development
57+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
58+
)
59+
endif()
60+
endif()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Required definitions for exporting static variables in windows builds.
2+
// This is only needed for static data variables since we use
3+
// the CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON automation when building with cmake.
4+
// That automation handles all member functions.
5+
// So, when making a static variable please add in the beginning of a variable
6+
// definition, like a keyword. It is very important to use the windll export/import
7+
// relevant to the library you are working in, see below for possibilities!
8+
// e.g.: NSUBJETTINESS_WINDLL static bool verbosity; // inside a SomeClass.h, for instance
9+
// Similarly for declarations you must prefix the appropriate WINDLL
10+
// e.g. NSUBJETTINESS_WINDLL static bool SomeClass::verbosity = true; // in SomeClass.cc
11+
#ifdef _WIN32
12+
#if defined(${FJCONTRIB_NAME_LOWER}_EXPORTS) || defined(fastjetcontrib_EXPORTS)
13+
#define ${FJCONTRIB_NAME_UPPER}_WINDLL __declspec(dllexport) // Export when building the DLL
14+
#else
15+
#define ${FJCONTRIB_NAME_UPPER}_WINDLL __declspec(dllimport) // Import when using the DLL
16+
#endif
17+
#else
18+
// For Linux/macOS
19+
#define ${FJCONTRIB_NAME_UPPER}_WINDLL
20+
#endif
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(contrib)
2+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
install(FILES
2+
${${FJCONTRIB_NAME_LOWER}_INCLUDES}
3+
DESTINATION
4+
include/fastjet/contrib
5+
)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(fastjet)
2+

0 commit comments

Comments
 (0)