summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1999-01-10 00:18:32 +0000
committerMartin Mares <mj@ucw.cz>1999-01-10 00:18:32 +0000
commit49e7e5ee0b2848f5bf120a962e2e7eb11b86566a (patch)
tree56e7c215f49ab59792b5cf0194fa5045a66943c7 /tools
parent2f9bcf9713523f6fefecd143cc2aa2a8dda7f27f (diff)
New makefiles. Includes support for out-of-source-tree builds.
Diffstat (limited to 'tools')
-rw-r--r--tools/Makefile-top.in15
-rw-r--r--tools/Makefile.in33
-rw-r--r--tools/Rules.in66
-rwxr-xr-xtools/mergedirs41
4 files changed, 139 insertions, 16 deletions
diff --git a/tools/Makefile-top.in b/tools/Makefile-top.in
new file mode 100644
index 00000000..0b201a56
--- /dev/null
+++ b/tools/Makefile-top.in
@@ -0,0 +1,15 @@
+# Makefile for in place build of BIRD
+# (c) 1999 Martin Mares <mj@ucw.cz>
+
+objdir=@objdir@
+
+all:
+ $(MAKE) -C $(objdir) $@
+
+clean:
+ $(MAKE) -C $(objdir) clean
+ rm -f `find . -name "*~" -or -name "*.[oa]" -or -name "\#*\#" -or -name TAGS -or -name core -or -name depend -or -name .#*`
+
+distclean: clean
+ rm -rf $(objdir)
+ rm -f config.* configure sysdep/autoconf.h Makefile
diff --git a/tools/Makefile.in b/tools/Makefile.in
new file mode 100644
index 00000000..246872c0
--- /dev/null
+++ b/tools/Makefile.in
@@ -0,0 +1,33 @@
+# Makefile for the BIRD Internet Routing Daemon
+# (c) 1999 Martin Mares <mj@ucw.cz>
+
+include Rules
+
+srcdir_abs := $(shell cd $(srcdir) ; pwd)
+
+.PHONY: all subdir depend clean distclean
+
+all: .dir-stamp .dep-stamp subdir $(exedir)/bird
+
+subdir depend:
+ set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done
+ set -e ; for a in $(static-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
+
+$(exedir)/bird: $(addsuffix /all.o, $(static-dirs)) conf/all.o lib/birdlib.a
+ $(CC) $(LDFLAGS) -o $@ $^
+
+.dir-stamp:
+ mkdir -p $(static-dirs)
+ touch .dir-stamp
+
+.dep-stamp:
+ $(MAKE) depend
+ touch .dep-stamp
+
+clean:
+ rm -f `find . -name "*.[oa]" -or -name core -or -name depend`
+ rm -f $(exedir)/bird .dep-stamp
+
+distclean: clean
+ rm -f config.* configure sysdep/autoconf.h Makefile Rules
+ rm -rf .dir-stamp $(clean-dirs)
diff --git a/tools/Rules.in b/tools/Rules.in
new file mode 100644
index 00000000..56c0903b
--- /dev/null
+++ b/tools/Rules.in
@@ -0,0 +1,66 @@
+# Makefile fragments for the BIRD Internet Routing Daemon
+# (c) 1999 Martin Mares <mj@ucw.cz>
+
+srcdir=@srcdir_rel_mf@
+objdir=@objdir@
+exedir=@exedir@
+
+protocols=@protocols@
+static-dirs := nest $(addprefix proto/,$(protocols))
+static-dir-paths := $(addprefix $(srcdir)/,$(static-dirs))
+dynamic-dirs := lib conf
+dynamic-dir-paths := $(dynamic-dirs)
+dir-makefiles := $(addsuffix /Makefile,$(static-dir-paths) $(dynamic-dir-paths))
+
+all-dirs:=$(static-dirs) $(dynamic-dirs)
+clean-dirs:=$(all-dirs) proto sysdep
+dir-objs:=$(addprefix $(objdir)/,$(all-dirs))
+
+CPPFLAGS=-I$(root-rel) -I$(srcdir)
+CFLAGS=$(CPPFLAGS) @CFLAGS@
+CC=@CC@
+M4=@M4@
+BISON=@BISON@
+FLEX=@FLEX@
+RANLIB=@RANLIB@
+
+ifdef source
+
+objs := $(subst .c,.o,$(source))
+
+ifdef dir-name
+src-path := $(srcdir)/$(dir-name)/
+endif
+
+all:
+ cd $(root-rel) && make
+
+ifdef lib-dest
+
+subdir: $(lib-dest)
+
+$(lib-dest): $(objs)
+ rm -f $@
+ ar rcs $@ $^
+ $(RANLIB) $@
+
+else
+
+subdir: all.o
+
+all.o: $(objs)
+ $(LD) -r -o $@ $^
+
+endif
+
+%.o: $(src-path)%.c
+ $(CC) $(CFLAGS) -o $@ -c $^
+
+depend:
+ gcc $(CPPFLAGS) -MM $(addprefix $(src-path),$(source)) >depend
+
+ifneq ($(wildcard .depend),)
+include .depend
+endif
+
+endif
diff --git a/tools/mergedirs b/tools/mergedirs
index 3a085fde..25fc6bf9 100755
--- a/tools/mergedirs
+++ b/tools/mergedirs
@@ -1,10 +1,17 @@
#!/bin/sh
-if [ -z "$2" ] ; then
- echo "Usage: mergedirs <obj-dir> <list-of-dirs>"
+if [ -z "$4" ] ; then
+ echo "Usage: mergedirs <src-dir> <src-dir-rel> <obj-dir> <list-of-dirs>"
exit 1
fi
-TOPDIR=`pwd`
+SRCDIR=$1
+shift
+SRCREL=$1
+case $SRCDIR in
+ /*) ;;
+ *) SRCREL="../$SRCREL" ;;
+ esac
+shift
OBJDIR=$1
LIBDIR=$OBJDIR/lib
CONFDIR=$OBJDIR/conf
@@ -12,26 +19,25 @@ shift
echo "Merging system-dependent modules"
MODULES=`for a in $@ ; do
- sed <$a/Modules "s@\\(.*\\)@\\1 $a/\\1@"
+ sed <$SRCDIR/$a/Modules "s@\\(.*\\)@\\1 $a/\\1@"
done |
sort +0 -1 -u |
cut -d ' ' -f 2`
rm -rf $LIBDIR $CONFDIR
mkdir -p $LIBDIR $CONFDIR
for a in $MODULES ; do
- echo $a
b=`basename $a`
case $b in
- *.h) ln -s $TOPDIR/$a $LIBDIR/$b
+ *.h) ln -s $SRCREL/$a $LIBDIR/$b
;;
*.c) OBJ=`echo $b | sed 's/\.c$/\.o/'`
OBJS="$OBJS $OBJ"
SRCS="$SRCS \\
- \$(TOPDIR)/$a"
- ln -s $TOPDIR/$a $LIBDIR/$b
+ $b"
+ ln -s $SRCREL/$a $LIBDIR/$b
;;
- *.Y) CONFS="$CONFS\$(TOPDIR)/$a "
- ln -s $TOPDIR/$a $CONFDIR/$b
+ *.Y) CONFS="$CONFS\$(srcdir)/$a "
+ ln -s $SRCREL/$a $CONFDIR/$b
;;
*) echo "$b: Unknown file type"
exit 1
@@ -40,12 +46,15 @@ for a in $MODULES ; do
done
cat >$LIBDIR/Makefile <<EOF
-OBJS=$OBJS
-SRCS=$SRCS
-LIB=birdlib.a
+source=$SRCS
+lib-dest=birdlib.a
+root-rel=../
-include \$(TOPDIR)/Rules
+include ../Rules
EOF
-sed <$TOPDIR/conf/Makefile >$CONFDIR/Makefile "s|@CONFS@|$CONFS|"
-ln -s $TOPDIR/conf/*.[chl] $CONFDIR/
+sed <$SRCDIR/conf/Makefile >$CONFDIR/Makefile "s|@CONFS@|$CONFS|"
+CONFS=`cd $SRCDIR ; ls conf/*.[chl]`
+for a in $CONFS ; do
+ ln -s $SRCREL/$a $CONFDIR/
+done