Build system reworked to one global Makefile with includes and no nesting

Also removed the lib-dir merging with sysdep. Updated #include's
accordingly.

Fixed make doc on recent Debian together with moving generated doc into
objdir.

Moved Makefile.in into root dir

Retired all.o and birdlib.a
Linking the final binaries directly from all the .o files.
This commit is contained in:
Jan Moskyto Matejka 2016-04-12 11:14:54 +02:00
parent 4bdf1881dc
commit 7152e5efbb
58 changed files with 371 additions and 508 deletions

2
Doc
View file

@ -1,3 +1,4 @@
D doc/prog-head.sgml
C doc C doc
C nest C nest
C conf C conf
@ -5,3 +6,4 @@ C filter
C proto C proto
C sysdep C sysdep
C lib C lib
D doc/prog-foot.sgml

156
Makefile.in Normal file
View file

@ -0,0 +1,156 @@
# Makefile for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
# (c) 2016 Jan Moskyto Matejka <mq@ucw.cz>
# Disable build-in rules
MAKEFLAGS += -r
# Variable definitions
CPPFLAGS=-I$(objdir) -I$(srcdir) @CPPFLAGS@
CFLAGS=$(CPPFLAGS) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
CLIENT_LIBS=@CLIENT_LIBS@
CC=@CC@
M4=@M4@
BISON=@BISON@
FLEX=@FLEX@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_DATA=@INSTALL_DATA@
client=$(addprefix $(exedir)/,@CLIENT@)
daemon=$(exedir)/bird
protocols = @protocols@
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
sysconfdir=@sysconfdir@
localstatedir=@localstatedir@
docdir=@prefix@/doc
srcdir := @srcdir@
objdir := @objdir@
exedir := @exedir@
ifeq ($(objdir),.)
objdir := $(realpath .)
endif
ifeq ($(VERBOSE),)
Q:=@
else
Q:=
endif
# Meta rules
cleangoals := clean distclean
docgoals := docs userdocs progdocs
.PHONY: all daemon cli $(cleangoals) $(docgoals) tags
all: daemon cli
daemon: $(daemon)
cli: $(client)
# Include directories
dirs := client conf doc filter lib nest $(addprefix proto/,$(protocols)) @sysdep_dirs@
conf-y-targets := $(addprefix $(objdir)/conf/,cf-parse.y keywords.h commands.h)
cf-local = $(conf-y-targets): $(s)config.Y
src-o-files = $(patsubst %.c,$(o)%.o,$(src))
all-daemon = $(exedir)/bird: $(obj)
all-client = $(exedir)/birdc $(exedir)/birdcl: $(obj)
s = $(dir $(lastword $(MAKEFILE_LIST)))
ifeq ($(srcdir),.)
o = $(objdir)/$(s)
else
o = $(patsubst $(srcdir)%,$(objdir)%,$(s))
endif
define clean_in =
clean::
rm -f $(addprefix $(o),$(1))
endef
clean = $(eval $(call clean_in,$(1)))
include $(addsuffix /Makefile,$(addprefix $(srcdir)/,$(dirs)))
# Generic rules
$(objdir)/%.o: $(srcdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
$(Q)echo CC -o $@ -c $<
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
$(objdir)/%.o: $(objdir)/%.c $(objdir)/.dir-stamp $(objdir)/sysdep/paths.h
$(Q)echo CC -o $@ -c $<
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
$(objdir)/.dir-stamp:
$(Q)echo MKDIR -p $(addprefix $(objdir)/,$(dirs) doc)
$(Q)mkdir -p $(addprefix $(objdir)/,$(dirs) doc)
$(Q)touch $@
$(client) $(daemon):
$(Q)echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(objdir)/sysdep/paths.h: Makefile
echo >$@ "/* Generated by Makefile, don't edit manually! */"
echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
# Finally include the computed dependencies
ifneq ($(filter-out $(cleangoals),$(MAKECMDGOALS)),)
-include $(shell find $(objdir) -name "*.d")
endif
ifeq ($(MAKECMDGOALS),)
-include $(shell find $(objdir) -name "*.d")
endif
tags:
cd $(srcdir) ; etags -lc `find $(dirs) -name *.[chY]`
# Install
install: all
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird
$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl
if test -n "@CLIENT@" ; then \
$(INSTALL_PROGRAM) $(exedir)/birdc $(DESTDIR)/$(sbindir)/birdc ; \
fi
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
else \
echo "Not overwriting old bird.conf" ; \
fi
install-docs:
$(INSTALL) -d $(DESTDIR)/$(docdir)
$(INSTALL_DATA) $(objdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
# Cleanup
clean::
rm -f $(objdir)/sysdep/paths.h
rm -f $(addprefix $(exedir)/,bird birdc birdcl)
find $(objdir) -name "*.[od]" -exec rm -f '{}' '+'
ifeq ($(objdir),obj)
distclean: clean
rm -rf $(objdir)
rm -f config.log config.status configure Makefile
else
distclean: clean
rm -rf * .dir-stamp
rm -f config.log config.status configure Makefile
endif

View file

@ -1,11 +1,11 @@
source=commands.c util.c client.c src := commands.c util.c client.c
root-rel=../ obj := $(src-o-files)
dir-name=client
clients := $(client) birdcl $(all-client)
source-dep := $(source) $(addsuffix .c,$(clients)) $(o)commands.c.dep: $(objdir)/conf/commands.h
subdir: $(addsuffix .o,$(clients)) $(exedir)/birdc: $(o)birdc.o
$(exedir)/birdc: LIBS += $(CLIENT_LIBS)
include ../Rules $(exedir)/birdcl: $(o)birdcl.o

View file

@ -1,31 +1,29 @@
source=cf-parse.tab.c cf-lex.c conf.c src := cf-parse.tab.c cf-lex.c conf.c
root-rel=../ obj := $(src-o-files)
include ../Rules $(all-daemon)
conf-src=$(srcdir)/conf
conf-fragments=$(conf-src)/confbase.Y @CONFS@ $(addsuffix /config.Y,$(static-dir-paths))
ifdef DEBUG ifdef DEBUG
BISON_DEBUG=-t BISON_DEBUG=-t
#FLEX_DEBUG=-d #FLEX_DEBUG=-d
endif endif
cf-parse.tab.h: cf-parse.tab.c $(o)cf-parse.tab.h: $(o)cf-parse.tab.c
cf-parse.tab.c: cf-parse.y $(o)cf-parse.tab.c: $(o)cf-parse.y
$(BISON) -bcf-parse -dv -pcf_ $(BISON_DEBUG) cf-parse.y echo $< $@ $(o)
$(BISON) -b$(@:.tab.c=) -dv -pcf_ $(BISON_DEBUG) $<
cf-parse.y: $(conf-fragments) $(conf-src)/gen_parser.m4 $(conf-y-targets): $(s)confbase.Y
$(M4) -P $(conf-src)/gen_parser.m4 $(conf-fragments) >cf-parse.y $(M4) -P $| $^ >$@
keywords.h: $(conf-fragments) $(conf-src)/gen_keywords.m4 $(o)cf-parse.y: | $(s)gen_parser.m4
$(M4) -P $(conf-src)/gen_keywords.m4 $(conf-fragments) >keywords.h $(o)keywords.h: | $(s)gen_keywords.m4
$(o)commands.h: | $(s)gen_commands.m4 $(srcdir)/client/cmds.m4
commands.h: $(conf-fragments) $(conf-src)/gen_commands.m4 $(srcdir)/client/cmds.m4 $(o)cf-lex.c: $(s)cf-lex.l $(o)cf-parse.tab.h $(o)keywords.h $(o)commands.h
$(M4) -P $(conf-src)/gen_commands.m4 $(srcdir)/client/cmds.m4 $(conf-fragments) | sort >commands.h $(FLEX) $(FLEX_DEBUG) -s -B -8 -o$@ -Pcf_ $<
cf-lex.c: cf-lex.l $(addprefix $(o),cf-parse.tab.h cf-parse.tab.c cf-parse.y keywords.h commands.h cf-lex.c): $(objdir)/.dir-stamp
$(FLEX) $(FLEX_DEBUG) -s -B -8 -ocf-lex.c -Pcf_ cf-lex.l
depend: keywords.h commands.h cf-parse.tab.c cf-lex.c $(call clean,cf-parse.tab.h cf-parse.tab.c cf-parse.y keywords.h commands.h cf-lex.c cf-parse.output)

View file

@ -52,7 +52,7 @@
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/event.h" #include "lib/event.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "conf/conf.h" #include "conf/conf.h"
#include "filter/filter.h" #include "filter/filter.h"

View file

@ -10,7 +10,7 @@
#define _BIRD_CONF_H_ #define _BIRD_CONF_H_
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
/* Configuration structure */ /* Configuration structure */

View file

@ -14,7 +14,7 @@ CF_HDR
#include "conf/conf.h" #include "conf/conf.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/string.h" #include "lib/string.h"
#include "nest/protocol.h" #include "nest/protocol.h"
#include "nest/iface.h" #include "nest/iface.h"

View file

@ -23,24 +23,16 @@ AC_ARG_VAR([M4], [location of the M4 program])
if test "$srcdir" = . ; then if test "$srcdir" = . ; then
# Building in current directory => create obj directory holding all objects # Building in current directory => create obj directory holding all objects
objdir=obj objdir=obj
mkdir -p obj
srcdir_rel=..
makefiles="Makefile:tools/Makefile-top.in obj/Makefile:tools/Makefile.in obj/Rules:tools/Rules.in"
exedir=..
else else
# Building in separate directory # Building in separate directory
objdir=. objdir=.
srcdir_rel=$srcdir
makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
exedir=.
fi fi
case $srcdir_rel in
/*) srcdir_rel_mf=$srcdir_rel ;; exedir=.
*) srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
esac
AC_SUBST(objdir) AC_SUBST(objdir)
AC_SUBST(exedir) AC_SUBST(exedir)
AC_SUBST(srcdir_rel_mf) AC_SUBST(srcdir)
AC_SUBST(runtimedir) AC_SUBST(runtimedir)
@ -162,7 +154,7 @@ sysname=`echo $sysdesc | sed 's/\.h$//'`
AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc") AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc")
AC_MSG_CHECKING([system-dependent directories]) AC_MSG_CHECKING([system-dependent directories])
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib" sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '`"
AC_MSG_RESULT($sysdep_dirs) AC_MSG_RESULT($sysdep_dirs)
AC_SUBST(sysdep_dirs) AC_SUBST(sysdep_dirs)
@ -234,10 +226,10 @@ if test "$enable_debug" = yes ; then
fi fi
fi fi
CLIENT= CLIENT=birdcl
CLIENT_LIBS= CLIENT_LIBS=
if test "$enable_client" = yes ; then if test "$enable_client" = yes ; then
CLIENT=birdc CLIENT="$CLIENT birdc"
AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory") AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory")
AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses, AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses,
AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses, AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses,
@ -255,17 +247,9 @@ AC_SUBST(CLIENT_LIBS)
mkdir -p $objdir/sysdep mkdir -p $objdir/sysdep
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in]) AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
AC_CONFIG_COMMANDS([merge],[[export CPP="$CPP" AC_CONFIG_FILES(Makefile:Makefile.in)
$srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs]],
[[srcdir=$srcdir]
[srcdir_rel=$srcdir_rel]
[objdir=$objdir]
[sysdep_dirs="$sysdep_dirs"]])
AC_CONFIG_FILES($makefiles)
AC_OUTPUT AC_OUTPUT
rm -f $objdir/sysdep/paths.h
cat >&AC_FD_MSG <<EOF cat >&AC_FD_MSG <<EOF
BIRD was configured with the following options: BIRD was configured with the following options:

View file

@ -372,6 +372,8 @@ sub process_file
} }
} }
# #
local $ENV{PATH} = "$ENV{PATH}:/usr/lib/linuxdoc-tools";
my($precmd) = "|sgmlpre output=$global->{format} $global->{define}"; my($precmd) = "|sgmlpre output=$global->{format} $global->{define}";
# #

View file

@ -1,46 +1,48 @@
root-rel=../
dir-name=doc
ifneq ($(wildcard ../Rules),)
include ../Rules
else
srcdir=$(shell cd $(root-rel) ; pwd)
srcdir_abs=$(srcdir)
endif
# Force rebuilds # Force rebuilds
.PHONY: prog.sgml bird.sgml .PHONY: progspell docs progdocs userdocs
doc-srcdir := $(shell cd $(s) && pwd)
sgml2 := $(doc-srcdir)/sgml2
docs: progdocs userdocs docs: progdocs userdocs
progdocs: prog.html prog.ps
userdocs: bird.html bird.ps
prog.sgml: doc-fmt = $(1): $(o)prog.$(1) $(o)bird.$(1)
$(srcdir)/tools/progdoc $(srcdir_abs) $(call doc-fmt,html)
$(call doc-fmt,dvi)
$(call doc-fmt,ps)
$(call doc-fmt,pdf)
%.html: %.sgml progdocs: $(o)prog.html $(o)prog.pdf
./sgml2html $< userdocs: $(o)bird.html $(o)bird.pdf
progspell: $(o)prog.spell
%.dvi: %.tex $(o)prog.sgml: $(srcdir)/tools/progdoc $(objdir)/.dir-stamp
latex $< $(srcdir)/tools/progdoc $(srcdir) $@
latex $<
%.ps: %.dvi $(o)%.sgml: $(s)%.sgml $(objdir)/.dir-stamp
cp $< $@
$(o)%.html: $(o)%.sgml
cd $(dir $@) && $(sgml2)html $(notdir $<)
$(o)%.dvi: $(o)%.tex
cd $(dir $@) && TEXINPUTS=$(TEXINPUTS):$(doc-srcdir)/tex latex $(notdir $<)
cd $(dir $@) && TEXINPUTS=$(TEXINPUTS):$(doc-srcdir)/tex latex $(notdir $<)
$(o)%.ps: $(o)%.dvi
dvips -D600 -ta4 -o $@ $< dvips -D600 -ta4 -o $@ $<
%.tex: %.sgml $(o)%.pdf: $(o)%.ps
./sgml2latex --output=tex $< ps2pdf $< $@
%.txt: %.sgml $(o)%.tex: $(o)%.sgml
./sgml2txt $< cd $(dir $@) && $(sgml2)latex --output=tex $(notdir $<)
progspell: prog.sgml $(o)%.txt: $(o)%.sgml
sed -f prog-spell.sed <prog.sgml >prog.spell cd $(dir $@) && $(sgml2)txt $(notdir $<)
ispell prog.spell
clean: $(o)prog.spell: $(o)prog.sgml $(s)prog-spell.sed
rm -f *.tex *.dvi *.log *.txt *.aux *.toc *.spell sed -f $(lastword $^) <$< >$@
rm -f prog.sgml ispell $@
distclean: clean $(call clean,prog.spell $(addprefix *.,html dvi ps pdf sgml tex txt aux log toc))
rm -f *.html *.ps

View file

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs); use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr"; $prefix = "/usr";
$DataDir = "sbase"; $DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin"; $BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools"; use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms", "GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich" "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
}; };
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog"; $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm"; require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init; &LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("html", @ARGV); my @FileList = LinuxDocTools::process_options ("html", @ARGV);

View file

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs); use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr"; $prefix = "/usr";
$DataDir = "sbase"; $DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin"; $BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools"; use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms", "GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich" "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
}; };
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog"; $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm"; require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init; &LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("latex", @ARGV); my @FileList = LinuxDocTools::process_options ("latex", @ARGV);

View file

@ -17,8 +17,10 @@ use strict;
use vars qw($prefix $DataDir $BinDir $progs); use vars qw($prefix $DataDir $BinDir $progs);
use FindBin;
$prefix = "/usr"; $prefix = "/usr";
$DataDir = "sbase"; $DataDir = "$FindBin::Bin/sbase";
$BinDir = "/usr/bin"; $BinDir = "/usr/bin";
use lib "/usr/share/linuxdoc-tools"; use lib "/usr/share/linuxdoc-tools";
@ -32,9 +34,9 @@ $progs = {
"GROFFMACRO" => "-ms", "GROFFMACRO" => "-ms",
"AWK" => "/usr/share/linuxdoc-tools/awkwhich" "AWK" => "/usr/share/linuxdoc-tools/awkwhich"
}; };
$ENV{"SGML_CATALOG_FILES"} = "sbase/dtd/catalog"; $ENV{"SGML_CATALOG_FILES"} = "$DataDir/dtd/catalog";
require "./LinuxDocTools.pm"; require "$FindBin::Bin/LinuxDocTools.pm";
&LinuxDocTools::init; &LinuxDocTools::init;
my @FileList = LinuxDocTools::process_options ("txt", @ARGV); my @FileList = LinuxDocTools::process_options ("txt", @ARGV);

View file

@ -1,5 +1,4 @@
source=f-util.c filter.c tree.c trie.c src := filter.c f-util.c tree.c trie.c
root-rel=../ obj := $(src-o-files)
dir-name=filter $(all-daemon)
$(cf-local)
include ../Rules

View file

@ -1,5 +1,5 @@
H Library functions H Library functions
S ip.c ipv4.c ipv6.c S ip.c
S lists.c S lists.c
S checksum.c bitops.c patmatch.c printf.c xmalloc.c tbf.c S checksum.c bitops.c patmatch.c printf.c xmalloc.c tbf.c
D resource.sgml D resource.sgml

7
lib/Makefile Normal file
View file

@ -0,0 +1,7 @@
src := bitops.c checksum.c ip.c lists.c md5.c net.c patmatch.c printf.c sha1.c sha256.c sha512.c slists.c xmalloc.c
obj := $(src-o-files)
$(all-client)
src := bitops.c checksum.c event.c idm.c ip.c lists.c md5.c mempool.c net.c patmatch.c printf.c resource.c sha1.c sha256.c sha512.c slab.c slists.c tbf.c xmalloc.c
obj := $(src-o-files)
$(all-daemon)

View file

@ -1,36 +0,0 @@
sha256.c
sha256.h
sha512.c
sha512.h
sha1.c
sha1.h
birdlib.h
bitops.c
bitops.h
idm.c
idm.h
ip.c
ip.h
lists.c
lists.h
md5.c
md5.h
mempool.c
resource.c
resource.h
slab.c
socket.h
tbf.c
unaligned.h
xmalloc.c
printf.c
string.h
patmatch.c
slists.c
slists.h
event.c
event.h
checksum.c
checksum.h
alloca.h
net.c

View file

@ -9,8 +9,8 @@
#ifndef _BIRD_BIRDLIB_H_ #ifndef _BIRD_BIRDLIB_H_
#define _BIRD_BIRDLIB_H_ #define _BIRD_BIRDLIB_H_
#include "timer.h" #include "sysdep/unix/timer.h"
#include "alloca.h" #include "lib/alloca.h"
/* Ugly structure offset handling macros */ /* Ugly structure offset handling macros */

View file

@ -9,7 +9,7 @@
#ifndef _BIRD_IP_H_ #ifndef _BIRD_IP_H_
#define _BIRD_IP_H_ #define _BIRD_IP_H_
#include "lib/endian.h" #include "sysdep/unix/endian.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/bitops.h" #include "lib/bitops.h"
#include "lib/unaligned.h" #include "lib/unaligned.h"

View file

@ -17,7 +17,7 @@
* if possible. * if possible.
*/ */
#include "lib/endian.h" #include "sysdep/unix/endian.h"
#include "lib/string.h" #include "lib/string.h"
static inline u16 static inline u16

View file

@ -1,6 +1,4 @@
source=rt-table.c rt-fib.c rt-attr.c proto.c iface.c rt-dev.c password.c cli.c locks.c cmds.c neighbor.c \ src := a-path.c a-set.c cli.c cmds.c iface.c locks.c neighbor.c password.c proto.c rt-attr.c rt-dev.c rt-fib.c rt-table.c
a-path.c a-set.c obj := $(src-o-files)
root-rel=../ $(all-daemon)
dir-name=nest $(cf-local)
include ../Rules

View file

@ -9,7 +9,7 @@
#ifndef PASSWORD_H #ifndef PASSWORD_H
#define PASSWORD_H #define PASSWORD_H
#include "lib/timer.h" #include "sysdep/unix/timer.h"
struct password_item { struct password_item {
node n; node n;

View file

@ -12,7 +12,7 @@
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/event.h" #include "lib/event.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "nest/route.h" #include "nest/route.h"
#include "conf/conf.h" #include "conf/conf.h"

View file

@ -11,7 +11,7 @@
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
//#include "nest/protocol.h" //#include "nest/protocol.h"
struct ea_list; struct ea_list;

View file

@ -1,5 +1,4 @@
source=bfd.c packets.c io.c src := bfd.c io.c packets.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/bfd $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -12,7 +12,7 @@
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/event.h" #include "lib/event.h"
#include "lib/socket.h" #include "lib/socket.h"
// #include "lib/timer.h" // #include "sysdep/unix/timer.h"
typedef struct timer2 typedef struct timer2

View file

@ -1,5 +1,4 @@
source=bgp.c attrs.c packets.c src := attrs.c bgp.c packets.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/bgp $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -1,5 +1,4 @@
source=ospf.c topology.c packet.c hello.c neighbor.c iface.c dbdes.c lsreq.c lsupd.c lsack.c lsalib.c rt.c src := dbdes.c hello.c iface.c lsack.c lsalib.c lsreq.c lsupd.c neighbor.c ospf.c packet.c rt.c topology.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/ospf $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -18,7 +18,7 @@
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/slists.h" #include "lib/slists.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "nest/protocol.h" #include "nest/protocol.h"
#include "nest/iface.h" #include "nest/iface.h"

View file

@ -1,6 +1,4 @@
source=pipe.c src := pipe.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/pipe $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -1,5 +1,4 @@
source=radv.c packets.c src := packets.c radv.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/radv $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -13,7 +13,7 @@
#include "lib/ip.h" #include "lib/ip.h"
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "nest/protocol.h" #include "nest/protocol.h"
#include "nest/iface.h" #include "nest/iface.h"

View file

@ -1,5 +1,4 @@
source=rip.c packets.c src := packets.c rip.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/rip $(all-daemon)
$(cf-local)
include ../../Rules

View file

@ -24,7 +24,7 @@
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#define RIP_V1 1 #define RIP_V1 1

View file

@ -1,6 +1,4 @@
source=static.c src := static.c
root-rel=../../ obj := $(src-o-files)
dir-name=proto/static $(all-daemon)
$(cf-local)
include ../../Rules

5
sysdep/bsd/Makefile Normal file
View file

@ -0,0 +1,5 @@
src := krt-sock.c
obj := $(src-o-files)
$(all-daemon)
$(conf-y-targets): $(s)krt-sock.Y

View file

@ -1,4 +0,0 @@
krt-sock.c
krt-sock.Y
krt-sys.h
sysio.h

View file

@ -28,9 +28,9 @@
#include "nest/route.h" #include "nest/route.h"
#include "nest/protocol.h" #include "nest/protocol.h"
#include "nest/iface.h" #include "nest/iface.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/unix.h" #include "sysdep/unix/unix.h"
#include "lib/krt.h" #include "sysdep/unix/krt.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/socket.h" #include "lib/socket.h"

View file

@ -15,6 +15,9 @@
#define CONFIG_NO_IFACE_BIND #define CONFIG_NO_IFACE_BIND
#define CONFIG_USE_HDRINCL #define CONFIG_USE_HDRINCL
#define CONFIG_INCLUDE_SYSIO_H "sysdep/bsd/sysio.h"
#define CONFIG_INCLUDE_KRTSYS_H "sysdep/bsd/krt-sys.h"
/* /*
Link: sysdep/unix Link: sysdep/unix
Link: sysdep/bsd Link: sysdep/bsd

View file

@ -14,7 +14,12 @@
#define CONFIG_MC_PROPER_SRC #define CONFIG_MC_PROPER_SRC
#define CONFIG_UNIX_DONTROUTE #define CONFIG_UNIX_DONTROUTE
#define CONFIG_INCLUDE_SYSIO_H "sysdep/linux/sysio.h"
#define CONFIG_INCLUDE_KRTSYS_H "sysdep/linux/krt-sys.h"
#define CONFIG_RESTRICTED_PRIVILEGES #define CONFIG_RESTRICTED_PRIVILEGES
#define CONFIG_INCLUDE_SYSPRIV_H "sysdep/linux/syspriv.h"
/* /*
Link: sysdep/linux Link: sysdep/linux

4
sysdep/linux/Makefile Normal file
View file

@ -0,0 +1,4 @@
src := netlink.c
obj := $(src-o-files)
$(all-daemon)
$(conf-y-targets): $(s)netlink.Y

View file

@ -1,5 +0,0 @@
krt-sys.h
netlink.c
netlink.Y
sysio.h
syspriv.h

View file

@ -20,9 +20,9 @@
#include "nest/protocol.h" #include "nest/protocol.h"
#include "nest/iface.h" #include "nest/iface.h"
#include "lib/alloca.h" #include "lib/alloca.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/unix.h" #include "sysdep/unix/unix.h"
#include "lib/krt.h" #include "sysdep/unix/krt.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/hash.h" #include "lib/hash.h"

5
sysdep/unix/Makefile Normal file
View file

@ -0,0 +1,5 @@
src := io.c krt.c log.c main.c random.c
obj := $(src-o-files)
$(all-daemon)
$(cf-local)
$(conf-y-targets): $(s)krt.Y

View file

@ -1,12 +0,0 @@
log.c
main.c
timer.h
io.c
unix.h
endian.h
config.Y
random.c
krt.c
krt.h
krt.Y

View file

@ -8,7 +8,7 @@
CF_HDR CF_HDR
#include "lib/unix.h" #include "sysdep/unix/unix.h"
#include <stdio.h> #include <stdio.h>
CF_DECLS CF_DECLS

View file

@ -31,14 +31,14 @@
#include "nest/bird.h" #include "nest/bird.h"
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/resource.h" #include "lib/resource.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "lib/socket.h" #include "lib/socket.h"
#include "lib/event.h" #include "lib/event.h"
#include "lib/string.h" #include "lib/string.h"
#include "nest/iface.h" #include "nest/iface.h"
#include "lib/unix.h" #include "sysdep/unix/unix.h"
#include "lib/sysio.h" #include CONFIG_INCLUDE_SYSIO_H
/* Maximum number of calls of tx handler for one socket in one /* Maximum number of calls of tx handler for one socket in one
* select iteration. Should be small enough to not monopolize CPU by * select iteration. Should be small enough to not monopolize CPU by

View file

@ -8,7 +8,7 @@
CF_HDR CF_HDR
#include "lib/krt.h" #include "sysdep/unix/krt.h"
CF_DEFINES CF_DEFINES

View file

@ -56,7 +56,7 @@
#include "nest/route.h" #include "nest/route.h"
#include "nest/protocol.h" #include "nest/protocol.h"
#include "filter/filter.h" #include "filter/filter.h"
#include "lib/timer.h" #include "sysdep/unix/timer.h"
#include "conf/conf.h" #include "conf/conf.h"
#include "lib/string.h" #include "lib/string.h"

View file

@ -15,7 +15,8 @@ struct krt_proto;
struct kif_config; struct kif_config;
struct kif_proto; struct kif_proto;
#include "lib/krt-sys.h" #include "sysdep/config.h"
#include CONFIG_INCLUDE_KRTSYS_H
/* Flags stored in net->n.flags, rest are in nest/route.h */ /* Flags stored in net->n.flags, rest are in nest/route.h */
@ -111,7 +112,7 @@ struct kif_proto {
struct kif_state sys; /* Sysdep state */ struct kif_state sys; /* Sysdep state */
}; };
struct kif_proto *kif_proto; extern struct kif_proto *kif_proto;
#define KIF_CF ((struct kif_config *)p->p.cf) #define KIF_CF ((struct kif_config *)p->p.cf)

View file

@ -26,7 +26,7 @@
#include "nest/mrtdump.h" #include "nest/mrtdump.h"
#include "lib/string.h" #include "lib/string.h"
#include "lib/lists.h" #include "lib/lists.h"
#include "lib/unix.h" #include "sysdep/unix/unix.h"
static FILE *dbgf; static FILE *dbgf;
static list *current_log_list; static list *current_log_list;

View file

@ -69,7 +69,7 @@ async_dump(void)
*/ */
#ifdef CONFIG_RESTRICTED_PRIVILEGES #ifdef CONFIG_RESTRICTED_PRIVILEGES
#include "lib/syspriv.h" #include CONFIG_INCLUDE_SYSPRIV_H
#else #else
static inline void static inline void
@ -567,6 +567,10 @@ sysdep_shutdown_done(void)
* Signals * Signals
*/ */
volatile int async_config_flag;
volatile int async_dump_flag;
volatile int async_shutdown_flag;
static void static void
handle_sighup(int sig UNUSED) handle_sighup(int sig UNUSED)
{ {

View file

@ -91,9 +91,9 @@ int sockaddr_read(sockaddr *sa, int af, ip_addr *a, struct iface **ifa, uint *po
#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen ((ptr)->sun_path)) #define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen ((ptr)->sun_path))
#endif #endif
volatile int async_config_flag; extern volatile int async_config_flag;
volatile int async_dump_flag; extern volatile int async_dump_flag;
volatile int async_shutdown_flag; extern volatile int async_shutdown_flag;
void io_init(void); void io_init(void);
void io_loop(void); void io_loop(void);

View file

@ -1,20 +0,0 @@
# Makefile for in place build of BIRD
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
objdir=@objdir@
all depend tags install install-docs:
$(MAKE) -C $(objdir) $@
docs userdocs progdocs:
$(MAKE) -C doc $@
clean:
$(MAKE) -C $(objdir) clean
find . -name "*~" -or -name "*.[oa]" -or -name "\#*\#" -or -name TAGS -or -name core -or -name depend -or -name ".#*" | xargs rm -f
distclean: clean
$(MAKE) -C doc distclean
rm -rf $(objdir) autom4te.cache
rm -f config.* configure sysdep/autoconf.h sysdep/paths.h Makefile

View file

@ -1,97 +0,0 @@
# Makefile for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
include Rules
.PHONY: all daemon birdc birdcl subdir depend clean distclean tags docs userdocs progdocs
all: sysdep/paths.h .dep-stamp subdir daemon birdcl @CLIENT@
daemon: $(exedir)/bird
birdc: $(exedir)/birdc
birdcl: $(exedir)/birdcl
bird-dep := $(addsuffix /all.o, $(static-dirs)) conf/all.o lib/birdlib.a
$(bird-dep): sysdep/paths.h .dep-stamp subdir
birdc-dep := client/birdc.o client/all.o lib/birdlib.a
$(birdc-dep): sysdep/paths.h .dep-stamp subdir
birdcl-dep := client/birdcl.o client/all.o lib/birdlib.a
$(birdcl-dep): sysdep/paths.h .dep-stamp subdir
export client := @CLIENT@
depend: sysdep/paths.h .dir-stamp
set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done
set -e ; for a in $(static-dirs) $(client-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
subdir: sysdep/paths.h .dir-stamp .dep-stamp
set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done
set -e ; for a in $(static-dirs) $(client-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
$(exedir)/bird: $(bird-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(exedir)/birdc: $(birdc-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS) $(CLIENT_LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(CLIENT_LIBS)
$(exedir)/birdcl: $(birdcl-dep)
@echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
@$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
.dir-stamp: sysdep/paths.h
mkdir -p $(static-dirs) $(client-dirs) $(doc-dirs)
touch .dir-stamp
.dep-stamp:
$(MAKE) depend
touch .dep-stamp
docs: userdocs progdocs
userdocs progdocs: .dir-stamp
$(MAKE) -C doc -f $(srcdir_abs)/doc/Makefile $@
sysdep/paths.h:
echo >sysdep/paths.h "/* Generated by Makefile, don't edit manually! */"
echo >>sysdep/paths.h "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
echo >>sysdep/paths.h "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
if test -n "@iproutedir@" ; then echo >>sysdep/paths.h "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
tags:
cd $(srcdir) ; etags -lc `find $(static-dirs) $(addprefix $(objdir)/,$(dynamic-dirs)) $(client-dirs) -name *.[chY]`
install: all
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/@runtimedir@
$(INSTALL_PROGRAM) $(exedir)/bird $(DESTDIR)/$(sbindir)/bird
$(INSTALL_PROGRAM) $(exedir)/birdcl $(DESTDIR)/$(sbindir)/birdcl
if test -n "@CLIENT@" ; then \
$(INSTALL_PROGRAM) $(exedir)/birdc $(DESTDIR)/$(sbindir)/birdc ; \
fi
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
else \
echo "Not overwriting old bird.conf" ; \
fi
install-docs:
$(INSTALL) -d $(DESTDIR)/$(docdir)
$(INSTALL_DATA) $(srcdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
clean:
find . -name "*.[oa]" -o -name core -o -name depend -o -name "*.html" | xargs rm -f
rm -f conf/cf-lex.c conf/cf-parse.* conf/commands.h conf/keywords.h
rm -f $(exedir)/bird $(exedir)/birdcl $(exedir)/birdc $(exedir)/bird.ctl $(exedir)/bird6.ctl .dep-stamp
distclean: clean
rm -f config.* configure sysdep/autoconf.h sysdep/paths.h Makefile Rules
rm -rf .dir-stamp $(clean-dirs)

View file

@ -1,91 +0,0 @@
# Makefile fragments for the BIRD Internet Routing Daemon
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
srcdir=@srcdir_rel_mf@
srcdir_abs := $(shell cd $(srcdir) ; pwd)
objdir=@objdir@
exedir=@exedir@
protocols=@protocols@
static-dirs := nest filter $(addprefix proto/,$(protocols))
static-dir-paths := $(addprefix $(srcdir)/,$(static-dirs))
dynamic-dirs := lib conf
dynamic-dir-paths := $(dynamic-dirs)
client-dirs := client
client-dir-paths := $(client-dirs)
doc-dirs := doc
doc-dir-paths := $(doc-dirs)
all-dirs:=$(static-dirs) $(dynamic-dirs) $(client-dirs) $(doc-dirs)
clean-dirs:=$(all-dirs) proto sysdep
CPPFLAGS=-I$(root-rel) -I$(srcdir) @CPPFLAGS@
CFLAGS=$(CPPFLAGS) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
CLIENT_LIBS=@CLIENT_LIBS@
CC=@CC@
M4=@M4@
BISON=@BISON@
FLEX=@FLEX@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_DATA=@INSTALL_DATA@
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
sysconfdir=@sysconfdir@
localstatedir=@localstatedir@
docdir=@prefix@/doc
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 $@ $^
# Changed to $(CC) because $(LD) has problems with crosscompiling
@echo LD -r -o $@ $^
@$(CC) -nostdlib -r -o $@ $^
endif
%.o: $(src-path)%.c
@echo CC -o $@ -c $<
@$(CC) $(CFLAGS) -o $@ -c $<
ifndef source-dep
source-dep := $(source)
endif
depend:
$(CC) $(CPPFLAGS) -MM $(addprefix $(src-path),$(source-dep)) >depend
ifneq ($(wildcard depend),)
include depend
endif
endif

View file

@ -1,63 +0,0 @@
#!/bin/sh
if [ -z "$4" ] ; then
echo "Usage: mergedirs <src-dir> <src-dir-rel> <obj-dir> <list-of-dirs>"
exit 1
fi
cpp=${CPP:-cc -E}
SRCDIR=$1
shift
SRCREL=$1
case $SRCDIR in
/*) ;;
*) SRCREL="../$SRCREL" ;;
esac
shift
OBJDIR=$1
LIBDIR=$OBJDIR/lib
CONFDIR=$OBJDIR/conf
shift
echo "Merging system-dependent modules ($@)"
MODULES=`for a in $@ ; do
cat $SRCDIR/sysdep/config.h $SRCDIR/$a/Modules |
$cpp -U unix -D MACROS_ONLY -I $OBJDIR - |
sed "/^[ ]*\$/d;/^#/d;s@\\(.*\\)@\\1 $a/\\1@"
done |
sort -k1,1 -u |
cut -d ' ' -f 2`
rm -rf $LIBDIR $CONFDIR
mkdir -p $LIBDIR $CONFDIR
for a in $MODULES ; do
b=`basename $a`
case $b in
*.h) ln -s $SRCREL/$a $LIBDIR/$b
;;
*.c) OBJ=`echo $b | sed 's/\.c$/\.o/'`
OBJS="$OBJS $OBJ"
SRCS="$SRCS \\
$b"
ln -s $SRCREL/$a $LIBDIR/$b
;;
*.Y) CONFS="$CONFS\$(srcdir)/$a "
ln -s $SRCREL/$a $CONFDIR/$b
;;
*) echo "$b: Unknown file type"
exit 1
;;
esac
done
cat >$LIBDIR/Makefile <<EOF
source=$SRCS
lib-dest=birdlib.a
root-rel=../
include ../Rules
EOF
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

View file

@ -1,17 +1,18 @@
#!/usr/bin/perl #!/usr/bin/perl
$srcdir = $ARGV[0]; $srcdir = $ARGV[0];
$out = $ARGV[1];
open(OUT, ">prog.sgml") || die "Cannot create output file"; open(OUT, ">", $out) || die "Cannot create output file";
include("doc/prog-head.sgml"); process($srcdir);
process("");
include("doc/prog-foot.sgml");
close OUT; close OUT;
gen_deps();
exit 0; exit 0;
sub include { sub include {
my $f = shift @_; my $f = shift @_;
open(IN, "$srcdir/$f") || die "Unable to find $f"; open(IN, "$f") || die "Unable to find $f";
push(@deps, "$f");
while (<IN>) { while (<IN>) {
print OUT; print OUT;
} }
@ -21,7 +22,8 @@ sub include {
sub process { sub process {
my $dir = shift @_; my $dir = shift @_;
print "$dir/Doc\n"; print "$dir/Doc\n";
open(IN, "$srcdir/$dir/Doc") || die "Unable to read $dir/Doc"; open(IN, "$dir/Doc") || die "Unable to read $dir/Doc";
push(@deps, "$dir/Doc");
my @docfile = <IN>; my @docfile = <IN>;
close IN; close IN;
foreach $_ (@docfile) { foreach $_ (@docfile) {
@ -36,7 +38,10 @@ sub process {
print OUT "<chapt>$arg\n"; print OUT "<chapt>$arg\n";
} elsif ($cmd eq "S") { } elsif ($cmd eq "S") {
print " $arg\n"; print " $arg\n";
open(DOC, "cd $srcdir/$dir ; $srcdir/doc/kernel-doc -bird $arg |") || die "Unable to start kernel-doc"; my @files = map("$dir/$_", split(' ', $arg));
my $fargs = join(' ', @files);
open(DOC, "$srcdir/doc/kernel-doc -bird $fargs |") || die "Unable to start kernel-doc";
push(@deps, @files);
while (<DOC>) { print OUT; } while (<DOC>) { print OUT; }
close DOC; close DOC;
} elsif ($cmd eq "D") { } elsif ($cmd eq "D") {
@ -45,3 +50,17 @@ sub process {
} else { die "Unknown command: $cmd"; } } else { die "Unknown command: $cmd"; }
} }
} }
sub gen_deps {
open(DEP, ">", "$out.d");
print DEP "$out:";
foreach $f (@deps) {
print DEP " \\\n $f";
}
print DEP "\n\n";
foreach $f (@deps) {
print DEP "$f:\n\n";
}
close DEP;
}