Jens Staal dixit: > Apparently, by passing -L to Build.sh, ape/cc can build without a workaround.
That will build lksh, not mksh, which is an entirely different thing. But that means we know more closely which of the assertions fail(s): #ifndef MKSH_LEGACY_MODE /* the next assertion is probably not really needed */ cta(ari_is_4_char, sizeof(mksh_ari_t) == 4); /* but this is */ cta(ari_has_31_bit, 0 < (mksh_ari_t)(((((mksh_ari_t)1 << 15) << 15) - 1) * 2 + 1)); /* the next assertion is probably not really needed */ cta(uari_is_4_char, sizeof(mksh_uari_t) == 4); /* but the next three are; we REQUIRE unsigned integer wraparound */ cta(uari_has_31_bit, 0 < (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 2 + 1)); cta(uari_has_32_bit, 0 < (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 3)); cta(uari_wrap_32_bit, (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 3) > (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 4)); #endif This means that either – mksh_ari_t (typedef’d to int32_t which is most likely typedef’d to “signed int”) is not 4 chars wide, – mksh_ari_t is not at least 31 bit plus sign bit wide, – mksh_uari_t (same as mksh_ari_t except unsigned) is not 4 chars wide, – mksh_uari_t has less or more than 32 bits. > Does this mean that I should try to put in a test for "unknown" compiler on > Plan9 early in the script and trigger "legacy"? Absolutely not! > The gcc port on Plan9 can build without any modifications to Build.sh (except > the re-definitions for seteuid and setegid). Interesting. Try this, with both of them: ---------------------------------------------------------------->8 #include <stdio.h> #ifdef attempt1 #include <stdint.h> #endif #ifdef attempt2 typedef u_int32_t uint32_t; #endif #ifdef attempt3 typedef signed int int32_t; typedef unsigned int uint32_t; #endif typedef int32_t mksh_ari_t; typedef uint32_t mksh_uari_t; int main(void) { mksh_ari_t i; mksh_uari_t u, v; printf("sizes: %u %u\n", (unsigned)sizeof(mksh_ari_t), (unsigned)sizeof(mksh_uari_t)); i = (mksh_ari_t)(((((mksh_ari_t)1 << 15) << 15) - 1) * 2 + 1); printf("ari_has_31_bit: 0 < %X = %d\n", (unsigned)i, 0 < i); u = (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 2 + 1); printf("uari_has_31_bit: 0 < %X = %d\n", (unsigned)u, 0 < u); u = (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 3); printf("uari_has_32_bit: 0 < %X = %d\n", (unsigned)u, 0 < u); v = (mksh_uari_t)(((((mksh_uari_t)1 << 15) << 15) - 1) * 4 + 4); printf("uari_wrap_32_bit: %X > %X = %d\n", (unsigned)u, (unsigned)v, u > v); return (0); } ---------------------------------------------------------------->8 Define -Dattempt1 and, only if that doesn’t work, -Dattempt2 instead or even -Dattempt3. bye, //mirabilos -- In traditional syntax ' is ignored, but in c99 everything between two ' is handled as character constant. Therefore you cannot use ' in a preproces- sing file in c99 mode. -- Ragge No faith left in ISO C99, undefined behaviour, etc.