blob: a8076894d905989fd9c9c52e378eae72922df085 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +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 Rossumd266eb41996-10-25 14:44:06 +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
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032/* Module definition and import implementation */
33
Guido van Rossum79f25d91997-04-29 20:08:16 +000034#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036#include "node.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037#include "token.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000039#include "marshal.h"
40#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000042#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043#include "importdl.h"
Jack Jansen9c96a921995-02-15 22:57:06 +000044#ifdef macintosh
45#include "macglue.h"
46#endif
Guido van Rossumc405b7b1991-06-04 19:39:42 +000047
Guido van Rossum80bb9651996-12-05 23:27:02 +000048#ifdef HAVE_UNISTD_H
49#include <unistd.h>
50#endif
51
Guido van Rossumaee0bad1997-09-05 07:33:22 +000052/* We expect that stat exists on most systems.
53 It's confirmed on Unix, Mac and Windows.
54 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */
55#ifndef DONT_HAVE_STAT
56#define HAVE_STAT
57
58#include <sys/types.h>
59#include <sys/stat.h>
60
Guido van Rossum595d7ba1997-12-05 21:45:29 +000061#if defined(PYCC_VACPP)
62/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
63#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
64#endif
65
Guido van Rossumaee0bad1997-09-05 07:33:22 +000066#ifndef S_ISDIR
67#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
68#endif
69
70#endif
71
72
Guido van Rossum79f25d91997-04-29 20:08:16 +000073extern long PyOS_GetLastModificationTime(); /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000074
Guido van Rossum6c849691994-09-26 15:47:17 +000075/* Magic word to reject .pyc files generated by other Python versions */
Guido van Rossum7faeab31995-07-07 22:50:36 +000076/* Change for each incompatible change */
77/* The value of CR and LF is incorporated so if you ever read or write
78 a .pyc file in text mode the magic number will be wrong; also, the
79 Apple MPW compiler swaps their values, botching string constants */
80/* XXX Perhaps the magic number should be frozen and a version field
81 added to the .pyc file header? */
Guido van Rossumdd5db431997-01-17 21:06:11 +000082/* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
Guido van Rossum99d18251997-01-24 03:44:53 +000083#define MAGIC (20121 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000084
Guido van Rossum25ce5661997-08-02 03:10:38 +000085/* See _PyImport_FixupExtension() below */
86static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000087
Guido van Rossum771c6c81997-10-31 18:37:24 +000088/* This table is defined in config.c: */
89extern struct _inittab _PyImport_Inittab[];
90
91struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000092
Guido van Rossum1ae940a1995-01-02 19:04:15 +000093/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000094
95void
Guido van Rossum25ce5661997-08-02 03:10:38 +000096_PyImport_Init()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000097{
Guido van Rossum0824f631997-03-11 18:37:35 +000098 if (Py_OptimizeFlag) {
99 /* Replace ".pyc" with ".pyo" in import_filetab */
100 struct filedescr *p;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000101 for (p = _PyImport_Filetab; p->suffix != NULL; p++) {
Guido van Rossum0824f631997-03-11 18:37:35 +0000102 if (strcmp(p->suffix, ".pyc") == 0)
103 p->suffix = ".pyo";
104 }
105 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000106}
107
Guido van Rossum25ce5661997-08-02 03:10:38 +0000108void
109_PyImport_Fini()
110{
111 Py_XDECREF(extensions);
112 extensions = NULL;
113}
114
115
116/* Helper for sys */
117
118PyObject *
119PyImport_GetModuleDict()
120{
121 PyInterpreterState *interp = PyThreadState_Get()->interp;
122 if (interp->modules == NULL)
123 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
124 return interp->modules;
125}
126
Guido van Rossum3f5da241990-12-20 15:06:42 +0000127
Guido van Rossum085d2691997-08-05 02:20:51 +0000128/* Helper for PyImport_Cleanup */
129
130static void
131clear_carefully(d)
132 PyObject *d;
133{
134 /* To make the execution order of destructors for global
135 objects a bit more predictable, we first zap all objects
136 whose name starts with a single underscore, before we clear
137 the entire dictionary. We zap them by replacing them with
138 None, rather than deleting them from the dictionary, to
139 avoid rehashing the dictionary (to some extent). */
140
141 int pos;
142 PyObject *key, *value;
143
Guido van Rossum758eec01998-01-19 21:58:26 +0000144 Py_INCREF(d); /* Prevent it from being deleted recursively */
145
146 /* First, clear only names starting with a single underscore */
Guido van Rossum085d2691997-08-05 02:20:51 +0000147 pos = 0;
148 while (PyDict_Next(d, &pos, &key, &value)) {
149 if (value != Py_None && PyString_Check(key)) {
150 char *s = PyString_AsString(key);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000151 if (s[0] == '_' && s[1] != '_') {
152 if (Py_VerboseFlag > 1)
153 fprintf(stderr, "# clear[1] %s\n", s);
Guido van Rossum085d2691997-08-05 02:20:51 +0000154 PyDict_SetItem(d, key, Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000155 }
Guido van Rossum085d2691997-08-05 02:20:51 +0000156 }
157 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000158
159 /* Next, clear all names except those starting with two underscores */
160 pos = 0;
161 while (PyDict_Next(d, &pos, &key, &value)) {
162 if (value != Py_None && PyString_Check(key)) {
163 char *s = PyString_AsString(key);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000164 if (s[0] != '_' || s[1] != '_') {
165 if (Py_VerboseFlag > 1)
166 fprintf(stderr, "# clear[2] %s\n", s);
Guido van Rossum758eec01998-01-19 21:58:26 +0000167 PyDict_SetItem(d, key, Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000168 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000169 }
170 }
171
172 PyDict_Clear(d); /* Finally, clear all names */
173
174 Py_DECREF(d); /* Match INCREF at top */
Guido van Rossum085d2691997-08-05 02:20:51 +0000175}
176
Guido van Rossum758eec01998-01-19 21:58:26 +0000177
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000178/* List of names to clear in sys */
179static char* sys_deletes[] = {
180 "exc_type", "exc_value", "exc_traceback",
181 "last_type", "last_value", "last_traceback",
182 NULL
183};
184
185
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000187
Guido van Rossum3f5da241990-12-20 15:06:42 +0000188void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000189PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000190{
Guido van Rossum758eec01998-01-19 21:58:26 +0000191 int pos, ndone;
192 char *name;
193 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000194 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000195 PyObject *modules = interp->modules;
196
197 if (modules == NULL)
198 return; /* Already done */
199
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000200 /* Delete some special variables first. These are common
201 places where user values hide and people complain when their
202 destructors fail. Since the modules containing them are
203 deleted *last* of all, they would come too late in the normal
204 destruction order. Sigh. */
205
206 value = PyDict_GetItemString(modules, "__builtin__");
207 if (value != NULL && PyModule_Check(value)) {
208 dict = PyModule_GetDict(value);
209 if (Py_VerboseFlag)
210 fprintf(stderr, "# clear __builtin__._\n");
211 PyDict_SetItemString(dict, "_", Py_None);
212 }
213 value = PyDict_GetItemString(modules, "sys");
214 if (value != NULL && PyModule_Check(value)) {
215 char **p;
216 dict = PyModule_GetDict(value);
217 for (p = sys_deletes; *p != NULL; p++) {
218 if (Py_VerboseFlag)
219 fprintf(stderr, "# clear sys.%s\n", *p);
220 PyDict_SetItemString(dict, *p, Py_None);
221 }
222 }
223
Guido van Rossum758eec01998-01-19 21:58:26 +0000224 /* The special treatment of __builtin__ here is because even
225 when it's not referenced as a module, its dictionary is
226 referenced by almost every module's __builtins__. Since
227 deleting a module clears its dictionary (even if there are
228 references left to it), we need to delete the __builtin__
229 module last. Likewise, we don't delete sys until the very
230 end because it is implicitly referenced (e.g. by print).
231
232 Also note that we 'delete' modules by replacing their entry
233 in the modules dict with None, rather than really deleting
234 them; this avoids a rehash of the modules dictionary and
235 also marks them as "non existent" so they won't be
236 re-imported. */
237
238 /* First, repeatedly delete modules with a reference count of
239 one (skipping __builtin__ and sys) and delete them */
240 do {
241 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000242 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000243 while (PyDict_Next(modules, &pos, &key, &value)) {
244 if (value->ob_refcnt != 1)
245 continue;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000246 if (PyModule_Check(value)) {
Guido van Rossum758eec01998-01-19 21:58:26 +0000247 name = PyString_AsString(key);
248 dict = PyModule_GetDict(value);
249 if (strcmp(name, "__builtin__") == 0)
250 continue;
251 if (strcmp(name, "sys") == 0)
252 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000253 if (Py_VerboseFlag)
254 fprintf(stderr,
255 "# cleanup[1] %s\n", name);
Guido van Rossum758eec01998-01-19 21:58:26 +0000256 clear_carefully(dict);
257 PyDict_SetItem(modules, key, Py_None);
258 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000259 }
260 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000261 } while (ndone > 0);
262
263 /* Next, delete __main__ if it's still there */
264 value = PyDict_GetItemString(modules, "__main__");
265 if (value != NULL && PyModule_Check(value)) {
266 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000267 if (Py_VerboseFlag)
268 fprintf(stderr, "# cleanup __main__\n");
Guido van Rossum758eec01998-01-19 21:58:26 +0000269 clear_carefully(dict);
270 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000271 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000272
273 /* Next, delete all modules (still skipping __builtin__ and sys) */
274 pos = 0;
275 while (PyDict_Next(modules, &pos, &key, &value)) {
276 if (PyModule_Check(value)) {
277 name = PyString_AsString(key);
278 dict = PyModule_GetDict(value);
279 if (strcmp(name, "__builtin__") == 0)
280 continue;
281 if (strcmp(name, "sys") == 0)
282 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000283 if (Py_VerboseFlag)
284 fprintf(stderr, "# cleanup[2] %s\n", name);
Guido van Rossum758eec01998-01-19 21:58:26 +0000285 clear_carefully(dict);
286 PyDict_SetItem(modules, key, Py_None);
287 }
288 }
289
290 /* Next, delete sys and __builtin__ (in that order) */
291 value = PyDict_GetItemString(modules, "sys");
292 if (value != NULL && PyModule_Check(value)) {
293 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000294 if (Py_VerboseFlag)
295 fprintf(stderr, "# cleanup sys\n");
Guido van Rossum758eec01998-01-19 21:58:26 +0000296 clear_carefully(dict);
297 PyDict_SetItemString(modules, "sys", Py_None);
298 }
299 value = PyDict_GetItemString(modules, "__builtin__");
300 if (value != NULL && PyModule_Check(value)) {
301 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000302 if (Py_VerboseFlag)
303 fprintf(stderr, "# cleanup __builtin__\n");
304 clear_carefully(dict); /* XXX Is this necessary? */
Guido van Rossum758eec01998-01-19 21:58:26 +0000305 PyDict_SetItemString(modules, "__builtin__", Py_None);
306 }
307
308 /* Finally, clear and delete the modules directory */
309 PyDict_Clear(modules);
310 interp->modules = NULL;
311 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000312}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000313
314
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315/* Helper for pythonrun.c -- return magic number */
316
317long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000318PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000319{
320 return MAGIC;
321}
322
323
Guido van Rossum25ce5661997-08-02 03:10:38 +0000324/* Magic for extension modules (built-in as well as dynamically
325 loaded). To prevent initializing an extension module more than
326 once, we keep a static dictionary 'extensions' keyed by module name
327 (for built-in modules) or by filename (for dynamically loaded
328 modules), containing these modules. A copy od the module's
329 dictionary is stored by calling _PyImport_FixupExtension()
330 immediately after the module initialization function succeeds. A
331 copy can be retrieved from there by calling
332 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000333
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000335_PyImport_FixupExtension(name, filename)
336 char *name;
337 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000338{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000339 PyObject *modules, *mod, *dict, *copy;
340 if (extensions == NULL) {
341 extensions = PyDict_New();
342 if (extensions == NULL)
343 return NULL;
344 }
345 modules = PyImport_GetModuleDict();
346 mod = PyDict_GetItemString(modules, name);
347 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000348 PyErr_Format(PyExc_SystemError,
349 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000350 return NULL;
351 }
352 dict = PyModule_GetDict(mod);
353 if (dict == NULL)
354 return NULL;
355 copy = PyObject_CallMethod(dict, "copy", "");
356 if (copy == NULL)
357 return NULL;
358 PyDict_SetItemString(extensions, filename, copy);
359 Py_DECREF(copy);
360 return copy;
361}
362
363PyObject *
364_PyImport_FindExtension(name, filename)
365 char *name;
366 char *filename;
367{
368 PyObject *dict, *mod, *mdict, *result;
369 if (extensions == NULL)
370 return NULL;
371 dict = PyDict_GetItemString(extensions, filename);
372 if (dict == NULL)
373 return NULL;
374 mod = PyImport_AddModule(name);
375 if (mod == NULL)
376 return NULL;
377 mdict = PyModule_GetDict(mod);
378 if (mdict == NULL)
379 return NULL;
380 result = PyObject_CallMethod(mdict, "update", "O", dict);
381 if (result == NULL)
382 return NULL;
383 Py_DECREF(result);
384 if (Py_VerboseFlag)
385 fprintf(stderr, "import %s # previously loaded (%s)\n",
386 name, filename);
387 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000388}
389
390
391/* Get the module object corresponding to a module name.
392 First check the modules dictionary if there's one there,
393 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000394 Because the former action is most common, THIS DOES NOT RETURN A
395 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397PyObject *
398PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000399 char *name;
400{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000402 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000403
Guido van Rossum25ce5661997-08-02 03:10:38 +0000404 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000405 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000406 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000407 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000408 if (m == NULL)
409 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000410 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000411 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000412 return NULL;
413 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000414 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000415
416 return m;
417}
418
419
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000420/* Execute a code object in a module and return the module object
421 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000422
Guido van Rossum79f25d91997-04-29 20:08:16 +0000423PyObject *
424PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000425 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000426 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000427{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000428 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
429}
430
431PyObject *
432PyImport_ExecCodeModuleEx(name, co, pathname)
433 char *name;
434 PyObject *co;
435 char *pathname;
436{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000437 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000439
Guido van Rossum79f25d91997-04-29 20:08:16 +0000440 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000441 if (m == NULL)
442 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443 d = PyModule_GetDict(m);
444 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
445 if (PyDict_SetItemString(d, "__builtins__",
446 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000447 return NULL;
448 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000449 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000450 v = NULL;
451 if (pathname != NULL) {
452 v = PyString_FromString(pathname);
453 if (v == NULL)
454 PyErr_Clear();
455 }
456 if (v == NULL) {
457 v = ((PyCodeObject *)co)->co_filename;
458 Py_INCREF(v);
459 }
460 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000462 Py_DECREF(v);
463
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000464 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465 if (v == NULL)
466 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000468
Guido van Rossum25ce5661997-08-02 03:10:38 +0000469 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000470 PyErr_Format(PyExc_ImportError,
471 "Loaded module %.200s not found in sys.modules",
472 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000473 return NULL;
474 }
475
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000477
478 return m;
479}
480
481
482/* Given a pathname for a Python source file, fill a buffer with the
483 pathname for the corresponding compiled file. Return the pathname
484 for the compiled file, or NULL if there's no space in the buffer.
485 Doesn't set an exception. */
486
487static char *
488make_compiled_pathname(pathname, buf, buflen)
489 char *pathname;
490 char *buf;
491 int buflen;
492{
493 int len;
494
495 len = strlen(pathname);
496 if (len+2 > buflen)
497 return NULL;
498 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000499 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
501 return buf;
502}
503
504
505/* Given a pathname for a Python source file, its time of last
506 modification, and a pathname for a compiled file, check whether the
507 compiled file represents the same version of the source. If so,
508 return a FILE pointer for the compiled file, positioned just after
509 the header; if not, return NULL.
510 Doesn't set an exception. */
511
512static FILE *
513check_compiled_module(pathname, mtime, cpathname)
514 char *pathname;
515 long mtime;
516 char *cpathname;
517{
518 FILE *fp;
519 long magic;
520 long pyc_mtime;
521
522 fp = fopen(cpathname, "rb");
523 if (fp == NULL)
524 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526 if (magic != MAGIC) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 fprintf(stderr, "# %s has bad magic\n", cpathname);
529 fclose(fp);
530 return NULL;
531 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 fprintf(stderr, "# %s has bad mtime\n", cpathname);
536 fclose(fp);
537 return NULL;
538 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540 fprintf(stderr, "# %s matches %s\n", cpathname, pathname);
541 return fp;
542}
543
544
545/* Read a code object from a file and check it for validity */
546
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000548read_compiled_module(cpathname, fp)
549 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 FILE *fp;
551{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 if (co == NULL || !PyCode_Check(co)) {
557 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000558 PyErr_Format(PyExc_ImportError,
559 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000560 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561 return NULL;
562 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000564}
565
566
567/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000568 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571load_compiled_module(name, cpathname, fp)
572 char *name;
573 char *cpathname;
574 FILE *fp;
575{
576 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 PyCodeObject *co;
578 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000581 if (magic != MAGIC) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000582 PyErr_Format(PyExc_ImportError,
583 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584 return NULL;
585 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000587 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588 if (co == NULL)
589 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591 fprintf(stderr, "import %s # precompiled from %s\n",
592 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000593 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595
596 return m;
597}
598
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599/* Parse a source file and return the corresponding code object */
600
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602parse_source_module(pathname, fp)
603 char *pathname;
604 FILE *fp;
605{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607 node *n;
608
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000609 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 if (n == NULL)
611 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 co = PyNode_Compile(n, pathname);
613 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614
615 return co;
616}
617
618
619/* Write a compiled module to a file, placing the time of last
620 modification of its source into the header.
621 Errors are ignored, if a write error occurs an attempt is made to
622 remove the file. */
623
624static void
625write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000627 char *cpathname;
628 long mtime;
629{
630 FILE *fp;
631
632 fp = fopen(cpathname, "wb");
633 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635 fprintf(stderr,
636 "# can't create %s\n", cpathname);
637 return;
638 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 PyMarshal_WriteLongToFile(MAGIC, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 PyMarshal_WriteLongToFile(0L, fp);
642 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000643 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000645 fprintf(stderr, "# can't write %s\n", cpathname);
646 /* Don't keep partial file */
647 fclose(fp);
648 (void) unlink(cpathname);
649 return;
650 }
651 /* Now write the true mtime */
652 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000653 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000654 fflush(fp);
655 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657 fprintf(stderr, "# wrote %s\n", cpathname);
658#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000659 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660#endif
661}
662
663
664/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000665 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
666 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000669load_source_module(name, pathname, fp)
670 char *name;
671 char *pathname;
672 FILE *fp;
673{
674 long mtime;
675 FILE *fpc;
676 char buf[MAXPATHLEN+1];
677 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678 PyCodeObject *co;
679 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000681 mtime = PyOS_GetLastModificationTime(pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1);
683 if (cpathname != NULL &&
684 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000685 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686 fclose(fpc);
687 if (co == NULL)
688 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690 fprintf(stderr, "import %s # precompiled from %s\n",
691 name, cpathname);
692 }
693 else {
694 co = parse_source_module(pathname, fp);
695 if (co == NULL)
696 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000697 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698 fprintf(stderr, "import %s # from %s\n",
699 name, pathname);
700 write_compiled_module(co, cpathname, mtime);
701 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000702 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704
705 return m;
706}
707
708
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000709/* Forward */
710static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
711static struct filedescr *find_module Py_PROTO((char *, PyObject *,
712 char *, int, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000713static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000714
715/* Load a package and return its module object WITH INCREMENTED
716 REFERENCE COUNT */
717
718static PyObject *
719load_package(name, pathname)
720 char *name;
721 char *pathname;
722{
723 PyObject *m, *d, *file, *path;
724 int err;
725 char buf[MAXPATHLEN+1];
726 FILE *fp = NULL;
727 struct filedescr *fdp;
728
729 m = PyImport_AddModule(name);
730 if (m == NULL)
731 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000732 if (Py_VerboseFlag)
733 fprintf(stderr, "import %s # directory %s\n",
734 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000735 d = PyModule_GetDict(m);
736 file = PyString_FromString(pathname);
737 if (file == NULL)
738 return NULL;
739 path = Py_BuildValue("[O]", file);
740 if (path == NULL) {
741 Py_DECREF(file);
742 return NULL;
743 }
744 err = PyDict_SetItemString(d, "__file__", file);
745 if (err == 0)
746 err = PyDict_SetItemString(d, "__path__", path);
747 if (err != 0) {
748 m = NULL;
749 goto cleanup;
750 }
751 buf[0] = '\0';
752 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
753 if (fdp == NULL) {
754 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
755 PyErr_Clear();
756 }
757 else
758 m = NULL;
759 goto cleanup;
760 }
761 m = load_module(name, fp, buf, fdp->type);
762 if (fp != NULL)
763 fclose(fp);
764 cleanup:
765 Py_XINCREF(m);
766 Py_XDECREF(path);
767 Py_XDECREF(file);
768 return m;
769}
770
771
772/* Helper to test for built-in module */
773
774static int
775is_builtin(name)
776 char *name;
777{
778 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000779 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
780 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
781 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000782 return -1;
783 else
784 return 1;
785 }
786 }
787 return 0;
788}
789
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000790
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791/* Search the path (default sys.path) for a module. Return the
792 corresponding filedescr struct, and (via return arguments) the
793 pathname and an open file. Return NULL if the module is not found. */
794
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000795#ifdef MS_COREDLL
796extern FILE *PyWin_FindRegisteredModule();
797#endif
798
Guido van Rossum197346f1997-10-31 18:38:52 +0000799static int find_init_module Py_PROTO((char *)); /* Forward */
800
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801static struct filedescr *
802find_module(name, path, buf, buflen, p_fp)
803 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805 /* Output parameters: */
806 char *buf;
807 int buflen;
808 FILE **p_fp;
809{
810 int i, npath, len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000811 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000812 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000813 struct stat statbuf;
814
815 if (path == NULL) {
816 if (is_builtin(name)) {
817 static struct filedescr fd = {"", "", C_BUILTIN};
818 return &fd;
819 }
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000820 if (find_frozen(name) != NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000821 static struct filedescr fd = {"", "", PY_FROZEN};
822 return &fd;
823 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000824
Guido van Rossumac279101996-08-22 23:10:58 +0000825#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000826 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
827 if (fp != NULL) {
828 *p_fp = fp;
829 return fdp;
830 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000831#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000832 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000833
834
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000835 if (path == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 path = PySys_GetObject("path");
837 if (path == NULL || !PyList_Check(path)) {
838 PyErr_SetString(PyExc_ImportError,
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000839 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840 return NULL;
841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843 namelen = strlen(name);
844 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 PyObject *v = PyList_GetItem(path, i);
846 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000849 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000850 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 strcpy(buf, PyString_AsString(v));
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000852 if ((int)strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000853 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000854#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000855#ifdef INTERN_STRINGS
856 /*
857 ** Speedup: each sys.path item is interned, and
858 ** FindResourceModule remembers which items refer to
859 ** folders (so we don't have to bother trying to look
860 ** into them for resources).
861 */
862 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
863 v = PyList_GET_ITEM(path, i);
864#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000865 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 static struct filedescr resfiledescr =
867 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000868
869 return &resfiledescr;
870 }
871#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000872 if (len > 0 && buf[len-1] != SEP
873#ifdef ALTSEP
874 && buf[len-1] != ALTSEP
875#endif
876 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000877 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000878#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000879 /* see if we are searching in directory dos-8x3 */
880 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000881 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000883 for (j = 0; (ch = name[j]) && j < 8; j++)
884 if (isupper(ch))
885 buf[len++] = tolower(ch);
886 else
887 buf[len++] = ch;
888 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000889 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000890#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000891 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000892 strcpy(buf+len, name);
893 len += namelen;
894 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000895#ifdef HAVE_STAT
896 if (stat(buf, &statbuf) == 0) {
897 static struct filedescr fd = {"", "", PKG_DIRECTORY};
Guido van Rossum197346f1997-10-31 18:38:52 +0000898 if (S_ISDIR(statbuf.st_mode)) {
899 if (find_init_module(buf))
900 return &fd;
901 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000902 }
903#else
904 /* XXX How are you going to test for directories? */
905#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +0000906#ifdef macintosh
907 fdp = PyMac_FindModuleExtension(buf, &len, name);
908 if (fdp)
909 fp = fopen(buf, fdp->mode);
910#else
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 if (Py_VerboseFlag > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000914 fprintf(stderr, "# trying %s\n", buf);
915 fp = fopen(buf, fdp->mode);
916 if (fp != NULL)
917 break;
918 }
Guido van Rossum741689d1997-08-12 14:53:39 +0000919#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000920 if (fp != NULL)
921 break;
922 }
923 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000924 PyErr_Format(PyExc_ImportError,
925 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926 return NULL;
927 }
928
929 *p_fp = fp;
930 return fdp;
931}
932
Guido van Rossum197346f1997-10-31 18:38:52 +0000933#ifdef HAVE_STAT
934/* Helper to look for __init__.py or __init__.py[co] in potential package */
935static int
936find_init_module(buf)
937 char *buf;
938{
939 int save_len = strlen(buf);
940 int i = save_len;
941 struct stat statbuf;
942
943 if (save_len + 13 >= MAXPATHLEN)
944 return 0;
945 buf[i++] = SEP;
946 strcpy(buf+i, "__init__.py");
947 if (stat(buf, &statbuf) == 0) {
948 buf[save_len] = '\0';
949 return 1;
950 }
951 i += strlen(buf+i);
952 if (Py_OptimizeFlag)
953 strcpy(buf+i, "o");
954 else
955 strcpy(buf+i, "c");
956 if (stat(buf, &statbuf) == 0) {
957 buf[save_len] = '\0';
958 return 1;
959 }
960 buf[save_len] = '\0';
961 return 0;
962}
963#endif /* HAVE_STAT */
964
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000966static int init_builtin Py_PROTO((char *)); /* Forward */
967
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000969 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000972load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000973 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000974 FILE *fp;
975 char *buf;
976 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000977{
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000978 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000981
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000982 /* First check that there's an open file (if we need one) */
983 switch (type) {
984 case PY_SOURCE:
985 case PY_COMPILED:
986 if (fp == NULL) {
987 PyErr_Format(PyExc_ValueError,
988 "file object required for import (type code %d)",
989 type);
990 return NULL;
991 }
992 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000994 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995
996 case PY_SOURCE:
997 m = load_source_module(name, buf, fp);
998 break;
999
1000 case PY_COMPILED:
1001 m = load_compiled_module(name, buf, fp);
1002 break;
1003
1004 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001005 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001006 break;
1007
Jack Jansen9c96a921995-02-15 22:57:06 +00001008#ifdef macintosh
1009 case PY_RESOURCE:
1010 m = PyMac_LoadResourceModule(name, buf);
1011 break;
1012#endif
1013
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001014 case PKG_DIRECTORY:
1015 m = load_package(name, buf);
1016 break;
1017
1018 case C_BUILTIN:
1019 case PY_FROZEN:
1020 if (type == C_BUILTIN)
1021 err = init_builtin(name);
1022 else
1023 err = PyImport_ImportFrozenModule(name);
1024 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001025 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001026 if (err == 0) {
1027 PyErr_Format(PyExc_ImportError,
1028 "Purported %s module %.200s not found",
1029 type == C_BUILTIN ?
1030 "builtin" : "frozen",
1031 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001032 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001033 }
1034 modules = PyImport_GetModuleDict();
1035 m = PyDict_GetItemString(modules, name);
1036 if (m == NULL) {
1037 PyErr_Format(
1038 PyExc_ImportError,
1039 "%s module %.200s not properly initialized",
1040 type == C_BUILTIN ?
1041 "builtin" : "frozen",
1042 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001043 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001044 }
1045 Py_INCREF(m);
1046 break;
1047
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001048 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001049 PyErr_Format(PyExc_ImportError,
1050 "Don't know how to import %.200s (type code %d)",
1051 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001052 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001053
1054 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001055
1056 return m;
1057}
1058
1059
1060/* Initialize a built-in module.
1061 Return 1 for succes, 0 if the module is not found, and -1 with
1062 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001063
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001064static int
1065init_builtin(name)
1066 char *name;
1067{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001068 struct _inittab *p;
1069 PyObject *mod;
1070
1071 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1072 return 1;
1073
Guido van Rossum771c6c81997-10-31 18:37:24 +00001074 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001075 if (strcmp(name, p->name) == 0) {
1076 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001077 PyErr_Format(PyExc_ImportError,
1078 "Cannot re-init internal module %.200s",
1079 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001080 return -1;
1081 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 if (Py_VerboseFlag)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001083 fprintf(stderr, "import %s # builtin\n", name);
1084 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001086 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001087 if (_PyImport_FixupExtension(name, name) == NULL)
1088 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001089 return 1;
1090 }
1091 }
1092 return 0;
1093}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001094
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001096/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001098static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001099find_frozen(name)
1100 char *name;
1101{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001102 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001103
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001105 if (p->name == NULL)
1106 return NULL;
1107 if (strcmp(p->name, name) == 0)
1108 break;
1109 }
1110 return p;
1111}
1112
Guido van Rossum79f25d91997-04-29 20:08:16 +00001113static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001114get_frozen_object(name)
1115 char *name;
1116{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001117 struct _frozen *p = find_frozen(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001118
1119 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001120 PyErr_Format(PyExc_ImportError,
1121 "No such frozen object named %.200s",
1122 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001123 return NULL;
1124 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 return PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001126}
1127
1128/* Initialize a frozen module.
1129 Return 1 for succes, 0 if the module is not found, and -1 with
1130 an exception set if the initialization failed.
1131 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001132
1133int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001135 char *name;
1136{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001137 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 PyObject *co;
1139 PyObject *m;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001140
1141 if (p == NULL)
1142 return 0;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 if (Py_VerboseFlag)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001144 fprintf(stderr, "import %s # frozen\n", name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 co = PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001146 if (co == NULL)
1147 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 if (!PyCode_Check(co)) {
1149 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001150 PyErr_Format(PyExc_TypeError,
1151 "frozen object %.200s is not a code object",
1152 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001153 return -1;
1154 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001155 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001157 if (m == NULL)
1158 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001160 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001161}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001162
1163
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001165 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001166
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167PyObject *
1168PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001169 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001170{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001171 static PyObject *fromlist = NULL;
1172 if (fromlist == NULL && strchr(name, '.') != NULL) {
1173 fromlist = Py_BuildValue("[s]", "*");
1174 if (fromlist == NULL)
1175 return NULL;
1176 }
1177 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001178}
1179
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001180/* Forward declarations for helper routines */
1181static PyObject *get_parent Py_PROTO((PyObject *globals,
1182 char *buf, int *p_buflen));
1183static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1184 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001185static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001186static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001187 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001188static PyObject * import_submodule Py_PROTO((PyObject *mod,
1189 char *name, char *fullname));
1190
1191/* The Magnum Opus of dotted-name import :-) */
1192
1193/* XXX TO DO:
1194 - Remember misses in package directories so package submodules
1195 that all import the same toplevel module don't keep hitting on the
1196 package directory first
1197*/
1198
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001199PyObject *
1200PyImport_ImportModuleEx(name, globals, locals, fromlist)
1201 char *name;
1202 PyObject *globals;
1203 PyObject *locals;
1204 PyObject *fromlist;
1205{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001206 char buf[MAXPATHLEN+1];
1207 int buflen = 0;
1208 PyObject *parent, *head, *next, *tail;
1209
1210 parent = get_parent(globals, buf, &buflen);
1211 if (parent == NULL)
1212 return NULL;
1213
1214 head = load_next(parent, Py_None, &name, buf, &buflen);
1215 if (head == NULL)
1216 return NULL;
1217
1218 tail = head;
1219 Py_INCREF(tail);
1220 while (name) {
1221 next = load_next(tail, tail, &name, buf, &buflen);
1222 Py_DECREF(tail);
1223 if (next == NULL) {
1224 Py_DECREF(head);
1225 return NULL;
1226 }
1227 tail = next;
1228 }
1229
1230 if (fromlist != NULL) {
1231 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1232 fromlist = NULL;
1233 }
1234
1235 if (fromlist == NULL) {
1236 Py_DECREF(tail);
1237 return head;
1238 }
1239
1240 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001241 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001242 Py_DECREF(tail);
1243 return NULL;
1244 }
1245
1246 return tail;
1247}
1248
1249static PyObject *
1250get_parent(globals, buf, p_buflen)
1251 PyObject *globals;
1252 char *buf;
1253 int *p_buflen;
1254{
1255 static PyObject *namestr = NULL;
1256 static PyObject *pathstr = NULL;
1257 PyObject *modname, *modpath, *modules, *parent;
1258
1259 if (globals == NULL || !PyDict_Check(globals))
1260 return Py_None;
1261
1262 if (namestr == NULL) {
1263 namestr = PyString_InternFromString("__name__");
1264 if (namestr == NULL)
1265 return NULL;
1266 }
1267 if (pathstr == NULL) {
1268 pathstr = PyString_InternFromString("__path__");
1269 if (pathstr == NULL)
1270 return NULL;
1271 }
1272
1273 *buf = '\0';
1274 *p_buflen = 0;
1275 modname = PyDict_GetItem(globals, namestr);
1276 if (modname == NULL || !PyString_Check(modname))
1277 return Py_None;
1278
1279 modpath = PyDict_GetItem(globals, pathstr);
1280 if (modpath != NULL) {
1281 int len = PyString_GET_SIZE(modname);
1282 if (len > MAXPATHLEN) {
1283 PyErr_SetString(PyExc_ValueError,
1284 "Module name too long");
1285 return NULL;
1286 }
1287 strcpy(buf, PyString_AS_STRING(modname));
1288 *p_buflen = len;
1289 }
1290 else {
1291 char *start = PyString_AS_STRING(modname);
1292 char *lastdot = strrchr(start, '.');
1293 int len;
1294 if (lastdot == NULL)
1295 return Py_None;
1296 len = lastdot - start;
1297 if (len >= MAXPATHLEN) {
1298 PyErr_SetString(PyExc_ValueError,
1299 "Module name too long");
1300 return NULL;
1301 }
1302 strncpy(buf, start, len);
1303 buf[len] = '\0';
1304 *p_buflen = len;
1305 }
1306
1307 modules = PyImport_GetModuleDict();
1308 parent = PyDict_GetItemString(modules, buf);
1309 if (parent == NULL)
1310 parent = Py_None;
1311 return parent;
1312 /* We expect, but can't guarantee, if parent != None, that:
1313 - parent.__name__ == buf
1314 - parent.__dict__ is globals
1315 If this is violated... Who cares? */
1316}
1317
1318static PyObject *
1319load_next(mod, altmod, p_name, buf, p_buflen)
1320 PyObject *mod;
1321 PyObject *altmod; /* Either None or same as mod */
1322 char **p_name;
1323 char *buf;
1324 int *p_buflen;
1325{
1326 char *name = *p_name;
1327 char *dot = strchr(name, '.');
1328 int len;
1329 char *p;
1330 PyObject *result;
1331
1332 if (dot == NULL) {
1333 *p_name = NULL;
1334 len = strlen(name);
1335 }
1336 else {
1337 *p_name = dot+1;
1338 len = dot-name;
1339 }
1340
1341 p = buf + *p_buflen;
1342 if (p != buf)
1343 *p++ = '.';
1344 if (p+len-buf >= MAXPATHLEN) {
1345 PyErr_SetString(PyExc_ValueError,
1346 "Module name too long");
1347 return NULL;
1348 }
1349 strncpy(p, name, len);
1350 p[len] = '\0';
1351 *p_buflen = p+len-buf;
1352
1353 result = import_submodule(mod, p, buf);
1354 if (result == Py_None && altmod != mod) {
1355 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001356 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001357 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001358 if (result != NULL && result != Py_None) {
1359 if (mark_miss(buf) != 0) {
1360 Py_DECREF(result);
1361 return NULL;
1362 }
1363 strncpy(buf, name, len);
1364 buf[len] = '\0';
1365 *p_buflen = len;
1366 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001367 }
1368 if (result == NULL)
1369 return NULL;
1370
1371 if (result == Py_None) {
1372 Py_DECREF(result);
1373 PyErr_Format(PyExc_ImportError,
1374 "No module named %.200s", name);
1375 return NULL;
1376 }
1377
1378 return result;
1379}
1380
1381static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001382mark_miss(name)
1383 char *name;
1384{
1385 PyObject *modules = PyImport_GetModuleDict();
1386 return PyDict_SetItemString(modules, name, Py_None);
1387}
1388
1389static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001390ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001391 PyObject *mod;
1392 PyObject *fromlist;
1393 char *buf;
1394 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001395 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001396{
1397 int i;
1398
1399 if (!PyObject_HasAttrString(mod, "__path__"))
1400 return 1;
1401
1402 for (i = 0; ; i++) {
1403 PyObject *item = PySequence_GetItem(fromlist, i);
1404 int hasit;
1405 if (item == NULL) {
1406 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1407 PyErr_Clear();
1408 return 1;
1409 }
1410 return 0;
1411 }
1412 if (!PyString_Check(item)) {
1413 PyErr_SetString(PyExc_TypeError,
1414 "Item in ``from list'' not a string");
1415 Py_DECREF(item);
1416 return 0;
1417 }
1418 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001419 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001420 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001421 /* See if the package defines __all__ */
1422 if (recursive)
1423 continue; /* Avoid endless recursion */
1424 all = PyObject_GetAttrString(mod, "__all__");
1425 if (all == NULL)
1426 PyErr_Clear();
1427 else {
1428 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1429 return 0;
1430 Py_DECREF(all);
1431 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001432 continue;
1433 }
1434 hasit = PyObject_HasAttr(mod, item);
1435 if (!hasit) {
1436 char *subname = PyString_AS_STRING(item);
1437 PyObject *submod;
1438 char *p;
1439 if (buflen + strlen(subname) >= MAXPATHLEN) {
1440 PyErr_SetString(PyExc_ValueError,
1441 "Module name too long");
1442 Py_DECREF(item);
1443 return 0;
1444 }
1445 p = buf + buflen;
1446 *p++ = '.';
1447 strcpy(p, subname);
1448 submod = import_submodule(mod, subname, buf);
1449 Py_XDECREF(submod);
1450 if (submod == NULL) {
1451 Py_DECREF(item);
1452 return 0;
1453 }
1454 }
1455 Py_DECREF(item);
1456 }
1457
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001458 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001459}
1460
1461static PyObject *
1462import_submodule(mod, subname, fullname)
1463 PyObject *mod; /* May be None */
1464 char *subname;
1465 char *fullname;
1466{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001467 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001469
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001470 /* Require:
1471 if mod == None: subname == fullname
1472 else: mod.__name__ + "." + subname == fullname
1473 */
1474
1475 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001476 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001477 }
1478 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001479 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001480 char buf[MAXPATHLEN+1];
1481 struct filedescr *fdp;
1482 FILE *fp = NULL;
1483
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001484 path = PyObject_GetAttrString(mod, "__path__");
1485 if (path == NULL)
1486 PyErr_Clear();
1487
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001488 buf[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001489 fdp = find_module(subname, path,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001490 buf, MAXPATHLEN+1, &fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001491 if (fdp == NULL) {
1492 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1493 return NULL;
1494 PyErr_Clear();
1495 Py_INCREF(Py_None);
1496 return Py_None;
1497 }
1498 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001499 if (fp)
1500 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001501 if (m != NULL && mod != Py_None) {
1502 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1503 Py_DECREF(m);
1504 m = NULL;
1505 }
1506 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001507 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001508
1509 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001510}
1511
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512
1513/* Re-import a module of any kind and return its module object, WITH
1514 INCREMENTED REFERENCE COUNT */
1515
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516PyObject *
1517PyImport_ReloadModule(m)
1518 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001519{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001520 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001521 PyObject *path = NULL;
1522 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001523 char buf[MAXPATHLEN+1];
1524 struct filedescr *fdp;
1525 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001526
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 if (m == NULL || !PyModule_Check(m)) {
1528 PyErr_SetString(PyExc_TypeError,
1529 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001530 return NULL;
1531 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001533 if (name == NULL)
1534 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001535 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001536 PyErr_Format(PyExc_ImportError,
1537 "reload(): module %.200s not in sys.modules",
1538 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539 return NULL;
1540 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001541 subname = strrchr(name, '.');
1542 if (subname == NULL)
1543 subname = name;
1544 else {
1545 PyObject *parentname, *parent;
1546 parentname = PyString_FromStringAndSize(name, (subname-name));
1547 if (parentname == NULL)
1548 return NULL;
1549 parent = PyDict_GetItem(modules, parentname);
1550 if (parent == NULL) {
1551 PyErr_Format(PyExc_ImportError,
1552 "reload(): parent %.200s not in sys.modules",
1553 name);
1554 return NULL;
1555 }
1556 subname++;
1557 path = PyObject_GetAttrString(parent, "__path__");
1558 if (path == NULL)
1559 PyErr_Clear();
1560 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001561 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001562 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1563 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001564 if (fdp == NULL)
1565 return NULL;
1566 m = load_module(name, fp, buf, fdp->type);
1567 if (fp)
1568 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001569 return m;
1570}
1571
1572
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001573/* Higher-level import emulator which emulates the "import" statement
1574 more accurately -- it invokes the __import__() function from the
1575 builtins of the current globals. This means that the import is
1576 done using whatever import hooks are installed in the current
1577 environment, e.g. by "ni" or "rexec". */
1578
1579PyObject *
1580PyImport_Import(module_name)
1581 PyObject *module_name;
1582{
1583 static PyObject *silly_list = NULL;
1584 static PyObject *builtins_str = NULL;
1585 static PyObject *import_str = NULL;
1586 static PyObject *standard_builtins = NULL;
1587 PyObject *globals = NULL;
1588 PyObject *import = NULL;
1589 PyObject *builtins = NULL;
1590 PyObject *r = NULL;
1591
1592 /* Initialize constant string objects */
1593 if (silly_list == NULL) {
1594 import_str = PyString_InternFromString("__import__");
1595 if (import_str == NULL)
1596 return NULL;
1597 builtins_str = PyString_InternFromString("__builtins__");
1598 if (builtins_str == NULL)
1599 return NULL;
1600 silly_list = Py_BuildValue("[s]", "__doc__");
1601 if (silly_list == NULL)
1602 return NULL;
1603 }
1604
1605 /* Get the builtins from current globals */
1606 globals = PyEval_GetGlobals();
1607 if(globals != NULL) {
1608 builtins = PyObject_GetItem(globals, builtins_str);
1609 if (builtins == NULL)
1610 goto err;
1611 }
1612 else {
1613 /* No globals -- use standard builtins, and fake globals */
1614 PyErr_Clear();
1615
1616 if (standard_builtins == NULL) {
1617 standard_builtins =
1618 PyImport_ImportModule("__builtin__");
1619 if (standard_builtins == NULL)
1620 return NULL;
1621 }
1622
1623 builtins = standard_builtins;
1624 Py_INCREF(builtins);
1625 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1626 if (globals == NULL)
1627 goto err;
1628 }
1629
1630 /* Get the __import__ function from the builtins */
1631 if (PyDict_Check(builtins))
1632 import=PyObject_GetItem(builtins, import_str);
1633 else
1634 import=PyObject_GetAttr(builtins, import_str);
1635 if (import == NULL)
1636 goto err;
1637
1638 /* Call the _import__ function with the proper argument list */
1639 r = PyObject_CallFunction(import, "OOOO",
1640 module_name, globals, globals, silly_list);
1641
1642 err:
1643 Py_XDECREF(globals);
1644 Py_XDECREF(builtins);
1645 Py_XDECREF(import);
1646
1647 return r;
1648}
1649
1650
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001651/* Module 'imp' provides Python access to the primitives used for
1652 importing modules.
1653*/
1654
Guido van Rossum79f25d91997-04-29 20:08:16 +00001655static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001656imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 PyObject *self;
1658 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001659{
1660 char buf[4];
1661
Guido van Rossum79f25d91997-04-29 20:08:16 +00001662 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001663 return NULL;
Guido van Rossum6bf62da1997-04-11 20:37:35 +00001664 buf[0] = (char) ((MAGIC >> 0) & 0xff);
1665 buf[1] = (char) ((MAGIC >> 8) & 0xff);
1666 buf[2] = (char) ((MAGIC >> 16) & 0xff);
1667 buf[3] = (char) ((MAGIC >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001670}
1671
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001673imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001674 PyObject *self;
1675 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001676{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001677 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001678 struct filedescr *fdp;
1679
Guido van Rossum79f25d91997-04-29 20:08:16 +00001680 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001681 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001683 if (list == NULL)
1684 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1686 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 fdp->suffix, fdp->mode, fdp->type);
1688 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001690 return NULL;
1691 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001692 if (PyList_Append(list, item) < 0) {
1693 Py_DECREF(list);
1694 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001695 return NULL;
1696 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001697 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001698 }
1699 return list;
1700}
1701
Guido van Rossum79f25d91997-04-29 20:08:16 +00001702static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001703call_find_module(name, path)
1704 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001705 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001706{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001707 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001709 struct filedescr *fdp;
1710 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001711 FILE *fp = NULL;
1712
1713 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001714 if (path == Py_None)
1715 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001716 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
1717 if (fdp == NULL)
1718 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001719 if (fp != NULL) {
1720 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
1721 if (fob == NULL) {
1722 fclose(fp);
1723 return NULL;
1724 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001726 else {
1727 fob = Py_None;
1728 Py_INCREF(fob);
1729 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001731 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001732 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733 return ret;
1734}
1735
Guido van Rossum79f25d91997-04-29 20:08:16 +00001736static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001737imp_find_module(self, args)
1738 PyObject *self;
1739 PyObject *args;
1740{
1741 char *name;
1742 PyObject *path = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001743 if (!PyArg_ParseTuple(args, "s|O", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001744 return NULL;
1745 return call_find_module(name, path);
1746}
1747
1748static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001749imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001750 PyObject *self;
1751 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001752{
1753 char *name;
1754 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755 PyObject *m;
1756 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757 return NULL;
1758 ret = init_builtin(name);
1759 if (ret < 0)
1760 return NULL;
1761 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 Py_INCREF(Py_None);
1763 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001764 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001765 m = PyImport_AddModule(name);
1766 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767 return m;
1768}
1769
Guido van Rossum79f25d91997-04-29 20:08:16 +00001770static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001771imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 PyObject *self;
1773 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001774{
1775 char *name;
1776 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777 PyObject *m;
1778 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001781 if (ret < 0)
1782 return NULL;
1783 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 Py_INCREF(Py_None);
1785 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001786 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001787 m = PyImport_AddModule(name);
1788 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001789 return m;
1790}
1791
Guido van Rossum79f25d91997-04-29 20:08:16 +00001792static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001793imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001794 PyObject *self;
1795 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001796{
1797 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001798
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001800 return NULL;
1801 return get_frozen_object(name);
1802}
1803
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001805imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 PyObject *self;
1807 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001812 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813}
1814
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 PyObject *self;
1818 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001819{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001820 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822 return NULL;
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001823 return PyInt_FromLong(find_frozen(name) != NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001824}
1825
1826static FILE *
1827get_file(pathname, fob, mode)
1828 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830 char *mode;
1831{
1832 FILE *fp;
1833 if (fob == NULL) {
1834 fp = fopen(pathname, mode);
1835 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001837 }
1838 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001840 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001841 PyErr_SetString(PyExc_ValueError,
1842 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001843 }
1844 return fp;
1845}
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001848imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyObject *self;
1850 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001851{
1852 char *name;
1853 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 PyObject *fob = NULL;
1855 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001857 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001858 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001859 return NULL;
1860 fp = get_file(pathname, fob, "rb");
1861 if (fp == NULL)
1862 return NULL;
1863 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001864 if (fob == NULL)
1865 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866 return m;
1867}
1868
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001870imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871 PyObject *self;
1872 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001873{
1874 char *name;
1875 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 PyObject *fob = NULL;
1877 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00001878 FILE *fp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
1880 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001881 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001882 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00001883 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001884 if (fp == NULL)
1885 return NULL;
1886 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001887 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00001888 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001889}
1890
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001892imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893 PyObject *self;
1894 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001895{
1896 char *name;
1897 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 PyObject *fob = NULL;
1899 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001900 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001901 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001903 return NULL;
1904 fp = get_file(pathname, fob, "r");
1905 if (fp == NULL)
1906 return NULL;
1907 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001908 if (fob == NULL)
1909 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001910 return m;
1911}
1912
Jack Jansen9c96a921995-02-15 22:57:06 +00001913#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00001915imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 PyObject *self;
1917 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00001918{
1919 char *name;
1920 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00001922
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00001924 return NULL;
1925 m = PyMac_LoadResourceModule(name, pathname);
1926 return m;
1927}
1928#endif /* macintosh */
1929
Guido van Rossum79f25d91997-04-29 20:08:16 +00001930static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001931imp_load_module(self, args)
1932 PyObject *self;
1933 PyObject *args;
1934{
1935 char *name;
1936 PyObject *fob;
1937 char *pathname;
1938 char *suffix; /* Unused */
1939 char *mode;
1940 int type;
1941 FILE *fp;
1942
1943 if (!PyArg_ParseTuple(args, "sOs(ssi)",
1944 &name, &fob, &pathname,
1945 &suffix, &mode, &type))
1946 return NULL;
1947 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
1948 PyErr_Format(PyExc_ValueError,
1949 "invalid file open mode %.200s", mode);
1950 return NULL;
1951 }
1952 if (fob == Py_None)
1953 fp = NULL;
1954 else {
1955 if (!PyFile_Check(fob)) {
1956 PyErr_SetString(PyExc_ValueError,
1957 "load_module arg#2 should be a file or None");
1958 return NULL;
1959 }
1960 fp = get_file(pathname, fob, mode);
1961 if (fp == NULL)
1962 return NULL;
1963 }
1964 return load_module(name, fp, pathname, type);
1965}
1966
1967static PyObject *
1968imp_load_package(self, args)
1969 PyObject *self;
1970 PyObject *args;
1971{
1972 char *name;
1973 char *pathname;
1974 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
1975 return NULL;
1976 return load_package(name, pathname);
1977}
1978
1979static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001980imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981 PyObject *self;
1982 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983{
1984 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001986 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001988}
1989
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001990/* Doc strings */
1991
1992static char doc_imp[] = "\
1993This module provides the components needed to build your own\n\
1994__import__ function. Undocumented functions are obsolete.\n\
1995";
1996
1997static char doc_find_module[] = "\
1998find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
1999Search for a module. If path is omitted or None, search for a\n\
2000built-in, frozen or special module and continue search in sys.path.\n\
2001The module name cannot contain '.'; to search for a submodule of a\n\
2002package, pass the submodule name and the package's __path__.\
2003";
2004
2005static char doc_load_module[] = "\
2006load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2007Load a module, given information returned by find_module().\n\
2008The module name must include the full package name, if any.\
2009";
2010
2011static char doc_get_magic[] = "\
2012get_magic() -> string\n\
2013Return the magic number for .pyc or .pyo files.\
2014";
2015
2016static char doc_get_suffixes[] = "\
2017get_suffixes() -> [(suffix, mode, type), ...]\n\
2018Return a list of (suffix, mode, type) tuples describing the files\n\
2019that find_module() looks for.\
2020";
2021
2022static char doc_new_module[] = "\
2023new_module(name) -> module\n\
2024Create a new module. Do not enter it in sys.modules.\n\
2025The module name must include the full package name, if any.\
2026";
2027
Guido van Rossum79f25d91997-04-29 20:08:16 +00002028static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002029 {"find_module", imp_find_module, 1, doc_find_module},
2030 {"get_magic", imp_get_magic, 1, doc_get_magic},
2031 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2032 {"load_module", imp_load_module, 1, doc_load_module},
2033 {"new_module", imp_new_module, 1, doc_new_module},
2034 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002035 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002036 {"init_builtin", imp_init_builtin, 1},
2037 {"init_frozen", imp_init_frozen, 1},
2038 {"is_builtin", imp_is_builtin, 1},
2039 {"is_frozen", imp_is_frozen, 1},
2040 {"load_compiled", imp_load_compiled, 1},
2041 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002042 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002043#ifdef macintosh
2044 {"load_resource", imp_load_resource, 1},
2045#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002046 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002047 {NULL, NULL} /* sentinel */
2048};
2049
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002050int
2051setint(d, name, value)
2052 PyObject *d;
2053 char *name;
2054 int value;
2055{
2056 PyObject *v;
2057 int err;
2058
2059 v = PyInt_FromLong((long)value);
2060 err = PyDict_SetItemString(d, name, v);
2061 Py_XDECREF(v);
2062 return err;
2063}
2064
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002065void
2066initimp()
2067{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002068 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002069
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002070 m = Py_InitModule4("imp", imp_methods, doc_imp,
2071 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002073
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002074 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2075 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2076 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2077 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2078 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2079 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2080 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2081 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002082
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002083 failure:
2084 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002085}