Break the workflow into smaller stages (Configure, Build, Install,
Package, etc.) so that you can see exactly which stage failed in the
GitHub Actions run log.
Create a separate Bash CI script for each job stage (configure.sh,
build.sh, install.sh, package.sh, etc.) to reduce the size of the main
YAML workflow file and enable Bash syntax highlighting.
Close#917
1. We put all shared libraries into one place. Both conan and locally built
2. We invoke CopyLibs to copy the libraries to a proper location and to correctly set the RPATH
Fixes CopyLibs script on Windows
Fixes CopyLibs.cmake for Linux
Fixes CopyLibs on macOS
Fixes CopyLibs on macOS
add_conan_lib cmake function is defined, that allows to add a dependency using Conan with two possible system fallbacks:
1. pkg_check_modules is invoked, if `PGK_CONFIG ...` is present
2. find_package is invoked if `FIND_PACKAGE_OPTIONS` is present and `pkg_check_modules` has failed
If `ALWAYS_ALLOW_CONAN_FALLBACK` is present - `obey_system_dependencies` will be ignored for the package
Currently, the following dependencies are retrieved using Conan:
* zlib
* expat
* wxwidgets
* libmp3lame
* libid3tag
* libmad
The last three libraries are included in this commit, as they depend on zlib.
Properly pass **arch** and **os.version** to Conan
Since XCode 10, Apple does not recommend building for macOS <10.9
Reason - 10.7 and 10.8 require libstdc++
We enforce libc++
```# Shouldn't cmake do this???
string( APPEND CMAKE_CXX_FLAGS " -stdlib=libc++" )```
While this generally works, it makes the proper dependency management tricky.
Compiler message for the library support:
```
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated]
ld: library not found for -lstdc++
```
... Because it depends on having visited various lib-src directories, which I
want to delay until visiting various of the modules, and I also want to visit
src before the modules, because that's bottom-up dependency ordering.
So the step should not be done in src.
... This makes it impossible to forget to include the EXPERIMENTAL definitions
(such as when cutting and pasting code) and so get unintended quiet changes of
behavior.
The EXPERIMENTAL flags are now specified instead in new file Experimental.cmake
And added a python version that will be used on all platforms
when a suitable msgfmt isn't installed. (As long as python
is installed.)
Extracted all the Audacity specific functions from main cmake
list and moved them to their own module.
Rearrange the main cmake module a bit and misc. cleanup.
This adds a new target that will build the "minsrc" tarball.
It can be created on any platform now, either from the command
line or from within the Window's and Mac's project files.
The output tarball will be in the build directory.
And it's very easy to update the list of files/directories to
exclude...see scripts/CMakeLists.txt
This corrects linking of the wxWidgets libraries when there's multiple
copies and the desired one is later in the search path. This can affect
any non-Windows system that doesn't have it's wxWidgets in "standard"
libraries (like our wxWidgets builds on the Mac).
The wrong wxWidgets libraries can be picked up by the linker if other
"-L" arguments appear before the wxWidgets specific on. This can happen
if you have something like Homebrew installed and CMake finds one of the
libraries (like libogg) installed. It will put a "-L/usr/local/lib" in
the linker arguments before the "-L/usr/local/x86_64" wxWidgets flag,
and if there happens to be wxWidgets libs in /usr/local/lib, the linker
will pull the wxWidgets libs from /usr/local/lib...not what was wanted.
Visual Studio NuGet package handling was redone to correct a
chicken and egg situation. (See the nuget_package() function
in audacity/CMakeLists.txt.
Due to the change in NuGet handling, was finally able to make
the Audacity target dependent on several other targets. This
ensures the destination directory is populated correctly.
Library handling for system packages reworked to ensure the
correct libraries are used and to "workaround" an issue where
the libraries weren't being included in the link command...no
idea why. New way is better anyway.
Don't allow a system library for SBSMS since it seems we have
a unique (Audacity-only???) version.
Don't define wxDEBUG_LEVEL. It's not needed and causes duplicate
symbol warnings.
A couple of small changes to config files to remove libmad and
libsndfile warnings.
Do not include serdi.c and sordi.c in the LV2 build.
Fix handling of static Lame and linked FFmpeg libs.
Use cmake file() instead of gcc/awk to extract version information
from Audacity.h for the Mac Info.plist.
Use "cmake -E tar" to zip artifacts in github action.
Mostly from suggestions, but there's a couple of other minor
fixes and additions:
Cmake not decides with SDK to use on Windows
All Audacity cmake options are not prefixed with "audacity_", but this
is configurable in audacity/CMakeLists.txt
Several other options have been marked advanced so they don't clutter
the CMake GUI
On Windows, multiple processors will now be used reducing build time
considerably
Quieted a couple of package messages that the user doesn't need to see
No longer tried to create aliases on Windows
No longer used precompiled headers if ccache is available
On Windows, only copies the needed wxWidgets and VC runtime libraries
to the bin directory
I'm sure there will be further minor updates, but this
should be the last major update and it should be ready
for testing.
Audacity specific cmake options (cmake -Doption=<yes|no>) include:
// Disable dynamic loading of ffmpeg libraries
disable_dynamic_ffmpeg:BOOL=OFF
// Disable dynamic loading of JACK libraries
disable_dynamic_jack:BOOL=ON
// Enable ffmpeg library
enable_ffmpeg:BOOL=ON
// Enable flac library
enable_flac:BOOL=ON
// Enable id3tag library
enable_id3tag:BOOL=ON
// Enable LADSPA plug-in support
enable_ladspa:BOOL=ON
// Enable lv2 library
enable_lv2:BOOL=ON
// Enable mad library
enable_mad:BOOL=ON
// Enable midi library
enable_midi:BOOL=ON
// Enable nyquist library
enable_nyquist:BOOL=ON
// Enable ogg library
enable_ogg:BOOL=ON
// Enable portmixer library
enable_portmixer:BOOL=ON
// Enable portsmf library
enable_portsmf:BOOL=ON
// Enable sbsms library
enable_sbsms:BOOL=ON
// Enable soundtouch library
enable_soundtouch:BOOL=ON
// Enable twolame library
enable_twolame:BOOL=ON
// Enable vamp library
enable_vamp:BOOL=ON
// Enable vorbis library
enable_vorbis:BOOL=ON
// Enable VST2 plug-in support
enable_vst:BOOL=ON
// Use system libraries if available
prefer_system_libs:BOOL=ON
// Enable the portaudio ALSA interface if available
use_pa_alsa:BOOL=ON
// Enable the portaudio CoreAudio interface if available
use_pa_coreaudio:BOOL=ON
// Enable the portaudio DirectSound interface if available
use_pa_ds:BOOL=ON
// Use the JACK audio interface if available
use_pa_jack:BOOL=ON
// Use the OSS audio interface if available
use_pa_oss:BOOL=ON
// Enable the portaudio WASAPI interface if available
use_pa_wasapi:BOOL=ON
// Enable the portaudio WMME interface if available
use_pa_wmme:BOOL=ON
// Use ffmpeg system library if available
use_system_ffmpeg:BOOL=ON
// Use flac system library if available
use_system_flac:BOOL=ON
// Use id3tag system library if available
use_system_id3tag:BOOL=ON
// Use lame system library if available
use_system_lame:BOOL=ON
// Use lv2 system library if available
use_system_lv2:BOOL=ON
// Use mad system library if available
use_system_mad:BOOL=ON
// Use midi system library if available
use_system_midi:BOOL=ON
// Use ogg system library if available
use_system_ogg:BOOL=ON
// Use portsmf system library if available
use_system_portsmf:BOOL=ON
// Use sbsms system library if available
use_system_sbsms:BOOL=ON
// Use sndfile system library if available
use_system_sndfile:BOOL=ON
// Use soundtouch system library if available
use_system_soundtouch:BOOL=ON
// Use soxr system library if available
use_system_soxr:BOOL=ON
// Use twolame system library if available
use_system_twolame:BOOL=ON
// Use vamp system library if available
use_system_vamp:BOOL=ON
// Use vorbis system library if available
use_system_vorbis:BOOL=ON
// Use wxwidgets system library if available
use_system_wxwidgets:BOOL=ON