[irrtoolset]Porting RAToolSet 4.7.1 to the NetBSD package system
Katie Petrusha katie at ripe.net
Thu Jan 22 10:37:27 CET 2004
On Tue, Jan 20, 2004 at 09:32:53PM +0100, Havard Eidnes wrote: Dear Havard, Thanks a lot for the patches. Let me try them on other platforms I have available to see how compatible they are; I'll come back to you as soon as I can. Thanks again! P.S. Please note that ratoolset at ISI.EDU has been moved to irrtoolset at ripe.net. Katie Petrusha Software Engineering Department RIPE NCC > 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 > # 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 > -- Kind regards, Katje