mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-30 15:49:41 +02:00
112 lines
2.9 KiB
CMake
112 lines
2.9 KiB
CMake
# 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( "==================================================================" )
|
|
|
|
# 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}" AND NOT line MATCHES "@executable" )
|
|
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 sh -c "LD_LIBRARY_PATH='${WXWIN}' ldd ${src}" )
|
|
|
|
get_filename_component( libname "${src}" NAME )
|
|
|
|
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()
|
|
|