Include stand-alone config parser in makefile
authorSven-Ola Tuecke <sven-ola@gmx.de>
Tue, 20 Jan 2009 08:51:45 +0000 (09:51 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Tue, 20 Jan 2009 08:51:45 +0000 (09:51 +0100)
to make sure that it can be compiled and nobody has
added global variables or references to olsr_cfg to
the wrong places.

Makefile
gui/win32/mk.sh [deleted file]
src/config/README [new file with mode: 0644]
src/config/config-verify.c [moved from gui/win32/win32verify.c with 74% similarity]
src/config/local.mk [new file with mode: 0644]
src/olsr_cfg_gen.c

index 6e3c93c..ff93b1f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -65,6 +65,9 @@ ifeq ($(LD_HAS_DYN), yes)
 endif
                $(CC) $(LDFLAGS) $(LDFLAGS_EXE) -o $@ $^ $(LIBS)
 
+CONFDIR = src/config
+include $(CONFDIR)/local.mk
+
 show-ignored-warnings:
        CC="$(CC)" $(TOPDIR)/gcc-warnings $(ALL_WARNINGS) > /dev/null
 
@@ -91,11 +94,6 @@ ifeq ($(OS), win32)
        -rm -fr gui/win32/Shim/Release
 endif
 
-uberclean:     clean clean_libs
-       -rm -f $(TAGFILE)
-#      BSD-xargs has no "--no-run-if-empty" aka "-r"
-       find . \( -name '*.[od]' -o -name '*~' \) -not -path "*/.hg*" -print0 | xargs -0 rm -f
-
 install: install_olsrd
 
 install_bin:
@@ -229,6 +227,11 @@ watchdog:
                $(MAKECMD) -C lib/watchdog
                $(MAKECMD) -C lib/watchdog DESTDIR=$(DESTDIR) install
 
-build_all:     all libs
-install_all:   install install_libs
-clean_all:     uberclean clean_libs
+build_all:     all libs config-verify
+install_all:   install install_libs config-verify_install
+clean_all:     clean clean_libs config-verify_clean
+
+uberclean: clean_all
+       -rm -f $(TAGFILE)
+#      BSD-xargs has no "--no-run-if-empty" aka "-r"
+       find . \( -name '*.[od]' -o -name '*~' \) -not -path "*/.hg*" -print0 | xargs -0 rm -f
diff --git a/gui/win32/mk.sh b/gui/win32/mk.sh
deleted file mode 100755 (executable)
index f572e32..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-#CFLAGS="-O0 -ggdb -DDEBUG"
-CFLAGS="-ggdb -O2 -DNODEBUG -DNDEBUG"
-
-SRCS="olsr_cfg olsr_cfg_gen olsr_ip_acl olsr_ip_prefix_list olsr_cfg_data ipcalc builddata common/autobuf"
-OBJS=
-
-for i in $SRCS; do
-  gcc -Werror -Wall -I../../src $CFLAGS -c ../../src/$i.c
-  OBJS="$OBJS ${i##*/}.o"
-done
-gcc -Werror -Wall -I../../src $CFLAGS -o win32verify win32verify.c $OBJS
diff --git a/src/config/README b/src/config/README
new file mode 100644 (file)
index 0000000..c9c1115
--- /dev/null
@@ -0,0 +1,9 @@
+The config-verify program has the following purpose:
+
+* Verify, that a stand-alone parser compiles
+* The program can be used for config-laundering
+* Compiles a DLL for loading with Win32-GUI (Switch)
+
+Please note, that you should not execute the compiled
+program as part of the makefiles, because this compilcates
+adaptions for cross-compiling very much.
similarity index 74%
rename from gui/win32/win32verify.c
rename to src/config/config-verify.c
index 96fc03f..7c2e68c 100644 (file)
@@ -76,54 +76,42 @@ char *olsr_strndup(const char *s, size_t n)
 
 /************ GLOBALS(end) ***********/
 
-static int write_cnf(struct olsr_config *cnf, const char *fname)
-{
-  FILE *fd;
-  struct autobuf abuf;
-  if (0 != strcmp(fname, "-")) {
-    fd = fopen(fname, "w");
-    if (fd == NULL) {
-      fprintf(stderr, "Could not open file %s for writing\n%s\n", fname, strerror(errno));
-      return -1;
-    }
-  }
-  else {
-    fd = stdout;
-  }
-
-  printf("Writing config to file \"%s\".... ", fname);
-
-  abuf_init(&abuf, 0);
-  olsr_write_cnf_buf(&abuf, cnf, false);
-  fputs(abuf.buf, fd);
-
-  abuf_free(&abuf);
-  if (0 != strcmp(fname, "-")) {
-    fclose(fd);
-  }
-  printf("DONE\n");
-
-  return 1;
-}
-
 int main(int argc, char *argv[])
 {
-  int i, ret = 0;
+  int i, ret = EXIT_SUCCESS;
 #ifndef NODEBUG
   debug_handle = stdout;
 #endif
+  
   for (i = 1; i < argc; i++) {
+    const char *sres;
     struct olsr_config *cfg_tmp;
-    char cfg_msg[FILENAME_MAX + 256];
+    char cfg_msg[FILENAME_MAX + 256] = { 0 };
+    olsr_parse_cfg_result res = olsr_parse_cfg(0, NULL, argv[i], cfg_msg, &cfg_tmp);
+
+    switch(res) {
+      case CFG_ERROR: sres = "ERROR"; break;
+      case CFG_WARN: sres = "WARN"; break;
+      case CFG_EXIT: sres = "EXIT"; break;
+      default: sres = "OK";
+    }
+    
+    fprintf(stderr, "Reading %s returns %s\n", argv[i], sres);
+    
+    if (CFG_OK == res) {
+      struct autobuf abuf;
+
+      fprintf(stderr, "Verifying %s returns %s\n", argv[i], 0 <= olsr_sanity_check_cfg(cfg_tmp) ? "OK" : "ERROR");
 
-    printf("Verifying argv[%d]=%s\n", i, argv[i]);
-    if (CFG_ERROR != olsr_parse_cfg(0, NULL, argv[i], cfg_msg, &cfg_tmp)) {
-      printf("%s verified: %s\n", argv[i], 0 <= olsr_sanity_check_cfg(cfg_tmp) ? "yes" : "no");
-      if (&write_cnf != NULL) write_cnf(cfg_tmp, "-");
+      abuf_init(&abuf, 0);
+      olsr_write_cnf_buf(&abuf, cfg_tmp, false);
+      fputs(abuf.buf, stdout);
+      abuf_free(&abuf);
+      
     }
     else {
-      fprintf(stderr, "%s not verified. %s\n", argv[i], cfg_msg);
-      ret = 1;
+      fprintf(stderr, "Error message: %s\n", cfg_msg);
+      ret = EXIT_FAILURE;
     }
     olsr_free_cfg(cfg_tmp);
   }
diff --git a/src/config/local.mk b/src/config/local.mk
new file mode 100644 (file)
index 0000000..0360a1f
--- /dev/null
@@ -0,0 +1,62 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in
+#   the documentation and/or other materials provided with the
+#   distribution.
+# * Neither the name of olsr.org, olsrd nor the names of its
+#   contributors may be used to endorse or promote products derived
+#   from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Visit http://www.olsr.org for more information.
+#
+# If you find this software useful feel free to make a donation
+# to the project. For more information see the website or contact
+# the copyright holders.
+#
+
+CONFSRCS += src/olsr_cfg.c
+CONFSRCS += src/olsr_cfg_gen.c
+CONFSRCS += src/olsr_ip_acl.c
+CONFSRCS += src/olsr_ip_prefix_list.c
+CONFSRCS += src/olsr_cfg_data.c
+CONFSRCS += src/ipcalc.c
+CONFSRCS += src/builddata.c
+CONFSRCS += src/common/autobuf.c
+CONFSRCS += $(CONFDIR)/config-verify.c
+
+CONFOBJS += $(CONFSRCS:%.c=%.o)
+
+config-verify: $(CONFOBJS)
+       $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+
+.PHONY: config-verify_clean config-verify_install
+
+config-verify_clean:
+       rm -f $(CONFOBJS)
+       rm -f config-verify
+
+config-verify_install:
+       # executable not to be installed
+       $(STRIP) config-verify
index bbc4715..c8441f2 100644 (file)
@@ -63,7 +63,7 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
   const char *s;
 
   abuf_appendf(abuf, "#\n"
-               "# Configuration file for %s\n" "# automatically generated by olsrd-cnf parser\n" "#\n\n", olsrd_version);
+               "# Generated config file for %s\n" "#\n\n", olsrd_version);
 
   /* Debug level */
   abuf_appendf(abuf, "# Debug level(0-9)\n"
@@ -287,7 +287,6 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
       abuf_appendf(abuf, "}\n\n");
     }
   }
-  abuf_appendf(abuf, "\n# END AUTOGENERATED CONFIG\n");
 }
 
 /*