blob: db8d7c5070cae6f44b2afa8a41317857bd16fb3c [file] [log] [blame]
Guido van Rossumb6775db1994-08-01 11:34:53 +00001/* -*- C -*- ***********************************************
2Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum,
Guido van Rossume35399e1993-01-10 18:33:56 +00003Amsterdam, The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting 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 Rossum0b0db8e1993-01-21 16:07:51 +000031#include <stdio.h>
Guido van Rossumb6775db1994-08-01 11:34:53 +000032#include <string.h>
Guido van Rossum97f02771992-09-03 20:49:55 +000033
Guido van Rossumb6775db1994-08-01 11:34:53 +000034#include "myproto.h"
Guido van Rossumb001f7a1992-08-19 16:44:41 +000035#include "mymalloc.h"
Guido van Rossum34679b71993-01-26 13:33:44 +000036#include "osdefs.h"
Guido van Rossumb6775db1994-08-01 11:34:53 +000037#include "intrcheck.h"
Guido van Rossumc888bf71992-06-03 17:05:13 +000038
Guido van Rossum9b4e1b31991-12-30 01:43:49 +000039
Guido van Rossumb6775db1994-08-01 11:34:53 +000040#ifndef NO_MAIN
Guido van Rossumaa011411991-12-16 13:05:20 +000041
Guido van Rossumb6775db1994-08-01 11:34:53 +000042/* Normally, the main program is called from here (so everything else
43 can be in libPython.a). We save a pointer to argv[0] because it
44 may be needed for dynamic loading of modules in import.c. If you
45 have your own main program and want to use non-SunOS dynamic
46 loading, you will have to provide your own version of
47 getprogramname(). */
Guido van Rossum9f462af1991-12-10 13:54:12 +000048
Guido van Rossumb6775db1994-08-01 11:34:53 +000049static char *argv0;
Guido van Rossumaa011411991-12-16 13:05:20 +000050
Guido van Rossumb6775db1994-08-01 11:34:53 +000051main(argc, argv)
52 int argc;
53 char **argv;
Guido van Rossumaec78551990-12-20 23:03:58 +000054{
Guido van Rossum0b0db8e1993-01-21 16:07:51 +000055#ifdef macintosh
Guido van Rossumb6775db1994-08-01 11:34:53 +000056 wargs(&argc, &argv);
57#endif
58 argv0 = argv[0];
59 realmain(argc, argv);
60}
Guido van Rossum34679b71993-01-26 13:33:44 +000061
Guido van Rossumb6775db1994-08-01 11:34:53 +000062char *
63getprogramname()
64{
65 return argv0;
66}
Guido van Rossum34679b71993-01-26 13:33:44 +000067
Guido van Rossum34679b71993-01-26 13:33:44 +000068#endif
69
Guido van Rossumb6775db1994-08-01 11:34:53 +000070
Guido van Rossum72824ba1994-08-19 12:03:04 +000071/* Python version information */
72
73#include "patchlevel.h"
74
75/* Return the version string. This is constructed from the official
76 version number (from patchlevel.h), and the current date (if known
77 to the compiler, else a manually inserted date). */
78
79#define VERSION "%s (%s)"
80
81#ifdef __DATE__
82#define DATE __DATE__
83#else
84#define DATE "Aug 17 1994"
85#endif
86
87char *
88getversion()
89{
90 static char version[80];
91 sprintf(version, VERSION, PATCHLEVEL, DATE);
92 return version;
93}
94
95
96/* Return the copyright string. This is updated manually. */
97
98char *
99getcopyright()
100{
101 return "Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam";
102}
103
104
Guido van Rossumb6775db1994-08-01 11:34:53 +0000105/* Return the initial python search path. This is called once from
106 initsys() to initialize sys.path.
107 The environment variable PYTHONPATH is fetched and the default path
108 appended. (The Mac has no environment variables, so there the
109 default path is always returned.) The default path may be passed
110 to the preprocessor; if not, a system-dependent default is used. */
111
112#ifndef PYTHONPATH
113#ifdef macintosh
114#define PYTHONPATH ": :Lib :Lib:stdwin :Demo"
115#endif /* macintosh */
116#endif /* !PYTHONPATH */
117
118#ifndef PYTHONPATH
119#if defined(MSDOS) || defined(NT)
120#define PYTHONPATH ".;..\\lib;\\python\\lib"
121#endif /* MSDOS || NT */
122#endif /* !PYTHONPATH */
123
124#ifndef PYTHONPATH
125#define PYTHONPATH ".:/usr/local/lib/python"
Guido van Rossum0b0db8e1993-01-21 16:07:51 +0000126#endif /* !PYTHONPATH */
Guido van Rossumaec78551990-12-20 23:03:58 +0000127
128extern char *getenv();
129
130char *
131getpythonpath()
132{
Guido van Rossum0b0db8e1993-01-21 16:07:51 +0000133#ifdef macintosh
134 return PYTHONPATH;
135#else /* !macintosh */
Guido van Rossumaec78551990-12-20 23:03:58 +0000136 char *path = getenv("PYTHONPATH");
Guido van Rossumc888bf71992-06-03 17:05:13 +0000137 char *defpath = PYTHONPATH;
138 char *buf;
Guido van Rossum34679b71993-01-26 13:33:44 +0000139 char *p;
Guido van Rossumc888bf71992-06-03 17:05:13 +0000140 int n;
141
142 if (path == 0 || *path == '\0')
143 return defpath;
144 n = strlen(path) + strlen(defpath) + 2;
145 buf = malloc(n);
146 if (buf == NULL)
147 return path; /* XXX too bad -- but not likely */
148 strcpy(buf, path);
Guido van Rossum34679b71993-01-26 13:33:44 +0000149 p = buf + strlen(buf);
150 *p++ = DELIM;
151 strcpy(p, defpath);
Guido van Rossumc888bf71992-06-03 17:05:13 +0000152 return buf;
Guido van Rossum0b0db8e1993-01-21 16:07:51 +0000153#endif /* !macintosh */
Guido van Rossumaec78551990-12-20 23:03:58 +0000154}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000155
156
157/* Table of built-in modules.
Guido van Rossumb6775db1994-08-01 11:34:53 +0000158 These are initialized when first imported.
159 Note: selection of optional extensions is now generally done by the
160 makesetup script. */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000161
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000162/* -- ADDMODULE MARKER 1 -- */
Guido van Rossum59e53a51991-02-19 12:22:24 +0000163
Guido van Rossumb6775db1994-08-01 11:34:53 +0000164extern void initmarshal();
165
Guido van Rossum59e53a51991-02-19 12:22:24 +0000166struct {
167 char *name;
168 void (*initfunc)();
169} inittab[] = {
170
Guido van Rossum3a40ae41992-09-25 21:54:05 +0000171/* -- ADDMODULE MARKER 2 -- */
172
Guido van Rossumb6775db1994-08-01 11:34:53 +0000173 /* This module "lives in" with marshal.c */
174 {"marshal", initmarshal},
175
176 /* These entries are here for sys.builtin_module_names */
177 {"__main__", NULL},
178 {"__builtin__", NULL},
179 {"sys", NULL},
180
181 /* Sentinel */
182 {0, 0}
Guido van Rossum59e53a51991-02-19 12:22:24 +0000183};
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000184
185#ifdef USE_FROZEN
186#include "frozen.c"
187#else
188struct frozen {
189 char *name;
190 char *code;
191 int size;
192} frozen_modules[] = {
193 {0, 0, 0}
194};
195#endif