Merge remote-tracking branch 'upstream/master' #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# CMake based build for Audacity | |
# | |
name: CMake Build | |
# | |
# Only execute on "git push" actions | |
# | |
on: | |
push: | |
# Remove the "#" from the next 2 lines if you need to disable this action | |
#branches: | |
# - disable | |
pull_request: | |
# Remove the "#" from the next 2 lines if you need to disable this action | |
#branches: | |
# - disable | |
# | |
# Global environment variables | |
# | |
env: | |
WXURL: https://github.com/audacity/wxWidgets | |
WXREF: audacity-fixes-3.1.3 | |
WXWIN: ${{ github.workspace }}/wxwin | |
# As of 2021/01/01, github is using Xcode 12.2 as the default and | |
# it has a bug in the install_name_tool. So explicitly use 12.3 | |
# instead. | |
DEVELOPER_DIR: /Applications/Xcode_12.3.app/Contents/Developer | |
# | |
# Define our job(s) | |
# | |
jobs: | |
build: | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
name: "Windows_32bit", | |
os: windows-latest, | |
generator: "Visual Studio 16 2019", | |
platform: "Win32" | |
} | |
- { | |
name: "Windows_64bit", | |
os: windows-latest, | |
generator: "Visual Studio 16 2019", | |
platform: "x64" | |
} | |
- { | |
name: "Ubuntu_18.04", | |
os: ubuntu-18.04, | |
generator: "Unix Makefiles" | |
} | |
- { | |
name: "macOS", | |
os: macos-latest, | |
generator: "Xcode" | |
} | |
steps: | |
# ========================================================================= | |
# SHARED: Checkout source | |
# ========================================================================= | |
- name: Checkout | |
uses: actions/checkout@v2 | |
# with: | |
# ref: master | |
# ========================================================================= | |
# SHARED: Retrieve git hashes and set up for cache | |
# ========================================================================= | |
- name: Setup cache | |
shell: bash | |
run: | | |
set -x | |
# Get latest wxWidgets commit hash | |
wxhash=$(git ls-remote "${WXURL}" "${WXREF}" | awk 'NR==1 {print $1}') | |
# Build the cache key | |
wxhash="wx_${wxhash}_${RUNNER_OS}_${{matrix.config.platform}}" | |
# Export the commit hash to further steps | |
echo "WXHASH=${wxhash}" >> ${GITHUB_ENV} | |
# Get the short hash | |
shorthash=$(git show -s --format='%h') | |
# Export the short hash for the upload step | |
echo "SHORTHASH=${shorthash}" >> ${GITHUB_ENV} | |
# Export the destination directory name | |
echo "DEST=${{matrix.config.name}}_${shorthash}" >> ${GITHUB_ENV} | |
# ========================================================================= | |
# SHARED: Create and/or retrieve wxWidgets cached build | |
# ========================================================================= | |
- name: Populate cache | |
id: cache | |
uses: actions/cache@v1 | |
with: | |
# Increment the number at the end to force recreation of the cache | |
key: ${{ env.WXHASH }}.2 | |
path: ${{ env.WXWIN }} | |
# ========================================================================= | |
# WINDOWS: Build (for all versions of Windows) | |
# ========================================================================= | |
- name: Build for Windows | |
if: startswith( matrix.config.os, 'windows' ) | |
shell: bash | |
run: | | |
set -x | |
# Build wxWidgets if needed | |
if [ ! -e "${WXWIN}" ] | |
then | |
# Clone the wxWidgets repo | |
git clone --depth 1 --recurse-submodules -b "${WXREF}" "${WXURL}" "wxroot" | |
# Use cmake since it defines the MSVC environment for us | |
cmake -S "wxroot" \ | |
-B "wxroot" \ | |
-G "${{matrix.config.generator}}" \ | |
-A "${{matrix.config.platform}}" | |
# Build | |
cmake --build "wxroot" --config Release --verbose | |
# Install to the cached path | |
cmake --install "wxroot" --config Release --prefix "${WXWIN}" | |
# On Windows, we need zlib for libid3tag | |
mkdir -p "${WXWIN}/src" | |
cp -a "wxroot/lib" "${WXWIN}/" | |
cp -a "wxroot/src/zlib" "${WXWIN}/src" | |
fi | |
# Convert to CMake path | |
export WXWIN="${WXWIN//\\//}" | |
# Configure Audacity | |
# | |
# The wxWidgets_USE_REL_AND_DBG is needed because, | |
# on Github, we only build the Release version of | |
# wxWidgets and the FindwxWidgets CMake module | |
# defaults to looking for both. If either of them | |
# isn't found, then it doesn't provided the required | |
# library information. This is only a concern for | |
# Windows. | |
cmake -S . \ | |
-B build \ | |
-G "${{matrix.config.generator}}" \ | |
-A ${{matrix.config.platform}} \ | |
-D wxWidgets_USE_REL_AND_DBG=no \ | |
-D audacity_use_pch=no | |
# Build Audacity | |
cmake --build build --config Release --verbose | |
# "Install" Audacity | |
mkdir -p "${DEST}" | |
cp -a build/bin/Release/* "${DEST}" | |
rm -f "${DEST}"/{*.iobj,*.ipdb} | |
# Create artifact (zipped as Github actions don't preserve permissions) | |
cmake -E tar c "${GITHUB_SHA}.zip" --format=zip "${DEST}" | |
# ========================================================================= | |
# MACOS: Build (for all versions of MacOS) | |
# ========================================================================= | |
- name: Build for macOS | |
if: startswith( matrix.config.os, 'macos' ) | |
shell: bash | |
run: | | |
set -x | |
# Setup environment | |
export PATH="/usr/local/bin:${PATH}" | |
export DYLD_LIBRARY_PATH="/usr/local/lib" | |
# Install required packages | |
brew install gettext | |
brew link --force gettext | |
# Build wxWidgets if needed | |
if [ ! -e "${WXWIN}" ] | |
then | |
# Clone the wxWidgets repo | |
git clone --depth 1 --recurse-submodules -b "${WXREF}" "${WXURL}" "wxroot" | |
# Make sure our flags are included | |
export CXX="g++ -std=c++1z -stdlib=libc++" | |
export LD="g++ -std=c++1z -stdlib=libc++" | |
# The cmake build produces an incorrect wx-config script, so use | |
# the plain old configure/make | |
cd wxroot | |
./configure --prefix=/usr/local \ | |
--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="10.7" \ | |
--with-regex=builtin \ | |
--with-zlib=builtin \ | |
--without-liblzma | |
# Build and install to cached path | |
make -j $(sysctl -n hw.ncpu) install DESTDIR="${WXWIN}" | |
cd .. | |
# Clean up | |
unset CXX LD | |
fi | |
# "Install" wxWidgets | |
sudo cp -a "${WXWIN}"/usr/* /usr | |
# Configure Audacity | |
cmake -S . \ | |
-B build \ | |
-G "${{matrix.config.generator}}" \ | |
-D audacity_use_pch=no | |
# Build Audacity | |
cmake --build build --config Release | |
# "Install" Audacity | |
mkdir -p "${DEST}" | |
cp -a build/bin/Release/ "${DEST}" | |
# Create artifact (zipped as Github actions don't preserve permissions) | |
cmake -E tar c "${GITHUB_SHA}.zip" --format=zip "${DEST}" | |
# ========================================================================= | |
# UBUNTU: Build (for all versions of Ubuntu) | |
# ========================================================================= | |
- name: Build for Ubuntu | |
if: startswith( matrix.config.os, 'ubuntu' ) | |
shell: bash | |
run: | | |
set -x | |
# Setup environment | |
export PATH="/usr/local/bin:${PATH}" | |
export LD_LIBRARY_PATH="/usr/local/lib" | |
# Install required packages | |
sudo apt-get update -y | |
sudo apt-get install -y libgtk2.0-dev libasound2-dev gettext | |
sudo apt-get remove -y ccache | |
# Build wxWidgets if needed | |
if [ ! -e "${WXWIN}" ] | |
then | |
# Clone the wxWidgets repo | |
git clone --depth 1 --recurse-submodules -b "${WXREF}" "${WXURL}" "wxroot" | |
# Install additional required package | |
sudo apt-get install -y autoconf automake | |
# The cmake build produces an incorrect wx-config script, so use | |
# the plain old configure | |
cd wxroot | |
./configure --with-gtk | |
# Build and install to cached path | |
make -j $(nproc) install DESTDIR="${WXWIN}" | |
cd .. | |
fi | |
# "Install" wxWidgets | |
sudo cp -a "${WXWIN}"/* / | |
# Configure Audacity | |
cmake -S . \ | |
-B build \ | |
-G "${{matrix.config.generator}}" \ | |
-D audacity_use_pch=no | |
# Build Audacity | |
cmake --build build --config Release | |
# "Install" Audacity | |
cmake --install build --config Release --prefix "${DEST}" | |
# Create the lib directory | |
mkdir -p ${DEST}/lib | |
# Copy over wxWidgets libs | |
ldd ${DEST}/bin/audacity | |
for lib in $(ldd ${DEST}/bin/audacity | awk '/libwx/{print $3}') | |
do | |
echo ${lib} | |
ldd ${lib} | awk '/libwx/{print $3}' | |
done | sort -u | xargs cp -n -H -t ${DEST}/lib | |
# Create wrapper script | |
cat >"${DEST}/audacity" <<"EOF" | |
#!/bin/sh | |
export LD_LIBRARY_PATH="${0%/*}/lib:${LD_LIBRARY_PATH}" | |
"${0%/*}/bin/audacity" | |
EOF | |
chmod +x "${DEST}/audacity" | |
# Create artifact (zipped as Github actions don't preserve permissions) | |
cmake -E tar c "${GITHUB_SHA}.zip" --format=zip "${DEST}" | |
# ========================================================================= | |
# SHARED: Attach the artifact to the workflow results | |
# ========================================================================= | |
- name: Upload artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: ${{ matrix.config.name }}_${{ env.SHORTHASH }} | |
path: ${{ github.sha }}.zip |