/Lib/html/ @ezio-melotti
/Lib/_markupbase.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).
# Ignoring importlib.h so as to not get flagged on
paths:
- 'Lib/ensurepip/_bundled/**'
- '.github/workflows/verify-ensurepip-wheels.yml'
- - 'Tools/scripts/verify_ensurepip_wheels.py'
+ - 'Tools/build/verify_ensurepip_wheels.py'
pull_request:
paths:
- 'Lib/ensurepip/_bundled/**'
- '.github/workflows/verify-ensurepip-wheels.yml'
- - 'Tools/scripts/verify_ensurepip_wheels.py'
+ - 'Tools/build/verify_ensurepip_wheels.py'
permissions:
contents: read
with:
python-version: '3'
- 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
Tools/freeze/test/outdir
# 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
# The manifest can be generated at any time with "make regen-frozen".
Python/frozen_modules/MANIFEST
-.. Auto-generated by Tools/scripts/generate_token.py
+.. Auto-generated by Tools/build/generate_token.py
.. data:: ENDMARKER
.. data:: NAME
# error "this header requires Py_BUILD_CORE define"
#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,
// to help avoid collisions with keywords, etc.
// 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 {
STRUCT_FOR_STR(anon_dictcomp, "<dictcomp>")
-// 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
#define Py_INTERNAL_OPCODE_H
# error "this header requires Py_BUILD_CORE define"
#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 { \
.singletons = { \
.small_ints = { \
-/* Auto-generated by Tools/scripts/generate_token.py */
+/* Auto-generated by Tools/build/generate_token.py */
/* Token types */
#ifndef Py_INTERNAL_TOKEN_H
-// 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
#define Py_OPCODE_H
# 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
# https://html.spec.whatwg.org/multipage/named-characters.html.
# Map HTML5 named character references to the equivalent Unicode character(s).
"""Token constants."""
-# Auto-generated by Tools/scripts/generate_token.py
+# Auto-generated by Tools/build/generate_token.py
__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF']
HOSTRUNNER= @HOSTRUNNER@
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@
# Single-platform builds depend on $(BUILDPYTHON). Cross builds use an
# external "build Python" and have an empty PYTHON_FOR_BUILD_DEPS.
.PHONY=clinic
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/scripts/generate_global_objects.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py
# Build the interpreter
$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS)
# dependency on BUILDPYTHON ensures that the target is run last
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)
@if [ ! -z $(DSYMUTIL) ] ; then \
.PHONY: regen-test-levenshtein
regen-test-levenshtein:
# 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
regen-re: $(BUILDPYTHON)
# Regenerate Lib/re/_casefix.py
- # using Tools/scripts/generate_re_casefix.py
- $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py
+ # using Tools/build/generate_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)
$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS)
# 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 = \
Lib/importlib/_bootstrap.py \
Lib/importlib/_bootstrap_external.py \
# END: freezing modules
-Tools/scripts/freeze_modules.py: $(FREEZE_MODULE)
+Tools/build/freeze_modules.py: $(FREEZE_MODULE)
.PHONY: regen-frozen
-regen-frozen: Tools/scripts/freeze_modules.py $(FROZEN_FILES_IN)
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/freeze_modules.py
+regen-frozen: Tools/build/freeze_modules.py $(FROZEN_FILES_IN)
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/freeze_modules.py
@echo "The Makefile was updated, you may need to re-run make."
############################################################################
.PHONY: regen-deepfreeze
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
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_external.h:importlib._bootstrap_external \
Python/frozen_modules/zipimport.h:zipimport \
# Global objects
.PHONY: regen-global-objects
-regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py
+regen-global-objects: $(srcdir)/Tools/build/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 " so be sure to re-run regen-global-objects after those tools."
abidiff $(srcdir)/Doc/data/python$(LDVERSION).abi "libpython$(LDVERSION).so" --drop-private-types --no-architecture --no-added-syms
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
.PHONY: regen-opcode
regen-opcode:
# Regenerate Include/opcode.h from Lib/opcode.py
- # using Tools/scripts/generate_opcode_h.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_opcode_h.py \
+ # using Tools/build/generate_opcode_h.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_opcode_h.py \
$(srcdir)/Lib/opcode.py \
$(srcdir)/Include/opcode.h.new \
$(srcdir)/Include/internal/pycore_opcode.h.new
.PHONY: regen-token
regen-token:
# Regenerate Doc/library/token-list.inc from Grammar/Tokens
- # using Tools/scripts/generate_token.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py rst \
+ # using Tools/build/generate_token.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py rst \
$(srcdir)/Grammar/Tokens \
$(srcdir)/Doc/library/token-list.inc
# Regenerate Include/internal/pycore_token.h from Grammar/Tokens
- # using Tools/scripts/generate_token.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py h \
+ # using Tools/build/generate_token.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py h \
$(srcdir)/Grammar/Tokens \
$(srcdir)/Include/internal/pycore_token.h
# Regenerate Parser/token.c from Grammar/Tokens
- # using Tools/scripts/generate_token.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py c \
+ # using Tools/build/generate_token.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py c \
$(srcdir)/Grammar/Tokens \
$(srcdir)/Parser/token.c
# Regenerate Lib/token.py from Grammar/Tokens
- # using Tools/scripts/generate_token.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_token.py py \
+ # using Tools/build/generate_token.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_token.py py \
$(srcdir)/Grammar/Tokens \
$(srcdir)/Lib/token.py
.PHONY: regen-stdlib-module-names
regen-stdlib-module-names: all Programs/_testembed
# Regenerate Python/stdlib_module_names.h
- # using Tools/scripts/generate_stdlib_module_names.py
+ # using Tools/build/generate_stdlib_module_names.py
$(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
$(UPDATE_FILE) $(srcdir)/Python/stdlib_module_names.h $(srcdir)/Python/stdlib_module_names.h.new
regen-sre:
# Regenerate Modules/_sre/sre_constants.h and Modules/_sre/sre_targets.h
- # from Lib/re/_constants.py using Tools/scripts/generate_sre_constants.py
- $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_sre_constants.py \
+ # from Lib/re/_constants.py using Tools/build/generate_sre_constants.py
+ $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_sre_constants.py \
$(srcdir)/Lib/re/_constants.py \
$(srcdir)/Modules/_sre/sre_constants.h \
$(srcdir)/Modules/_sre/sre_targets.h
# Check that all symbols exported by libpython start with "Py" or "_Py"
smelly: all
- $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/smelly.py
+ $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/smelly.py
# Find files with funny names
funny:
$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/patchcheck/patchcheck.py
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
update-config:
# Please append new items at the end.
# 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.
# For the history of the stable ABI prior to this file,
*
* 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.
*
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.
*
* 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.
*
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.
/* Re-export stable Python ABI */
-/* Generated by Tools/scripts/stable_abi.py */
+/* Generated by Tools/build/stable_abi.py */
#ifdef _M_IX86
#define DECORATE "_"
DependsOnTargets="FindPythonForBuild"
Condition="$(Configuration) != 'PGUpdate'">
<!-- 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_external.h:importlib._bootstrap_external" ^
"$(PySourcePath)Python\frozen_modules\zipimport.h:zipimport" ^
<_ASTOutputs Include="$(PySourcePath)Python\Python-ast.c">
<Argument>-C</Argument>
</_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" />
<_TokenSources Include="$(PySourcePath)Grammar\Tokens" />
<_TokenOutputs Include="$(PySourcePath)Doc\library\token-list.inc">
Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)"
DependsOnTargets="FindPythonForBuild">
<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)" />
<Exec Command="$(PythonForBuild) Python\makeopcodetargets.py Python\opcode_targets.h"
WorkingDirectory="$(PySourcePath)" />
Inputs="@(_TokenSources)" Outputs="@(_TokenOutputs)"
DependsOnTargets="FindPythonForBuild">
<Message Text="Regenerate @(_TokenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
- <Exec Command="$(PythonForBuild) Tools\scripts\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens "%(_TokenOutputs.Identity)""
+ <Exec Command="$(PythonForBuild) Tools\build\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens "%(_TokenOutputs.Identity)""
WorkingDirectory="$(PySourcePath)" />
<Touch Files="@(_TokenOutputs)" />
</Target>
<Target Name="_RegenGlobalObjects"
DependsOnTargets="FindPythonForBuild">
<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)" />
</Target>
-/* Auto-generated by Tools/scripts/generate_token.py */
+/* Auto-generated by Tools/build/generate_token.py */
#include "Python.h"
#include "pycore_token.h"
/* Frozen modules bootstrap
*
* 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.
*/
modules into frozen modules (like Lib/importlib/_bootstrap.py
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.
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.
* These files must be regenerated any time the corresponding .pyc
* file would change (including with changes to the compiler, bytecode
* 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
* frozen. Update the list at the top of the script to add, remove,
Note that, other than the required frozen modules, 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.
-// 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.
static const char* _Py_stdlib_module_names[] = {
frozenfiles = []
rules = ['']
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):
frozen_header = relpath_for_posix_display(src.frozenfile, ROOT_DIR)
frozenfiles.append(f'\t\t{frozen_header} \\')
projlines = []
filterlines = []
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):
pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR)
header = relpath_for_windows_display(src.frozenfile, ROOT_DIR)
import os.path
import re
+SCRIPT_NAME = 'Tools/build/generate_global_objects.py'
__file__ = os.path.abspath(__file__)
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
INTERNAL = os.path.join(ROOT, 'Include', 'internal')
#######################################
# 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 */'
import sys
import tokenize
-SCRIPT_NAME = "Tools/scripts/generate_opcode_h.py"
+SCRIPT_NAME = "Tools/build/generate_opcode_h.py"
PYTHON_OPCODE = "Lib/opcode.py"
header = f"""
import sys
import unicodedata
+SCRIPT_NAME = 'Tools/build/generate_re_casefix.py'
+
def update_file(file, content):
try:
with open(file, 'r', encoding='utf-8') as fobj:
fobj.write(content)
return True
-re_casefix_template = """\
-# Auto-generated by Tools/scripts/generate_re_casefix.py.
+re_casefix_template = f"""\
+# Auto-generated by {SCRIPT_NAME}.
# Maps the code of lowercased character to codes of different lowercased
# characters which have the same uppercase.
#! /usr/bin/env python3
# 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):
try:
fobj.write(content)
return True
-sre_constants_header = """\
+sre_constants_header = f"""\
/*
* Secret Labs' Regular Expression 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.
*
* Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved.
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__)))
STDLIB_PATH = os.path.join(SRC_DIR, 'Lib')
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)
print("// List used to create sys.stdlib_module_names.", file=fp)
print(file=fp)
# Lib/token.py
+SCRIPT_NAME = 'Tools/build/generate_token.py'
+AUTO_GENERATED_BY_SCRIPT = f'Auto-generated by {SCRIPT_NAME}'
NT_OFFSET = 256
def load_tokens(path):
return True
-token_h_template = """\
-/* Auto-generated by Tools/scripts/generate_token.py */
+token_h_template = f"""\
+/* {AUTO_GENERATED_BY_SCRIPT} */
+"""
+token_h_template += """\
/* Token types */
#ifndef Py_INTERNAL_TOKEN_H
print("%s regenerated from %s" % (outfile, infile))
-token_c_template = """\
-/* Auto-generated by Tools/scripts/generate_token.py */
+token_c_template = f"""\
+/* {AUTO_GENERATED_BY_SCRIPT} */
+"""
+token_c_template += """\
#include "Python.h"
#include "pycore_token.h"
print("%s regenerated from %s" % (outfile, infile))
-token_inc_template = """\
-.. Auto-generated by Tools/scripts/generate_token.py
+token_inc_template = f"""\
+.. {AUTO_GENERATED_BY_SCRIPT}
%s
.. data:: N_TOKENS
print("%s regenerated from %s" % (outfile, infile))
-token_py_template = '''\
+token_py_template = f'''\
"""Token constants."""
-# Auto-generated by Tools/scripts/generate_token.py
-
+# {AUTO_GENERATED_BY_SCRIPT}
+'''
+token_py_template += '''
__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF']
%s
from urllib.request import urlopen
from html.entities import html5
+SCRIPT_NAME = 'Tools/build/parse_html5_entities.py'
PAGE_URL = 'https://html.spec.whatwg.org/multipage/named-characters.html'
ENTITIES_URL = 'https://html.spec.whatwg.org/entities.json'
HTML5_SECTION_START = '# HTML5 named character references'
keys = sorted(entities.keys())
keys = sorted(keys, key=str.lower)
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'# {PAGE_URL}.\n'
f'# Map HTML5 named character references to the '
import re
import csv
+SCRIPT_NAME = 'Tools/build/stable_abi.py'
MISSING = object()
EXCLUDED_HEADERS = {
def gen_python3dll(manifest, args, outfile):
"""Generate/check the source for the Windows stable ABI library"""
write = partial(print, file=outfile)
- write(textwrap.dedent(r"""
+ content = f"""
/* Re-export stable Python ABI */
- /* Generated by Tools/scripts/stable_abi.py */
-
+ /* Generated by {SCRIPT_NAME} */
+ """
+ content += r"""
#ifdef _M_IX86
#define DECORATE "_"
#else
__pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name))
#define EXPORT_DATA(name) \
__pragma(comment(linker, "/EXPORT:" DECORATE #name "=" PYTHON_DLL_NAME "." #name ",DATA"))
- """))
+ """
+ write(textwrap.dedent(content))
def sort_key(item):
return item.name.lower()