From f0e3ee2cdeaeb048171c6ffe6a56177039ef7ce2 Mon Sep 17 00:00:00 2001 From: Leland Lucius Date: Thu, 6 Feb 2020 01:17:20 -0600 Subject: [PATCH] More cmake updates Added install target (this is mainly for Linux) Added mod-nyq-bench More to come... --- CMakeLists.txt | 16 ++-- cmake-proxies/mod-nyq-bench/CMakeLists.txt | 5 +- cmake-proxies/mod-script-pipe/CMakeLists.txt | 5 +- help/CMakeLists.txt | 21 +++-- images/CMakeLists.txt | 26 ++++++ locale/CMakeLists.txt | 21 ++++- nyquist/CMakeLists.txt | 9 +- plug-ins/CMakeLists.txt | 9 +- src/CMakeLists.txt | 94 ++++++++++++++------ 9 files changed, 155 insertions(+), 51 deletions(-) create mode 100755 images/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index faf51e4b1..2a4929090 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,21 +213,24 @@ macro( def_vars ) set( _PUBDIR "${CMAKE_CURRENT_BINARY_DIR}/public" ) endmacro() -# And define the non-context dependent paths -set( _EXEDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) +# Define the non-install and executable destinations +set( _DEST "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) if( CMAKE_BUILD_TYPE ) - set( _EXEDIR "${_EXEDIR}/${CMAKE_BUILD_TYPE}" ) + set( _DEST "${_DEST}/${CMAKE_BUILD_TYPE}" ) endif() +set( _EXEDIR "${_DEST}" ) -# On the Mac, make it the content directory +# Adjust them for the Mac if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) - set( _EXEDIR "${_EXEDIR}/Audacity.app/Contents" ) + set( _DEST "${_DEST}/Audacity.app/Contents" ) + set( _EXEDIR "${_DEST}/Macos" ) endif() -set( _MODDIR "${_EXEDIR}/modules" ) set( _PREFIX "${CMAKE_INSTALL_PREFIX}" ) set( _LIBDIR "${CMAKE_INSTALL_LIBDIR}/audacity" ) set( _RPATH "\$ORIGIN/../${_LIBDIR}" ) +set( _DATADIR "${CMAKE_INSTALL_DATADIR}" ) +set( _PKGDATA "${_DATADIR}/audacity" ) # Helper to organize sources into folders for the IDEs macro( organize_source root prefix sources ) @@ -301,6 +304,7 @@ endmacro() # Add our children add_subdirectory( "cmake-proxies" ) add_subdirectory( "help" ) +add_subdirectory( "images" ) add_subdirectory( "locale" ) add_subdirectory( "nyquist" ) add_subdirectory( "plug-ins" ) diff --git a/cmake-proxies/mod-nyq-bench/CMakeLists.txt b/cmake-proxies/mod-nyq-bench/CMakeLists.txt index f0660f2fd..1f6196422 100644 --- a/cmake-proxies/mod-nyq-bench/CMakeLists.txt +++ b/cmake-proxies/mod-nyq-bench/CMakeLists.txt @@ -29,9 +29,8 @@ list( APPEND LIBRARIES set_target_properties( ${TARGET} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY_DEBUG "${_MODDIR}" - LIBRARY_OUTPUT_DIRECTORY_RELEASE "${_MODDIR}" - LIBRARY_OUTPUT_DIRECTORY "${_MODDIR}" + LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} "${_DEST}/modules" + LIBRARY_OUTPUT_DIRECTORY "${_DEST}/modules" PREFIX "" FOLDER "lib-src" ) diff --git a/cmake-proxies/mod-script-pipe/CMakeLists.txt b/cmake-proxies/mod-script-pipe/CMakeLists.txt index 5342732ff..f0ac72eab 100644 --- a/cmake-proxies/mod-script-pipe/CMakeLists.txt +++ b/cmake-proxies/mod-script-pipe/CMakeLists.txt @@ -32,9 +32,8 @@ list( APPEND LIBRARIES set_target_properties( ${TARGET} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY_DEBUG "${_MODDIR}" - LIBRARY_OUTPUT_DIRECTORY_RELEASE "${_MODDIR}" - LIBRARY_OUTPUT_DIRECTORY "${_MODDIR}" + LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} "${_DEST}/modules" + LIBRARY_OUTPUT_DIRECTORY "${_DEST}/modules" PREFIX "" FOLDER "lib-src" ) diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt index b8b6426f3..3402a1e52 100755 --- a/help/CMakeLists.txt +++ b/help/CMakeLists.txt @@ -1,15 +1,17 @@ set( TARGET manual ) -set( TARGET_ROOT ${topdir}/help ) +set( TARGET_ROOT ${topdir}/manual ) message( STATUS "========== Configuring ${TARGET} ==========" ) +def_vars() + set( host "alphamanual.audacityteam.org" ) set( src "https://${host}/man" ) -set( dst "$/help/manual" ) -set( script_dir "${top_dir}/scripts/mw2html_audacity" ) +set( dst "${_DEST}/help/manual" ) +set( script_dir "${topdir}/scripts/mw2html_audacity" ) set( script "mw2html.py" ) -set( out_dir "${CMAKE_CURRENT_BINARY_DIR}" ) +set( out_dir "${_INTDIR}" ) set( out "${out_dir}/${host}/index.html" ) if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) @@ -43,4 +45,13 @@ add_custom_command( ) add_custom_target( ${TARGET} DEPENDS "${out}" ) -add_dependencies( ${TARGET} Audacity ) + +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + install( DIRECTORY "${dst}" OPTIONAL + DESTINATION "${_DATADIR}/audacity/help" ) + install( FILES "${_SRCDIR}/audacity.1" + DESTINATION "${_DATADIR}/man/man.1" ) + install( FILES "${_SRCDIR}/audacity.appdata.xml" + DESTINATION "${_DATADIR}/appdata" ) +endif() + diff --git a/images/CMakeLists.txt b/images/CMakeLists.txt new file mode 100755 index 000000000..037e4291c --- /dev/null +++ b/images/CMakeLists.txt @@ -0,0 +1,26 @@ + +set( TARGET images ) +set( TARGET_ROOT ${topdir}/images ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +def_vars() + +# This isn't really a target... + +list( APPEND PIXMAPS + ${_SRCDIR}/gnome-mime-application-x-audacity-project.xpm + ${_SRCDIR}/icons/16x16/audacity16.xpm + ${_SRCDIR}/icons/32x32/audacity32.xpm + ${_SRCDIR}/icons/48x48/audacity.xpm +) + +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + install( FILES "${_SRCDIR}/audacity.svg" + DESTINATION "${_DATADIR}/icons/hicolor/scalable/apps" ) + install( DIRECTORY "${_SRCDIR}/icons/" + DESTINATION "${_DATADIR}/icons/hicolor" ) + install( FILES ${PIXMAPS} + DESTINATION "${_DATADIR}/pixmaps" ) +endif() + diff --git a/locale/CMakeLists.txt b/locale/CMakeLists.txt index 50fa1a783..7e89d6b3d 100755 --- a/locale/CMakeLists.txt +++ b/locale/CMakeLists.txt @@ -128,16 +128,24 @@ if( NOT DEFINED msgfmt ) return() endif() +if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + set( locale "${_DEST}/Resources" ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + set( locale "${_DEST}/locale" ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + set( locale "${_DEST}/Languanges" ) +endif() + set( OUTPUTS ) foreach( source ${SOURCES} ) get_filename_component( lang "${source}" NAME_WE ) if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) - set( dst "${_EXEDIR}/Resources/${lang}.lproj" ) + set( dst "${locale}/${lang}.lproj" ) elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) - set( dst "${_EXEDIR}/locale/${lang}/LC_MESSAGES" ) + set( dst "${locale}/${lang}/LC_MESSAGES" ) elseif( CMAKE_SYSTEM_NAME MATCHES "Windows" ) - set( dst "${_EXEDIR}/Languanges/${lang}" ) + set( dst "${locale}/${lang}" ) endif() set( po "${_SRCDIR}/${source}" ) @@ -160,7 +168,7 @@ foreach( source ${SOURCES} ) if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) add_custom_command( COMMAND - ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/Resources/en.lproj" + ${CMAKE_COMMAND} -E make_directory "${_DEST}/Resources/en.lproj" OUTPUT "${mo}" APPEND @@ -172,3 +180,8 @@ endforeach() add_custom_target( "${TARGET}" ALL DEPENDS ${OUTPUTS} SOURCES "${SOURCES}" ) +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + install( DIRECTORY ${locale}/ + TYPE LOCALE ) +endif() + diff --git a/nyquist/CMakeLists.txt b/nyquist/CMakeLists.txt index 0c19814ca..260ca231b 100755 --- a/nyquist/CMakeLists.txt +++ b/nyquist/CMakeLists.txt @@ -55,13 +55,13 @@ list( APPEND SOURCES foreach( source ${SOURCES} ) set( src "${_SRCDIR}/${source}" ) - set( dst "${_EXEDIR}/${TARGET}/${source}" ) + set( dst "${_DEST}/${TARGET}/${source}" ) add_custom_command( DEPENDS "${src}" COMMAND - ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/${TARGET}" + ${CMAKE_COMMAND} -E make_directory "${_DEST}/${TARGET}" COMMAND ${CMAKE_COMMAND} -E copy "${src}" "${dst}" OUTPUT @@ -73,3 +73,8 @@ endforeach() add_custom_target( ${TARGET} ALL DEPENDS ${OUTPUTS} SOURCES ${SOURCES} ) +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + install( DIRECTORY "${_DEST}/${TARGET}" + DESTINATION "${_PKGDATA}" ) +endif() + diff --git a/plug-ins/CMakeLists.txt b/plug-ins/CMakeLists.txt index 0a4be911f..10e087cde 100755 --- a/plug-ins/CMakeLists.txt +++ b/plug-ins/CMakeLists.txt @@ -39,13 +39,13 @@ list( APPEND SOURCES foreach( source ${SOURCES} ) set( src "${_SRCDIR}/${source}" ) - set( dst "${_EXEDIR}/${TARGET}/${source}" ) + set( dst "${_DEST}/${TARGET}/${source}" ) add_custom_command( DEPENDS "${src}" COMMAND - ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/${TARGET}" + ${CMAKE_COMMAND} -E make_directory "${_DEST}/${TARGET}" COMMAND ${CMAKE_COMMAND} -E copy "${src}" "${dst}" OUTPUT @@ -57,3 +57,8 @@ endforeach() add_custom_target( ${TARGET} ALL DEPENDS ${OUTPUTS} SOURCES ${SOURCES} ) +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + install( DIRECTORY "${_DEST}/${TARGET}" + DESTINATION "${_PKGDATA}" ) +endif() + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9546c9bb4..9bc1b4140 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1025,6 +1025,7 @@ set( HAVE_GTK ${GTK_FOUND} ) set( DISABLE_DYNAMIC_LOADING_FFMPEG ${disable_dynamic_loading} ) if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + set( _EXE "Audacity" ) set_directory_properties( PROPERTIES @@ -1061,18 +1062,19 @@ if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) set( wxlibs "${CMAKE_BINARY_DIR}" ) endif() - file( TO_NATIVE_PATH ${_EXEDIR} exedir ) + file( TO_NATIVE_PATH ${_DEST} dest ) add_custom_command( TARGET ${TARGET} COMMAND - XCOPY "*.dll" ${exedir} /I /R /Y + XCOPY "*.dll" ${dest} /I /R /Y WORKING_DIRECTORY "${wxlibs}/lib/vc_dll" POST_BUILD ) elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + set( _EXE "Audacity" ) # Handle Audio Units option option( enable_audiounits "Enable Audio Unit plug-in support" ON ) @@ -1132,15 +1134,17 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) set( AUDACITY_INFO_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION}.${AUDACITY_MODLEVEL} ) # Copy the wxWidgets libraries into the bundle - add_custom_command( - TARGET - ${TARGET} - COMMAND - sh -c "TARGET_BUILD_DIR=${_EXEDIR} EXECUTABLE_PATH=MacOS/Audacity FRAMEWORKS_FOLDER_PATH=Frameworks ${topdir}/mac/scripts/install_wxlibs.sh" - WORKING_DIRECTORY - ${CMAKE_BINARY_DIR}/lib - POST_BUILD - ) + if( "${CMAKE_GENERATOR}" MATCHES "Xcode" ) + add_custom_command( + TARGET + ${TARGET} + COMMAND + sh -c "TARGET_BUILD_DIR=${_DEST} EXECUTABLE_PATH=${_EXEDIR}/${_EXE} FRAMEWORKS_FOLDER_PATH=Frameworks ${topdir}/mac/scripts/install_wxlibs.sh" +# WORKING_DIRECTORY +# ${CMAKE_BINARY_DIR}/lib + POST_BUILD + ) + endif() # Define the Wrapper target add_executable( Wrapper ) @@ -1157,9 +1161,8 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) set_target_properties( "Wrapper" PROPERTIES - RUNTIME_OUTPUT_DIRECTORY_RELEASE "${_EXEDIR}/MacOS" - RUNTIME_OUTPUT_DIRECTORY_DEBUG "${_EXEDIR}/MacOS" - RUNTIME_OUTPUT_DIRECTORY "${_EXEDIR}/MacOS" + RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} "${_EXEDIR}" + RUNTIME_OUTPUT_DIRECTORY "${_EXEDIR}" ) organize_source( "${WRAPPER_ROOT}" "mac" "${WRAPPER_SOURCES}" ) @@ -1167,6 +1170,7 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) target_sources( "Wrapper" PRIVATE ${WRAPPER_SOURCES} ) elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + set( _EXE "audacity" ) # Add additional library requirements list( APPEND LIBRARIES @@ -1180,9 +1184,30 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) set( HAVE_VISIBILITY 1 ) configure_file( audacity_config.h.in private/configunix.h ) + # Create the MIMETYPES list (must be a better way...) + if( USE_FFMPEG) + list( APPEND MIMETYPES "audio/aac;audio/ac3;audio/mp4;audio/x-ms-wma;video/mpeg" ) + endif() + if( USE_LIBFLAC) + list( APPEND MIMETYPES "audio/flac;audio/x-flac" ) + endif() + if( USE_LIBMAD ) + list( APPEND MIMETYPES "audio/mpeg" ) + endif() + if( USE_SNDFILE ) + list( APPEND MIMETYPES "audio/basic;audio/x-aiff;audio/x-wav" ) + endif() + if( USE_LIBOGG AND USE_LIBVORBIS ) + list( APPEND MIMETYPES "application/ogg;audio/x-vorbis+ogg" ) + endif() + + # Create the desktop file + set( AUDACITY_NAME "${_EXE}" ) + configure_file( audacity.desktop.in ${_INTDIR}/audacity.desktop ) + # Create the script to copy required wxWidgets libraries file( WRITE "${_INTDIR}/copy_libs.sh" - "for lib in \$(ldd ${_EXEDIR}/Audacity | awk '/libwx/{print \$1}') + "for lib in \$(ldd ${_EXEDIR}/${_EXE} | awk '/libwx/{print \$1}') do echo \${lib} ldd ${WXWIN}/lib/\${lib} | awk '/libwx/{print \$1}' @@ -1203,6 +1228,14 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) endif() +set_target_properties( + ${TARGET} + PROPERTIES + # Want a lowercase executable + RUNTIME_OUTPUT_NAME_${CMAKE_BUILD_TYPE} audacity + RUNTIME_OUTPUT_NAME ${_EXE} +) + find_package (Git) if (GIT_FOUND) execute_process( @@ -1222,17 +1255,6 @@ if (GIT_FOUND) ) endif() -install( - TARGETS - ${TARGET} - CONFIGURATIONS - "" Debug Release RelWithDebInfo RelWithDebInfo - RUNTIME DESTINATION - ${CMAKE_INSTALL_BINDIR} - BUNDLE DESTINATION - ${CMAKE_INSTALL_BINDIR} -) - organize_source( "${TARGET_ROOT}/.." "include" "${HEADERS}" ) organize_source( "${TARGET_ROOT}/../win" "win" "${RESOURCES}" ) organize_source( "${TARGET_ROOT}" "src" "${SOURCES}" ) @@ -1245,3 +1267,23 @@ target_link_options( "${TARGET}" PRIVATE ${LDFLAGS} ) target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) target_precompile_headers( ${TARGET} PRIVATE ${PRECOMP} ) +if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode|Visual Studio*" ) + if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + install( FILES "${_DEST}/Info.plist" + DESTINATION "${CMAKE_INSTALL_BINDIR}/Audacity.app/Contents" ) + install( PROGRAMS "${_EXEDIR}/${_EXE}" "${_EXEDIR}/Wrapper" + DESTINATION "${CMAKE_INSTALL_BINDIR}/Audacity.app/Contents/MacOS" ) + else() + install( PROGRAMS "${_EXEDIR}/${_EXE}" + TYPE BIN ) + install( FILES "${_INTDIR}/audacity.desktop" + DESTINATION "${_DATADIR}/applications" ) + install( FILES "${topdir}/LICENSE.txt" "${topdir}/README.txt" + DESTINATION "${_DATADIR}/doc" ) + install( FILES "${_SRCDIR}/audacity.xml" + DESTINATION "${_DATADIR}/mime/packages" ) + install( FILES "${topdir}/presets/EQDefaultCurves.xml" + DESTINATION "${_PKGDATA}" ) + endif() +endif() +