Commit Graph

13163 Commits

Author SHA1 Message Date
Dmitry Vedenko 66a85bf97c Update the build documentation 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 576b7e66d2 Update min-macos to 10.9
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++
```
2021-05-24 06:53:53 -07:00
Dmitry Vedenko 4fec5287ea GitHub workflow updated 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 90903d237a Introducing CMake target wxBase, for restricted uses of wxWidgets 2021-05-21 22:11:03 -04: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 48cacdd961 More AUDACITY_DLL_API linkage specifications 2021-05-21 21:43:59 -04:00
Paul Licameli 945d3d1a8f Changes to keep locale/update_po_files.sh running correctly 2021-05-21 21:42:29 -04:00
Paul Licameli 91355a2f8c Scan for i18n strings in all modules/mod-*, libraries/lib-* folders 2021-05-21 21:42:10 -04:00
Paul Licameli cafed8b7f3 Fix sed commands in update_po_files.sh for macOS ...
... BSD version of sed doesn't use all the same options.

So the script was misinterpreting .po file names as sed commands and not doing
what was intended, and set -o errexit caused early abort of the script.
2021-05-21 21:29:28 -04:00
Paul Licameli 010fe7bff2 Fix complaint from xgettext about empty string 2021-05-21 20:41:27 -04:00
James Crook 7605763fa0 Bug 2784 - Filter Curve EQ; Height increase.
Comment in closing of this bug requested an increase in height.
No reason not to, so height increased too.
2021-05-20 17:52:47 +01:00
James Crook df91d14c9e Bug 2793 - AUP3 projects fail to compact if project's path contains a single-quote 2021-05-20 11:27:21 +01:00
Grzegorz Pruchniakowski 959d1b8dc2 Update pl.po from Transifex
Update pl.po from Transifex
Changes:
All 'at least' translated as 'przynajmniej'.
All 'selection' translated as 'zaznaczenie'.
And a few small fixes.
END of fixes 😁

Greetings,
Gootector
2021-05-20 08:11:17 +01:00
James Crook 2b10309fb3 Bug 2784 - Enh: Filter Curve EQ does not remember window size
Per comment 1 in that Bugzilla bug report, this
change makes the default/initial/minimum size larger.
2021-05-19 13:16:42 +01:00
Paul Licameli 8154dbed2e
Merge pull request #905 from Paul-Licameli/yet-more-module-preliminaries
Yet more module preliminaries
2021-05-19 06:30:52 -04:00
Paul Licameli 906bd94826 Linux build doesn't need environment variable to find the modules 2021-05-18 20:51:55 -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 7fd53e8778 Auto-enable list of regularly shipped modules (except script-pipe) 2021-05-18 20:51:55 -04:00
Paul Licameli 592518c157 modules/CMakeLists.txt iterates topologically sorted list of modules 2021-05-18 20:51:55 -04:00
Grzegorz Pruchniakowski 97c4a3835d Update pl.po from Transifex
Update pl.po from Transifex
2 fixes.

Greetings,
Gootector
2021-05-18 22:45:42 +01:00
Paul Licameli bacf06944a Bug2792: Audacity fails to launch...
... bug was introduced at f1de843
2021-05-18 17:11:46 -04:00
Paul Licameli b1f05e5747
Merge pull request #903 from Paul-Licameli/more-module-preliminaries
More module preliminaries
2021-05-18 09:24:05 -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
James Crook ea04eef7e4 Fix Windows button style on Mac toolbar.
Removing audacity.h also removed #define USE_AQUA_THEME
2021-05-17 18:56:03 +01:00
Paul Licameli 77f8e63a5b
Merge pull request #895 from Paul-Licameli/settings-objects-and-example-uses
Settings objects and example uses
2021-05-17 08:46:54 -04:00
Paul Licameli f1de843246 Use Settings for default sample rate and format...
... The first is an example of a Setting with a computed default value.

Also making a new file to hold them, separate from the GUI that changes them
in QualityPrefs; fewer things depend on QualityPrefs
2021-05-17 08:46:08 -04:00
Paul Licameli 8c04ed3990 Settings objects used in AudioIOBase...
... Giving many examples of use of Settings objects.  Many other rewrites like
this should be made to eliminate as many direct uses of gPrefs as we can.

Don't rely on long distance coincidences of literals for paths or defaults.

For each of several paths like /AudioIO/Host, all uses of that path are replaced
with use of a global Settings object defined in one place, in AudioIOBase.  The
object also gives the benefit of caching the last-read or written value.

Other users of those preferences must then include "AudioIOBase.h" to make the
dependency explicit at compile time.

It should be checked that no other mentions of those paths remain in the source,
and that there was no unintended change in default values.

This also inverts dependency of AudioIOBase on RecordingPrefs, which is GUI for
changing some of these settings.
2021-05-17 08:46:08 -04:00
Paul Licameli 5fef82dccf Define Setting classes, bundling config path with settings value...
... the intention being, that no string literal for a path, or its default
value, shall ever occur twice in the code, relying on long-distance coincidence
of literal values.  Instead, a named Setting object is constructed once, then
read and written.

For now, the Tie... functions in ShuttleGuiBase will take references to
implicitly constructed temporary Setting objects.  But all should later be
made static objects, and the constructors made explicit.
2021-05-17 08:46:08 -04:00
Paul Licameli b6c7b744f8 Translate "No" into Russian 2021-05-17 12:52:07 +03:00
Thomas De Rocker dad9823ed2 Update label-sounds.ny 2021-05-16 16:03:17 +01:00
Thomas De Rocker 29c7133dd9 Update nyquist-plug-in-installer.ny
Fix newlines from \n to ~%
2021-05-16 16:03:17 +01:00
Paul Licameli ff07130ac4 Bug2763: Certain Scriptable commands should push Undo stack...
... Exhaustive examination convinces me that Set Labels and Set Envelope are
the only two needing this.  (The special problems of Open Project merited a
different bug number 2764.)
2021-05-16 07:08:44 -04:00
Paul Licameli b5958ff453
Merge pull request #890 from Paul-Licameli/module-manager-changes
Module manager changes
2021-05-16 07:06:51 -04:00
Paul Licameli dcdddcb7f2 ModuleManager::mLibs never becomes non-empty. Remove it. 2021-05-16 07:03:12 -04:00
Paul Licameli bd6fb75886 moduleMain functions were never called but with nullptr; so simplify 2021-05-16 07:03:12 -04:00
Paul Licameli 6242be0a8e ModuleInterface.h needn't distinguish built-in from external usage...
... All is set up so that plug-in providers can be modules that register
their instance-creating function pointers directly with RegisterProvider; no
special symbol name needs to be exported.

That is, they now just need to export ModuleDispatch and GetVersionString, just
like other modules for other purposes.

Duplication of logic from ModuleManager::InitializeBuiltins() is removed.

No examples yet in the previous commits, but it does work in my misc-modules
branch.
2021-05-16 07:03:12 -04:00
Paul Licameli a4c3840861 Initialize ModuleManager before PluginManager...
... So that the plugin providers might themselves become modules, and so that
putting built-in commands and effects into modules will work
2021-05-16 07:03:12 -04:00
Paul Licameli 861470dd77 Complementary un-registration of providers; change function name 2021-05-16 07:03:12 -04:00
Paul Licameli 64bbc31c54 Remove macro making extern declaration of RegisterBuiltinModule...
... Forcing other places that use RegisterBuiltinModule to be more explicit
about their link dependencies on ModuleManager, with a new #include directive.

Does this make scripts/graph.pl show a new dependency cycle?  Happily no.  But
now we know.
2021-05-16 07:03:12 -04:00
Paul Licameli b92f2579b7 ModuleManager does not depend on ModulePrefs, which contains GUI code 2021-05-16 07:03:12 -04:00
Paul Licameli f5be1de058 Copy ModulePrefs.* into new files ModuleSettings.* which aren't built 2021-05-16 07:03:12 -04:00
Paul Licameli e85ddf4a6d Remove track panel hijack hooks from ModuleManager...
... It ended up not used, and long ago superseded by other TrackPanel
reorganization.

Such things as that (and many more) will be implemented with different
idioms (registries in various higher level code) without requiring changes in
this low level protocol for loading modules.
2021-05-16 07:03:12 -04:00
Paul Licameli bbda68c079 ModuleManager doesn't specially start up mod-script-pipe...
... The standard module dispatch can do that.
2021-05-16 07:03:12 -04:00
Paul Licameli c7834257d8 Crude way to let modules depend on others: multiple load passes...
... Repeatedly pass through the list of modules that need to be opened, so
long as the list is not empty and at least one module loaded in the last pass.

This discovers dependencies of modules on other modules, avoiding the need to
describe the dependencies and make one pass in some topologically sorted order.

Which would be smarter, but would require much other work.
2021-05-16 07:03:12 -04:00