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.

classification
Title: Cannot build CPython3.6 with module “testcapimodule” statically
Type: compile error Stage: resolved
Components: Build Versions: Python 3.9, Python 3.8
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Nan Zhang, p-ganssle, vstinner
Priority: normal Keywords:

Created on 2017-05-15 02:55 by Nan Zhang, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 1658 closed python-dev, 2017-05-18 20:13
Messages (3)
msg293664 - (view) Author: Nan Zhang (Nan Zhang) * Date: 2017-05-15 02:55
up vote
0
down vote
favorite
I am trying to build CPython3.6 from GitHub statically with the Documentation below:

https://wiki.python.org/moin/BuildStatically

Changed *shared* to *static*

And only uncommented the module "testcapimodule" in Modules/Setup file:

_testcapi _testcapimodule.c # Python C API test module

And ran with 'make LINKFORSHARED=" "'

However I got errors that:

    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers   -I. -I./Include    -DPy_BUILD_CORE  -c ./Modules/_testcapimodule.c -o Modules/_testcapimodule.o
./Modules/_testcapimodule.c: In function ‘test_datetime_capi’:
        ./Modules/_testcapimodule.c:2191:9: error: ‘PyDateTimeAPI’ undeclared (first use in this function)
             if (PyDateTimeAPI) {
                 ^
        ./Modules/_testcapimodule.c:2191:9: note: each undeclared identifier is reported only once for each function it appears in
        ./Modules/_testcapimodule.c:2203:5: error: ‘PyDateTime_IMPORT’ undeclared (first use in this function)
             PyDateTime_IMPORT;
             ^
        ./Modules/_testcapimodule.c:2208:1: warning: control reaches end of non-void function [-Wreturn-type]
         }
         ^
        make: *** [Modules/_testcapimodule.o] Error 1

But when I build Cpython3.6 with *shared*, it can succeed.
msg352638 - (view) Author: Paul Ganssle (p-ganssle) * (Python committer) Date: 2019-09-17 13:34
Is this issue only in Python 3.6? I believe Python 3.6 is only receiving security fixes at the moment, so this could only be fixed in 3.7, 3.8 and 3.9.
msg352662 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2019-09-17 20:46
It seems like this issue has been fixed in 3.8 and master branches (I didn't test Python 3.7): see below.

I close the issue. Reopen/comment the issue if you consider that Python 3.7 should be fixed as well.


I made this change:

$ git diff
diff --git a/Modules/Setup b/Modules/Setup
index 983fa014ec..ff2fd14857 100644
--- a/Modules/Setup
+++ b/Modules/Setup
@@ -151,6 +151,10 @@ _symtable symtablemodule.c
 # modules are to be built as shared libraries (see above for more
 # detail; also note that *static* or *disabled* cancels this effect):
 
+*static*
+
+_datetime _datetimemodule.c    # datetime accelerator
+
 #*shared*
 
 # GNU readline.  Unlike previous Python incarnations, GNU readline is
@@ -177,7 +181,6 @@ _symtable symtablemodule.c
 #_random _randommodule.c       # Random number generator
 #_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c        # elementtree accelerator
 #_pickle _pickle.c     # pickle accelerator
-#_datetime _datetimemodule.c   # datetime accelerator
 #_bisect _bisectmodule.c       # Bisection algorithms
 #_heapq _heapqmodule.c # Heap queue algorithm
 #_asyncio _asynciomodule.c  # Fast asyncio Future


I built Python: it works as expected, _datetime is a built-in module:

$ ./python
Python 3.9.0a0 (heads/master-dirty:46b0b81220, Sep 17 2019, 22:42:19) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _datetime
>>> _datetime
<module '_datetime' (built-in)>


Note:

$ make
...
The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  _datetime             atexit             
pwd                   time                                     
...
History
Date User Action Args
2022-04-11 14:58:46adminsetgithub: 74552
2019-09-17 20:46:01vstinnersetstatus: open -> closed
versions: + Python 3.8, Python 3.9, - Python 3.6
messages: + msg352662

resolution: fixed
stage: resolved
2019-09-17 13:34:54p-gansslesetnosy: + p-ganssle
messages: + msg352638
2017-05-18 20:36:38vstinnersetnosy: + vstinner
2017-05-18 20:13:23python-devsetpull_requests: + pull_request1752
2017-05-15 02:55:39Nan Zhangcreate