1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-26 09:08:44 +02:00
audacity/cmake-proxies/CMakeLists.txt
Leland Lucius e07b5df6f3 Reworked cmake command options
And fixed a recursion problem when copying DLLs to dest folder

The command options are now:

   // Enable Audio Unit plug-in support
   audacity_enable_audiounits:BOOL=ON

   // Library preference [system (if available), local]
   audacity_lib_preference:STRING=system

   // Use FileDialog library [local]
   audacity_use_FileDialog:STRING=local

   // Use expat library [local]
   audacity_use_expat:STRING=local

   // Use ffmpeg library [loaded, off]
   audacity_use_ffmpeg:STRING=off

   // Use flac library [system (if available), local, off]
   audacity_use_flac:STRING=local

   // Use id3tag library [system (if available), local, off]
   audacity_use_id3tag:STRING=local

   // Use LADSPA plug-in support [on, off]
   audacity_use_ladspa:BOOL=ON

   // Use lame library [system (if available), local]
   audacity_use_lame:STRING=local

   // Use libextra library [local]
   audacity_use_libextra:STRING=local

   // Use lv2 library [system (if available), local, off]
   audacity_use_lv2:STRING=local

   // Use mad library [system (if available), local, off]
   audacity_use_mad:STRING=local

   // Use midi library [system (if available), local, off]
   audacity_use_midi:STRING=local

   // Use nyquist library [local, off]
   audacity_use_nyquist:STRING=local

   // Use ogg library [system (if available), local, off]
   audacity_use_ogg:STRING=local

   // Use the portaudio CoreAudio interface if available
   audacity_use_pa_coreaudio:BOOL=YES

   // Use the JACK audio interface if available [loaded, linked, off]
   audacity_use_pa_jack:STRING=off

   // Use the OSS audio interface if available
   audacity_use_pa_oss:BOOL=NO

   // Use portaudio library [local]
   audacity_use_portaudio:STRING=local

   // Use portmixer library [local, off]
   audacity_use_portmixer:STRING=local

   // Use portsmf library [system (if available), local, off]
   audacity_use_portsmf:STRING=local

   // Use sbsms library [system (if available), local, off]
   audacity_use_sbsms:STRING=local

   // Use sndfile library [system (if available), local]
   audacity_use_sndfile:STRING=local

   // Use soundtouch library [system (if available), local, off]
   audacity_use_soundtouch:STRING=local

   // Use soxr library [system (if available), local]
   audacity_use_soxr:STRING=local

   // Use twolame library [system (if available), local, off]
   audacity_use_twolame:STRING=local

   // Use vamp library [system (if available), local, off]
   audacity_use_vamp:STRING=local

   // Use vorbis library [system (if available), local, off]
   audacity_use_vorbis:STRING=local

   // Use VST2 plug-in support [on, off]
   audacity_use_vst:BOOL=ON

   // Use wxwidgets library [system (if available), local]
   audacity_use_wxwidgets:STRING=system
2020-02-14 15:56:33 -06:00

177 lines
6.8 KiB
CMake

# Allow user to globally set the library preference
cmd_option( ${_OPT}lib_preference
"Library preference [system (if available), local]"
"system"
STRINGS "system" "local"
)
#
# Add individual library targets
#
# Parms:
# dir directory name within the cmake-proxies directory.
# (Doesn't HAVE to match the same directory in lib-src,
# but it usually does.)
#
# name suffix for the cmake user options
#
# symbol suffix for the "USE_<symbol>" variable that the Audacity
# target uses to include/exclude functionality.
#
# requried Determines if the library is required or not. If it is,
# the user is not given the option of enabling/disabling it.
#
# check Determines if local/system checks should be performed here
# or in the subdirectory config.
#
# packages A list of packages required for this target in pkg-config
# format.
function( addlib dir name symbol required check )
# Extract the list of packages from the function args
list( SUBLIST ARGV 5 -1 packages )
# Define target's name and it's source directory
set( TARGET ${dir} )
set( TARGET_ROOT ${libsrc}/${dir} )
# Define the option name
set( use ${_OPT}use_${name} )
# If we're not checking for system or local here, then let the
# target config handle the rest.
if( NOT check )
add_subdirectory( ${dir} EXCLUDE_FROM_ALL )
return()
endif()
# If the target isn't required, allow the user to select which one
# to use or disable it entirely
set( desc "local" )
if( packages )
set( sysopt "system" )
string( PREPEND desc "system (if available), " )
set( default "${${_OPT}lib_preference}" )
else()
set( default "local" )
endif()
if( NOT required )
set( reqopt "off" )
string( APPEND desc ", off" )
endif()
cmd_option( ${use}
"Use ${name} library [${desc}]"
"${default}"
STRINGS ${sysopt} "local" ${reqopt}
)
# Bail if the target will not be used
if( ${use} STREQUAL "off" )
message( STATUS "========== ${name} disabled ==========" )
set( USE_${symbol} OFF CACHE INTERNAL "" FORCE )
return()
endif()
# Let the Audacity target know that this library will be used
set( USE_${symbol} ON CACHE INTERNAL "" FORCE )
message( STATUS "========== Configuring ${name} ==========" )
# Check for the system package(s) if the user prefers it
if( ${use} STREQUAL "system" )
# Look them up
pkg_check_modules( PKG_${TARGET} ${packages} )
if( PKG_${TARGET}_FOUND )
message( STATUS "Using '${name}' system library" )
# Create the target interface library
add_library( ${TARGET} INTERFACE IMPORTED GLOBAL )
# Retrieve the package information
get_package_interface( PKG_${TARGET} )
# And add it to our target
target_include_directories( ${TARGET} INTERFACE ${INCLUDES} )
target_compile_options( ${TARGET} INTERFACE ${COPTS} )
target_link_directories( ${TARGET} INTERFACE ${LINKDIRS} )
target_link_options( ${TARGET} INTERFACE ${LOPTS} )
target_link_libraries( ${TARGET} INTERFACE ${LIBRARIES} )
else()
set( ${use} "local" )
set_property( CACHE ${use} PROPERTY VALUE "local" )
endif()
endif()
# User wants the local package or the system one wasn't found
if( ${use} STREQUAL "local" )
message( STATUS "Using '${name}' local library" )
# Pull in the target config
add_subdirectory( ${dir} EXCLUDE_FROM_ALL )
# Get the list of targets defined by that config
get_property( targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS )
# Set the folder (for the IDEs) for each one
foreach( target ${targets} )
# Skip interface libraries since they don't have any source to
# present in the IDEs
get_target_property( type "${target}" TYPE )
if( NOT "${type}" STREQUAL "INTERFACE_LIBRARY" )
set_target_properties( ${target} PROPERTIES FOLDER "lib-src" )
endif()
endforeach()
endif()
# Define a library alias for each of the packages
foreach( package ${packages} )
# Convert the package spec to a list
string( REPLACE " " ";" package "${package}" )
# And extract just the package name
list( GET package 0 package )
# But only if the package name doesn't conflict with the
# target name.
if( NOT TARGET ${package} )
# Create the alias
add_library( "${package}" ALIAS ${TARGET} )
endif()
endforeach()
endfunction()
# Required libraries
#
# directory option symbol req chk version
addlib( wxWidgets wxwidgets WX YES NO "" ) # must be first
addlib( FileDialog FileDialog FILEDIALOG YES YES "" )
addlib( expat expat EXPAT YES YES "" )
addlib( lame lame LAME YES YES "lame >= 3.100" )
addlib( lib-widget-extra libextra EXTRA YES YES "" )
addlib( libsndfile sndfile SNDFILE YES YES "sndfile >= 1.0.24" )
addlib( libsoxr soxr SOXR YES YES "soxr >= 0.1.1" )
addlib( portaudio-v19 portaudio PORTAUDIO YES YES "" )
# Optional libraries
#
# directory option symbol req chk version
addlib( ffmpeg ffmpeg FFMPEG NO NO "libavcodec >= 51.53" "libavformat >= 52.12" "libavutil >= 52.66" )
addlib( libid3tag id3tag LIBID3TAG NO YES "id3tag >= 0.15.1b" )
addlib( libmad mad LIBMAD NO YES "mad >= 2.3" )
addlib( libnyquist nyquist NYQUIST NO YES "" )
addlib( libvamp vamp VAMP NO YES "vamp >= 2.5" "vamp-hostsdk >= 2.5" )
addlib( libogg ogg LIBVORBIS NO YES "ogg >= 1.3.1" )
addlib( libvorbis vorbis LIBVORBIS NO YES "vorbis >= 1.3.3" "vorbisenc >= 1.3.3" "vorbisfile >= 1.3.3" )
addlib( libflac flac LIBFLAC NO YES "flac >= 1.3.1" "flac++ >= 1.3.1" )
addlib( lv2 lv2 LV2 NO YES "lilv-0 >= 0.24.6" "lv2 >= 1.16.0" "serd-0 >= 0.30.2" "sord-0 >= 0.16.4" "sratom-0 >= 0.6.4" )
addlib( portmidi midi MIDI NO YES "portmidi >= 0.1" )
addlib( portmixer portmixer PORTMIXER NO YES "" )
addlib( portsmf portsmf PORTSMF NO YES "portsmf >= 0.1" )
addlib( sbsms sbsms SBSMS NO YES "sbsms >= 2.0.2" )
addlib( soundtouch soundtouch SOUNDTOUCH NO YES "soundtouch >= 1.7.1" )
addlib( twolame twolame LIBTWOLAME NO YES "twolame >= 0.3.13" )