mirror of
https://github.com/cookiengineer/audacity
synced 2026-01-13 08:05:52 +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()
|
||||
|
||||
@@ -162,7 +162,7 @@ macro( bld name packages define sources )
|
||||
|
||||
set_target_properties( ${name}
|
||||
PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY "${_DESTDIR}/${_LIBDIR}"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${_DEST}/${_PKGLIB}"
|
||||
PREFIX ""
|
||||
)
|
||||
|
||||
|
||||
@@ -207,6 +207,36 @@ if( "${wxTOOLKIT}" MATCHES "GTK." )
|
||||
pkg_check_modules( GLIB REQUIRED IMPORTED_TARGET GLOBAL ${glib} )
|
||||
endif()
|
||||
|
||||
find_file( WXVERSION_H
|
||||
NAMES
|
||||
wx/version.h
|
||||
PATHS
|
||||
${INCLUDES}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if( NOT WXVERSION_H )
|
||||
message( FATAL_ERROR "wxWidgets version.h header not found" )
|
||||
endif()
|
||||
|
||||
file(
|
||||
STRINGS
|
||||
"${WXVERSION_H}" output
|
||||
REGEX
|
||||
"^#define +wxVERSION_STRING +"
|
||||
)
|
||||
|
||||
string( REGEX MATCHALL "\".+(Audacity).+\"" ours "${output}")
|
||||
if( NOT ours )
|
||||
message( FATAL_ERROR
|
||||
"\n########################################################################\n"
|
||||
"Audacity version 3.0.0 or higher requires use of a customized version of "
|
||||
"wxWidgets. For details:\n"
|
||||
" https://wiki.audacityteam.org/wiki/Building_for_Distros\n"
|
||||
"########################################################################\n"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories( ${TARGET} INTERFACE ${INCLUDES} )
|
||||
target_compile_definitions( ${TARGET} INTERFACE ${DEFINES} )
|
||||
target_compile_options( ${TARGET} INTERFACE ${COPTS} )
|
||||
|
||||
Reference in New Issue
Block a user