Generate lib/buildcustomize.pl at the same time as the miniperl executable.

Doing them together ensures that we always have lib/buildcustomize.pl
available. This simplifies things. The seemingly cranky ordering of having
miniperl notionally depend on lib/buildcustomize.pl, and the rule for
lib/buildcustomize.pl actually also building miniperl permits the rest of
the Makefile to depend on (the obvious) miniperl, not the obscure
lib/buildcustomize.pl
Remove the Icwd Makefile macros as lib/buildcustomize.pl now sets this up.

Now that lib/buildcustomize.pl is built at the same time as building
miniperl, it will always have added paths to Cwd into @INC. Hence there's no
longer a need for Makefile macros to do this.

On Win32 we can't eliminate $(ICWD) completely as it's also being used for some
invocations of the (real) perl binary. Only miniperl loads buildcustomize.pl
to set up @INC to include paths for the initial locations of modules such
as Cwd.
write_buildcustomize.pl no longer writes to STDOUT

write_buildcustomize.pl now opens lib/buildcustomize.pl itself, instead of
writing to STDOUT and relying on the Makefile to set up redirection. This
means that an empty lib/buildcustomize.pl is not created if
write_buildcustomize.pl fails to compile (for whatever reason), and permits
write_buildcustomize.pl to delete (or attempt to delete) the output file if
it detects an error.

Hard code the output file name (lib/buildcustomize.pl), as it's the same on
all platforms, and @ARGV is already used to optionally pass a directory for
write_buildcustomize.pl to change to before running.

Experimentation suggests that various make utilities don't delete a file
created by redirection even if an error occurs. Hence this should be more
robust.

Add -f to the miniperl commandline when running write_buildcustomize.pl to
avoid reading in any existing lib/buildcustomize.pl. write_buildcustomize.pl
doesn't need the setup provided by lib/buildcustomize.pl, and running it
might cause errors which prevents writing out a correct version, making an
incomplete build harder to recover from.
write_buildcustomize.pl now test loads the generated lib/buildcustomize.pl

And deletes it if it encounters an error whilst loading it. A non-functional
lib/buildcustomize.pl will cause the build to fail with seemingly unrelated
errors. Deleting it and exiting with an error should make the cause of build
failures obvious.
In miniperl, if lib/buildcustomize.pl fails to load, exit with an error.

Unlike sitecustomize.pl, if lib/buildcustomize.pl exists, it should not fail.
If it does, it should be reported immediately as a build failure.

This makes the build process more robust.
Merge the re-ordering of when in the build write_buildcustomize.pl is run.

write_buildcustomize.pl is now run as part of the rule that builds miniperl.
Hence if you've built miniperl, you've now always got lib/buildcustomize.pl
too, which simplifies Makefile dependency rules.

write_buildcustomize.pl is now more robust against errors, and miniperl will
abort if a corrupt lib/buildcustomize.pl is found.

None of these changes should have any visible effect outside of the build.
Don't ignore signals on pclose

This is a bug, per POSIX
Possessive and non greedy quantifier modifiers are mutually exclusive

When I added support for possessive modifiers it was possible to
build perl so that they could be combined even if it made no sense
to do so.

Later on in relation to Perl #118375 I got confused and thought
they were undocumented but legal.

So to prevent further confusion, and since nobody has every mentioned
it since they were added, I am removing the unusued conditional
build logic, and clearly documenting why they aren't allowed.
Eliminate macro for OpenVMS debugger [perl #118447].

We need to do whatever the configuration says we are doing via
$Config{dbgprefix} and/or $Config{usevmsdebug} for extension
building to work, so it makes sense for the top-level build to
also base what it is doing on the configuration choice rather
than on the special invocation of MMK with /MACRO=__DEBUG__=1.

So this patch makes the top-level build do what we've configured
to do and eliminates the instruction to use the macro.
fix category on "Statement unlikely to be reached"

The warning is documented as an "exec" category warning, but the
implementation mixes checking for exec and syntax.  This makes
only the exec category apply.
perldelta for the exec warning category change
note warning categories in perlexperiment
Fix inclusion of Compress/Raw/Bzip2 and Encode in MinGW ALL_STATIC build

The build was previously failing with various undefined references because
there were some clashes in the names of the object files extracted into
STATICDIR (e.g. Compress/Raw/Bzip2 and Compress/Raw/Zlib both have object
files called compress.o).

The fix is to individually extract each static extension library and
archive its object files into the static perl library, rather than doing
them all together, and also to use ar's "quick append" mode rather than
"replace" mode otherwise we still won't get multiple object files with the
same names included in the static perl library as required.
remove reference to experimental code never in core

...at least not anywhere I can find it
prevent a couple of porting test issues under PERL_UNICODE

cmpVERSION.pl: get_file_from_git() was returning a character string
which was then passed to MM->parse_version(), implicitly using
PerlIO::scalar to parse the content.

test_bootstrap.t complains since some of the test files aren't valid
UTF-8.
tboffset hasn't been used since 7196fc2f
the code that used hstat, istat, qstat was removed in 6fd8c33a
reorder experiments by version (mostly)
perlexperiment: long doubles are not experimental
perlexperiment: ithreads seemed accepted in 5.8.0