... in the graph of library dependencies.
Necessary to avoid crashes on startup loading dynamic libraries, but sufficient
to avoid excessive build times with many libraries.
... When the graph of library dependencies is not recursive but complicated,
a combinatorial explosion of paths could make the post-build step not infinite
but very long (80 minutes in one of my experimental refactoring branches!)
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.