blob: 0c2f114489d1be952ac687d11b8642ebaa851748 [file] [log] [blame]
Guido van Rossumb6775db1994-08-01 11:34:53 +00001/* -*- C -*- ***********************************************
Guido van Rossum524b5881995-01-04 19:10:35 +00002Copyright 1991-1994 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossum524b5881995-01-04 19:10:35 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossum524b5881995-01-04 19:10:35 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI not be used in advertising or publicity pertaining to
13distribution of the software without specific, written prior permission.
14
15STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
16THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
18FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23******************************************************************/
24
Guido van Rossumb6775db1994-08-01 11:34:53 +000025/* Universal Python configuration file */
Guido van Rossumaec78551990-12-20 23:03:58 +000026
Guido van Rossumb6775db1994-08-01 11:34:53 +000027#ifdef HAVE_CONFIG_H
28#include "config.h"
Guido van Rossum34679b71993-01-26 13:33:44 +000029#endif
30
Guido van Rossum9731d441994-08-23 13:48:30 +000031#ifdef macintosh
32/* The Macintosh main program is in macmain.c */
33#define NO_MAIN
34#endif
35
Guido van Rossum0b0db8e1993-01-21 16:07:51 +000036#include <stdio.h>
Guido van Rossumb6775db1994-08-01 11:34:53 +000037#include <string.h>
Guido van Rossum97f02771992-09-03 20:49:55 +000038
Guido van Rossumb6775db1994-08-01 11:34:53 +000039#include "myproto.h"
Guido van Rossumb001f7a1992-08-19 16:44:41 +000040#include "mymalloc.h"
Guido van Rossum34679b71993-01-26 13:33:44 +000041#include "osdefs.h"
Guido van Rossumb6775db1994-08-01 11:34:53 +000042#include "intrcheck.h"
Guido van Rossumc888bf71992-06-03 17:05:13 +000043
Guido van Rossum6c1874f1995-01-10 17:43:33 +000044#if defined(__cplusplus)
45extern "C" {
46#endif
Guido van Rossum9b4e1b31991-12-30 01:43:49 +000047
Guido van Rossumb6775db1994-08-01 11:34:53 +000048#ifndef NO_MAIN
Guido van Rossumaa011411991-12-16 13:05:20 +000049
Guido van Rossumb6775db1994-08-01 11:34:53 +000050/* Normally, the main program is called from here (so everything else
51 can be in libPython.a). We save a pointer to argv[0] because it
52 may be needed for dynamic loading of modules in import.c. If you
53 have your own main program and want to use non-SunOS dynamic
54 loading, you will have to provide your own version of
55 getprogramname(). */
Guido van Rossum9f462af1991-12-10 13:54:12 +000056
Guido van Rossumb6775db1994-08-01 11:34:53 +000057static char *argv0;
Guido van Rossumaa011411991-12-16 13:05:20 +000058
Guido van Rossum7b1e9741994-08-29 10:46:42 +000059/* These are made available for other modules that might need them.
60 This is rare, but it is needed by the secureware module. */
61
62static char **orig_argv;
63static int orig_argc;
64
Guido van Rossum6c1874f1995-01-10 17:43:33 +000065#if defined(__cplusplus)
66int realmain(int, char**);
67main(int argc, char **argv)
68#else
Guido van Rossumb6775db1994-08-01 11:34:53 +000069main(argc, argv)
70 int argc;
71 char **argv;
Guido van Rossum6c1874f1995-01-10 17:43:33 +000072#endif
Guido van Rossumaec78551990-12-20 23:03:58 +000073{
Guido van Rossum7b1e9741994-08-29 10:46:42 +000074 orig_argc = argc;
75 orig_argv = argv;
Guido van Rossumb6775db1994-08-01 11:34:53 +000076 argv0 = argv[0];
77 realmain(argc, argv);
78}
Guido van Rossum34679b71993-01-26 13:33:44 +000079
Guido van Rossumb6775db1994-08-01 11:34:53 +000080char *
81getprogramname()
82{
83 return argv0;
84}
Guido van Rossum34679b71993-01-26 13:33:44 +000085
Guido van Rossum7b1e9741994-08-29 10:46:42 +000086void
Guido van Rossum6c1874f1995-01-10 17:43:33 +000087#if defined(__cplusplus)
88getargcargv(int *argc, char ***argv)
89#else
Guido van Rossum7b1e9741994-08-29 10:46:42 +000090getargcargv(argc,argv)
91 int *argc;
92 char ***argv;
Guido van Rossum6c1874f1995-01-10 17:43:33 +000093#endif
Guido van Rossum7b1e9741994-08-29 10:46:42 +000094{
95 *argc = orig_argc;
96 *argv = orig_argv;
97}
98
Guido van Rossum34679b71993-01-26 13:33:44 +000099#endif
100
Guido van Rossumb6775db1994-08-01 11:34:53 +0000101
Guido van Rossum72824ba1994-08-19 12:03:04 +0000102/* Python version information */
103
104#include "patchlevel.h"
105
106/* Return the version string. This is constructed from the official
107 version number (from patchlevel.h), and the current date (if known
108 to the compiler, else a manually inserted date). */
109
110#define VERSION "%s (%s)"
111
112#ifdef __DATE__
113#define DATE __DATE__
114#else
115#define DATE "Aug 17 1994"
116#endif
117
118char *
119getversion()
120{
121 static char version[80];
122 sprintf(version, VERSION, PATCHLEVEL, DATE);
123 return version;
124}
125
126
127/* Return the copyright string. This is updated manually. */
128
129char *
130getcopyright()
131{
Guido van Rossum524b5881995-01-04 19:10:35 +0000132 return "Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam";
Guido van Rossum72824ba1994-08-19 12:03:04 +0000133}
134
135
Guido van Rossumb6775db1994-08-01 11:34:53 +0000136/* Return the initial python search path. This is called once from
137 initsys() to initialize sys.path.
138 The environment variable PYTHONPATH is fetched and the default path
139 appended. (The Mac has no environment variables, so there the
140 default path is always returned.) The default path may be passed
141 to the preprocessor; if not, a system-dependent default is used. */
142
143#ifndef PYTHONPATH
144#ifdef macintosh
Guido van Rossum9731d441994-08-23 13:48:30 +0000145#define PYTHONPATH ": :Lib :Lib:stdwin :Lib:test :Lib:mac"
Guido van Rossumb6775db1994-08-01 11:34:53 +0000146#endif /* macintosh */
147#endif /* !PYTHONPATH */
148
149#ifndef PYTHONPATH
150#if defined(MSDOS) || defined(NT)
151#define PYTHONPATH ".;..\\lib;\\python\\lib"
152#endif /* MSDOS || NT */
153#endif /* !PYTHONPATH */
154
155#ifndef PYTHONPATH
156#define PYTHONPATH ".:/usr/local/lib/python"
Guido van Rossum0b0db8e1993-01-21 16:07:51 +0000157#endif /* !PYTHONPATH */
Guido van Rossumaec78551990-12-20 23:03:58 +0000158
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000159#ifndef __cplusplus
Guido van Rossumaec78551990-12-20 23:03:58 +0000160extern char *getenv();
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000161#endif
Guido van Rossumaec78551990-12-20 23:03:58 +0000162
163char *
164getpythonpath()
165{
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000166#ifdef __cplusplus
167 void fatal(char *);
168#endif
Guido van Rossumaec78551990-12-20 23:03:58 +0000169 char *path = getenv("PYTHONPATH");
Guido van Rossumc888bf71992-06-03 17:05:13 +0000170 char *defpath = PYTHONPATH;
Guido van Rossum6e890b81994-10-05 12:25:12 +0000171 static char *buf = NULL;
Guido van Rossum34679b71993-01-26 13:33:44 +0000172 char *p;
Guido van Rossumc888bf71992-06-03 17:05:13 +0000173 int n;
174
Guido van Rossum6e890b81994-10-05 12:25:12 +0000175 if (path == NULL)
176 path = "";
Guido van Rossumc888bf71992-06-03 17:05:13 +0000177 n = strlen(path) + strlen(defpath) + 2;
Guido van Rossum6e890b81994-10-05 12:25:12 +0000178 if (buf != NULL) {
179 free(buf);
180 buf = NULL;
181 }
Guido van Rossumc888bf71992-06-03 17:05:13 +0000182 buf = malloc(n);
183 if (buf == NULL)
Guido van Rossum6e890b81994-10-05 12:25:12 +0000184 fatal("not enough memory to copy module search path");
Guido van Rossumc888bf71992-06-03 17:05:13 +0000185 strcpy(buf, path);
Guido van Rossum34679b71993-01-26 13:33:44 +0000186 p = buf + strlen(buf);
Guido van Rossume8a1e8c1994-10-05 14:48:22 +0000187 if (p != buf)
188 *p++ = DELIM;
Guido van Rossum34679b71993-01-26 13:33:44 +0000189 strcpy(p, defpath);
Guido van Rossumc888bf71992-06-03 17:05:13 +0000190 return buf;
Guido van Rossumaec78551990-12-20 23:03:58 +0000191}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000192
193
194/* Table of built-in modules.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000195 These are initialized when first imported.
196 Note: selection of optional extensions is now generally done by the
197 makesetup script. */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000198
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000199/* -- ADDMODULE MARKER 1 -- */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000200
Guido van Rossumb6775db1994-08-01 11:34:53 +0000201extern void initmarshal();
Guido van Rossum3bbc62e1995-01-02 19:30:30 +0000202extern void initimp();
Guido van Rossumb6775db1994-08-01 11:34:53 +0000203
Guido van Rossum59e53a51991-02-19 12:22:24 +0000204struct {
205 char *name;
206 void (*initfunc)();
207} inittab[] = {
208
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000209/* -- ADDMODULE MARKER 2 -- */
210
Guido van Rossumb6775db1994-08-01 11:34:53 +0000211 /* This module "lives in" with marshal.c */
212 {"marshal", initmarshal},
213
Guido van Rossum3bbc62e1995-01-02 19:30:30 +0000214 /* This lives it with import.c */
215 {"imp", initimp},
216
Guido van Rossumb6775db1994-08-01 11:34:53 +0000217 /* These entries are here for sys.builtin_module_names */
218 {"__main__", NULL},
219 {"__builtin__", NULL},
220 {"sys", NULL},
221
222 /* Sentinel */
223 {0, 0}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000224};
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000225
Guido van Rossume8a1e8c1994-10-05 14:48:22 +0000226#ifndef USE_FROZEN
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000227struct frozen {
228 char *name;
229 char *code;
230 int size;
231} frozen_modules[] = {
232 {0, 0, 0}
233};
234#endif
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000235
236#if defined(__cplusplus)
237}
238#endif