The main makefile can call mkbuiltins from multiple different codepaths in parallel.
When called, it moves the existing files out the way and creates new ones, then
compares which will break the build if timing is unlucky.

The root of the problem is mkbuiltins.c creating a file but also referencing that
file under the same name. By modifing it to allow the final name and the temp name
to be specified, we can avoid the original reason for the moving of files around.
This allows them to be created under a new name and then replaced if changed,
removing any race windows around accessing the files whilst they've been
moved or are being rewritten.

See [YOCTO #14227]

Upstream-Status: Submitted [https://savannah.gnu.org/patch/index.php?10210]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

Index: bash-5.1.8/builtins/Makefile.in
===================================================================
--- bash-5.1.8.orig/builtins/Makefile.in
+++ bash-5.1.8/builtins/Makefile.in
@@ -185,19 +185,17 @@ gen-helpfiles:	tmpbuiltins.o gen-helpfil
 	$(CC_FOR_BUILD) ${CCFLAGS_FOR_BUILD} $(LDFLAGS_FOR_BUILD) -o $@ gen-helpfiles.o tmpbuiltins.o $(LIBS_FOR_BUILD)
 
 builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC)
-	@-if test -f builtins.c; then mv -f builtins.c old-builtins.c; fi
-	@-if test -f builtext.h; then mv -f builtext.h old-builtext.h; fi
-	./$(MKBUILTINS) -externfile builtext.h -structfile builtins.c \
+	./$(MKBUILTINS) -externfile builtext-new.h -externfinalfile builtext.h -structfile builtins-new.c \
 	    -noproduction $(DIRECTDEFINE) $(HELPDIRDEFINE) $(HELPSTRINGS) $(DEFSRC)
-	@-if cmp -s old-builtext.h builtext.h 2>/dev/null; then \
-		mv old-builtext.h builtext.h; \
+	@-if ! cmp -s builtext.h builtext-new.h 2>/dev/null; then \
+		mv builtext-new.h builtext.h; \
 	 else \
-		$(RM) old-builtext.h; \
+		$(RM) builtext-new.h; \
 	 fi
-	@-if cmp -s old-builtins.c builtins.c 2>/dev/null; then \
-		mv old-builtins.c builtins.c; \
+	@-if ! cmp -s builtins.c builtins-new.c 2>/dev/null; then \
+		mv builtins-new.c builtins.c; \
 	 else \
-		$(RM) old-builtins.c; \
+		$(RM) builtins-new.c; \
 	 fi
 
 helpdoc:	gen-helpfiles
Index: bash-5.1.8/builtins/mkbuiltins.c
===================================================================
--- bash-5.1.8.orig/builtins/mkbuiltins.c
+++ bash-5.1.8/builtins/mkbuiltins.c
@@ -113,6 +113,9 @@ char *struct_filename = (char *)NULL;
 /* The name of the external declaration file. */
 char *extern_filename = (char *)NULL;
 
+/* The final name of the external declaration file. */
+char *extern_final_filename = (char *)NULL;
+
 /* Here is a structure for manipulating arrays of data. */
 typedef struct {
   int size;		/* Number of slots allocated to array. */
@@ -230,6 +233,8 @@ main (argc, argv)
 
       if (strcmp (arg, "-externfile") == 0)
 	extern_filename = argv[arg_index++];
+      else if (strcmp (arg, "-externfinalfile") == 0)
+	extern_final_filename = argv[arg_index++];
       else if (strcmp (arg, "-structfile") == 0)
 	struct_filename = argv[arg_index++];
       else if (strcmp (arg, "-noproduction") == 0)
@@ -273,6 +278,9 @@ main (argc, argv)
 	}
     }
 
+  if (!extern_final_filename)
+    extern_final_filename = extern_filename;
+
   /* If there are no files to process, just quit now. */
   if (arg_index == argc)
     exit (0);
@@ -1174,7 +1182,7 @@ write_file_headers (structfile, externfi
 	fprintf (structfile, "%s\n", structfile_header[i]);
 
       fprintf (structfile, "#include \"%s\"\n",
-	       extern_filename ? extern_filename : "builtext.h");
+	       extern_final_filename ? extern_final_filename : "builtext.h");
 
       fprintf (structfile, "#include \"bashintl.h\"\n");
 
@@ -1184,7 +1192,7 @@ write_file_headers (structfile, externfi
   if (externfile)
     fprintf (externfile,
 	     "/* %s - The list of builtins found in libbuiltins.a. */\n",
-	     extern_filename ? extern_filename : "builtext.h");
+	     extern_final_filename ? extern_final_filename : "builtext.h");
 }
 
 /* Write out any necessary closing information for
