This replaces the previously used collection of configuration files for every single architecture in conjunction with hacky overrides, which became an increasing burden to maintain. Fixes a number of outstanding bugs and oddities, with the most important one being the previously wrong signal order(as shown by ext/POSIX/t/sigaction.t). See files/perlconfig.pl's POD and files/README.config for details. Signed-off-by: Marcel Denia <naoir@gmx.net>lilik-openwrt-22.03
@ -0,0 +1,58 @@ | |||
-- Perl configuration -- | |||
Perl uses a huge configuration file, normally generated via the Configure script | |||
at build-time. This fails when cross-compiling though, so we need to supply our | |||
own. | |||
We're using perlconfig.pl to piece together the final configuration from a bunch | |||
of configuration files(all ending in .config). Please refer to perlconfig.pl's | |||
POD for information on usage and syntax. | |||
Throughout the files, you will see a bunch of references to private symbols with | |||
the prefix "owrt". These are used to control output in an effort to both | |||
simplify writing configuration files, as well as to provide switchable options | |||
to select the feature set of the resulting perl installation. | |||
The following will be a summary/quick reference of all private symbols we're | |||
currently using: | |||
Passed via architecture configuration file(mipsel.config, i486.config, ...) | |||
--------------------------------------------------------------------------- | |||
Symbol Values Description | |||
owrt:bits 32/64 Target's native word length. | |||
owrt:endian little/big Target's endianness. | |||
owrt:arch mipsel, i486, ... Target's architecture name. | |||
owrt:sig_count 64/128 Number of signals the target | |||
provides(NSIG - 1). | |||
owrt:sigs * Symbolic names of the first 32 signals | |||
this architecture provides, in numeric | |||
order. Seperated by whitespaces. | |||
owrt:sig_name_extra * Symbolic names of any additional signals | |||
this architecture provides after | |||
owrt:sig_count. Seperated by | |||
whitespaces. | |||
owrt:sig_num_extra * Numeric values associated with the | |||
signal names provided in | |||
owrt:sig_name_extra. Seperated by | |||
whitespaces. | |||
Passed via command line | |||
----------------------- | |||
Symbol Values Description | |||
owrt:libc glibc/uclibc/musl Which C library implementation is in | |||
use. | |||
owrt:threads yes/no Whether to enable threading support. | |||
owrt:ipv6 define/undef Whether to enable IPv6 support. | |||
owrt:target_cross * Target architecture's host triplet. | |||
owrt:target_cc * C compiler to use. | |||
owrt:cflags * Additional C compiler flags. | |||
owrt:ldflags * Additional linker flags. | |||
owrt:staging_dir * Same as OpenWRT buildroot's | |||
$(STAGING_DIR). | |||
owrt:host_perl_prefix * host-perl installation prefix. | |||
Passed via version.config | |||
------------------------- | |||
Symbol Values Description | |||
owrt:perllibpath * Path to perl library files, from the | |||
target's point of view. |
@ -0,0 +1,121 @@ | |||
alignbytes='8' | |||
($owrt:bits eq '32') { | |||
($owrt:endian eq 'little') { | |||
byteorder='1234' | |||
} | |||
($owrt:endian eq 'big') { | |||
byteorder='4321' | |||
} | |||
# Types | |||
ivsize='4' | |||
uvsize='4' | |||
longsize='4' | |||
longdblsize='8' | |||
ptrsize='4' | |||
#quadkind='3' | |||
#doublekind='3' | |||
#longdblkind='0' | |||
i8type='signed char' | |||
i16type='signed short' | |||
i32type='signed long' | |||
i64type='signed long long' | |||
u32type='unsigned long' | |||
u64type='unsigned long long' | |||
quadtype='long long' | |||
uquadtype='unsigned long long' | |||
sizesize='4' | |||
use64bitall='undef' | |||
use64bitint='undef' | |||
uidformat='"lu"' | |||
gidformat='"lu"' | |||
selectminbits='32' | |||
sGMTIME_max='2147483647' | |||
sGMTIME_min='-2147483648' | |||
sLOCALTIME_max='2147483647' | |||
sLOCALTIME_min='-2147483648' | |||
sPRIi64='"Li"' | |||
sPRIo64='"Lo"' | |||
sPRIu64='"Lu"' | |||
sPRIx64='"Lx"' | |||
sPRId64='"Ld"' | |||
netdb_host_type='const void *' | |||
nv_preserves_uv_bits='32' | |||
d_nv_preserves_uv='define' | |||
d_printf_format_null='define' | |||
d_u32align='undef' | |||
} | |||
($owrt:bits eq '64') { | |||
($owrt:endian eq 'little') { | |||
byteorder='12345678' | |||
} | |||
($owrt:endian eq 'big') { | |||
byteorder='87654321' | |||
} | |||
# Types | |||
ivsize='8' | |||
uvsize='8' | |||
longsize='8' | |||
longdblsize='16' | |||
ptrsize='8' | |||
quadtype='long' | |||
i16type='signed short' | |||
i32type='signed int' | |||
i64type='signed long' | |||
i8type='signed char' | |||
u32type='unsigned int' | |||
u64type='unsigned long' | |||
uquadtype='unsigned long' | |||
sizesize='8' | |||
uidformat='"u"' | |||
gidformat='"u"' | |||
selectminbits='64' | |||
sGMTIME_max='67768036191676799' | |||
sGMTIME_min='-62167219200' | |||
sLOCALTIME_max='67768036191673199' | |||
sLOCALTIME_min='-62167222408' | |||
sPRIi64='"li"' | |||
sPRIo64='"lo"' | |||
sPRIu64='"lu"' | |||
sPRIx64='"lx"' | |||
sPRId64='"ld"' | |||
netdb_host_type='char *' | |||
nv_preserves_uv_bits='53' | |||
d_nv_preserves_uv='undef' | |||
d_printf_format_null='undef' | |||
d_u32align='define' | |||
use64bitall='define' | |||
use64bitint='define' | |||
} | |||
# Only defined by i486 and x86_64. Provide defaults for all others | |||
(!defined($sPRIEUldbl)) { | |||
sPRIEUldbl='"E"' | |||
sPRIFUldbl='"F"' | |||
sPRIGUldbl='"G"' | |||
sPRIXU64='"LX"' | |||
sPRIeldbl='"e"' | |||
sPRIfldbl='"f"' | |||
sPRIgldbl='"g"' | |||
sSCNfldbl='"f"' | |||
} |
@ -0,0 +1,19 @@ | |||
owrt:arch=arm | |||
owrt:bits=32 | |||
owrt:endian=little | |||
ccsymbols='__ARM_ARCH_3__=1' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='define' | |||
d_modflproto='undef' | |||
doublekind='3' | |||
fpossize='20' | |||
longdblkind='0' | |||
need_va_copy='undef' | |||
quadkind='3' | |||
owrt:sig_count='64' | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS' | |||
owrt:sig_name_extra='IOT CLD POLL UNUSED' | |||
owrt:sig_num_extra='6 17 29 31' |
@ -0,0 +1,19 @@ | |||
owrt:arch=armeb | |||
owrt:bits=32 | |||
owrt:endian=big | |||
ccsymbols='__ARM_ARCH_3__=1' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='define' | |||
d_modflproto='undef' | |||
doublekind='4' | |||
fpossize='20' | |||
longdblkind='0' | |||
need_va_copy='undef' | |||
quadkind='3' | |||
owrt:sig_count='64' | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS' | |||
owrt:sig_name_extra='IOT CLD POLL UNUSED' | |||
owrt:sig_num_extra='6 17 29 31' |
@ -0,0 +1,28 @@ | |||
owrt:arch=i486 | |||
owrt:bits=32 | |||
owrt:endian=little | |||
ccsymbols='' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 i386=1 __i386=1 __i386__=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='undef' | |||
d_modflproto='define' | |||
doublekind='3' | |||
fpossize='20' | |||
longdblkind='3' | |||
need_va_copy='undef' | |||
quadkind='3' | |||
sPRIEUldbl='"LE"' | |||
sPRIFUldbl='"LF"' | |||
sPRIGUldbl='"LG"' | |||
sPRIXU64='"LX"' | |||
sPRIeldbl='"Le"' | |||
sPRIfldbl='"Lf"' | |||
sPRIgldbl='"Lg"' | |||
sSCNfldbl='"Lf"' | |||
owrt:sig_count='64' | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS' | |||
owrt:sig_name_extra='IOT CLD POLL UNUSED' | |||
owrt:sig_num_extra='6 17 29 31' |
@ -0,0 +1,45 @@ | |||
($owrt:libc eq 'glibc') { | |||
perllibs="$perllibs -lbsd" | |||
ldflags="$ldflags -L$owrt:staging_dir/lib" | |||
} | |||
# uclibc does not provide crypt_r(). Enable crypt() usage for glibc builds only | |||
($owrt:libc ne 'glibc') { | |||
crypt_r_proto='0' | |||
i_crypt='undef' | |||
d_crypt='undef' | |||
d_crypt_r='undef' | |||
} | |||
($owrt:libc eq 'musl') { | |||
d_stdio_ptr_lval='undef' | |||
d_stdio_ptr_lval_sets_cnt='undef' | |||
d_stdiobase='undef' | |||
d_stdstdio='undef' | |||
d_getnetbyname_r='undef' | |||
d_getprotobyname_r='undef' | |||
d_getpwent_r='undef' | |||
d_getservent_r='undef' | |||
d_gethostent_r='undef' | |||
d_getnetent_r='undef' | |||
d_getnetbyaddr_r='undef' | |||
d_getprotoent_r='undef' | |||
d_getprotobynumber_r='undef' | |||
d_getgrent_r='undef' | |||
getprotobyname_r='undef' | |||
getpwent_r='undef' | |||
getservent_r='undef' | |||
gethostent_r='undef' | |||
getnetent_r='undef' | |||
getnetbyaddr_r='undef' | |||
getprotoent_r='undef' | |||
getprotobynumber_r='undef' | |||
getgrent_r='undef' | |||
i_fcntl='define' | |||
h_fcntl='true' | |||
d_strerror_r='undef' | |||
} |
@ -0,0 +1,19 @@ | |||
owrt:arch=mips | |||
owrt:bits=32 | |||
owrt:endian=big | |||
ccsymbols='' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=_MIPS_ISA_MIPS1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='define' | |||
d_modflproto='undef' | |||
doublekind='4' | |||
fpossize='24' | |||
longdblkind='0' | |||
need_va_copy='undef' | |||
quadkind='3' | |||
owrt:sig_count=128 | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CHLD PWR WINCH URG IO STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ' | |||
owrt:sig_name_extra='IOT CLD POLL' | |||
owrt:sig_num_extra='6 18 22' |
@ -0,0 +1,19 @@ | |||
owrt:arch=mips64 | |||
owrt:bits=64 | |||
owrt:endian=big | |||
ccsymbols='' | |||
cppccsymbols='' | |||
cppsymbols='' | |||
d_casti32='define' | |||
d_modflproto='undef' | |||
doublekind='4' | |||
fpossize='24' | |||
longdblkind='6' | |||
need_va_copy='define' | |||
quadkind='2' | |||
owrt:sig_count=128 | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CHLD PWR WINCH URG IO STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ' | |||
owrt:sig_name_extra='IOT CLD POLL' | |||
owrt:sig_num_extra='6 18 22' |
@ -0,0 +1,19 @@ | |||
owrt:arch=mipsel | |||
owrt:bits=32 | |||
owrt:endian=little | |||
ccsymbols='' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 LANGUAGE_C=1 _LANGUAGE_C=1 __LANGUAGE_C=1 __LANGUAGE_C__=1 _LARGEFILE_SOURCE=1 MIPSEL=1 _MIPSEL=1 __MIPSEL=1 __MIPSEL__=1 _MIPS_FPSET=16 _MIPS_ISA=_MIPS_ISA_MIPS1 _MIPS_SIM=1 _MIPS_SZINT=32 _MIPS_SZLONG=32 _MIPS_SZPTR=32 __PIC__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 R3000=1 _R3000=1 __R3000=1 __R3000__=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 mips=1 _mips=1 __mips=1 __mips__=1 __pic__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='define' | |||
d_modflproto='undef' | |||
doublekind='3' | |||
fpossize='24' | |||
longdblkind='0' | |||
need_va_copy='undef' | |||
quadkind='3' | |||
owrt:sig_count=128 | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1 USR2 CHLD PWR WINCH URG IO STOP TSTP CONT TTIN TTOU VTALRM PROF XCPU XFSZ' | |||
owrt:sig_name_extra='IOT CLD POLL' | |||
owrt:sig_num_extra='6 18 22' |
@ -0,0 +1,11 @@ | |||
cf_email='naoir@gmx.net' | |||
osvers='3.18.19' | |||
gccversion='4.8.0' | |||
myhostname='OpenWrt' | |||
cf_time='Thu Jan 1 12:00:00 CEST 2015' | |||
perladmin="$cf_email" | |||
archname="$owrt:arch-linux-$owrt:libc" | |||
targetarch="$archname" | |||
myarchname="$archname" | |||
myuname="Linux $myhostname $osvers #1 SMP $cf_time @{[$owrt:arch =~ s/(el|eb)$//r]} GNU/Linux" |
@ -0,0 +1,313 @@ | |||
#!/usr/bin/perl | |||
# This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation, either version 3 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
# | |||
# Copyright 2015 Marcel Denia | |||
=head1 NAME | |||
perlconfig.pl | |||
=head1 SYNOPSIS | |||
B<perlconfig.pl> [B<-Dsymbol>=I<value>, ...] [B<-dsymbol>=I<value>, ...] I<[files]> | |||
Generate a configuration file suitable for (cross-)compiling perl 5. | |||
=head1 OPTIONS | |||
=over | |||
=item B<-Dsymbol=value> | |||
The symbol identified by I<name> will have the literal value I<value>. | |||
When generating the configuration file, it's value will be printed enclosed by | |||
single quotation marks('). | |||
=item B<-dsymbol=value> | |||
The symbol identified by I<name> will have the literal value I<value>. | |||
=back | |||
=head1 DESCRIPTION | |||
B<perlconfig.pl> is a program to compile and generate configuration files ready | |||
to be used as a "config.sh" file for compiling perl 5. It does so by processing | |||
specially-made configuration files(usually called *.config), typically augmented | |||
by command-line definitions. | |||
B<perlconfig.pl>'s intent is to be used in place of perl 5's own Configure | |||
script in situations where it can not be run, like cross-compiling. | |||
=head2 File syntax | |||
B<perlconfig.pl>'s configuration files a consist of symbol definitions in | |||
different variations, each one assigning a specific symbol identified by a name | |||
some value, as well as conditional blocks in order to allow for some | |||
flexibility. | |||
=head3 Symbol names | |||
A symbol name has to consist entirely of alphanumeric characters as well as | |||
the underscore(_) character. In addition, symbol names may be prefixed with an | |||
all-lowercase string, seperated by a colon(:): | |||
my:name=value | |||
Having a zero-length prefix string is also valid: | |||
:name=value | |||
Symbols prefixed that way are called private symbols. They act exactly like | |||
regular symbols, with the only difference being that they will B<not> be written | |||
to the final configuration file. | |||
=head3 Symbol definitions | |||
A symbol definition is in the form of a simple name/value pair, seperated by | |||
an equals sign(=): | |||
name=value | |||
I<value> can be anything really. However, there are 3 notations, with | |||
differences in quoting and interpolation: | |||
=over | |||
=item name=foo | |||
The symbol identified by I<name> will have the literal value I<foo>. | |||
=item name='foo' | |||
The symbol identified by I<name> will have the literal value I<foo>. | |||
When generating the configuration file, it's value will be printed enclosed by | |||
single quotation marks('). | |||
=item name="foo" | |||
The symbol identified by I<name> will have the value of I<foo> | |||
S<B<after interpolation>>(as described in L</Interpolation>). | |||
When generating the configuration file, it's value will be printed enclosed by | |||
single quotation marks('). | |||
=back | |||
=head3 Conditional blocks | |||
A conditional block is of the form | |||
(condition) { | |||
... | |||
} | |||
B<perlconfig.pl> will execute everything enclosed in the curly braces({ and }), | |||
or inside the BLOCK in Perl 5 terms, if I<condition> evaluates to any true | |||
value. I<condition> will go through interpolation as described in | |||
L</Interpolation>. It may contain any valid Perl 5 expression. Some common | |||
examples are: | |||
=over | |||
=item $name eq 'foo' | |||
Evaluates to true if configuration symbol I<name> is literally equal to I<foo>. | |||
=item $name ne 'foo' | |||
Evaluates to true if configuration symbol I<name> is B<not> literally equal to | |||
I<foo>. | |||
=item defined($name) | |||
Evaluates to true if configuration symbol I<name> is defined(has any usable | |||
value, see L<perlfunc/defined>). | |||
=back | |||
Conditional blocks may be nested inside conditional blocks. Note that the | |||
opening curl brace({) has to be on the same line as your condition. | |||
=head3 Comments | |||
All lines starting with nothing or any number of whitespaces, followed by a | |||
hash sign(#), are considered comments and will be completely ignored by | |||
B<perlconfig.pl>. | |||
=head3 Interpolation | |||
In certain situations(see above), B<perlconfig.pl> will interpolate strings or | |||
constructs in order to allow you to refer to configuration symbols or embed | |||
code. | |||
Interpolated strings are subject to the following rules: | |||
=over | |||
=item You may not include any single(') or double(") quotation marks. | |||
You can use \qq in order to include double quotation marks(") in your string. | |||
=item $name and ${name} reference configuration symbols | |||
You can easily refer to existing configuration symbols using the commmon $name | |||
or ${name} syntax. In case you want to refer to the perl variable named $name, | |||
write \$name. This is useful for embedding code. | |||
=item Perl 5 interpolation rules apply | |||
Aside from the above, you may include anything that is also valid for an | |||
interpolated(qq//) string in Perl 5. For instance, it's perfectly valid to | |||
execute code using the @{[]} construct. | |||
=back | |||
=head1 EXAMPLES | |||
As a simple example, consider the following configuration file, named | |||
"example.config": | |||
recommendation='The Perl you want is' | |||
($:maturity eq 'stable') { | |||
recommendation="$recommendation Perl 5" | |||
} | |||
($:maturity eq 'experimental') { | |||
recommendation="$recommendation Perl 6(try Rakudo!)" | |||
} | |||
Executing it using these command-lines will yield the following results: | |||
=over | |||
=item $ perlconfig.pl -D:maturity=stable example.config | |||
recommendation='The Perl you want is Perl 5' | |||
=item $ perlconfig.pl -D:maturity=experimental example.config | |||
recommendation='The Perl you want is Perl 6(try Rakudo!)' | |||
=back | |||
=head1 AUTHOR | |||
Marcel Denia <naoir@gmx.net> | |||
=head1 COPYRIGHT AND LICENSE | |||
Copyright 2015 Marcel Denia | |||
This program is free software: you can redistribute it and/or modify | |||
it under the terms of the GNU General Public License as published by | |||
the Free Software Foundation, either version 3 of the License, or | |||
(at your option) any later version. | |||
This program is distributed in the hope that it will be useful, | |||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
GNU General Public License for more details. | |||
You should have received a copy of the GNU General Public License | |||
along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
=cut | |||
use strict; | |||
use warnings; | |||
use List::Util qw/all/; | |||
my $symbol_name_prefix_regex = '(?:[a-z]*:)'; | |||
my $symbol_name_regex = "($symbol_name_prefix_regex?(?:[a-zA-Z0-9_]+))"; | |||
my %config; | |||
sub interpolate { | |||
my $string = shift; | |||
my %options = @_; | |||
# First, convert $foo into ${foo} | |||
$string =~ s/(?<!\\)\$$symbol_name_regex/\${$1}/gs; | |||
# Make ${foo} into $config{'foo'}->{value} | |||
$string =~ s/\$\{$symbol_name_regex\}/\$config{\'$1\'}->{value}/g; | |||
# Un-escape \$foo | |||
$string =~ s/\\\$/\$/g; | |||
# Turn \qq into " | |||
$string =~ s/\\qq/\\"/g; | |||
return $string; | |||
} | |||
# Parse command-line symbol definitions | |||
while ($ARGV[0]) { | |||
if ($ARGV[0] =~ /^-([D|d])$symbol_name_regex=(.*)$/) { | |||
$config{$2} = { value => $3, quoted => $1 eq 'D' }; | |||
shift(@ARGV); | |||
} | |||
else { | |||
last; | |||
} | |||
} | |||
# Process configuration files | |||
my @condition_stack = ( 1 ); | |||
for my $file (@ARGV) { | |||
open(my $fh, '<', $file) or die "Can't open $file: $!\n"; | |||
while (my $line = <$fh>) { | |||
chomp($line); | |||
if ($line =~ /^\s*$symbol_name_regex=(.*)$/) { # A symbol definition | |||
if (all {$_ == 1} @condition_stack) { | |||
my $symbol = $1; | |||
(my $quote_begin, my $value, my $quote_end) = $2 =~ /^(['|"])?([^'"]*)(['|"])?$/; | |||
$quote_begin = '' unless defined $quote_begin; | |||
$quote_end = '' unless defined $quote_end; | |||
die "$file:$.: Unmatched quotes in \"$line\"\n" unless $quote_begin eq $quote_end; | |||
if ($quote_begin eq '"') { | |||
$config{$symbol} = { value => eval('"' . interpolate($2) . '"'), quoted => 1 }; | |||
} | |||
else { | |||
$config{$symbol} = { value => $2, quoted => $quote_begin eq '\'' }; | |||
} | |||
} | |||
} | |||
elsif ($line =~ /^\s*\((.*)\)\s?{$/) { # A conditional block | |||
if (eval(interpolate($1))) { | |||
push(@condition_stack, 1); | |||
} | |||
else { | |||
push(@condition_stack, 0); | |||
} | |||
} | |||
elsif ($line =~ /^\s*}$/) { # Closing a conditional block | |||
pop(@condition_stack); | |||
die "$file:$.: Closing non-existent block\n" unless @condition_stack; | |||
} | |||
elsif ($line =~ (/^\s*$/) || ($line =~ /^\s*#/)) { # An empty line or comment | |||
} | |||
else { | |||
die "$file:$.: Malformed line: \"$line\"\n"; | |||
} | |||
} | |||
} | |||
# Output | |||
for (sort(keys(%config))) { | |||
my $quote = $config{$_}->{quoted} ? '\'' : ''; | |||
print("$_=$quote$config{$_}->{value}$quote\n") unless $_ =~ /^$symbol_name_prefix_regex/; | |||
} |
@ -0,0 +1,19 @@ | |||
owrt:arch=powerpc | |||
owrt:bits=32 | |||
owrt:endian=big | |||
ccsymbols='__gnu_linux__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 system=linux system=posix system=unix' | |||
cppccsymbols='linux=1 unix=1' | |||
cppsymbols='_BIG_ENDIAN=1 __BIG_ENDIAN__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1' | |||
d_casti32='undef' | |||
d_modflproto='undef' | |||
doublekind='4' | |||
fpossize='24' | |||
longdblkind='0' | |||
need_va_copy='define' | |||
quadkind='3' | |||
owrt:sig_count='64' | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS' | |||
owrt:sig_name_extra='IOT CLD POLL UNUSED' | |||
owrt:sig_num_extra='6 17 29 31' |
@ -0,0 +1,18 @@ | |||
# Signal table helper | |||
(defined($owrt:sigs)) { | |||
sig_name="$owrt:sigs" | |||
(($owrt:libc eq 'glibc') || ($owrt:libc eq 'uclibc')) { | |||
sig_name="$sig_name NUM32 NUM33 RTMIN NUM35 NUM36" | |||
} | |||
($owrt:libc eq 'musl') { | |||
sig_name="$sig_name NUM32 NUM33 NUM34 RTMIN NUM36" | |||
} | |||
sig_name="$sig_name @{[map({qq/NUM\$_/} 37..$owrt:sig_count - 2)]} RTMAX $owrt:sig_name_extra" | |||
sig_num="@{[0..$owrt:sig_count - 1]} $owrt:sig_num_extra " | |||
sig_count="$owrt:sig_count" | |||
sig_size="@{[scalar(split(q/ /, $sig_name))]}" | |||
sig_name_init="@{[join(q/, /, map({qq/\qq\$_\qq/} split(q/ /, $sig_name)))]}, 0" | |||
sig_num_init="@{[join(q/, /, split(q/ /, $sig_num))]}, 0" | |||
} |
@ -0,0 +1,197 @@ | |||
($owrt:threads eq 'yes') { | |||
# Configure arguments | |||
config_args="$config_args -Dusethreads" | |||
config_arg2='-Dusethreads' | |||
config_argc=2 | |||
# Options | |||
useithreads='define' | |||
usemultiplicity='define' | |||
usethreads='define' | |||
# Flags and related | |||
ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" | |||
cppflags="-D_REENTRANT -D_GNU_SOURCE $cppflags" | |||
perllibs="-lpthread $perllibs" | |||
libs="-lpthread $libs" | |||
libsfiles="libpthread.so $libsfiles" | |||
libswanted="pthread $libswanted" | |||
crypt_r_proto='REENTRANT_PROTO_B_CCS' | |||
i_crypt='define' | |||
d_crypt='define' | |||
d_crypt_r='define' | |||
# Prototypes | |||
asctime_r_proto='REENTRANT_PROTO_B_SB' | |||
ctime_r_proto='REENTRANT_PROTO_B_SB' | |||
drand48_r_proto='REENTRANT_PROTO_I_ST' | |||
getgrent_r_proto='REENTRANT_PROTO_I_SBWR' | |||
getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR' | |||
getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR' | |||
gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE' | |||
gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' | |||
gethostent_r_proto='REENTRANT_PROTO_I_SBWRE' | |||
getlogin_r_proto='REENTRANT_PROTO_I_BW' | |||
getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE' | |||
getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' | |||
getnetent_r_proto='REENTRANT_PROTO_I_SBWRE' | |||
getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR' | |||
getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR' | |||
getprotoent_r_proto='REENTRANT_PROTO_I_SBWR' | |||
getpwent_r_proto='REENTRANT_PROTO_I_SBWR' | |||
getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR' | |||
getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR' | |||
getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR' | |||
getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR' | |||
getservent_r_proto='REENTRANT_PROTO_I_SBWR' | |||
getspnam_r_proto='REENTRANT_PROTO_I_CSBWR' | |||
gmtime_r_proto='REENTRANT_PROTO_S_TS' | |||
localtime_r_proto='REENTRANT_PROTO_S_TS' | |||
random_r_proto='REENTRANT_PROTO_I_St' | |||
readdir64_r_proto='REENTRANT_PROTO_I_TSR' | |||
readdir_r_proto='REENTRANT_PROTO_I_TSR' | |||
srand48_r_proto='REENTRANT_PROTO_I_LS' | |||
srandom_r_proto='REENTRANT_PROTO_I_TS' | |||
strerror_r_proto='REENTRANT_PROTO_B_IBW' | |||
tmpnam_r_proto='REENTRANT_PROTO_B_B' | |||
ttyname_r_proto='REENTRANT_PROTO_I_IBW' | |||
# Defines | |||
d_asctime_r='define' | |||
d_ctime_r='define' | |||
d_drand48_r='define' | |||
d_fds_bits='define' | |||
d_fegetround='undef' | |||
d_getgrent_r='define' | |||
d_getgrgid_r='define' | |||
d_getgrnam_r='define' | |||
d_gethostbyaddr_r='define' | |||
d_gethostbyname_r='define' | |||
d_gethostent_r='define' | |||
d_getlogin_r='define' | |||
d_getnetbyaddr_r='define' | |||
d_getnetbyname_r='define' | |||
d_getnetent_r='define' | |||
d_getprotobyname_r='define' | |||
d_getprotobynumber_r='define' | |||
d_getprotoent_r='define' | |||
d_getpwent_r='define' | |||
d_getpwnam_r='define' | |||
d_getpwuid_r='define' | |||
d_getservbyname_r='define' | |||
d_getservbyport_r='define' | |||
d_getservent_r='define' | |||
d_getspnam_r='define' | |||
d_gmtime_r='define' | |||
d_j0='undef' | |||
d_j0l='undef' | |||
d_localtime_r='define' | |||
d_localtime_r_needs_tzset='define' | |||
d_nexttoward='undef' | |||
d_off64_t='define' | |||
d_pthread_atfork='define' | |||
d_pthread_yield='define' | |||
d_random_r='define' | |||
d_readdir64_r='define' | |||
d_readdir_r='define' | |||
d_srand48_r='define' | |||
d_srandom_r='define' | |||
d_sresgproto='define' | |||
d_sresuproto='define' | |||
d_strerror_r='define' | |||
d_tmpnam_r='define' | |||
d_ttyname_r='define' | |||
} | |||
($owrt:threads eq 'no') { | |||
# Options | |||
useithreads='undef' | |||
usemultiplicity='undef' | |||
usethreads='undef' | |||
# Prototyypes | |||
asctime_r_proto='0' | |||
crypt_r_proto='0' | |||
ctime_r_proto='0' | |||
drand48_r_proto='0' | |||
getgrent_r_proto='0' | |||
getgrgid_r_proto='0' | |||
getgrnam_r_proto='0' | |||
gethostbyaddr_r_proto='0' | |||
gethostbyname_r_proto='0' | |||
gethostent_r_proto='0' | |||
getlogin_r_proto='0' | |||
getnetbyaddr_r_proto='0' | |||
getnetbyname_r_proto='0' | |||
getnetent_r_proto='0' | |||
getprotobyname_r_proto='0' | |||
getprotobynumber_r_proto='0' | |||
getprotoent_r_proto='0' | |||
getpwent_r_proto='0' | |||
getpwnam_r_proto='0' | |||
getpwuid_r_proto='0' | |||
getservbyname_r_proto='0' | |||
getservbyport_r_proto='0' | |||
getservent_r_proto='0' | |||
getspnam_r_proto='0' | |||
gmtime_r_proto='0' | |||
# Defines | |||
d_asctime_r='undef' | |||
d_crypt='define' | |||
d_crypt_r='undef' | |||
d_ctime_r='undef' | |||
d_drand48_r='undef' | |||
d_fds_bits='undef' | |||
d_fegetround='define' | |||
d_getgrent_r='undef' | |||
d_getgrgid_r='undef' | |||
d_getgrnam_r='undef' | |||
d_gethostbyaddr_r='undef' | |||
d_gethostbyname_r='undef' | |||
d_gethostent_r='undef' | |||
d_getlogin_r='undef' | |||
d_getnetbyaddr_r='undef' | |||
d_getnetbyname_r='undef' | |||
d_getnetent_r='undef' | |||
d_getprotobyname_r='undef' | |||
d_getprotobynumber_r='undef' | |||
d_getprotoent_r='undef' | |||
d_getpwent_r='undef' | |||
d_getpwnam_r='undef' | |||
d_getpwuid_r='undef' | |||
d_getservbyname_r='undef' | |||
d_getservbyport_r='undef' | |||
d_getservent_r='undef' | |||
d_getspnam_r='undef' | |||
d_gmtime_r='undef' | |||
d_j0='define' | |||
d_j0l='define' | |||
d_localtime_r='undef' | |||
d_localtime_r_needs_tzset='undef' | |||
d_nexttoward='define' | |||
d_off64_t='undef' | |||
d_pthread_atfork='undef' | |||
d_pthread_yield='undef' | |||
d_random_r='undef' | |||
d_readdir64_r='undef' | |||
d_readdir_r='undef' | |||
d_srand48_r='undef' | |||
d_srandom_r='undef' | |||
d_sresgproto='undef' | |||
d_sresuproto='undef' | |||
d_strerror_r='undef' | |||
d_tmpnam_r='undef' | |||
d_ttyname_r='undef' | |||
i_crypt='define' | |||
localtime_r_proto='0' | |||
random_r_proto='0' | |||
readdir64_r_proto='0' | |||
readdir_r_proto='0' | |||
srand48_r_proto='0' | |||
srandom_r_proto='0' | |||
strerror_r_proto='0' | |||
tmpnam_r_proto='0' | |||
ttyname_r_proto='0' | |||
} |
@ -0,0 +1,38 @@ | |||
# Set the version here | |||
PERL_REVISION=5 | |||
PERL_VERSION=22 | |||
PERL_SUBVERSION=0 | |||
# (api_revison, api_version, api_subversion) = (revision, version, 0) usually | |||
PERL_API_REVISION=5 | |||
PERL_API_VERSION=22 | |||
PERL_API_SUBVERSION=0 | |||
known_extensions='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash' | |||
extensions='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash Compress/Zlib Errno IO_Compress_Base IO_Compress_Zlib Unicode/Normalize' | |||
nonxs_ext='Archive/Tar Attribute/Handlers AutoLoader B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Config/Perl/V Devel/SelfStubber Digest Dumpvalue Env Errno Exporter ExtUtils/CBuilder ExtUtils/Command ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS File/Fetch File/Find File/Path File/Temp FileCache Filter/Simple Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP Locale/Codes Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NEXT Net/Ping Params/Check Parse/CPAN/Meta Perl/OSType PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Memoize Tie/RefHash Time/Local XSLoader autodie autouse base bignum constant encoding/warnings experimental if lib libnet parent perlfaq podlators Unicode/Normalize version' | |||
dynamic_ext='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate XS/APItest XS/Typemap arybase attributes mro re threads threads/shared' | |||
# No need to change anything from here on | |||
owrt:perllibpath="/usr/lib/perl5/$PERL_REVISION.$PERL_VERSION" | |||
revision="$PERL_REVISION" | |||
patchlevel="$PERL_VERSION" | |||
subversion="$PERL_SUBVERSION" | |||
version_patchlevel_string="version $PERL_VERSION subversion $PERL_SUBVERSION" | |||
version="$PERL_REVISION.$PERL_VERSION.$PERL_SUBVERSION" | |||
api_revision="$PERL_API_REVISION" | |||
api_version="$PERL_API_VERSION" | |||
api_subversion="$PERL_API_SUBVERSION" | |||
api_versionstring="$PERL_API_REVISION.$PERL_API_VERSION.$PERL_API_SUBVERSION" | |||
privlib="$owrt:perllibpath" | |||
privlibexp="$privlib" | |||
archlib="$owrt:perllibpath" | |||
archlibexp="$archlib" | |||
installarchlib="$owrt:perllibpath" | |||
installprivlib="$owrt:perllibpath" | |||
installsitearch="$owrt:perllibpath" | |||
installsitelib="$owrt:perllibpath" |
@ -0,0 +1,28 @@ | |||
owrt:arch=x86_64 | |||
owrt:bits=64 | |||
owrt:endian=little | |||
ccsymbols='' | |||
cppccsymbols='' | |||
cppsymbols='__ELF__=1 _LP64=1 __FLT_EVAL_METHOD__=0 __FXSR__=1 __GCC_ATOMIC_LLONG_LOCK_FREE=2 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __INT64_MAX__=9223372036854775807L __INT64_TYPE__=long\ int __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long\ int __INTPTR_MAX__=9223372036854775807L __INTPTR_TYPE__=long\ int __INT_FAST16_MAX__=9223372036854775807L __INT_FAST16_TYPE__=long\ int __INT_FAST32_MAX__=9223372036854775807L __INT_FAST32_TYPE__=long\ int __INT_FAST64_MAX__=9223372036854775807L __INT_FAST64_TYPE__=long\ int __INT_LEAST64_MAX__=9223372036854775807L __INT_LEAST64_TYPE__=long\ int __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __PTRDIFF_MAX__=9223372036854775807L __PTRDIFF_TYPE__=long\ int __SIZEOF_INT128__=16 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SIZE_T__=8 __SIZE_MAX__=18446744073709551615UL __SIZE_TYPE__=long\ unsigned\ int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __UINT64_MAX__=18446744073709551615UL __UINT64_TYPE__=long\ unsigned\ int __UINTMAX_MAX__=18446744073709551615UL __UINTMAX_TYPE__=long\ unsigned\ int __UINTPTR_MAX__=18446744073709551615UL __UINTPTR_TYPE__=long\ unsigned\ int __UINT_FAST16_MAX__=18446744073709551615UL __UINT_FAST16_TYPE__=long\ unsigned\ int __UINT_FAST32_MAX__=18446744073709551615UL __UINT_FAST32_TYPE__=long\ unsigned\ int __UINT_FAST64_MAX__=18446744073709551615UL __UINT_FAST64_TYPE__=long\ unsigned\ int __UINT_LEAST64_MAX__=18446744073709551615UL __UINT_LEAST64_TYPE__=long\ unsigned\ int __WCHAR_MAX__=2147483647 __WCHAR_MIN__=(-2147483647\ -\ 1) __WCHAR_TYPE__=int __amd64=1 __amd64__=1 __code_model_small__=1 __k8=1 __k8__=1 __x86_64=1 __x86_64__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC__=3 __GNUC_MINOR__=4 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1' | |||
d_casti32='undef' | |||
d_modflproto='define' | |||
doublekind='3' | |||
fpossize='16' | |||
longdblkind='3' | |||
need_va_copy='define' | |||
quadkind='2' | |||
sPRIEUldbl='"LE"' | |||
sPRIFUldbl='"LF"' | |||
sPRIGUldbl='"LG"' | |||
sPRIXU64='"lX"' | |||
sPRIeldbl='"Le"' | |||
sPRIfldbl='"Lf"' | |||
sPRIgldbl='"Lg"' | |||
sSCNfldbl='"Lf"' | |||
owrt:sig_count='64' | |||
owrt:sigs='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS' | |||
owrt:sig_name_extra='IOT CLD POLL UNUSED' | |||
owrt:sig_num_extra='6 17 29 31' |