• detecting a lot more compilers (stolen from CMake, admittedly, as they
were the first coming up at G**gle with usable #ifdefs)
• handling MIPSpro
• more system info on IRIX
‣ I/O redirection seems broken:
$ (date; date >/dev/null; date) | wc -l
1 (expected: 2)
‣ other than that: working fine
‣ -YBSD (default) and -YSYSTEM_FIVE don’t work, just -YPOSIX, somehow
• Fix $(…) to `…` for OSF/1 V2.0 /bin/sh
‣ this compiler is FUBAR though:
$ cat >t.c
main() { return (foo()); }
$ cc t.c
ld:
Unresolved :
foo
$ echo $?
0
$ ls -l a.out
-rwxr-xr-x 1 mirbsd users 10835 Jul 21 17:12 a.out
‣ it seems to have ucode, but man is not installed
• new mirtoconf check: mkstemp(3)
• if !HAVE_MKSTEMP (Ultrix), use tempnam(3)
• only use printf(1) if it exists (it doesn’t on Ultrix)
• a few more signals
• add S_ISLNK if the OS doesn’t define it
• add strcasecmp(3) proto for Ultrix (it _is_ in <portability.h>, but
only for -YBSD I think)
• fgrep(1) on Ultrix doesn’t do “-e ① -e ②”
10x DEChengst:#UnixNL for giving access
it can’t do -Werror, that’s why it mis-detects attribute support.
ignore the warnings (unused variables, uninitialised values, control flow)
as I checked them and they are not valid. gcc 1.42 (BSDi modified) compiles
a very fine mksh
| OSF1 rubbereendje.dechengst.nl V5.1 2650 alpha
with the vendor compiler:
| Compaq C V6.5-011 on HP Tru64 UNIX V5.1B (Rev. 2650)
| Compiler Driver V6.5-003 (sys) cc Driver
• the platform’s sig_t is incompatible too (simplify check)
• no compile warnings at all
• results in:
$ size mksh
| text data bss dec hex
| 327680 16384 17808 361872 58590
$ file mksh
| mksh: COFF format alpha dynamically linked, demand paged executable or object module not stripped - version 3.13-14
$ ldd mksh
|
| Main => mksh
| libc.so => /usr/shlib/libc.so
$ ls -l mksh
| -rwxr-xr-x 1 mirbsd users 395200 Mar 5 19:18 mksh
• minor testsuite issues:
FAIL ./check.t:regression-13
unexpected stderr - got too much output
wanted nothing
got:
Successful
cat: output error
⇒ probably harmless
• works like a charm!
• DEC C on OSF/1 (10x Jupp the IceWM coffee pot maintainer)
• other stuff which doesn’t nuke a.out on failure
XXX this must be tested on *ALL* supported platforms!
i.e. uint32_t and uint64_t
• faking <stdint.h>: u_int32_t is not part of ISO C99, so
do not add it there
• add a test if u_int32_t is declared, for the sake of the
fucked up OpenBSD standard arc4random(3) declaration, and
define it to uint32_t if the former type is not available,
e.g. on Solaris or if we fake <stdint.h>
• fix detection of arc4random_pushb(3) and the prototypes
if one of the things above applied to our system
• fix detection of arc4random function suite prototypes if
they are added via an arc4random.c file in the srcdir, and
copy that file into builddir (if it does not already exist)
to keep these isolated from each other
based on a real-life bug report by cnuke@ at the Croatian restaurant ☺☻
unbreaks “set ±o arc4random” on Solaris, both SUNpro and GCC
• use DOWARN semantically correct
• support the Microsoft® C Compiler
• on Interix, disable msc's security checks, as it relies on
library functions not provided by Interix' libc (XXX mirtoconf this)
| cpp.ansi: HP92453-01 B.11.31.01 HP C Preprocessor (ANSI)
| ccom: HP92453-01 B.11.X.36086-36089-36092.GP HP C Compiler
| /usr/ccs/bin/ld: 92453-07 linker linker ld B.11.60 070209
on
| mirbsd@td191:~/mksh $ uname -a
| HP-UX td191 B.11.31 U 9000/800 3397116299 unlimited-user license
resulting in
| Total failed: 1 (as expected)
| Total passed: 220
so I suppose it's no longer experimental on HP-UX… it also works on/with
| HP-UX td192 B.11.11 U 9000/800 1839940656 unlimited-user license
| gcc version 3.4.2
| Can't locate POSIX.pm in @INC…
and
| HP-UX td192 B.11.11 U 9000/800 1839940656 unlimited-user license
| cpp.ansi: HP92453-01 B.11.X.35175-35176.GP HP C Preprocessor (ANSI)
| ccom: HP92453-01 B.11.X.36086-36089-36092.GP HP C Compiler
| /usr/ccs/bin/ld: 92453-07 linker linker ld B.11.60 070209
and
| HP-UX td176 B.11.23 U ia64 1928826293 unlimited-user license
| Reading specs from /usr/local/lib/gcc/ia64-hp-hpux11.23/3.4.3/specs
| Total failed: 1 (as expected)
| Total passed: 219
still work to do for HP C on IA64
| tglaser@hephaistos:~ $ /usr/local/intel/cc/9.1.042/bin/icc -V
| Intel(R) C Compiler for 32-bit applications, Version 9.1 Build 20060706Z Package ID: l_cc_c_9.1.042
this one is muuuuch too verbose IMHO, _and_ it #defines __GNUC__ (eek)
any more either, and can make use of code sharing between detection
of sys_siglist and sys_signame (and the underscored variants); nuke
the now-useless signames.c file too (merge struct into histrap.c)
SIGABRT to SIGIOT (good), SIGCHLD to SIGCLD (necessary and reason),
SIGIO to SIGPOLL (the former also exists on mirbsd so okay); changes
on other OSes should be monitored by porters
car only slower, yes this is possible, and the resulting binary passes the
testsuite just fine), the definition of __RCSID() in <sys/cdefs.h> expands
to something with __attribute__((used)), which triggers a warning, because
__attribute__ in general is supported but the used attribute isn't. Thusly
always use our own strings and get rid of the MULTI_RCSID test (introduced
because __RCSID() on Darwin is inferiour).
Maybe we should fix <sys/cdefs.h> too? #ifdef __SUNPRO_C helps here.
it was #if solaris'd in R28, and the system I have access
on does declare it now (still Solaris 8)
this can be put back if anyone complains, of course.
on SuSE and causes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=408850
so I'll assume it's a gcc bug
thanks to Pascal “loki” Bleser (yaloki), darix, Martin Zobel-Helas, Steve
Langasek (vorlon) for tracking this bug down in two different instances
XXX u_int32_t is not ISO C99, but seems to work well enough
XXX if it fails anywhere, we'll see in the build logs
XXX apple doesn't have the standard uint32_t and API doesn't specify it
• sys_siglist_defn: rename to sys_siglist_decl as we're really checking
for the declaration in the headers; change wording to “check if … does
not need to be declared” since we don't need to declare if we don't use
• scan for arc4random, arc4random_push, confstr declarations too
• sh.h: confstr declaration is no longer #ifdef __sun__; sort
• mention Darwin failure in R29c, fix in -current
• also clean up core dump file
• on HP-UX 11i v2, <stdint.h> requires <stdarg.h> because it pulls in
a <wchar.h> generated from gcc's fixincludes… dunno, but it works…
• HP-UX 11i v2 on ia64 only works with -mlp64; the default seems to be
-milp32 which generates SIGBUS due to misalignment (due to optimisation?)
-> in theory, HP-UX works on both PA-RISC and IA64 in R29c
-> R29c doesn't contain support for AIX or Mac OSX though…
HP-UX td192 B.11.11 U 9000/800 1839940656 unlimited-user license
gcc version 3.4.2
@(#)MIRBSD KSH R29 2007/04/17
it apparently works, but there's no POSIX.pm, and the backspace
key acts as abort key (probably all things that can be fixed)
and have it return an API-correct const char *
• enhance and stylify comments
• a little KNF and simplifications
• #ifdef DEBUG: replace strchr and strstr with ucstrchr and ucstrstr
that take and return a non-const char *, and fix the violations
• new cstrchr, cstrstr (take and give const char *)
• new vstrchr, vstrstr (take const or not, give boolean value)
• new afreechk(x) = afreechv(x,x) = if (x1) afree(x2, ATEMP)
• new ksh_isdash(str) = (str != NULL) && !strcmp(str, "-")
• replace the only use of strrchr with inlined code to shrink
• minor man page fixes
• Minix 3 signames are autogenerated with gcc
• rename strlfun.c to strlcpy.c since we don't do strlcat(3) anyway,
only strlcpy(3), and shorten it
• dot.mkshrc: move MKSH=… down to the export line
to not disturb the PS1 visual impression ☺
• dot.mkshrc: Lstripcom(): optimise
• bump version
¹) side effect from creating API-correct cstrchr, cstrstr, etc.
uses goto so it must be better ☻
tested on mirbsd-current via both Makefile and Build.sh
o Each input character found in the array specified by
string1 is replaced by the character in the same rela-
tive position in the array specified by string2. When
the array specified by string2 is shorter that the one
specified by string1, the results are unspecified.
So give tr <everythingbutalphanum> _ the appropriate number of underscores.
* Also strip dashes from header names.
precedence over POSIX/SUSv3 stuff and requires libbsd-compat which is
something we don't desire; _GNU_SOURCE even in Linux libc5 always has
included _POSIX_C_SOURCE=2 and BSD functions since at least Feb 1995.
* sync GNU/kFreeBSD with GNU/Linux, it uses glibc2
First mentioned and second response on inquiry by Bastian "waldi" Blank
Thanks!
found on
Linux ecce 2.0.38 #1 Wed Jul 26 22:05:46 2000 i686 unknown
Reading specs from /usr/lib/gcc-lib/i386-linux/2.7.2.3/specs
gcc version 2.7.2.3
Note: during the entire compile, there are warnings like
| gcc: unrecognized option `-std=gnu99'
but these won't trigger -Werror since they are in the driver,
not in the front-end, so they are harmless, I guess. (I don't
know of a way to make them vanish, either.)
* "$e" and "echo" fixes for if the stuff begins with a -, and
quoting cleanup (where feasible, feel free to send diffs)
* cosmetics
I hereby name this baby "Mirtoconf".
side (I don't have capacities to scan 71711 files in MirOS for a
standards-compliance whack)
* copyright: mention CVS changelogs as place of contributors' name
and credit information, too
* check.t, sh.h: bump
until now, set it to '@'
* if LDSTATIC is '@' make it '-static' if MKSH_SMALL, '' otherwise
Yep, this might break, e.g. Darwin or Cygwin. But let's test that.
where we had 'noreturn' etc. but no '__noreturn__')
* Scan for __attribute__((bounded)) and __attribute__((used))
if we have __attribute__((noreturn))
* To be able to scan if certain attributes give warnings,
scan for -Werror with a simple programme which hopefully triggers none
* Convert __attribute__((unused)) to __unused, noreturn -> __dead
* Unify other attributes
* Clean up typography a little more
* 'sigseen' in Build.sh goes away
* Signal name existence is checked in this order:
have our own¹ -> sys_signame[] -> _sys_signame[] -> build our own²
* Signal description existence is checked in this order:
sys_siglist[] -> _sys_siglist[] -> strsignal() -> NULL³
¹ Predefined list of items, for operating systems where we
cannot build² them, i.e. Plan 9 and Minix 3 (e.g. no $CPP -dD)
² The usual cpp(1) stuff
³ Changed later, see below
* Make $CPP test dependent on $NEED_MKSH_SIGNAME (others can
be added here, this is not absolute)
* Make signal name list generation² dependent on $NEED_MKSH_SIGNAME
* Fix check if the generation worked
* Guarantee that sigtraps[*].name and sigtraps[*].mess are valid
C strings; this makes the code shorter *and* removes a few pos-
sible nil pointer dereferences
* Embed autoconf'd usages of sys_sig* / strsignal / mksh_sigpairs
into inittraps()
* Check for each signal 0<=i<=NSIG that
name is not NULL or "" -> replace with ("%d", i)
mess is not NULL or "" -> replace with ("Signal %d", i)
name does not start (case-insensitive) with "SIG" -> name += 3
* In gettrap(), fix check if signal name starts, case-sensitive
or case-insensitive, depending on need, with "SIG" (bug from millert@)
Other changes:
* Build.sh: ac_test[n]() are documented
* Build.sh: ac_test[n]() can have negative prereqs as well now
* Build.sh: use <<-'EOF' consistently
* bump patchlevel to today
* improve output readability
I wonder if I should use ANSI escapes to make the results
from the configuration bold… but then, this'd look worse
in e.g. mc or less. Suggestions?
@Benny: this is why I don't use GNU autoconf: writing configure.in
files is, supposedly, easy - but nobody teaches you which
changes you have to apply to your source files. Here I know.
XXX one of these uses a gcc extension, ok for now tho
* don't include <ctype.h> any more at all
* don't try nl_langinfo in small mode, just check locale
saves 171 .text, 4 .data, 256 .bss, 1 import
tested on Debian stale:
| Total failed: 1 (as expected)
| Total passed: 213
| tg@flyingfish:~/mk b $ uname -a
| Linux flyingfish 2.6.13.1-grsec-aurisp #1 Wed Sep 28 15:13:07 CEST 2005 i686 GNU/Linux
which failed for Han Boetes using zsh as user shell (to test). Now,
the code is integrated into Build.sh as-is, and Test.sh uses $SHELL
no longer either but the mksh just built, in the shebang line.
* mksh.1: rework prompt ($PS1) section, simplify example,
point to packaged dot.mkshrc example
* mksh.1: fix description of 'redraw' regarding redrawal
of prompts longer than one screen line
* all: bump version/date
(yeah, that's what you get from developing with a
16-bit MS-DOS(R) executable of your favourite text editor)
* lex.c, mksh.1: do not print the delimiting character for
not-to-be-counted character sequences (i.e. ANSI escapes)
in prompts any more, mostly because ASCII 01h is printable
on both Interix and Cygwin and I'm lazy
(this also fixes prompt width counting if a printable character
such as 'x' is used as delimiting character)
* lex.c: through printing the prompt character by character,
also print the delimited sequences if skipping, fixes some
prompt redrawal not honouring colours stuff while not totally
redrawing the entire prompt
* sync dot.mkshrc sample with FreeWRT r383
* add some stuff from src/etc/profile and contrib/samples/etc_profile
* sync the latter two with reality and shorten
* teach the user in the mksh installation instructions to install the sample
NB: the sample is also covered by the MirOS licence