diff --git a/Modules/main.c b/Modules/main.c index df79ab5c4d8..83fd9dc6256 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -32,6 +32,7 @@ PERFORMANCE OF THIS SOFTWARE. /* Python interpreter main program */ #include "Python.h" +#include "osdefs.h" #ifdef HAVE_UNISTD_H #include @@ -41,6 +42,12 @@ PERFORMANCE OF THIS SOFTWARE. #include #endif +#if defined(PYOS_OS2) || defined(MS_WINDOWS) +#define PYTHONHOMEHELP "\\lib" +#else +#define PYTHONHOMEHELP "/python1.5" +#endif + /* Interface to getopt(): */ extern int optind; extern char *optarg; @@ -53,20 +60,21 @@ static int orig_argc; /* Short usage message (with %s for argv0) */ static char *usage_line = -"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-X] [-c cmd | file | -] [arg] ...\n"; +"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-x] [-X] [-c cmd | file | -] [arg] ...\n"; /* Long usage message, split into parts < 512 bytes */ -static char *usage_top = "\n\ +static char *usage_top = "\ Options and arguments (and corresponding environment variables):\n\ -d : debug output from parser (also PYTHONDEBUG=x)\n\ -i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\ and force prompts, even if stdin does not appear to be a terminal.\n\ -O : optimize generated bytecode (a tad).\n\ -S : don't imply 'import site' on initialization\n\ +-u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\ "; static char *usage_mid = "\ --u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\ -v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\ +-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ -X : disable class based built-in exceptions\n\ -c cmd : program passed in as string (terminates option list)\n\ file : program read from script file\n\ @@ -74,13 +82,12 @@ file : program read from script file\n\ arg ...: arguments passed to program in sys.argv[1:]\n\ "; static char *usage_bot = "\ -\n\ Other environment variables:\n\ PYTHONSTARTUP: file executed on interactive startup (no default)\n\ -PYTHONPATH : colon-separated list of directories prefixed to the\n\ +PYTHONPATH : '%c'-separated list of directories prefixed to the\n\ default module search path. The result is sys.path.\n\ -PYTHONHOME : alternate directory (or :).\n\ - The default module search path uses /lib/python1.5.\n\ +PYTHONHOME : alternate directory (or %c).\n\ + The default module search path uses %s.\n\ "; @@ -99,6 +106,7 @@ Py_Main(argc, argv) char *p; int inspect = 0; int unbuffered = 0; + int skipfirstline = 0; int stdin_is_interactive = 0; orig_argc = argc; /* For Py_GetArgcArgv() */ @@ -109,7 +117,7 @@ Py_Main(argc, argv) if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') unbuffered = 1; - while ((c = getopt(argc, argv, "c:diOSuvX")) != EOF) { + while ((c = getopt(argc, argv, "c:diOSuvxX")) != EOF) { if (c == 'c') { /* -c is the last option; following arguments that look like options are left for the @@ -150,6 +158,10 @@ Py_Main(argc, argv) Py_VerboseFlag++; break; + case 'x': + skipfirstline = 1; + break; + case 'X': Py_UseClassExceptionsFlag = 0; break; @@ -160,7 +172,8 @@ Py_Main(argc, argv) fprintf(stderr, usage_line, argv[0]); fprintf(stderr, usage_top); fprintf(stderr, usage_mid); - fprintf(stderr, usage_bot); + fprintf(stderr, usage_bot, + DELIM, DELIM, PYTHONHOMEHELP); exit(2); /*NOTREACHED*/ @@ -177,6 +190,10 @@ Py_Main(argc, argv) argv[0], filename); exit(2); } + else if (skipfirstline) { + char line[256]; + fgets(line, sizeof line, fp); + } } }