Mercurial > cpython-lru_cache-weakref
annotate Modules/python.c @ 73323:dad02a080bbc
Improve byte-compilation in packaging to be independent of -O or -B.
The code I fixed to comply with PEP 3147 still had one bug: When run
under python -O, some paths for pyc files would be pyo, because I called
imp.cache_from_source without explicit debug_override argument in some
places, and under -O that would return .pyo (this is well explained in
the imp docs). Now all code (util.byte_compile, build_py, install_lib)
can create .pyo files according to options given by users,
without interference from the calling Python’s own optimize mode.
On a related topic, I also removed the code that prevented byte
compilation under python -B. The rationale is that packaging gives
control over the creation of pyc files to the user with its own explicit
option, and the behavior should not be changed if the calling Python
happens to run with -B for whatever reason. I will argue that this is a
bug fix and ask to be allowed to backport this change to distutils.
Finally, I moved one nugget of information about the --compile and
--optimize options from the source into the doc. It clears up a
misunderstanding that I (and maybe other people) had.
| author | Éric Araujo <merwok@netwok.org> |
|---|---|
| date | Thu, 03 Nov 2011 05:08:28 +0100 |
| parents | 3c9232a684ae |
| children | 3b17210f34d9 |
| rev | line source |
|---|---|
|
5853
92bcf4cc9421
This is now the "real" main program -- it calls Py_Main(argc, argv)
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* Minimal main program -- everything is loaded from the library */ |
|
92bcf4cc9421
This is now the "real" main program -- it calls Py_Main(argc, argv)
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
| 8894 | 3 #include "Python.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
4 #include <locale.h> |
| 8894 | 5 |
|
26815
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
6 #ifdef __FreeBSD__ |
|
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
7 #include <floatingpoint.h> |
|
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
8 #endif |
|
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
9 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
10 #ifdef MS_WINDOWS |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
11 int |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
12 wmain(int argc, wchar_t **argv) |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
13 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
14 return Py_Main(argc, argv); |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
15 } |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
16 #else |
|
53767
ac209f132b17
Issue #5915: Implement PEP 383, Non-decodable Bytes in
Martin v. Löwis <martin@v.loewis.de>
parents:
51902
diff
changeset
|
17 |
|
65568
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
18 #ifdef __APPLE__ |
|
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
19 extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size); |
|
53767
ac209f132b17
Issue #5915: Implement PEP 383, Non-decodable Bytes in
Martin v. Löwis <martin@v.loewis.de>
parents:
51902
diff
changeset
|
20 #endif |
|
ac209f132b17
Issue #5915: Implement PEP 383, Non-decodable Bytes in
Martin v. Löwis <martin@v.loewis.de>
parents:
51902
diff
changeset
|
21 |
| 6055 | 22 int |
| 13481 | 23 main(int argc, char **argv) |
|
5853
92bcf4cc9421
This is now the "real" main program -- it calls Py_Main(argc, argv)
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
25 wchar_t **argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*argc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
26 /* We need a second copies, as Python might modify the first one. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
27 wchar_t **argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*argc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
28 int i, res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
29 char *oldloc; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
30 /* 754 requires that FP exceptions run in "no stop" mode by default, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
31 * and until C vendors implement C99's ways to control FP exceptions, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
32 * Python requires non-stop mode. Alas, some platforms enable FP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
33 * exceptions by default. Here we disable them. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
34 */ |
|
26815
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
35 #ifdef __FreeBSD__ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
36 fp_except_t m; |
|
26815
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
37 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
38 m = fpgetmask(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
39 fpsetmask(m & ~FP_X_OFL); |
|
26815
8eccfae04bb4
Apparently FreeBSD enables some HW floating-point exceptions by default.
Tim Peters <tim.peters@gmail.com>
parents:
24471
diff
changeset
|
40 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
41 if (!argv_copy || !argv_copy2) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
42 fprintf(stderr, "out of memory\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
43 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
44 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
45 oldloc = strdup(setlocale(LC_ALL, NULL)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
46 setlocale(LC_ALL, ""); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
47 for (i = 0; i < argc; i++) { |
|
65568
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
48 #ifdef __APPLE__ |
|
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
49 argv_copy[i] = _Py_DecodeUTF8_surrogateescape(argv[i], strlen(argv[i])); |
|
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
50 #else |
|
65412
3794c9b50824
Add an optional size argument to _Py_char2wchar()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65277
diff
changeset
|
51 argv_copy[i] = _Py_char2wchar(argv[i], NULL); |
|
65568
45079ad1e260
Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65412
diff
changeset
|
52 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
53 if (!argv_copy[i]) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
54 return 1; |
|
65277
49df778889e6
Revert r85435 (and r85440): decode command line arguments from utf-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65275
diff
changeset
|
55 argv_copy2[i] = argv_copy[i]; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
56 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
57 setlocale(LC_ALL, oldloc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
58 free(oldloc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
59 res = Py_Main(argc, argv_copy); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
60 for (i = 0; i < argc; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
61 PyMem_Free(argv_copy2[i]); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
62 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
63 PyMem_Free(argv_copy); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
64 PyMem_Free(argv_copy2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54427
diff
changeset
|
65 return res; |
|
5853
92bcf4cc9421
This is now the "real" main program -- it calls Py_Main(argc, argv)
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 } |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
26815
diff
changeset
|
67 #endif |
