blob: 327b9a0ceaa15225af20a2ebce269763c173fc40 [file] [log] [blame]
Guido van Rossumb6775db1994-08-01 11:34:53 +00001/* -*- C -*- ***********************************************
Guido van Rossume333d161995-03-14 15:04:19 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
Guido van Rossum524b5881995-01-04 19:10:35 +00003The 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 Rossum74ee2871995-03-30 11:00:56 +000065extern int realmain PROTO((int, char**));
66
Guido van Rossum6c1874f1995-01-10 17:43:33 +000067#if defined(__cplusplus)
Guido van Rossum6c1874f1995-01-10 17:43:33 +000068main(int argc, char **argv)
69#else
Guido van Rossumb6775db1994-08-01 11:34:53 +000070main(argc, argv)
71 int argc;
72 char **argv;
Guido van Rossum6c1874f1995-01-10 17:43:33 +000073#endif
Guido van Rossumaec78551990-12-20 23:03:58 +000074{
Guido van Rossum7b1e9741994-08-29 10:46:42 +000075 orig_argc = argc;
76 orig_argv = argv;
Guido van Rossumb6775db1994-08-01 11:34:53 +000077 argv0 = argv[0];
78 realmain(argc, argv);
79}
Guido van Rossum34679b71993-01-26 13:33:44 +000080
Guido van Rossumb6775db1994-08-01 11:34:53 +000081char *
82getprogramname()
83{
84 return argv0;
85}
Guido van Rossum34679b71993-01-26 13:33:44 +000086
Guido van Rossum7b1e9741994-08-29 10:46:42 +000087void
Guido van Rossum6c1874f1995-01-10 17:43:33 +000088#if defined(__cplusplus)
89getargcargv(int *argc, char ***argv)
90#else
Guido van Rossum7b1e9741994-08-29 10:46:42 +000091getargcargv(argc,argv)
92 int *argc;
93 char ***argv;
Guido van Rossum6c1874f1995-01-10 17:43:33 +000094#endif
Guido van Rossum7b1e9741994-08-29 10:46:42 +000095{
96 *argc = orig_argc;
97 *argv = orig_argv;
98}
99
Guido van Rossum34679b71993-01-26 13:33:44 +0000100#endif
101
Guido van Rossumb6775db1994-08-01 11:34:53 +0000102
Guido van Rossum72824ba1994-08-19 12:03:04 +0000103/* Python version information */
104
105#include "patchlevel.h"
106
107/* Return the version string. This is constructed from the official
108 version number (from patchlevel.h), and the current date (if known
109 to the compiler, else a manually inserted date). */
110
Guido van Rossum57c33af1995-02-13 17:10:11 +0000111#define VERSION "%s (%s)%s"
Guido van Rossum72824ba1994-08-19 12:03:04 +0000112
113#ifdef __DATE__
114#define DATE __DATE__
115#else
Guido van Rossum57c33af1995-02-13 17:10:11 +0000116#define DATE "Feb 13 1995"
117#endif
118
119#ifdef THINK_C
120#define COMPILER " [THINK C]"
121#endif
122
123#ifdef __MWERKS__
124#ifdef __powerc
125#define COMPILER " [CW PPC]"
126#else
127#define COMPILER " [CW 68K]"
128#endif
129#endif
130
131#ifdef MPW
132#ifdef __SC__
133#define COMPILER " [Symantec MPW]"
134#else
135#define COMPILER " [Apple MPW]"
136#endif
137#endif
138
139#ifdef __GNUC__
Guido van Rossum9e575ff1995-02-17 15:11:57 +0000140#define COMPILER " [GCC " __VERSION__ "]"
Guido van Rossum57c33af1995-02-13 17:10:11 +0000141#endif
142
143#ifndef COMPILER
144#define COMPILER ""
Guido van Rossum72824ba1994-08-19 12:03:04 +0000145#endif
146
147char *
148getversion()
149{
150 static char version[80];
Guido van Rossum57c33af1995-02-13 17:10:11 +0000151 sprintf(version, VERSION, PATCHLEVEL, DATE, COMPILER);
Guido van Rossum72824ba1994-08-19 12:03:04 +0000152 return version;
153}
154
155
156/* Return the copyright string. This is updated manually. */
157
158char *
159getcopyright()
160{
Guido van Rossum524b5881995-01-04 19:10:35 +0000161 return "Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam";
Guido van Rossum72824ba1994-08-19 12:03:04 +0000162}
163
164
Guido van Rossumb6775db1994-08-01 11:34:53 +0000165/* Return the initial python search path. This is called once from
166 initsys() to initialize sys.path.
167 The environment variable PYTHONPATH is fetched and the default path
168 appended. (The Mac has no environment variables, so there the
169 default path is always returned.) The default path may be passed
170 to the preprocessor; if not, a system-dependent default is used. */
171
172#ifndef PYTHONPATH
173#ifdef macintosh
Guido van Rossum9731d441994-08-23 13:48:30 +0000174#define PYTHONPATH ": :Lib :Lib:stdwin :Lib:test :Lib:mac"
Guido van Rossumb6775db1994-08-01 11:34:53 +0000175#endif /* macintosh */
176#endif /* !PYTHONPATH */
177
178#ifndef PYTHONPATH
179#if defined(MSDOS) || defined(NT)
180#define PYTHONPATH ".;..\\lib;\\python\\lib"
181#endif /* MSDOS || NT */
182#endif /* !PYTHONPATH */
183
184#ifndef PYTHONPATH
185#define PYTHONPATH ".:/usr/local/lib/python"
Guido van Rossum0b0db8e1993-01-21 16:07:51 +0000186#endif /* !PYTHONPATH */
Guido van Rossumaec78551990-12-20 23:03:58 +0000187
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000188#ifndef __cplusplus
Guido van Rossumaec78551990-12-20 23:03:58 +0000189extern char *getenv();
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000190#endif
Guido van Rossumaec78551990-12-20 23:03:58 +0000191
192char *
193getpythonpath()
194{
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000195#ifdef __cplusplus
196 void fatal(char *);
197#endif
Guido van Rossumaec78551990-12-20 23:03:58 +0000198 char *path = getenv("PYTHONPATH");
Guido van Rossumc888bf71992-06-03 17:05:13 +0000199 char *defpath = PYTHONPATH;
Guido van Rossum6e890b81994-10-05 12:25:12 +0000200 static char *buf = NULL;
Guido van Rossum34679b71993-01-26 13:33:44 +0000201 char *p;
Guido van Rossumc888bf71992-06-03 17:05:13 +0000202 int n;
203
Guido van Rossum6e890b81994-10-05 12:25:12 +0000204 if (path == NULL)
205 path = "";
Guido van Rossumc888bf71992-06-03 17:05:13 +0000206 n = strlen(path) + strlen(defpath) + 2;
Guido van Rossum6e890b81994-10-05 12:25:12 +0000207 if (buf != NULL) {
208 free(buf);
209 buf = NULL;
210 }
Guido van Rossumc888bf71992-06-03 17:05:13 +0000211 buf = malloc(n);
212 if (buf == NULL)
Guido van Rossum6e890b81994-10-05 12:25:12 +0000213 fatal("not enough memory to copy module search path");
Guido van Rossumc888bf71992-06-03 17:05:13 +0000214 strcpy(buf, path);
Guido van Rossum34679b71993-01-26 13:33:44 +0000215 p = buf + strlen(buf);
Guido van Rossume8a1e8c1994-10-05 14:48:22 +0000216 if (p != buf)
217 *p++ = DELIM;
Guido van Rossum34679b71993-01-26 13:33:44 +0000218 strcpy(p, defpath);
Guido van Rossumc888bf71992-06-03 17:05:13 +0000219 return buf;
Guido van Rossumaec78551990-12-20 23:03:58 +0000220}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000221
222
223/* Table of built-in modules.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000224 These are initialized when first imported.
225 Note: selection of optional extensions is now generally done by the
226 makesetup script. */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000227
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000228/* -- ADDMODULE MARKER 1 -- */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000229
Guido van Rossumb6775db1994-08-01 11:34:53 +0000230extern void initmarshal();
Guido van Rossum3bbc62e1995-01-02 19:30:30 +0000231extern void initimp();
Guido van Rossumb6775db1994-08-01 11:34:53 +0000232
Guido van Rossum59e53a51991-02-19 12:22:24 +0000233struct {
234 char *name;
235 void (*initfunc)();
236} inittab[] = {
237
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000238/* -- ADDMODULE MARKER 2 -- */
239
Guido van Rossumb6775db1994-08-01 11:34:53 +0000240 /* This module "lives in" with marshal.c */
241 {"marshal", initmarshal},
242
Guido van Rossum3bbc62e1995-01-02 19:30:30 +0000243 /* This lives it with import.c */
244 {"imp", initimp},
245
Guido van Rossumb6775db1994-08-01 11:34:53 +0000246 /* These entries are here for sys.builtin_module_names */
247 {"__main__", NULL},
248 {"__builtin__", NULL},
249 {"sys", NULL},
250
251 /* Sentinel */
252 {0, 0}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000253};
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000254
Guido van Rossume8a1e8c1994-10-05 14:48:22 +0000255#ifndef USE_FROZEN
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000256struct frozen {
257 char *name;
258 char *code;
259 int size;
260} frozen_modules[] = {
261 {0, 0, 0}
262};
263#endif
Guido van Rossum6c1874f1995-01-10 17:43:33 +0000264
265#if defined(__cplusplus)
266}
267#endif