Skip to content

Commit 138e668

Browse files
committed
CMake build system fixes to build on Mac OSX
1 parent 52458ef commit 138e668

File tree

17 files changed

+386
-202
lines changed

17 files changed

+386
-202
lines changed

bootstrap/cmake_modules/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
FindBootstrap.cmake
77
FindLibexecinfo.cmake
88
FindLibbfd.cmake
9-
FindQwt.cmake
109
FindSphinx.cmake
1110
FindPelican.cmake
1211
FindCOLOQUINTE.cmake

bootstrap/cmake_modules/FindBootstrap.cmake

+26-37
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
#
42
# Setup CMake policies.
53
#
@@ -82,13 +80,21 @@
8280
set(BUILD_SHARED_LIBS "ON")
8381
#set(DEBUG_FLAGS "-g -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
8482
set(DEBUG_FLAGS "-g")
83+
set(CMAKE_CXX_STANDARD 17)
8584
if(CYGWIN)
8685
set(ADDITIONAL_FLAGS "-D_GLIBCXX_USE_C99")
8786
set(CXX_STANDARD "gnu++17")
8887
else()
8988
set(ADDTIONAL_FLAGS "")
9089
set(CXX_STANDARD "c++17")
9190
endif()
91+
92+
set(LINK_UNRESOLVED "-Wl,--unresolved-symbols=ignore-all")
93+
if(APPLE)
94+
set(LINK_UNRESOLVED "-undefined dynamic_lookup")
95+
endif()
96+
97+
9298
#set(CMAKE_C_FLAGS_DEBUG " -Wall -fsanitize=address ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C Compiler Debug options." FORCE)
9399
set(CMAKE_C_FLAGS_DEBUG " -Wall ${ADDTIONAL_FLAGS} ${DEBUG_FLAGS}" CACHE STRING "C Compiler Debug options." FORCE)
94100
set(CMAKE_C_FLAGS_RELEASE " -Wall -O2 ${ADDTIONAL_FLAGS} -DNDEBUG" CACHE STRING "C Compiler Release options." FORCE)
@@ -159,11 +165,15 @@ endif()
159165
endmacro()
160166
#
161167
# sets that a library is expected to have unresolved symbols
162-
# Usage: set_library_unresolved_symbols(<PROJECT>)
168+
# Usage: set_has_unresolved_symbols(<PROJECT>)
163169
#
164170
# Should be used before set_libraries_path.
165171
macro(set_has_unresolved_symbols configname)
166-
set(${configname}_LIBRARIES "-Wl,--unresolved-symbols=ignore-all" ${${configname}_LIBRARIES})
172+
if( TARGET ${configname} )
173+
set_target_properties( ${configname} PROPERTIES LINK_FLAGS ${LINK_UNRESOLVED} )
174+
else()
175+
set(${configname}_LIBRARIES ${LINK_UNRESOLVED} ${${configname}_LIBRARIES})
176+
endif()
167177
endmacro()
168178

169179
#
@@ -295,34 +305,13 @@ endif()
295305
# Find Qwt, correlated to the Qt version.
296306
#
297307
macro(setup_qwt)
298-
if(WITH_QT4)
299-
find_path(QWT_INCLUDE_DIR NAMES qwt.h
300-
PATHS /usr/include/qwt-qt4
301-
/opt/local/libexec/qt4/include
302-
/usr/include/qt4
303-
/usr/include
304-
PATH_SUFFIXES qwt )
305-
find_library(QWT_LIBRARY NAMES qwt-qt4 qwt
306-
PATHS /opt/local/libexec/qt4/lib
307-
/usr/lib64
308-
/usr/lib )
309-
else()
310-
find_path(QWT_INCLUDE_DIR NAMES qwt.h
311-
PATHS /usr/include/qt5
312-
/usr/include
313-
PATH_SUFFIXES qwt )
314-
find_library(QWT_LIBRARY NAMES qwt-qt5 qwt
315-
PATHS /usr/lib64
316-
/usr/lib )
317-
endif()
318-
319-
if( QWT_INCLUDE_DIR AND QWT_LIBRARY)
320-
set(QWT_FOUND TRUE)
321-
endif()
322-
308+
find_package(PkgConfig)
309+
pkg_search_module(QWT REQUIRED Qt5Qwt6)
323310
if(QWT_FOUND)
311+
set( QWT_LIBRARY ${QWT_LINK_LIBRARIES} )
312+
set( QWT_INCLUDE_DIR ${QWT_CFLAGS} )
324313
if(NOT QWT_FIND_QUIETLY)
325-
message(STATUS "-- Found Qwt: ${QWT_LIBRARY}")
314+
message(STATUS "-- Found Qwt: libs:${QWT_LIBRARY} cflags:${QWT_INCLUDE_DIR}")
326315
endif()
327316
else()
328317
if(QWT_FIND_REQUIRED)
@@ -425,12 +414,12 @@ endif()
425414
list( GET clibSpec 2 soversion )
426415
set( pyDeplibs ${clib} ${deplibs} )
427416

428-
add_library( ${clib} ${pyCpps} )
429-
set_target_properties( ${clib} PROPERTIES VERSION ${version} SOVERSION ${soversion})
430-
#target_compile_definitions( ${clib} PUBLIC Py_LIMITED_API=1)
431-
target_link_libraries( ${clib} ${deplibs} )
417+
add_library( ${clib} ${pyCpps} )
418+
set_target_properties( ${clib} PROPERTIES VERSION ${version} SOVERSION ${soversion})
419+
#target_compile_definitions( ${clib} PUBLIC Py_LIMITED_API=1)
420+
target_link_libraries( ${clib} ${deplibs} )
421+
set_has_unresolved_symbols( ${clib} )
432422
install( TARGETS ${clib} DESTINATION lib${LIB_SUFFIX} )
433-
target_link_options( ${clib} PRIVATE "LINKER:--unresolved-symbols=ignore-all")
434423
endif()
435424

436425
set( pytarget "${pymodule}_target" )
@@ -443,8 +432,7 @@ endif()
443432
)
444433
#target_compile_definitions( ${pytarget} PUBLIC Py_LIMITED_API=1)
445434
target_link_libraries( ${pytarget} ${pyDeplibs} )
446-
target_link_options( ${pytarget} PRIVATE "LINKER:--unresolved-symbols=ignore-all")
447-
435+
set_has_unresolved_symbols( ${pytarget} )
448436
install( TARGETS ${pytarget} DESTINATION ${Python_CORIOLISARCH} )
449437
if( NOT ("${pyIncludes}" STREQUAL "None") )
450438
install( FILES ${pyIncludes} DESTINATION ${inc_install_dir} )
@@ -466,6 +454,7 @@ endif()
466454
add_library( ${pymodule} MODULE ${pyCpps} )
467455
set_target_properties( ${pymodule} PROPERTIES PREFIX "" )
468456
target_link_libraries( ${pymodule} ${deplibs} )
457+
set_has_unresolved_symbols( ${pymodule} )
469458
# target_compile_definitions( ${pymodule} PUBLIC Py_LIMITED_API=1)
470459

471460
install( TARGETS ${pymodule} DESTINATION ${Python_CORIOLISARCH} )

bootstrap/cmake_modules/FindLEFDEF.cmake

+9-28
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,7 @@
2929
# The LEF C++ API library (zlib) : LEFDEF_ZLEF_LIBRARY
3030
# LEFDEF_ZLEF_LIBRARY_RELEASE
3131

32-
# Try to find a reasonable CORIOLIS_TOP value.
33-
if( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
34-
set ( CORIOLIS_USER_TOP "$ENV{CORIOLIS_USER_TOP}" )
35-
else( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
36-
if( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
37-
set ( CORIOLIS_TOP "$ENV{CORIOLIS_TOP}" )
38-
endif( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
39-
endif( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
40-
32+
SETUP_SEARCH_DIR(CORIOLIS)
4133

4234
macro( _find_lefdef_lib varname libname )
4335
find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} )
@@ -66,21 +58,6 @@
6658
# Don't even bother under Win32
6759
if( UNIX )
6860
set( LEFDEF_FOUND "YES" )
69-
set( LEFDEF_SEARCH_PATH "$ENV{CORIOLIS_TOP}"
70-
"$ENV{LEFDEF_TOP}"
71-
"/usr"
72-
"/opt/lefdef-5.8"
73-
"/opt/lefdef-5.7"
74-
"/opt/lefdef-5.6"
75-
"/opt/lefdef"
76-
"$ENV{HOME}/oa/lefdef/5.7-s038"
77-
"/soc/oa"
78-
)
79-
message( "-- Components of LEFDEF_DIR_SEARCH:" )
80-
foreach( PATH ${LEFDEF_SEARCH_PATH} )
81-
message( "-- ${PATH}" )
82-
endforeach()
83-
8461
set( LEFDEF_LIBRARIES "" )
8562
set( LEFDEF_LIBRARY_SEARCH_PATH "" )
8663

@@ -90,10 +67,14 @@
9067
DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
9168
message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" )
9269

93-
find_path( LEFDEF_LIBRARY_DIR NAMES "libdef.so"
94-
PATHS ${LEFDEF_SEARCH_PATH}
95-
PATH_SUFFIXES "lib64" "lib"
96-
DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" )
70+
FIND_LIBRARY( LEFDEF_LIBRARY_DIR
71+
NAMES def
72+
PATHS ${CORIOLIS_DIR_SEARCH}
73+
PATH_SUFFIXES lib64 lib
74+
# Help the user find it if we cannot.
75+
DOC "${LEFDEF_LIBRARY_DIR_DESCRIPTION}"
76+
)
77+
9778
message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" )
9879

9980
if( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )

bootstrap/cmake_modules/FindQwt.cmake

+31-16
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,52 @@
44
# Redistribution and use is allowed according to the terms of the BSD license.
55
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
66
#
7-
# Once run this will define:
8-
#
7+
# Once run this will define:
8+
#
99
# QWT_FOUND = system has QWT lib
1010
# QWT_LIBRARY = full path to the QWT library
11-
# QWT_INCLUDE_DIR = where to find headers
11+
# QWT_INCLUDE_DIR = where to find headers
1212
#
1313

1414

15+
set(QWT_LIBRARY_NAMES qwt-${QT_VERSION_BASE_LOWER} qwt qwt5)
16+
17+
find_library(QWT_LIBRARY
18+
NAMES ${QWT_LIBRARY_NAMES}
19+
PATHS
20+
/usr/lib
21+
/usr/local/lib
22+
/usr/local/lib/${QT_VERSION_BASE_LOWER}
23+
"$ENV{HOMEBREW_PREFIX}/opt/qwt-qt5/lib"
24+
"$ENV{LIB_DIR}/lib"
25+
"$ENV{LIB}"
26+
)
27+
28+
set(_qwt_fw)
29+
if(QWT_LIBRARY MATCHES "/qwt.*\\.framework")
30+
string(REGEX REPLACE "^(.*/qwt.*\\.framework).*$" "\\1" _qwt_fw "${QWT_LIBRARY}")
31+
endif()
32+
1533
FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS
34+
"${_qwt_fw}/Headers"
1635
/usr/include
17-
/usr/include/qt5
36+
/usr/include/${QT_VERSION_BASE_LOWER}
1837
/usr/local/include
19-
"$ENV{LIB_DIR}/include"
20-
"$ENV{INCLUDE}"
21-
PATH_SUFFIXES qwt-qt4 qwt qwt5
22-
)
23-
24-
FIND_LIBRARY(QWT_LIBRARY NAMES qwt qwt5 qwt-qt4 qwt5-qt4 PATHS
25-
/usr/lib
26-
/usr/local/lib
27-
"$ENV{LIB_DIR}/lib"
28-
"$ENV{LIB}/lib"
29-
)
38+
/usr/local/include/${QT_VERSION_BASE_LOWER}
39+
"$ENV{LIB_DIR}/include"
40+
"$ENV{INCLUDE}"
41+
PATH_SUFFIXES qwt-${QT_VERSION_BASE_LOWER} ${QT_VERSION_BASE_LOWER}/qwt qwt qwt5
42+
)
3043

3144
IF (QWT_INCLUDE_DIR AND QWT_LIBRARY)
3245
SET(QWT_FOUND TRUE)
3346
ENDIF (QWT_INCLUDE_DIR AND QWT_LIBRARY)
3447

3548
IF (QWT_FOUND)
49+
FILE(READ ${QWT_INCLUDE_DIR}/qwt_global.h qwt_header)
50+
STRING(REGEX REPLACE "^.*QWT_VERSION_STR +\"([^\"]+)\".*$" "\\1" QWT_VERSION_STR "${qwt_header}")
3651
IF (NOT QWT_FIND_QUIETLY)
37-
MESSAGE(STATUS "Found Qwt: ${QWT_LIBRARY}")
52+
MESSAGE(STATUS "Found Qwt: ${QWT_LIBRARY} (${QWT_VERSION_STR})")
3853
ENDIF (NOT QWT_FIND_QUIETLY)
3954
ELSE (QWT_FOUND)
4055
IF (QWT_FIND_REQUIRED)

bora/CMakeLists.txt

+1-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
set_cmake_policies()
1818
setup_boost(program_options)
1919
setup_qt()
20-
setup_qwt()
2120
setup_python()
22-
21+
find_package(Qwt REQUIRED)
2322
find_package(Libexecinfo REQUIRED)
2423
find_package(PythonSitePackages REQUIRED)
2524
find_package(LEFDEF REQUIRED)
@@ -29,7 +28,6 @@
2928
find_package(ANABATIC REQUIRED)
3029
find_package(KATANA REQUIRED)
3130
find_package(Doxygen)
32-
3331
add_subdirectory(src)
3432
add_subdirectory(python)
3533
#add_subdirectory(cmake_modules)

bora/src/CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
${HURRICANE_INCLUDE_DIR}
88
${CONFIGURATION_INCLUDE_DIR}
99
${Boost_INCLUDE_DIRS}
10-
${QWT_INCLUDE_DIR}
1110
${QtX_INCLUDE_DIRS}
1211
${Python_INCLUDE_DIRS}
12+
${QWT_INCLUDE_DIR}
1313
)
1414
set( includes bora/Constants.h
1515
bora/ParameterRange.h
@@ -98,16 +98,17 @@
9898
${FLUTE_LIBRARIES}
9999
${LEFDEF_LIBRARIES}
100100
${OA_LIBRARIES}
101-
${QWT_LIBRARY}
102101
${QtX_LIBRARIES}
103102
${Boost_LIBRARIES}
103+
${QWT_LIBRARY}
104104
-lutil
105105
)
106106

107107
add_library( bora ${cpps} ${mocCpps} ${pyCpps} )
108108
set_target_properties( bora PROPERTIES VERSION 1.0 SOVERSION 1 )
109109
target_link_libraries( bora ${depLibs} )
110110

111+
111112
add_python_module( "${pyCpps}"
112113
"${pyIncludes}"
113114
"pybora;1.0;1"

builder.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def validate_cmake(self) -> None:
5353
raise RuntimeError("CMake >= 3.1.0 is required on Windows")
5454

5555
def build_cmake_extension(self, ext: CMakeExtension) -> None:
56+
print(f"Building: {ext.name}")
5657
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
5758
cmake_args = []
5859

@@ -76,6 +77,7 @@ def build_cmake_extension(self, ext: CMakeExtension) -> None:
7677
install_dir = os.path.join(extdir, 'coriolis')
7778
os.makedirs(build_dir,exist_ok=True)
7879

80+
cmake_args += ["-Wno-dev"]
7981
if "USE_CCACHE" in env:
8082
cmake_args += ["-DCMAKE_CXX_COMPILER_LAUNCHER=ccache"]
8183

@@ -86,8 +88,10 @@ def build_cmake_extension(self, ext: CMakeExtension) -> None:
8688
cmake_args += [f"-DPython_CORIOLISARCH={install_dir}"]
8789
cmake_args += [f"-DSYS_CONF_DIR={install_dir}"]
8890
cmake_args += [f"-DCORIOLIS_TOP={install_dir}"]
91+
cmake_args += [f"-DCORIOLIS_DIR_SEARCH={install_dir}"]
8992
cmake_args += [f"-DCORIOLIS_USER_TOP={install_dir}"]
9093
cmake_args += [f"-DUSE_MANYLINUX=TRUE"]
94+
cmake_args += ["-DCMAKE_VERBOSE_MAKEFILE=ON"]
9195

9296
cmake_args += [f"-DPython_EXECUTABLE={sys.executable}"]
9397

@@ -96,7 +100,7 @@ def build_cmake_extension(self, ext: CMakeExtension) -> None:
96100
cmake_args += ["-DBUILD_DOC=TRUE"]
97101
cmake_args += ["-DCMAKE_BUILD_RPATH_USE_ORIGIN=1"]
98102
cmake_args += ["-DCMAKE_SKIP_BUILD_RPATH=FALSE"]
99-
cmake_args += ["-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"]
103+
cmake_args += ["-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"]
100104
cmake_args += ["-DCMAKE_INSTALL_RPATH='$ORIGIN/lib:$ORIGIN'"]
101105
cmake_args += ["-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"]
102106

flute/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
setup_python()
2020

2121
find_package(PythonSitePackages REQUIRED)
22+
find_package(Boost REQUIRED)
2223
find_package(HURRICANE REQUIRED)
2324
find_package(CORIOLIS REQUIRED)
2425

flute/src/3.1/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
${HURRICANE_INCLUDE_DIR}
66
${CONFIGURATION_INCLUDE_DIR}
77
${Python_INCLUDE_DIRS}
8+
${Boost_INCLUDE_DIRS}
89
)
910

1011
set( includes flute.h
@@ -34,6 +35,7 @@
3435
${HURRICANE_LIBRARIES}
3536
${UTILITIES_LIBRARY}
3637
${Python3_LIBRARIES}
38+
${Boost_LIBRARIES}
3739

3840
-lutil
3941
)

hurricane/doc/hurricane/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
&& ${DOXYGEN_EXECUTABLE} doxyfile
1414
&& cp -f ${doxExtras} html
1515
)
16-
endif()
1716

1817
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
1918
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
2019
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
20+
endif()

0 commit comments

Comments
 (0)