[irrtoolset]Porting RAToolSet 4.7.1 to the NetBSD package system
Havard Eidnes he at uninett.no
Tue Jan 20 21:32:53 CET 2004
Hi, I'm in the process of making a package in the NetBSD package system for RAToolSet, version 4.7.1. In the process I've uncovered a few issues which I think merit fixing cross-platform: o As far as I know, it is quite non-portable to link C++ programs using $(LD) directly. The reason is that you then have to know or detect what system-, architecture-, and compiler-dependent libraries need to be supplied. It is much easier to just rely on the C++ compiler dealing with those issues, so in the individual Makefile.in's I'm using $(CXX) instead of $(LD). (My ld doesn't much care for -O2 or -I options...) o Your bison invocations all use the '-p' option to specify a different file prefix than 'y.'. However, the subsequent renames do not take into account that the output files are no longer named y.tab.c and y.tab.h. o Some of the Makefile.in's in the tree suppress compiler invocation with @ and instead emit "Compiling ...". This is IMHO unnecessary obfuscation making it more difficult to debug build problems, so I've obliterated a few of them. o src/roe/RadixSet.hh and src/Core/util/List.hh needed to have a few instances of NULL replaced with 0. The complaint from gcc 2.95.3 (which is newer than the documented minimum version) was: c++ -c -I/usr/pkg/include -I/usr/X11R6/include -O2 -I/usr/pkg/include -I/usr/X11R6/include -DHAVE_CONFIG_H -I. -I. -I../../src -I.. -I../../src/Core -I../../src/rpsl -I/usr/X11R6/include object.cc In file included from route-list.hh:42, from object.cc:40: RadixSet.hh:63: `NULL' was not declared in this scope RadixSet.hh:63: confused by earlier errors, bailing out gmake[2]: *** [object.o] Error 1 gmake[2]: Leaving directory `/usr/pkgsrc/net/RAToolSet/work/RAToolSet-4.7.1/src/roe' I suspect the template implementation has not fully settled to tackle this. Using the 0 literal in a pointer context should, if I recall correctly, not cause any portability problems, but I am no C++ language expert... o I needed some system-dependent changes to get proper run-path set in the executables on NetBSD. NetBSD requires explicit -Wl,-R<libdir> specification, and does not derive that information from passed -L<libdir> options. I've omitted most of these changes (I'm a little doubtful of their portability), except I've left in the change in which src/roe gets $(LDFLAGS) passed to the compiler's link step. The patches to the individual files I touched can be found in the shar archive attached below. Regards, - Håvard -------------- next part -------------- # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # patch-aa # patch-ab # patch-ac # patch-ad # patch-ae # patch-af # patch-ag # patch-ah # patch-ai # patch-aj # patch-ak # patch-al # patch-am # patch-an # echo x - patch-aa sed 's/^X//' >patch-aa << 'END-of-patch-aa' X$NetBSD$ X X--- src/rpsl/rpsl/Makefile.in.orig Thu Oct 28 20:43:33 1999 X+++ src/rpsl/rpsl/Makefile.in X@@ -60,8 +60,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c `basename $<`.cc X- mv y.tab.h `basename $<`.hh X+ mv `basename $< .y`.tab.c `basename $<`.cc X+ mv `basename $< .y`.tab.h `basename $<`.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` END-of-patch-aa echo x - patch-ab sed 's/^X//' >patch-ab << 'END-of-patch-ab' X$NetBSD$ X X--- src/Core/gnu/Makefile.in.orig Thu Jan 6 00:23:23 2000 X+++ src/Core/gnu/Makefile.in X@@ -60,12 +60,10 @@ default: all X .y.o: X X .c.o: X- @echo Compiling: `basename $<` X- @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X X .cc.o: X- @echo Compiling: `basename $<` X- @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X X .SUFFIXES: .cc X END-of-patch-ab echo x - patch-ac sed 's/^X//' >patch-ac << 'END-of-patch-ac' X$NetBSD$ X X--- src/Core/sched/Makefile.in.orig Tue Jun 15 17:39:18 1999 X+++ src/Core/sched/Makefile.in X@@ -45,12 +45,10 @@ default: all X .y.o: X X .c.o: X- @echo Compiling: `basename $<` X- @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X X .cc.o: X- @echo Compiling: `basename $<` X- @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X X .SUFFIXES: .cc X END-of-patch-ac echo x - patch-ad sed 's/^X//' >patch-ad << 'END-of-patch-ad' X$NetBSD$ X X--- src/Core/sys/Makefile.in.orig Tue Jun 15 17:39:18 1999 X+++ src/Core/sys/Makefile.in X@@ -65,12 +65,10 @@ default: all X .y.o: X X .c.o: X- @echo Compiling: `basename $<` X- @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X X .cc.o: X- @echo Compiling: `basename $<` X- @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X X .SUFFIXES: .cc X END-of-patch-ad echo x - patch-ae sed 's/^X//' >patch-ae << 'END-of-patch-ae' X$NetBSD$ X X--- src/Core/util/Makefile.in.orig Tue Jul 20 20:48:49 1999 X+++ src/Core/util/Makefile.in X@@ -49,12 +49,10 @@ default: all X .y.o: X X .c.o: X- @echo Compiling: `basename $<` X- @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X X .cc.o: X- @echo Compiling: `basename $<` X- @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X X .SUFFIXES: .cc X END-of-patch-ae echo x - patch-af sed 's/^X//' >patch-af << 'END-of-patch-af' X$NetBSD$ X X--- src/rpslcheck/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/rpslcheck/Makefile.in X@@ -74,7 +74,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-af echo x - patch-ag sed 's/^X//' >patch-ag << 'END-of-patch-ag' X$NetBSD$ X X--- src/peval/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/peval/Makefile.in X@@ -52,8 +52,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c $<.cc X- mv y.tab.h $<.hh X+ mv `basename $< .y`.tab.c $<.cc X+ mv `basename $< .y`.tab.h $<.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -74,7 +74,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-ag echo x - patch-ah sed 's/^X//' >patch-ah << 'END-of-patch-ah' X$NetBSD$ X X--- src/RtConfig/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/RtConfig/Makefile.in X@@ -52,8 +52,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c `basename $<`.cc X- mv y.tab.h `basename $<`.hh X+ mv `basename $< .y`.tab.c `basename $<`.cc X+ mv `basename $< .y`.tab.h `basename $<`.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -74,7 +74,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-ah echo x - patch-ai sed 's/^X//' >patch-ai << 'END-of-patch-ai' X$NetBSD$ X X--- src/prtraceroute/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/prtraceroute/Makefile.in X@@ -53,8 +53,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c `basename $<`.cc X- mv y.tab.h `basename $<`.hh X+ mv `basename $< .y`.tab.c `basename $<`.cc X+ mv `basename $< .y`.tab.h `basename $<`.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -75,7 +75,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-ai echo x - patch-aj sed 's/^X//' >patch-aj << 'END-of-patch-aj' X$NetBSD$ X X--- src/CIDRAdvisor/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/CIDRAdvisor/Makefile.in X@@ -50,8 +50,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c `basename $<`.cc X- mv y.tab.h `basename $<`.hh X+ mv `basename $< .y`.tab.c `basename $<`.cc X+ mv `basename $< .y`.tab.h `basename $<`.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -72,7 +72,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-aj echo x - patch-ak sed 's/^X//' >patch-ak << 'END-of-patch-ak' X$NetBSD$ X X--- src/roe/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/roe/Makefile.in X@@ -63,8 +63,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c $<.cc X- mv y.tab.h $<.hh X+ mv `basename $< .y`.tab.c $<.cc X+ mv `basename $< .y`.tab.h $<.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -72,12 +72,10 @@ default: all X mv lex.`basename $< .l`.c $<.cc X X .c.o: X- @echo Compiling: `basename $<` X- @$(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFINES) $(INCDIRS) $< X X .cc.o: X- @echo Compiling: `basename $<` X- @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X+ $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) $(INCDIRS) $< X X # Transformations applied to each line of the file: X # eliminate blank lines X@@ -117,7 +115,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LDFLAGS) $(LIBS) X X dolibs: X @ cd ..; $(MAKE) $(MFLAGS) dolibs END-of-patch-ak echo x - patch-al sed 's/^X//' >patch-al << 'END-of-patch-al' X$NetBSD$ X X--- src/roe/RadixSet.hh.orig Tue Feb 20 17:11:55 2001 X+++ src/roe/RadixSet.hh X@@ -46,10 +46,10 @@ X X class RadixNode { X public: X- RadixNode() : left(NULL), rght(NULL), prnt(NULL), X- state(RADIX_EMPTY), data(NULL) {} X- RadixNode(RadixNode *p) : left(NULL), rght(NULL), prnt(p), X- state(RADIX_EMPTY), data(NULL){} X+ RadixNode() : left(0), rght(0), prnt(0), X+ state(RADIX_EMPTY), data(0) {} X+ RadixNode(RadixNode *p) : left(0), rght(0), prnt(p), X+ state(RADIX_EMPTY), data(0){} X X RadixNode *left; // left child X RadixNode *rght; // right child X@@ -58,7 +58,7 @@ public: X int state; // state == empty is an intermediate node which is not in tree X void *data; // X X- RadixNode *insert(void *dt = NULL); X+ RadixNode *insert(void *dt = 0); X RadixNode *find(PrefixRange *dt); X RadixNode *next(); // returns the next rt in radix order X X@@ -69,7 +69,7 @@ private: X template <class T> X class Radix : public RadixNode { X public: X- RadixNode *insert(T *dt = NULL) { X+ RadixNode *insert(T *dt = 0) { X return RadixNode::insert(dt); X } X X@@ -79,9 +79,9 @@ public: X X void clear(void) { X clear(this); X- left = rght = prnt = NULL; X+ left = rght = prnt = 0; X state = RADIX_EMPTY; X- data = NULL; X+ data = 0; X } X void clear(RadixNode *r) { X if (!r) return; END-of-patch-al echo x - patch-am sed 's/^X//' >patch-am << 'END-of-patch-am' X$NetBSD$ X X--- src/prpath/Makefile.in.orig Thu Jun 15 20:51:23 2000 X+++ src/prpath/Makefile.in X@@ -50,8 +50,8 @@ default: all X %.y.cc %.y.hh: %.y X @echo Compiling: `basename $<` X $(BISON) -d -p `basename $< .y` $< X- mv y.tab.c `basename $<`.cc X- mv y.tab.h `basename $<`.hh X+ mv `basename $< .y`.tab.c `basename $<`.cc X+ mv `basename $< .y`.tab.h `basename $<`.hh X X %.l.cc: %.l X @echo Compiling: `basename $<` X@@ -72,7 +72,7 @@ default: all X all: $(GOAL) X X $(GOAL): $(OBJS) dolibs X- $(LD) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X+ $(CXX) $(CFLAGS) -o $(GOAL) $(OBJS) $(LIBS) X X dolibs: X @ for f in $(REQUIRES); do cd ../$$f; $(MAKE) $(MFLAGS); done END-of-patch-am echo x - patch-an sed 's/^X//' >patch-an << 'END-of-patch-an' X$NetBSD$ X X--- src/Core/util/List.hh.orig Fri Nov 10 00:50:57 2000 X+++ src/Core/util/List.hh X@@ -352,19 +352,19 @@ public: X X // traversal routines X T *head() const { X- return (forw == (const ListNode *) this) ? (T *) NULL : (T *) forw; X+ return (forw == (const ListNode *) this) ? (T *) 0 : (T *) forw; X } X X T *tail() const { X- return (back == (const ListNode *) this) ? (T *) NULL : (T *) back; X+ return (back == (const ListNode *) this) ? (T *) 0 : (T *) back; X } X X T *next(const T *n) const { X- return (n->forw == (const ListNode *) this) ? (T *) NULL : (T *) n->forw; X+ return (n->forw == (const ListNode *) this) ? (T *) 0 : (T *) n->forw; X } X X T *prev(const T *n) const { X- return (n->back == (const ListNode *) this) ? (T *) NULL : (T *) n->back; X+ return (n->back == (const ListNode *) this) ? (T *) 0 : (T *) n->back; X } X }; X END-of-patch-an exit