1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 08:09:32 +02:00

Updates the way shared libraries are hadled

1. We put all shared libraries into one place. Both conan and locally built
2. We invoke CopyLibs to copy the libraries to a proper location and to correctly set the RPATH
Fixes CopyLibs script on Windows


Fixes CopyLibs.cmake for Linux

Fixes CopyLibs on macOS


Fixes CopyLibs on macOS
This commit is contained in:
Dmitry Vedenko 2021-05-25 20:21:55 +03:00 committed by Dmitry Vedenko
parent 77cc7bed6f
commit 4e6a1a81a9
5 changed files with 24 additions and 17 deletions

View File

@ -257,11 +257,16 @@ endif()
# Where the final product is stored # Where the final product is stored
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
set ( _SHARED_PROXY_BASE "shared" )
set ( _SHARED_PROXY_BASE_PATH "${CMAKE_BINARY_DIR}/${_SHARED_PROXY_BASE}")
# Define the non-install and executable paths # Define the non-install and executable paths
if( CMAKE_CONFIGURATION_TYPES ) if( CMAKE_CONFIGURATION_TYPES )
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" ) set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" )
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_CFG_INTDIR}")
else() else()
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}" ) set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}" )
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_BUILD_TYPE}")
endif() endif()
set( _DEST "${_DESTDIR}" ) set( _DEST "${_DESTDIR}" )

View File

@ -199,10 +199,10 @@ function ( _conan_install build_type )
GENERATORS cmake_find_package_multi GENERATORS cmake_find_package_multi
BUILD_REQUIRES ${CONAN_BUILD_REQUIRES} BUILD_REQUIRES ${CONAN_BUILD_REQUIRES}
${CONAN_CONFIG_OPTIONS} ${CONAN_CONFIG_OPTIONS}
IMPORTS "bin, *.dll -> ./bin/shared/${build_type} @ keep_path=False" IMPORTS "bin, *.dll -> ./${_SHARED_PROXY_BASE}/${build_type} @ keep_path=False"
IMPORTS "lib, *.dll -> ./bin/shared/${build_type} @ keep_path=False" IMPORTS "lib, *.dll -> ./${_SHARED_PROXY_BASE}/${build_type} @ keep_path=False"
IMPORTS "lib, *.dylib -> ./lib/shared/${build_type} @ keep_path=False" IMPORTS "lib, *.dylib -> ./${_SHARED_PROXY_BASE}/${build_type} @ keep_path=False"
IMPORTS "lib, *.so* -> ./lib/shared/${build_type} @ keep_path=False" IMPORTS "lib, *.so* -> ./${_SHARED_PROXY_BASE}/${build_type} @ keep_path=False"
OPTIONS ${CONAN_PACKAGE_OPTIONS} OPTIONS ${CONAN_PACKAGE_OPTIONS}
) )

View File

@ -348,7 +348,7 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
) )
else() else()
set( ATTRIBUTES "shape=octagon" ) set( ATTRIBUTES "shape=octagon" )
set_target_property_all( ${TARGET} ${DIRECTORY_PROPERTY} "${_EXEDIR}" ) set_target_property_all( ${TARGET} ${DIRECTORY_PROPERTY} "${_SHARED_PROXY_PATH}" )
set_target_properties( ${TARGET} set_target_properties( ${TARGET}
PROPERTIES PROPERTIES
PREFIX "" PREFIX ""
@ -379,7 +379,7 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
foreach( IMPORT ${IMPORT_TARGETS} ) foreach( IMPORT ${IMPORT_TARGETS} )
list( APPEND LIBRARIES "${IMPORT}" ) list( APPEND LIBRARIES "${IMPORT}" )
endforeach() endforeach()
list( APPEND LIBRARIES ${ADDITIONAL_LIBRARIES} ) list( APPEND LIBRARIES ${ADDITIONAL_LIBRARIES} )
# list( TRANSFORM SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" ) # list( TRANSFORM SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" )

View File

@ -45,6 +45,8 @@ function( gather_libs src )
list( APPEND libs ${lib} ) list( APPEND libs ${lib} )
gather_libs( ${lib} ) gather_libs( ${lib} )
elseif ( EXISTS "${DST}/${line}" )
gather_libs( "${DST}/${line}" )
endif() endif()
endforeach() endforeach()
elseif( CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin" ) elseif( CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin" )
@ -57,7 +59,11 @@ function( gather_libs src )
foreach( line ${output} ) foreach( line ${output} )
if( line MATCHES "^.*\\.dylib " ) if( line MATCHES "^.*\\.dylib " )
string( REGEX REPLACE "dylib .*" "dylib" line "${line}" ) string( REGEX REPLACE "dylib .*" "dylib" line "${line}" )
set( lib "${WXWIN}/${line}" )
get_filename_component( dylib_name "${line}" NAME)
message(STATUS "Checking out ${line}")
set( lib "${WXWIN}/${dylib_name}" )
if( NOT lib STREQUAL "${src}" AND NOT line MATCHES "@executable" AND EXISTS "${lib}") if( NOT lib STREQUAL "${src}" AND NOT line MATCHES "@executable" AND EXISTS "${lib}")
message(STATUS "\tProcessing ${lib}...") message(STATUS "\tProcessing ${lib}...")
@ -68,7 +74,7 @@ function( gather_libs src )
message(STATUS "\t\tAdding ${refname} to ${src}") message(STATUS "\t\tAdding ${refname} to ${src}")
list( APPEND postcmds "sh -c 'install_name_tool -change ${refname} @executable_path/../Frameworks/${refname} ${src}'" ) list( APPEND postcmds "sh -c 'install_name_tool -change ${line} @executable_path/../Frameworks/${refname} ${src}'" )
gather_libs( ${lib} ) gather_libs( ${lib} )
endif() endif()
@ -82,10 +88,10 @@ function( gather_libs src )
get_filename_component( libname "${src}" NAME ) get_filename_component( libname "${src}" NAME )
foreach( line ${output} ) foreach( line ${output} )
message (STATUS "\tChecking ${line}...")
string( REGEX REPLACE "(.*) => .* \\(.*$" "\\1" line "${line}" ) string( REGEX REPLACE "(.*) => .* \\(.*$" "\\1" line "${line}" )
message (STATUS "\tChecking ${line}...")
set(line "${WXWIN}/${line}") set(line "${WXWIN}/${line}")
if (EXISTS "${line}") if (EXISTS "${line}")

View File

@ -1130,10 +1130,6 @@ if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
# Copy over the wxWidgets DLLs # Copy over the wxWidgets DLLs
# Convert the paths to native
file( TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin/shared" libdir )
file( TO_NATIVE_PATH "${_EXEDIR}" exedir )
# Copy the required wxWidgets libs into the bundle # Copy the required wxWidgets libs into the bundle
add_custom_command( add_custom_command(
TARGET TARGET
@ -1141,7 +1137,7 @@ if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
COMMAND COMMAND
${CMAKE_COMMAND} -D SRC="${_EXEDIR}/Audacity.exe" ${CMAKE_COMMAND} -D SRC="${_EXEDIR}/Audacity.exe"
-D DST="${_EXEDIR}" -D DST="${_EXEDIR}"
-D WXWIN="${libdir}/$<CONFIG>/" -D WXWIN="${_SHARED_PROXY_BASE_PATH}/$<CONFIG>/"
-P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake -P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake
POST_BUILD POST_BUILD
) )
@ -1226,7 +1222,7 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
COMMAND COMMAND
${CMAKE_COMMAND} -D SRC="${_EXEDIR}/Audacity" ${CMAKE_COMMAND} -D SRC="${_EXEDIR}/Audacity"
-D DST="${_PKGLIB}" -D DST="${_PKGLIB}"
-D WXWIN="${CMAKE_BINARY_DIR}/lib/shared/$<CONFIG>" -D WXWIN="${_SHARED_PROXY_BASE_PATH}/$<CONFIG>"
-P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake -P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake
POST_BUILD POST_BUILD
) )
@ -1292,7 +1288,7 @@ else()
COMMAND COMMAND
${CMAKE_COMMAND} -D SRC="${_EXEDIR}/audacity" ${CMAKE_COMMAND} -D SRC="${_EXEDIR}/audacity"
-D DST="${_DEST}/${_PKGLIB}" -D DST="${_DEST}/${_PKGLIB}"
-D WXWIN="${CMAKE_BINARY_DIR}/lib/shared/$<CONFIG>" -D WXWIN="${_SHARED_PROXY_BASE_PATH}/$<CONFIG>"
-P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake -P ${AUDACITY_MODULE_PATH}/CopyLibs.cmake
POST_BUILD POST_BUILD
) )