Mercurial > cpython-lru_cache-weakref
annotate Python/frozenmain.c @ 76451:ea46ebba8a0f
Issue #13959: Re-implement imp.source_from_cache() in Lib/imp.py.
| author | Brett Cannon <brett@python.org> |
|---|---|
| date | Sat, 21 Apr 2012 18:52:52 -0400 |
| parents | cab14be0ada1 |
| children | ab8121466785 |
| rev | line source |
|---|---|
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 /* Python interpreter main program for frozen scripts */ |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
| 2624 | 4 #include "Python.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
5 #include <locale.h> |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
7 #ifdef MS_WINDOWS |
|
13663
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
8 extern void PyWinFreeze_ExeInit(void); |
|
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
9 extern void PyWinFreeze_ExeTerm(void); |
|
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
10 extern int PyInitFrozenExtensions(void); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
11 #endif |
|
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
12 |
|
2892
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
13 /* Main program */ |
|
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
14 |
|
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
15 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
16 Py_FrozenMain(int argc, char **argv) |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
18 char *p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
19 int i, n, sts; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
20 int inspect = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
21 int unbuffered = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
22 char *oldloc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
23 wchar_t **argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
24 /* We need a second copies, as Python might modify the first one. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
25 wchar_t **argv_copy2 = PyMem_Malloc(sizeof(wchar_t*)*argc); |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
26 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
27 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ |
|
7210
bccdeca81669
Set Py_FrozenFlag, to suppress error messages from getpath.c.
Guido van Rossum <guido@python.org>
parents:
7116
diff
changeset
|
28 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
29 if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
30 inspect = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
31 if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
32 unbuffered = 1; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
33 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
34 if (unbuffered) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
35 setbuf(stdin, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
36 setbuf(stdout, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
37 setbuf(stderr, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
38 } |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
39 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
40 if (!argv_copy) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
41 fprintf(stderr, "out of memory\n"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
42 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
43 } |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
44 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
45 oldloc = setlocale(LC_ALL, NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
46 setlocale(LC_ALL, ""); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
47 for (i = 0; i < argc; i++) { |
|
48987
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
48 #ifdef HAVE_BROKEN_MBSTOWCS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
49 size_t argsize = strlen(argv[i]); |
|
48987
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
50 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
51 size_t argsize = mbstowcs(NULL, argv[i], 0); |
|
48987
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
52 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
53 size_t count; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
54 if (argsize == (size_t)-1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
55 fprintf(stderr, "Could not convert argument %d to string\n", i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
56 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
57 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
58 argv_copy[i] = PyMem_Malloc((argsize+1)*sizeof(wchar_t)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
59 argv_copy2[i] = argv_copy[i]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
60 if (!argv_copy[i]) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
61 fprintf(stderr, "out of memory\n"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
62 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
63 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
64 count = mbstowcs(argv_copy[i], argv[i], argsize+1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
65 if (count == (size_t)-1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
66 fprintf(stderr, "Could not convert argument %d to string\n", i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
67 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
68 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
69 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
70 setlocale(LC_ALL, oldloc); |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
71 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
72 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
73 PyInitFrozenExtensions(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
74 #endif /* MS_WINDOWS */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
75 Py_SetProgramName(argv_copy[0]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
76 Py_Initialize(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
77 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
78 PyWinFreeze_ExeInit(); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
79 #endif |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
80 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
81 if (Py_VerboseFlag) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
82 fprintf(stderr, "Python %s\n%s\n", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
83 Py_GetVersion(), Py_GetCopyright()); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
84 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
85 PySys_SetArgv(argc, argv_copy); |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
86 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
87 n = PyImport_ImportFrozenModule("__main__"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
88 if (n == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
89 Py_FatalError("__main__ not frozen"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
90 if (n < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
91 PyErr_Print(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
92 sts = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
93 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
94 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
95 sts = 0; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
96 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
97 if (inspect && isatty((int)fileno(stdin))) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
98 sts = PyRun_AnyFile(stdin, "<stdin>") != 0; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
99 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
100 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
101 PyWinFreeze_ExeTerm(); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
102 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
103 Py_Finalize(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
104 for (i = 0; i < argc; i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
105 PyMem_Free(argv_copy2[i]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
106 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
107 PyMem_Free(argv_copy); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
108 PyMem_Free(argv_copy2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
109 return sts; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 } |
