replace "define\t" with "define " in most "normal" core files. The main exceptions being dist/, ext/, and Configure related files, which will be updated in a subsequent commit. Files in the cpan/ directory are also omitted as they are not owned by the core. '#define' has seven characters, so following it with a \t makes it look like '#define ' when it is not, which then frustrates attempts to find where a given define is. If you *know* then you do a git grep -P 'define\s+WHATEVER' but if don't or you forget, you can get very confused trying to find where a given define is located. This fixes all such cases so they actually are 'define WHATEVER' instead. If this patch is getting in your way with blame analysis then view it with the -w option to blame.
Remove obsolete workaround for VAX errno macros We won't be missing these from errno.h for any CRTL in this century and it was always not quite right (but harmlessly redundant) to use the workaround for non-Alpha since if we didn't need it for Alpha then we also didn't need it for any post-Alpha architecture.
Remove ancient and broken GCC for VMS support There has not been a viable GCC for VMS in a couple of decades and the hacks and workarounds that were necessary then are unlikely to be helpful for any future work. Reportedly significant portions of the GCC toolchain were available in GNAT Ada, but there was never an independent release of the C compiler and that support has now been removed as well. Cleaning this up should make it easier to add alternate compiler support in the future, such as for the clang port in progress at VSI.
Unixish.h, doshish.h: Reorder terminations; simplify The IO and memory terminations need to be after other things. Add a comment so that future maintainers won't make the mistakes I did. Also refactor so that amiga os doesn't have a separate list to get out of sync I suspect that the amiga termination should be moved to earlier in the sequence, but absent any evidence; I'm leaving it unchanged. vms destruction was missing a bunch of things and I didn't see any reason to have special handling, so I changed it to just use the standard, presuming the discrepancies were due to changes in the standard not getting propagated to vms. The common definitions are also moved to perl.c which is the only place they are used (including cpan). This makes them available in all circumstances. Otherwise, the #ifdef's for including the relevant header files only include one, so there would be undefined macros.
replace all instances of PERL_IMPLICIT_CONTEXT with MULTIPLICITY Since the removal of PERL_OBJECT (acfe0abcedaf592fb4b9cb69ce3468308ae99d91) PERL_IMPLICIT_CONTEXT and MULTIPLICITY have been synonymous and they're being used interchangeably. To simplify the code, this commit replaces all instances of PERL_IMPLICIT_CONTEXT with MULTIPLICITY. PERL_IMPLICIT_CONTEXT will stay defined for compatibility with XS modules.
style: Detabify indentation of the C code maintained by the core. This just detabifies to get rid of the mixed tab/space indentation. Applying consistent indentation and dealing with other tabs are another issue. Done with `expand -i`. * vutil.* left alone, it's part of version. * Left regen managed files alone for now.
Better selection of homegrown ino_t in vmsish.h. We had been using a 64-bit definition of myino_t only when _LARGEFILE is defined, but we actually get large file support via either _LARGEFILE or _USE_STD_STAT because both give us 64-bit off_t, so look at both definitions. The size of off_t is not any great indicator for the size of ino_t, but this preserves the intent of the existing code. TODO: figure out when _USE_STD_STAT became available; it's possible we no longer need this hackish layer on top of the stat struct.
Revert "vms/vmsish.h: move a function declaration from doio.c" This reverts commit d4bd48023fe0ba950fface5aa859b6852aa29fc4. perlio.h depends on vmsish.h and comes in (via iperlsys.h) about a thousand lines later in perl.h. So we can't put a prototype that uses PerlIO in vmsish.h Maybe there is a way to get that prototype out of doio.c, but this isn't it.
(perl #126228) partly revert 8cc95fdb and fix a3c8358c a3c8358c changed: -#define dXSUB_SYS int dummy +#define dXSUB_SYS which made dXSUB_SYS into not-a-declaration, this apparently broke something, since 8cc95fdb then went through all the definitions of dXSUB_SYS, made each of them into not-a-declaration and then ensured ExtUtilis::Miniperl emitted dXSUB_SYS in a place where it didn't matter whether it was a declaration or a statement. When these changes were made perl.h didn't have dNOOP, but now we do, so we can make dXSUB_SYS a declaration again, as its name implies. Based on a patch originally created by Daniel Dragan (bulk88).
C99 math under C++ on VMS. There is a group of math functions prototyped in math.h, but for some reason guarded by an ifdef that makes them visible only under C, not C++. That causes the build to die in the POSIX extension with a lot of undeclared function errors when building with C++. While it's kind of messy to have to maintain a private copy of the prototypes provided by a system-suppled header, it works, and is a lot easier than trying to probe for each one of these in configure.com. So put the relevant prototypes in vmsish.h, make them visible only to C++, and make sure they are within the extern "C" declaration.
killpg for VMS. Implement our own killpg by scanning for processes in the specified process group, which may not mean exactly the same thing as a Unix process group, but at least we can now send a signal to a parent (or master) process and all of its sub-processes. In Perl-land, this means we can now send a negative pid like so: kill SIGKILL, -$pid; to signal all processes in the same group as $pid.
Remove obsolete __GNUC__isms under vms/. There used to be some version of GCC 2.x that ran only on VAX that was capable of building Perl. But that was 18-20 years ago and there have been no recent reports of building Perl with gcc on VMS. If and when a modern version of GCC is ported to VMS (and the underpinnings are reportedly there as part of GNAT Pro Ada, just nothing complete or publicly available), these ancient workarounds are at least as likely to do harm as good. So get rid of them.
Require v7.3-2 or later for VMS builds. OpenVMS v7.3-2 was released in 2003. Regular support ended in 2006 and even prior version support will be ending in 2015, so this seems like a pretty generous minimum for future Perl versions. A side of effect of this is that OpenVMS VAX will no longer be supported. The terminal software release for VAX was v7.3 in 2001 with support ending in 2012. VAX was a truly great architecture in the 1970s, 1980s, and 1990s, but it's just missing too many of the things expected in architectures, file systems and C run-times of the current century. De-supporting this older stuff allows quite a bit of code removal and simplification, hopefully easing the maintenance burden a bit.