View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0010184 | ardour | other | public | 2026-02-14 13:48 | 2026-02-15 16:46 |
| Reporter | u1f992 | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | new | Resolution | open | ||
| Platform | Ubuntu | OS | Linux | OS Version | (any) |
| Product Version | 9.0 | ||||
| Summary | 0010184: Modified taglib source not found | ||||
| Description | The nightly build dependencies page (https://nightly.ardour.org/list.php#build_deps) links to `http://taglib.github.io/releases/taglib-1.9.1.tar.gz` as the taglib source. I built taglib from this source, but the resulting `libtag.so.1` does not match the one in the Ardour 9.0 Linux x86_64 installer. The installer version contains symbols that are not present in a 1.9.1 build, for example: - `TagLib::String::MyPrivateString` (upstream 1.9.1 uses `StringPrivate`) - `TagLib::ListPrivateBase` (only found on the taglib `experimental` branch, not in any release) - `vsnprintf@GLIBC_2.2.5` (not imported by a 1.9.1 build) The installer binary has 2,876 dynamic symbols vs 2,821 from my 1.9.1 build (+55 symbols). I was not able to find a matching source: `MyPrivateString` does not appear anywhere in the taglib git history, and the combination of `ListPrivateBase` with `RefCounterOld` does not correspond to any single commit in the repository. Is the modified taglib source or patch available somewhere? I could not find it on the nightly page, in `ardour.org/files/deps/`, or in `tools/misc-patches/` on the `2.0-ongoing` branch. | ||||
| Steps To Reproduce | 1. Download the Ardour 9.0 Linux x86_64 installer. 2. Extract `libtag.so.1` from the bundle. 3. Run: `nm -D libtag.so.1 | c++filt | grep MyPrivateString`. The symbol is present. 4. Build taglib 1.9.1 from `http://taglib.github.io/releases/taglib-1.9.1.tar.gz`. 5. Run the same command on the self-built `libtag.so.1`. The symbol is absent. | ||||
| Additional Information | Taglib is dual-licensed under LGPL 2.1 and MPL 1.1. | ||||
| Tags | No tags attached. | ||||
|
|
I should clarify that my mention of `tools/misc-patches/` on the `2.0-ongoing` branch was because I conflated it with issue 0010185, which I filed around the same time. Regardless, I have since searched the entire git history of the Ardour repository (all branches and all tags) and found no taglib patch file and no modified taglib source. The `libs/taglib/` directory that existed in the tree from 2008 to 2014 (removed in commit 0a2a6aaabb) contained unmodified upstream source (`StringPrivate`, not `MyPrivateString`). I also considered whether the symbol differences could be explained purely by build configuration, without source modification, for example by passing `-DStringPrivate=MyPrivateString` to the compiler. This successfully renames the class in the symbol table, and it compiles cleanly. However, this alone cannot account for the full set of differences. Specifically, the bundled `libtag.so.1` contains vtables and RTTI typeinfo for `ListPrivate<T*>` template instantiations (e.g., `List<ID3v2::Frame*>::ListPrivate`). In the upstream 1.9.1 source, the inheritance chain is `ListPrivate<T*>` -> `ListPrivateBase` -> `RefCounterOld`, and none of these classes have virtual functions. `RefCounterOld`, unlike `RefCounter`, lacks a virtual destructor. Without virtual functions, the compiler will not emit vtables or polymorphic typeinfo for these classes, regardless of optimization level or visibility settings. This means the bundled library reflects source-level modifications beyond what any combination of `-D` flags or compiler options can reproduce from the upstream 1.9.1 tarball linked on the nightly builds page. |