guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Allow specifying load extensions on the command line


From: Andreas Rottmann
Subject: [PATCH] Allow specifying load extensions on the command line
Date: Mon, 25 Oct 2010 13:43:05 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

From: Andreas Rottmann <address@hidden>
Subject: Allow specifying load extensions on the command line

Add a new command-line switch `-x', which manipulates the
%load-extensions list.

* libguile/script.c (scm_compile_shell_switches): Process the new "-x"
  switch.
  (scm_shell_usage): Mention the "-x" switch.
* doc/ref/scheme-scripts.texi (Invoking Guile): Add "-x" switch to the
  list of command-line switches.

---
 NEWS                        |    7 +++++++
 doc/ref/scheme-scripts.texi |    7 +++++++
 libguile/script.c           |   22 ++++++++++++++++++++++
 3 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index 5f4d838..c8c3091 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,13 @@ Please send Guile bug reports to address@hidden
 Note: During the 1.9 series, we will keep an incremental NEWS for the
 latest prerelease, and a full NEWS corresponding to 1.8 -> 2.0.
 
+Changes in 1.9.14 (since the 1.9.13 prerelease):
+
+** Command line additions
+
+The guile binary now supports a new switch "-x", which can be used to
+extend the list of filename extensions tried when loading files
+(%load-extensions).
 
 Changes in 1.9.13 (since the 1.9.12 prerelease):
 
diff --git a/doc/ref/scheme-scripts.texi b/doc/ref/scheme-scripts.texi
index 225b34b..207391f 100644
--- a/doc/ref/scheme-scripts.texi
+++ b/doc/ref/scheme-scripts.texi
@@ -116,6 +116,13 @@ and before any directories in the GUILE_LOAD_PATH 
environment
 variable.  Paths added here are @emph{not} in effect during execution
 of the user's @file{.guile} file.
 
address@hidden -x @var{extension}
+Add @var{extension} to the front of Guile's load extension list
+(@pxref{Loading}).  The specified extensions are tried in the order
+given on the command line, and before the default load extensions.
+Extensions added here are @emph{not} in effect during execution of the
+user's @file{.guile} file.
+
 @item -l @var{file}
 Load Scheme source code from @var{file}, and continue processing the
 command line.
diff --git a/libguile/script.c b/libguile/script.c
index caf3ac6..209d3b9 100644
--- a/libguile/script.c
+++ b/libguile/script.c
@@ -374,6 +374,7 @@ scm_shell_usage (int fatal, char *message)
            "If FILE begins with `-' the -s switch is mandatory.\n"
            "\n"
            "  -L DIRECTORY   add DIRECTORY to the front of the module load 
path\n"
+           "  -x EXTENSION   add EXTENSION to the front of the load 
extensions\n"
            "  -l FILE        load Scheme source code from FILE\n"
            "  -e FUNCTION    after reading script, apply FUNCTION to\n"
            "                 command line arguments\n"
@@ -414,6 +415,7 @@ SCM_SYMBOL (sym_top_repl, "top-repl");
 SCM_SYMBOL (sym_quit, "quit");
 SCM_SYMBOL (sym_use_srfis, "use-srfis");
 SCM_SYMBOL (sym_load_path, "%load-path");
+SCM_SYMBOL (sym_load_extensions, "%load-extensions");
 SCM_SYMBOL (sym_set_x, "set!");
 SCM_SYMBOL (sym_sys_load_should_autocompile, "%load-should-autocompile");
 SCM_SYMBOL (sym_cons, "cons");
@@ -455,6 +457,7 @@ scm_compile_shell_switches (int argc, char **argv)
                                   the "-ds" switch.  */
   SCM entry_point = SCM_EOL;   /* for -e switch */
   SCM user_load_path = SCM_EOL; /* for -L switch */
+  SCM user_extensions = SCM_EOL;/* for the -x switch */
   int interactive = 1;         /* Should we go interactive when done? */
   int inhibit_user_init = 0;   /* Don't load user init file */
   int turn_on_debugging = 0;
@@ -546,6 +549,20 @@ scm_compile_shell_switches (int argc, char **argv)
            scm_shell_usage (1, "missing argument to `-L' switch");
        }         
 
+      else if (! strcmp (argv[i], "-x")) /* add to %load-extensions */
+       {
+         if (++i < argc)
+           user_extensions =
+             scm_cons (scm_list_3 (sym_set_x, 
+                                   sym_load_extensions, 
+                                   scm_list_3 (sym_cons,
+                                               scm_from_locale_string 
(argv[i]),
+                                               sym_load_extensions)),
+                       user_extensions);
+         else
+           scm_shell_usage (1, "missing argument to `-x' switch");
+       }
+      
       else if (! strcmp (argv[i], "-e")) /* entry point */
        {
          if (++i < argc)
@@ -763,6 +780,11 @@ scm_compile_shell_switches (int argc, char **argv)
       tail = scm_append_x( scm_cons2(user_load_path, tail, SCM_EOL) );
     }
   
+  if(!scm_is_null(user_extensions)) 
+    {
+      tail = scm_append_x (scm_cons2 (user_extensions, tail, SCM_EOL));
+    }
+  
   /* If we didn't end with a -c or a -s and didn't supply a -q, load
      the user's customization file.  */
   if (interactive && !inhibit_user_init)
-- 
tg: (fe15364..) t/x-switch (depends on: master)
Regards, Rotty
-- 
Andreas Rottmann -- <http://rotty.yi.org/>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]