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
A special mode `audacity_obey_system_dependencies` is added, so the build will fail if we could not build against a system package for some reason.
The following packages are marked for the local build now:
* **wxWidgets**: Ubuntu lacks support for 3.1.3. We can't build against 3.0 branch.
* **portaudio**: there are issues, that prevent using a system version of portaudio.
* **sqlite3**: Ubuntu package is very dated; we care about the performance and stability.
* **nyquist**: Ubuntu has no package available.
* **vamp**: Ubuntu has no development package available.
* **portmixer**: Ubuntu has no package available.
* **sbsms**: Ubuntu package is very dated; we care about the performance and stability.
We use docker to create a clean build environment. Currently, `pkg-config` is used to locate the system libraries. There are few issues with `pkg-config` on Ubuntu:
* It does not work with `lame` and `portmidi`.
* The packaged files for `id3tag` and `mad` have wrong version.
We fix such cases by copying the
into `/usr/local/lib`.
... not assuming that it is invoked from cmake-proxies/CMakeLists.txt
This will allow modules to use lib-src libraries, and even for a module to be
the sole user of one of them.
So addlib lines may be moved out of cmake-proxies/CMakeLists.txt, when no
longer needed to build the reduced executable without the modules.
... So mod-foo defines FOO_API properly on the command line, for use in its
public header files; on Windows, appropriately expanding one way when compiling
the library, another way when compiling other code that uses it, so that all
will link correctly.
Cliff noticed that the CMake git ident was not being updated when
pulling new changes. This was because it was getting captured at
configuration time and, even if you pull more changes, the CMake
configuration may not be redone automatically if the build files
weren't also changed.
So, this adds a new target to get the information at build time
instead.
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 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.
The default is to use the system one if found. If the
WXWIN environment variable is set and points to a valid
wxWidgets tree, that will be used. Otherwise, it will
search the platform specific locations.
You can use a local library instead with:
cmake -Duse_system_wxwigets=no ...
In this case it will look for the WXWIN environment variable
and use that or it will download the Audacity specific wxWidgets
source. In both cases, wxWidgets will be built as part of the
Audacity project.
It's still has some work, but it successfully builds on
all 3 main platforms. Some of the outstanding items
include:
Install target testing (mostly important for Linux)
CMakeList clean up and comments
Debug and Release build verification
Audit of compile/link options
Need a Mac signed and notarized build
(and probably more)
https://github.com/sakra/cotire
Currently we only use it for precompiled headers for Audacity src.
There is a 'unity' build, but it needs work by us to fix it for duplicate
definition.