]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45866: pegen strips directory of "generated from" header (GH-29777) (GH-29792)
authorVictor Stinner <vstinner@python.org>
Fri, 26 Nov 2021 15:38:50 +0000 (16:38 +0100)
committerGitHub <noreply@github.com>
Fri, 26 Nov 2021 15:38:50 +0000 (16:38 +0100)
"make regen-all" now produces the same output when run from a
directory other than the source tree: when building Python out of the
source tree.

(cherry picked from commit 253b7a0a9fef1d72a4cb87b837885576e68e917c)

Misc/NEWS.d/next/Build/2021-11-25-13-53-36.bpo-45866.ZH1W8N.rst [new file with mode: 0644]
Parser/parser.c
Tools/peg_generator/pegen/c_generator.py
Tools/peg_generator/pegen/grammar_parser.py
Tools/peg_generator/pegen/python_generator.py

diff --git a/Misc/NEWS.d/next/Build/2021-11-25-13-53-36.bpo-45866.ZH1W8N.rst b/Misc/NEWS.d/next/Build/2021-11-25-13-53-36.bpo-45866.ZH1W8N.rst
new file mode 100644 (file)
index 0000000..efa046d
--- /dev/null
@@ -0,0 +1,4 @@
+``make regen-all`` now produces the same output when run from a directory
+other than the source tree: when building Python out of the source tree.
+pegen now strips directory of the "generated by pygen from <FILENAME" header
+Patch by Victor Stinner.
index 0b6450c670bac867dc1ebdc505396d1abebe9ba9..67515ecc6f1453dd3a5c3f75ff45d0bf510b9ef4 100644 (file)
@@ -1,4 +1,4 @@
-// @generated by pegen.py from ./Grammar/python.gram
+// @generated by pegen.py from python.gram
 #include "pegen.h"
 
 #if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
index 3079edf54b46ae2cf8cc25885f8a957cfaa1475c..3c3baef7286c752b6905f7bf99f2325587db48ce 100644 (file)
@@ -1,5 +1,6 @@
 import ast
 from dataclasses import field, dataclass
+import os.path
 import re
 from typing import Any, Dict, IO, Optional, List, Text, Tuple, Set
 from enum import Enum
@@ -405,7 +406,8 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
 
     def generate(self, filename: str) -> None:
         self.collect_todo()
-        self.print(f"// @generated by pegen.py from {filename}")
+        basename = os.path.basename(filename)
+        self.print(f"// @generated by pegen.py from {basename}")
         header = self.grammar.metas.get("header", EXTENSION_PREFIX)
         if header:
             self.print(header.rstrip("\n"))
index 70fa5b001b5c1cf1abe98adbf3b261a1719331d6..892df5cf8ccca153871c694819f21890b01f76d4 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3.8
-# @generated by pegen from ./Tools/peg_generator/pegen/metagrammar.gram
+# @generated by pegen from metagrammar.gram
 
 import ast
 from typing import Optional, Any
index b500e3e204a5d4f35b567752ae0774f7fb1e270f..4b270aa1e97416a9553c871b76f562e15683c036 100644 (file)
@@ -1,3 +1,4 @@
+import os.path
 import token
 from typing import Any, Dict, Optional, IO, Text, Tuple
 
@@ -139,7 +140,8 @@ class PythonParserGenerator(ParserGenerator, GrammarVisitor):
     def generate(self, filename: str) -> None:
         header = self.grammar.metas.get("header", MODULE_PREFIX)
         if header is not None:
-            self.print(header.rstrip("\n").format(filename=filename))
+            basename = os.path.basename(filename)
+            self.print(header.rstrip("\n").format(filename=basename))
         subheader = self.grammar.metas.get("subheader", "")
         if subheader:
             self.print(subheader.format(filename=filename))