From 9fac310d1a4e46f4bcc70177e59cbf93763ef479 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 19 Jan 2000 15:07:00 +0000 Subject: [PATCH] Put client on a stony ground. The whole client is going to be system-specific (the current version UNIX-specific) anyway, so it's useless to try splitting it to sysdep and generic part. Instead of this, configure script decides (based on system type and user's wish) what (if any) client should be built and what autoconfiguration it requires. Also, the client provides its own die/bug/... functions. --- client/Makefile | 2 +- client/client.c | 45 +++++++++++++++++++++++------ client/client.h | 6 +--- client/commands.c | 20 +++++++++++++ client/util.c | 40 +++++++++++++++++++++++++ configure.in | 11 ++++++- sysdep/unix/Modules | 2 -- sysdep/unix/client-main.c | 61 --------------------------------------- tools/Makefile.in | 10 +++++-- 9 files changed, 115 insertions(+), 82 deletions(-) create mode 100644 client/commands.c create mode 100644 client/util.c delete mode 100644 sysdep/unix/client-main.c diff --git a/client/Makefile b/client/Makefile index 0d01724f..867476cc 100644 --- a/client/Makefile +++ b/client/Makefile @@ -1,4 +1,4 @@ -source=client.c +source=client.c commands.c util.c root-rel=../ dir-name=client diff --git a/client/client.c b/client/client.c index 2a43a8de..e9bc827d 100644 --- a/client/client.c +++ b/client/client.c @@ -6,21 +6,48 @@ * Can be freely distributed and used under the terms of the GNU GPL. */ +#include +#include +#include +#include + #include "nest/bird.h" +#include "lib/resource.h" #include "client/client.h" -struct cmd_info { - char *command; - char *args; - char *help; -}; +static char *opt_list = ""; -static struct cmd_info command_table[] = { -#include "conf/commands.h" -}; +static void +usage(void) +{ + fprintf(stderr, "Usage: birdc\n"); + exit(1); +} + +static void +parse_args(int argc, char **argv) +{ + int c; + + while ((c = getopt(argc, argv, opt_list)) >= 0) + switch (c) + { + default: + usage(); + } + if (optind < argc) + usage(); +} int main(int argc, char **argv) { - return client_main(argc, argv); /* Call sysdep code */ +#ifdef HAVE_LIBDMALLOC + if (!getenv("DMALLOC_OPTIONS")) + dmalloc_debug(0x2f03d00); +#endif + + parse_args(argc, argv); + + bug("Not implemented yet!"); } diff --git a/client/client.h b/client/client.h index b5d6ab16..2e1e050f 100644 --- a/client/client.h +++ b/client/client.h @@ -1,11 +1,7 @@ /* * BIRD Client * - * (c) 1999 Martin Mares + * (c) 1999--2000 Martin Mares * * Can be freely distributed and used under the terms of the GNU GPL. */ - -/* sysdep code */ - -int client_main(int argc, char **argv); diff --git a/client/commands.c b/client/commands.c new file mode 100644 index 00000000..ea9358d8 --- /dev/null +++ b/client/commands.c @@ -0,0 +1,20 @@ +/* + * BIRD Client -- Command Handling + * + * (c) 1999--2000 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include "nest/bird.h" +#include "client/client.h" + +struct cmd_info { + char *command; + char *args; + char *help; +}; + +struct cmd_info command_table[] = { +#include "conf/commands.h" +}; diff --git a/client/util.c b/client/util.c new file mode 100644 index 00000000..65a1fb20 --- /dev/null +++ b/client/util.c @@ -0,0 +1,40 @@ +/* + * BIRD Client -- Utility Functions + * + * (c) 1999--2000 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include +#include +#include +#include + +#include "nest/bird.h" +#include "client/client.h" + +/* Client versions of logging functions */ + +void +bug(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + fputs("Internal error: ", stderr); + vfprintf(stderr, msg, args); + fputc('\n', stderr); + exit(1); +} + +void +die(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + vfprintf(stderr, msg, args); + fputc('\n', stderr); + exit(1); +} diff --git a/configure.in b/configure.in index 5ef82123..1e1fdba7 100644 --- a/configure.in +++ b/configure.in @@ -1,12 +1,13 @@ dnl ** This is a configure script template for BIRD dnl ** Process it with autoconf to get ./configure -dnl ** (c) 1999 Martin Mares +dnl ** (c) 1999--2000 Martin Mares AC_REVISION($Id$) AC_INIT(conf/confbase.Y) AC_CONFIG_AUX_DIR(tools) AC_ARG_ENABLE(debug,[ --enable-debug enable internal debugging routines (default: enabled)],,enable_debug=yes) +AC_ARG_ENABLE(client,[ --enable-client enable building of BIRD client (default: enabled)],,enable_client=yes) AC_ARG_WITH(sysconfig,[ --with-sysconfig=FILE use specified BIRD system configuration file]) AC_ARG_WITH(protocols,[ --with-protocols=LIST include specified routing protocols (default: rip,static,pipe)],,[with_protocols="rip,static,pipe"]) AC_ARG_WITH(sysinclude,[ --with-sysinclude=PATH search for system includes on specified place]) @@ -133,6 +134,13 @@ else AC_DEFINE_UNQUOTED(PATH_CONTROL_SOCKET_DIR, "$localstatedir") fi +if test "$enable_client" = yes ; then + CLIENT=client +else + CLIENT= +fi +AC_SUBST(CLIENT) + mkdir -p $objdir/sysdep AC_CONFIG_HEADER($objdir/sysdep/autoconf.h:sysdep/autoconf.h.in) AC_OUTPUT_COMMANDS(,[CPP="$CPP" $srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs]) @@ -146,5 +154,6 @@ BIRD was configured with the following options: System configuration: $sysdesc Debugging: $enable_debug Routing protocols: $protocols + Client: $enable_client EOF rm -f $objdir/.*-stamp diff --git a/sysdep/unix/Modules b/sysdep/unix/Modules index aca79319..017623e7 100644 --- a/sysdep/unix/Modules +++ b/sysdep/unix/Modules @@ -19,5 +19,3 @@ krt-iface.h krt-set.c krt-set.h #endif - -client-main.c diff --git a/sysdep/unix/client-main.c b/sysdep/unix/client-main.c deleted file mode 100644 index 4fc24338..00000000 --- a/sysdep/unix/client-main.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * BIRD Client -- Unix Entry Point - * - * (c) 1999 Martin Mares - * - * Can be freely distributed and used under the terms of the GNU GPL. - */ - -#include -#include -#include -#include - -#include "nest/bird.h" -#include "lib/resource.h" /* For dmalloc */ -#include "client/client.h" -#include "nest/cli.h" - -#include "unix.h" - -static char *opt_list = ""; - -static void -usage(void) -{ - fprintf(stderr, "Usage: birdc\n"); - exit(1); -} - -static void -parse_args(int argc, char **argv) -{ - int c; - - while ((c = getopt(argc, argv, opt_list)) >= 0) - switch (c) - { - default: - usage(); - } - if (optind < argc) - usage(); -} - -void -cli_echo(unsigned int class, byte *buf) -{ -} - -int -client_main(int argc, char **argv) -{ -#ifdef HAVE_LIBDMALLOC - if (!getenv("DMALLOC_OPTIONS")) - dmalloc_debug(0x2f03d00); -#endif - - parse_args(argc, argv); - - bug("Not implemented yet!"); -} diff --git a/tools/Makefile.in b/tools/Makefile.in index bbf4db07..56d65140 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -1,13 +1,17 @@ # Makefile for the BIRD Internet Routing Daemon -# (c) 1999 Martin Mares +# (c) 1999--2000 Martin Mares include Rules srcdir_abs := $(shell cd $(srcdir) ; pwd) -.PHONY: all subdir depend clean distclean tags +.PHONY: all daemon client subdir depend clean distclean tags -all: .dep-stamp subdir $(exedir)/bird $(exedir)/birdc +all: .dep-stamp subdir daemon @CLIENT@ + +daemon: $(exedir)/bird + +client: $(exedir)/birdc subdir depend: .dir-stamp set -e ; for a in $(dynamic-dirs) ; do $(MAKE) -C $$a $@ ; done