mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	gh-108220: Internal header files require Py_BUILD_CORE to be defined (#108221)
* pycore_intrinsics.h does nothing if included twice (add #ifndef and #define). * Update Tools/cases_generator/generate_cases.py to generate the Py_BUILD_CORE test. * _bz2, _lzma, _opcode and zlib extensions now define the Py_BUILD_CORE_MODULE macro to use internal headers (pycore_code.h, pycore_intrinsics.h and pycore_blocks_output_buffer.h).
This commit is contained in:
		
							parent
							
								
									db55383829
								
							
						
					
					
						commit
						21c0844742
					
				
					 16 changed files with 65 additions and 4 deletions
				
			
		|  | @ -40,6 +40,10 @@ extern "C" { | |||
| 
 | ||||
| #include "Python.h" | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| typedef struct { | ||||
|     // List of bytes objects
 | ||||
|     PyObject *list; | ||||
|  |  | |||
|  | @ -4,6 +4,10 @@ | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #define CODE_MAX_WATCHERS 8 | ||||
| 
 | ||||
| /* PEP 659
 | ||||
|  |  | |||
|  | @ -4,6 +4,10 @@ | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| extern PyObject* _PyCodec_Lookup(const char *encoding); | ||||
| 
 | ||||
| /* Text codec specific encoding and decoding API.
 | ||||
|  |  | |||
|  | @ -3,6 +3,10 @@ | |||
| 
 | ||||
| #if defined(__EMSCRIPTEN__) | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| void | ||||
| _Py_CheckEmscriptenSignals(void); | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ extern "C" { | |||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "Py_BUILD_CORE must be defined to include this header" | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #include <locale.h>   /* struct lconv */ | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ extern "C" { | |||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "Py_BUILD_CORE must be defined to include this header" | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef MS_WINDOWS | ||||
|  |  | |||
|  | @ -4,6 +4,10 @@ | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #include <stdbool.h> | ||||
| #include <stddef.h>               // offsetof() | ||||
| #include "pycore_code.h"          // STATS | ||||
|  |  | |||
|  | @ -5,6 +5,10 @@ | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #include "pycore_hashtable.h"     // _Py_hashtable_t | ||||
| #include "pycore_time.h"          // _PyTime_t | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,9 @@ | |||
| 
 | ||||
| #ifndef Py_INTERNAL_INSTRUMENT_H | ||||
| #define Py_INTERNAL_INSTRUMENT_H | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #include "pycore_bitutils.h"      // _Py_popcount32 | ||||
| #include "pycore_frame.h" | ||||
|  |  | |||
|  | @ -1,3 +1,9 @@ | |||
| #ifndef Py_INTERNAL_INTRINSIC_H | ||||
| #define Py_INTERNAL_INTRINSIC_H | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| /* Unary Functions: */ | ||||
| #define INTRINSIC_1_INVALID                      0 | ||||
|  | @ -40,3 +46,5 @@ typedef struct { | |||
| 
 | ||||
| extern const intrinsic_func1_info _PyIntrinsics_UnaryFunctions[]; | ||||
| extern const intrinsic_func2_info _PyIntrinsics_BinaryFunctions[]; | ||||
| 
 | ||||
| #endif  // !Py_INTERNAL_INTRINSIC_H
 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								Include/internal/pycore_opcode_metadata.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Include/internal/pycore_opcode_metadata.h
									
										
									
										generated
									
									
									
								
							|  | @ -3,6 +3,10 @@ | |||
| //   Python/bytecodes.c
 | ||||
| // Do not edit!
 | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE | ||||
| #  error "this header requires Py_BUILD_CORE define" | ||||
| #endif | ||||
| 
 | ||||
| #include <stdbool.h> | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| /* _bz2 - Low-level Python interface to libbzip2. */ | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE_BUILTIN | ||||
| #  define Py_BUILD_CORE_MODULE 1 | ||||
| #endif | ||||
| 
 | ||||
| #include "Python.h" | ||||
| 
 | ||||
| #include <bzlib.h> | ||||
|  |  | |||
|  | @ -5,6 +5,10 @@ | |||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE_BUILTIN | ||||
| #  define Py_BUILD_CORE_MODULE 1 | ||||
| #endif | ||||
| 
 | ||||
| #include "Python.h" | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,3 +1,7 @@ | |||
| #ifndef Py_BUILD_CORE_BUILTIN | ||||
| #  define Py_BUILD_CORE_MODULE 1 | ||||
| #endif | ||||
| 
 | ||||
| #include "Python.h" | ||||
| #include "compile.h" | ||||
| #include "opcode.h" | ||||
|  |  | |||
|  | @ -3,6 +3,10 @@ | |||
| 
 | ||||
| /* Windows users:  read Python's PCbuild\readme.txt */ | ||||
| 
 | ||||
| #ifndef Py_BUILD_CORE_BUILTIN | ||||
| #  define Py_BUILD_CORE_MODULE 1 | ||||
| #endif | ||||
| 
 | ||||
| #include "Python.h" | ||||
| 
 | ||||
| #include "zlib.h" | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| import os | ||||
| import posixpath | ||||
| import sys | ||||
| import textwrap | ||||
| import typing | ||||
| from collections.abc import Iterator | ||||
| 
 | ||||
|  | @ -403,6 +404,12 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No | |||
| 
 | ||||
|             self.write_provenance_header() | ||||
| 
 | ||||
|             self.out.emit("\n" + textwrap.dedent(""" | ||||
|                 #ifndef Py_BUILD_CORE | ||||
|                 #  error "this header requires Py_BUILD_CORE define" | ||||
|                 #endif | ||||
|             """).strip()) | ||||
| 
 | ||||
|             self.out.emit("\n#include <stdbool.h>") | ||||
| 
 | ||||
|             self.write_pseudo_instrs() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner