]> granicus.if.org Git - graphviz/commitdiff
add -c argument to dot and friends to explicity generate the config file
authorellson <devnull@localhost>
Wed, 27 Jul 2005 20:37:01 +0000 (20:37 +0000)
committerellson <devnull@localhost>
Wed, 27 Jul 2005 20:37:01 +0000 (20:37 +0000)
do "dot -c" on installation, don't rely on timestamps

cmd/dot/Makefile.am
graphviz.spec.in
lib/common/args.c
lib/common/globals.h
lib/common/input.c
lib/gvc/gvc.c
lib/gvc/gvconfig.c
lib/gvc/gvcproc.h
tclpkg/gv/gv.cpp
tclpkg/tcldot/tcldot.c

index bf9a7e104cb5aae0313358a0fb79ef0d66401105..de09e2100a883affb4e5ec55bd3f856fee74a112 100644 (file)
@@ -25,10 +25,10 @@ install-data-hook:
        (cd $(DESTDIR)$(pdfdir); for i in $(linkedpdf); do rm -f $$i; $(LN_S) dot.pdf $$i; done;)
 
 # create "neato", "fdp" etc as soflinks to "dot"
-# run dot once, if possible, to create plugin config
+# run "dot -c", if possible, to create plugin config
 install-exec-hook:
        (cd $(DESTDIR)$(bindir); for i in $(linkedprogram); do rm -f $$i; $(LN_S) dot $$i; done;)
-       if test "x$(DESTDIR)" = "x"; then (cd $(bindir); ./dot -V 2>/dev/null;); fi
+       if test "x$(DESTDIR)" = "x"; then (cd $(bindir); ./dot -c;); fi
 
 uninstall-hook:
        (cd $(DESTDIR)$(man1dir); for i in $(linkedman); do rm -f $$i; done;)
index fd81da8b15be481dc8c3f462e8cb357d97fe2d42..05ecc659bef579f25895e58a1a4d2a5ac042f7cb 100644 (file)
@@ -152,15 +152,15 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root,-)
 %doc __doc/*
 
-# run "dot -V" to generate plugin config in %{_libdir}/%{name}/config
+# run "dot -c" to generate plugin config in %{_libdir}/%{name}/config
 %post
-%{_bindir}/dot -V 2>/dev/null
+%{_bindir}/dot -c
 
 %post tcl
-%{_bindir}/dot -V 2>/dev/null
+%{_bindir}/dot -c
 
 %post devel
-%{_bindir}/dot -V 2>/dev/null
+%{_bindir}/dot -c
 
 %changelog
 * Wed Jul 20 2005 John Ellson <ellson@research.att.com>
index 23ed8ae2b10705a4fdb6a082d2d36371b2257ceb..f844668d04c6e5ba9aae10e9e0088846036d7c35 100644 (file)
@@ -113,6 +113,36 @@ memtest_extra_args(GVC_t *gvc, int argc, char** argv)
   return cnt;
 }
 
+static int
+config_extra_args(GVC_t *gvc, int argc, char** argv)
+{
+  char** p = argv+1;
+  int    i;
+  char*  arg;
+  int    cnt = 1;
+
+  for (i = 1; i < argc; i++) {
+    arg = argv[i];
+    if (arg && *arg == '-') {
+      switch (arg[1]) {
+      case 'c' : Config = TRUE; break;
+      default :
+        cnt++;
+        if (*p != arg) *p = arg;
+        p++;
+        break;
+      }
+    }
+    else {
+      cnt++;
+      if (*p != arg) *p = arg;
+      p++;
+    }
+  }
+  *p = 0;
+  return cnt;
+}
+
 /* setDouble:
  * If arg is an double, value is stored in v
  * and functions returns 0; otherwise, returns 1.
@@ -222,6 +252,7 @@ int gvParseArgs(GVC_t *gvc, int argc, char** argv)
     argc = neato_extra_args(gvc, argc, argv);
     argc = fdp_extra_args(gvc, argc, argv);
     argc = memtest_extra_args(gvc, argc, argv);
+    argc = config_extra_args(gvc, argc, argv);
     dotneato_initialize(gvc, argc, argv);
     return 0;
 }
index 4bdd38643190e2f50034d13032466311ce78841b..a9f5adecd544416b17bd00d4efacc567b1c8af94 100644 (file)
@@ -64,7 +64,7 @@ extern "C" {
     EXTERN int Obj;
 #endif
 
-    EXTERN boolean Verbose, Reduce, MemTest;
+    EXTERN boolean Verbose, Reduce, MemTest, Config;
     EXTERN char *HTTPServerEnVar;
     EXTERN char *Output_file_name;
     EXTERN int graphviz_errors;
index 266a4e0267e07008ea89a568c3abf28c8afa656b..2d374fa2c9aa52bd0054ae4602efae7fa54983b5 100644 (file)
@@ -62,6 +62,11 @@ static char *memtestFlags = "(additional options for memtest)  [-m]\n";
 static char *memtestItems = "\n\
  -m          - Memory test (Observe no growth with top. Kill when done.)\n";
 
+static char *configFlags = "(additional options for config)  [-c]\n";
+static char *configItems = "\n\
+ -m          - Configure plugins (Writes $prefix/lib/graphviz/config \n\
+               with available plugin information.  Needs write priviledge.)\n";
+
 void dotneato_usage(int exval)
 {
     FILE *outs;
@@ -75,10 +80,12 @@ void dotneato_usage(int exval)
     fputs(neatoFlags, outs);
     fputs(fdpFlags, outs);
     fputs(memtestFlags, outs);
+    fputs(configFlags, outs);
     fputs(genericItems, outs);
     fputs(neatoItems, outs);
     fputs(fdpItems, outs);
     fputs(memtestItems, outs);
+    fputs(configItems, outs);
 
     if (exval >= 0)
        exit(exval);
@@ -141,7 +148,9 @@ void dotneato_initialize(GVC_t * gvc, int argc, char **argv)
     Gvfilepath = getenv("GV_FILE_PATH");
 
     /* configure for available plugins and codegens */
-    gvconfig(gvc);
+    gvconfig(gvc, Config);
+    if (Config)
+       exit (0);
 
     CmdName = basename(argv[0]);
     i = gvlayout_select(gvc, CmdName);
index 51d085ba76d299f10891e08b8713b6a159400bbc..c06d424f7a55a0fec290ac803bc9f8c91f8cf6cc 100644 (file)
@@ -29,7 +29,7 @@ GVC_t *gvContext(void)
     aginit();
     agnodeattr(NULL, "label", NODENAME_ESC);
     gvc = gvNEWcontext(Info, username());
-    gvconfig(gvc); /* configure for available plugins and codegens */
+    gvconfig(gvc, FALSE); /* configure for available plugins and codegens */
     return gvc;
 }
 
index 4983cc2a71fd449bd36bf528de8707cf4886a00e..445a937392fa665efe40c8e1cf3e0e401edf0c4f 100644 (file)
@@ -397,7 +397,7 @@ codegen_info_t *next_codegen(codegen_info_t * p)
 /*
   gvconfig - parse a config file and install the identified plugins
  */
-void gvconfig(GVC_t * gvc)
+void gvconfig(GVC_t * gvc, boolean rescan)
 {
 #ifdef DISABLE_LTDL
     gvplugin_library_t **libraryp;
@@ -437,16 +437,18 @@ void gvconfig(GVC_t * gvc)
     strcpy(config_path, GVLIBDIR);
     strcat(config_path, "/");
     strcat(config_path, config_file_name);
-    rc = stat(config_path, &config_st);
        
-    if (rc == -1 || libdir_st.st_mtime > config_st.st_mtime) {
+    if (rescan) {
        config_rescan(gvc, config_path);
     }
     else {
        /* load in the cached plugin library data */
 
-       rc = 0;
-       if (config_st.st_size > MAX_SZ_CONFIG) {
+       rc = stat(config_path, &config_st);
+       if (rc == -1) {
+           agerr(AGERR,"Unable to stat %s.\n", config_path);
+       }
+       else if (config_st.st_size > MAX_SZ_CONFIG) {
            agerr(AGERR,"%s is bigger than I can handle.\n", config_path);
        }
        else {
@@ -470,10 +472,6 @@ void gvconfig(GVC_t * gvc)
            if (f)
                fclose(f);
        }
-       if (!rc) {
-           agerr(AGERR,"rescanning for plugins\n");
-           config_rescan(gvc, config_path);
-       }
     }
     if (config_path)
        free(config_path);
index f6a60b51e1874199a96afa9d09fb4e43236920f0..5a71be60dd76845a34bede43cd9ac69ae79ae6c6 100644 (file)
@@ -31,7 +31,7 @@ extern "C" {
 
 /* configuration */
 
-    extern void gvconfig(GVC_t * gvc);
+    extern void gvconfig(GVC_t * gvc, boolean rescan);
     extern char *gvhostname(void);
 
 /* plugins */
index 7576af3247501898ba2ae0ee2c3bc58ca5aa9685..516a0ff51e9f6764defbb564b620e02c880f6aa3 100644 (file)
@@ -31,7 +31,7 @@ static void gvinit()
     gvc = gvNEWcontext(Info, username());
 
     /* configure for available plugins and codegens */
-    gvconfig(gvc);
+    gvconfig(gvc, FALSE);
 }
 
 Agraph_t *digraph(char *name)
index e3fc4d29d7291c522ae78ec36b43a5a00ccdad98..24c32b01fae816fed93c94a11268e22c0673c415 100644 (file)
@@ -1645,7 +1645,7 @@ int Tcldot_Init(Tcl_Interp * interp)
     gvc = gvNEWcontext(Info, username());
 
     /* configure for available plugins and codegens */
-    gvconfig(gvc);
+    gvconfig(gvc, FALSE);
     /* additional codegens */
     for (p = cg; p->name; ++p)
         gvplugin_install(gvc, API_render, p->name, 0, "cg", NULL,