1994-08-01 13:34:53 +02:00
|
|
|
/* -*- C -*- ***********************************************
|
1995-03-14 16:04:19 +01:00
|
|
|
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
|
1995-01-04 20:10:35 +01:00
|
|
|
The Netherlands.
|
1991-02-19 13:39:46 +01:00
|
|
|
|
|
|
|
All Rights Reserved
|
|
|
|
|
1995-01-04 20:10:35 +01:00
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
|
|
documentation for any purpose and without fee is hereby granted,
|
1991-02-19 13:39:46 +01:00
|
|
|
provided that the above copyright notice appear in all copies and that
|
1995-01-04 20:10:35 +01:00
|
|
|
both that copyright notice and this permission notice appear in
|
1991-02-19 13:39:46 +01:00
|
|
|
supporting documentation, and that the names of Stichting Mathematisch
|
|
|
|
Centrum or CWI not be used in advertising or publicity pertaining to
|
|
|
|
distribution of the software without specific, written prior permission.
|
|
|
|
|
|
|
|
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
|
|
|
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
|
|
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
|
|
|
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
|
|
|
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
|
|
|
******************************************************************/
|
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* Universal Python configuration file */
|
1990-12-21 00:03:58 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
1993-01-26 14:33:44 +01:00
|
|
|
#endif
|
|
|
|
|
1994-08-23 15:48:30 +02:00
|
|
|
#ifdef macintosh
|
|
|
|
/* The Macintosh main program is in macmain.c */
|
|
|
|
#define NO_MAIN
|
|
|
|
#endif
|
|
|
|
|
1993-01-21 17:07:51 +01:00
|
|
|
#include <stdio.h>
|
1994-08-01 13:34:53 +02:00
|
|
|
#include <string.h>
|
1992-09-03 22:49:55 +02:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
#include "myproto.h"
|
1992-08-19 18:44:41 +02:00
|
|
|
#include "mymalloc.h"
|
1993-01-26 14:33:44 +01:00
|
|
|
#include "osdefs.h"
|
1994-08-01 13:34:53 +02:00
|
|
|
#include "intrcheck.h"
|
1992-06-03 19:05:13 +02:00
|
|
|
|
1995-01-10 18:43:33 +01:00
|
|
|
#if defined(__cplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
1991-12-30 02:43:49 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
#ifndef NO_MAIN
|
1991-12-16 14:05:20 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* Normally, the main program is called from here (so everything else
|
|
|
|
can be in libPython.a). We save a pointer to argv[0] because it
|
|
|
|
may be needed for dynamic loading of modules in import.c. If you
|
|
|
|
have your own main program and want to use non-SunOS dynamic
|
|
|
|
loading, you will have to provide your own version of
|
|
|
|
getprogramname(). */
|
1991-12-16 14:05:20 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
static char *argv0;
|
1992-01-19 17:27:42 +01:00
|
|
|
|
1994-08-29 12:46:42 +02:00
|
|
|
/* These are made available for other modules that might need them.
|
|
|
|
This is rare, but it is needed by the secureware module. */
|
|
|
|
|
|
|
|
static char **orig_argv;
|
|
|
|
static int orig_argc;
|
|
|
|
|
1995-03-30 13:00:56 +02:00
|
|
|
extern int realmain PROTO((int, char**));
|
|
|
|
|
1995-01-10 18:43:33 +01:00
|
|
|
#if defined(__cplusplus)
|
|
|
|
main(int argc, char **argv)
|
|
|
|
#else
|
1994-08-01 13:34:53 +02:00
|
|
|
main(argc, argv)
|
|
|
|
int argc;
|
|
|
|
char **argv;
|
1995-01-10 18:43:33 +01:00
|
|
|
#endif
|
1990-12-21 00:03:58 +01:00
|
|
|
{
|
1994-08-29 12:46:42 +02:00
|
|
|
orig_argc = argc;
|
|
|
|
orig_argv = argv;
|
1994-08-01 13:34:53 +02:00
|
|
|
argv0 = argv[0];
|
|
|
|
realmain(argc, argv);
|
1990-12-21 00:03:58 +01:00
|
|
|
}
|
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
char *
|
|
|
|
getprogramname()
|
1990-12-21 00:03:58 +01:00
|
|
|
{
|
1994-08-01 13:34:53 +02:00
|
|
|
return argv0;
|
1990-12-21 00:03:58 +01:00
|
|
|
}
|
|
|
|
|
1994-08-29 12:46:42 +02:00
|
|
|
void
|
1995-01-10 18:43:33 +01:00
|
|
|
#if defined(__cplusplus)
|
|
|
|
getargcargv(int *argc, char ***argv)
|
|
|
|
#else
|
1994-08-29 12:46:42 +02:00
|
|
|
getargcargv(argc,argv)
|
|
|
|
int *argc;
|
|
|
|
char ***argv;
|
1995-01-10 18:43:33 +01:00
|
|
|
#endif
|
1994-08-29 12:46:42 +02:00
|
|
|
{
|
|
|
|
*argc = orig_argc;
|
|
|
|
*argv = orig_argv;
|
|
|
|
}
|
|
|
|
|
1990-12-21 00:03:58 +01:00
|
|
|
#endif
|
|
|
|
|
1993-01-26 14:33:44 +01:00
|
|
|
|
1994-08-19 14:03:04 +02:00
|
|
|
/* Python version information */
|
|
|
|
|
|
|
|
#include "patchlevel.h"
|
|
|
|
|
|
|
|
/* Return the version string. This is constructed from the official
|
|
|
|
version number (from patchlevel.h), and the current date (if known
|
|
|
|
to the compiler, else a manually inserted date). */
|
|
|
|
|
1995-02-13 18:10:11 +01:00
|
|
|
#define VERSION "%s (%s)%s"
|
1994-08-19 14:03:04 +02:00
|
|
|
|
|
|
|
#ifdef __DATE__
|
|
|
|
#define DATE __DATE__
|
|
|
|
#else
|
1995-07-08 00:38:14 +02:00
|
|
|
#define DATE "July 7 1995"
|
1995-02-13 18:10:11 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef THINK_C
|
|
|
|
#define COMPILER " [THINK C]"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
|
|
#ifdef __powerc
|
|
|
|
#define COMPILER " [CW PPC]"
|
|
|
|
#else
|
|
|
|
#define COMPILER " [CW 68K]"
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef MPW
|
|
|
|
#ifdef __SC__
|
|
|
|
#define COMPILER " [Symantec MPW]"
|
|
|
|
#else
|
|
|
|
#define COMPILER " [Apple MPW]"
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __GNUC__
|
1995-02-17 16:11:57 +01:00
|
|
|
#define COMPILER " [GCC " __VERSION__ "]"
|
1995-02-13 18:10:11 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef COMPILER
|
|
|
|
#define COMPILER ""
|
1994-08-19 14:03:04 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
char *
|
|
|
|
getversion()
|
|
|
|
{
|
|
|
|
static char version[80];
|
1995-02-13 18:10:11 +01:00
|
|
|
sprintf(version, VERSION, PATCHLEVEL, DATE, COMPILER);
|
1994-08-19 14:03:04 +02:00
|
|
|
return version;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Return the copyright string. This is updated manually. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
getcopyright()
|
|
|
|
{
|
1995-01-04 20:10:35 +01:00
|
|
|
return "Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam";
|
1994-08-19 14:03:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* Return the initial python search path. This is called once from
|
|
|
|
initsys() to initialize sys.path.
|
|
|
|
The environment variable PYTHONPATH is fetched and the default path
|
|
|
|
appended. (The Mac has no environment variables, so there the
|
|
|
|
default path is always returned.) The default path may be passed
|
|
|
|
to the preprocessor; if not, a system-dependent default is used. */
|
|
|
|
|
|
|
|
#ifndef PYTHONPATH
|
1993-01-21 17:07:51 +01:00
|
|
|
#ifdef macintosh
|
1994-08-23 15:48:30 +02:00
|
|
|
#define PYTHONPATH ": :Lib :Lib:stdwin :Lib:test :Lib:mac"
|
1993-01-26 14:33:44 +01:00
|
|
|
#endif /* macintosh */
|
1994-08-01 13:34:53 +02:00
|
|
|
#endif /* !PYTHONPATH */
|
1993-01-26 14:33:44 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
#ifndef PYTHONPATH
|
|
|
|
#if defined(MSDOS) || defined(NT)
|
1993-07-09 12:51:31 +02:00
|
|
|
#define PYTHONPATH ".;..\\lib;\\python\\lib"
|
1994-08-01 13:34:53 +02:00
|
|
|
#endif /* MSDOS || NT */
|
|
|
|
#endif /* !PYTHONPATH */
|
1993-01-26 14:33:44 +01:00
|
|
|
|
|
|
|
#ifndef PYTHONPATH
|
1994-08-01 13:34:53 +02:00
|
|
|
#define PYTHONPATH ".:/usr/local/lib/python"
|
1993-01-21 17:07:51 +01:00
|
|
|
#endif /* !PYTHONPATH */
|
1990-12-21 00:03:58 +01:00
|
|
|
|
1995-01-10 18:43:33 +01:00
|
|
|
#ifndef __cplusplus
|
1990-12-21 00:03:58 +01:00
|
|
|
extern char *getenv();
|
1995-01-10 18:43:33 +01:00
|
|
|
#endif
|
1990-12-21 00:03:58 +01:00
|
|
|
|
1995-07-08 00:38:14 +02:00
|
|
|
#ifndef PLATFORM
|
|
|
|
#define PLATFORM "unknown"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
char *
|
|
|
|
getplatform()
|
|
|
|
{
|
|
|
|
return PLATFORM;
|
|
|
|
}
|
|
|
|
|
1990-12-21 00:03:58 +01:00
|
|
|
char *
|
|
|
|
getpythonpath()
|
|
|
|
{
|
1995-01-10 18:43:33 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
void fatal(char *);
|
|
|
|
#endif
|
1990-12-21 00:03:58 +01:00
|
|
|
char *path = getenv("PYTHONPATH");
|
1992-06-03 19:05:13 +02:00
|
|
|
char *defpath = PYTHONPATH;
|
1994-10-05 13:25:12 +01:00
|
|
|
static char *buf = NULL;
|
1993-01-26 14:33:44 +01:00
|
|
|
char *p;
|
1992-06-03 19:05:13 +02:00
|
|
|
int n;
|
|
|
|
|
1994-10-05 13:25:12 +01:00
|
|
|
if (path == NULL)
|
|
|
|
path = "";
|
1992-06-03 19:05:13 +02:00
|
|
|
n = strlen(path) + strlen(defpath) + 2;
|
1994-10-05 13:25:12 +01:00
|
|
|
if (buf != NULL) {
|
|
|
|
free(buf);
|
|
|
|
buf = NULL;
|
|
|
|
}
|
1992-06-03 19:05:13 +02:00
|
|
|
buf = malloc(n);
|
|
|
|
if (buf == NULL)
|
1994-10-05 13:25:12 +01:00
|
|
|
fatal("not enough memory to copy module search path");
|
1992-06-03 19:05:13 +02:00
|
|
|
strcpy(buf, path);
|
1993-01-26 14:33:44 +01:00
|
|
|
p = buf + strlen(buf);
|
1994-10-05 15:48:22 +01:00
|
|
|
if (p != buf)
|
|
|
|
*p++ = DELIM;
|
1993-01-26 14:33:44 +01:00
|
|
|
strcpy(p, defpath);
|
1992-06-03 19:05:13 +02:00
|
|
|
return buf;
|
1990-12-21 00:03:58 +01:00
|
|
|
}
|
1991-02-19 13:22:24 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* Table of built-in modules.
|
1994-08-01 13:34:53 +02:00
|
|
|
These are initialized when first imported.
|
|
|
|
Note: selection of optional extensions is now generally done by the
|
|
|
|
makesetup script. */
|
1991-02-19 13:22:24 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* -- ADDMODULE MARKER 1 -- */
|
1991-06-04 21:47:46 +02:00
|
|
|
|
1992-09-03 22:49:55 +02:00
|
|
|
extern void initmarshal();
|
1995-01-02 20:30:30 +01:00
|
|
|
extern void initimp();
|
1991-02-19 13:22:24 +01:00
|
|
|
|
|
|
|
struct {
|
|
|
|
char *name;
|
|
|
|
void (*initfunc)();
|
|
|
|
} inittab[] = {
|
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* -- ADDMODULE MARKER 2 -- */
|
1993-10-11 13:54:31 +01:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* This module "lives in" with marshal.c */
|
|
|
|
{"marshal", initmarshal},
|
1993-11-10 13:53:24 +01:00
|
|
|
|
1995-01-02 20:30:30 +01:00
|
|
|
/* This lives it with import.c */
|
|
|
|
{"imp", initimp},
|
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* These entries are here for sys.builtin_module_names */
|
|
|
|
{"__main__", NULL},
|
|
|
|
{"__builtin__", NULL},
|
|
|
|
{"sys", NULL},
|
1992-09-25 23:54:05 +02:00
|
|
|
|
1994-08-01 13:34:53 +02:00
|
|
|
/* Sentinel */
|
|
|
|
{0, 0}
|
1991-02-19 13:22:24 +01:00
|
|
|
};
|
1993-04-01 22:59:32 +02:00
|
|
|
|
1994-10-05 15:48:22 +01:00
|
|
|
#ifndef USE_FROZEN
|
1993-04-01 22:59:32 +02:00
|
|
|
struct frozen {
|
|
|
|
char *name;
|
|
|
|
char *code;
|
|
|
|
int size;
|
|
|
|
} frozen_modules[] = {
|
|
|
|
{0, 0, 0}
|
|
|
|
};
|
|
|
|
#endif
|
1995-01-10 18:43:33 +01:00
|
|
|
|
|
|
|
#if defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|