This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2016年07月31日 07:04 by yan12125, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| check-crypt.patch | yan12125, 2016年07月31日 07:04 | review | ||
| check-crypt.patch | yan12125, 2016年07月31日 07:09 | version 2, autoreconf necessary | review | |
| prohibit-implicit-function-declarations.patch | yan12125, 2016年12月25日 14:28 | review | ||
| prohibit-implicit-function-declarations.patch | yan12125, 2016年12月25日 17:05 | Patch version 2 | review | |
| prohibit-implicit-function-declarations.patch | yan12125, 2017年01月16日 14:37 | Patch version 3, autoreconf necessary | review | |
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 552 | closed | dstufft, 2017年03月31日 16:36 | |
| Messages (19) | |||
|---|---|---|---|
| msg271727 - (view) | Author: (yan12125) * | Date: 2016年07月31日 07:04 | |
On Android the crypt() function is missing, causing ugly linking errors when compiling the _crypt module. This patch handles it elegantly. A question: should I include changes to configure and pyconfig.h.in in the patch? |
|||
| msg271728 - (view) | Author: (yan12125) * | Date: 2016年07月31日 07:09 | |
Version 2: correct the name added to `missing` |
|||
| msg271729 - (view) | Author: (yan12125) * | Date: 2016年07月31日 07:12 | |
Some references for crypt(): POSIX standard: http://pubs.opengroup.org/onlinepubs/9699919799/functions/crypt.html Linux man page: http://man7.org/linux/man-pages/man3/crypt.3.html FreeBSD man page: https://www.freebsd.org/cgi/man.cgi?crypt(3) Mac OS X man page: https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/crypt.3.html All requires <unistd.h>. |
|||
| msg271730 - (view) | Author: Xavier de Gaye (xdegaye) * (Python triager) | Date: 2016年07月31日 08:18 | |
> A question: should I include changes to configure and pyconfig.h.in in the patch? You just need to mention that one should run autoreconf. |
|||
| msg271732 - (view) | Author: (yan12125) * | Date: 2016年07月31日 08:28 | |
Thanks, added to the patch description |
|||
| msg278770 - (view) | Author: Xavier de Gaye (xdegaye) * (Python triager) | Date: 2016年10月16日 15:44 | |
Android does not have crypt, but the crypt module is cross-built nevertheless after this warning has been issued: warning: implicit declaration of function 'crypt' is invalid in C99 [-Wimplicit-function-declaration] And at runtime, importing the crypt module fails with: ImportError: dlopen failed: cannot locate symbol "crypt" referenced by "_crypt.cpython-37m-i686-linux-android.so" gcc and clang do not enforce the C99 rules and emit just a warning for implicit function declarations instead of the error that would be conforming to C99. This can be changed with the flag '-Werror=implicit-function-declaration' and the compilation of the crypt extension module rightly fails in that case. I think this issue should be fixed by adding this flag to the Makefile. Maybe in another issue. |
|||
| msg278824 - (view) | Author: (yan12125) * | Date: 2016年10月17日 17:23 | |
Agreed. Adding -Werror=implicit-function-declaration is much simpler. Feel free to close it as rejected. |
|||
| msg278836 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2016年10月18日 03:07 | |
If there is an obscure platform where we don’t include the right header file for a function, changing the warning into an error would cause the build to fail. If we do make it an error, it should only be so for 3.7. |
|||
| msg283996 - (view) | Author: (yan12125) * | Date: 2016年12月25日 14:28 | |
(Re-use the existing issue) Here's a patch that tries to add -Werror=implicit-function-declaration to $BASECFLAGS. This is useful for cross-compiling. When a function is missing, the error jumps out during the build time rather than runtime. Tested configurations: * Arch Linux x86_64 native build * macOS Sierra native build * Android ARM, API 21 cross build I'd like to hear some ideas from macOS experts as in my memory macOS's build system is fragile than that on Linux. |
|||
| msg284002 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2016年12月25日 16:43 | |
Would it be possible to not add this option for third party extensions? |
|||
| msg284004 - (view) | Author: (yan12125) * | Date: 2016年12月25日 17:05 | |
> Would it be possible to not add this option for third party extensions? Good suggestion. Just use $CFLAGS_NODIST instead of $BASECFLAGS. |
|||
| msg285567 - (view) | Author: (yan12125) * | Date: 2017年01月16日 14:37 | |
Thanks for the comment and sorry for the mistake. Here's another updated patch. In PEP7: > Use 4-space indents and no tabs at all. Does that apply to configuration files, too? |
|||
| msg285583 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2017年01月16日 19:42 | |
I would say it is more important to fit in with the surrounding style than mindlessly follow PEP 7. IMO the indentation in the configure script is a mess, but if we fix it up, it should probably be done separately to adding this extra flag. |
|||
| msg286759 - (view) | Author: (yan12125) * | Date: 2017年02月02日 10:17 | |
Hello, any updates here? I hope this merged soon so that potential issues on obscure platforms can be fixed as soon as possible. |
|||
| msg287126 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2017年02月06日 13:25 | |
New changeset ca2f024ce7cb by Victor Stinner in branch 'default': Prohibit implicit C function declarations https://hg.python.org/cpython/rev/ca2f024ce7cb |
|||
| msg287127 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2017年02月06日 13:30 | |
Martin Panter: "If there is an obscure platform where we don’t include the right header file for a function, changing the warning into an error would cause the build to fail." In my experience, calling a function which was not declared is very likely to cause a bug, or a crash in the worst case. For example, on 64-bit, if the return type is a pointer, the C compiler uses the int type by default, whereas a pointer is 32-bit, not 64-bit, and so it will immediately crash. Martin: "If we do make it an error, it should only be so for 3.7." Ok. I pushed the patch to Python 3.6. @Chi Hsuan Yen: Thanks for the patch! Is this change enough to fix the crypt build issue? If yes, can we close the issue? It is likely that the cause causes compilation errors on some platforms where we call non-existent functions or call functions with a missing header. IMHO it's a good thing to get a build error rather than a crash at runtime. A concrete issue is that the compilation of the curses module will probably fails now on Solaris: issue #13552, whereas before the build only emitted warnings. The curses module is broken for years on Solaris, and it seems like nobody is able to fix it, so it's not a big deal. |
|||
| msg287128 - (view) | Author: (yan12125) * | Date: 2017年02月06日 13:45 | |
> If yes, can we close the issue? Yes and thanks! As a side note, on Android it prevents broken grp.cpython-37m.so, too. |
|||
| msg287130 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2017年02月06日 13:50 | |
Oh by the way, if someone sees a build error because of a missing function declaration, please report a new issue. |
|||
| msg287132 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2017年02月06日 14:00 | |
New changeset 9a26d20d2baa27407501b13435d733dcc26f3d53 by Victor Stinner in branch 'master': Prohibit implicit C function declarations https://github.com/python/cpython/commit/9a26d20d2baa27407501b13435d733dcc26f3d53 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:34 | admin | set | github: 71846 |
| 2017年03月31日 16:36:21 | dstufft | set | pull_requests: + pull_request946 |
| 2017年02月06日 14:00:23 | python-dev | set | messages: + msg287132 |
| 2017年02月06日 13:50:39 | vstinner | set | messages: + msg287130 |
| 2017年02月06日 13:45:59 | yan12125 | set | status: open -> closed resolution: fixed messages: + msg287128 stage: resolved |
| 2017年02月06日 13:30:29 | vstinner | set | messages: + msg287127 |
| 2017年02月06日 13:25:45 | python-dev | set | nosy:
+ python-dev messages: + msg287126 |
| 2017年02月02日 10:17:08 | yan12125 | set | messages: + msg286759 |
| 2017年01月16日 19:42:34 | martin.panter | set | messages: + msg285583 |
| 2017年01月16日 14:37:55 | yan12125 | set | files:
+ prohibit-implicit-function-declarations.patch messages: + msg285567 |
| 2016年12月25日 17:05:06 | yan12125 | set | files:
+ prohibit-implicit-function-declarations.patch messages: + msg284004 |
| 2016年12月25日 16:43:38 | vstinner | set | messages: + msg284002 |
| 2016年12月25日 14:28:02 | yan12125 | set | files:
+ prohibit-implicit-function-declarations.patch type: compile error -> enhancement components: + Build title: Check for the existence of crypt() -> Prohibit implicit C function declarations nosy: + ronaldoussoren, ned.deily messages: + msg283996 |
| 2016年10月20日 10:20:20 | xdegaye | set | versions: + Python 3.7, - Python 3.6 |
| 2016年10月18日 03:07:53 | martin.panter | set | messages: + msg278836 |
| 2016年10月17日 17:23:05 | yan12125 | set | messages: + msg278824 |
| 2016年10月16日 15:44:26 | xdegaye | set | nosy:
+ vstinner, benjamin.peterson, martin.panter messages: + msg278770 |
| 2016年07月31日 08:28:00 | yan12125 | set | messages: + msg271732 |
| 2016年07月31日 08:22:55 | xdegaye | link | issue26865 dependencies |
| 2016年07月31日 08:18:29 | xdegaye | set | messages: + msg271730 |
| 2016年07月31日 07:12:39 | yan12125 | set | messages: + msg271729 |
| 2016年07月31日 07:09:52 | yan12125 | set | files:
+ check-crypt.patch messages: + msg271728 |
| 2016年07月31日 07:04:38 | yan12125 | create | |