1
0
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:
Leland Lucius
2020-07-05 13:39:57 -05:00
parent 33210ec8c7
commit c1407cdca9
14 changed files with 278 additions and 173 deletions

View 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()

View File

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

View File

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