Commit Graph

163 Commits

Author SHA1 Message Date
Dmitry Vedenko 4975b512f7 Use wxWidgets with fixed Win64 accessibility 2021-06-17 10:46:04 -04:00
Peter Jonas de2213ea2c Generate AppImage on GitHub Actions
Fixes #695. Supersedes #172. See https://appimage.org/.
2021-06-16 11:00:16 -04:00
Dmitry Vedenko c8e0bf343d Fixes the libmad disabled by mistake 2021-06-16 06:03:55 -07:00
Dmitry Vedenko 6da25e1646 Add targets for packaging DMG and InnoSetup
Fixes configure.sh

Fixes Windows code signing

Fixes an issue with conan cache on windows

Fixes build manual script

Fixes build manual

Remove unused props

Use long options

Yet another manual fix

Fixes iss
2021-06-16 05:07:31 -07:00
Vitaly Sverchinsky e8b186a9b4 Crashreporting 2021-06-15 22:44:07 +03:00
Peter Jonas 4b5c95d7fe Move GitHub Actions CI scripts into separate files
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
2021-06-10 10:09:49 -07:00
Paul Licameli 4a2fc192e6 Bug2799: mod-script-pipe fails to load on Mac...
... This broke at commit 938bbeb with changes in CMake scripts.

This can be fixed by invoking CopyLibs.cmake for modules too.

This affects only the macOS build.
2021-06-09 15:06:21 -04:00
Paul Licameli 7346fdac69 Re-fix long Mac builds with many libraries, faster & more simply...
... Fix redundant "sh -c".  Combine many install_name_tool commands into one for
each library or executable.  Examine each with otool once only.
2021-06-09 15:06:21 -04:00
Paul Licameli cf993fcded Revert "CopyLibs.cmake, for macOS: visit unique EDGES (not nodes)..."
This reverts commit e785c77226.
2021-06-09 15:06:21 -04:00
Paul Licameli e2fda7df32 Better node names for 3p libraries in picture of dependencies 2021-06-09 15:06:21 -04:00
Dmitry Vedenko cb1f8b6c34 Adds lib-sentry-report 2021-06-08 08:08:26 -07:00
Dmitry Vedenko 185d1d5ecc Adds audacity_header_only_library 2021-06-08 08:08:26 -07:00
Paul Licameli e785c77226 CopyLibs.cmake, for macOS: visit unique EDGES (not nodes)...
... 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.
2021-06-06 22:45:28 -04:00
Paul Licameli e83c66ee50 Improve CopyLibs.cmake fix from 7d30537 for nonrecursive cases...
... 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!)
2021-06-05 22:07:37 -04:00
Paul Licameli 7d30537374 Fix build time infinite recursion in CopyLibs.cmake 2021-06-03 09:40:48 -04:00
Dmitry Vedenko 37fba65d1b Adds lib-uuid
Adds a small library to generate UUID values. This library will be used in Sentry error reporting
Replace constructor cast with static_cast


Removes a noexcept sneaked in


Adds documentation and some code review fixes


Fixes doxygen
2021-06-02 07:41:54 -07:00
Dmitry Vedenko 1cd4bef4db Adds a workaround for Conan issue 8025, affecting libjpeg-turbo compilation on AppleSilicon Macs 2021-05-31 14:03:24 +03:00
Dmitry Vedenko 7c1f843322 Use libjpeg-turbo as a wxWidgets dependecy
Turns out, libjpeg is downloaded over plain HTTP from the official IJG site. It is now replaced with libjpeg-turbo.
2021-05-31 02:08:17 -07:00
Dmitry Vedenko 68bd49da87 Copy the library to the desired location after the build 2021-05-28 04:04:40 -07:00
Dmitry Vedenko 6e11fdaf14 Use expat version that builds with autotools 2021-05-26 09:45:20 -07:00
Dmitry Vedenko 4dc4e86863 Make lib-network-manager an opt-in library 2021-05-26 07:41:47 -07:00
Paul Licameli fdd20452ea macOS builds: otool -D should not give absolute path of libraries 2021-05-26 06:18:42 -07:00
Dmitry Vedenko 4e6a1a81a9 Updates the way shared libraries are hadled
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
2021-05-26 12:46:45 +03:00
Dmitry Vedenko 733cf89cff Adds curl to the list of system libraries
Fixes macOS build with system libcurl
2021-05-26 12:46:45 +03:00
Dmitry Vedenko 45e4627ac9 Fixes PKG_CONFIG spelling 2021-05-26 12:46:45 +03:00
Dmitry Vedenko 851d8b2272 Add wxwidgets::base to a list of base modules 2021-05-26 12:46:45 +03:00
Dmitry Vedenko 3a04034d84
Use Audacity patched versions of libmad and libid3tag (#928)
* Use Audacity versions of libmad and libid3tag

* Properly setup zlib in libid3tag

* Fixes the wxBase target for system wxWidgets
2021-05-24 23:11:05 +03:00
Dmitry Vedenko ad7faee418 Add wxBase, so the master will build fine 2021-05-24 06:53:53 -07:00
Dmitry Vedenko f66381b967 Removes previously vendored libraries from the source tree 2021-05-24 06:53:53 -07:00
Dmitry Vedenko 8aca9d02de Add the first Conan-based dependecies
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
2021-05-24 06:53:53 -07:00
Dmitry Vedenko 9c8185545d Adds an environment to check, how well Linux builds with system packages
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`.
2021-05-24 06:53:53 -07:00
Paul Licameli 26217c22f1 Distinguish nodes in modules.dot.svg that depend directly on wxBase 2021-05-21 22:09:57 -04:00
Paul Licameli 1f71ef4300 New interface library target wxBase restricts view of wxWidgets...
... It will be used as a target link library of some lower level Audacity
libraries, to be separated from the executable.

These libraries will have link time dependency only on the wxBase subset of
non-monolithic wxWidgets builds.

More, they are restricted to use only a proper subset of wxBase functionality:
they are prevented, at compile time, not only from using any graphical user
interface, but also from using the main event loop or global application object
-- though these things are also in wxBase.

They may still use things like strings, files, threads, atomics, and other
utilities that may have modern C++ standard library equivalents.

It would be preferable to use those, but it is not a priority to make those
rewrites.
2021-05-21 21:51:58 -04:00
Paul Licameli 5a362c308c Correct the placement of extension modules in the Windows build tree 2021-05-18 20:51:55 -04:00
Paul Licameli 42bddca151 Fix transitive dependencies via interface libaries 2021-05-18 00:21:48 -04:00
Paul Licameli 7cf78c15dc non-Win, non-Debug builds: strip module file symbols to save space...
... This only strips the symbols that do not have external linkage
2021-05-18 00:16:44 -04:00
Paul Licameli dfbf3d25c1 Support for our own libraries, distinct from modules 2021-05-18 00:12:44 -04:00
Paul Licameli b52192c4c4 Fix builds with precompiled headers, which broke at 794f4e5 2021-05-12 13:02:29 -05:00
Paul Licameli d51f505cd9 Define Audacity version constants in CMake not Audacity.h 2021-05-10 00:05:23 -05:00
Paul Licameli 794f4e5877 Inclusion of the correct config header on command line using CMake 2021-05-10 00:05:23 -05:00
Paul Licameli 229b82a502 Move definitions of safenew, PROHIBITED, _DEBUG into CMake 2021-05-10 00:05:23 -05:00
Paul Licameli 29a657bc77 CMake function addlib can be called multiply for the same library 2021-05-06 09:15:22 -05:00
Paul Licameli ec3d2424a5 addlib supplies absolute path to add_subdirectory...
... 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.
2021-05-06 09:15:22 -05:00
Paul Licameli dd1ce8dd63 Move definition of CMake function addlib, unchanged 2021-05-06 09:15:22 -05:00
Paul Licameli 9fb32528d6 Generate *_API compiler definitions for 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.
2021-05-06 09:15:22 -05:00
Paul Licameli 5844b2090a Generate a picture of module dependencies at configure time 2021-05-06 09:15:22 -05:00
Paul Licameli 1f6efefdf6 Fix math constants on Windows, such as M_PI, and min and max 2021-05-06 09:15:22 -05:00
Paul Licameli fe8659f435 Separate CMake function for pervasive C++ flags, reuse it in modules 2021-05-06 09:15:22 -05:00
Paul Licameli 3943d1479f Each module defines an interface target that other modules may use...
... Solving some problems of linking modules dependent on other modules in
Unix
2021-05-06 09:15:22 -05:00
Paul Licameli ee344aa6c9 Modules expose transitive link dependencies...
... which will simplify CMakeLists when modules depend on other modules
2021-05-06 09:15:22 -05:00