Skip to content

Commit a7d45f1

Browse files
committed
macos: Pad rpath headers so install_name_tool works
1 parent 2b65adf commit a7d45f1

File tree

4 files changed

+45
-12
lines changed

4 files changed

+45
-12
lines changed

vcpkg-vendor/CMakeLists.txt

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/)
1111
set(CURRENT_PACKAGES_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
1212

1313
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
14+
# Ensure the .so files produced can be patched with install_name_tool later
15+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-headerpad_max_install_names")
16+
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-headerpad_max_install_names")
17+
18+
# Set LDFLAGS for Python wheel builds to ensure sufficient header padding
19+
set(WHEEL_LDFLAGS "-Wl,-headerpad_max_install_names")
20+
1421
execute_process(
1522
COMMAND brew --prefix
1623
RESULT_VARIABLE BREW_PREFIX_RETURN
@@ -24,6 +31,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
2431
if(NOT PKG_CONFIG_FOUND)
2532
set(PKG_CONFIG_EXECUTABLE "${BREW_PREFIX}/pkg-config")
2633
endif()
34+
else()
35+
set(WHEEL_LDFLAGS "")
2736
endif()
2837
find_package(PkgConfig REQUIRED)
2938

@@ -130,7 +139,8 @@ ExternalProject_Add(
130139
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/cffi-prefix/setup.cfg
131140
<SOURCE_DIR>
132141
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
133-
COMMAND ${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
142+
COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=${WHEEL_LDFLAGS} -- ${wheelBuildEnv_PYTHON} -m build
143+
--wheel --outdir <TMP_DIR>/dist
134144
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
135145
<TMP_DIR>/dist/cffi-${CFFI_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
136146
ExternalProject_Get_Property(cffi INSTALL_DIR)
@@ -189,7 +199,8 @@ ExternalProject_Add(
189199
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/gdal_py-prefix/setup.cfg
190200
<SOURCE_DIR>
191201
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
192-
COMMAND ${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
202+
COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=${WHEEL_LDFLAGS} -- ${wheelBuildEnv_PYTHON} -m build
203+
--wheel --outdir <TMP_DIR>/dist
193204
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
194205
<TMP_DIR>/dist/gdal-${GDAL_VERSION}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
195206
ExternalProject_Get_Property(gdal_py INSTALL_DIR)
@@ -230,7 +241,8 @@ ExternalProject_Add(
230241
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/psycopg2-prefix/setup.cfg
231242
<SOURCE_DIR>
232243
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
233-
COMMAND ${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
244+
COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=${WHEEL_LDFLAGS} -- ${wheelBuildEnv_PYTHON} -m build
245+
--wheel --outdir <TMP_DIR>/dist
234246
INSTALL_COMMAND
235247
${CMAKE_COMMAND} -E copy <TMP_DIR>/dist/psycopg2-${PYSCOPG2_WHEEL_VER}-${Python3_WHEEL_ID}.whl
236248
<INSTALL_DIR>)
@@ -266,8 +278,8 @@ ExternalProject_Add(
266278
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pygit2-prefix/setup.cfg
267279
<SOURCE_DIR>
268280
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl <TMP_DIR>/dist <SOURCE_DIR>/.eggs
269-
COMMAND ${CMAKE_COMMAND} -E env LIBGIT2=${CURRENT_PACKAGES_DIR} -- ${pygitWheelBuildEnv_PYTHON} -m
270-
build --wheel --no-isolation --outdir <TMP_DIR>/dist
281+
COMMAND ${CMAKE_COMMAND} -E env LIBGIT2=${CURRENT_PACKAGES_DIR} LDFLAGS=${WHEEL_LDFLAGS} --
282+
${pygitWheelBuildEnv_PYTHON} -m build --wheel --no-isolation --outdir <TMP_DIR>/dist
271283
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
272284
<TMP_DIR>/dist/pygit2-${PYGIT2_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
273285
ExternalProject_Get_Property(pygit2 INSTALL_DIR)
@@ -305,8 +317,9 @@ ExternalProject_Add(
305317
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pyodbc-prefix/setup.cfg
306318
<SOURCE_DIR>
307319
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
308-
COMMAND ${CMAKE_COMMAND} -E env --modify PATH=path_list_prepend:${ODBC_CONFIG_DIR} --
309-
${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
320+
COMMAND
321+
${CMAKE_COMMAND} -E env --modify PATH=path_list_prepend:${ODBC_CONFIG_DIR}
322+
LDFLAGS=${WHEEL_LDFLAGS} -- ${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
310323
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
311324
<TMP_DIR>/dist/pyodbc-${PYODBC_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
312325
ExternalProject_Get_Property(pyodbc INSTALL_DIR)
@@ -327,6 +340,7 @@ library_dirs=${BUILD_WHEEL_LIBRARY_DIRS}
327340
")
328341

329342
set(PYSQLITE3_WHEEL_VER 0.5.2)
343+
330344
ExternalProject_Add(
331345
pysqlite3
332346
GIT_REPOSITORY https://github.com/coleifer/pysqlite3.git
@@ -338,7 +352,8 @@ ExternalProject_Add(
338352
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/pysqlite3-prefix/setup.cfg
339353
<SOURCE_DIR>
340354
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
341-
COMMAND ${wheelBuildEnv_PYTHON} -m build --wheel --outdir <TMP_DIR>/dist
355+
COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=${WHEEL_LDFLAGS} -- ${wheelBuildEnv_PYTHON} -m build
356+
--wheel --outdir <TMP_DIR>/dist
342357
INSTALL_COMMAND
343358
${CMAKE_COMMAND} -E copy
344359
<TMP_DIR>/dist/pysqlite3-${PYSQLITE3_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
@@ -370,9 +385,10 @@ ExternalProject_Add(
370385
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
371386
COMMAND
372387
${CMAKE_COMMAND} -E env OPENSSL_LIB_DIR=${CURRENT_PACKAGES_DIR}/lib
373-
OPENSSL_INCLUDE_DIR=${CURRENT_PACKAGES_DIR}/include --modify PATH=path_list_prepend:${RUST_DIR}
374-
-- ${cryptographyWheelBuildEnv_PIP} wheel --no-binary :all: --no-build-isolation --no-deps
375-
--no-index --wheel-dir <TMP_DIR>/dist .
388+
OPENSSL_INCLUDE_DIR=${CURRENT_PACKAGES_DIR}/include LDFLAGS=${WHEEL_LDFLAGS}
389+
RUSTFLAGS=-C\ link-arg=-Wl,-headerpad_max_install_names --modify
390+
PATH=path_list_prepend:${RUST_DIR} -- ${cryptographyWheelBuildEnv_PIP} wheel --no-binary :all:
391+
--no-build-isolation --no-deps --no-index --wheel-dir <TMP_DIR>/dist .
376392
INSTALL_COMMAND
377393
${CMAKE_COMMAND} -E copy
378394
<TMP_DIR>/dist/cryptography-${CRYPTOGRAPHY_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
@@ -388,6 +404,7 @@ createvirtualenvironment(reflinkWheelBuildEnv REQUIREMENTS wheel ${CFFI_WHEEL} p
388404
add_dependencies(reflinkWheelBuildEnv cffi)
389405

390406
set(REFLINK_WHEEL_VER 0.2.2)
407+
391408
ExternalProject_Add(
392409
reflink
393410
URL https://files.pythonhosted.org/packages/63/47/b503f286378336aa6d2fd3caad10633bb79f3bc6256f1f2f9102dacb3c98/reflink-0.2.2.tar.gz
@@ -399,7 +416,8 @@ ExternalProject_Add(
399416
BUILD_BYPRODUCTS "<SOURCE_DIR>/build"
400417
CONFIGURE_COMMAND ""
401418
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf <INSTALL_DIR>/*.whl
402-
COMMAND ${reflinkWheelBuildEnv_PYTHON} -m build --wheel --no-isolation --outdir <TMP_DIR>/dist
419+
COMMAND ${CMAKE_COMMAND} -E env LDFLAGS=${WHEEL_LDFLAGS} -- ${reflinkWheelBuildEnv_PYTHON} -m
420+
build --wheel --no-isolation --outdir <TMP_DIR>/dist
403421
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
404422
<TMP_DIR>/dist/reflink-${REFLINK_WHEEL_VER}-${Python3_WHEEL_ID}.whl <INSTALL_DIR>)
405423
ExternalProject_Get_Property(reflink INSTALL_DIR)

vcpkg-vendor/vcpkg-overlay-ports/libspatialite/portfile.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ if(ENABLE_RTTOPO)
3333
list(APPEND pkg_config_modules rttopo)
3434
endif()
3535

36+
if(VCPKG_TARGET_IS_OSX)
37+
# Our use of install_name_tool is not reliable unless we make sure that the header is padded.
38+
set(ENV{LDFLAGS} "$ENV{LDFLAGS} -Wl,-headerpad_max_install_names")
39+
endif()
40+
3641
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
3742
set(CL_FLAGS "")
3843
if(NOT ENABLE_FREEXL)

vcpkg-vendor/vcpkg-overlay-triplets/arm64-osx.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@ set(ENV{LDFLAGS} -Wl,-rpath,${CURRENT_INSTALLED_DIR}/lib/)
1515
set(VCPKG_C_FLAGS "-mmacosx-version-min=13.0")
1616
set(VCPKG_CXX_FLAGS "-mmacosx-version-min=13.0")
1717
set(ENV{MACOSX_DEPLOYMENT_TARGET} "13.0")
18+
19+
# Our use of install_name_tool is not reliable unless we make sure that the header is padded with
20+
# plenty of room.
21+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-headerpad_max_install_names")
22+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names")

vcpkg-vendor/vcpkg-overlay-triplets/x64-osx.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@ set(ENV{LDFLAGS} -Wl,-rpath,${CURRENT_INSTALLED_DIR}/lib/)
1515
set(VCPKG_C_FLAGS "-mmacosx-version-min=13.0")
1616
set(VCPKG_CXX_FLAGS "-mmacosx-version-min=13.0")
1717
set(ENV{MACOSX_DEPLOYMENT_TARGET} "13.0")
18+
19+
# Our use of install_name_tool is not reliable unless we make sure that the header is padded with
20+
# plenty of room.
21+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-headerpad_max_install_names")
22+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names")

0 commit comments

Comments
 (0)