mirror of
https://github.com/cookiengineer/audacity
synced 2026-01-20 15:55:45 +01:00
Force use of our wxWidgets and fix RPATH handling
This commit is contained in:
110
cmake-proxies/cmake-modules/CopyLibs.cmake
Normal file
110
cmake-proxies/cmake-modules/CopyLibs.cmake
Normal file
@@ -0,0 +1,110 @@
|
||||
# Copy library during build and, on the Mac, modify the dependent
|
||||
# library paths.
|
||||
#
|
||||
# Defines required:
|
||||
#
|
||||
# SRC source library name
|
||||
# DST destination directory
|
||||
#
|
||||
message( "==================================================================" )
|
||||
message( "Copying wxWidgets libraries:" )
|
||||
message( "${SRC} ${DST}" )
|
||||
message( "==================================================================" )
|
||||
|
||||
# list command no longer ignores empty elements.
|
||||
cmake_policy( SET CMP0007 NEW )
|
||||
|
||||
function( execute )
|
||||
list( POP_FRONT ARGV outlist )
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
${ARGV}
|
||||
OUTPUT_VARIABLE
|
||||
cmd_out
|
||||
# COMMAND_ECHO STDOUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
#message("OUTPUT\n${cmd_out}")
|
||||
|
||||
# Convert output to list and strip
|
||||
string( REPLACE "\n" ";" cmd_out "${cmd_out}" )
|
||||
list( TRANSFORM cmd_out STRIP )
|
||||
|
||||
set( ${outlist} ${cmd_out} PARENT_SCOPE )
|
||||
endfunction()
|
||||
|
||||
function( gather_libs src )
|
||||
if( CMAKE_HOST_SYSTEM_NAME MATCHES "Windows" )
|
||||
execute( output cmd /k dumpbin /dependents ${src} )
|
||||
|
||||
foreach( line ${output} )
|
||||
if( line MATCHES "^ *wx.*\\.dll" )
|
||||
set( lib ${WXWIN}/${line} )
|
||||
|
||||
list( APPEND libs ${lib} )
|
||||
|
||||
gather_libs( ${lib} )
|
||||
endif()
|
||||
endforeach()
|
||||
elseif( CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin" )
|
||||
execute( output otool -L ${src} )
|
||||
|
||||
get_filename_component( libname "${src}" NAME )
|
||||
|
||||
if( libname MATCHES ".*dylib" )
|
||||
string( PREPEND libname "${DST}/" )
|
||||
else()
|
||||
set( libname "${src}" )
|
||||
endif()
|
||||
|
||||
foreach( line ${output} )
|
||||
if( line MATCHES "^.*libwx.*\\.dylib " )
|
||||
string( REGEX REPLACE "dylib .*" "dylib" line "${line}" )
|
||||
if( NOT line STREQUAL "${src}" )
|
||||
set( lib ${line} )
|
||||
|
||||
list( APPEND libs ${lib} )
|
||||
|
||||
get_filename_component( refname "${lib}" NAME )
|
||||
list( APPEND postcmds "sh -c 'install_name_tool -change ${lib} @executable_path/../Frameworks/${refname} ${libname}'" )
|
||||
|
||||
gather_libs( ${lib} )
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
elseif( CMAKE_HOST_SYSTEM_NAME MATCHES "Linux" )
|
||||
execute( output ldd ${src} )
|
||||
|
||||
foreach( line ${output} )
|
||||
if( line MATCHES ".*libwx.*" )
|
||||
string( REGEX REPLACE ".* => (.*) \\(.*$" "\\1" line "${line}" )
|
||||
|
||||
set( lib ${line} )
|
||||
|
||||
list( APPEND libs ${lib} )
|
||||
|
||||
gather_libs( ${lib} )
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set( libs ${libs} PARENT_SCOPE )
|
||||
set( postcmds ${postcmds} PARENT_SCOPE )
|
||||
endfunction()
|
||||
|
||||
gather_libs( "${SRC}" )
|
||||
|
||||
list( REMOVE_DUPLICATES libs )
|
||||
|
||||
file( INSTALL ${libs} DESTINATION ${DST} FOLLOW_SYMLINK_CHAIN )
|
||||
|
||||
foreach( cmd ${postcmds} )
|
||||
execute_process(
|
||||
COMMAND
|
||||
sh -c "${cmd}"
|
||||
COMMAND_ECHO STDOUT
|
||||
)
|
||||
endforeach()
|
||||
|
||||
Reference in New Issue
Block a user