nirenjan / libx52

Saitek X52/X52pro drivers & controller mapping software for Linux
https://nirenjan.github.io/libx52
GNU General Public License v2.0
115 stars 14 forks source link

AUR package FTBFS (failed to build from source) #52

Closed trinitronx closed 4 months ago

trinitronx commented 4 months ago

Describe the bug

The PKGBUILD currently on AUR failed to build with compilation errors in pinelog.c.

To Reproduce Steps to reproduce the behavior:

  1. Run yay -Sy libx52
  2. Attempt to build the package
  3. See error in build log below

Expected behavior Package should build and install successfully.

Screenshots/Logs

Full yay -Sy libx52 Log

``` $ yay -Sy libx52 [sudo] password for exampleuser: :: Synchronizing package databases... manjaro-sway 30.4 KiB 198 KiB/s 00:00 [---------------------------------------] 100% mesa-nonfree is up to date core is up to date extra is up to date multilib is up to date AUR Explicit (1): libx52-0.3.0-1 Sync Make Dependency (2): cmocka-1.1.7-1, doxygen-1.11.0-1 :: PKGBUILD up to date, skipping download: libx52 1 libx52 (Build Files Exist) ==> Packages to cleanBuild? ==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4) ==> A :: Deleting (1/1): /home/exampleuser/.cache/yay/libx52 HEAD is now at 9069ad5 Update PKGBUILD to backup x52d.conf warning: could not open directory 'pkg/': Permission denied Removing libx52_0.3.0.orig.tar.gz Removing pkg/ Removing src/ 1 libx52 (Build Files Exist) ==> Diffs to show? ==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4) ==> A -> libx52: No changes -- skipping :: Proceed with install? [Y/n] y ==> Making package: libx52 0.3.0-2 (Sun 02 Jun 2024 02:22:58 AM MDT) ==> Retrieving sources... -> Downloading libx52_0.3.0.orig.tar.gz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 645k 100 645k 0 0 881k 0 --:--:-- --:--:-- --:--:-- 2172k ==> WARNING: Skipping verification of source file PGP signatures. ==> Validating source files with sha256sums... libx52_0.3.0.orig.tar.gz ... Passed :: Remove make dependencies after install? [y/N] y :: (1/1) Parsing SRCINFO: libx52 :: Synchronizing package databases... manjaro-sway 30.4 KiB 260 KiB/s 00:00 [---------------------------------------] 100% mesa-nonfree is up to date core is up to date extra is up to date multilib is up to date resolving dependencies... looking for conflicting packages... Packages (2) cmocka-1.1.7-1 doxygen-1.11.0-1 Total Installed Size: 18.28 MiB :: Proceed with installation? [Y/n] y (2/2) checking keys in keyring [---------------------------------------] 100% (2/2) checking package integrity [---------------------------------------] 100% (2/2) loading package files [---------------------------------------] 100% (2/2) checking for file conflicts [---------------------------------------] 100% (2/2) checking available disk space [---------------------------------------] 100% :: Processing package changes... (1/2) installing cmocka [---------------------------------------] 100% (2/2) installing doxygen [---------------------------------------] 100% Optional dependencies for doxygen graphviz: for caller/callee graph generation [installed] qt6-base: for doxywizard [installed] texlive-fontsrecommended: for generating LaTeX, Postscript and PDF output texlive-fontutils: for generating LaTeX, Postscript and PDF output texlive-latexextra: for generating LaTeX, Postscript and PDF output texlive-plaingeneric: for generating LaTeX, Postscript and PDF output :: Running post-transaction hooks... (1/2) Arming ConditionNeedsUpdate... (2/2) ==> Making package: libx52 0.3.0-2 (Sun 02 Jun 2024 02:23:04 AM MDT) ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> Retrieving sources... -> Found libx52_0.3.0.orig.tar.gz ==> Validating source files with sha256sums... libx52_0.3.0.orig.tar.gz ... Passed ==> Removing existing $srcdir/ directory... ==> Extracting sources... -> Extracting libx52_0.3.0.orig.tar.gz with bsdtar ==> Sources are ready. ==> Making package: libx52 0.3.0-2 (Sun 02 Jun 2024 02:23:05 AM MDT) ==> Checking runtime dependencies... ==> Checking buildtime dependencies... ==> WARNING: Using existing $srcdir/ tree ==> Starting build()... configure: WARNING: unrecognized options: --disable-maintainer-mode checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a race-free mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether the compiler supports GNU C... yes checking whether gcc accepts -g... yes checking for gcc option to enable C11 features... none needed checking whether gcc understands -c and -o together... yes checking whether make supports the include directive... yes (GNU style) checking dependency style of gcc... gcc3 checking for gawk... (cached) gawk checking for a sed that does not truncate output... /usr/bin/sed checking for ar... ar checking the archiver (ar) interface... ar checking for a Python interpreter with version >= 3.5... python checking for python... /home/exampleuser/.pyenv/shims/python checking for python version... 3.12 checking for python platform... linux checking for GNU default python prefix... ${prefix} checking for GNU default python exec_prefix... ${exec_prefix} checking for python script directory (pythondir)... ${PYTHON_PREFIX}/lib/python3.12/site-packages checking for python extension module directory (pyexecdir)... ${PYTHON_EXEC_PREFIX}/lib/python3.12/site-packages checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking how to print strings... printf checking for a sed that does not truncate output... (cached) /usr/bin/sed checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for fgrep... /usr/bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for a working dd... /usr/bin/dd checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1 checking for mt... no checking if : is a manifest tool... no checking for stdio.h... yes checking for stdlib.h... yes checking for string.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for strings.h... yes checking for sys/stat.h... yes checking for sys/types.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking whether C compiler accepts -Werror=unknown-warning-option... no checking whether C compiler accepts -Wno-suggest-attribute=format... yes checking whether C compiler accepts -fno-strict-aliasing... yes checking whether C compiler accepts -Wnested-externs... yes checking whether C compiler accepts -Wmissing-prototypes... yes checking whether C compiler accepts -Wstrict-prototypes... yes checking whether C compiler accepts -Wdeclaration-after-statement... yes checking whether C compiler accepts -Wimplicit-function-declaration... yes checking whether C compiler accepts -Wold-style-definition... yes checking whether C compiler accepts -Wjump-misses-init... yes checking whether C compiler accepts -Wall... yes checking whether C compiler accepts -Wextra... yes checking whether C compiler accepts -Wundef... yes checking whether C compiler accepts -Wwrite-strings... yes checking whether C compiler accepts -Wpointer-arith... yes checking whether C compiler accepts -Wmissing-declarations... yes checking whether C compiler accepts -Wredundant-decls... yes checking whether C compiler accepts -Wno-unused-parameter... yes checking whether C compiler accepts -Wno-missing-field-initializers... yes checking whether C compiler accepts -Wformat=2... yes checking whether C compiler accepts -Wcast-align... yes checking whether C compiler accepts -Wformat-nonliteral... yes checking whether C compiler accepts -Wformat-security... yes checking whether C compiler accepts -Wsign-compare... yes checking whether C compiler accepts -Wstrict-aliasing... yes checking whether C compiler accepts -Wshadow... yes checking whether C compiler accepts -Winline... yes checking whether C compiler accepts -Wmissing-format-attribute... yes checking whether C compiler accepts -Wmissing-noreturn... yes checking whether C compiler accepts -Winit-self... yes checking whether C compiler accepts -Wredundant-decls... (cached) yes checking whether C compiler accepts -Wmissing-include-dirs... yes checking whether C compiler accepts -Wunused-but-set-variable... yes checking whether C compiler accepts -Warray-bounds... yes checking whether C compiler accepts -Wreturn-type... yes checking whether C compiler accepts -Wswitch-enum... yes checking whether C compiler accepts -Wswitch-default... yes checking whether C compiler accepts -Wduplicated-cond... yes checking whether C compiler accepts -Wduplicated-branches... yes checking whether C compiler accepts -Wlogical-op... yes checking whether C compiler accepts -Wrestrict... yes checking whether C compiler accepts -Wnull-dereference... yes checking whether C compiler accepts -Wdouble-promotion... yes checking whether C compiler accepts -Wno-suggest-attribute=format... yes checking whether C compiler accepts -Wno-error=unused-parameter... yes checking whether C compiler accepts -Wno-error=missing-field-initializers... yes checking whether C compiler accepts -Werror=unknown-warning-option... (cached) no checking whether the linker accepts -Wl,--as-needed... yes checking whether the linker accepts -Wl,--as-needed... yes checking whether the linker accepts -Wl,-z,relro... yes checking whether the linker accepts -Wl,-z,relro... yes checking whether the linker accepts -Wl,-z,now... yes checking whether the linker accepts -Wl,-z,now... yes checking whether the linker accepts -Wl,-z,noexecstack... yes checking whether the linker accepts -Wl,-z,noexecstack... yes checking whether the linker accepts -Wl,--no-as-needed... yes checking whether the linker accepts -Wl,--fatal-warnings... yes checking whether the linker accepts -Wl,-fatal_warnings... no checking whether the linker accepts -Wl,--no-as-needed... yes checking whether the linker accepts -Wl,--fatal-warnings... yes checking for __attribute__((constructor))... yes checking for __attribute__((destructor))... yes checking for __attribute__((format))... yes checking for __attribute__((noreturn))... yes checking for typeof syntax and keyword spelling... typeof configure: Detected host OS is linux-gnu checking whether NLS is requested... yes checking for msgfmt... /usr/bin/msgfmt checking for gmsgfmt... /usr/bin/msgfmt checking for xgettext... /usr/bin/xgettext checking for msgmerge... /usr/bin/msgmerge checking for ld used by gcc... /usr/bin/ld -m elf_x86_64 checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes checking for shared library run path origin... done checking how to run the C preprocessor... gcc -E checking for CFPreferencesCopyAppValue... no checking for CFLocaleCopyCurrent... no checking for GNU gettext in libc... yes checking whether to use NLS... yes checking where the gettext function comes from... libc checking for libusb-1.0... yes checking for systemd... yes checking for libevdev... yes checking for hidapi-hidraw... yes checking whether gcc is Clang... no checking whether pthreads work with "-pthread" and "-lpthread"... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking whether more special flags are required for pthreads... no checking for PTHREAD_PRIO_INHERIT... yes checking final decision IS_MAKE_DISTCHECK (running "make distcheck"?)... no checking for udev... yes checking for doxygen... doxygen checking for cmocka >= 1.1... yes checking for struct tm.tm_gmtoff... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Doxyfile config.status: creating po/Makefile.in config.status: creating Makefile config.status: creating lib/Makefile config.status: creating libx52/libx52.pc config.status: creating libx52io/libx52io.pc config.status: creating libx52util/libx52util.pc config.status: creating lib/pinelog/Makefile config.status: creating lib/inih/Makefile config.status: creating udev/60-saitek-x52-x52pro.rules config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands config.status: executing po-directories commands config.status: creating po/POTFILES config.status: creating po/Makefile configure: WARNING: unrecognized options: --disable-maintainer-mode ../version-info .. >version-info.h make all-recursive make[1]: Entering directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build' Making all in lib make[2]: Entering directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build/lib' Making all in pinelog make[3]: Entering directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build/lib/pinelog' /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../../lib/pinelog -I../.. -D_FORTIFY_SOURCE=3 -O2 -DPINELOG_SHOW_LEVEL=1 -DPINELOG_SHOW_BACKTRACE=1 -DPINELOG_BUFFER_SZ=1024 -fno-strict-aliasing -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes -Wdeclaration-after-statement -Wimplicit-function-declaration -Wold-style-definition -Wjump-misses-init -Wall -Wextra -Wundef -Wwrite-strings -Wpointer-arith -Wmissing-declarations -Wredundant-decls -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wcast-align -Wformat-nonliteral -Wformat-security -Wsign-compare -Wstrict-aliasing -Wshadow -Winline -Wmissing-format-attribute -Wmissing-noreturn -Winit-self -Wmissing-include-dirs -Wunused-but-set-variable -Warray-bounds -Wreturn-type -Wswitch-enum -Wswitch-default -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Werror -Wno-suggest-attribute=format -Wno-error=unused-parameter -Wno-error=missing-field-initializers -I ../.. -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -MT libpinelog_la-pinelog.lo -MD -MP -MF .deps/libpinelog_la-pinelog.Tpo -c -o libpinelog_la-pinelog.lo `test -f 'pinelog.c' || echo '../../../lib/pinelog/'`pinelog.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../../lib/pinelog -I../.. -D_FORTIFY_SOURCE=3 -O2 -DPINELOG_SHOW_LEVEL=1 -DPINELOG_SHOW_BACKTRACE=1 -DPINELOG_BUFFER_SZ=1024 -fno-strict-aliasing -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes -Wdeclaration-after-statement -Wimplicit-function-declaration -Wold-style-definition -Wjump-misses-init -Wall -Wextra -Wundef -Wwrite-strings -Wpointer-arith -Wmissing-declarations -Wredundant-decls -Wno-unused-parameter -Wno-missing-field-initializers -Wformat=2 -Wcast-align -Wformat-nonliteral -Wformat-security -Wsign-compare -Wstrict-aliasing -Wshadow -Winline -Wmissing-format-attribute -Wmissing-noreturn -Winit-self -Wmissing-include-dirs -Wunused-but-set-variable -Warray-bounds -Wreturn-type -Wswitch-enum -Wswitch-default -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -Wnull-dereference -Wdouble-promotion -Werror -Wno-suggest-attribute=format -Wno-error=unused-parameter -Wno-error=missing-field-initializers -I ../.. -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -MT libpinelog_la-pinelog.lo -MD -MP -MF .deps/libpinelog_la-pinelog.Tpo -c ../../../lib/pinelog/pinelog.c -fPIC -DPIC -o .libs/libpinelog_la-pinelog.o ../../../lib/pinelog/pinelog.c: In function ‘pinelog_init’: ../../../lib/pinelog/pinelog.c:123:33: error: ‘calloc’ sizes specified with ‘sizeof’ in the earlier argument and not in the later argument [-Werror=calloc-transposed-args] 123 | module_level = calloc(sizeof(*module_level), count); | ^ ../../../lib/pinelog/pinelog.c:123:33: note: earlier argument should specify number of elements, later size of each element ../../../lib/pinelog/pinelog.c:129:32: error: ‘calloc’ sizes specified with ‘sizeof’ in the earlier argument and not in the later argument [-Werror=calloc-transposed-args] 129 | module_name = calloc(sizeof(*module_name), count); | ^ ../../../lib/pinelog/pinelog.c:129:32: note: earlier argument should specify number of elements, later size of each element cc1: all warnings being treated as errors make[3]: *** [Makefile:1541: libpinelog_la-pinelog.lo] Error 1 make[3]: Leaving directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build/lib/pinelog' make[2]: *** [Makefile:427: all-recursive] Error 1 make[2]: Leaving directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build/lib' make[1]: *** [Makefile:2964: all-recursive] Error 1 make[1]: Leaving directory '/home/exampleuser/.cache/yay/libx52/src/libx52-0.3.0/build' make: *** [Makefile:1339: all] Error 2 ==> ERROR: A failure occurred in build(). Aborting... -> error making: libx52-exit status 4 checking dependencies... Packages (2) cmocka-1.1.7-1 doxygen-1.11.0-1 Total Removed Size: 18.28 MiB :: Do you want to remove these packages? [Y/n] :: Processing package changes... (1/2) removing doxygen [---------------------------------------] 100% (2/2) removing cmocka [---------------------------------------] 100% :: Running post-transaction hooks... (1/2) Arming ConditionNeedsUpdate... (2/2) -> Failed to install the following packages. Manual intervention is required: libx52 - exit status 4 ```

Environment (please complete the following information):

Additional context N/A

nirenjan commented 4 months ago

Thank you for the bug report, it seems like newer versions of GCC are flagging this and raising a warning, which is treated as an error due to the -Werror flag.

trinitronx commented 4 months ago

Thank you for the bug report, it seems like newer versions of GCC are flagging this and raising a warning, which is treated as an error due to the -Werror flag.

Thanks! :pray: :tada: :clap:

I've been able to recompile from latest master git branch, and tested by creating a pre-release PKGBUILD. So far as I can tell, everything's working!

nirenjan commented 4 months ago

Thank you. I'm no longer using Arch - would you be interested in maintaining the PKGBUILD on AUR?

trinitronx commented 4 months ago

Thank you. I'm no longer using Arch - would you be interested in maintaining the PKGBUILD on AUR?

Sure! I'm currently using Manjaro on my daily driver PC, and am able to maintain the PKGBUILD.

P.S.: I should clarify... I have the knowledge, expertise, and capability to maintain PKGBUILDs. However, I'm currently not officially an Arch "Trusted User" / Package Maintainer yet. It looks like I will need 2 sponsors to become one.

I assume that you would be willing to sponsor me?

nirenjan commented 4 months ago

Ah, I'm not a "Trusted User"/Package maintainer on Arch, but I did add you as a co-maintainer for the libx52 repo on AUR. My understanding was that anybody could contribute to AUR, though you'd have to be a trusted user to contribute to the main repository.

trinitronx commented 4 months ago

My understanding was that anybody could contribute to AUR, though you'd have to be a trusted user to contribute to the main repository.

Oh, that makes sense! I must have been misunderstanding the Wiki.

I did add you as a co-maintainer for the libx52 repo on AUR.

:pray: Thanks! I'm happy to help out with this PKGBUILD :grinning:

Should I now be able to update the PKGBUILD on AUR by simply pushing to the SSH Git repo URL? (e.g. ssh://aur@aur.archlinux.org/libx52.git).

Also, it looks like the source URL in the libx52 AUR package currently set to the GitHub release tarball URL:

https://github.com/nirenjan/x52pro-linux/releases/download/v${pkgver}/${pkgname}_${pkgver}.orig.tar.gz

My testing pre-release PKGBUILD is using source from Git master branch HEAD. Although, due to most AUR guidelines using Git repo source from master / main branches should be reserved for packages with the -git suffix. That is to say in other words: A separate package libx52-git would use Git source, meanwhile libx52 package would use a typical distributed source tarball... like from Autotools make dist or make distcheck targets. Likewise, libx52-bin would be the package name for a PKGBUILD that just distributes a pre-compiled upstream binary (as in most closed-source or proprietary things, or just software that only distributes a .deb or .rpm or some other foreign package rather than source code).

If I'm going to update to latest make dist release tarball, it would need to be uploaded to GitHub releases. I noticed that there is a release GitHub workflow to do this... Is this still functional?

nirenjan commented 4 months ago

I believe you should be able to push to the AUR repo, but I've never done this before, do let me know if I need to do something else.

The release workflow runs when a new tag is pushed to the repo. I'll do so once I'm back home.

nirenjan commented 4 months ago

While the actions that the release workflow have been deprecated, they still work (for now). I've created release v0.3.1, so you should be able to update the PKGBUILD to use that new version.

trinitronx commented 4 months ago

Ok, thanks!

I just tried doing a version bump and running the command to update sha256 checksums for the PKGBUILD (makepkg --geninteg), but it failed to download the .tar.gz file.

I checked into what's going on, and it looks like the release URL has a version mismatch for the release version and version in filename:

https://github.com/nirenjan/libx52/releases/download/v0.3.1/libx52_0.3.0.orig.tar.gz
                                                      ^^^ here     ^^^ and here

I figured that it's probably a bug or release errata since it looks like the Version file still has 0.3.0. So, I can hold off and wait until that gets fixed rather than fudge the versions in the PKGBUILD source URL.

nirenjan commented 4 months ago

D'oh! Thanks for catching it... That's what I get when I'm trying to make a release when I really should be in bed. Please use v0.3.2 instead.

trinitronx commented 4 months ago

Please use v0.3.2 instead.

Ok, great! I've found some time to do this today. PKGBUILD for Version 0.3.2-1 is now pushed and live on the AUR!