blob: 3aa110c35bdabb11fa467f0225cd96c5fde01276 [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 Rossuma0fec2b1998-02-06 17:16:02 +0000128/* List of names to clear in sys */
129static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000130 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000131 "exc_type", "exc_value", "exc_traceback",
132 "last_type", "last_value", "last_traceback",
133 NULL
134};
135
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000136static char* sys_files[] = {
137 "stdin", "__stdin__",
138 "stdout", "__stdout__",
139 "stderr", "__stderr__",
140 NULL
141};
142
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000143
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000144/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000145
Guido van Rossum3f5da241990-12-20 15:06:42 +0000146void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000147PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000148{
Guido van Rossum758eec01998-01-19 21:58:26 +0000149 int pos, ndone;
150 char *name;
151 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000152 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000153 PyObject *modules = interp->modules;
154
155 if (modules == NULL)
156 return; /* Already done */
157
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000158 /* Delete some special variables first. These are common
159 places where user values hide and people complain when their
160 destructors fail. Since the modules containing them are
161 deleted *last* of all, they would come too late in the normal
162 destruction order. Sigh. */
163
164 value = PyDict_GetItemString(modules, "__builtin__");
165 if (value != NULL && PyModule_Check(value)) {
166 dict = PyModule_GetDict(value);
167 if (Py_VerboseFlag)
168 fprintf(stderr, "# clear __builtin__._\n");
169 PyDict_SetItemString(dict, "_", Py_None);
170 }
171 value = PyDict_GetItemString(modules, "sys");
172 if (value != NULL && PyModule_Check(value)) {
173 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000174 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000175 dict = PyModule_GetDict(value);
176 for (p = sys_deletes; *p != NULL; p++) {
177 if (Py_VerboseFlag)
178 fprintf(stderr, "# clear sys.%s\n", *p);
179 PyDict_SetItemString(dict, *p, Py_None);
180 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000181 for (p = sys_files; *p != NULL; p+=2) {
182 if (Py_VerboseFlag)
183 fprintf(stderr, "# restore sys.%s\n", *p);
184 v = PyDict_GetItemString(dict, *(p+1));
185 if (v == NULL)
186 v = Py_None;
187 PyDict_SetItemString(dict, *p, v);
188 }
189 }
190
191 /* First, delete __main__ */
192 value = PyDict_GetItemString(modules, "__main__");
193 if (value != NULL && PyModule_Check(value)) {
194 if (Py_VerboseFlag)
195 fprintf(stderr, "# cleanup __main__\n");
196 _PyModule_Clear(value);
197 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000198 }
199
Guido van Rossum758eec01998-01-19 21:58:26 +0000200 /* The special treatment of __builtin__ here is because even
201 when it's not referenced as a module, its dictionary is
202 referenced by almost every module's __builtins__. Since
203 deleting a module clears its dictionary (even if there are
204 references left to it), we need to delete the __builtin__
205 module last. Likewise, we don't delete sys until the very
206 end because it is implicitly referenced (e.g. by print).
207
208 Also note that we 'delete' modules by replacing their entry
209 in the modules dict with None, rather than really deleting
210 them; this avoids a rehash of the modules dictionary and
211 also marks them as "non existent" so they won't be
212 re-imported. */
213
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000214 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000215 one (skipping __builtin__ and sys) and delete them */
216 do {
217 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000218 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000219 while (PyDict_Next(modules, &pos, &key, &value)) {
220 if (value->ob_refcnt != 1)
221 continue;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000222 if (PyModule_Check(value)) {
Guido van Rossum758eec01998-01-19 21:58:26 +0000223 name = PyString_AsString(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000224 if (strcmp(name, "__builtin__") == 0)
225 continue;
226 if (strcmp(name, "sys") == 0)
227 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000228 if (Py_VerboseFlag)
229 fprintf(stderr,
230 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000231 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000232 PyDict_SetItem(modules, key, Py_None);
233 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000234 }
235 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000236 } while (ndone > 0);
237
Guido van Rossum758eec01998-01-19 21:58:26 +0000238 /* Next, delete all modules (still skipping __builtin__ and sys) */
239 pos = 0;
240 while (PyDict_Next(modules, &pos, &key, &value)) {
241 if (PyModule_Check(value)) {
242 name = PyString_AsString(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000243 if (strcmp(name, "__builtin__") == 0)
244 continue;
245 if (strcmp(name, "sys") == 0)
246 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000247 if (Py_VerboseFlag)
248 fprintf(stderr, "# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000249 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000250 PyDict_SetItem(modules, key, Py_None);
251 }
252 }
253
254 /* Next, delete sys and __builtin__ (in that order) */
255 value = PyDict_GetItemString(modules, "sys");
256 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000257 if (Py_VerboseFlag)
258 fprintf(stderr, "# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000259 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000260 PyDict_SetItemString(modules, "sys", Py_None);
261 }
262 value = PyDict_GetItemString(modules, "__builtin__");
263 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000264 if (Py_VerboseFlag)
265 fprintf(stderr, "# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000266 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000267 PyDict_SetItemString(modules, "__builtin__", Py_None);
268 }
269
270 /* Finally, clear and delete the modules directory */
271 PyDict_Clear(modules);
272 interp->modules = NULL;
273 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000274}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000275
276
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000277/* Helper for pythonrun.c -- return magic number */
278
279long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281{
282 return MAGIC;
283}
284
285
Guido van Rossum25ce5661997-08-02 03:10:38 +0000286/* Magic for extension modules (built-in as well as dynamically
287 loaded). To prevent initializing an extension module more than
288 once, we keep a static dictionary 'extensions' keyed by module name
289 (for built-in modules) or by filename (for dynamically loaded
290 modules), containing these modules. A copy od the module's
291 dictionary is stored by calling _PyImport_FixupExtension()
292 immediately after the module initialization function succeeds. A
293 copy can be retrieved from there by calling
294 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000295
Guido van Rossum79f25d91997-04-29 20:08:16 +0000296PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000297_PyImport_FixupExtension(name, filename)
298 char *name;
299 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000300{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000301 PyObject *modules, *mod, *dict, *copy;
302 if (extensions == NULL) {
303 extensions = PyDict_New();
304 if (extensions == NULL)
305 return NULL;
306 }
307 modules = PyImport_GetModuleDict();
308 mod = PyDict_GetItemString(modules, name);
309 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000310 PyErr_Format(PyExc_SystemError,
311 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000312 return NULL;
313 }
314 dict = PyModule_GetDict(mod);
315 if (dict == NULL)
316 return NULL;
317 copy = PyObject_CallMethod(dict, "copy", "");
318 if (copy == NULL)
319 return NULL;
320 PyDict_SetItemString(extensions, filename, copy);
321 Py_DECREF(copy);
322 return copy;
323}
324
325PyObject *
326_PyImport_FindExtension(name, filename)
327 char *name;
328 char *filename;
329{
330 PyObject *dict, *mod, *mdict, *result;
331 if (extensions == NULL)
332 return NULL;
333 dict = PyDict_GetItemString(extensions, filename);
334 if (dict == NULL)
335 return NULL;
336 mod = PyImport_AddModule(name);
337 if (mod == NULL)
338 return NULL;
339 mdict = PyModule_GetDict(mod);
340 if (mdict == NULL)
341 return NULL;
342 result = PyObject_CallMethod(mdict, "update", "O", dict);
343 if (result == NULL)
344 return NULL;
345 Py_DECREF(result);
346 if (Py_VerboseFlag)
347 fprintf(stderr, "import %s # previously loaded (%s)\n",
348 name, filename);
349 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000350}
351
352
353/* Get the module object corresponding to a module name.
354 First check the modules dictionary if there's one there,
355 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000356 Because the former action is most common, THIS DOES NOT RETURN A
357 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000358
Guido van Rossum79f25d91997-04-29 20:08:16 +0000359PyObject *
360PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000361 char *name;
362{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000363 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000364 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000365
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000367 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000368 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000369 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000370 if (m == NULL)
371 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000372 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000373 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000374 return NULL;
375 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000377
378 return m;
379}
380
381
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000382/* Execute a code object in a module and return the module object
383 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000384
Guido van Rossum79f25d91997-04-29 20:08:16 +0000385PyObject *
386PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000387 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000388 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000389{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000390 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
391}
392
393PyObject *
394PyImport_ExecCodeModuleEx(name, co, pathname)
395 char *name;
396 PyObject *co;
397 char *pathname;
398{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000400 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000401
Guido van Rossum79f25d91997-04-29 20:08:16 +0000402 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000403 if (m == NULL)
404 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000405 d = PyModule_GetDict(m);
406 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
407 if (PyDict_SetItemString(d, "__builtins__",
408 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000409 return NULL;
410 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000411 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000412 v = NULL;
413 if (pathname != NULL) {
414 v = PyString_FromString(pathname);
415 if (v == NULL)
416 PyErr_Clear();
417 }
418 if (v == NULL) {
419 v = ((PyCodeObject *)co)->co_filename;
420 Py_INCREF(v);
421 }
422 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000423 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000424 Py_DECREF(v);
425
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000426 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000427 if (v == NULL)
428 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000429 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000430
Guido van Rossum25ce5661997-08-02 03:10:38 +0000431 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000432 PyErr_Format(PyExc_ImportError,
433 "Loaded module %.200s not found in sys.modules",
434 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000435 return NULL;
436 }
437
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000439
440 return m;
441}
442
443
444/* Given a pathname for a Python source file, fill a buffer with the
445 pathname for the corresponding compiled file. Return the pathname
446 for the compiled file, or NULL if there's no space in the buffer.
447 Doesn't set an exception. */
448
449static char *
450make_compiled_pathname(pathname, buf, buflen)
451 char *pathname;
452 char *buf;
453 int buflen;
454{
455 int len;
456
457 len = strlen(pathname);
458 if (len+2 > buflen)
459 return NULL;
460 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000461 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462
463 return buf;
464}
465
466
467/* Given a pathname for a Python source file, its time of last
468 modification, and a pathname for a compiled file, check whether the
469 compiled file represents the same version of the source. If so,
470 return a FILE pointer for the compiled file, positioned just after
471 the header; if not, return NULL.
472 Doesn't set an exception. */
473
474static FILE *
475check_compiled_module(pathname, mtime, cpathname)
476 char *pathname;
477 long mtime;
478 char *cpathname;
479{
480 FILE *fp;
481 long magic;
482 long pyc_mtime;
483
484 fp = fopen(cpathname, "rb");
485 if (fp == NULL)
486 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488 if (magic != MAGIC) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490 fprintf(stderr, "# %s has bad magic\n", cpathname);
491 fclose(fp);
492 return NULL;
493 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000494 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000495 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000496 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000497 fprintf(stderr, "# %s has bad mtime\n", cpathname);
498 fclose(fp);
499 return NULL;
500 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000501 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502 fprintf(stderr, "# %s matches %s\n", cpathname, pathname);
503 return fp;
504}
505
506
507/* Read a code object from a file and check it for validity */
508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000510read_compiled_module(cpathname, fp)
511 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 FILE *fp;
513{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000514 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515
Guido van Rossum79f25d91997-04-29 20:08:16 +0000516 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000517 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518 if (co == NULL || !PyCode_Check(co)) {
519 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000520 PyErr_Format(PyExc_ImportError,
521 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000522 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000523 return NULL;
524 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526}
527
528
529/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000530 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533load_compiled_module(name, cpathname, fp)
534 char *name;
535 char *cpathname;
536 FILE *fp;
537{
538 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 PyCodeObject *co;
540 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541
Guido van Rossum79f25d91997-04-29 20:08:16 +0000542 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543 if (magic != MAGIC) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000544 PyErr_Format(PyExc_ImportError,
545 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546 return NULL;
547 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000549 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 if (co == NULL)
551 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553 fprintf(stderr, "import %s # precompiled from %s\n",
554 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000555 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000557
558 return m;
559}
560
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561/* Parse a source file and return the corresponding code object */
562
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000564parse_source_module(pathname, fp)
565 char *pathname;
566 FILE *fp;
567{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569 node *n;
570
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000571 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572 if (n == NULL)
573 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 co = PyNode_Compile(n, pathname);
575 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576
577 return co;
578}
579
580
581/* Write a compiled module to a file, placing the time of last
582 modification of its source into the header.
583 Errors are ignored, if a write error occurs an attempt is made to
584 remove the file. */
585
586static void
587write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589 char *cpathname;
590 long mtime;
591{
592 FILE *fp;
593
594 fp = fopen(cpathname, "wb");
595 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000597 fprintf(stderr,
598 "# can't create %s\n", cpathname);
599 return;
600 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 PyMarshal_WriteLongToFile(MAGIC, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 PyMarshal_WriteLongToFile(0L, fp);
604 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000605 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607 fprintf(stderr, "# can't write %s\n", cpathname);
608 /* Don't keep partial file */
609 fclose(fp);
610 (void) unlink(cpathname);
611 return;
612 }
613 /* Now write the true mtime */
614 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 fflush(fp);
617 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000618 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619 fprintf(stderr, "# wrote %s\n", cpathname);
620#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000621 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622#endif
623}
624
625
626/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000627 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
628 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000629
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000631load_source_module(name, pathname, fp)
632 char *name;
633 char *pathname;
634 FILE *fp;
635{
636 long mtime;
637 FILE *fpc;
638 char buf[MAXPATHLEN+1];
639 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000640 PyCodeObject *co;
641 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000642
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000643 mtime = PyOS_GetLastModificationTime(pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000644 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1);
645 if (cpathname != NULL &&
646 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000647 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648 fclose(fpc);
649 if (co == NULL)
650 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000652 fprintf(stderr, "import %s # precompiled from %s\n",
653 name, cpathname);
654 }
655 else {
656 co = parse_source_module(pathname, fp);
657 if (co == NULL)
658 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660 fprintf(stderr, "import %s # from %s\n",
661 name, pathname);
662 write_compiled_module(co, cpathname, mtime);
663 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000664 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000666
667 return m;
668}
669
670
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000671/* Forward */
672static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
673static struct filedescr *find_module Py_PROTO((char *, PyObject *,
674 char *, int, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000675static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000676
677/* Load a package and return its module object WITH INCREMENTED
678 REFERENCE COUNT */
679
680static PyObject *
681load_package(name, pathname)
682 char *name;
683 char *pathname;
684{
685 PyObject *m, *d, *file, *path;
686 int err;
687 char buf[MAXPATHLEN+1];
688 FILE *fp = NULL;
689 struct filedescr *fdp;
690
691 m = PyImport_AddModule(name);
692 if (m == NULL)
693 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000694 if (Py_VerboseFlag)
695 fprintf(stderr, "import %s # directory %s\n",
696 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000697 d = PyModule_GetDict(m);
698 file = PyString_FromString(pathname);
699 if (file == NULL)
700 return NULL;
701 path = Py_BuildValue("[O]", file);
702 if (path == NULL) {
703 Py_DECREF(file);
704 return NULL;
705 }
706 err = PyDict_SetItemString(d, "__file__", file);
707 if (err == 0)
708 err = PyDict_SetItemString(d, "__path__", path);
709 if (err != 0) {
710 m = NULL;
711 goto cleanup;
712 }
713 buf[0] = '\0';
714 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
715 if (fdp == NULL) {
716 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
717 PyErr_Clear();
718 }
719 else
720 m = NULL;
721 goto cleanup;
722 }
723 m = load_module(name, fp, buf, fdp->type);
724 if (fp != NULL)
725 fclose(fp);
726 cleanup:
727 Py_XINCREF(m);
728 Py_XDECREF(path);
729 Py_XDECREF(file);
730 return m;
731}
732
733
734/* Helper to test for built-in module */
735
736static int
737is_builtin(name)
738 char *name;
739{
740 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000741 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
742 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
743 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000744 return -1;
745 else
746 return 1;
747 }
748 }
749 return 0;
750}
751
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000752
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753/* Search the path (default sys.path) for a module. Return the
754 corresponding filedescr struct, and (via return arguments) the
755 pathname and an open file. Return NULL if the module is not found. */
756
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000757#ifdef MS_COREDLL
758extern FILE *PyWin_FindRegisteredModule();
759#endif
760
Guido van Rossum0980bd91998-02-13 17:18:36 +0000761#ifdef CHECK_IMPORT_CASE
762static int check_case(char *, int, int, char *);
763#endif
764
Guido van Rossum197346f1997-10-31 18:38:52 +0000765static int find_init_module Py_PROTO((char *)); /* Forward */
766
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000767static struct filedescr *
768find_module(name, path, buf, buflen, p_fp)
769 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771 /* Output parameters: */
772 char *buf;
773 int buflen;
774 FILE **p_fp;
775{
776 int i, npath, len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000777 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000778 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000779 struct stat statbuf;
780
781 if (path == NULL) {
782 if (is_builtin(name)) {
783 static struct filedescr fd = {"", "", C_BUILTIN};
784 return &fd;
785 }
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000786 if (find_frozen(name) != NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000787 static struct filedescr fd = {"", "", PY_FROZEN};
788 return &fd;
789 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790
Guido van Rossumac279101996-08-22 23:10:58 +0000791#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000792 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
793 if (fp != NULL) {
794 *p_fp = fp;
795 return fdp;
796 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000797#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000798 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000799
800
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801 if (path == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 path = PySys_GetObject("path");
803 if (path == NULL || !PyList_Check(path)) {
804 PyErr_SetString(PyExc_ImportError,
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000805 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000806 return NULL;
807 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000809 namelen = strlen(name);
810 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 PyObject *v = PyList_GetItem(path, i);
812 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000815 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 strcpy(buf, PyString_AsString(v));
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000818 if ((int)strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000820#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000821#ifdef INTERN_STRINGS
822 /*
823 ** Speedup: each sys.path item is interned, and
824 ** FindResourceModule remembers which items refer to
825 ** folders (so we don't have to bother trying to look
826 ** into them for resources).
827 */
828 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
829 v = PyList_GET_ITEM(path, i);
830#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000831 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 static struct filedescr resfiledescr =
833 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000834
835 return &resfiledescr;
836 }
837#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000838 if (len > 0 && buf[len-1] != SEP
839#ifdef ALTSEP
840 && buf[len-1] != ALTSEP
841#endif
842 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000844#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000845 /* see if we are searching in directory dos-8x3 */
846 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000847 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000849 for (j = 0; (ch = name[j]) && j < 8; j++)
850 if (isupper(ch))
851 buf[len++] = tolower(ch);
852 else
853 buf[len++] = ch;
854 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000855 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000856#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000857 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000858 strcpy(buf+len, name);
859 len += namelen;
860 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000861#ifdef HAVE_STAT
862 if (stat(buf, &statbuf) == 0) {
863 static struct filedescr fd = {"", "", PKG_DIRECTORY};
Guido van Rossum197346f1997-10-31 18:38:52 +0000864 if (S_ISDIR(statbuf.st_mode)) {
Guido van Rossum0980bd91998-02-13 17:18:36 +0000865 if (find_init_module(buf)) {
866#ifdef CHECK_IMPORT_CASE
867 if (!check_case(buf, len, namelen,
868 name))
869 return NULL;
870#endif
Guido van Rossum197346f1997-10-31 18:38:52 +0000871 return &fd;
Guido van Rossum0980bd91998-02-13 17:18:36 +0000872 }
Guido van Rossum197346f1997-10-31 18:38:52 +0000873 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000874 }
875#else
876 /* XXX How are you going to test for directories? */
877#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +0000878#ifdef macintosh
879 fdp = PyMac_FindModuleExtension(buf, &len, name);
880 if (fdp)
881 fp = fopen(buf, fdp->mode);
882#else
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 if (Py_VerboseFlag > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 fprintf(stderr, "# trying %s\n", buf);
887 fp = fopen(buf, fdp->mode);
888 if (fp != NULL)
889 break;
890 }
Guido van Rossum741689d1997-08-12 14:53:39 +0000891#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000892 if (fp != NULL)
893 break;
894 }
895 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000896 PyErr_Format(PyExc_ImportError,
897 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898 return NULL;
899 }
Guido van Rossum0980bd91998-02-13 17:18:36 +0000900#ifdef CHECK_IMPORT_CASE
901 if (!check_case(buf, len, namelen, name)) {
902 fclose(fp);
903 return NULL;
904 }
905#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000906
907 *p_fp = fp;
908 return fdp;
909}
910
Guido van Rossum0980bd91998-02-13 17:18:36 +0000911#ifdef CHECK_IMPORT_CASE
912
913#ifdef MS_WIN32
914#include <windows.h>
915static int
916check_case(char *buf, int len, int namelen, char *name)
917{
918 WIN32_FIND_DATA data;
919 HANDLE h;
920 if (getenv("PYTHONCASEOK") != NULL)
921 return 1;
922 h = FindFirstFile(buf, &data);
923 if (h == INVALID_HANDLE_VALUE) {
924 PyErr_Format(PyExc_NameError,
925 "Can't find file for module %.100s\n(filename %.300s)",
926 name, buf);
927 return 0;
928 }
929 FindClose(h);
930 if (strncmp(data.cFileName, name, namelen) != 0) {
931 strcpy(buf+len-namelen, data.cFileName);
932 PyErr_Format(PyExc_NameError,
933 "Case mismatch for module name %.100s\n(filename %.300s)",
934 name, buf);
935 return 0;
936 }
937 return 1;
938}
939#endif /* MS_WIN32 */
940
941#ifdef macintosh
942#include <TextUtils.h>
943static int
944check_case(char *buf, int len, int namelen, char *name)
945{
946 FSSpec fss;
947 OSErr err;
948 unsigned char mybuf[MAXPATHLEN+1];
949
950 strcpy((char *)mybuf, buf);
951 c2pstr((char *)mybuf);
952 err = FSMakeFSSpec(0, 0, mybuf, &fss);
953 if (err) {
954 PyErr_Format(PyExc_NameError,
955 "Can't find file for module %.100s\n(filename %.300s)",
956 name, buf);
957 return 0;
958 }
959 p2cstr(fss.name);
960 if ( strncmp(name, (char *)fss.name, namelen) != 0 ) {
961 PyErr_Format(PyExc_NameError,
962 "Case mismatch for module name %.100s\n(filename %.300s)",
963 name, fss.name);
964 return 0;
965 }
966 return 1;
967}
968#endif /* macintosh */
969
Guido van Rossum4d1b3b91998-02-13 23:27:59 +0000970#ifdef DJGPP
Guido van Rossumaeca79b1998-02-18 16:21:00 +0000971#include <dir.h>
972
Guido van Rossum4d1b3b91998-02-13 23:27:59 +0000973static int
974check_case(char *buf, int len, int namelen, char *name)
975{
976 struct ffblk ffblk;
977 int done;
978
979 if (getenv("PYTHONCASEOK") != NULL)
980 return 1;
Guido van Rossumaeca79b1998-02-18 16:21:00 +0000981 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
Guido van Rossum4d1b3b91998-02-13 23:27:59 +0000982 if (done) {
983 PyErr_Format(PyExc_NameError,
984 "Can't find file for module %.100s\n(filename %.300s)",
985 name, buf);
986 return 0;
987 }
988
989 if (strncmp(ffblk.ff_name, name, namelen) != 0) {
990 strcpy(buf+len-namelen, ffblk.ff_name);
991 PyErr_Format(PyExc_NameError,
992 "Case mismatch for module name %.100s\n(filename %.300s)",
993 name, buf);
994 return 0;
995 }
996 return 1;
997}
998#endif
999
Guido van Rossum0980bd91998-02-13 17:18:36 +00001000#endif CHECK_IMPORT_CASE
1001
Guido van Rossum197346f1997-10-31 18:38:52 +00001002#ifdef HAVE_STAT
1003/* Helper to look for __init__.py or __init__.py[co] in potential package */
1004static int
1005find_init_module(buf)
1006 char *buf;
1007{
1008 int save_len = strlen(buf);
1009 int i = save_len;
1010 struct stat statbuf;
1011
1012 if (save_len + 13 >= MAXPATHLEN)
1013 return 0;
1014 buf[i++] = SEP;
1015 strcpy(buf+i, "__init__.py");
1016 if (stat(buf, &statbuf) == 0) {
1017 buf[save_len] = '\0';
1018 return 1;
1019 }
1020 i += strlen(buf+i);
1021 if (Py_OptimizeFlag)
1022 strcpy(buf+i, "o");
1023 else
1024 strcpy(buf+i, "c");
1025 if (stat(buf, &statbuf) == 0) {
1026 buf[save_len] = '\0';
1027 return 1;
1028 }
1029 buf[save_len] = '\0';
1030 return 0;
1031}
1032#endif /* HAVE_STAT */
1033
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001034
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001035static int init_builtin Py_PROTO((char *)); /* Forward */
1036
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001037/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001038 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001039
Guido van Rossum79f25d91997-04-29 20:08:16 +00001040static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001041load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001042 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001043 FILE *fp;
1044 char *buf;
1045 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001046{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001047 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001049 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001050
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001051 /* First check that there's an open file (if we need one) */
1052 switch (type) {
1053 case PY_SOURCE:
1054 case PY_COMPILED:
1055 if (fp == NULL) {
1056 PyErr_Format(PyExc_ValueError,
1057 "file object required for import (type code %d)",
1058 type);
1059 return NULL;
1060 }
1061 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001063 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064
1065 case PY_SOURCE:
1066 m = load_source_module(name, buf, fp);
1067 break;
1068
1069 case PY_COMPILED:
1070 m = load_compiled_module(name, buf, fp);
1071 break;
1072
1073 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001075 break;
1076
Jack Jansen9c96a921995-02-15 22:57:06 +00001077#ifdef macintosh
1078 case PY_RESOURCE:
1079 m = PyMac_LoadResourceModule(name, buf);
1080 break;
1081#endif
1082
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001083 case PKG_DIRECTORY:
1084 m = load_package(name, buf);
1085 break;
1086
1087 case C_BUILTIN:
1088 case PY_FROZEN:
1089 if (type == C_BUILTIN)
1090 err = init_builtin(name);
1091 else
1092 err = PyImport_ImportFrozenModule(name);
1093 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001094 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001095 if (err == 0) {
1096 PyErr_Format(PyExc_ImportError,
1097 "Purported %s module %.200s not found",
1098 type == C_BUILTIN ?
1099 "builtin" : "frozen",
1100 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001101 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001102 }
1103 modules = PyImport_GetModuleDict();
1104 m = PyDict_GetItemString(modules, name);
1105 if (m == NULL) {
1106 PyErr_Format(
1107 PyExc_ImportError,
1108 "%s module %.200s not properly initialized",
1109 type == C_BUILTIN ?
1110 "builtin" : "frozen",
1111 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001112 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001113 }
1114 Py_INCREF(m);
1115 break;
1116
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001117 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001118 PyErr_Format(PyExc_ImportError,
1119 "Don't know how to import %.200s (type code %d)",
1120 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001121 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
1123 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001124
1125 return m;
1126}
1127
1128
1129/* Initialize a built-in module.
1130 Return 1 for succes, 0 if the module is not found, and -1 with
1131 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001132
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001133static int
1134init_builtin(name)
1135 char *name;
1136{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001137 struct _inittab *p;
1138 PyObject *mod;
1139
1140 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1141 return 1;
1142
Guido van Rossum771c6c81997-10-31 18:37:24 +00001143 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001144 if (strcmp(name, p->name) == 0) {
1145 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001146 PyErr_Format(PyExc_ImportError,
1147 "Cannot re-init internal module %.200s",
1148 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001149 return -1;
1150 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151 if (Py_VerboseFlag)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001152 fprintf(stderr, "import %s # builtin\n", name);
1153 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001155 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001156 if (_PyImport_FixupExtension(name, name) == NULL)
1157 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001158 return 1;
1159 }
1160 }
1161 return 0;
1162}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001163
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001165/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001167static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001168find_frozen(name)
1169 char *name;
1170{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001171 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001172
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001174 if (p->name == NULL)
1175 return NULL;
1176 if (strcmp(p->name, name) == 0)
1177 break;
1178 }
1179 return p;
1180}
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001183get_frozen_object(name)
1184 char *name;
1185{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001186 struct _frozen *p = find_frozen(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001187
1188 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001189 PyErr_Format(PyExc_ImportError,
1190 "No such frozen object named %.200s",
1191 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001192 return NULL;
1193 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194 return PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001195}
1196
1197/* Initialize a frozen module.
1198 Return 1 for succes, 0 if the module is not found, and -1 with
1199 an exception set if the initialization failed.
1200 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001201
1202int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001204 char *name;
1205{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001206 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 PyObject *co;
1208 PyObject *m;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001209
1210 if (p == NULL)
1211 return 0;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212 if (Py_VerboseFlag)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001213 fprintf(stderr, "import %s # frozen\n", name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214 co = PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001215 if (co == NULL)
1216 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217 if (!PyCode_Check(co)) {
1218 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001219 PyErr_Format(PyExc_TypeError,
1220 "frozen object %.200s is not a code object",
1221 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001222 return -1;
1223 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001224 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001226 if (m == NULL)
1227 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001229 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001230}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001231
1232
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001234 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001235
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236PyObject *
1237PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001239{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001240 static PyObject *fromlist = NULL;
1241 if (fromlist == NULL && strchr(name, '.') != NULL) {
1242 fromlist = Py_BuildValue("[s]", "*");
1243 if (fromlist == NULL)
1244 return NULL;
1245 }
1246 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001247}
1248
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001249/* Forward declarations for helper routines */
1250static PyObject *get_parent Py_PROTO((PyObject *globals,
1251 char *buf, int *p_buflen));
1252static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1253 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001254static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001255static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001256 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001257static PyObject * import_submodule Py_PROTO((PyObject *mod,
1258 char *name, char *fullname));
1259
1260/* The Magnum Opus of dotted-name import :-) */
1261
1262/* XXX TO DO:
1263 - Remember misses in package directories so package submodules
1264 that all import the same toplevel module don't keep hitting on the
1265 package directory first
1266*/
1267
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001268PyObject *
1269PyImport_ImportModuleEx(name, globals, locals, fromlist)
1270 char *name;
1271 PyObject *globals;
1272 PyObject *locals;
1273 PyObject *fromlist;
1274{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001275 char buf[MAXPATHLEN+1];
1276 int buflen = 0;
1277 PyObject *parent, *head, *next, *tail;
1278
1279 parent = get_parent(globals, buf, &buflen);
1280 if (parent == NULL)
1281 return NULL;
1282
1283 head = load_next(parent, Py_None, &name, buf, &buflen);
1284 if (head == NULL)
1285 return NULL;
1286
1287 tail = head;
1288 Py_INCREF(tail);
1289 while (name) {
1290 next = load_next(tail, tail, &name, buf, &buflen);
1291 Py_DECREF(tail);
1292 if (next == NULL) {
1293 Py_DECREF(head);
1294 return NULL;
1295 }
1296 tail = next;
1297 }
1298
1299 if (fromlist != NULL) {
1300 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1301 fromlist = NULL;
1302 }
1303
1304 if (fromlist == NULL) {
1305 Py_DECREF(tail);
1306 return head;
1307 }
1308
1309 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001310 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001311 Py_DECREF(tail);
1312 return NULL;
1313 }
1314
1315 return tail;
1316}
1317
1318static PyObject *
1319get_parent(globals, buf, p_buflen)
1320 PyObject *globals;
1321 char *buf;
1322 int *p_buflen;
1323{
1324 static PyObject *namestr = NULL;
1325 static PyObject *pathstr = NULL;
1326 PyObject *modname, *modpath, *modules, *parent;
1327
1328 if (globals == NULL || !PyDict_Check(globals))
1329 return Py_None;
1330
1331 if (namestr == NULL) {
1332 namestr = PyString_InternFromString("__name__");
1333 if (namestr == NULL)
1334 return NULL;
1335 }
1336 if (pathstr == NULL) {
1337 pathstr = PyString_InternFromString("__path__");
1338 if (pathstr == NULL)
1339 return NULL;
1340 }
1341
1342 *buf = '\0';
1343 *p_buflen = 0;
1344 modname = PyDict_GetItem(globals, namestr);
1345 if (modname == NULL || !PyString_Check(modname))
1346 return Py_None;
1347
1348 modpath = PyDict_GetItem(globals, pathstr);
1349 if (modpath != NULL) {
1350 int len = PyString_GET_SIZE(modname);
1351 if (len > MAXPATHLEN) {
1352 PyErr_SetString(PyExc_ValueError,
1353 "Module name too long");
1354 return NULL;
1355 }
1356 strcpy(buf, PyString_AS_STRING(modname));
1357 *p_buflen = len;
1358 }
1359 else {
1360 char *start = PyString_AS_STRING(modname);
1361 char *lastdot = strrchr(start, '.');
1362 int len;
1363 if (lastdot == NULL)
1364 return Py_None;
1365 len = lastdot - start;
1366 if (len >= MAXPATHLEN) {
1367 PyErr_SetString(PyExc_ValueError,
1368 "Module name too long");
1369 return NULL;
1370 }
1371 strncpy(buf, start, len);
1372 buf[len] = '\0';
1373 *p_buflen = len;
1374 }
1375
1376 modules = PyImport_GetModuleDict();
1377 parent = PyDict_GetItemString(modules, buf);
1378 if (parent == NULL)
1379 parent = Py_None;
1380 return parent;
1381 /* We expect, but can't guarantee, if parent != None, that:
1382 - parent.__name__ == buf
1383 - parent.__dict__ is globals
1384 If this is violated... Who cares? */
1385}
1386
1387static PyObject *
1388load_next(mod, altmod, p_name, buf, p_buflen)
1389 PyObject *mod;
1390 PyObject *altmod; /* Either None or same as mod */
1391 char **p_name;
1392 char *buf;
1393 int *p_buflen;
1394{
1395 char *name = *p_name;
1396 char *dot = strchr(name, '.');
1397 int len;
1398 char *p;
1399 PyObject *result;
1400
1401 if (dot == NULL) {
1402 *p_name = NULL;
1403 len = strlen(name);
1404 }
1405 else {
1406 *p_name = dot+1;
1407 len = dot-name;
1408 }
1409
1410 p = buf + *p_buflen;
1411 if (p != buf)
1412 *p++ = '.';
1413 if (p+len-buf >= MAXPATHLEN) {
1414 PyErr_SetString(PyExc_ValueError,
1415 "Module name too long");
1416 return NULL;
1417 }
1418 strncpy(p, name, len);
1419 p[len] = '\0';
1420 *p_buflen = p+len-buf;
1421
1422 result = import_submodule(mod, p, buf);
1423 if (result == Py_None && altmod != mod) {
1424 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001425 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001426 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001427 if (result != NULL && result != Py_None) {
1428 if (mark_miss(buf) != 0) {
1429 Py_DECREF(result);
1430 return NULL;
1431 }
1432 strncpy(buf, name, len);
1433 buf[len] = '\0';
1434 *p_buflen = len;
1435 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001436 }
1437 if (result == NULL)
1438 return NULL;
1439
1440 if (result == Py_None) {
1441 Py_DECREF(result);
1442 PyErr_Format(PyExc_ImportError,
1443 "No module named %.200s", name);
1444 return NULL;
1445 }
1446
1447 return result;
1448}
1449
1450static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001451mark_miss(name)
1452 char *name;
1453{
1454 PyObject *modules = PyImport_GetModuleDict();
1455 return PyDict_SetItemString(modules, name, Py_None);
1456}
1457
1458static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001459ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001460 PyObject *mod;
1461 PyObject *fromlist;
1462 char *buf;
1463 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001464 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001465{
1466 int i;
1467
1468 if (!PyObject_HasAttrString(mod, "__path__"))
1469 return 1;
1470
1471 for (i = 0; ; i++) {
1472 PyObject *item = PySequence_GetItem(fromlist, i);
1473 int hasit;
1474 if (item == NULL) {
1475 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1476 PyErr_Clear();
1477 return 1;
1478 }
1479 return 0;
1480 }
1481 if (!PyString_Check(item)) {
1482 PyErr_SetString(PyExc_TypeError,
1483 "Item in ``from list'' not a string");
1484 Py_DECREF(item);
1485 return 0;
1486 }
1487 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001488 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001489 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001490 /* See if the package defines __all__ */
1491 if (recursive)
1492 continue; /* Avoid endless recursion */
1493 all = PyObject_GetAttrString(mod, "__all__");
1494 if (all == NULL)
1495 PyErr_Clear();
1496 else {
1497 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1498 return 0;
1499 Py_DECREF(all);
1500 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001501 continue;
1502 }
1503 hasit = PyObject_HasAttr(mod, item);
1504 if (!hasit) {
1505 char *subname = PyString_AS_STRING(item);
1506 PyObject *submod;
1507 char *p;
1508 if (buflen + strlen(subname) >= MAXPATHLEN) {
1509 PyErr_SetString(PyExc_ValueError,
1510 "Module name too long");
1511 Py_DECREF(item);
1512 return 0;
1513 }
1514 p = buf + buflen;
1515 *p++ = '.';
1516 strcpy(p, subname);
1517 submod = import_submodule(mod, subname, buf);
1518 Py_XDECREF(submod);
1519 if (submod == NULL) {
1520 Py_DECREF(item);
1521 return 0;
1522 }
1523 }
1524 Py_DECREF(item);
1525 }
1526
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001527 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001528}
1529
1530static PyObject *
1531import_submodule(mod, subname, fullname)
1532 PyObject *mod; /* May be None */
1533 char *subname;
1534 char *fullname;
1535{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001536 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001537 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001538
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001539 /* Require:
1540 if mod == None: subname == fullname
1541 else: mod.__name__ + "." + subname == fullname
1542 */
1543
1544 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001545 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001546 }
1547 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001548 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001549 char buf[MAXPATHLEN+1];
1550 struct filedescr *fdp;
1551 FILE *fp = NULL;
1552
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001553 path = PyObject_GetAttrString(mod, "__path__");
1554 if (path == NULL)
1555 PyErr_Clear();
1556
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001557 buf[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001558 fdp = find_module(subname, path,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001559 buf, MAXPATHLEN+1, &fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001560 if (fdp == NULL) {
1561 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1562 return NULL;
1563 PyErr_Clear();
1564 Py_INCREF(Py_None);
1565 return Py_None;
1566 }
1567 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001568 if (fp)
1569 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001570 if (m != NULL && mod != Py_None) {
1571 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1572 Py_DECREF(m);
1573 m = NULL;
1574 }
1575 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001576 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001577
1578 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001579}
1580
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001581
1582/* Re-import a module of any kind and return its module object, WITH
1583 INCREMENTED REFERENCE COUNT */
1584
Guido van Rossum79f25d91997-04-29 20:08:16 +00001585PyObject *
1586PyImport_ReloadModule(m)
1587 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001588{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001589 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001590 PyObject *path = NULL;
1591 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001592 char buf[MAXPATHLEN+1];
1593 struct filedescr *fdp;
1594 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001595
Guido van Rossum79f25d91997-04-29 20:08:16 +00001596 if (m == NULL || !PyModule_Check(m)) {
1597 PyErr_SetString(PyExc_TypeError,
1598 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001599 return NULL;
1600 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001601 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001602 if (name == NULL)
1603 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001604 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001605 PyErr_Format(PyExc_ImportError,
1606 "reload(): module %.200s not in sys.modules",
1607 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001608 return NULL;
1609 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001610 subname = strrchr(name, '.');
1611 if (subname == NULL)
1612 subname = name;
1613 else {
1614 PyObject *parentname, *parent;
1615 parentname = PyString_FromStringAndSize(name, (subname-name));
1616 if (parentname == NULL)
1617 return NULL;
1618 parent = PyDict_GetItem(modules, parentname);
1619 if (parent == NULL) {
1620 PyErr_Format(PyExc_ImportError,
1621 "reload(): parent %.200s not in sys.modules",
1622 name);
1623 return NULL;
1624 }
1625 subname++;
1626 path = PyObject_GetAttrString(parent, "__path__");
1627 if (path == NULL)
1628 PyErr_Clear();
1629 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001630 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001631 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1632 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001633 if (fdp == NULL)
1634 return NULL;
1635 m = load_module(name, fp, buf, fdp->type);
1636 if (fp)
1637 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001638 return m;
1639}
1640
1641
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001642/* Higher-level import emulator which emulates the "import" statement
1643 more accurately -- it invokes the __import__() function from the
1644 builtins of the current globals. This means that the import is
1645 done using whatever import hooks are installed in the current
1646 environment, e.g. by "ni" or "rexec". */
1647
1648PyObject *
1649PyImport_Import(module_name)
1650 PyObject *module_name;
1651{
1652 static PyObject *silly_list = NULL;
1653 static PyObject *builtins_str = NULL;
1654 static PyObject *import_str = NULL;
1655 static PyObject *standard_builtins = NULL;
1656 PyObject *globals = NULL;
1657 PyObject *import = NULL;
1658 PyObject *builtins = NULL;
1659 PyObject *r = NULL;
1660
1661 /* Initialize constant string objects */
1662 if (silly_list == NULL) {
1663 import_str = PyString_InternFromString("__import__");
1664 if (import_str == NULL)
1665 return NULL;
1666 builtins_str = PyString_InternFromString("__builtins__");
1667 if (builtins_str == NULL)
1668 return NULL;
1669 silly_list = Py_BuildValue("[s]", "__doc__");
1670 if (silly_list == NULL)
1671 return NULL;
1672 }
1673
1674 /* Get the builtins from current globals */
1675 globals = PyEval_GetGlobals();
1676 if(globals != NULL) {
1677 builtins = PyObject_GetItem(globals, builtins_str);
1678 if (builtins == NULL)
1679 goto err;
1680 }
1681 else {
1682 /* No globals -- use standard builtins, and fake globals */
1683 PyErr_Clear();
1684
1685 if (standard_builtins == NULL) {
1686 standard_builtins =
1687 PyImport_ImportModule("__builtin__");
1688 if (standard_builtins == NULL)
1689 return NULL;
1690 }
1691
1692 builtins = standard_builtins;
1693 Py_INCREF(builtins);
1694 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1695 if (globals == NULL)
1696 goto err;
1697 }
1698
1699 /* Get the __import__ function from the builtins */
1700 if (PyDict_Check(builtins))
1701 import=PyObject_GetItem(builtins, import_str);
1702 else
1703 import=PyObject_GetAttr(builtins, import_str);
1704 if (import == NULL)
1705 goto err;
1706
1707 /* Call the _import__ function with the proper argument list */
1708 r = PyObject_CallFunction(import, "OOOO",
1709 module_name, globals, globals, silly_list);
1710
1711 err:
1712 Py_XDECREF(globals);
1713 Py_XDECREF(builtins);
1714 Py_XDECREF(import);
1715
1716 return r;
1717}
1718
1719
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720/* Module 'imp' provides Python access to the primitives used for
1721 importing modules.
1722*/
1723
Guido van Rossum79f25d91997-04-29 20:08:16 +00001724static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726 PyObject *self;
1727 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728{
1729 char buf[4];
1730
Guido van Rossum79f25d91997-04-29 20:08:16 +00001731 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001732 return NULL;
Guido van Rossum6bf62da1997-04-11 20:37:35 +00001733 buf[0] = (char) ((MAGIC >> 0) & 0xff);
1734 buf[1] = (char) ((MAGIC >> 8) & 0xff);
1735 buf[2] = (char) ((MAGIC >> 16) & 0xff);
1736 buf[3] = (char) ((MAGIC >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001737
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001739}
1740
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001742imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001743 PyObject *self;
1744 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747 struct filedescr *fdp;
1748
Guido van Rossum79f25d91997-04-29 20:08:16 +00001749 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001752 if (list == NULL)
1753 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001754 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1755 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001756 fdp->suffix, fdp->mode, fdp->type);
1757 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001759 return NULL;
1760 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001761 if (PyList_Append(list, item) < 0) {
1762 Py_DECREF(list);
1763 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001764 return NULL;
1765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767 }
1768 return list;
1769}
1770
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001772call_find_module(name, path)
1773 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001774 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001776 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001778 struct filedescr *fdp;
1779 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001780 FILE *fp = NULL;
1781
1782 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001783 if (path == Py_None)
1784 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001785 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
1786 if (fdp == NULL)
1787 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001788 if (fp != NULL) {
1789 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
1790 if (fob == NULL) {
1791 fclose(fp);
1792 return NULL;
1793 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001794 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001795 else {
1796 fob = Py_None;
1797 Py_INCREF(fob);
1798 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001802 return ret;
1803}
1804
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001806imp_find_module(self, args)
1807 PyObject *self;
1808 PyObject *args;
1809{
1810 char *name;
1811 PyObject *path = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001812 if (!PyArg_ParseTuple(args, "s|O", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001813 return NULL;
1814 return call_find_module(name, path);
1815}
1816
1817static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 PyObject *self;
1820 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821{
1822 char *name;
1823 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 PyObject *m;
1825 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826 return NULL;
1827 ret = init_builtin(name);
1828 if (ret < 0)
1829 return NULL;
1830 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 Py_INCREF(Py_None);
1832 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834 m = PyImport_AddModule(name);
1835 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836 return m;
1837}
1838
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001840imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001841 PyObject *self;
1842 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001843{
1844 char *name;
1845 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 PyObject *m;
1847 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001848 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850 if (ret < 0)
1851 return NULL;
1852 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853 Py_INCREF(Py_None);
1854 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001855 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001856 m = PyImport_AddModule(name);
1857 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858 return m;
1859}
1860
Guido van Rossum79f25d91997-04-29 20:08:16 +00001861static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001862imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001863 PyObject *self;
1864 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001865{
1866 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001867
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001869 return NULL;
1870 return get_frozen_object(name);
1871}
1872
Guido van Rossum79f25d91997-04-29 20:08:16 +00001873static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001874imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 PyObject *self;
1876 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001877{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001878 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001881 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001882}
1883
Guido van Rossum79f25d91997-04-29 20:08:16 +00001884static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 PyObject *self;
1887 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001888{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001889 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001890 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001891 return NULL;
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001892 return PyInt_FromLong(find_frozen(name) != NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001893}
1894
1895static FILE *
1896get_file(pathname, fob, mode)
1897 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001899 char *mode;
1900{
1901 FILE *fp;
1902 if (fob == NULL) {
1903 fp = fopen(pathname, mode);
1904 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001906 }
1907 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001909 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001910 PyErr_SetString(PyExc_ValueError,
1911 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001912 }
1913 return fp;
1914}
1915
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001917imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 PyObject *self;
1919 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001920{
1921 char *name;
1922 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 PyObject *fob = NULL;
1924 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001925 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001926 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928 return NULL;
1929 fp = get_file(pathname, fob, "rb");
1930 if (fp == NULL)
1931 return NULL;
1932 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001933 if (fob == NULL)
1934 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001935 return m;
1936}
1937
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001939imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001940 PyObject *self;
1941 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001942{
1943 char *name;
1944 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 PyObject *fob = NULL;
1946 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00001947 FILE *fp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
1949 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001951 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00001952 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001953 if (fp == NULL)
1954 return NULL;
1955 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00001957 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958}
1959
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001961imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 PyObject *self;
1963 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001964{
1965 char *name;
1966 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967 PyObject *fob = NULL;
1968 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001969 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001970 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972 return NULL;
1973 fp = get_file(pathname, fob, "r");
1974 if (fp == NULL)
1975 return NULL;
1976 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001977 if (fob == NULL)
1978 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001979 return m;
1980}
1981
Jack Jansen9c96a921995-02-15 22:57:06 +00001982#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00001984imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 PyObject *self;
1986 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00001987{
1988 char *name;
1989 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00001991
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00001993 return NULL;
1994 m = PyMac_LoadResourceModule(name, pathname);
1995 return m;
1996}
1997#endif /* macintosh */
1998
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002000imp_load_module(self, args)
2001 PyObject *self;
2002 PyObject *args;
2003{
2004 char *name;
2005 PyObject *fob;
2006 char *pathname;
2007 char *suffix; /* Unused */
2008 char *mode;
2009 int type;
2010 FILE *fp;
2011
2012 if (!PyArg_ParseTuple(args, "sOs(ssi)",
2013 &name, &fob, &pathname,
2014 &suffix, &mode, &type))
2015 return NULL;
2016 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2017 PyErr_Format(PyExc_ValueError,
2018 "invalid file open mode %.200s", mode);
2019 return NULL;
2020 }
2021 if (fob == Py_None)
2022 fp = NULL;
2023 else {
2024 if (!PyFile_Check(fob)) {
2025 PyErr_SetString(PyExc_ValueError,
2026 "load_module arg#2 should be a file or None");
2027 return NULL;
2028 }
2029 fp = get_file(pathname, fob, mode);
2030 if (fp == NULL)
2031 return NULL;
2032 }
2033 return load_module(name, fp, pathname, type);
2034}
2035
2036static PyObject *
2037imp_load_package(self, args)
2038 PyObject *self;
2039 PyObject *args;
2040{
2041 char *name;
2042 char *pathname;
2043 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
2044 return NULL;
2045 return load_package(name, pathname);
2046}
2047
2048static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002050 PyObject *self;
2051 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002052{
2053 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002055 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002057}
2058
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002059/* Doc strings */
2060
2061static char doc_imp[] = "\
2062This module provides the components needed to build your own\n\
2063__import__ function. Undocumented functions are obsolete.\n\
2064";
2065
2066static char doc_find_module[] = "\
2067find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2068Search for a module. If path is omitted or None, search for a\n\
2069built-in, frozen or special module and continue search in sys.path.\n\
2070The module name cannot contain '.'; to search for a submodule of a\n\
2071package, pass the submodule name and the package's __path__.\
2072";
2073
2074static char doc_load_module[] = "\
2075load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2076Load a module, given information returned by find_module().\n\
2077The module name must include the full package name, if any.\
2078";
2079
2080static char doc_get_magic[] = "\
2081get_magic() -> string\n\
2082Return the magic number for .pyc or .pyo files.\
2083";
2084
2085static char doc_get_suffixes[] = "\
2086get_suffixes() -> [(suffix, mode, type), ...]\n\
2087Return a list of (suffix, mode, type) tuples describing the files\n\
2088that find_module() looks for.\
2089";
2090
2091static char doc_new_module[] = "\
2092new_module(name) -> module\n\
2093Create a new module. Do not enter it in sys.modules.\n\
2094The module name must include the full package name, if any.\
2095";
2096
Guido van Rossum79f25d91997-04-29 20:08:16 +00002097static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002098 {"find_module", imp_find_module, 1, doc_find_module},
2099 {"get_magic", imp_get_magic, 1, doc_get_magic},
2100 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2101 {"load_module", imp_load_module, 1, doc_load_module},
2102 {"new_module", imp_new_module, 1, doc_new_module},
2103 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002104 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002105 {"init_builtin", imp_init_builtin, 1},
2106 {"init_frozen", imp_init_frozen, 1},
2107 {"is_builtin", imp_is_builtin, 1},
2108 {"is_frozen", imp_is_frozen, 1},
2109 {"load_compiled", imp_load_compiled, 1},
2110 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002111 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002112#ifdef macintosh
2113 {"load_resource", imp_load_resource, 1},
2114#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002115 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002116 {NULL, NULL} /* sentinel */
2117};
2118
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002119int
2120setint(d, name, value)
2121 PyObject *d;
2122 char *name;
2123 int value;
2124{
2125 PyObject *v;
2126 int err;
2127
2128 v = PyInt_FromLong((long)value);
2129 err = PyDict_SetItemString(d, name, v);
2130 Py_XDECREF(v);
2131 return err;
2132}
2133
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134void
2135initimp()
2136{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002137 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002138
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002139 m = Py_InitModule4("imp", imp_methods, doc_imp,
2140 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002141 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002143 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2144 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2145 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2146 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2147 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2148 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2149 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2150 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002151
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002152 failure:
2153 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002154}