# -*- coding: utf-8; mode: tcl; tab-width: 4; truncate-lines: t; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup github 1.0 name audacity categories audio maintainers {gmail.com:rjvbertin @RJVB} openmaintainer license GPL-2+ universal_variant no set aud_app_path ${applications_dir}/Audacity.app # The manual subport is defined first since it doesn't require a lot of setting up subport "${name}-manual" {} if {${subport} eq "${name}-manual"} { description The manual for audacity long_description {*}${description}. Users of port:audacity-legacy may prefer to use the \ online manual instead of installing this port. github.setup audacity audacity-manual 3.1.0 v homepage https://manual.audacityteam.org/ checksums rmd160 8e8916ad861888538ca2844c107470a262651222 \ sha256 f30068e8eabe70b001e4fc2f6ace6b6e87b815d3bd756902485a960e41523e93 \ size 23695970 depends_run path:bin/audacity:audacity use_configure no build {} installs_libs no supported_archs noarch platforms {darwin any} destroot { platform darwin { xinstall -m 755 -d ${destroot}${aud_app_path}/Contents/help file copy ${worksrcpath}/manual ${destroot}${aud_app_path}/Contents/help } platform linux { xinstall -m 755 -d ${destroot}${prefix}/share/audacity/help file copy ${worksrcpath}/manual ${destroot}${prefix}/share/audacity/help } } return 0 } variant wxsystem description {Depend on wxWidgets from MacPorts} {} # PortGroups for the main ports PortGroup active_variants 1.1 PortGroup cmake 1.1 description A Free, Cross-Platform Digital Audio Editor. long_description Audacity is a free, easy-to-use, multi-track audio editor and recorder \ for Windows, Mac OS X, GNU/Linux and other operating systems. The interface is translated \ into many languages. You can use Audacity to: \n\ Record live audio. \n\ Record computer playback on any Windows Vista or later machine. \n\ Convert tapes and records into digital recordings or CDs. \n\ Edit WAV, AIFF, FLAC, MP2, MP3 or Ogg Vorbis sound files. \n\ AC3, M4A/M4R (AAC), WMA and other formats supported using optional libraries. \n\ Cut, copy, splice or mix sounds together. \n\ Numerous effects including change the speed or pitch of a recording. \n\ And more! subport audacity-legacy { long_description-append \ \n This version of the port provides the last release using the legacy file format. \ The newer v3 versions can import the legacy .aup projects but can only \ write in a new .aup3 format that the older versions cannot import! Use this port \ if you have a need to exchange native projects with people using Audacity versions \ older than 3.0.0 . } subport audacity-devel { replaced_by audacity PortGroup obsolete 1.0 } if {${subport} eq "${name}-legacy"} { conflicts ${name} # get the source tarball from github because it contains all required external libs # incl. those not in MacPorts. github.setup audacity audacity 2.4.2 Audacity- revision 2 checksums rmd160 d9e04c029a144800e378a6b5464c74f3fdb2a7e2 \ sha256 032273e2408ad51f97c6846ac8d8fe9e4a3fbc6e4c620e630ea4c1d0124d9a94 \ size 61254313 set PPREFIX ./ if {[variant_isset wxsystem]} { variant wx30 conflicts wx32 requires wxsystem description {build against wxWidgets-3.0} {} } } else { conflicts "${name}-legacy" ## 576b7e66 looks like possibly the last commit before the takeover by the new project owner: github.setup audacity audacity 576b7e66d2b96c39241d3d992259fc2bfa7855b0 version 3.0.2.129 revision 2 # this port is intended to facilitate development efforts shared with "upstreams" # so using git instead of a tarball fetch type is more appropriate for the current maintainer # fetch.type git # distname audacity-git worksrcdir audacity-${version} checksums rmd160 3615af185a7338b83fba23c943b9898c7bbb260d \ sha256 58349631840adf45a81b57037819e14e18cb684586cde249630e66488b911902 \ size 64490814 set PPREFIX devel/ livecheck.type none } variant wx32 conflicts wx30 requires wxsystem description {build against wxWidgets-3.2} {} if {![variant_exists wxsystem] || [variant_isset wxsystem]} { PortGroup wxWidgets 1.0 } else { depends_fetch-append \ bin:wget:wget } supported_archs x86_64 arm64 compiler.cxx_standard 2014 build.post_args-append -k cmake.generator Ninja if {${os.major} >= 17} { # Audacity builds "normally" from 10.7 to 10.13, but will request the 10.13 SDK # on 10.14 and newer to "prevent high CPU usage and slow drawing". Linking will # fail if MacPort lets source be compiled against the platform SDK, so we handle # SDK selection ourselves entirely. MP builds aren't required to support anything # but the OS version they were built for. On 11.x we just build as if there are # no OS specifics. if {${os.major} < 20} { macosx_deployment_target 10.13 configure.sdkroot } } proc add_patchfile_ifexists {args} { global PPREFIX filespath foreach fname ${args} { if {[file exists ${filespath}/${fname}]} { patchfiles-append ${fname} } } } # openssl is a dependency of curl in cmake and of python3.7 license_noconflict cmake python37 homepage http://www.audacityteam.org/ if {[variant_isset wxsystem]} { if {[variant_exists wx32] && [variant_isset wx32]} { wxWidgets.use wxWidgets-3.2 } elseif {[variant_exists wx30] && [variant_isset wx30]} { wxWidgets.use wxWidgets-3.0 } else { # we want to use the temporary wxWidgets-3.1 "Audacity-special" port! wxWidgets.use wxWidgets-3.1 } require_active_variants ${wxWidgets.port} "" stdlib depends_lib-append port:${wxWidgets.port} } else { set wxCommit 07e7d83 # different master_sites so we need to fetch and extract the audacity-wxWidgets sources "manually" post-fetch { if {![file exists ${distpath}/wxWidgets-${wxCommit}.tar.gz]} { ui_info "---> Fetching wxWidgets-${wxCommit}.tar.gz" system "wget --no-check-certificate \"https://github.com/audacity/wxWidgets/tarball/${wxCommit}/wxWidgets-${wxCommit}.tar.gz\" \ --progress=bar:force -O ${distpath}/wxWidgets-${wxCommit}.tar.gz" } } post-extract { ui_info "---> Extracting wxWidgets-${wxCommit}.tar.gz" system -W ${worksrcpath}/lib-src "tar -xf ${distpath}/wxWidgets-${wxCommit}.tar.gz" ln -s audacity-wxWidgets-${wxCommit} ${worksrcpath}/lib-src/wxWidgets } # add the wxWidgets dependencies depends_lib-append \ path:include/turbojpeg.h:libjpeg-turbo \ port:tiff \ port:libpng \ port:zlib \ port:libiconv } depends_build-append \ port:pkgconfig \ port:python37 set python_bin ${prefix}/bin/python3.7 depends_lib-append port:freetype \ path:lib/pkgconfig/harfbuzz.pc:harfbuzz \ port:soundtouch \ port:soxr \ port:twolame \ port:expat \ path:lib/libavcodec.dylib:ffmpeg \ port:flac \ port:lame \ port:libogg \ port:libsndfile \ port:libvorbis if {${os.arch} ne "arm"} { depends_lib-append \ port:libid3tag \ port:libmad } # audacity could use port:lv2 and port:lilv but would also require a port:suil for that to be possible. patch.pre_args -Np1 # address issues in the build system: # - build and link VSTControlOSX.mm instead of the GTk interface # - address a visibility issue with the slider_array variable in libnyquist # - make the AudioUnits plugin support build; on 64bit and also include AUControl.mm platform darwin { depends_build-append \ port:nasm patchfiles-append \ portaudio-no-universal-build.diff \ buildinfo-clarify-no-gstreamer.diff \ patch-aboutdlg-compiler.diff \ add_enGB_translation.diff \ patch-more-decent-font-sizes.diff \ patch-python.diff \ patch-libnyquist-symbol-visibility.diff # use lame from MacPorts (partial revert of ae431bc5) # load ffmpeg libs from MacPorts (reverts of 1d40f33e) patchfiles-append \ patch-use-MPlame.diff \ patch-use-MPffmpeg.diff # work around a missing implementation in wxCocoa's wxSound class patchfiles-append \ patch-implement-progdial=beep.diff \ patch-wxw-303.diff if {[variant_isset wxsystem]} { # make certain we're not embedding any wxWidgets libraries add_patchfile_ifexists \ ${PPREFIX}patch-no-embedded-wxW.diff } else { # make certain we're embedding our wxWidgets libraries add_patchfile_ifexists \ ${PPREFIX}patch-embed-wxW.diff } } add_patchfile_ifexists \ ${PPREFIX}patch-skip-gcc-version-test.diff \ ${PPREFIX}patch-enable-compact-menu.diff \ ${PPREFIX}patch-temp-fixes.diff if {[variant_isset wxsystem] && ${wxWidgets.use} ne "wxWidgets-3.2"} { add_patchfile_ifexists \ ${PPREFIX}patch-wxw-31x.diff } platform darwin { variant suil description {Build the GUI library for LV2 plugins\; requires Qt5} { PortGroup qt5 1.0 } } # among other things, we add frameworks AudioToolbox, Cocoa and Carbon because somewhere after wxW 3.1.3 # the wx build system no longer exports private libraries. Carbon could be temporary because wxW # dropped Carbon usage somewhere around 3.1.4 but drops support for 10.9- earlier. This is not # required when building against port:wxWidgets-3.1 but it won't hurt either. patchfiles-append ${PPREFIX}patch-cmakefiles.diff # quelch a huge number of warnings configure.cxxflags-append \ -Wno-inconsistent-missing-override \ -Wno-overloaded-virtual set _OPT "audacity_" configure.args-append \ -D${_OPT}lib_preference=system \ -D${_OPT}use_audio_units=on \ -D${_OPT}use_pa_jack=off \ -D${_OPT}use_ffmpeg=linked \ -D${_OPT}use_lame=system \ -D${_OPT}use_flac=system \ -D${_OPT}use_soxr=system \ -D${_OPT}use_vamp=local \ -D${_OPT}use_ogg=system \ -D${_OPT}use_vorbis=system \ -D${_OPT}use_lv2=local \ -D${_OPT}use_suil_qt5=OFF \ -D${_OPT}use_sbsms=local \ -D${_OPT}use_soundtouch=system \ -D${_OPT}use_twolame=system \ -D${_OPT}use_midi=local \ -D${_OPT}use_pch=on if {${os.arch} ne "arm"} { configure.args-append \ -D${_OPT}use_mad=system \ -D${_OPT}use_id3tag=system } else { configure.args-append \ -D${_OPT}use_mad=off \ -D${_OPT}use_id3tag=off } if {${subport} eq ${name}} { # using port:sqlite3 leads to unstable behaviour?! configure.args-append \ -D${_OPT}use_sqlite=local } else { depends_lib-append \ port:sqlite3 } if {[variant_isset wxsystem]} { configure.args-append \ -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} \ -D${_OPT}use_wxwidgets=system configure.env-append \ WX_CONFIG=${wxWidgets.wxconfig} } else { configure.args-append \ -D${_OPT}use_wxwidgets=local # use the MacPorts options for building wxWidgets, in particular # about using dependencies from MacPorts: configure.args-append \ -DwxUSE_LIBICONV=sys \ -DwxUSE_LIBJPEG=sys \ -DwxUSE_LIBTIFF=sys \ -DwxUSE_LIBPNG=sys \ -DwxUSE_ZLIB=sys \ -DwxUSE_OPENGL=ON \ -DwxUSE_LIBSDL=OFF \ -DwxUSE_AUI=ON \ -DwxUSE_DISPLAY=ON \ -DwxUSE_XRC=ON \ -DwxUSE_GRAPHICS_CONTEXT=ON \ -DwxBUILD_PRECOMP=ON \ -DwxBUILD_STRIPPED_RELEASE_DEFAULT=OFF configure.env-append \ WXWIN=${worksrcpath}/lib-src/wxWidgets build.env-append \ WXWIN=${worksrcpath}/lib-src/wxWidgets } # ensure pre-compiled headers and the possible use of ccache can co-exist configure.env-append \ "CCACHE_SLOPPINESS=pch_defines,time_macros" build.env-append "CCACHE_SLOPPINESS=pch_defines,time_macros" if {[variant_isset suil]} { configure.args-replace \ -D${_OPT}use_suil_qt5=OFF \ -D${_OPT}use_suil_qt5=ON } platform darwin { # Since version 2.2.0 we need to use the embedded (modified) Portaudio version. configure.args-append \ -Daudacity_use_portaudio=local } # make sure the C++ stdlib argument is added to the LDFLAGS too if {${configure.cxx_stdlib} ne "" && [string match *clang* ${configure.cxx}]} { configure.ldflags-append \ -stdlib=${configure.cxx_stdlib} } pre-configure { configure.args-append \ "CPPFLAGS=\"${configure.cppflags}\"" } if {${build.cmd} ne "ninja"} { build.args-append V=1 VERBOSE=1 } else { build.pre_args-prepend -k 0 } # with everything defined/declared as intended we can now # handle the post-patch step with its reinplace statements. post-patch { reinplace -W ${worksrcpath} "s|@@PYTHON@@|${python_bin}|g" \ lib-src/lv2/configure reinplace -W ${worksrcpath} "s|/usr/local|${prefix}|g" \ src/effects/ladspa/LadspaEffect.cpp \ src/effects/VST/VSTEffect.cpp \ src/export/ExportMP3.cpp \ lib-src/lv2/lilv/wscript \ lib-src/lv2/lilv/test/lilv_test.c reinplace -W ${worksrcpath} "s|/Library/Audio/Plug-Ins/Vamp|/Library/Audio/Plug-Ins/Vamp:${prefix}/lib/vamp|g" \ lib-src/libvamp/src/vamp-hostsdk/PluginHostAdapter.cpp reinplace -W ${worksrcpath} "s|/Library/Application Support/audacity/libs|${prefix}/lib|g" \ src/FFmpeg.h reinplace -W ${worksrcpath} "s| -Werror||g" \ lib-src/portaudio-v19/configure.in \ lib-src/portaudio-v19/configure reinplace -W ${worksrcpath} "s|@PREFIX@|/opt/local|g" \ cmake-proxies/lv2/CMakeLists.txt platform darwin { # audacity contains C++ files that include system SDK headers and ObjC code on OS X; # they must thus be built as ObjC++ set make_objcpp { \ {CommandManager src/commands {src/Makefile.in src/Makefile.am}} \ {Effect src/effects {src/Makefile.in src/Makefile.am}} \ {LV2Effect src/effects/lv2 {src/Makefile.in src/Makefile.am}} \ {KeyboardCapture src {src/Makefile.in src/Makefile.am}} \ } foreach mm ${make_objcpp} { set f [lindex ${mm} 0] set d [lindex ${mm} 1] set mk [lindex ${mm} 2] # it's easiest to symlink f.mm to f.cpp; clang++ will do the rest. if {![file exists ${worksrcpath}/${d}/${f}.mm]} { ln -s ${f}.cpp ${worksrcpath}/${d}/${f}.mm } } if {[file exists ${worksrcpath}/src/menus/WindowMenus.cpp] && ![file exists ${worksrcpath}/src/menus/WindowMenus.mm]} { ln -s WindowMenus.cpp ${worksrcpath}/src/menus/WindowMenus.mm } } } pre-build { # register the exact source version in the build: if {[file exists ${worksrcpath}/mac/scripts/get_gitident.sh]} { system -W ${worksrcpath}/mac "scripts/get_gitident.sh" system "echo '#define GIT_DESC \"${version}\"' >> ${worksrcpath}/src/RevisionIdent.h" } else { system "echo '#define GIT_DESC \"${version}\"' > ${worksrcpath}/src/GitDesc.h" } } platform darwin { post-destroot { if {${subport} eq "${name}-legacy"} { file rename ${destroot}${prefix}/Audacity.app ${destroot}${aud_app_path} file delete -force ${destroot}${prefix}/share/audacity/plug-ins file delete -force ${destroot}${prefix}/share/audacity/nyquist file delete -force ${destroot}${prefix}/share/audacity/modules ln -s ${aud_app_path}/Contents/plug-ins ${destroot}${prefix}/share/audacity/ file delete -force ${destroot}/Resources if {[variant_isset suil]} { xinstall -m 755 -d ${destroot}${aud_app_path}/Contents/Frameworks file rename ${build.dir}/bin/MacPorts/lib/audacity/suil_qt5_in_cocoa.so \ ${destroot}${aud_app_path}/Contents/Frameworks/suil_qt5_in_cocoa.dylib ln -s suil_qt5_in_cocoa.dylib ${destroot}${aud_app_path}/Contents/Frameworks/suil_qt5_in_cocoa.so } } else { file rename ${destroot}${prefix}/Audacity.app ${destroot}${aud_app_path} if {[variant_isset wxsystem]} { # I haven't yet figured out how to disable the copying of wx libraries into the bundle # but they can be pruned because CopyLibs.cmake is not invoked. file delete -force ${destroot}${aud_app_path}/Contents/Frameworks } xinstall -m 755 -d ${destroot}${prefix}/share/audacity ln -s ${aud_app_path}/Contents/plug-ins ${destroot}${prefix}/share/audacity/ xinstall -m 755 -d ${destroot}${prefix}/share/mime/packages xinstall -m 644 ${worksrcpath}/src/audacity.xml ${destroot}${prefix}/share/mime/packages/ xinstall -m 755 -d ${destroot}${prefix}/share/appdata xinstall -m 644 ${worksrcpath}/help/audacity.appdata.xml ${destroot}${prefix}/share/appdata/ xinstall -m 755 -d ${destroot}${prefix}/share/doc/Audacity xinstall -m 644 ${worksrcpath}/README.txt ${worksrcpath}/LICENSE.txt ${destroot}${prefix}/share/doc/Audacity xinstall -m 755 -d ${destroot}${prefix}/share/man/man1 xinstall -m 644 ${worksrcpath}/help/audacity.1 ${destroot}${prefix}/share/man/man1/ xinstall -m 755 -d ${destroot}${prefix}/share/icons/hicolor/scalable/apps xinstall -m 644 ${worksrcpath}/images/audacity.svg ${destroot}${prefix}/share/icons/hicolor/scalable/apps/ foreach s {16 22 24 32 48} { xinstall -m 755 -d ${destroot}${prefix}/share/icons/hicolor/${s}x${s} xinstall -m 644 ${worksrcpath}/images/icons/${s}x${s}/audacity.png ${destroot}${prefix}/share/icons/hicolor/${s}x${s} } if {[variant_isset suil]} { xinstall -m 755 -d ${destroot}${aud_app_path}/Contents/Frameworks file rename ${destroot}${aud_app_path}/Contents${build.dir}/bin/Audacity.app/Contents/Frameworks/libsuil_qt5_in_cocoa.so \ ${destroot}${aud_app_path}/Contents/Frameworks/libsuil_qt5_in_cocoa.dylib ln -s libsuil_qt5_in_cocoa.dylib ${destroot}${aud_app_path}/Contents/Frameworks/libsuil_qt5_in_cocoa.so } } if {[variant_isset wxsystem]} { foreach l [glob -nocomplain ${wxWidgets.prefix}/share/locale/*] { set lang [file tail ${l}] xinstall -m 755 -d ${destroot}${aud_app_path}/Contents/Resources/${lang}.lproj ln -s ${l}/LC_MESSAGES/wxstd.mo ${destroot}${aud_app_path}/Contents/Resources/${lang}.lproj/ } } # allow the application to find certain things where it expects them on OS X (= inside the app bundle) foreach r [glob -nocomplain ${destroot}${prefix}/share/audacity/*] { set f [file tail ${r}] if {![file exists ${destroot}${aud_app_path}/Contents/Resources/${f}]} { ln -s ${prefix}/share/audacity/${f} ${destroot}${aud_app_path}/Contents/Resources } } # install a wrapper script in ${prefix}/bin system "echo \"#!/bin/sh\nexec \\\"${aud_app_path}/Contents/MacOS/Wrapper\\\" \\\"\\\$\@\\\"\" > ${destroot}${prefix}/bin/audacity" system "chmod 755 ${destroot}${prefix}/bin/audacity" } } post-destroot { xinstall -m 755 ${filespath}/vocalremover.ny ${destroot}${aud_app_path}/Contents/plug-ins/ } notes " In case Audacity complains about finding FFmpeg or Lame, please locate these libraries\ under ${prefix}/lib in the Libraries section of the Preferences dialog (see\ http://manual.audacityteam.org/man/installing_and_updating_audacity_on_mac_os_x.html#locate) " # kate: backspace-indents true; indent-pasted-text true; indent-width 4; keep-extra-spaces true; remove-trailing-spaces modified; replace-tabs true; replace-tabs-save true; syntax Tcl/Tk; tab-indents true; tab-width 4;