Subject: Re: pkg/36778 (sysutils/strace fails to build on linux)
To: None <gnats-bugs@NetBSD.org>
From: Yakovetsky Vladimir <yx@x.ua>
List: pkgsrc-bugs
Date: 12/06/2007 17:27:22
On Wed, Dec 05, 2007 at 04:33:13PM +0000, christos@NetBSD.org wrote:
> Synopsis: sysutils/strace fails to build on linux
> 
> State-Changed-From-To: open->feedback
> State-Changed-By: christos@netbsd.org
> State-Changed-When: Wed, 05 Dec 2007 11:33:12 -0500
> State-Changed-Why:
> I imported a newer version of strace. Can you please check if it fixes
> your problems?
> 
  Has checked up, failures+fixes for strace-4.5.15 in linux below.


1st failure (net.c sockpacketoptions):
% cd sysutils/strace && bmake
...
if gcc -DHAVE_CONFIG_H -I. -I. -I. -Ilinux/i386 -I./linux/i386 -Ilinux -I./linux    -Wall -O2 -march=native -mfpmath=sse -msse -finline-functions -fomit-frame-pointer -ffast-math -MT net.o -MD -MP -MF ".deps/net.Tpo" -c -o net.o net.c;  then mv -f ".deps/net.Tpo" ".deps/net.Po"; else rm -f ".deps/net.Tpo"; exit 1; fi
net.c:809: error: 'PACKET_ADD_MEMBERSHIP' undeclared here (not in a function)
net.c:810: error: 'PACKET_DROP_MEMBERSHIP' undeclared here (not in a function)
...


1st fix (based on strace/net.c,v 1.56 2007/11/1)
:r sysutils/strace/patches/patch-bf
--- net.c.~1~
+++ net.c
@@ -806,8 +806,12 @@
 
 #ifdef SOL_PACKET
 static const struct xlat sockpacketoptions[] = {
+#ifdef PACKET_ADD_MEMBERSHIP
 	{ PACKET_ADD_MEMBERSHIP,	"PACKET_ADD_MEMBERSHIP"	},
+#endif
+#ifdef PACKET_DROP_MEMBERSHIP
 	{ PACKET_DROP_MEMBERSHIP,	"PACKET_DROP_MEMBERSHIP"},
+#endif
 #if defined(PACKET_RECV_OUTPUT)
 	{ PACKET_RECV_OUTPUT,		"PACKET_RECV_OUTPUT"	},
 #endif



2nd failure (probably `configure' with `linux-libc-dev' issue):
% cd sysutils/strace && bmake
...
checking for linux/if_packet.h... no
...
if gcc -DHAVE_CONFIG_H -I. -I. -I. -Ilinux/i386 -I./linux/i386 -Ilinux -I./linux    -Wall -O2 -march=native -mfpmath=sse -msse -finline-functions -fomit-frame-pointer -ffast-math -MT net.o -MD -MP -MF ".deps/net.Tpo" -c -o net.o net.c;  then mv -f ".deps/net.Tpo" ".deps/net.Po"; else rm -f ".deps/net.Tpo"; exit 1; fi
net.c: In function 'printsock':
net.c:964: error: field 'll' has incomplete type
net.c:967: error: field 'nl' has incomplete type
...


2nd fix (sysutils/strace/patches/patch-bg and sysutils/strace/Makefile.diff):
:r sysutils/strace/patches/patch-bg
--- configure.ac.~1~
+++ configure.ac
@@ -202,7 +202,8 @@
 AC_CHECK_FUNCS(sigaction strerror strsignal pread sys_siglist _sys_siglist getdents mctl prctl sendmsg inet_ntop if_indextoname)
 AC_CHECK_HEADERS([sys/reg.h sys/filio.h sys/acl.h sys/asynch.h sys/door.h stropts.h sys/conf.h sys/stream.h sys/tihdr.h sys/tiuser.h sys/sysconfig.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h linux/ptrace.h asm/reg.h sys/uio.h sys/aio.h poll.h sys/poll.h sys/vfs.h asm/sysmips.h linux/utsname.h sys/nscsys.h mqueue.h sys/epoll.h libaio.h inttypes.h], [], [])
 AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h],
-                 [], [], [#include <linux/socket.h>])
+                 [], [], [#include <stddef.h>
+#include <linux/socket.h>])
 AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include <signal.h>])
 AC_CHECK_HEADERS([netinet/tcp.h netinet/udp.h],,, [#include <netinet/in.h>])

--- sysutils/strace/Makefile.~1~
+++ sysutils/strace/Makefile
@@ -22,4 +22,11 @@
 
 REPLACE_PERL=		strace-graph
 
+.include "../../mk/bsd.prefs.mk"
+.if ${OPSYS} == "Linux"
+USE_TOOLS+=		autoconf
+pre-configure:
+	cd ${WRKSRC} && autoconf
+.endif
+
 .include "../../mk/bsd.pkg.mk"



3rd failure (patches/patch-ag issue in linux: PTRACE_PEEKUSER redefined as PTRACE_PEEKTEXT):
% cd sysutils/strace && bmake
...
if gcc -DHAVE_CONFIG_H -I. -I. -I. -Ilinux/i386 -I./linux/i386 -Ilinux -I./linux    -Wall -O2 -march=native -mfpmath=sse -msse -finline-functions -fomit-frame-pointer -ffast-math -MT process.o -MD -MP -MF ".deps/process.Tpo" -c -o process.o process.c;  then mv -f ".deps/process.Tpo" ".deps/process.Po"; else rm -f ".deps/process.Tpo"; exit 1; fi
process.c: In function 'sys_ptrace':
process.c:3030: error: duplicate case value
process.c:3029: error: previously used here
process.c:3046: error: duplicate case value
process.c:3045: error: previously used here
...


3rd fix (make new definitions from patch-ag conditional):
:r sysutils/strace/patches/patch-bh
--- defs.h.~1~
+++ defs.h
@@ -267,6 +267,7 @@
 #define PR_FAULTED      S_CORE
 #endif
 
+#ifndef LINUX
 #if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
 #define PTRACE_ATTACH PT_ATTACH
 #endif
@@ -297,6 +298,7 @@
 #if !defined(PTRACE_SETREGS) && defined(PT_SETREGS)
 #define PTRACE_SETREGS PT_SETREGS
 #endif
+#endif
 
 /* Trace Control Block */
 struct tcb {


Kind Regards,

-- 
Yakovetsky Vladimir