Mercurial > cpython-lru_cache-weakref
annotate Python/frozenmain.c @ 48632:5f3ef6400a96
Blocked revisions 65444 via svnmerge
........
r65444 | brett.cannon | 2008-08-03 15:57:23 -0700 (Sun, 03 Aug 2008) | 3 lines
Remove a dict.has_key() and callable() usage in SimpleXMLRPCServer as triggered
under -3 through test_xmlrpc.
........
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Sun, 03 Aug 2008 22:58:03 +0000 |
| parents | 22a74eaf6b22 |
| children | f83dccf417f0 |
| 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 { |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 char *p; |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
19 int i, n, sts; |
|
1396
4a286b300b5e
Must initialize 'inspect' flag
Guido van Rossum <guido@python.org>
parents:
1319
diff
changeset
|
20 int inspect = 0; |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
21 int unbuffered = 0; |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
22 char *oldloc; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
23 wchar_t **argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
24 /* We need a second copies, as Python might modify the first one. */ |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
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 |
|
7210
bccdeca81669
Set Py_FrozenFlag, to suppress error messages from getpath.c.
Guido van Rossum <guido@python.org>
parents:
7116
diff
changeset
|
27 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ |
|
bccdeca81669
Set Py_FrozenFlag, to suppress error messages from getpath.c.
Guido van Rossum <guido@python.org>
parents:
7116
diff
changeset
|
28 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
14375
diff
changeset
|
29 if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
30 inspect = 1; |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
14375
diff
changeset
|
31 if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
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 |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
34 if (unbuffered) { |
|
6723
c3f85bcb045a
Make stdin unbuffered too, when PYTHONUNBUFFERED is specified.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
35 setbuf(stdin, (char *)NULL); |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
36 setbuf(stdout, (char *)NULL); |
|
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
37 setbuf(stderr, (char *)NULL); |
|
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
38 } |
|
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
39 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
40 if (!argv_copy) { |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
41 fprintf(stderr, "out of memory"); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
42 return 1; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
43 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
44 |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
45 oldloc = setlocale(LC_ALL, NULL); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
46 setlocale(LC_ALL, ""); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
47 for (i = 0; i < argc; i++) { |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
48 size_t argsize = mbstowcs(NULL, argv[i], 0); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
49 if (argsize == (size_t)-1) { |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
50 fprintf(stderr, "Could not convert argument %d to string", i); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
51 return 1; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
52 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
53 argv_copy[i] = PyMem_Malloc((argsize+1)*sizeof(wchar_t)); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
54 argv_copy2[i] = argv_copy[i]; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
55 if (!argv_copy[i]) { |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
56 fprintf(stderr, "out of memory"); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
57 return 1; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
58 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
59 mbstowcs(argv_copy[i], argv[i], argsize+1); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
60 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
61 setlocale(LC_ALL, oldloc); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
62 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
63 #ifdef MS_WINDOWS |
|
9741
05fb4d966c73
Call PyInitFrozenExtensions() as requested by Mark Hammond (his patch).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
64 PyInitFrozenExtensions(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
65 #endif /* MS_WINDOWS */ |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
66 Py_SetProgramName(argv_copy[0]); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
67 Py_Initialize(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
68 #ifdef MS_WINDOWS |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
69 PyWinFreeze_ExeInit(); |
|
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
70 #endif |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
71 |
| 2624 | 72 if (Py_VerboseFlag) |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
73 fprintf(stderr, "Python %s\n%s\n", |
|
3621
f158edccc72c
grand renaming; added copyright to some files
Guido van Rossum <guido@python.org>
parents:
2892
diff
changeset
|
74 Py_GetVersion(), Py_GetCopyright()); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
75 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
76 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
|
77 |
| 2624 | 78 n = PyImport_ImportFrozenModule("__main__"); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 if (n == 0) |
| 2624 | 80 Py_FatalError("__main__ not frozen"); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 if (n < 0) { |
| 2624 | 82 PyErr_Print(); |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
83 sts = 1; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 } |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 else |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
86 sts = 0; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
87 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1318
diff
changeset
|
88 if (inspect && isatty((int)fileno(stdin))) |
| 2624 | 89 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
|
90 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
91 #ifdef MS_WINDOWS |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
92 PyWinFreeze_ExeTerm(); |
|
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
93 #endif |
| 6055 | 94 Py_Finalize(); |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
95 for (i = 0; i < argc; i++) { |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
96 PyMem_Free(argv_copy2[i]); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
97 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
98 PyMem_Free(argv_copy); |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
99 PyMem_Free(argv_copy2); |
| 6055 | 100 return sts; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 } |
