mixxxdj / mixxx

Mixxx is Free DJ software that gives you everything you need to perform live mixes.
http://mixxx.org
Other
4.5k stars 1.28k forks source link

Build error with TagLib 2.0 #12708

Open napaalm opened 9 months ago

napaalm commented 9 months ago

Bug Description

TagLib was recently updated to 2.0 and now I can't build mixxx anymore:

mixxx/src/track/taglib/trackmetadata_ape.cpp: In function ‘bool mixxx::taglib::ape::importCoverImageFromTag(QImage*, const TagLib::APE::Tag&)’:
mixxx/src/track/taglib/trackmetadata_ape.cpp:62:56: error: ‘const class TagLib::APE::Item’ has no member named ‘value’; did you mean ‘values’?
   62 |                 tag.itemListMap()["COVER ART (FRONT)"].value();
      |                                                        ^~~~~
      |                                                        values

Version

2.4-beta

OS

Arch Linux

napaalm commented 9 months ago

https://taglib.org/

TagLib 2.0 Release - Jan 24, 2024

    New major version, binary incompatible, but source-compatible with the latest 1.x release if no deprecated features are used.

    Removed deprecated functions:

        APE::Item::value(): Use binaryData()
daschuer commented 9 months ago

I there a way to use the old taglib Arch in parallel? We must not use Taglib 2.0 right away, because it will mess up your library/file metadata when double tags are used.

daschuer commented 9 months ago

Uh, it looks both packages are conflicting. I wonder how many other packages now fail to build.

daschuer commented 9 months ago

Here is a related FreeBSD bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276677

daschuer commented 9 months ago

Here we see the commits the Taglib author has contributed to Kid3: https://invent.kde.org/multimedia/kid3/-/commits/98524900bda80ef2e0583d722811277a4a6185f4/src/plugins/taglibmetadata?ref_type=undefined

daschuer commented 9 months ago

According to taglib 2.0 is source compatible to 1.x as long as no deprecated functions are used

In VLC they consider this a lie: https://code.videolan.org/videolan/vlc/-/issues/28502

daschuer commented 9 months ago

Taglib has corrected it's original statement: https://github.com/taglib/taglib/commit/0d2c31b10210cbf94a7bd3b86f4e89e111e1add0

New major version, binary incompatible, but mostly source-compatible with the latest 1.x release if no deprecated features are used. Simple applications should build without changes, more complex applications (e.g. extending classes of TagLib) will have to be adapted.

mxmilkiib commented 8 months ago

I haven't been building Mixxx for several days. I've come back to that again, but it's erroring.

Maybe this is because taglib1 has moved from being an AUR entry to an officlal extras/ package and the PKGBUILD was altered.

Trying to do so from ~/src gives me

CMake Error at CMakeLists.txt:3163 (message):
  Installed Taglib 2.0 is not supported.  Use Version >= 1.11 and < 2.0 and
  its development headers.

and from ~/pkg gives me

CMake Error in CMakeLists.txt:
  Imported target "TagLib::TagLib" includes non-existent path

    "/usr/lib/taglib1/include/taglib"

  in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:

  * The path was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and references files it does not
  provide.

CMake Error in CMakeLists.txt:
  Imported target "TagLib::TagLib" includes non-existent path

    "/usr/lib/taglib1/include/taglib"

  in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:

  * The path was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and references files it does not
  provide.
daschuer commented 8 months ago

Ah I see you may try to configure with PKG_CONFIG_PATH="/usr/lib/taglib1/pkgconfig" cmake .. ...

mxmilkiib commented 8 months ago

Ah. Whoops. I realise /usr/lib/taglib1/include/taglib is non-existant. There's just /usr/lib/taglib1.

So it's very much most likey a change in the move from AUR to repos.

Looking further, I see /usr/include/taglib1/taglib/ has all the headers.