| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds a new experimental warning, feature, keywords and enough parsing to
implement basic classes with an empty `new` constructor method.
Inject a $self lexical into method bodies; populate it with the object instance, suitably shifted
Creates a new OP_METHSTART opcode to perform method setup
Define an aux flag to remark which stashes are classes
Basic implementation of fields.
Basic anonymous methods.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The .. in front of the ext/ required as the list is constructed
relative to the t/ directory of the repo.
This also enables "full steam ahead" mode when parallel jobs are
enabled. This target only tests a subset of our functionality, running
in normal mode and separating core tests from ext/ tests just slows
things down for no value.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This splits a bunch of the subcomponents of the regex engine into
smaller files.
regcomp_debug.c
regcomp_internal.h
regcomp_invlist.c
regcomp_study.c
regcomp_trie.c
The only real change besides to the build machine to achieve the split
is to also adds some new defines which can be used in embed.fnc to control
exports without having to enumerate /every/ regex engine file. For
instance all of regcomp*.c defines PERL_IN_REGCOMP_ANY, and this is used
in embed.fnc to manage exports.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since GNU make 3.4, the build process has been emitting about 24 of
these warnings:
Makefile:254: warning: ignoring prerequisites on suffix rule definition
Makefile:258: warning: ignoring prerequisites on suffix rule definition
This is because Makefile has a couple of entries like these:
.c.i: perl.h config.h
...
.c.s: perl.h config.h
...
These are suffix rules, which generically tell 'make' how to make a foo.i
or foo.s file from a foo.c file.
The warnings are telling us that prerequisites (perl.h config.h in this
case) are not appropriate for suffix rules and are being ignored
(they've always been ignored, just silently prior to 3.4).
Those suffix rules were added by me with commit v5.19.7-38-gba0f550339,
but the prerequisites were later added by Jarkko with
v5.21.3-467-g29b9baacc9:
The .i target should depend at least on perl.h and config.h.
While at it, do the same for the .s target.
I can't see any discussion of this commit, so I'm not sure what issue it
was trying to fix. But since the prerequisites were being silently
ignored (on GNU make anyway), it seems safe to remove them, which is
what this commit does. With the prerequisites gone, doing
$ touch config.sh
$ make peep.i
causes 'make' to process a whole big chain of dependencies, so it would
appear that the correct dependency chain is being detected regardless.
For reference, here's the entry from the GNU 'make' manual:
warning: ignoring prerequisites on suffix rule definition
According to POSIX, a suffix rule cannot contain prerequisites. If a
rule that could be a suffix rule has prerequisites it is interpreted
as a simple explicit rule, with an odd target name. This requirement
is obeyed when POSIX-conforming mode is enabled (the .POSIX target
is defined). In versions of GNU make prior to 4.3, no warning was
emitted and a suffix rule was created, however all prerequisites
were ignored and were not part of the suffix rule. Starting with GNU
make 4.3 the behavior is the same, and in addition this warning is
generated. In a future version the POSIX-conforming behavior will be
the only behavior: no rule with a prerequisite can be suffix rule
and this warning will be removed.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Create a new `peep.c` file
* Move the functions related to optree optimisation and finalisation
out of `op.c` into this new file
* Several previously-static functions now have to be non-static and
declared as internal API in order to be shared between these two
files.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
minitest depends on $(MINIPERL_EXE) and minitest_prep, but
minitest_prep calls back into make to build lib/Config.pm which
indirectly depends on $(MINIPERL_EXE).
This can result in a race between the parallel work of the parent
make and the work of the child make, as they both try to build
$(MINIPERL_EXE) and its dependencies, causing some of the errors
described in the ticket.
Note that trying to `make -j6 minitest all` could lead to
similar conflicts, but I think that's an unlikely and not worth
supporting anyway.
Fixes #19829 (I think)
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently `make test_porting` rolls its own `runtests` logic, which is
just technical debt waiting to cause trouble. It also means that the
porting tests do not actually get run *exactly* as they would through
`make test_harness` which seems like a bad thing generally. (Even if so
far nobody has noticed a problem.)
Some of our tests require special setup which is performed in
`runtests`. We should not unroll `runtests` just for the test_porting
target, even if /right now/ it happens to work most of the time. I say
most of the time because `make test_porting` won't do the same thing as
`make test_harness` would via `runtests` if the test is not executed
under a tty. It also doesn't fixup PWD on platforms that need it. (Not
sure if that is a problem, but it might be.) In the future we might add
additional guards or setup to runtests and then the `test_porting`
target would have to change.
Lastly, there is no reason to unroll `runtests` like this. It is quite
easy to do it right, so lets just do it right and not set a precedent
that is ok to bypass `runtests` in our Makefile infrastructure.
|
|
|
|
|
|
| |
Switch to globs for the test_reonly target as wildcards are easier
to read and understand and familiar to a wider audience and don't
have escape issues associated with the -re option.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In short there is an insiduous relationship between buildcustomize.pl
and miniperl in our makefiles. This relationship means miniperl depends
on buildcustomize.pl even though buildcustomize.pl requires miniperl to
be built. There is a comment explaining this is intentional and
simplifies things (although it does not say what it simplifies).
What this means is that the lib/buildcustomize.pl target:
- creates miniperl
- uses miniperl to create 'lib/buildcustomize.pl'
Combined with the miniperl target not having any actions, just a
dependency declaration on lib/buildcustomize.pl seems to cause GNU make
(at least) to not restat the rebuilt miniperl.
This then means that various other targets which depend on miniperl do
not see the rebuilt miniperl and are not rebuilt themselves. Examples
include pod/perlintern.pod and autodoc.pl.
Thus to completely build everything you need to run make *twice*.
Normally the recipe is "make" and then "make test", which means make
gets run twice. But when developing or bisecting make is not normally
run twice, this can result in files not being rebuilt and which can lead
to errors being overlooked.
The solution appears to be to touch the miniperl executable as part of
the miniperl target, which then causes make to notice that the mtime of
the file has changed and rebuild the things that depend on it.
See
https://www.nntp.perl.org/group/perl.perl5.porters/2022/04/msg263517.html
for much more details.
Note this commit message was written by the committer (Yves) and not the
author of the patch and the post above (Bram). Any mistakes it contains
are not Bram's fault.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
This change fixes a bug where the value of _use64bitall_ was
expected to be nothing or something, but in fact, the proper
test is for ``define|true|[yY]*``.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This update enables us to build EBCDIC static/dynamic
and 31-bit/64-bit addressing mode Perl. The number of
tests that pass is consistent with the baseline before
these updates, namely:
For blead.31.dynamic.ebcdic
Configured using -Dusedl
Failed 98 tests out of 1939, 94.95% okay.
Elapsed: 1038 sec
u=18.13 s=6.04 cu=535.69 cs=178.56 scripts=1939 tests=1035071
For blead.64.dynamic.ebcdic
Configured using -Dusedl -Duse64bitall
Failed 102 tests out of 1941, 94.74% okay.
Elapsed: 1057 sec
u=19.49 s=6.49 cu=543.00 cs=181.00 scripts=1941 tests=1053149
These changes also provide the base support to be able to provide
ASCII static/dynamic and 31-bit/64-bit addressing mode Perl.
Description of changes:
Makefile.SH
Changes were made to the os390*) case specific part of the code.
Support was added for the 64-bit DLL path because the original
only had support for 31-bit.
hints/os390.sh
This is the largest set of changes:
- Compilation and Link options were added for ASCII and 64-bit
- A z/OS specific check was added to determine if the Perl
code being built is ASCII or EBCDIC. The check works by
looking at the first character of the shell script to see
if it is an ASCII or non-ASCII character. If ASCII, then
the build is deemed to be ASCII. If not ASCII, it is assumed
to be EBCDIC.
- Cleanup was performed to remove code for z/OS systems that are
no longer supported, simplifying the file (e.g.
"`uname -v`x`uname -r`" in 02x0[89].*|02x1[0-9].*|[0-9][3-9]x*)
which would only be true on unsupported, very old pre-z/OS systems
- The compiler has been changed from xlc to c99. Both are available
as priced features of the operating system, and the c99 compiler is
a better 'fit' for options processing, being more consistent with
c99 on other platforms.
- Suppressing warning messages for CCN3159 were added because the
1-bit bitfields flagged due to a smaller-than-int data type are
harmless.
- Several feature test macros were added to bring the compilation up
to a modern level to enable Perl to take advantage of capabilities
available on all supported z/OS 2.4 and up systems.
- Removed the -Wl,EDIT=NO because debug information is no longer stored
in an area that will be loaded into memory, but is now stored in a
NOLOAD section. So - while this does mean that the binary on disk is a
little 'fat', what is loaded into memory is not, and it means that
people can have better problem determination tools available even on
production Perl distributions.
|
|
|
|
|
|
|
|
| |
This finishes the perl-visible API required for RFC 0008
https://github.com/Perl/RFCs/blob/master/rfcs/rfc0008.md
It also begins the "builtin::" namespace of RFC 0009
https://github.com/Perl/RFCs/blob/master/rfcs/rfc0009.md
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bignum
======
0.63 2021-10-08
* This version instroduces no changes to the Perl modules, only the
tests.
* Remove tests that don't work on old Perls and that were actually
testing
Math::Big(Int|Float|Rat) more than big(int|num|rat).
* Skip tests that don't work on older versions of Perl.
* Remove Perl v5.10.0 as dependency. This distribution is compatible
with
Perls back to at least v5.6.1, although some functionality
(e.g., nesting the pragmas) requires more recent versions of Perl.
0.62 2021-10-03
* Add support for multiple options in import(), so that one can use,
e.g.,
use bignum accuracy => 20, lib => "GMP";
* Make sure the bigrat pragma always returns Math::BigRat objects.
* Make the "trace" option work as indended, or at least according to
what I
believe is the intention.
* Improve documentation. Fix typos, improve wording, add more examples
etc.
0.61 2021-10-01
* Improve documentation related to floating point literals.
* Skip tests that fail due to Perl's broken handling of floating point
literals before v5.32.0.
0.60 2021-09-28
* Separate the bigint, bignum, and bigrat pragmas.
- The bigint pragma now converts every numeric constant that
represents an
integer to a Math::BigInt object. Non-integers are converted to
Math::BigInt NaNs. With the previous behaviour, only some numeric
constant integers were converted to a Math::BigInt.
- The bignum pragma now converts every numeric constant to a
Math::BigFloat
object.
- The bigrat pragma now converts every numeric constant to a
Math::BigRat
pragma.
The pragmas no longer activate upgrading and downgrading. The
upgrading and
downgrading must now be activated explicitly. The rationale behind
deactivating it by default is that can cause infinite looping where
objects
bounce back and forth between different classes. Explicitly
requesting a
specific class doesn't always work either, because the object might
be
automatically upgraded or downgraded to a different class.
Only one pragma can be used at a time in a given scope. Enabling one
pragma
disables the others in the same scope.
* Implementat working version of "no bigint", "no bignum", and "no
bigrat".
Previously, the upgrading and downgrading activated by, e.g., "use
bigint"
was not deactivated by "no bigint".
* Sync behaviour with the Math-BigInt distribution.
Math::BigInt
============
1.999827 2021-10-03
* Improve error message for missing library argument.
* Skip tests that don't work on older Perls. Also skip tests that
compare
floating point numbers.
1.999826 2021-10-01
* Improve documentation related to floating point literals.
* Skip tests that fail due to Perl's broken handling of floating point
literals before v5.32.0.
1.999825 2021-09-28
* Make Math::BigInt accept integers regardless of whether they are
written as
decimal, binary, octal, or hexadecimal integers or decimal, binary,
octal,
or hexadecimal floating point number.
* When numeric constants are overloaded (with the ":constant" option)
in
Math::BigInt, every numeric constant that represent an integer is
converted
to an object regardless of how it is written. All finite non-integers
are
converted to a NaN.
* When numeric constants are overloaded (with the ":constant" option)
in
Math::BigFloat, every numeric constant is converted to an object
regardless
of how it is written.
* Add method from_dec() (cf. from_bin(), from_oct(), and from_hex()).
It is
like new() except that it does not accept anything but a string
representing a finite decimal number.
1.999824 2021-09-20
* Don't allow mixing math libraries. Use the first backend math library
that
is successfully loaded, and ignore any further attempts at loading a
different backend library. This is a solution to the re-occurring
problem
of using objects using different math libraries.
* Add missing documentation.
* Miscellaneous minor improvements.
Math::BigInt::FastCalc
======================
0.5012 2021-09-28
* Sync test files with Math-BigInt.
0.5011 2021-09-20
* Sync test files with Math-BigInt.
* Add missing documentation.
* Make the test files only print to the standard error when there is an
actual error.
* Miscellaneous changes and updates to author and release test files.
Math::BigRat
============
0.2620 2021-10-03
* Skip tests that don't work on older Perls. Also skip tests that
compare
floating point numbers.
0.2619 2021-10-01
* Correct the handling of Inf and NaN in numify().
* Improve constant overloading. When numeric constants are overloaded
(with the ":constant" option) in Math::BigRat, every numeric constant
is converted to an object regardless of how it is written.
0.2618 2021-09-28
* Add new method binv() for the inverse.
* Add new method dparts(), which returns the integer part and fraction
part
of a number. For example, 9/4 is split into 2 and 1/4. This method is
equivalent to the Math::BigInt and Math::BigFloat methods with the
same
name.
* Improve blog(). Handle cases $x->blog($b) where the numerator of $x
and/or $b is 1 as special.
* Sync tests with Math-BigInt.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use "$osname" instead of (bare) $osname in all case statements.
This was the only one that was different.
Delete PATH_SEP, which was never used.
This was added in Nov 1995 as part of commit 4633a7c4bad06b47:
5.002 beta 1
with various other macros, and the comment "These variables will be used in
a future version to make the make file more portable to non-unix systems."
The other macros have been used, but not PATH_SEP.
Curiously it also gets a different value if one (re)generates Makefile by
running ./Makefile.SH, compared with a Makefile generated by Configure,
because the variable that it is set from - $p_ - is not in config.sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The rule to generate cygwin.c with a symbolic link from cygwin/cygwin.c can
actually be written to the generated Makefile on all platforms, as it causes
no problems if not used. It only "triggers" when a cygwin.o is part of the
Makefile macro ARCHOBJS, at which point suffix rules permit make to infer
that cygwin.o can be generated from cygwin.c, and cygwin.c from
cygwin/cygwin.c
The rule to generate LIBPERL_NONSHR is not used. It seems that it was never
used. It was added in July 2008 as part of commit 5f9145a3c5d730d3:
Cygwin build harmonization, remove cygwin/Makefile.SHs
but the rule added to the top level Makefile.SH doesn't seem to correspond
to any rule in the removed file cygwin/Makefile.SHs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The config.sh value for ccdlflags includes the path to the *installed*
copy of the file perl.exp
While building, that file doesn't exist (or worse, is incompatible) so in
the Makefile we need CCDLFLAGS to point to the local copy. Previously the
Makefile had CCDLFLAGS first set to the value with the installed path, and
then set it again to the local path "for building Perl itself". However,
the Makefile is *only* used for building Perl itself (not installed
extensions), hence we never need the first value. Hence move the sed logic
for the change earlier, write out the first declaration of CCDLFLAGS with
the "local" value, and eliminate the second declaration.
The sed logic was added in July 1999 by commit 5f9d9a1727238445:
AIX magic: ccdlflags needs to be different for
Perl itself and for extra-core extensions
(as used by ExtUtilss::embed::ldopts).
Based on the problems described in
To: perl5-porters@perl.org
Subject: [ID 19990722.002] Perl 5.00503 and AIX 4.1.5; perl.exp; build errors. Also Imagemagick...
Reply-To: m.w.ellwood@rl.ac.uk
Message-Id: <Pine.A41.3.96.990722141209.72660V-100000@unixfe.rl.ac.uk>
It probably should have always been done the way this commit now does it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
AIX needs to generate a linker definition file prior to linking the perl
binary.
From the dawn of Perl 5, the miniperl binary was built nearly identically to
the perl binary, so for a build using a shared perl library, miniperl was
linked against the shared perl library.
Originally this linker definition file was generated by a shell script, but
this was problematic in various ways, so the AIX build was migrated to share
the Win32 approach - generating the linker definitions using makedef.pl.
Because this needs to be run during the build, and because the build can't
assume that an installed perl binary exists, it needs to be run by a perl
binary in the build tree. (As was) even miniperl needed this file to exist
already, hence when this change was made the Makefile generated for AIX was
changed to add steps to build an extra 'miniperl_nonshr' binary, not using a
shared library, to generate the linker definition file.
This was all done in July 1999 with commit 549a6b102c2ac8c4:
Fixed AIX dynamic loading and AIX shared Perl library.
Tested in: AIX 4.1.5 cc+useshrplib+usethreads, 4.1.5 cc,
4.1.5 gcc+useshrplib+usethreads, 4.3.1 cc+useshrplib.
Hijacked win32/makedef.pl for more general purpose export
list building, now it is used (as toplevel makedef.pl)
for win32 and AIX (perl_exp.SH made unnecessary).
Because the export lists are now correct in AIX, no more linker
warnings about "Exported symbol not defined" should appear.
However the need for the 'miniperl_nonshr' binary was actually eliminated in
Feb 2000 by commit 18c4b137c9980e71: fix AIX and multiplicity problems
by the seemingly innocent looking change:
case "${osname}${osvers}" in
- next4*)
+ next4*|aix*)
$spitshell >>Makefile <<'!NO!SUBS!'
miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
$(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
What this does is cause AIX to "join" the NeXTSTEP special case code, that
links miniperl with the object files. Meaning that from this point on AIX
miniperl was never using a shared perl library. So the special case build of
the 'miniperl_nonshr' binary could have been eliminated too.
Independent of this story, miniperl for every other platform *also* stopped
being linked against a shared perl library as of March 2006 with commit
908fcb8bef8cbab8:
Move DynaLoader.o into libperl.so.
This avoids the need to statically link DynaLoader into the stub perl
executable and make libperl.so provide all the code needed to get a
functional embedded perl interpreter up running. As a side effect
this also moves DynaLoader into libperl.a for non-useshrplib builds.
Fixes [perl #32539]
meaning that AIX no longer needs a special case for shared perl library
builds to keep miniperl unshared, because all platforms have it now.
Finally, in investigating a v5.26.0 build failure, I identified the cause
and then yesterday committed a fix to blead as part of commit 8f1941325681:
The Makefile must run makedef.pl with -Ilib on the command line
not realising that this had already been identified and fixed by Merijn
in Oct 2017 by commit 72bbce3da5eeffde:
miniperl also needs -Ilib for perl.exp on AIX etc
My commit mistakenly used miniperl_nonshr again. Revert back to his correct
approach, using the regular miniperl.
And hence we can safely delete miniperl_nonshr and all the logic related to
it, as it has been unused since Oct 2017.
|
|
|
|
|
|
|
| |
The AIX specific Makefile rules to build miniperl are effectively identical
to the default rules for *nix platforms (and have been for some time).
Hence remove the special case logic - the defaults work just fine.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
NeXT support was removed in June 2014 by commit f05550c064c27360:
Removed NeXT support
but that commit missed these hunks.
The crazy whitespace errors in the next4*) section were added by mistake
by me in June 2013 by commit b78ac7159b42a0e0:
write_buildcustomize.pl no longer writes to STDOUT
I'm not sure how I goofed that, but it had the side effect of breaking NeXT
builds, and no-one noticed.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It's only used during bootstrapping for miniperl when the XS version of Cwd
is not yet available, and only needed on platforms that don't already
provide their own builtin for getcwd().
It was added in v5.30.0 with the clear warning that
[it] may be removed or changed without notice
and is not used by any code on CPAN. (Cwd references it, but won't use it
once installed as it will have already found an XS implementation (platform
specific or generic).
|
|
|
|
| |
Generate the rest of the special case build logic from this list.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It can't rely on adding 'lib' to @INC in a BEGIN block because during the
build not all modules *are* in lib yet. For miniperl the two are not
equivalent - adding -Ilib means that lib/buildcustomize.pl is run, and this
sets up @INC properly to include all the toolchain modules in dist and cpan.
In particular, constant is dual life and hence not available as
lib/constant.pm until it has been copied from dist/constant/lib as part of
the build process. Hence with a parallel build on AIX, before this commit
there was a race condition between the job that builds dist/constant and the
job that builds perl.exp. Sometimes the race was lost, resulting in a
mysterious failed build.
All other users of makedef.pl already invoke it with the appropriate -Ilib
or -I..\lib, so this change won't affect them.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
It used pattern rules, which are a gnu make feature that isn't supported
by bsd makes (and probably other makes)
For: https://github.com/Perl/perl5/pull/19047
|
|
|
|
|
|
|
|
|
|
|
|
| |
This moves the per-file loop body of `makedepend` into a separate
file named `makedepend_file` and then uses `make` to launch
the `makedepend_file` processes for each target potentially in parallel.
This reduces the time for
time sh ./makedepend MAKE=make cflags
from 5 seconds to 2 seconds with MAKEFLAGS=-j8
|