tenacityteam / tenacity-legacy

THIS REPO IS NOT MAINTAINED ANYMORE. Please see https://codeberg.org/tenacityteam/tenacity for Tenacity, which is maintained.
https://tenacityaudio.org
Other
6.76k stars 256 forks source link

Failure compiling src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp on Ubuntu Linux 20.04 LTS (/usr/include/portSMF/allegro.h:632:9: error: ‘memcpy’ was not declared in this scope) #499

Closed juozaspo closed 3 years ago

juozaspo commented 3 years ago

Guidelines

Version/Commit hash

13914c5125da4eab6f8ca68bddd5fdab71e30683

Describe the bug.

Trying to build tenacity on Ubuntu Linux 20.04 LTS fails with error while compiling src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp:

[664/747] Building CXX object src/CMakeFiles/Tenacity.dir/tracks/playabletrack/notetrack/ui/StretchHandle.cpp.o
FAILED: src/CMakeFiles/Tenacity.dir/tracks/playabletrack/notetrack/ui/StretchHandle.cpp.o 
/usr/bin/ccache /usr/bin/c++  -DAUDACITY_DLL_API="" -DBUILDING_AUDACITY -DCMAKE -DEXPERIMENTAL_DRAGGABLE_PLAY_HEAD -DEXPERIMENTAL_EASY_CHANGE_KEY_BINDINGS -DEXPERIMENTAL_EFFECT_MANAGEMENT -DEXPERIMENTAL_FULL_WASAPI -DEXPERIMENTAL_HALF_WAVE -DEXPERIMENTAL_KEY_VIEW -DEXPERIMENTAL_MODULE_PREFS -DEXPERIMENTAL_NOISE_REDUCTION -DEXPERIMENTAL_NOTETRACK_OVERLAY -DEXPERIMENTAL_NYQUIST_SPLIT_CONTROL -DEXPERIMENTAL_PUNCH_AND_ROLL -DEXPERIMENTAL_REALTIME_AUDACITY_EFFECTS -DEXPERIMENTAL_SCIENCE_FILTERS -DEXPERIMENTAL_SCROLLING_LIMITS -DEXPERIMENTAL_SCRUBBING_SCROLL_WHEEL -DEXPERIMENTAL_SCRUBBING_SUPPORT -DEXPERIMENTAL_SPECTRAL_EDITING -DEXPERIMENTAL_SYNC_LOCK -DEXPERIMENTAL_THEMING -DEXPERIMENTAL_TWO_TONE_TIME_RULER -DEXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS -DEXPERIMENTAL_ZOOM_TOGGLE_BUTTON -DHAVE_LRINT -DHAVE_LRINTF -DHAVE_MLOCK -DPORTSMF_CAPITAL -DSTRINGS_API="" -DSTRING_UTILS_API="" -DTenacity_EXPORTS -DUTILITY_API="" -DWXUSINGDLL -D_FILE_OFFSET_BITS=64 -D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1 -D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING=1 -D__WXGTK__ -Isrc/private -I../include -I../src -I../lib-src/libnyquist/. -I../libraries/lib-string-utils -I../libraries/lib-strings -I../libraries/lib-utility -isystem /usr/lib/x86_64-linux-gnu/wx/include/gtk3-unicode-3.1-unofficial -isystem /usr/include/wx-3.1-unofficial -isystem /usr/include/lilv-0 -isystem /usr/include/suil-0 -isystem /usr/include/gtk-3.0 -isystem /usr/include/at-spi2-atk/2.0 -isystem /usr/include/at-spi-2.0 -isystem /usr/include/dbus-1.0 -isystem /usr/lib/x86_64-linux-gnu/dbus-1.0/include -isystem /usr/include/gio-unix-2.0 -isystem /usr/include/cairo -isystem /usr/include/pango-1.0 -isystem /usr/include/fribidi -isystem /usr/include/harfbuzz -isystem /usr/include/atk-1.0 -isystem /usr/include/pixman-1 -isystem /usr/include/uuid -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/gdk-pixbuf-2.0 -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -g   -include /home/juozas/tenacity/build/src/private/configunix.h -DAUDACITY_VERSION=2 -DAUDACITY_RELEASE=4 -DAUDACITY_REVISION=1 -DAUDACITY_MODLEVEL=0 -DAUDACITY_VERSION_STRING=L\"Audacity-2.4.1-1822-g13914c5\" -DAUDACITY_FILE_VERSION=L\"2,4,1,0\" -DPROHIBITED==delete -Dsafenew=new -DWXINTL_NO_GETTEXT_MACRO -D_DEBUG=1 -DIS_ALPHA -DUSE_ALPHA_MANUAL -pthread -std=gnu++17 -MD -MT src/CMakeFiles/Tenacity.dir/tracks/playabletrack/notetrack/ui/StretchHandle.cpp.o -MF src/CMakeFiles/Tenacity.dir/tracks/playabletrack/notetrack/ui/StretchHandle.cpp.o.d -o src/CMakeFiles/Tenacity.dir/tracks/playabletrack/notetrack/ui/StretchHandle.cpp.o -c ../src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp
In file included from ../include/../lib-src/header-substitutes/allegro.h:2,
                 from ../src/tracks/playabletrack/notetrack/ui/StretchHandle.cpp:14:
/usr/include/portSMF/allegro.h: In member function ‘void* Serial_write_buffer::to_heap(long int*)’:
/usr/include/portSMF/allegro.h:632:9: error: ‘memcpy’ was not declared in this scope
  632 |         memcpy(newbuf, buffer, *len);
      |         ^~~~~~
/usr/include/portSMF/allegro.h:53:1: note: ‘memcpy’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
   52 | #include <istream>
  +++ |+#include <cstring>
   53 | #include <ostream>

Expected behavior

No error while compiling above file.

OS

Ubuntu 20.04 LTS

Additional context

All dependencies shown in BUILDING.md were installed, excluding libjack-dev as it would try to remove libjack-jackd2-dev and other packages related to as it that were used by other software, also removing any software depending on it. ~A wxWidgets 3.1 Linux build made by CodeLite team were installed from their repository provided for Ubuntu distributions, with a link provided by the wxWidgets download page.~ The builds coming from this repository were known to not work, as shown in comments, so later I've built it from source and installed to default location. ~Also after I've installed all wxWidget packages cmake still would not detect wxWidgets unless /usr/bin/egrep were symlinked to /bin/egrep and /usr/bin/grep to /bin/grep, probably caused by a some obscure bug.~ This bug was present in the package coming from the mentioned repository. After removing the extra symlinks cmake would detect correct location of egrep w/o need to add the symlink and after reinstalling wxWidgets the compilation should work. Also I could not find any newer version of libportsmf-dev anywhere in ubuntu PPAs, doubt there's any updated version, even Debian's version is old/out of date, also If there's a workaround for a bug in this package I'd like to know a solution. Also deleting .ccache from home directory wouldn't help at all. Still fails when compiling the above file. Full build log with error: failure.txt

This issue is not a duplicate

Be-ing commented 3 years ago

The portsmf package in Ubuntu is too old. You need to uninstall it to build Tenacity or explicitly specify -D MIDI=OFF to the CMake configure step. I see that it is included in the package list in BUILDING.md by mistake. Would you like to fix that?

Be-ing commented 3 years ago

If you want to enable MIDI on Ubuntu, for now you need to build PortSMF yourself.

Be-ing commented 3 years ago

A wxWidgets 3.1 Linux build made by CodeLite team were installed from their repository provided for Ubuntu distributions, with a link provided by the wxWidgets download page.

I tested this but it does not work which is why it is not mentioned in BUILDING.md. I recommend uninstalling that package, removing the PPA, and building wxWidgets 3.1.5 from source. I suppose we could explicitly specify in BUILDING.md to not use that PPA. Would you like to add that?

juozaspo commented 3 years ago

The portsmf package in Ubuntu is too old. You need to uninstall it to build Tenacity or explicitly specify -D MIDI=OFF to the CMake configure step. I see that it is included in the package list in BUILDING.md by mistake. Would you like to fix that?

I can't simply remove portsmf library as it is used by older Audacity version supplied by ubuntu. Though I might build a separate copy and point cmake to that location and see if it works.

juozaspo commented 3 years ago

A wxWidgets 3.1 Linux build made by CodeLite team were installed from their repository provided for Ubuntu distributions, with a link provided by the wxWidgets download page.

I tested this but it does not work which is why it is not mentioned in BUILDING.md. I recommend uninstalling that package, removing the PPA, and building wxWidgets 3.1.5 from source. I suppose we could explicitly specify in BUILDING.md to not use that PPA. Would you like to add that?

I'll uninstall the version coming from the repository also removing the repository then I'll try to build it from source and see if it works.

Be-ing commented 3 years ago

I can't simply remove portsmf library as it is used by older Audacity version supplied by ubuntu. Though I might build a separate copy and point cmake to that location and see if it works.

That could work. If you don't use the MIDI features, the easy way would be to specify -D MIDI=OFF to CMake.

juozaspo commented 3 years ago

For now I've built PortSMF and will see if compiles (first I'll have to build and reinstall wxWidgets). Though I'll have to remove .ccache first before doing that. The cmake command is as follows: cmake -G Ninja -S . -B build -DPortSMF_LIBRARY=/home/juozas/tenacitylibs/lib/libportSMF.so -DPortSMF_INCLUDE_DIR=/home/juozas/tenacitylibs/include/portsmf I don't install the portsmf globally as I only want to test it locally w/o overwriting already installed copy and causing further conflicts or other bugs.

Be-ing commented 3 years ago

You shouldn't need to specify the absolute paths for the library and include directory individually. -D CMAKE_PREFIX_PATH=/home/juozas/tenacitylibs should be sufficient.

Also, ccache is really good at not messing up your builds. I have never once had a problem fixed by deleting ~/.ccache.

juozaspo commented 3 years ago

Fails building with libsbsms-dev (2.0.2-2build1) installed:

[549/747] Building CXX object src/CMakeFiles/Tenacity.dir/effects/SBSMSEffect.cpp.o
FAILED: src/CMakeFiles/Tenacity.dir/effects/SBSMSEffect.cpp.o 
/usr/bin/ccache /usr/bin/c++  -DAUDACITY_DLL_API="" -DBUILDING_AUDACITY -DCMAKE -DEXPERIMENTAL_DRAGGABLE_PLAY_HEAD -DEXPERIMENTAL_EASY_CHANGE_KEY_BINDINGS -DEXPERIMENTAL_EFFECT_MANAGEMENT -DEXPERIMENTAL_FULL_WASAPI -DEXPERIMENTAL_HALF_WAVE -DEXPERIMENTAL_KEY_VIEW -DEXPERIMENTAL_MODULE_PREFS -DEXPERIMENTAL_NOISE_REDUCTION -DEXPERIMENTAL_NOTETRACK_OVERLAY -DEXPERIMENTAL_NYQUIST_SPLIT_CONTROL -DEXPERIMENTAL_PUNCH_AND_ROLL -DEXPERIMENTAL_REALTIME_AUDACITY_EFFECTS -DEXPERIMENTAL_SCIENCE_FILTERS -DEXPERIMENTAL_SCROLLING_LIMITS -DEXPERIMENTAL_SCRUBBING_SCROLL_WHEEL -DEXPERIMENTAL_SCRUBBING_SUPPORT -DEXPERIMENTAL_SPECTRAL_EDITING -DEXPERIMENTAL_SYNC_LOCK -DEXPERIMENTAL_THEMING -DEXPERIMENTAL_TWO_TONE_TIME_RULER -DEXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS -DEXPERIMENTAL_ZOOM_TOGGLE_BUTTON -DHAVE_LRINT -DHAVE_LRINTF -DHAVE_MLOCK -DSTRINGS_API="" -DSTRING_UTILS_API="" -DTenacity_EXPORTS -DUTILITY_API="" -DWXUSINGDLL -D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1 -D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING=1 -D__WXGTK3__ -D__WXGTK__ -Isrc/private -I../include -I../src -I../lib-src/libnyquist/. -I../libraries/lib-string-utils -I../libraries/lib-strings -I../libraries/lib-utility -isystem /usr/local/lib/wx/include/gtk3-unicode-3.1 -isystem /usr/local/include/wx-3.1 -isystem /usr/include/lilv-0 -isystem /usr/include/suil-0 -isystem /home/juozas/tenacitylibs/include -isystem /usr/include/gtk-3.0 -isystem /usr/include/at-spi2-atk/2.0 -isystem /usr/include/at-spi-2.0 -isystem /usr/include/dbus-1.0 -isystem /usr/lib/x86_64-linux-gnu/dbus-1.0/include -isystem /usr/include/gio-unix-2.0 -isystem /usr/include/cairo -isystem /usr/include/pango-1.0 -isystem /usr/include/fribidi -isystem /usr/include/harfbuzz -isystem /usr/include/atk-1.0 -isystem /usr/include/pixman-1 -isystem /usr/include/uuid -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/gdk-pixbuf-2.0 -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -g   -include /home/juozas/tenacity/build/src/private/configunix.h -DAUDACITY_VERSION=2 -DAUDACITY_RELEASE=4 -DAUDACITY_REVISION=1 -DAUDACITY_MODLEVEL=0 -DAUDACITY_VERSION_STRING=L\"Audacity-2.4.1-1822-g13914c5\" -DAUDACITY_FILE_VERSION=L\"2,4,1,0\" -DPROHIBITED==delete -Dsafenew=new -DWXINTL_NO_GETTEXT_MACRO -D_DEBUG=1 -DIS_ALPHA -DUSE_ALPHA_MANUAL -pthread -std=gnu++17 -MD -MT src/CMakeFiles/Tenacity.dir/effects/SBSMSEffect.cpp.o -MF src/CMakeFiles/Tenacity.dir/effects/SBSMSEffect.cpp.o.d -o src/CMakeFiles/Tenacity.dir/effects/SBSMSEffect.cpp.o -c ../src/effects/SBSMSEffect.cpp
../src/effects/SBSMSEffect.cpp: In static member function ‘static double EffectSBSMS::getInvertedStretchedTime(double, double, _sbsms_::SlideType, double)’:
../src/effects/SBSMSEffect.cpp:203:17: error: ‘class _sbsms_::Slide’ has no member named ‘getInverseStretchedTime’; did you mean ‘getStretchedTime’?
  203 |    return slide.getInverseStretchedTime(outputTime);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
      |                 getStretchedTime

Probably broken/outdated. Will remove that then try again.

juozaspo commented 3 years ago

Finally was able to build using forked PortSMP and local build of wxWidgets, excluding installation of libsbsms, as it's broken. The program currently runs fine. There're some ui bugs but I might create a separate issue for them later. Also there's message shown in terminal upon hovering over some menu items shown in open menus, probably related to gtk or something similar as google shows many results with similar errors in different software.

*** BUG ***
In pixman_region32_init_rect: Invalid rectangle passed
Set a breakpoint on '_pixman_log_error' to debug
Be-ing commented 3 years ago

Great. Could you open a pull request to remove portsmf from the Ubuntu package list in BUILDING.md?

Be-ing commented 3 years ago

I just sent an email to the Debian multimedia packagers list about updating Tenacity's dependencies, so hopefully someone will take care of the broken portsmf and libsbsms packages.

juozaspo commented 3 years ago

Will make a new pr soon, first I'll have to make a fork and make modifications and save them to new branch.