Skip to content

Commit f2780aa

Browse files
authored
Merge pull request #166 from OpenMS/more_arrow_bullshit
try again
2 parents b41c2c5 + 55fdcfb commit f2780aa

1 file changed

Lines changed: 49 additions & 18 deletions

File tree

libraries.cmake/arrow.cmake

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,28 +90,45 @@ if (MSVC)
9090
endif()
9191

9292
# Fix Arrow CMake config files to be relocatable
93-
# Arrow generates absolute paths in ArrowTargets.cmake which breaks when the
94-
# package is moved to a different location. Replace absolute paths with
95-
# relative paths based on CMAKE_CURRENT_LIST_DIR.
93+
# Arrow generates absolute paths in ArrowTargets.cmake and ArrowTargets-*.cmake
94+
# which breaks when the package is moved to a different location.
9695
set(ARROW_CMAKE_DIR "${PROJECT_BINARY_DIR}/lib/cmake/Arrow")
9796
set(PARQUET_CMAKE_DIR "${PROJECT_BINARY_DIR}/lib/cmake/Parquet")
9897

99-
# Convert absolute build path to relative path for Arrow
98+
# Normalize path separators for replacement
99+
file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}" PROJECT_BINARY_DIR_NORMALIZED)
100+
101+
# Fix 1: Replace hardcoded _IMPORT_PREFIX in ArrowTargets.cmake
102+
set(ARROW_RELOCATABLE_REPLACEMENT "get_filename_component(_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_DIR}/../../..\" ABSOLUTE)")
103+
set(ARROW_ORIGINAL_PATTERN "set(_IMPORT_PREFIX \"${PROJECT_BINARY_DIR_NORMALIZED}\")")
104+
105+
message(STATUS "Arrow relocatability fix:")
106+
message(STATUS " Build dir: ${PROJECT_BINARY_DIR_NORMALIZED}")
107+
108+
# Process all Arrow cmake files (ArrowTargets.cmake and ArrowTargets-*.cmake)
100109
file(GLOB ARROW_TARGET_FILES "${ARROW_CMAKE_DIR}/ArrowTargets*.cmake")
101110
foreach(TARGET_FILE ${ARROW_TARGET_FILES})
102111
file(READ "${TARGET_FILE}" TARGET_CONTENT)
103-
string(REPLACE "${PROJECT_BINARY_DIR}/lib" "\${_IMPORT_PREFIX}/lib" TARGET_CONTENT "${TARGET_CONTENT}")
104-
string(REPLACE "${PROJECT_BINARY_DIR}/include" "\${_IMPORT_PREFIX}/include" TARGET_CONTENT "${TARGET_CONTENT}")
112+
113+
# Fix the _IMPORT_PREFIX definition (in ArrowTargets.cmake)
114+
string(REPLACE "${ARROW_ORIGINAL_PATTERN}" "${ARROW_RELOCATABLE_REPLACEMENT}" TARGET_CONTENT "${TARGET_CONTENT}")
115+
116+
# Fix hardcoded paths in IMPORTED_LOCATION and other properties (in ArrowTargets-*.cmake)
117+
# Replace absolute paths with ${_IMPORT_PREFIX} relative paths
118+
string(REPLACE "\"${PROJECT_BINARY_DIR_NORMALIZED}/" "\"\${_IMPORT_PREFIX}/" TARGET_CONTENT "${TARGET_CONTENT}")
119+
105120
file(WRITE "${TARGET_FILE}" "${TARGET_CONTENT}")
121+
message(STATUS " Fixed: ${TARGET_FILE}")
106122
endforeach()
107123

108-
# Convert absolute build path to relative path for Parquet
124+
# Process all Parquet cmake files
109125
file(GLOB PARQUET_TARGET_FILES "${PARQUET_CMAKE_DIR}/ParquetTargets*.cmake")
110126
foreach(TARGET_FILE ${PARQUET_TARGET_FILES})
111127
file(READ "${TARGET_FILE}" TARGET_CONTENT)
112-
string(REPLACE "${PROJECT_BINARY_DIR}/lib" "\${_IMPORT_PREFIX}/lib" TARGET_CONTENT "${TARGET_CONTENT}")
113-
string(REPLACE "${PROJECT_BINARY_DIR}/include" "\${_IMPORT_PREFIX}/include" TARGET_CONTENT "${TARGET_CONTENT}")
128+
string(REPLACE "${ARROW_ORIGINAL_PATTERN}" "${ARROW_RELOCATABLE_REPLACEMENT}" TARGET_CONTENT "${TARGET_CONTENT}")
129+
string(REPLACE "\"${PROJECT_BINARY_DIR_NORMALIZED}/" "\"\${_IMPORT_PREFIX}/" TARGET_CONTENT "${TARGET_CONTENT}")
114130
file(WRITE "${TARGET_FILE}" "${TARGET_CONTENT}")
131+
message(STATUS " Fixed: ${TARGET_FILE}")
115132
endforeach()
116133

117134
message(STATUS "Fixed Arrow/Parquet CMake configs for relocatability")
@@ -193,28 +210,42 @@ else() ## Linux/MacOS
193210
endif()
194211

195212
# Fix Arrow CMake config files to be relocatable
196-
# Arrow generates absolute paths in ArrowTargets.cmake which breaks when the
197-
# package is moved to a different location. Replace absolute paths with
198-
# relative paths based on CMAKE_CURRENT_LIST_DIR.
213+
# Arrow generates absolute paths in ArrowTargets.cmake and ArrowTargets-*.cmake
214+
# which breaks when the package is moved to a different location.
199215
set(ARROW_CMAKE_DIR "${PROJECT_BINARY_DIR}/lib/cmake/Arrow")
200216
set(PARQUET_CMAKE_DIR "${PROJECT_BINARY_DIR}/lib/cmake/Parquet")
201217

202-
# Convert absolute build path to relative path for Arrow
218+
# Fix 1: Replace hardcoded _IMPORT_PREFIX in ArrowTargets.cmake
219+
set(ARROW_RELOCATABLE_REPLACEMENT "get_filename_component(_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_DIR}/../../..\" ABSOLUTE)")
220+
set(ARROW_ORIGINAL_PATTERN "set(_IMPORT_PREFIX \"${PROJECT_BINARY_DIR}\")")
221+
222+
message(STATUS "Arrow relocatability fix:")
223+
message(STATUS " Build dir: ${PROJECT_BINARY_DIR}")
224+
225+
# Process all Arrow cmake files (ArrowTargets.cmake and ArrowTargets-*.cmake)
203226
file(GLOB ARROW_TARGET_FILES "${ARROW_CMAKE_DIR}/ArrowTargets*.cmake")
204227
foreach(TARGET_FILE ${ARROW_TARGET_FILES})
205228
file(READ "${TARGET_FILE}" TARGET_CONTENT)
206-
string(REPLACE "${PROJECT_BINARY_DIR}/lib" "\${_IMPORT_PREFIX}/lib" TARGET_CONTENT "${TARGET_CONTENT}")
207-
string(REPLACE "${PROJECT_BINARY_DIR}/include" "\${_IMPORT_PREFIX}/include" TARGET_CONTENT "${TARGET_CONTENT}")
229+
230+
# Fix the _IMPORT_PREFIX definition (in ArrowTargets.cmake)
231+
string(REPLACE "${ARROW_ORIGINAL_PATTERN}" "${ARROW_RELOCATABLE_REPLACEMENT}" TARGET_CONTENT "${TARGET_CONTENT}")
232+
233+
# Fix hardcoded paths in IMPORTED_LOCATION and other properties (in ArrowTargets-*.cmake)
234+
# Replace absolute paths with ${_IMPORT_PREFIX} relative paths
235+
string(REPLACE "\"${PROJECT_BINARY_DIR}/" "\"\${_IMPORT_PREFIX}/" TARGET_CONTENT "${TARGET_CONTENT}")
236+
208237
file(WRITE "${TARGET_FILE}" "${TARGET_CONTENT}")
238+
message(STATUS " Fixed: ${TARGET_FILE}")
209239
endforeach()
210240

211-
# Convert absolute build path to relative path for Parquet
241+
# Process all Parquet cmake files
212242
file(GLOB PARQUET_TARGET_FILES "${PARQUET_CMAKE_DIR}/ParquetTargets*.cmake")
213243
foreach(TARGET_FILE ${PARQUET_TARGET_FILES})
214244
file(READ "${TARGET_FILE}" TARGET_CONTENT)
215-
string(REPLACE "${PROJECT_BINARY_DIR}/lib" "\${_IMPORT_PREFIX}/lib" TARGET_CONTENT "${TARGET_CONTENT}")
216-
string(REPLACE "${PROJECT_BINARY_DIR}/include" "\${_IMPORT_PREFIX}/include" TARGET_CONTENT "${TARGET_CONTENT}")
245+
string(REPLACE "${ARROW_ORIGINAL_PATTERN}" "${ARROW_RELOCATABLE_REPLACEMENT}" TARGET_CONTENT "${TARGET_CONTENT}")
246+
string(REPLACE "\"${PROJECT_BINARY_DIR}/" "\"\${_IMPORT_PREFIX}/" TARGET_CONTENT "${TARGET_CONTENT}")
217247
file(WRITE "${TARGET_FILE}" "${TARGET_CONTENT}")
248+
message(STATUS " Fixed: ${TARGET_FILE}")
218249
endforeach()
219250

220251
message(STATUS "Fixed Arrow/Parquet CMake configs for relocatability")

0 commit comments

Comments
 (0)