From: Victor Stinner Date: Fri, 9 Nov 2018 12:03:37 +0000 (+0100) Subject: bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) X-Git-Tag: v3.8.0a1~533 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=130893debfd97c70e3a89d9ba49892f53e6b9d79;p=python bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) * All internal header files now require Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN to be defined. * _json.c is now compiled with Py_BUILD_CORE_BUILTIN to access pycore_accu.h header. * Add an example to Modules/Setup to show how to build _json as a built-in module; it requires non trivial compiler options. --- diff --git a/Include/internal/pycore_accu.h b/Include/internal/pycore_accu.h index ab1aad2803..4350db58a2 100644 --- a/Include/internal/pycore_accu.h +++ b/Include/internal/pycore_accu.h @@ -9,6 +9,10 @@ extern "C" { *** Its definition may be changed or removed at any moment. ***/ +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + /* * A two-level accumulator of unicode objects that avoids both the overhead * of keeping a huge number of small separate objects, and the quadratic diff --git a/Include/internal/pycore_atomic.h b/Include/internal/pycore_atomic.h index 5f349cc3e9..f430a5c26f 100644 --- a/Include/internal/pycore_atomic.h +++ b/Include/internal/pycore_atomic.h @@ -4,8 +4,8 @@ extern "C" { #endif -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" #endif #include "dynamic_annotations.h" diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index ddeeb5c425..c8c63b1c7f 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -4,6 +4,10 @@ extern "C" { #endif +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + #include "pycore_atomic.h" #include "pythread.h" diff --git a/Include/internal/pycore_condvar.h b/Include/internal/pycore_condvar.h index f9330890d3..a12b6994ad 100644 --- a/Include/internal/pycore_condvar.h +++ b/Include/internal/pycore_condvar.h @@ -1,6 +1,10 @@ #ifndef Py_INTERNAL_CONDVAR_H #define Py_INTERNAL_CONDVAR_H +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + #ifndef _POSIX_THREADS /* This means pthreads are not implemented in libc headers, hence the macro not present in unistd.h. But they still can be implemented as an external diff --git a/Include/internal/pycore_context.h b/Include/internal/pycore_context.h index 57a410c06f..70701cdd11 100644 --- a/Include/internal/pycore_context.h +++ b/Include/internal/pycore_context.h @@ -1,10 +1,12 @@ #ifndef Py_INTERNAL_CONTEXT_H #define Py_INTERNAL_CONTEXT_H +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif #include "pycore_hamt.h" - struct _pycontextobject { PyObject_HEAD PyContext *ctx_prev; @@ -37,5 +39,4 @@ struct _pycontexttokenobject { int _PyContext_Init(void); void _PyContext_Fini(void); - #endif /* !Py_INTERNAL_CONTEXT_H */ diff --git a/Include/internal/pycore_getopt.h b/Include/internal/pycore_getopt.h index 8ef2ada72f..e6f4654a66 100644 --- a/Include/internal/pycore_getopt.h +++ b/Include/internal/pycore_getopt.h @@ -1,6 +1,10 @@ #ifndef Py_INTERNAL_PYGETOPT_H #define Py_INTERNAL_PYGETOPT_H +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + extern int _PyOS_opterr; extern int _PyOS_optind; extern wchar_t *_PyOS_optarg; diff --git a/Include/internal/pycore_gil.h b/Include/internal/pycore_gil.h index 5059850d76..014e75fd18 100644 --- a/Include/internal/pycore_gil.h +++ b/Include/internal/pycore_gil.h @@ -4,6 +4,10 @@ extern "C" { #endif +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + #include "pycore_condvar.h" #include "pycore_atomic.h" diff --git a/Include/internal/pycore_hamt.h b/Include/internal/pycore_hamt.h index 29ad28b1d8..8b2ce1fc96 100644 --- a/Include/internal/pycore_hamt.h +++ b/Include/internal/pycore_hamt.h @@ -1,6 +1,9 @@ #ifndef Py_INTERNAL_HAMT_H #define Py_INTERNAL_HAMT_H +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif #define _Py_HAMT_MAX_TREE_DEPTH 7 diff --git a/Include/internal/pycore_hash.h b/Include/internal/pycore_hash.h index e14b80a7f2..babbc95b87 100644 --- a/Include/internal/pycore_hash.h +++ b/Include/internal/pycore_hash.h @@ -1,6 +1,10 @@ #ifndef Py_INTERNAL_HASH_H #define Py_INTERNAL_HASH_H +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + uint64_t _Py_KeyedHash(uint64_t, const char *, Py_ssize_t); #endif diff --git a/Include/internal/pycore_lifecycle.h b/Include/internal/pycore_lifecycle.h index cf36440eab..e10431690c 100644 --- a/Include/internal/pycore_lifecycle.h +++ b/Include/internal/pycore_lifecycle.h @@ -4,8 +4,8 @@ extern "C" { #endif -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" #endif PyAPI_FUNC(int) _Py_UnixMain(int argc, char **argv); diff --git a/Include/internal/pycore_mem.h b/Include/internal/pycore_mem.h index 4a41b77734..247426afe7 100644 --- a/Include/internal/pycore_mem.h +++ b/Include/internal/pycore_mem.h @@ -4,8 +4,8 @@ extern "C" { #endif -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN defined" #endif #include "objimpl.h" diff --git a/Include/internal/pycore_pathconfig.h b/Include/internal/pycore_pathconfig.h index 00d7bbf23e..267e690976 100644 --- a/Include/internal/pycore_pathconfig.h +++ b/Include/internal/pycore_pathconfig.h @@ -4,8 +4,8 @@ extern "C" { #endif -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" #endif PyAPI_FUNC(void) _Py_wstrlist_clear( diff --git a/Include/internal/pycore_state.h b/Include/internal/pycore_state.h index 6285ecf5f5..01f214045c 100644 --- a/Include/internal/pycore_state.h +++ b/Include/internal/pycore_state.h @@ -4,8 +4,8 @@ extern "C" { #endif -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" #endif #include "pystate.h" diff --git a/Include/internal/pycore_warnings.h b/Include/internal/pycore_warnings.h index 2878a28a2e..91bf90232f 100644 --- a/Include/internal/pycore_warnings.h +++ b/Include/internal/pycore_warnings.h @@ -4,6 +4,10 @@ extern "C" { #endif +#if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) +# error "this header requires Py_BUILD_CORE or Py_BUILD_CORE_BUILTIN define" +#endif + #include "object.h" struct _warnings_runtime_state { diff --git a/Modules/Setup b/Modules/Setup index e2b5f86f38..e7b939d551 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -180,6 +180,7 @@ _symtable symtablemodule.c #_bisect _bisectmodule.c # Bisection algorithms #_heapq _heapqmodule.c # Heap queue algorithm #_asyncio _asynciomodule.c # Fast asyncio Future +#_json -I$(srcdir)/Include/internal -DPy_BUILD_CORE_BUILTIN _json.c # _json speedups #unicodedata unicodedata.c # static Unicode character database diff --git a/setup.py b/setup.py index 37c5dd58a6..b87d05d214 100644 --- a/setup.py +++ b/setup.py @@ -678,7 +678,9 @@ class PyBuildExt(build_ext): # atexit exts.append( Extension("atexit", ["atexitmodule.c"]) ) # _json speedups - exts.append( Extension("_json", ["_json.c"]) ) + exts.append( Extension("_json", ["_json.c"], + # pycore_accu.h requires Py_BUILD_CORE_BUILTIN + extra_compile_args=['-DPy_BUILD_CORE_BUILTIN']) ) # Python C API test module exts.append( Extension('_testcapi', ['_testcapimodule.c'], depends=['testcapi_long.h']) )