Mercurial > cpython-lru_cache-weakref
annotate Python/frozenmain.c @ 53787:c6376d3fa968
Issue #5920: Changed format.__float__ and complex.__float__ to use a precision of 12 when using the empty presentation type. This more closely matches str()'s behavior and reduces surprises when adding alignment flags to an empty format string. Patch by Mark Dickinson.
| author | Eric Smith <eric@trueblade.com> |
|---|---|
| date | Tue, 05 May 2009 14:04:18 +0000 |
| parents | 1e5b2050ec6a |
| children | cab14be0ada1 |
| 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) { |
|
49467
1e5b2050ec6a
#4004: Missing newline in some startup error messages.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48987
diff
changeset
|
41 fprintf(stderr, "out of memory\n"); |
|
46318
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++) { |
|
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 |
|
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
49 size_t argsize = strlen(argv[i]); |
|
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
50 #else |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
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 |
|
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
53 size_t count; |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
54 if (argsize == (size_t)-1) { |
|
49467
1e5b2050ec6a
#4004: Missing newline in some startup error messages.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48987
diff
changeset
|
55 fprintf(stderr, "Could not convert argument %d to string\n", i); |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
56 return 1; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
57 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
58 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
|
59 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
|
60 if (!argv_copy[i]) { |
|
49467
1e5b2050ec6a
#4004: Missing newline in some startup error messages.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48987
diff
changeset
|
61 fprintf(stderr, "out of memory\n"); |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
62 return 1; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
63 } |
|
48987
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
64 count = mbstowcs(argv_copy[i], argv[i], argsize+1); |
|
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
65 if (count == (size_t)-1) { |
|
49467
1e5b2050ec6a
#4004: Missing newline in some startup error messages.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48987
diff
changeset
|
66 fprintf(stderr, "Could not convert argument %d to string\n", i); |
|
48987
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
67 return 1; |
|
f83dccf417f0
Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin.
Antoine Pitrou <solipsis@pitrou.net>
parents:
46318
diff
changeset
|
68 } |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
69 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
70 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
|
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 |
|
9741
05fb4d966c73
Call PyInitFrozenExtensions() as requested by Mark Hammond (his patch).
Guido van Rossum <guido@python.org>
parents:
8822
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 */ |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
75 Py_SetProgramName(argv_copy[0]); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
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 |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
78 PyWinFreeze_ExeInit(); |
|
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 |
| 2624 | 81 if (Py_VerboseFlag) |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
82 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
|
83 Py_GetVersion(), Py_GetCopyright()); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
84 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
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 |
| 2624 | 87 n = PyImport_ImportFrozenModule("__main__"); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 if (n == 0) |
| 2624 | 89 Py_FatalError("__main__ not frozen"); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 if (n < 0) { |
| 2624 | 91 PyErr_Print(); |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
92 sts = 1; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 } |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 else |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
95 sts = 0; |
|
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
96 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1318
diff
changeset
|
97 if (inspect && isatty((int)fileno(stdin))) |
| 2624 | 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 |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
101 PyWinFreeze_ExeTerm(); |
|
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
102 #endif |
| 6055 | 103 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
|
104 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
|
105 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
|
106 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
107 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
|
108 PyMem_Free(argv_copy2); |
| 6055 | 109 return sts; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 } |
