@@ -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