gh-97669: Create Tools/build/ directory (#97963)

Create Tools/build/ directory. Move the following scripts from
Tools/scripts/ to Tools/build/:

* check_extension_modules.py
* deepfreeze.py
* freeze_modules.py
* generate_global_objects.py
* generate_levenshtein_examples.py
* generate_opcode_h.py
* generate_re_casefix.py
* generate_sre_constants.py
* generate_stdlib_module_names.py
* generate_token.py
* parse_html5_entities.py
* smelly.py
* stable_abi.py
* umarshal.py
* update_file.py
* verify_ensurepip_wheels.py

Update references to these scripts.
This commit is contained in:
Victor Stinner 2022-10-17 12:01:00 +02:00 committed by GitHub
parent eae7dad402
commit 1863302d61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 102 additions and 84 deletions

2
.github/CODEOWNERS vendored
View File

@ -55,7 +55,7 @@ Python/traceback.c @iritkatriel
/Lib/html/ @ezio-melotti /Lib/html/ @ezio-melotti
/Lib/_markupbase.py @ezio-melotti /Lib/_markupbase.py @ezio-melotti
/Lib/test/test_html*.py @ezio-melotti /Lib/test/test_html*.py @ezio-melotti
/Tools/scripts/*html5* @ezio-melotti /Tools/build/parse_html5_entities.py @ezio-melotti
# Import (including importlib). # Import (including importlib).
# Ignoring importlib.h so as to not get flagged on # Ignoring importlib.h so as to not get flagged on

View File

@ -6,12 +6,12 @@ on:
paths: paths:
- 'Lib/ensurepip/_bundled/**' - 'Lib/ensurepip/_bundled/**'
- '.github/workflows/verify-ensurepip-wheels.yml' - '.github/workflows/verify-ensurepip-wheels.yml'
- 'Tools/scripts/verify_ensurepip_wheels.py' - 'Tools/build/verify_ensurepip_wheels.py'
pull_request: pull_request:
paths: paths:
- 'Lib/ensurepip/_bundled/**' - 'Lib/ensurepip/_bundled/**'
- '.github/workflows/verify-ensurepip-wheels.yml' - '.github/workflows/verify-ensurepip-wheels.yml'
- 'Tools/scripts/verify_ensurepip_wheels.py' - 'Tools/build/verify_ensurepip_wheels.py'
permissions: permissions:
contents: read contents: read
@ -29,4 +29,4 @@ jobs:
with: with:
python-version: '3' python-version: '3'
- name: Compare checksums of bundled pip and setuptools to ones published on PyPI - name: Compare checksums of bundled pip and setuptools to ones published on PyPI
run: ./Tools/scripts/verify_ensurepip_wheels.py run: ./Tools/build/verify_ensurepip_wheels.py

2
.gitignore vendored
View File

@ -143,7 +143,7 @@ Tools/ssl/win32
Tools/freeze/test/outdir Tools/freeze/test/outdir
# The frozen modules are always generated by the build so we don't # The frozen modules are always generated by the build so we don't
# keep them in the repo. Also see Tools/scripts/freeze_modules.py. # keep them in the repo. Also see Tools/build/freeze_modules.py.
Python/frozen_modules/*.h Python/frozen_modules/*.h
# The manifest can be generated at any time with "make regen-frozen". # The manifest can be generated at any time with "make regen-frozen".
Python/frozen_modules/MANIFEST Python/frozen_modules/MANIFEST

View File

@ -1,4 +1,4 @@
.. Auto-generated by Tools/scripts/generate_token.py .. Auto-generated by Tools/build/generate_token.py
.. data:: ENDMARKER .. data:: ENDMARKER
.. data:: NAME .. data:: NAME

View File

@ -8,7 +8,7 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define" # error "this header requires Py_BUILD_CORE define"
#endif #endif
// The data structure & init here are inspired by Tools/scripts/deepfreeze.py. // The data structure & init here are inspired by Tools/build/deepfreeze.py.
// All field names generated by ASCII_STR() have a common prefix, // All field names generated by ASCII_STR() have a common prefix,
// to help avoid collisions with keywords, etc. // to help avoid collisions with keywords, etc.
@ -25,7 +25,7 @@ extern "C" {
// XXX Order by frequency of use? // XXX Order by frequency of use?
/* The following is auto-generated by Tools/scripts/generate_global_objects.py. */ /* The following is auto-generated by Tools/build/generate_global_objects.py. */
struct _Py_global_strings { struct _Py_global_strings {
struct { struct {
STRUCT_FOR_STR(anon_dictcomp, "<dictcomp>") STRUCT_FOR_STR(anon_dictcomp, "<dictcomp>")

View File

@ -1,4 +1,4 @@
// Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py // Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
#ifndef Py_INTERNAL_OPCODE_H #ifndef Py_INTERNAL_OPCODE_H
#define Py_INTERNAL_OPCODE_H #define Py_INTERNAL_OPCODE_H

View File

@ -8,7 +8,7 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define" # error "this header requires Py_BUILD_CORE define"
#endif #endif
/* The following is auto-generated by Tools/scripts/generate_global_objects.py. */ /* The following is auto-generated by Tools/build/generate_global_objects.py. */
#define _Py_global_objects_INIT { \ #define _Py_global_objects_INIT { \
.singletons = { \ .singletons = { \
.small_ints = { \ .small_ints = { \

View File

@ -1,4 +1,4 @@
/* Auto-generated by Tools/scripts/generate_token.py */ /* Auto-generated by Tools/build/generate_token.py */
/* Token types */ /* Token types */
#ifndef Py_INTERNAL_TOKEN_H #ifndef Py_INTERNAL_TOKEN_H

2
Include/opcode.h generated
View File

@ -1,4 +1,4 @@
// Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py // Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
#ifndef Py_OPCODE_H #ifndef Py_OPCODE_H
#define Py_OPCODE_H #define Py_OPCODE_H

View File

@ -261,7 +261,7 @@ name2codepoint = {
# HTML5 named character references # HTML5 named character references
# Generated by 'Tools/scripts/parse_html5_entities.py' # Generated by Tools/build/parse_html5_entities.py
# from https://html.spec.whatwg.org/entities.json and # from https://html.spec.whatwg.org/entities.json and
# https://html.spec.whatwg.org/multipage/named-characters.html. # https://html.spec.whatwg.org/multipage/named-characters.html.
# Map HTML5 named character references to the equivalent Unicode character(s). # Map HTML5 named character references to the equivalent Unicode character(s).

2
Lib/token.py generated
View File

@ -1,5 +1,5 @@
"""Token constants.""" """Token constants."""
# Auto-generated by Tools/scripts/generate_token.py # Auto-generated by Tools/build/generate_token.py
__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF'] __all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF']

View File

@ -285,7 +285,7 @@ BUILDPYTHON= python$(BUILDEXE)
HOSTRUNNER= @HOSTRUNNER@ HOSTRUNNER= @HOSTRUNNER@
PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@ PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@
UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/update_file.py UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/update_file.py
PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
# Single-platform builds depend on $(BUILDPYTHON). Cross builds use an # Single-platform builds depend on $(BUILDPYTHON). Cross builds use an
# external "build Python" and have an empty PYTHON_FOR_BUILD_DEPS. # external "build Python" and have an empty PYTHON_FOR_BUILD_DEPS.
@ -705,7 +705,7 @@ coverage-report: regen-token regen-frozen
.PHONY=clinic .PHONY=clinic
clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir) $(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py
# Build the interpreter # Build the interpreter
$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) $(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS)
@ -907,7 +907,7 @@ sharedmods: $(SHAREDMODS) pybuilddir.txt
# dependency on BUILDPYTHON ensures that the target is run last # dependency on BUILDPYTHON ensures that the target is run last
checksharedmods: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON) checksharedmods: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON)
@$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/check_extension_modules.py @$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/check_extension_modules.py
rundsymutil: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON) rundsymutil: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON)
@if [ ! -z $(DSYMUTIL) ] ; then \ @if [ ! -z $(DSYMUTIL) ] ; then \
@ -961,13 +961,13 @@ regen-test-frozenmain: $(BUILDPYTHON)
.PHONY: regen-test-levenshtein .PHONY: regen-test-levenshtein
regen-test-levenshtein: regen-test-levenshtein:
# Regenerate Lib/test/levenshtein_examples.json # Regenerate Lib/test/levenshtein_examples.json
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_levenshtein_examples.py Lib/test/levenshtein_examples.json $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_levenshtein_examples.py Lib/test/levenshtein_examples.json
.PHONY: regen-re .PHONY: regen-re
regen-re: $(BUILDPYTHON) regen-re: $(BUILDPYTHON)
# Regenerate Lib/re/_casefix.py # Regenerate Lib/re/_casefix.py
# using Tools/scripts/generate_re_casefix.py # using Tools/build/generate_re_casefix.py
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py
Programs/_testembed: Programs/_testembed.o $(LINK_PYTHON_DEPS) Programs/_testembed: Programs/_testembed.o $(LINK_PYTHON_DEPS)
$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS)
@ -1013,7 +1013,7 @@ _bootstrap_python: $(LIBRARY_OBJS_OMIT_FROZEN) Programs/_bootstrap_python.o Modu
# 2) deepfreeze modules with external build Python. # 2) deepfreeze modules with external build Python.
# #
# FROZEN_FILES_* are auto-generated by Tools/scripts/freeze_modules.py. # FROZEN_FILES_* are auto-generated by Tools/build/freeze_modules.py.
FROZEN_FILES_IN = \ FROZEN_FILES_IN = \
Lib/importlib/_bootstrap.py \ Lib/importlib/_bootstrap.py \
Lib/importlib/_bootstrap_external.py \ Lib/importlib/_bootstrap_external.py \
@ -1149,11 +1149,11 @@ Python/frozen_modules/frozen_only.h: Tools/freeze/flag.py $(FREEZE_MODULE_DEPS)
# END: freezing modules # END: freezing modules
Tools/scripts/freeze_modules.py: $(FREEZE_MODULE) Tools/build/freeze_modules.py: $(FREEZE_MODULE)
.PHONY: regen-frozen .PHONY: regen-frozen
regen-frozen: Tools/scripts/freeze_modules.py $(FROZEN_FILES_IN) regen-frozen: Tools/build/freeze_modules.py $(FROZEN_FILES_IN)
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/freeze_modules.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/freeze_modules.py
@echo "The Makefile was updated, you may need to re-run make." @echo "The Makefile was updated, you may need to re-run make."
############################################################################ ############################################################################
@ -1162,11 +1162,11 @@ regen-frozen: Tools/scripts/freeze_modules.py $(FROZEN_FILES_IN)
.PHONY: regen-deepfreeze .PHONY: regen-deepfreeze
regen-deepfreeze: $(DEEPFREEZE_OBJS) regen-deepfreeze: $(DEEPFREEZE_OBJS)
DEEPFREEZE_DEPS=$(srcdir)/Tools/scripts/deepfreeze.py $(FREEZE_MODULE_DEPS) $(FROZEN_FILES_OUT) DEEPFREEZE_DEPS=$(srcdir)/Tools/build/deepfreeze.py $(FREEZE_MODULE_DEPS) $(FROZEN_FILES_OUT)
# BEGIN: deepfreeze modules # BEGIN: deepfreeze modules
Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS)
$(PYTHON_FOR_FREEZE) $(srcdir)/Tools/scripts/deepfreeze.py \ $(PYTHON_FOR_FREEZE) $(srcdir)/Tools/build/deepfreeze.py \
Python/frozen_modules/importlib._bootstrap.h:importlib._bootstrap \ Python/frozen_modules/importlib._bootstrap.h:importlib._bootstrap \
Python/frozen_modules/importlib._bootstrap_external.h:importlib._bootstrap_external \ Python/frozen_modules/importlib._bootstrap_external.h:importlib._bootstrap_external \
Python/frozen_modules/zipimport.h:zipimport \ Python/frozen_modules/zipimport.h:zipimport \
@ -1203,8 +1203,8 @@ regen-importlib: regen-frozen
# Global objects # Global objects
.PHONY: regen-global-objects .PHONY: regen-global-objects
regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py regen-global-objects: $(srcdir)/Tools/build/generate_global_objects.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py
@echo "Note: Global objects can be added or removed by other tools (e.g. deepfreeze), " @echo "Note: Global objects can be added or removed by other tools (e.g. deepfreeze), "
@echo " so be sure to re-run regen-global-objects after those tools." @echo " so be sure to re-run regen-global-objects after those tools."
@ -1220,7 +1220,7 @@ check-abidump: all
abidiff $(srcdir)/Doc/data/python$(LDVERSION).abi "libpython$(LDVERSION).so" --drop-private-types --no-architecture --no-added-syms abidiff $(srcdir)/Doc/data/python$(LDVERSION).abi "libpython$(LDVERSION).so" --drop-private-types --no-architecture --no-added-syms
regen-limited-abi: all regen-limited-abi: all
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --generate-all $(srcdir)/Misc/stable_abi.toml $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/stable_abi.py --generate-all $(srcdir)/Misc/stable_abi.toml
############################################################################ ############################################################################
# Regenerate all generated files # Regenerate all generated files
@ -1331,8 +1331,8 @@ regen-ast:
.PHONY: regen-opcode .PHONY: regen-opcode
regen-opcode: regen-opcode:
# Regenerate Include/opcode.h from Lib/opcode.py # Regenerate Include/opcode.h from Lib/opcode.py
# using Tools/scripts/generate_opcode_h.py # using Tools/build/generate_opcode_h.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_opcode_h.py \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_opcode_h.py \
$(srcdir)/Lib/opcode.py \ $(srcdir)/Lib/opcode.py \
$(srcdir)/Include/opcode.h.new \ $(srcdir)/Include/opcode.h.new \
$(srcdir)/Include/internal/pycore_opcode.h.new $(srcdir)/Include/internal/pycore_opcode.h.new
@ -1342,23 +1342,23 @@ regen-opcode:
.PHONY: regen-token .PHONY: regen-token
regen-token: regen-token:
# Regenerate Doc/library/token-list.inc from Grammar/Tokens # Regenerate Doc/library/token-list.inc from Grammar/Tokens
# using Tools/scripts/generate_token.py # using Tools/build/generate_token.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py rst \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py rst \
$(srcdir)/Grammar/Tokens \ $(srcdir)/Grammar/Tokens \
$(srcdir)/Doc/library/token-list.inc $(srcdir)/Doc/library/token-list.inc
# Regenerate Include/internal/pycore_token.h from Grammar/Tokens # Regenerate Include/internal/pycore_token.h from Grammar/Tokens
# using Tools/scripts/generate_token.py # using Tools/build/generate_token.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py h \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py h \
$(srcdir)/Grammar/Tokens \ $(srcdir)/Grammar/Tokens \
$(srcdir)/Include/internal/pycore_token.h $(srcdir)/Include/internal/pycore_token.h
# Regenerate Parser/token.c from Grammar/Tokens # Regenerate Parser/token.c from Grammar/Tokens
# using Tools/scripts/generate_token.py # using Tools/build/generate_token.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py c \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py c \
$(srcdir)/Grammar/Tokens \ $(srcdir)/Grammar/Tokens \
$(srcdir)/Parser/token.c $(srcdir)/Parser/token.c
# Regenerate Lib/token.py from Grammar/Tokens # Regenerate Lib/token.py from Grammar/Tokens
# using Tools/scripts/generate_token.py # using Tools/build/generate_token.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py py \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py py \
$(srcdir)/Grammar/Tokens \ $(srcdir)/Grammar/Tokens \
$(srcdir)/Lib/token.py $(srcdir)/Lib/token.py
@ -1375,16 +1375,16 @@ regen-keyword:
.PHONY: regen-stdlib-module-names .PHONY: regen-stdlib-module-names
regen-stdlib-module-names: all Programs/_testembed regen-stdlib-module-names: all Programs/_testembed
# Regenerate Python/stdlib_module_names.h # Regenerate Python/stdlib_module_names.h
# using Tools/scripts/generate_stdlib_module_names.py # using Tools/build/generate_stdlib_module_names.py
$(RUNSHARED) ./$(BUILDPYTHON) \ $(RUNSHARED) ./$(BUILDPYTHON) \
$(srcdir)/Tools/scripts/generate_stdlib_module_names.py \ $(srcdir)/Tools/build/generate_stdlib_module_names.py \
> $(srcdir)/Python/stdlib_module_names.h.new > $(srcdir)/Python/stdlib_module_names.h.new
$(UPDATE_FILE) $(srcdir)/Python/stdlib_module_names.h $(srcdir)/Python/stdlib_module_names.h.new $(UPDATE_FILE) $(srcdir)/Python/stdlib_module_names.h $(srcdir)/Python/stdlib_module_names.h.new
regen-sre: regen-sre:
# Regenerate Modules/_sre/sre_constants.h and Modules/_sre/sre_targets.h # Regenerate Modules/_sre/sre_constants.h and Modules/_sre/sre_targets.h
# from Lib/re/_constants.py using Tools/scripts/generate_sre_constants.py # from Lib/re/_constants.py using Tools/build/generate_sre_constants.py
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_sre_constants.py \ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_sre_constants.py \
$(srcdir)/Lib/re/_constants.py \ $(srcdir)/Lib/re/_constants.py \
$(srcdir)/Modules/_sre/sre_constants.h \ $(srcdir)/Modules/_sre/sre_constants.h \
$(srcdir)/Modules/_sre/sre_targets.h $(srcdir)/Modules/_sre/sre_targets.h
@ -2511,7 +2511,7 @@ distclean: clobber docclean
# Check that all symbols exported by libpython start with "Py" or "_Py" # Check that all symbols exported by libpython start with "Py" or "_Py"
smelly: all smelly: all
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/smelly.py $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/smelly.py
# Find files with funny names # Find files with funny names
funny: funny:
@ -2549,7 +2549,7 @@ patchcheck: all
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/patchcheck/patchcheck.py $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/patchcheck/patchcheck.py
check-limited-abi: all check-limited-abi: all
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --all $(srcdir)/Misc/stable_abi.toml $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/stable_abi.py --all $(srcdir)/Misc/stable_abi.toml
.PHONY: update-config .PHONY: update-config
update-config: update-config:

View File

@ -2,7 +2,7 @@
# Please append new items at the end. # Please append new items at the end.
# The syntax of this file is not fixed. # The syntax of this file is not fixed.
# It is designed to be read only by Tools/stable_abi.py, which can change # It is designed to be read only by Tools/build/stable_abi.py, which can change
# without notice. # without notice.
# For the history of the stable ABI prior to this file, # For the history of the stable ABI prior to this file,

View File

@ -3,7 +3,7 @@
* *
* regular expression matching engine * regular expression matching engine
* *
* Auto-generated by Tools/scripts/generate_sre_constants.py from * Auto-generated by Tools/build/generate_sre_constants.py from
* Lib/re/_constants.py. * Lib/re/_constants.py.
* *
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.

View File

@ -3,7 +3,7 @@
* *
* regular expression matching engine * regular expression matching engine
* *
* Auto-generated by Tools/scripts/generate_sre_constants.py from * Auto-generated by Tools/build/generate_sre_constants.py from
* Lib/re/_constants.py. * Lib/re/_constants.py.
* *
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.

2
PC/python3dll.c generated
View File

@ -1,7 +1,7 @@
/* Re-export stable Python ABI */ /* Re-export stable Python ABI */
/* Generated by Tools/scripts/stable_abi.py */ /* Generated by Tools/build/stable_abi.py */
#ifdef _M_IX86 #ifdef _M_IX86
#define DECORATE "_" #define DECORATE "_"

View File

@ -395,7 +395,7 @@
DependsOnTargets="FindPythonForBuild" DependsOnTargets="FindPythonForBuild"
Condition="$(Configuration) != 'PGUpdate'"> Condition="$(Configuration) != 'PGUpdate'">
<!-- BEGIN deepfreeze rule --> <!-- BEGIN deepfreeze rule -->
<Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\scripts\deepfreeze.py" ^ <Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\deepfreeze.py" ^
"$(PySourcePath)Python\frozen_modules\importlib._bootstrap.h:importlib._bootstrap" ^ "$(PySourcePath)Python\frozen_modules\importlib._bootstrap.h:importlib._bootstrap" ^
"$(PySourcePath)Python\frozen_modules\importlib._bootstrap_external.h:importlib._bootstrap_external" ^ "$(PySourcePath)Python\frozen_modules\importlib._bootstrap_external.h:importlib._bootstrap_external" ^
"$(PySourcePath)Python\frozen_modules\zipimport.h:zipimport" ^ "$(PySourcePath)Python\frozen_modules\zipimport.h:zipimport" ^

View File

@ -13,7 +13,7 @@
<_ASTOutputs Include="$(PySourcePath)Python\Python-ast.c"> <_ASTOutputs Include="$(PySourcePath)Python\Python-ast.c">
<Argument>-C</Argument> <Argument>-C</Argument>
</_ASTOutputs> </_ASTOutputs>
<_OpcodeSources Include="$(PySourcePath)Tools\scripts\generate_opcode_h.py;$(PySourcePath)Lib\opcode.py" /> <_OpcodeSources Include="$(PySourcePath)Tools\build\generate_opcode_h.py;$(PySourcePath)Lib\opcode.py" />
<_OpcodeOutputs Include="$(PySourcePath)Include\opcode.h;$(PySourcePath)Include\internal\pycore_opcode.h;$(PySourcePath)Python\opcode_targets.h" /> <_OpcodeOutputs Include="$(PySourcePath)Include\opcode.h;$(PySourcePath)Include\internal\pycore_opcode.h;$(PySourcePath)Python\opcode_targets.h" />
<_TokenSources Include="$(PySourcePath)Grammar\Tokens" /> <_TokenSources Include="$(PySourcePath)Grammar\Tokens" />
<_TokenOutputs Include="$(PySourcePath)Doc\library\token-list.inc"> <_TokenOutputs Include="$(PySourcePath)Doc\library\token-list.inc">
@ -59,7 +59,7 @@
Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)" Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)"
DependsOnTargets="FindPythonForBuild"> DependsOnTargets="FindPythonForBuild">
<Message Text="Regenerate @(_OpcodeOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> <Message Text="Regenerate @(_OpcodeOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
<Exec Command="$(PythonForBuild) Tools\scripts\generate_opcode_h.py Lib\opcode.py Include\opcode.h Include\internal\pycore_opcode.h" <Exec Command="$(PythonForBuild) Tools\build\generate_opcode_h.py Lib\opcode.py Include\opcode.h Include\internal\pycore_opcode.h"
WorkingDirectory="$(PySourcePath)" /> WorkingDirectory="$(PySourcePath)" />
<Exec Command="$(PythonForBuild) Python\makeopcodetargets.py Python\opcode_targets.h" <Exec Command="$(PythonForBuild) Python\makeopcodetargets.py Python\opcode_targets.h"
WorkingDirectory="$(PySourcePath)" /> WorkingDirectory="$(PySourcePath)" />
@ -69,7 +69,7 @@
Inputs="@(_TokenSources)" Outputs="@(_TokenOutputs)" Inputs="@(_TokenSources)" Outputs="@(_TokenOutputs)"
DependsOnTargets="FindPythonForBuild"> DependsOnTargets="FindPythonForBuild">
<Message Text="Regenerate @(_TokenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> <Message Text="Regenerate @(_TokenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
<Exec Command="$(PythonForBuild) Tools\scripts\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens &quot;%(_TokenOutputs.Identity)&quot;" <Exec Command="$(PythonForBuild) Tools\build\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens &quot;%(_TokenOutputs.Identity)&quot;"
WorkingDirectory="$(PySourcePath)" /> WorkingDirectory="$(PySourcePath)" />
<Touch Files="@(_TokenOutputs)" /> <Touch Files="@(_TokenOutputs)" />
</Target> </Target>
@ -85,7 +85,7 @@
<Target Name="_RegenGlobalObjects" <Target Name="_RegenGlobalObjects"
DependsOnTargets="FindPythonForBuild"> DependsOnTargets="FindPythonForBuild">
<Message Text="Regenerate Global Objects" Importance="high" /> <Message Text="Regenerate Global Objects" Importance="high" />
<Exec Command="$(PythonForBuild) Tools\scripts\generate_global_objects.py" <Exec Command="$(PythonForBuild) Tools\build\generate_global_objects.py"
WorkingDirectory="$(PySourcePath)" /> WorkingDirectory="$(PySourcePath)" />
</Target> </Target>

2
Parser/token.c generated
View File

@ -1,4 +1,4 @@
/* Auto-generated by Tools/scripts/generate_token.py */ /* Auto-generated by Tools/build/generate_token.py */
#include "Python.h" #include "Python.h"
#include "pycore_token.h" #include "pycore_token.h"

View File

@ -2,7 +2,7 @@
/* Frozen modules bootstrap /* Frozen modules bootstrap
* *
* Limited and restricted Python interpreter to run * Limited and restricted Python interpreter to run
* "Tools/scripts/deepfreeze.py" on systems with no or older Python * "Tools/build/deepfreeze.py" on systems with no or older Python
* interpreter. * interpreter.
*/ */

View File

@ -2,7 +2,7 @@
modules into frozen modules (like Lib/importlib/_bootstrap.py modules into frozen modules (like Lib/importlib/_bootstrap.py
into Python/importlib.h). into Python/importlib.h).
This is used directly by Tools/scripts/freeze_modules.py, and indirectly by "make regen-frozen". This is used directly by Tools/build/freeze_modules.py, and indirectly by "make regen-frozen".
See Python/frozen.c for more info. See Python/frozen.c for more info.

View File

@ -3,4 +3,4 @@ modules. Python/frozen.c depends on these files.
None of these files are committed into the repo. None of these files are committed into the repo.
See Tools/scripts/freeze_modules.py for more info. See Tools/build/freeze_modules.py for more info.

View File

@ -8,7 +8,7 @@
* These files must be regenerated any time the corresponding .pyc * These files must be regenerated any time the corresponding .pyc
* file would change (including with changes to the compiler, bytecode * file would change (including with changes to the compiler, bytecode
* format, marshal format). This can be done with "make regen-frozen". * format, marshal format). This can be done with "make regen-frozen".
* That make target just runs Tools/scripts/freeze_modules.py. * That make target just runs Tools/build/freeze_modules.py.
* *
* The freeze_modules.py script also determines which modules get * The freeze_modules.py script also determines which modules get
* frozen. Update the list at the top of the script to add, remove, * frozen. Update the list at the top of the script to add, remove,

View File

@ -4,4 +4,4 @@ modules. Python/frozen.c depends on these files.
Note that, other than the required frozen modules, none of these files Note that, other than the required frozen modules, none of these files
are committed into the repo. are committed into the repo.
See Tools/scripts/freeze_modules.py for more info. See Tools/build/freeze_modules.py for more info.

View File

@ -1,4 +1,4 @@
// Auto-generated by Tools/scripts/generate_stdlib_module_names.py. // Auto-generated by Tools/build/generate_stdlib_module_names.py.
// List used to create sys.stdlib_module_names. // List used to create sys.stdlib_module_names.
static const char* _Py_stdlib_module_names[] = { static const char* _Py_stdlib_module_names[] = {

View File

@ -581,7 +581,7 @@ def regen_makefile(modules):
frozenfiles = [] frozenfiles = []
rules = [''] rules = ['']
deepfreezerules = ["Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS)", deepfreezerules = ["Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS)",
"\t$(PYTHON_FOR_FREEZE) $(srcdir)/Tools/scripts/deepfreeze.py \\"] "\t$(PYTHON_FOR_FREEZE) $(srcdir)/Tools/build/deepfreeze.py \\"]
for src in _iter_sources(modules): for src in _iter_sources(modules):
frozen_header = relpath_for_posix_display(src.frozenfile, ROOT_DIR) frozen_header = relpath_for_posix_display(src.frozenfile, ROOT_DIR)
frozenfiles.append(f'\t\t{frozen_header} \\') frozenfiles.append(f'\t\t{frozen_header} \\')
@ -646,7 +646,7 @@ def regen_pcbuild(modules):
projlines = [] projlines = []
filterlines = [] filterlines = []
corelines = [] corelines = []
deepfreezerules = ['\t<Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\scripts\\deepfreeze.py" ^'] deepfreezerules = ['\t<Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\build\\deepfreeze.py" ^']
for src in _iter_sources(modules): for src in _iter_sources(modules):
pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR) pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR)
header = relpath_for_windows_display(src.frozenfile, ROOT_DIR) header = relpath_for_windows_display(src.frozenfile, ROOT_DIR)

View File

@ -3,6 +3,7 @@ import io
import os.path import os.path
import re import re
SCRIPT_NAME = 'Tools/build/generate_global_objects.py'
__file__ = os.path.abspath(__file__) __file__ = os.path.abspath(__file__)
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
INTERNAL = os.path.join(ROOT, 'Include', 'internal') INTERNAL = os.path.join(ROOT, 'Include', 'internal')
@ -213,7 +214,7 @@ def open_for_changes(filename, orig):
####################################### #######################################
# the global objects # the global objects
START = '/* The following is auto-generated by Tools/scripts/generate_global_objects.py. */' START = f'/* The following is auto-generated by {SCRIPT_NAME}. */'
END = '/* End auto-generated code */' END = '/* End auto-generated code */'

View File

@ -3,7 +3,7 @@
import sys import sys
import tokenize import tokenize
SCRIPT_NAME = "Tools/scripts/generate_opcode_h.py" SCRIPT_NAME = "Tools/build/generate_opcode_h.py"
PYTHON_OPCODE = "Lib/opcode.py" PYTHON_OPCODE = "Lib/opcode.py"
header = f""" header = f"""

View File

@ -5,6 +5,8 @@ import collections
import sys import sys
import unicodedata import unicodedata
SCRIPT_NAME = 'Tools/build/generate_re_casefix.py'
def update_file(file, content): def update_file(file, content):
try: try:
with open(file, 'r', encoding='utf-8') as fobj: with open(file, 'r', encoding='utf-8') as fobj:
@ -16,8 +18,8 @@ def update_file(file, content):
fobj.write(content) fobj.write(content)
return True return True
re_casefix_template = """\ re_casefix_template = f"""\
# Auto-generated by Tools/scripts/generate_re_casefix.py. # Auto-generated by {SCRIPT_NAME}.
# Maps the code of lowercased character to codes of different lowercased # Maps the code of lowercased character to codes of different lowercased
# characters which have the same uppercase. # characters which have the same uppercase.

View File

@ -1,6 +1,8 @@
#! /usr/bin/env python3 #! /usr/bin/env python3
# This script generates Modules/_sre/sre_constants.h from Lib/re/_constants.py. # This script generates Modules/_sre/sre_constants.h from Lib/re/_constants.py.
SCRIPT_NAME = 'Tools/build/generate_sre_constants.py'
def update_file(file, content): def update_file(file, content):
try: try:
@ -13,13 +15,13 @@ def update_file(file, content):
fobj.write(content) fobj.write(content)
return True return True
sre_constants_header = """\ sre_constants_header = f"""\
/* /*
* Secret Labs' Regular Expression Engine * Secret Labs' Regular Expression Engine
* *
* regular expression matching engine * regular expression matching engine
* *
* Auto-generated by Tools/scripts/generate_sre_constants.py from * Auto-generated by {SCRIPT_NAME} from
* Lib/re/_constants.py. * Lib/re/_constants.py.
* *
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.

View File

@ -10,6 +10,8 @@ import sysconfig
from check_extension_modules import ModuleChecker from check_extension_modules import ModuleChecker
SCRIPT_NAME = 'Tools/build/generate_stdlib_module_names.py'
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
STDLIB_PATH = os.path.join(SRC_DIR, 'Lib') STDLIB_PATH = os.path.join(SRC_DIR, 'Lib')
@ -112,7 +114,7 @@ def list_modules():
def write_modules(fp, names): def write_modules(fp, names):
print("// Auto-generated by Tools/scripts/generate_stdlib_module_names.py.", print(f"// Auto-generated by {SCRIPT_NAME}.",
file=fp) file=fp)
print("// List used to create sys.stdlib_module_names.", file=fp) print("// List used to create sys.stdlib_module_names.", file=fp)
print(file=fp) print(file=fp)

View File

@ -7,6 +7,8 @@
# Lib/token.py # Lib/token.py
SCRIPT_NAME = 'Tools/build/generate_token.py'
AUTO_GENERATED_BY_SCRIPT = f'Auto-generated by {SCRIPT_NAME}'
NT_OFFSET = 256 NT_OFFSET = 256
def load_tokens(path): def load_tokens(path):
@ -47,8 +49,10 @@ def update_file(file, content):
return True return True
token_h_template = """\ token_h_template = f"""\
/* Auto-generated by Tools/scripts/generate_token.py */ /* {AUTO_GENERATED_BY_SCRIPT} */
"""
token_h_template += """\
/* Token types */ /* Token types */
#ifndef Py_INTERNAL_TOKEN_H #ifndef Py_INTERNAL_TOKEN_H
@ -105,8 +109,10 @@ def make_h(infile, outfile='Include/internal/pycore_token.h'):
print("%s regenerated from %s" % (outfile, infile)) print("%s regenerated from %s" % (outfile, infile))
token_c_template = """\ token_c_template = f"""\
/* Auto-generated by Tools/scripts/generate_token.py */ /* {AUTO_GENERATED_BY_SCRIPT} */
"""
token_c_template += """\
#include "Python.h" #include "Python.h"
#include "pycore_token.h" #include "pycore_token.h"
@ -189,8 +195,8 @@ def make_c(infile, outfile='Parser/token.c'):
print("%s regenerated from %s" % (outfile, infile)) print("%s regenerated from %s" % (outfile, infile))
token_inc_template = """\ token_inc_template = f"""\
.. Auto-generated by Tools/scripts/generate_token.py .. {AUTO_GENERATED_BY_SCRIPT}
%s %s
.. data:: N_TOKENS .. data:: N_TOKENS
@ -213,10 +219,11 @@ def make_rst(infile, outfile='Doc/library/token-list.inc'):
print("%s regenerated from %s" % (outfile, infile)) print("%s regenerated from %s" % (outfile, infile))
token_py_template = '''\ token_py_template = f'''\
"""Token constants.""" """Token constants."""
# Auto-generated by Tools/scripts/generate_token.py # {AUTO_GENERATED_BY_SCRIPT}
'''
token_py_template += '''
__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF'] __all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF']
%s %s

View File

@ -18,6 +18,7 @@ import json
from urllib.request import urlopen from urllib.request import urlopen
from html.entities import html5 from html.entities import html5
SCRIPT_NAME = 'Tools/build/parse_html5_entities.py'
PAGE_URL = 'https://html.spec.whatwg.org/multipage/named-characters.html' PAGE_URL = 'https://html.spec.whatwg.org/multipage/named-characters.html'
ENTITIES_URL = 'https://html.spec.whatwg.org/entities.json' ENTITIES_URL = 'https://html.spec.whatwg.org/entities.json'
HTML5_SECTION_START = '# HTML5 named character references' HTML5_SECTION_START = '# HTML5 named character references'
@ -69,7 +70,7 @@ def write_items(entities, file=sys.stdout):
keys = sorted(entities.keys()) keys = sorted(entities.keys())
keys = sorted(keys, key=str.lower) keys = sorted(keys, key=str.lower)
print(HTML5_SECTION_START, file=file) print(HTML5_SECTION_START, file=file)
print(f'# Generated by {sys.argv[0]!r}\n' print(f'# Generated by {SCRIPT_NAME}\n'
f'# from {ENTITIES_URL} and\n' f'# from {ENTITIES_URL} and\n'
f'# {PAGE_URL}.\n' f'# {PAGE_URL}.\n'
f'# Map HTML5 named character references to the ' f'# Map HTML5 named character references to the '

View File

@ -24,6 +24,7 @@ import io
import re import re
import csv import csv
SCRIPT_NAME = 'Tools/build/stable_abi.py'
MISSING = object() MISSING = object()
EXCLUDED_HEADERS = { EXCLUDED_HEADERS = {
@ -182,11 +183,12 @@ def generator(var_name, default_path):
def gen_python3dll(manifest, args, outfile): def gen_python3dll(manifest, args, outfile):
"""Generate/check the source for the Windows stable ABI library""" """Generate/check the source for the Windows stable ABI library"""
write = partial(print, file=outfile) write = partial(print, file=outfile)
write(textwrap.dedent(r""" content = f"""
/* Re-export stable Python ABI */ /* Re-export stable Python ABI */
/* Generated by Tools/scripts/stable_abi.py */ /* Generated by {SCRIPT_NAME} */
"""
content += r"""
#ifdef _M_IX86 #ifdef _M_IX86
#define DECORATE "_" #define DECORATE "_"
#else #else
@ -197,7 +199,8 @@ def gen_python3dll(manifest, args, outfile):
__pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name)) __pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name))
#define EXPORT_DATA(name) \ #define EXPORT_DATA(name) \
__pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name ",DATA")) __pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name ",DATA"))
""")) """
write(textwrap.dedent(content))
def sort_key(item): def sort_key(item):
return item.name.lower() return item.name.lower()