[Debian-med-packaging] Bug#920240: abyss fails to build on hurd due to missing header file
Boud Roukema
boud-debian at cosmo.torun.pl
Wed Jan 23 05:03:10 GMT 2019
Source: abyss
Version: 2.1.5-3
Severity: important
SUMMARY: abyss fails to build on hurd due to missing header file
DISCOVERY:
Build log of abyss-2.1.5-3 on mahler.debian.net (2019-01-09 22:47:19):
https://buildd.debian.org/status/fetch.php?pkg=abyss&arch=hurd-i386&ver=2.1.5-3&stamp=1547074039&raw=0
DESCRIPTION:
Abyss-2.1.5-3 gives the build error:
../Common/MemoryUtil.h:11:11: fatal error: mach/task.h: No such file or directory
It seems that this is due to an out-of-date usage of mach include
files and possibly also linking with mach.
CONTEXT:
On the exodar GNU/hurd emulation:
$ uname -a
GNU exodar 0.9 GNU-Mach 1.8+git20181103-486-dbg/Hurd-0.9 i686-AT386 GNU
$ cat /proc/hostinfo
Basic info:
max_cpus = 1 /* max number of cpus possible */
avail_cpus = 1 /* number of cpus now available */
memory_size = 3221151744 /* size of memory in bytes */
cpu_type = 19 /* cpu type */
cpu_subtype = 1 /* cpu subtype */
Scheduling info:
min_timeout = 10 /* minimum timeout in milliseconds */
min_quantum = 100 /* minimum quantum in milliseconds */
Load info:
avenrun[3] = { 0.10, 0.28, 0.60 }
mach_factor[3] = { 0.89, 0.81, 0.64 }
$ dpkg -l |egrep "abyss|gcc|g\+\+"
ii g++ 4:8.2.0-2 hurd-i386 GNU C++ compiler
ii g++-8 8.2.0-14 hurd-i386 GNU C++ compiler
ii gcc 4:8.2.0-2 hurd-i386 GNU C compiler
ii gcc-8 8.2.0-14 hurd-i386 GNU C compiler
ii gcc-8-base:hurd-i386 8.2.0-14 hurd-i386 GCC, the GNU Compiler Collection (base package)
ii libgcc-8-dev:hurd-i386 8.2.0-14 hurd-i386 GCC support library (development files)
ii libgcc1:hurd-i386 1:8.2.0-14 hurd-i386 GCC support library
REPRODUCE:
On exodar:
$ apt-get source abyss
$ apt-get build-dep abyss
$ cd abyss-2.1.5
$ fakeroot debian/rules binary
...
g++ -Wall -Wextra -fopenmp -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -Wl,-z,relro -Wl,-z,now -o abyss-align abyss_align-align.o ./libalign.a ../dialign/libdialign.a ../DataLayer/libdatalayer.a ../Common/libcommon.a -ldl -lm
g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../Common -I../DataLayer -I/home/boud-guest/abyss-2.1.5 -Wdate-time -D_FORTIFY_SOURCE=2 -isystem/home/boud-guest/abyss-2.1.5/boost_1_56_0 -Wall -Wextra -fopenmp -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -c -o abyss_mergepairs-mergepairs.o `test -f 'mergepairs.cc' || echo './'`mergepairs.cc
g++ -Wall -Wextra -fopenmp -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -Wl,-z,relro -Wl,-z,now -o abyss-mergepairs abyss_mergepairs-mergepairs.o ./libalign.a ../dialign/libdialign.a ../DataLayer/libdatalayer.a ../Common/libcommon.a -ldl -lm
make[4]: Leaving directory '/home/boud-guest/abyss-2.1.5/Align'
Making all in ABYSS
make[4]: Entering directory '/home/boud-guest/abyss-2.1.5/ABYSS'
g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I/home/boud-guest/abyss-2.1.5 -Wdate-time -D_FORTIFY_SOURCE=2 -isystem/home/boud-guest/abyss-2.1.5/boost_1_56_0 -Wall -Wextra -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -c -o ABYSS-abyss.o `test -f 'abyss.cc' || echo './'`abyss.cc
In file included from ../Assembly/DBG.h:7,
from ../Assembly/SequenceCollection.h:22,
from abyss.cc:5:
../Common/MemoryUtil.h:11:11: fatal error: mach/task.h: No such file or directory
# include <mach/task.h> // for task_info
^~~~~~~~~~~~~
compilation terminated.
Makefile:410: recipe for target 'ABYSS-abyss.o' failed
make[4]: *** [ABYSS-abyss.o] Error 1
HYPOTHESES FOR FIXING:
Without knowing details of hurd/mach:
(1) My first guess was that <mach/task_info.h> should be included instead of <mach/task.h>,
but some other updates look like they're needed too. Making this replacement
in Common/MemoryUtil.h and changing nothing else gives:
g++ -Wall -Wextra -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -Wl,-z,relro -Wl,-z,now -o ABYSS ABYSS-abyss.o ../DataBase/libdb.a -lsqlite3 -ldl -lm ../Assembly/libassembly.a ../DataLayer/libdatalayer.a ../Common/libcommon.a -ldl -lm
/usr/bin/ld: ABYSS-abyss.o: in function `getMemoryUsage':
./ABYSS/../Common/MemoryUtil.h:22: undefined reference to `task_info(unsigned long, int, int*, unsigned int*)'
collect2: error: ld returned 1 exit status
Makefile:372: recipe for target 'ABYSS' failed
make[4]: *** [ABYSS] Error 1
(2) Trying <mach.h> instead of both <mach/mach.h> and <mach/task.h>, and
putting '__task_info' instead of 'task_info', with both of these changes
in Common/MemoryUtil.h and modifying no other files, gives:
g++ -Wall -Wextra -g -O2 -fdebug-prefix-map=/home/boud-guest/abyss-2.1.5=. -fstack-protector-strong -Wformat -Werror=format-security -DGTEST_USE_OWN_TR1_TUPLE=0 -Wl,-z,relro -Wl,-z,now -o ABYSS ABYSS-abyss.o ../DataBase/libdb.a -lsqlite3 -ldl -lm ../Assembly/libassembly.a ../DataLayer/libdatalayer.a ../Common/libcommon.a -ldl -lm
/usr/bin/ld: ABYSS-abyss.o: in function `getMemoryUsage':
./ABYSS/../Common/MemoryUtil.h:22: undefined reference to `__task_info(unsigned long, int, int*, unsigned int*)'
collect2: error: ld returned 1 exit status
Makefile:372: recipe for target 'ABYSS' failed
make[4]: *** [ABYSS] Error 1
(3) It looks like including only <mach.h> should automatically include
/usr/include/mach/mach_interface.h>, which includes a prototype
for
kern_return_t __task_info( ... )
but g++ doesn't find this when linking. Does g++ have something missing when linking
to code created with mach-specific extensions?
COMMENT:
Since this software looks like it caters specifically to Mach, it would be a pity
not to update this to the current recommended usage of Mach.
More information about the Debian-med-packaging
mailing list