mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-11 06:31:07 +02:00
317 lines
10 KiB
YAML
317 lines
10 KiB
YAML
name: Build Audacity
|
|
|
|
on:
|
|
push:
|
|
# Remove the "#" from the next 2 lines if you need to disable this action
|
|
#branches:
|
|
# - disable
|
|
|
|
jobs:
|
|
build:
|
|
# =========================================================================
|
|
# Run asynchronous builds
|
|
# =========================================================================
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [windows-2019, ubuntu-16.04, ubuntu-18.04, macos-latest]
|
|
#os: [macos-latest]
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
env:
|
|
USE_AUDACITY_WX: true
|
|
|
|
steps:
|
|
# =========================================================================
|
|
# SHARED: Checkout source
|
|
# =========================================================================
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
with:
|
|
ref: master
|
|
|
|
# =========================================================================
|
|
# SHARED: Retrieve the commit hash and generate revision header
|
|
# =========================================================================
|
|
- name: Generate Header
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
|
|
# Generate the revision header
|
|
git show -s --format="#define REV_LONG \"%H\"%n#define REV_TIME \"%cd\"%n" >src/RevisionIdent.h
|
|
|
|
# Export the long and short hashs to further steps
|
|
echo "::set-env name=LONGHASH::$(git show -s --format='%H')"
|
|
echo "::set-env name=SHORTHASH::$(git show -s --format='%h')"
|
|
|
|
# =========================================================================
|
|
# SHARED: Retrieve the wxWidgets source and export the commit hash
|
|
# =========================================================================
|
|
- name: wxWidgets Hash
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
|
|
# Get latest wxWidgets source
|
|
git clone --depth 1 -n https://github.com/audacity/wxWidgets
|
|
cd wxWidgets
|
|
|
|
# Export the commit hash to further steps
|
|
echo "::set-env name=WXHASH::$(git show -s --format='%H')"
|
|
|
|
# =========================================================================
|
|
# SHARED: Create and/or retrieve wxWidgets cached build
|
|
# =========================================================================
|
|
- name: Cache wxWidgets
|
|
uses: actions/cache@v1
|
|
with:
|
|
# Increment the number at the end to force recreation of the cache
|
|
key: wxWidgets_${{ matrix.os }}_${{ env.WXHASH }}.8
|
|
path: wxroot
|
|
|
|
# =========================================================================
|
|
# WINDOWS: Setup Nuget (for all versions of Windows)
|
|
# =========================================================================
|
|
- name: Setup Nuget
|
|
uses: nuget/setup-nuget@v1
|
|
if: startswith( matrix.os, 'windows' )
|
|
|
|
# =========================================================================
|
|
# WINDOWS: Build (for all versions of Windows)
|
|
# =========================================================================
|
|
- name: Build Windows
|
|
if: startswith( matrix.os, 'windows' )
|
|
shell: cmd
|
|
run: |
|
|
:: Set up Visual Studio environment
|
|
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
|
|
ECHO ON
|
|
|
|
:: Setup environment
|
|
choco install zip
|
|
|
|
:: Identify wxWidgets installation directory
|
|
SET WXWIN=%GITHUB_WORKSPACE%\wxroot
|
|
|
|
:: Build wxWidgets if needed
|
|
IF NOT EXIST %WXWIN% (
|
|
MKDIR %WXWIN%
|
|
|
|
CD wxWidgets
|
|
git checkout
|
|
git submodule update --init
|
|
|
|
:: Build it
|
|
CD build\msw
|
|
nmake -f makefile.vc BUILD=release SHARED=1
|
|
IF NOT %ERRORLEVEL% == 0 EXIT %ERRORLEVEL%
|
|
CD ..\..
|
|
|
|
:: "Install" wxWidgets
|
|
XCOPY include %WXWIN%\include /E /I /Q /Y
|
|
XCOPY lib %WXWIN%\lib /E /I /Q /Y
|
|
XCOPY locale %WXWIN%\locale /E /I /Q /Y
|
|
XCOPY src %WXWIN%\src /E /I /Q /Y
|
|
|
|
CD ..
|
|
)
|
|
|
|
:: Build Audacity
|
|
CD win
|
|
|
|
:: Restore packages (for gettext)
|
|
nuget restore audacity.sln
|
|
|
|
:: Build solution
|
|
msbuild audacity.sln /m /p:Configuration=Release /p:Platform=Win32
|
|
IF NOT %ERRORLEVEL% == 0 EXIT %ERRORLEVEL%
|
|
|
|
:: "Install" Audacity
|
|
MKDIR "%LONGHASH%"
|
|
XCOPY Release "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_net_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_vc_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_xml_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_adv_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_core_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_html_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
XCOPY %WXWIN%\lib\vc_dll\*u_qa_*.dll "%LONGHASH%" /E /I /Q /Y
|
|
CD "%LONGHASH%"
|
|
DEL /Q /S *.iobj *.exp *.ilk *.lib *.ipdb *.pdb include
|
|
#CD ..
|
|
|
|
:: Create artifact
|
|
|
|
zip -r9 "..\..\%LONGHASH%.zip" *
|
|
|
|
# =========================================================================
|
|
# UBUNTU: Build (for all versions of Ubuntu)
|
|
# =========================================================================
|
|
- name: Build Ubuntu
|
|
if: startswith( matrix.os, 'ubuntu' )
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
|
|
# Setup environment
|
|
sudo apt-get install -y libgtk2.0-dev libasound2-dev autoconf automake zip
|
|
|
|
# Identify wxWidgets installation directory
|
|
WXROOT="${GITHUB_WORKSPACE}/wxroot"
|
|
|
|
# Build wxWidgets if needed
|
|
if [ ! -e "${WXROOT}" ]
|
|
then
|
|
mkdir "${WXROOT}"
|
|
|
|
cd wxWidgets
|
|
git checkout
|
|
git submodule update --init
|
|
|
|
./configure --with-gtk
|
|
make -j $(nproc) install DESTDIR="${WXROOT}"
|
|
|
|
cd ..
|
|
fi
|
|
|
|
# "Install" wxWidgets
|
|
sudo cp -a "${WXROOT}"/* /
|
|
|
|
# Configure Audacity
|
|
mkdir bld
|
|
cd bld
|
|
../configure --with-lib-preference='local system'
|
|
|
|
# Build lib-src first
|
|
#
|
|
# This allows using multiple make jobs (-j). If not done this way
|
|
# the build may fail (bug in our make process)
|
|
cd lib-src
|
|
make -j $(nproc)
|
|
cd ..
|
|
|
|
# And then the rest
|
|
make -j $(nproc)
|
|
|
|
# Identify installation directory
|
|
DESTDIR="$(pwd)/linux"
|
|
mkdir -p "${DESTDIR}"
|
|
|
|
# Create wrapper script
|
|
#
|
|
# (This is only needed if using our wxWidgets libs)
|
|
cat >"${DESTDIR}/audacity" <<"EOF"
|
|
#!/bin/sh
|
|
export LD_LIBRARY_PATH="${0%/*}:${LD_LIBRARY_PATH}"
|
|
"${0%/*}/audacity.bin"
|
|
EOF
|
|
chmod +x "${DESTDIR}/audacity"
|
|
|
|
# Copy over dist files
|
|
cp -a audacity "${DESTDIR}/audacity.bin"
|
|
cp -aL nyquist plug-ins "${DESTDIR}"
|
|
mkdir "${DESTDIR}/help" "${DESTDIR}/locale/"
|
|
cp -aL $(find locale/ -type d) "${DESTDIR}/locale/"
|
|
|
|
# Copy wxWidgets libraries
|
|
cp -a "${WXROOT}"/usr/local/lib/*.so* "${DESTDIR}"
|
|
|
|
# Create artifact (zipped as Github actions don't preserve permissions)
|
|
cd "${DESTDIR}"
|
|
zip -r9 "${GITHUB_WORKSPACE}/${LONGHASH}.zip" *
|
|
|
|
# =========================================================================
|
|
# MACOS: Build (for all versions of MacOS)
|
|
# =========================================================================
|
|
- name: Build Mac
|
|
if: startswith( matrix.os, 'macos' )
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
|
|
# The minimum OS X version supported by Audacity is 10.7.
|
|
minver=10.7
|
|
|
|
# Make the "msgfmt" command available
|
|
brew install gettext
|
|
brew link --force gettext
|
|
|
|
# Make sure MacOS supplied commands are used
|
|
export PATH="/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin"
|
|
|
|
# Identify wxWidgets installation directory
|
|
WXROOT="${GITHUB_WORKSPACE}/wxroot"
|
|
|
|
# Build wxWidgets if needed
|
|
if [ ! -e "${WXROOT}" ]
|
|
then
|
|
mkdir "${WXROOT}"
|
|
|
|
cd wxWidgets
|
|
git checkout
|
|
git submodule update --init
|
|
|
|
# Make sure our flags are included
|
|
export CXX="g++ -std=c++1z -stdlib=libc++"
|
|
export LD="g++ -std=c++1z -stdlib=libc++"
|
|
|
|
# Build x86_64, release, shared configuration
|
|
./configure --prefix=/usr/local/x86_64 \
|
|
--enable-debug=no \
|
|
--enable-macosx-arch="x86_64" \
|
|
--enable-shared=yes \
|
|
--enable-unicode=yes \
|
|
--enable-universal_binary=no \
|
|
--enable-webkit=no \
|
|
--enable-webviewwebkit=no \
|
|
--with-expat=builtin \
|
|
--with-flavour="release" \
|
|
--with-libjpeg=builtin \
|
|
--with-libpng=builtin \
|
|
--with-libtiff=builtin \
|
|
--with-macosx-version-min="${minver}" \
|
|
--with-regex=builtin \
|
|
--with-zlib=builtin \
|
|
--without-liblzma
|
|
|
|
${run} make -j $(sysctl -n hw.ncpu) install DESTDIR="${WXROOT}"
|
|
|
|
unset CXX LD
|
|
|
|
cd ..
|
|
fi
|
|
|
|
# "Install" wxWidgets
|
|
sudo cp -a "${WXROOT}/usr/local" /usr/
|
|
|
|
# Build Audacity
|
|
cd mac
|
|
|
|
# Temporary workaround until they can be incorporated into
|
|
# the Xcode project itself
|
|
sed -i '' -e "s/TARGET=10.9/TARGET=${minver}/g" \
|
|
-e "s/macosx10.9/macosx/g" Audacity.xcodeproj/project.pbxproj
|
|
|
|
xcodebuild -configuration Release64 install
|
|
cd ..
|
|
|
|
# "Install" Audacity
|
|
mkdir -p macos
|
|
cp -a /tmp/Audacity.dst/Audacity.app macos
|
|
|
|
# Create artifact (zipped as Github actions don't preserve permissions)
|
|
cd "/tmp/Audacity.dst"
|
|
zip -r9 "${GITHUB_WORKSPACE}/${LONGHASH}.zip" *
|
|
|
|
# =========================================================================
|
|
# SHARED: Attach the artifact to the workflow results
|
|
# =========================================================================
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: ${{ matrix.os }}_${{ env.SHORTHASH }}
|
|
path: ${{ env.LONGHASH }}.zip
|
|
|