X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=087efc45b2aaca8fe6c2a8d275a0f8155a420e8c;hb=3bb2fb5b9ecdeebecaded4ac6e5af0f653be8867;hp=aa54b85b757f37575542bf1ca20992c64511c730;hpb=686043635c45a16b418d2cc96a7f704fdab182c2;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index aa54b85..087efc4 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -40,13 +41,14 @@ #include "interr.h" #include "monitor.h" #include "validate.h" -#if defined GENCGC -#include "gencgc.h" -#endif #include "core.h" #include "save.h" #include "lispregs.h" +#include "genesis/static-symbols.h" +#include "genesis/symbol.h" + + #ifdef irix #include #include "interr.h" @@ -116,6 +118,63 @@ alloc_string_list(char *array_ptr[]) } } +/* miscellaneous chattiness */ + +void +print_help() +{ + puts( +"SBCL is a Common Lisp programming environment. Ordinarily you shouldn't\n\ +need command line options when you invoke it interactively: you can just\n\ +start it and work with the customary Lisp READ-EVAL-PRINT loop.\n\ +\n\ +One option idiom which is sometimes useful interactively (e.g. when\n\ +exercising a test case for a bug report) is\n\ + sbcl --sysinit /dev/null --userinit /dev/null\n\ +to keep SBCL from reading any initialization files at startup. And some\n\ +people like to suppress the default startup message:\n\ + sbcl --noinform\n\ +\n\ +Other options can be useful when you're running SBCL noninteractively,\n\ +e.g. from a script, or if you have a strange system configuration, so\n\ +that SBCL can't by default find one of the files it needs. For\n\ +information on such options, see the sbcl(1) man page.\n\ +\n\ +More information on SBCL can be found on its man page, or at\n\ +.\n"); +} + +void +print_version() +{ + printf("SBCL %s\n", SBCL_VERSION_STRING); +} + +void +print_banner() +{ + printf( +"This is SBCL %s, an implementation of ANSI Common Lisp.\n\ +\n\ +SBCL is derived from the CMU CL system created at Carnegie Mellon University.\n\ +Besides software and documentation originally created at Carnegie Mellon\n\ +University, SBCL contains some software originally from the Massachusetts\n\ +Institute of Technology, Symbolics Incorporated, and Xerox Corporation, and\n\ +material contributed by volunteers since the release of CMU CL into the\n\ +public domain. See the CREDITS file in the distribution for more information.\n\ +\n\ +SBCL is a free software system, provided as is, with absolutely no warranty.\n\ +It is mostly in the public domain, but also includes some software copyrighted\n\ + Massachusetts Institute of Technology, 1986;\n\ + Symbolics, Inc., 1989, 1990, 1991, 1992; and\n\ + Xerox Corporation, 1985, 1986, 1987, 1988, 1989, 1990\n\ +used under BSD-style licenses allowing copying only under certain conditions.\n\ +See the COPYING file in the distribution for more information.\n\ +\n\ +More information about SBCL is available at .\n\ +", SBCL_VERSION_STRING); +} + int main(int argc, char *argv[], char *envp[]) { @@ -151,12 +210,22 @@ main(int argc, char *argv[], char *envp[]) lose("more than one core file specified"); } else { ++argi; - core = copied_string(argv[argi]); if (argi >= argc) { lose("missing filename for --core argument"); } + core = copied_string(argv[argi]); ++argi; } + } else if (0 == strcmp(arg, "--help")) { + /* I think this is the (or a) usual convention: upon + * seeing "--help" we immediately print our help + * string and exit, ignoring everything else. */ + print_help(); + exit(0); + } else if (0 == strcmp(arg, "--version")) { + /* As in "--help" case, I think this is expected. */ + print_version(); + exit(0); } else if (0 == strcmp(arg, "--end-runtime-options")) { end_runtime_options = 1; ++argi; @@ -198,43 +267,46 @@ main(int argc, char *argv[], char *envp[]) char *sbcl_home = getenv("SBCL_HOME"); if (sbcl_home) { char *lookhere; - lookhere = (char *) calloc(strlen("/sbcl.core") + strlen(sbcl_home) + 1, - sizeof(char)); - sprintf(lookhere, "%s/sbcl.core", sbcl_home); + char *stem = "/sbcl.core"; + lookhere = (char *) calloc(strlen(sbcl_home) + + strlen(stem) + + 1, + sizeof(char)); + sprintf(lookhere, "%s%s", sbcl_home, stem); core = copied_existing_filename_or_null(lookhere); free(lookhere); } else { - core = copied_existing_filename_or_null("/usr/lib/sbcl.core"); + putenv("SBCL_HOME=/usr/local/lib/sbcl/"); + core = copied_existing_filename_or_null("/usr/local/lib/sbcl/sbcl.core"); if (!core) { - core = copied_existing_filename_or_null("/usr/local/lib/sbcl.core"); + putenv("SBCL_HOME=/usr/lib/sbcl/"); + core = + copied_existing_filename_or_null("/usr/lib/sbcl/sbcl.core"); } } if (!core) { lose("can't find core file"); } + } else { + /* If a core was specified and SBCL_HOME is unset, set it */ + char *sbcl_home = getenv("SBCL_HOME"); + if (!sbcl_home) { + char *envstring, *copied_core, *dir; + char *stem = "SBCL_HOME="; + copied_core = copied_string(core); + dir = dirname(copied_core); + envstring = (char *) calloc(strlen(stem) + + strlen(dir) + + 1, + sizeof(char)); + sprintf(envstring, "%s%s", stem, dir); + putenv(envstring); + free(copied_core); + } } if (!noinform) { - printf( -"This is SBCL " SBCL_VERSION_STRING ", an implementation of ANSI Common Lisp.\n\ -\n\ -SBCL is derived from the CMU CL system created at Carnegie Mellon University.\n\ -Besides software and documentation originally created at Carnegie Mellon\n\ -University, SBCL contains some software originally from the Massachusetts\n\ -Institute of Technology, Symbolics Incorporated, and Xerox Corporation, and\n\ -material contributed by volunteers since the release of CMU CL into the\n\ -public domain. See the CREDITS file in the distribution for more information.\n\ -\n\ -SBCL is a free software system, provided as is, with absolutely no warranty.\n\ -It is mostly in the public domain, but also includes some software copyrighted\n\ - Massachusetts Institute of Technology, 1986;\n\ - Symbolics, Inc., 1989, 1990, 1991, 1992; and\n\ - Xerox Corporation, 1985, 1986, 1987, 1988, 1989, 1990\n\ -used under BSD-style licenses allowing copying only under certain conditions.\n\ -See the COPYING file in the distribution for more information.\n\ -\n\ -More information on SBCL is available at .\n\ -"); + print_banner(); fflush(stdout); } @@ -250,11 +322,6 @@ More information on SBCL is available at .\n\ set_lossage_handler(monitor_or_something); -#if 0 - os_init(); - gc_init(); - validate(); -#endif globals_init(); initial_function = load_core_file(core); @@ -264,17 +331,11 @@ More information on SBCL is available at .\n\ SHOW("freeing core"); free(core); -#if defined GENCGC - gencgc_pickup_dynamic(); -#else -#endif + gc_initialize_pointers(); #ifdef BINDING_STACK_POINTER SetSymbolValue(BINDING_STACK_POINTER, BINDING_STACK_START); #endif -#if defined INTERNAL_GC_TRIGGER && !defined __i386__ - SetSymbolValue(INTERNAL_GC_TRIGGER, make_fixnum(-1)); -#endif interrupt_init();