build: Simplify.

core: Make mes src/ c files separate compilation units.

* include/mes/constants.h: New file.
* include/mes/macros.h: New file.
* include/mes/mes.h: New file.
* src/gc.c: Update.
* src/hash.c: Update.
* src/lib.c: Update.
* src/math.c: Update.
* src/mes.c: Update.
* src/module.c: Update.
* src/posix.c: Update.
* src/reader.c: Update.
* src/string.c: Update.
* src/struct.c: Update.
* src/vector.c: Update.

    mes: Update datadir.

* src/mes.c (g_datadir): New global.
(open_boot): Rename from read_boot.
(read_boot): New function.
* mes/module/mes/boot-0.scm: Move from boot-0.scm.in
* configure: Update.
* configure.sh: Update.

    mescc: Create libraries from separate files.

* .gitignore: Update.
* build-aux/bootstrap-mes.sh: Remove.
* build-aux/bootstrap.sh.in: Remove.
* build-aux/build-guile.sh: Update.
* build-aux/build-mes.sh: Update.
* build-aux/build-scaffold.sh: New file.
* build-aux/build.sh.in: Update.
* build-aux/cc.sh: Update.
* build-aux/check-tcc.sh: Remove.
* build-aux/config.sh.in: New file.
* build-aux/config.sh: Remove.
* build-aux/install.sh.in: Update.
* build-aux/test-boot.sh: New file.
* build-aux/test-c.sh: New file.
* build-aux/test-driver: New file.
* build-aux/test-suite.sh: New file.
* build-aux/trace.sh: Update.
* build-aux/uninstall.sh.in: Update.
* configure: Update.
* configure.sh: Update.
* lib/linux/x86-mes-mescc/crt1.c: Move from lib/linux/x86-mes.
* lib/linux/x86-mes-mescc/mini.c: Likewise.
* lib/linux/x86_64-mes-mescc/crt1.c: Move from lib/linux/x86_64-mes.
* lib/linux/x86_64-mes-mescc/mini.c: Likewise.
* lib/linux/x86-mes-gcc/syscall.c: Rename from mes.c.
* lib/linux/x86-mes-mescc/syscall.c: Likewise.
* lib/linux/x86_64-mes-gcc/syscall.c: Likewise.
* lib/linux/x86_64-mes-mescc/syscall.c: Likewise.
* lib/mes/mes_open.c: Include config.h.
* lib/tests/stdio/70-printf-hello.c: Likewise.
* lib/tests/stdio/70-printf-simple.c: Likewise.
* scaffold/gc-test.sh: New file.
* simple.sh: Update.
This commit is contained in:
Jan Nieuwenhuizen 2019-06-08 15:36:22 +02:00
parent 3ef5212238
commit 5dc245e739
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
195 changed files with 3356 additions and 2719 deletions

8
.gitignore vendored
View file

@ -14,6 +14,7 @@
*.guile
*.guile-log
*.log
*.trs
*.mes-gcc
*.mes-gcc-o
*.mes-gcc-out
@ -140,12 +141,12 @@
/config.status
/pre-inst-env
/bootstrap.sh
/build.sh
/check.sh
/install.sh
/uninstall.sh
/mes/module/mes/boot-0.scm
/scripts/ar
/scripts/mescc.scm
/scripts/mescc
/doc/images/gcc-mesboot-graph.png
@ -156,3 +157,8 @@
/doc/web/
/lib/x86_64-mes/0exit-42
/lib/x86_64-mes/exit-42
/config.sh
/include/mes/config.h
/gcc-lib
/mescc-lib
/bin

View file

@ -87,7 +87,7 @@ src/${program_prefix}mes: build
clean:
git clean -dfx\
-e .config.make\
-e config.status\
-e config.sh\
-e GNUmakefile\
-e build.sh\
-e check.sh\
@ -95,7 +95,6 @@ clean:
-e uninstall.sh\
-e pre-inst-env\
-e scripts/mescc\
-e "mes"/module/mes/boot-0.scm\
#

View file

@ -1,101 +0,0 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
set -e
# FIXME?
#mes_program_prefix=boot-$arch-
mes_program_prefix=$program_prefix
trace "HEX2 0exit-42" $HEX2\
$HEX2FLAGS\
-f ${srcdest}lib/$mes_arch/elf$bits-0header.hex2\
-f ${srcdest}lib/$mes_arch/elf$bits-body-exit-42.hex2\
-f ${srcdest}lib/$mes_arch/elf-0footer.hex2\
--exec_enable\
-o lib/$mes_arch/${mes_program_prefix}0exit-42
trace "TEST lib/$mes_arch/${mes_program_prefix}0exit-42" echo lib/$mes_arch/${mes_program_prefix}0exit-42
{ set +e; lib/$mes_arch/${mes_program_prefix}0exit-42; r=$?; set -e; }
[ $r != 42 ] && echo " => $r" && exit 1
trace "HEX2 exit-42" $HEX2\
$HEX2FLAGS\
-f ${srcdest}lib/$mes_arch/elf$bits-header.hex2\
-f ${srcdest}lib/$mes_arch/elf$bits-body-exit-42.hex2\
-f ${srcdest}lib/$mes_arch/elf$bits-footer-single-main.hex2\
--exec_enable\
-o lib/$mes_arch/${mes_program_prefix}exit-42
trace "TEST lib/$mes_arch/${mes_program_prefix}exit-42" echo lib/$mes_arch/${mes_program_prefix}exit-42
{ set +e; lib/$mes_arch/${mes_program_prefix}exit-42; r=$?; set -e; }
[ $r != 42 ] && echo " => $r" && exit 1
mkdir -p lib/$mes_arch
trace "M1 crt1.S" $M1\
$M1FLAGS\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/crt1.S\
-o lib/$mes_arch/crt1.o
trace "M1 libc.S" $M1\
$M1FLAGS\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/libc.S\
-o lib/$mes_arch/libc.o
trace "M1 mes.S" $M1\
--LittleEndian\
--architecture x86\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/mes.S\
-o src/mes.o
trace "BLOOD_ELF mes.S" $BLOOD_ELF\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/mes.S\
-f $MES_SEED/$mes_arch/libc.S\
-o src/mes.S.blood-elf
trace "M1 mes.blood-elf" $M1\
--LittleEndian\
--architecture x86\
-f src/mes.S.blood-elf\
-o src/mes.o.blood-elf
trace "HEX2 mes.o" $HEX2\
$HEX2FLAGS\
-f ${srcdest}lib/$mes_arch/elf$bits-header.hex2\
-f lib/$mes_arch/crt1.o\
-f lib/$mes_arch/libc.o\
-f src/mes.o\
-f src/mes.o.blood-elf\
--exec_enable\
-o src/${mes_program_prefix}mes
#cp src/${mes_program_prefix}mes src/${program_prefix}mes
trace "M1 libc+tcc.S" $M1\
$M1FLAGS\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/libc+tcc.S\
-o lib/$mes_arch/libc+tcc.o
trace "M1 libc+gnu.S" $M1\
$M1FLAGS\
-f ${srcdest}lib/$mes_arch/$arch.M1\
-f $MES_SEED/$mes_arch/libc+gnu.S\
-o lib/$mes_arch/libc+gnu.o

View file

@ -1,70 +0,0 @@
#! @SHELL@
set -e
if [ "$V" = 1 -o "$V" = 2 ]; then
set -x
fi
MES_ARENA=${MES_ARENA-100000000}
MES_MAX_ARENA=${MES_MAX_ARENA-100000000}
MES_STACK=${MES_STACK-500000}
hex2 --LittleEndian --architecture x86 --BaseAddress 0x1000000 -f lib/x86-mes/elf32-0header.hex2 -f lib/x86-mes/elf32-body-exit-42.hex2 -f lib/x86-mes/elf-0footer.hex2 --exec_enable -o lib/x86-mes/0exit-42
hex2 --LittleEndian --architecture x86 --BaseAddress 0x1000000 -f lib/x86-mes/elf32-header.hex2 -f lib/x86-mes/elf32-body-exit-42.hex2 -f lib/x86-mes/elf32-footer-single-main.hex2 --exec_enable -o lib/x86-mes/exit-42
M1 --LittleEndian --architecture x86 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/crt1.S -o lib/x86-mes/crt1.o
M1 --LittleEndian --architecture x86 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/libc.S -o lib/x86-mes/libc.o
M1 --LittleEndian --architecture x86 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/mes.S -o src/mes.o
blood-elf -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/mes.S -f @MES_SEED@/x86-mes/libc.S -o src/mes.S.blood-elf
M1 --LittleEndian --architecture x86 -f src/mes.S.blood-elf -o src/mes.o.blood-elf
hex2 --LittleEndian --architecture x86 --BaseAddress 0x1000000 -f lib/x86-mes/elf32-header.hex2 -f lib/x86-mes/crt1.o -f lib/x86-mes/libc.o -f src/mes.o -f src/mes.o.blood-elf --exec_enable -o src/mes
M1 --LittleEndian --architecture x86 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/libc+tcc.S -o lib/x86-mes/libc+tcc.o
M1 --LittleEndian --architecture x86 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/libc+gnu.S -o lib/x86-mes/libc+gnu.o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/linux/x86-mes/crt1.o lib/linux/x86-mes/crt1.c
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/libc-mini.x86-mes-o lib/libc-mini.c
mv lib/libc-mini.x86-mes-S lib/x86-mes/libc-mini.S
mv lib/libc-mini.x86-mes-o lib/x86-mes/libc-mini.o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/libc.x86-mes-o lib/libc.c
mv lib/libc.x86-mes-S lib/x86-mes/libc.S
mv lib/libc.x86-mes-o lib/x86-mes/libc.o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/libc+tcc.x86-mes-o lib/libc+tcc.c
mv lib/libc+tcc.x86-mes-S lib/x86-mes/libc+tcc.S
mv lib/libc+tcc.x86-mes-o lib/x86-mes/libc+tcc.o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/libc+gnu.x86-mes-o lib/libc+gnu.c
mv lib/libc+gnu.x86-mes-S lib/x86-mes/libc+gnu.S
mv lib/libc+gnu.x86-mes-o lib/x86-mes/libc+gnu.o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/main.x86-mes-o scaffold/main.c
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/x86-mes-main scaffold/main.x86-mes-o
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/hello.x86-mes-o scaffold/hello.c
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/x86-mes-hello scaffold/hello.x86-mes-o -l c-mini
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/argv.x86-mes-o scaffold/argv.c
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/x86-mes-argv scaffold/argv.x86-mes-o -l c-mini
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/tests/stdlib/50-malloc.x86-mes-o lib/tests/stdlib/50-malloc.c
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o lib/tests/posix/50-getenv.x86-mes-o lib/tests/posix/50-getenv.c
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/micro-mes.x86-mes-o scaffold/micro-mes.c
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/x86-mes-micro-mes scaffold/micro-mes.x86-mes-o -l c
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/tiny-mes.x86-mes-o scaffold/tiny-mes.c
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o scaffold/x86-mes-tiny-mes scaffold/tiny-mes.x86-mes-o -l c
@GUILE@ -e main -L module scripts/mescc.scm -c -D 'VERSION="@VERSION@"' -D 'MODULEDIR="@moduledir@"' -D 'PREFIX="@prefix@"' -I . -I lib -I include -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o src/mes.x86-mes-o src/mes.c
cp src/mes.x86-mes-S src/mes.S
@GUILE@ -e main -L module scripts/mescc.scm -v -g -L lib/linux/x86-mes -L lib/linux -L lib/x86-mes -L lib -L @MES_SEED@ -o src/x86-mes-mes src/mes.x86-mes-o -l c
cp src/x86-mes-mes src/mes

View file

@ -18,37 +18,34 @@
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
if [ ! "$config_status" ]; then
. ./config.status
fi
set -e
. ./config.sh
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
GUILE_AUTO_COMPILE=0
set -e
SCM_FILES="
${srcdest}module/mes/getopt-long.scm
${srcdest}module/mes/guile.scm
${srcdest}module/mes/misc.scm
${srcdest}module/mes/test.scm
${srcdest}module/mescc/M1.scm
${srcdest}module/mescc/as.scm
${srcdest}module/mescc/bytevectors.scm
${srcdest}module/mescc/compile.scm
${srcdest}module/mescc/i386/as.scm
${srcdest}module/mescc/i386/info.scm
${srcdest}module/mescc/x86_64/as.scm
${srcdest}module/mescc/x86_64/info.scm
${srcdest}module/mescc/info.scm
${srcdest}module/mescc.scm
${srcdest}module/mescc/mescc.scm
${srcdest}module/mescc/preprocess.scm
module/mes/getopt-long.scm
module/mes/guile.scm
module/mes/misc.scm
module/mes/test.scm
module/mescc/M1.scm
module/mescc/as.scm
module/mescc/bytevectors.scm
module/mescc/compile.scm
module/mescc/i386/as.scm
module/mescc/i386/info.scm
module/mescc/x86_64/as.scm
module/mescc/x86_64/info.scm
module/mescc/info.scm
module/mescc.scm
module/mescc/mescc.scm
module/mescc/preprocess.scm
"
SCRIPTS="
${srcdest}build-aux/mes-snarf.scm
build-aux/mes-snarf.scm
"
export host=$($GUILE -c "(display %host-type)")
@ -61,7 +58,8 @@ fi
for i in $SCM_FILES $SCRIPTS; do
b=$(basename $i)
go=${i%%.scm}.go
if [ $i -nt $go ]; then
trace "GUILEC $i" $GUILD compile -L ${srcdest}module -L ${srcdest}build-aux -L ${srcdest}scripts -o $go $i
f=${srcdest}$i
if test $f -nt $go; then
trace "GUILEC $f" $GUILD compile -L ${srcdest}module -L ${srcdest}build-aux -L ${srcdest}scripts -o $go $f
fi
done

402
build-aux/build-lib.sh Executable file
View file

@ -0,0 +1,402 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
set -u
V=${V-1}
if [ "$V" = 2 ]; then
set -x
fi
. ./config.sh
. ${srcdest}build-aux/trace.sh
. ${srcdest}build-aux/cc.sh
trap 'test -f .log && cat .log' EXIT
srcdest=${srcdest-}
libc_mini_SOURCES="
lib/mes/eputs.c
lib/mes/oputs.c
"
if test $mes_libc = mes; then
libc_mini_SOURCES="$libc_mini_SOURCES
lib/posix/write.c
lib/string/strlen.c
lib/stdlib/puts.c
lib/stdlib/exit.c
lib/$mes_kernel/$mes_cpu-mes-$compiler/mini.c
"
fi
libmes_SOURCES="
$libc_mini_SOURCES
lib/mes/itoa.c
lib/mes/ltoa.c
lib/mes/ltoab.c
lib/mes/ultoa.c
lib/mes/utoa.c
lib/mes/eputc.c
lib/mes/fdgetc.c
lib/mes/fdputc.c
lib/mes/fdputs.c
lib/mes/fdungetc.c
lib/mes/mes_open.c
lib/mes/ntoab.c
lib/mes/oputc.c
"
if test $mes_libc = mes; then
libmes_SOURCES="$libmes_SOURCES
lib/stdlib/atoi.c
lib/mes/abtol.c
lib/ctype/isdigit.c
lib/ctype/isnumber.c
lib/ctype/isspace.c
lib/ctype/isxdigit.c
"
fi
libc_SOURCES="
$libmes_SOURCES
lib/mes/__assert_fail.c
lib/mes/__mes_debug.c
lib/posix/execv.c
lib/posix/getenv.c
lib/posix/isatty.c
lib/posix/setenv.c
lib/posix/wait.c
lib/stdio/fgetc.c
lib/stdio/fputc.c
lib/stdio/fputs.c
lib/stdio/getc.c
lib/stdio/getchar.c
lib/stdio/putc.c
lib/stdio/putchar.c
lib/stdio/ungetc.c
lib/stdlib/free.c
lib/stdlib/malloc.c
lib/stdlib/realloc.c
lib/string/memchr.c
lib/string/memcmp.c
lib/string/memcpy.c
lib/string/memset.c
lib/string/strcmp.c
lib/string/strcpy.c
lib/string/strncmp.c
"
if test $mes_kernel = linux; then
libc_SOURCES="$libc_SOURCES
lib/linux/access.c
lib/linux/brk.c
lib/linux/chmod.c
lib/linux/clock_gettime.c
lib/linux/dup.c
lib/linux/dup2.c
lib/linux/execve.c
lib/linux/fork.c
lib/linux/fsync.c
lib/linux/getcwd.c
lib/linux/gettimeofday.c
lib/linux/ioctl.c
lib/linux/open.c
lib/linux/read.c
lib/linux/time.c
lib/linux/unlink.c
lib/linux/waitpid.c
lib/linux/$mes_cpu-mes-$compiler/syscall.c
"
fi
libtcc1_SOURCES="
lib/libtcc1.c
"
libc_tcc_SOURCES="
$libc_SOURCES
lib/ctype/islower.c
lib/ctype/isupper.c
lib/ctype/tolower.c
lib/ctype/toupper.c
lib/mes/search-path.c
lib/posix/execvp.c
lib/stdio/fclose.c
lib/stdio/fdopen.c
lib/stdio/ferror.c
lib/stdio/fflush.c
lib/stdio/fopen.c
lib/stdio/fprintf.c
lib/stdio/fread.c
lib/stdio/fseek.c
lib/stdio/ftell.c
lib/stdio/fwrite.c
lib/stdio/printf.c
lib/stdio/remove.c
lib/stdio/snprintf.c
lib/stdio/sprintf.c
lib/stdio/sscanf.c
lib/stdio/vfprintf.c
lib/stdio/vprintf.c
lib/stdio/vsnprintf.c
lib/stdio/vsprintf.c
lib/stdio/vsscanf.c
lib/stdlib/calloc.c
lib/stdlib/qsort.c
lib/stdlib/strtof.c
lib/stdlib/strtol.c
lib/stdlib/strtold.c
lib/stdlib/strtoll.c
lib/stdlib/strtoul.c
lib/stdlib/strtoull.c
lib/string/memmem.c
lib/string/memmove.c
lib/string/strcat.c
lib/string/strchr.c
lib/string/strlwr.c
lib/string/strncpy.c
lib/string/strrchr.c
lib/string/strstr.c
lib/string/strupr.c
lib/stub/sigaction.c
lib/stub/ldexp.c
lib/stub/mprotect.c
lib/stub/localtime.c
lib/stub/sigemptyset.c
lib/ctype/islower.c
lib/ctype/isupper.c
lib/ctype/tolower.c
lib/ctype/toupper.c
lib/mes/search-path.c
lib/posix/execvp.c
lib/stdio/fclose.c
lib/stdio/fdopen.c
lib/stdio/ferror.c
lib/stdio/fflush.c
lib/stdio/fopen.c
lib/stdio/fprintf.c
lib/stdio/fread.c
lib/stdio/fseek.c
lib/stdio/ftell.c
lib/stdio/fwrite.c
lib/stdio/printf.c
lib/stdio/remove.c
lib/stdio/snprintf.c
lib/stdio/sprintf.c
lib/stdio/sscanf.c
lib/stdio/vfprintf.c
lib/stdio/vprintf.c
lib/stdio/vsnprintf.c
lib/stdio/vsprintf.c
lib/stdio/vsscanf.c
lib/stdlib/calloc.c
lib/stdlib/qsort.c
lib/stdlib/strtof.c
lib/stdlib/strtol.c
lib/stdlib/strtold.c
lib/stdlib/strtoll.c
lib/stdlib/strtoul.c
lib/stdlib/strtoull.c
lib/string/memmem.c
lib/string/memmove.c
lib/string/strcat.c
lib/string/strchr.c
lib/string/strlwr.c
lib/string/strncpy.c
lib/string/strrchr.c
lib/string/strstr.c
lib/string/strupr.c
lib/stub/sigaction.c
lib/stub/ldexp.c
lib/stub/mprotect.c
lib/stub/localtime.c
lib/stub/sigemptyset.c
xslib/stub/strtod.c
lib/$mes_cpu-mes-$compiler/setjmp.c
"
if test $mes_kernel = linux; then
libc_tcc_SOURCES="$libc_tcc_SOURCES
lib/linux/close.c
lib/linux/lseek.c
lib/linux/rmdir.c
lib/linux/stat.c
"
fi
libc_gnu_SOURCES="
$libc_tcc_SOURCES
lib/ctype/isalnum.c
lib/ctype/isalpha.c
lib/ctype/isascii.c
lib/ctype/iscntrl.c
lib/ctype/isprint.c
lib/ctype/ispunct.c
lib/dirent/__getdirentries.c
lib/dirent/closedir.c
lib/dirent/opendir.c
lib/dirent/readdir.c
lib/math/fabs.c
lib/mes/fdgets.c
lib/posix/alarm.c
lib/posix/execl.c
lib/posix/mktemp.c
lib/posix/raise.c
lib/posix/sbrk.c
lib/posix/sleep.c
lib/posix/unsetenv.c
lib/stdio/clearerr.c
lib/stdio/feof.c
lib/stdio/fgets.c
lib/stdio/fileno.c
lib/stdio/freopen.c
lib/stdio/perror.c
lib/stdlib/__exit.c
lib/stdlib/abort.c
lib/stdlib/abs.c
lib/stdlib/alloca.c
lib/stdlib/atexit.c
lib/stdlib/atol.c
lib/stdlib/mbstowcs.c
lib/string/bcmp.c
lib/string/bcopy.c
lib/string/bzero.c
lib/string/index.c
lib/string/rindex.c
lib/string/strcspn.c
lib/string/strdup.c
lib/string/strerror.c
lib/string/strncat.c
lib/string/strpbrk.c
lib/string/strspn.c
lib/stub/__cleanup.c
lib/stub/bsearch.c
lib/stub/chown.c
lib/stub/ctime.c
lib/stub/fpurge.c
lib/stub/freadahead.c
lib/stub/frexp.c
lib/stub/getlogin.c
lib/stub/getpwnam.c
lib/stub/getpwuid.c
lib/stub/gmtime.c
lib/stub/pclose.c
lib/stub/popen.c
lib/stub/rand.c
lib/stub/setbuf.c
lib/stub/setlocale.c
lib/stub/setvbuf.c
lib/stub/sigaddset.c
lib/stub/sigblock.c
lib/stub/sigdelset.c
lib/stub/sigsetmask.c
lib/stub/strftime.c
lib/stub/sys_siglist.c
lib/stub/system.c
lib/stub/times.c
lib/stub/ttyname.c
lib/stub/umask.c
lib/stub/utime.c
"
if test $mes_kernel = linux; then
libc_gnu_SOURCES="$libc_gnu_SOURCES
lib/linux/chdir.c
lib/linux/fcntl.c
lib/linux/fstat.c
lib/linux/getdents.c
lib/linux/getegid.c
lib/linux/geteuid.c
lib/linux/getgid.c
lib/linux/getpid.c
lib/linux/getppid.c
lib/linux/getrusage.c
lib/linux/getuid.c
lib/linux/kill.c
lib/linux/link.c
lib/linux/lstat.c
lib/linux/mkdir.c
lib/linux/nanosleep.c
lib/linux/pipe.c
lib/linux/rename.c
lib/linux/setgid.c
lib/linux/settimer.c
lib/linux/setuid.c
lib/linux/signal.c
lib/linux/sigprogmask.c
"
fi
mkdir -p $mes_cpu-mes
compile lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c
cp crt1.o $mes_cpu-mes
if test -e crt1.s; then
cp crt1.s $mes_cpu-mes
fi
archive libc-mini.a $libc_mini_SOURCES
cp libc-mini.a $mes_cpu-mes
if test -e libc-mini.S; then
cp libc-mini.S $mes_cpu-mes
fi
archive libmes.a $libmes_SOURCES
cp libmes.a $mes_cpu-mes
if test -e libmes.S; then
cp libmes.S $mes_cpu-mes
fi
archive libc.a $libc_SOURCES
cp libc.a $mes_cpu-mes
if test -e libc.S; then
cp libc.S $mes_cpu-mes
fi
archive libc+tcc.a $libc_tcc_SOURCES
cp libc+tcc.a $mes_cpu-mes
if test -e libc+tcc.S; then
cp libc+tcc.S $mes_cpu-mes
fi
if $courageous; then
exit 0
fi
archive libc+gnu.a $libc_gnu_SOURCES
cp libc+gnu.a $mes_cpu-mes
if test -e libc+gnu.S; then
cp libc+gnu.S $mes_cpu-mes
fi
archive libtcc1.a $libtcc1_SOURCES
cp libtcc1.a $mes_cpu-mes
if test -e libtcc1.S; then
cp libtcc1.S $mes_cpu-mes
fi
archive libgetopt.a lib/posix/getopt.c
cp libgetopt.a $mes_cpu-mes
if test -e libgetopt.S; then
cp libgetopt.S $mes_cpu-mes
fi

View file

@ -1,7 +1,7 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -19,68 +19,39 @@
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
set -u
if [ ! "$config_status" ]; then
. ./config.status
V=${V-1}
if [ "$V" = 2 ]; then
set -x
fi
. ${srcdest}build-aux/config.sh
. ./config.sh
. ${srcdest}build-aux/trace.sh
. ${srcdest}build-aux/cc.sh
[ "$mes_p" ] && (program_prefix= compile lib/linux/$mes_arch/crt1)
[ "$mes_p" -a ! "$gcc_p" ] && cp -f lib/linux/$mes_arch/crt1.S lib/$mes_arch/crt1.S
[ "$mes_p" -a ! "$gcc_p" ] && cp -f lib/linux/$mes_arch/crt1.o lib/$mes_arch/crt1.o
trap 'test -f .log && cat .log' EXIT
[ ! "$mesc_p" -a ! "$with_glibc_p" ] && (program_prefix= compile lib/linux/$mes_arch/crt0)
[ "$mes_p" -a "$gcc_p" ] && (program_prefix= compile lib/linux/$mes_arch/crti)
[ "$mes_p" -a "$gcc_p" ] && (program_prefix= compile lib/linux/$mes_arch/crtn)
srcdest=${srcdest-}
mes_sources="
src/gc.c
src/hash.c
src/lib.c
src/math.c
src/mes.c
src/module.c
src/posix.c
src/reader.c
src/string.c
src/struct.c
src/vector.c
"
[ ! "$mes_p" -a ! "$mesc_p" ] && compile lib/libmes
[ ! "$mes_p" -a ! "$mesc_p" ] && archive lib/libmes
[ "$mes_p" ] && compile lib/libc-mini
[ "$mes_p" ] && archive lib/libc-mini
[ "$mes_p" ] && compile lib/libc
[ "$mes_p" ] && archive lib/libc
[ "$mes_p" ] && compile lib/libc+tcc
[ "$mes_p" ] && archive lib/libc+tcc
[ "$mes_p" ] && compile lib/libc+gnu
[ "$mes_p" ] && archive lib/libc+gnu
[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libtcc1
[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libtcc1
[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libg
[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libg
[ "$mes_p" -a ! "$mesc_p" ] && compile lib/libgetopt
[ "$mes_p" -a ! "$mesc_p" ] && archive lib/libgetopt
compile scaffold/main
(libc= link scaffold/main)
compile scaffold/hello
(libc="-l c-mini" link scaffold/hello)
compile scaffold/argv
(libc="-l c-mini" link scaffold/argv)
[ "$mes_p" ] && compile lib/tests/stdlib/50-malloc
[ "$mes_p" ] && link lib/tests/stdlib/50-malloc
[ "$mes_p" ] && compile lib/tests/posix/50-getenv
[ "$mes_p" ] && link lib/tests/posix/50-getenv
[ "$mes_p" ] && compile scaffold/micro-mes
[ "$mes_p" ] && link scaffold/micro-mes
[ "$mes_p" ] && compile scaffold/tiny-mes
[ "$mes_p" ] && link scaffold/tiny-mes
compile src/mes
for c in $mes_sources; do
compile $c
done
if test $mes_libc = system; then
LIBS=-lmes
fi
link src/mes

75
build-aux/build-scaffold.sh Executable file
View file

@ -0,0 +1,75 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
set -u
V=${V-1}
if [ "$V" = 2 ]; then
set -x
fi
. ./config.sh
. ${srcdest}build-aux/trace.sh
if $courageous; then
echo "Applying courage"
set +e
fi
case "$mes_cpu" in
x86_64)
stage0_cpu=amd64;;
x86)
stage0_cpu=x86;;
*)
stage0_cpu=$mes_cpu;;
esac
trace "HEX2 0exit-42.hex2" $HEX2\
--LittleEndian\
--architecture $stage0_cpu\
--BaseAddress 0x1000000\
-f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0header.hex2\
-f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2\
-f ${srcdest}lib/$mes_cpu-mes/elf-0footer.hex2\
--exec_enable\
-o 0exit-42
trace "TEST 0exit-42"
{ set +e; ./0exit-42; r=$?; set -e; }
[ $r != 42 ] && echo " => $r"
[ $r == 42 ]
trace "HEX2 exit-42.hex2" $HEX2\
--LittleEndian\
--architecture $stage0_cpu\
--BaseAddress 0x1000000\
-f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-header.hex2\
-f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2\
-f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\
--exec_enable\
-o exit-42
trace "TEST exit-42"
{ set +e; ./exit-42; r=$?; set -e; }
[ $r != 42 ] && echo " => $r"
[ $r == 42 ]

View file

@ -1,7 +1,7 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -20,34 +20,128 @@
set -e
. ./config.status
. ${srcdest}build-aux/config.sh
if test "$1" = "help"; then
cat <<EOF
Run:
./build.sh to build mes
./check.sh to check mes
./install.sh to install mes
EOF
exit 0
fi
if [ -n "$GUILE" -a "$GUILE" != true ]; then
if test "$V" = 2; then
set -x
fi
set -u
. ./config.sh
if $courageous; then
echo "Applying courage"
set +e
fi
sh ${srcdest}build-aux/build-scaffold.sh
if test -n "$GUILE" -a "$GUILE" != true; then
sh ${srcdest}build-aux/build-guile.sh
fi
if [ "$gcc_p$tcc_p" ]; then
sh ${srcdest}build-aux/build-mes.sh
elif [ -d "$MES_SEED" ]; then
sh ${srcdest}build-aux/bootstrap-mes.sh
debug=
#debug=-g
CFLAGS="
$debug
"
if test $mes_libc = mes; then
CFLASG="$CFLAGS
-nostdinc
-nostdlib
-fno-builtin
"
fi
## FIXME: remove this and have user configure/build/install for each compiler?
unset CFLAGS CPPFLAGS LDFLAGS gcc_p tcc_p with_glibc_p
MES=guile
mesc_p=1
mes_p=1
mes_arch=x86-mes
program_prefix=$mes_arch-
CC="./pre-inst-env mescc"
CPPFLAGS="
-D HAVE_CONFIG_H=1
-I ../include
-I ${srcdir}/../include
-I ${srcdir}/../include/$mes_kernel/$mes_cpu
"
sh ${srcdest}build-aux/build-mes.sh
cp src/${program_prefix}mes src/mes
if [ "$arch" = x86_64 ]; then
MES_CFLAGS='-m 64'
mes_arch=x86_64-mes
program_prefix=$mes_arch-
sh ${srcdest}build-aux/build-mes.sh
LDFLAGS="
$debug
-L .
"
if test $mes_libc = mes; then
LDFLAGS="$LDFLAGS
-nostdlib
"
fi
LIBS=-lc
export CFLAGS
export CPPFLAGS
export LDFLAGS
export LIBS
if test $compiler = gcc; then
(
mkdir -p gcc-lib
cp config.sh gcc-lib
cd gcc-lib
if test -z "$srcdest"; then
srcdest=../
srcdir=../
fi
CPPFLAGS="
-D HAVE_CONFIG_H=1
-I include
-I ${srcdest}include
-I ${srcdest}include/$mes_kernel/$mes_cpu
"
sh ${srcdest}build-aux/build-lib.sh
cp crt1.o ..
)
fi
(
if test $compiler = gcc; then
LDFLAGS="$LDFLAGS
-L gcc-lib
"
fi
CPPFLAGS="
-D HAVE_CONFIG_H=1
-I include
-I ${srcdest}include
-I ${srcdest}include/$mes_kernel/$mes_cpu
"
sh ${srcdest}build-aux/build-mes.sh
)
(
mkdir -p mescc-lib
cp config.sh mescc-lib
cd mescc-lib
sed -i s,mes_libc=system,mes_libc=mes, config.sh
mkdir -p include/mes
cp -p ../include/mes/config.h include/mes/config.h
sed -i 's,#define SYSTEM_LIBC 1,#undef SYSTEM_LIBC,' include/mes/config.h
if test -z "$srcdest"; then
srcdest=../
srcdir=../
fi
CPPFLAGS="
-D HAVE_CONFIG_H=1
-I include
-I ${srcdest}include
-I ${srcdest}include/$mes_kernel/$mes_cpu
"
compiler=mescc
AR="${srcdest}pre-inst-env ar"
CC="${srcdest}pre-inst-env mescc -m $mes_bits"
sh ${srcdest}build-aux/build-lib.sh
)

View file

@ -1,5 +1,5 @@
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -16,32 +16,41 @@
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
objects=
compile () {
flags=
[ "$mesc_p" ] && flags="$LDFLAGS $MES_CFLAGS"
trace "CC $1.c" $CC -c $CPPFLAGS $CFLAGS $flags -o "$1".${program_prefix}o "${srcdest}$1".c
}
archive () {
l=$1
shift
objects=$(for i in $@; do echo $i.${program_prefix}o; done)
[ -z "$objects" ] && objects=$l.${program_prefix}o
out=$(dirname "$l")/$mes_arch/$(basename "$l").a
d=$(dirname $out)
mkdir -p $d
if [ "$mesc_p" ]; then
trace "AR $l.a" mv $l.${program_prefix}o $(dirname $l)/$mes_arch/$(basename $l).o\
&& mv $l.${program_prefix}S $(dirname $l)/$mes_arch/$(basename $l).S
else
trace "AR $l.a" $AR cr $out $objects\
&& mv $objects $d
c=${srcdest}$1
b=$(basename $c .c)
o=$b.o
objects="$objects $o"
if test $c -nt $o; then
trace "CC $c" $CC -c $CPPFLAGS $CFLAGS -o $o $c
$CC -c $CPPFLAGS $CFLAGS -o $o $c
fi
}
link () {
lib=$libc
[ "$with_glibc_p" ] && lib='-l mes'
out=$(dirname "$1")/${program_prefix}$(basename "$1")
trace "CCLD $1" $CC $CFLAGS $LDFLAGS -o" $out" $crt1 "$1".${program_prefix}o $2 $lib
archive () {
archive=$1
shift
sources="$@"
objects=
for c in $sources; do
b=$(basename $c .c)
o=$b.o
compile $c
done
trace "AR $archive" $AR crD $archive $objects
objects=
}
link () {
out=$1
d=$(dirname $out)
mkdir -p $d
if test $mes_libc = system; then
crt1=
else
crt1=crt1.o
fi
trace "CCLD $out" $CC $CFLAGS $LDFLAGS -o $out $crt1 $objects $LIBS
objects=
}

View file

@ -1,7 +1,7 @@
#! /bin/bash
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -19,120 +19,104 @@
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
. ./config.sh
set -u
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
TESTS="
tests="
scaffold/boot/00-zero.scm
scaffold/boot/01-true.scm
scaffold/boot/02-symbol.scm
scaffold/boot/03-string.scm
scaffold/boot/04-quote.scm
scaffold/boot/05-list.scm
scaffold/boot/06-tick.scm
scaffold/boot/07-if.scm
scaffold/boot/08-if-if.scm
00-zero.scm
01-true.scm
02-symbol.scm
03-string.scm
04-quote.scm
05-list.scm
06-tick.scm
07-if.scm
08-if-if.scm
scaffold/boot/10-cons.scm
scaffold/boot/11-list.scm
scaffold/boot/11-vector.scm
scaffold/boot/12-car.scm
scaffold/boot/13-cdr.scm
scaffold/boot/14-exit.scm
scaffold/boot/15-display.scm
10-cons.scm
11-list.scm
11-vector.scm
12-car.scm
13-cdr.scm
14-exit.scm
15-display.scm
scaffold/boot/16-if-eq-quote.scm
16-if-eq-quote.scm
scaffold/boot/17-memq.scm
scaffold/boot/17-memq-keyword.scm
scaffold/boot/17-string-equal.scm
scaffold/boot/17-equal2.scm
scaffold/boot/17-string-append.scm
scaffold/boot/17-open-input-string.scm
17-memq.scm
17-memq-keyword.scm
17-string-equal.scm
17-equal2.scm
17-string-append.scm
17-open-input-string.scm
scaffold/boot/20-define.scm
scaffold/boot/20-define-quoted.scm
scaffold/boot/20-define-quote.scm
20-define.scm
20-define-quoted.scm
20-define-quote.scm
scaffold/boot/21-define-procedure.scm
scaffold/boot/22-define-procedure-2.scm
scaffold/boot/23-begin.scm
scaffold/boot/24-begin-define.scm
scaffold/boot/25-begin-define-2.scm
scaffold/boot/26-begin-define-later.scm
scaffold/boot/27-lambda-define.scm
scaffold/boot/28-define-define.scm
scaffold/boot/29-lambda-define.scm
scaffold/boot/2a-lambda-lambda.scm
scaffold/boot/2b-define-lambda.scm
scaffold/boot/2c-define-lambda-recurse.scm
scaffold/boot/2d-define-lambda-set.scm
scaffold/boot/2d-compose.scm
scaffold/boot/2e-define-first.scm
scaffold/boot/2f-define-second.scm
scaffold/boot/2f-define-second-lambda.scm
scaffold/boot/2g-vector.scm
21-define-procedure.scm
22-define-procedure-2.scm
23-begin.scm
24-begin-define.scm
25-begin-define-2.scm
26-begin-define-later.scm
27-lambda-define.scm
28-define-define.scm
29-lambda-define.scm
2a-lambda-lambda.scm
2b-define-lambda.scm
2c-define-lambda-recurse.scm
2d-define-lambda-set.scm
2d-compose.scm
2e-define-first.scm
2f-define-second.scm
2f-define-second-lambda.scm
2g-vector.scm
scaffold/boot/30-capture.scm
scaffold/boot/31-capture-define.scm
scaffold/boot/32-capture-modify-close.scm
scaffold/boot/32-capture-modify-close.scm
scaffold/boot/33-procedure-override-close.scm
scaffold/boot/34-cdr-override-close.scm
scaffold/boot/35-closure-modify.scm
scaffold/boot/36-closure-override.scm
scaffold/boot/37-closure-lambda.scm
scaffold/boot/38-simple-format.scm
scaffold/boot/39-global-define-override.scm
scaffold/boot/3a-global-define-lambda-override.scm
30-capture.scm
31-capture-define.scm
32-capture-modify-close.scm
32-capture-modify-close.scm
33-procedure-override-close.scm
34-cdr-override-close.scm
35-closure-modify.scm
36-closure-override.scm
37-closure-lambda.scm
38-simple-format.scm
39-global-define-override.scm
3a-global-define-lambda-override.scm
scaffold/boot/40-define-macro.scm
scaffold/boot/41-when.scm
scaffold/boot/42-if-when.scm
scaffold/boot/43-or.scm
scaffold/boot/44-or-if.scm
scaffold/boot/45-pass-if.scm
scaffold/boot/46-report.scm
scaffold/boot/47-pass-if-eq.scm
scaffold/boot/48-let.scm
scaffold/boot/49-macro-override.scm
scaffold/boot/4a-define-macro-define-macro.scm
scaffold/boot/4b-define-macro-define.scm
scaffold/boot/4c-quasiquote.scm
scaffold/boot/4d-let-map.scm
scaffold/boot/4e-let-global.scm
scaffold/boot/4f-string-split.scm
40-define-macro.scm
41-when.scm
42-if-when.scm
43-or.scm
44-or-if.scm
45-pass-if.scm
46-report.scm
47-pass-if-eq.scm
48-let.scm
49-macro-override.scm
4a-define-macro-define-macro.scm
4b-define-macro-define.scm
4c-quasiquote.scm
4d-let-map.scm
4e-let-global.scm
4f-string-split.scm
50-string-append.scm
50-string-join.scm
50-primitive-load.scm
51-module.scm
52-define-module.scm
53-closure-display.scm
60-let-syntax.scm
scaffold/boot/50-keyword.scm
scaffold/boot/50-make-string.scm
scaffold/boot/50-string-join.scm
scaffold/boot/50-primitive-load.scm
scaffold/boot/53-closure-display.scm
scaffold/boot/60-let-syntax.scm
scaffold/boot/call-cc.scm
scaffold/boot/memory.scm
scaffold/boot/numbers.scm
"
for i in $tests; do
echo -n $i
if [ ! -f scaffold/boot/$i ]; then
echo ' [SKIP]'
continue;
fi
x=$(
if [ "$MES" = guile -o "$(basename $MES)" = guile ]; then
trace "TEST $i.guile" $GUILE -L ${srcdest}module -C module -L . <(echo '(use-modules (mes guile))'; cat scaffold/boot/$i)
elif [ -z "${i/5[0-9]-*/}" ]; then
cat scaffold/boot/$i | MES_BOOT=${srcdest}boot-00.scm trace "TEST $i" $MES 2>&1;
elif [ -z "${i/6[0-9]-*/}" ]; then
cat scaffold/boot/$i | MES_BOOT=${srcdest}boot-01.scm trace "TEST $i" $MES 2>&1;
else
MES_BOOT=${srcdest}scaffold/boot/$i trace "TEST $i" $MES 2>&1;
fi
) \
&& echo ' [OK]' \
|| (r=$?; echo ' [FAIL]'; echo -e "$x"; echo scaffold/boot/$i; exit $r)
done
XFAIL_TESTS=
test_ext=.scm
log_compiler=${srcdest}build-aux/test-boot.sh
. ${srcdest}build-aux/test-suite.sh

View file

@ -19,12 +19,10 @@
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
. ./config.sh
set -u
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
tests="
TESTS="
tests/boot.test
tests/read.test
tests/srfi-0.test
@ -57,28 +55,8 @@ tests/match.test
tests/psyntax.test
"
mkdir -p tests
set +e
fail=0
total=0
for t in $tests; do
if [ ! -f $t ]; then
echo $t: [SKIP];
continue
fi
${top_builddir}/pre-inst-env sh "$t" > $t.${mes}log 2>&1
r=$?
total=$(expr $total + 1)
if [ $r = 0 ]; then
echo $t: [${mes}OK]
else
echo $t: [${mes}FAIL]
fail=$(expr $fail + 1)
fi
done
if [ $fail != 0 ]; then
echo FAILED: $fail/$total
exit 1
else
echo PASS: $total
fi
XFAIL_TESTS=
test_ext=.test
log_compiler=sh
. ${srcdest}build-aux/test-suite.sh

View file

@ -1,7 +1,7 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -19,268 +19,253 @@
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
. ./config.sh
set -u
test_sh=${test_sh-${srcdest}build-aux/test.sh}
tests="
lib/tests/scaffold/t
lib/tests/scaffold/00-exit-0
lib/tests/scaffold/01-return-0
lib/tests/scaffold/02-return-1
lib/tests/scaffold/03-call
lib/tests/scaffold/04-call-0
lib/tests/scaffold/05-call-1
lib/tests/scaffold/06-call-not-1
lib/tests/scaffold/06-not-call-1
lib/tests/scaffold/06-call-2
lib/tests/scaffold/06-call-string
lib/tests/scaffold/06-call-variable
lib/tests/scaffold/06-return-void
lib/tests/scaffold/07-include
lib/tests/scaffold/08-assign
lib/tests/scaffold/08-assign-negative
lib/tests/scaffold/08-assign-global
lib/tests/scaffold/10-if-0
lib/tests/scaffold/11-if-1
lib/tests/scaffold/12-if-eq
lib/tests/scaffold/13-if-neq
lib/tests/scaffold/14-if-goto
lib/tests/scaffold/15-if-not-f
lib/tests/scaffold/16-if-t
lib/tests/scaffold/17-compare-char
lib/tests/scaffold/17-compare-ge
lib/tests/scaffold/17-compare-gt
lib/tests/scaffold/17-compare-le
lib/tests/scaffold/17-compare-lt
lib/tests/scaffold/17-compare-unsigned-ge
lib/tests/scaffold/17-compare-unsigned-gt
lib/tests/scaffold/17-compare-unsigned-le
lib/tests/scaffold/17-compare-unsigned-lt
lib/tests/scaffold/17-compare-unsigned-char-le
lib/tests/scaffold/17-compare-unsigned-short-le
lib/tests/scaffold/17-compare-unsigned-long-le
lib/tests/scaffold/17-compare-and
lib/tests/scaffold/17-compare-or
lib/tests/scaffold/17-compare-and-or
lib/tests/scaffold/17-compare-assign
lib/tests/scaffold/17-compare-call
lib/tests/scaffold/18-assign-shadow
lib/tests/scaffold/20-while
lib/tests/scaffold/21-char-array-simple
lib/tests/scaffold/21-char-array
lib/tests/scaffold/22-while-char-array
lib/tests/scaffold/23-global-pointer-init-null
lib/tests/scaffold/23-global-pointer-init
lib/tests/scaffold/23-global-pointer-ref
lib/tests/scaffold/23-global-pointer-pointer-ref
lib/tests/scaffold/23-pointer-sub
lib/tests/scaffold/23-pointer
lib/tests/mes/30-oputs
lib/tests/string/30-strlen
lib/tests/scaffold/32-call-wrap
lib/tests/scaffold/32-compare
lib/tests/scaffold/33-and-or
lib/tests/scaffold/34-pre-post
lib/tests/scaffold/35-compare-char
lib/tests/scaffold/36-compare-arithmetic
lib/tests/scaffold/37-compare-assign
lib/tests/scaffold/38-compare-call-2
lib/tests/scaffold/38-compare-call-3
lib/tests/scaffold/38-compare-call
lib/tests/scaffold/40-if-else
lib/tests/scaffold/41-ternary
lib/tests/scaffold/42-goto-label
lib/tests/scaffold/43-for-do-while
lib/tests/scaffold/44-switch
lib/tests/scaffold/44-switch-fallthrough
lib/tests/scaffold/44-switch-body-fallthrough
lib/tests/scaffold/45-void-call
lib/tests/scaffold/46-function-static
lib/tests/scaffold/47-function-expression
lib/tests/scaffold/48-global-static
lib/tests/assert/50-assert
lib/tests/mes/50-itoa
lib/tests/posix/50-getenv
lib/tests/string/50-strcmp
lib/tests/string/50-strcpy
lib/tests/string/50-strncmp
lib/tests/scaffold/51-pointer-sub
lib/tests/scaffold/54-argc
lib/tests/scaffold/54-argv
lib/tests/scaffold/55-char-array
lib/tests/scaffold/60-math
lib/tests/scaffold/61-array
lib/tests/scaffold/62-array
lib/tests/scaffold/63-struct
lib/tests/scaffold/63-struct-pointer
lib/tests/scaffold/63-struct-local
lib/tests/scaffold/63-struct-function
lib/tests/scaffold/63-struct-assign
lib/tests/scaffold/63-struct-array
lib/tests/scaffold/63-struct-array-assign
lib/tests/scaffold/63-struct-array-compare
lib/tests/scaffold/63-struct-cell
lib/tests/scaffold/64-make-cell
lib/tests/scaffold/65-read
lib/tests/scaffold/66-local-char-array
lib/tests/scaffold/70-stdarg
lib/tests/stdio/70-printf-hello
lib/tests/stdio/70-printf-simple
lib/tests/stdio/70-printf
lib/tests/stdlib/70-strtoull
lib/tests/string/70-strchr
lib/tests/scaffold/71-struct-array
lib/tests/scaffold/72-typedef-struct-def
lib/tests/scaffold/73-union-hello
lib/tests/scaffold/73-union
lib/tests/scaffold/74-multi-line-string
lib/tests/scaffold/75-struct-union
lib/tests/scaffold/76-pointer-arithmetic-pp
lib/tests/scaffold/76-pointer-arithmetic
lib/tests/scaffold/77-pointer-assign
lib/tests/scaffold/78-union-struct
lib/tests/scaffold/79-int-array-simple
lib/tests/scaffold/79-int-array
lib/tests/scaffold/7a-struct-char-array
lib/tests/scaffold/7b-struct-int-array-hello
lib/tests/scaffold/7b-struct-int-array-pointer
lib/tests/scaffold/7b-struct-int-array
lib/tests/scaffold/7c-dynarray
lib/tests/scaffold/7d-cast-char
lib/tests/scaffold/7e-struct-array-access
lib/tests/scaffold/7f-struct-pointer-arithmetic
lib/tests/scaffold/7g-struct-byte-word-field
lib/tests/scaffold/7h-struct-assign
lib/tests/scaffold/7i-struct-struct-simple
lib/tests/scaffold/7i-struct-struct
lib/tests/scaffold/7k-empty-for
lib/tests/scaffold/7k-for-each-elem-simple
lib/tests/scaffold/7k-for-each-elem
lib/tests/scaffold/7l-struct-any-size-array-simple
lib/tests/scaffold/7l-struct-any-size-array
lib/tests/scaffold/7m-struct-char-array-assign
lib/tests/scaffold/7n-struct-struct-array
lib/tests/scaffold/7o-struct-pre-post-simple
lib/tests/scaffold/7o-struct-pre-post
lib/tests/scaffold/7p-struct-cast
lib/tests/scaffold/7q-bit-field-simple
lib/tests/scaffold/7q-bit-field
lib/tests/scaffold/7r-sign-extend
lib/tests/scaffold/7s-struct-short
lib/tests/scaffold/7s-unsigned-compare
lib/tests/scaffold/7t-function-destruct
lib/tests/scaffold/7u-double
lib/tests/scaffold/7u-long-long
lib/tests/scaffold/7u-ternary-expression
lib/tests/scaffold/7u-call-ternary
lib/tests/scaffold/7u-inc-byte-word
lib/tests/scaffold/7u-struct-func
lib/tests/scaffold/7u-struct-size10
lib/tests/scaffold/7u-vstack
lib/tests/setjmp/80-setjmp
lib/tests/stdio/80-sscanf
lib/tests/stdlib/80-qsort
lib/tests/stdlib/80-qsort-dupes
lib/tests/string/80-strncpy
lib/tests/string/80-strrchr
lib/tests/scaffold/82-define
lib/tests/scaffold/83-heterogenoous-init
lib/tests/scaffold/84-struct-field-list
lib/tests/scaffold/85-sizeof
lib/tests/dirent/90-readdir
lib/tests/io/90-stat
lib/tests/posix/90-unsetenv
lib/tests/signal/90-signal
lib/tests/stdio/90-fopen
lib/tests/stdio/90-fopen-append
lib/tests/stdio/90-fread-fwrite
lib/tests/stdio/90-fseek
lib/tests/stdlib/90-strtol
lib/tests/string/90-snprintf
lib/tests/string/90-strpbrk
lib/tests/string/90-strspn
lib/tests/scaffold/a0-call-trunc-char
lib/tests/scaffold/a0-call-trunc-short
lib/tests/scaffold/a0-call-trunc-int
lib/tests/scaffold/a0-math-divide-signed-negative
lib/tests/scaffold/a1-global-no-align
lib/tests/scaffold/a1-global-no-clobber
TESTS="
lib/tests/scaffold/t.c
lib/tests/scaffold/00-exit-0.c
lib/tests/scaffold/01-return-0.c
lib/tests/scaffold/02-return-1.c
lib/tests/scaffold/03-call.c
lib/tests/scaffold/04-call-0.c
lib/tests/scaffold/05-call-1.c
lib/tests/scaffold/06-call-not-1.c
lib/tests/scaffold/06-not-call-1.c
lib/tests/scaffold/06-call-2.c
lib/tests/scaffold/06-call-string.c
lib/tests/scaffold/06-call-variable.c
lib/tests/scaffold/06-return-void.c
lib/tests/scaffold/07-include.c
lib/tests/scaffold/08-assign.c
lib/tests/scaffold/08-assign-negative.c
lib/tests/scaffold/08-assign-global.c
lib/tests/scaffold/10-if-0.c
lib/tests/scaffold/11-if-1.c
lib/tests/scaffold/12-if-eq.c
lib/tests/scaffold/13-if-neq.c
lib/tests/scaffold/14-if-goto.c
lib/tests/scaffold/15-if-not-f.c
lib/tests/scaffold/16-if-t.c
lib/tests/scaffold/17-compare-char.c
lib/tests/scaffold/17-compare-ge.c
lib/tests/scaffold/17-compare-gt.c
lib/tests/scaffold/17-compare-le.c
lib/tests/scaffold/17-compare-lt.c
lib/tests/scaffold/17-compare-unsigned-ge.c
lib/tests/scaffold/17-compare-unsigned-gt.c
lib/tests/scaffold/17-compare-unsigned-le.c
lib/tests/scaffold/17-compare-unsigned-lt.c
lib/tests/scaffold/17-compare-unsigned-char-le.c
lib/tests/scaffold/17-compare-unsigned-short-le.c
lib/tests/scaffold/17-compare-unsigned-long-le.c
lib/tests/scaffold/17-compare-and.c
lib/tests/scaffold/17-compare-or.c
lib/tests/scaffold/17-compare-and-or.c
lib/tests/scaffold/17-compare-assign.c
lib/tests/scaffold/17-compare-call.c
lib/tests/scaffold/18-assign-shadow.c
lib/tests/scaffold/20-while.c
lib/tests/scaffold/21-char-array-simple.c
lib/tests/scaffold/21-char-array.c
lib/tests/scaffold/22-while-char-array.c
lib/tests/scaffold/23-global-pointer-init-null.c
lib/tests/scaffold/23-global-pointer-init.c
lib/tests/scaffold/23-global-pointer-ref.c
lib/tests/scaffold/23-global-pointer-pointer-ref.c
lib/tests/scaffold/23-pointer-sub.c
lib/tests/scaffold/23-pointer.c
lib/tests/mes/30-oputs.c
lib/tests/string/30-strlen.c
lib/tests/scaffold/32-call-wrap.c
lib/tests/scaffold/32-compare.c
lib/tests/scaffold/33-and-or.c
lib/tests/scaffold/34-pre-post.c
lib/tests/scaffold/35-compare-char.c
lib/tests/scaffold/36-compare-arithmetic.c
lib/tests/scaffold/37-compare-assign.c
lib/tests/scaffold/38-compare-call-2.c
lib/tests/scaffold/38-compare-call-3.c
lib/tests/scaffold/38-compare-call.c
lib/tests/scaffold/40-if-else.c
lib/tests/scaffold/41-ternary.c
lib/tests/scaffold/42-goto-label.c
lib/tests/scaffold/43-for-do-while.c
lib/tests/scaffold/44-switch.c
lib/tests/scaffold/44-switch-fallthrough.c
lib/tests/scaffold/44-switch-body-fallthrough.c
lib/tests/scaffold/45-void-call.c
lib/tests/scaffold/46-function-static.c
lib/tests/scaffold/47-function-expression.c
lib/tests/scaffold/48-global-static.c
lib/tests/assert/50-assert.c
lib/tests/mes/50-itoa.c
lib/tests/posix/50-getenv.c
lib/tests/string/50-strcmp.c
lib/tests/string/50-strcpy.c
lib/tests/string/50-strncmp.c
lib/tests/scaffold/51-pointer-sub.c
lib/tests/scaffold/54-argc.c
lib/tests/scaffold/55-char-array.c
lib/tests/scaffold/60-math.c
lib/tests/scaffold/61-array.c
lib/tests/scaffold/62-array.c
lib/tests/scaffold/63-struct.c
lib/tests/scaffold/63-struct-pointer.c
lib/tests/scaffold/63-struct-local.c
lib/tests/scaffold/63-struct-function.c
lib/tests/scaffold/63-struct-assign.c
lib/tests/scaffold/63-struct-array.c
lib/tests/scaffold/63-struct-array-assign.c
lib/tests/scaffold/63-struct-array-compare.c
lib/tests/scaffold/63-struct-cell.c
lib/tests/scaffold/64-make-cell.c
lib/tests/scaffold/65-read.c
lib/tests/scaffold/66-local-char-array.c
lib/tests/scaffold/70-stdarg.c
lib/tests/stdio/70-printf-hello.c
lib/tests/stdio/70-printf-simple.c
lib/tests/stdio/70-printf.c
lib/tests/stdlib/70-strtoull.c
lib/tests/string/70-strchr.c
lib/tests/scaffold/71-struct-array.c
lib/tests/scaffold/72-typedef-struct-def.c
lib/tests/scaffold/73-union-hello.c
lib/tests/scaffold/73-union.c
lib/tests/scaffold/74-multi-line-string.c
lib/tests/scaffold/75-struct-union.c
lib/tests/scaffold/76-pointer-arithmetic-pp.c
lib/tests/scaffold/76-pointer-arithmetic.c
lib/tests/scaffold/77-pointer-assign.c
lib/tests/scaffold/78-union-struct.c
lib/tests/scaffold/79-int-array-simple.c
lib/tests/scaffold/79-int-array.c
lib/tests/scaffold/7a-struct-char-array.c
lib/tests/scaffold/7b-struct-int-array-hello.c
lib/tests/scaffold/7b-struct-int-array-pointer.c
lib/tests/scaffold/7b-struct-int-array.c
lib/tests/scaffold/7c-dynarray.c
lib/tests/scaffold/7d-cast-char.c
lib/tests/scaffold/7e-struct-array-access.c
lib/tests/scaffold/7f-struct-pointer-arithmetic.c
lib/tests/scaffold/7g-struct-byte-word-field.c
lib/tests/scaffold/7h-struct-assign.c
lib/tests/scaffold/7i-struct-struct-simple.c
lib/tests/scaffold/7i-struct-struct.c
lib/tests/scaffold/7k-empty-for.c
lib/tests/scaffold/7k-for-each-elem-simple.c
lib/tests/scaffold/7k-for-each-elem.c
lib/tests/scaffold/7l-struct-any-size-array-simple.c
lib/tests/scaffold/7l-struct-any-size-array.c
lib/tests/scaffold/7m-struct-char-array-assign.c
lib/tests/scaffold/7n-struct-struct-array.c
lib/tests/scaffold/7o-struct-pre-post-simple.c
lib/tests/scaffold/7o-struct-pre-post.c
lib/tests/scaffold/7p-struct-cast.c
lib/tests/scaffold/7q-bit-field-simple.c
lib/tests/scaffold/7q-bit-field.c
lib/tests/scaffold/7r-sign-extend.c
lib/tests/scaffold/7s-struct-short.c
lib/tests/scaffold/7s-unsigned-compare.c
lib/tests/scaffold/7t-function-destruct.c
lib/tests/scaffold/7u-double.c
lib/tests/scaffold/7u-long-long.c
lib/tests/scaffold/7u-ternary-expression.c
lib/tests/scaffold/7u-call-ternary.c
lib/tests/scaffold/7u-inc-byte-word.c
lib/tests/scaffold/7u-struct-func.c
lib/tests/scaffold/7u-struct-size10.c
lib/tests/scaffold/7u-vstack.c
lib/tests/setjmp/80-setjmp.c
lib/tests/stdio/80-sscanf.c
lib/tests/stdlib/80-qsort.c
lib/tests/stdlib/80-qsort-dupes.c
lib/tests/string/80-strncpy.c
lib/tests/string/80-strrchr.c
lib/tests/scaffold/82-define.c
lib/tests/scaffold/83-heterogenoous-init.c
lib/tests/scaffold/84-struct-field-list.c
lib/tests/scaffold/85-sizeof.c
lib/tests/dirent/90-readdir.c
lib/tests/io/90-stat.c
lib/tests/posix/90-unsetenv.c
lib/tests/signal/90-signal.c
lib/tests/stdio/90-fopen.c
lib/tests/stdio/90-fopen-append.c
lib/tests/stdio/90-fread-fwrite.c
lib/tests/stdio/90-fseek.c
lib/tests/stdlib/90-strtol.c
lib/tests/string/90-snprintf.c
lib/tests/string/90-strpbrk.c
lib/tests/string/90-strspn.c
lib/tests/scaffold/90-goto-var.c
lib/tests/scaffold/91-goto-array.c
lib/tests/scaffold/a0-call-trunc-char.c
lib/tests/scaffold/a0-call-trunc-short.c
lib/tests/scaffold/a0-call-trunc-int.c
lib/tests/scaffold/a0-math-divide-signed-negative.c
lib/tests/scaffold/a1-global-no-align.c
lib/tests/scaffold/a1-global-no-clobber.c
"
broken="$broken
lib/tests/scaffold/17-compare-unsigned-char-le
lib/tests/scaffold/17-compare-unsigned-short-le
lib/tests/scaffold/66-local-char-array
lib/tests/scaffold/a0-call-trunc-int
lib/tests/scaffold/a0-math-divide-signed-negative
lib/tests/posix/50-getenv
XFAIL_TESTS="
lib/tests/scaffold/54-argv.c
lib/tests/stdio/90-sprintf.c
lib/tests/stdio/90-sprintf.c
"
if [ "$mes_arch" = "x86_64-gcc" ]; then
broken="$broken
lib/tests/scaffold/21-char-array
lib/tests/scaffold/41-ternary
lib/tests/scaffold/stdio/70-printf-stdarg
lib/tests/scaffold/stdio/70-printf-simple
lib/tests/scaffold/stdio/70-printf
lib/tests/setjmp/80-setjmp
lib/tests/scaffold/a1-global-no-align
if test $compiler = mescc; then
XFAIL_TESTS="$XFAIL_TESTS
lib/tests/scaffold/17-compare-unsigned-char-le.c
lib/tests/scaffold/17-compare-unsigned-short-le.c
lib/tests/scaffold/66-local-char-array.c
lib/tests/scaffold/90-goto-var.c
lib/tests/scaffold/91-goto-array.c
"
# Debian: debugme itoa is broken
broken="$broken
lib/tests/scaffold/47-function-expression
lib/tests/scaffold/62-array
lib/tests/scaffold/65-read
lib/tests/scaffold/85-sizeof
lib/tests/mes/90-abtod
lib/tests/mes/90-dtoab
lib/tests/posix/90-execlp
if test $mes_cpu = x86; then
XFAIL_TESTS="$XFAIL_TESTS
lib/tests/scaffold/60-math.c
"
fi
set +e
expect=$(echo $broken | wc -w)
pass=0
fail=0
total=0
for t in $tests; do
b=$(basename "$t")
if [ -z "${b/[012][0-9]-*/}" ]; then
libc=
elif [ -z "${b/[34][0-9]-*/}" ]; then
libc='-l c-mini'
elif [ -z "${b/[78][0-9a-z]-*/}" ]; then
libc='-l c+tcc'
elif [ -z "${b/9[0-9a-z]-*/}" ]; then
libc='-l c+gnu'
else
libc='-l c'
if test $mes_cpu = x86_64; then
XFAIL_TESTS="$XFAIL_TESTS
lib/tests/scaffold/a0-call-trunc-int.c
"
fi
sh $test_sh "$t" > "$t".log 2>&1
r=$?
total=$(expr $total + 1)
if [ $r = 0 ]; then
echo $t: [OK]
pass=$(expr $pass + 1)
else
echo $t: [FAIL]
fail=$(expr $fail + 1)
fi
done
[ $expect != 0 ] && echo "expect: $expect"
[ $fail != 0 ] && echo "failed: $fail"
[ $fail -lt $expect ] && echo "solved: $(expr $expect - $fail)"
echo "passed: $pass"
echo "total: $total"
if [ $fail != 0 -a $fail -gt $expect ]; then
echo FAILED: $fail/$total
exit 1
elif [ $fail != 0 ]; then
echo PASS: $pass/$total
else
echo PASS: $total
if test $mes_cpu = x86; then
XFAIL_TESTS="$XFAIL_TESTS
"
fi
if test $mes_cpu = x86_64; then
XFAIL_TESTS="$XFAIL_TESTS
lib/tests/stdio/70-printf-simple.c
lib/tests/stdio/70-printf-stdarg.c
lib/tests/stdio/70-printf.c
"
fi
if test $compiler = gcc; then
XFAIL_TESTS="$XFAIL_TESTS
"
if test $mes_cpu = x86; then
XFAIL_TESTS="$XFAIL_TESTS
"
fi
if test $mes_cpu = x86_64; then
XFAIL_TESTS="$XFAIL_TESTS
lib/tests/stdio/70-printf-hello.c
lib/tests/string/90-snprintf.c
"
fi
fi
test_ext=.c
log_compiler=${srcdest}build-aux/test-c.sh
. ${srcdest}build-aux/test-suite.sh

View file

@ -1,161 +0,0 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
tests="
00_assignment
01_comment
02_printf
03_struct
04_for
05_array
06_case
07_function
08_while
09_do_while
10_pointer
11_precedence
12_hashdefine
13_integer_literals
14_if
15_recursion
16_nesting
17_enum
18_include
19_pointer_arithmetic
20_pointer_comparison
21_char_array
22_floating_point
23_type_coercion
24_math_library
25_quicksort
26_character_constants
27_sizeof
28_strings
29_array_address
30_hanoi
31_args
32_led
33_ternary_op
34_array_assignment
35_sizeof
36_array_initialisers
37_sprintf
38_multiple_array_index
39_typedef
40_stdio
41_hashif
42_function_pointer
43_void_param
44_scoped_declarations
45_empty_for
47_switch_return
48_nested_break
49_bracket_evaluation
50_logical_second_arg
51_static
52_unnamed_enum
54_goto
55_lshift_type
"
broken="$broken
18_include
22_floating_point
23_type_coercion
24_math_library
26_character_constants
27_sizeof
28_strings
34_array_assignment
39_typedef
40_stdio
42_function_pointer
49_bracket_evaluation
55_lshift_type
"
#22_floating_point ; float
#23_type_coercion ; float
#24_math_library ; float
#27_sizeof ; float
#28_strings ; TODO: strncpy strchr strrchr memset memcpy memcmp
#30_hanoi ; fails with GCC
#34_array_assignment ; fails with GCC
#39_typedef ;unsupported: (decl (decl-spec-list (stor-spec (typedef)) (type-spec (typename "MyFunStruct"))) (init-declr-list (init-declr (ptr-declr (pointer) (ident "MoreFunThanEver")))))
#40_stdio ; f* functions
#42_function_pointer ; f* functions
#49_bracket_evaluation ; float
LIBC=c+gnu
MES_LIBS="-l c+gnu"
expect=$(echo $broken | wc -w)
ARGS="arg1 arg2 arg3 arg4 arg5"
export ARGS
pass=0
fail=0
total=0
mkdir -p scaffold/tinycc
set +e
for t in $tests; do
if [ ! -f $TINYCC_PREFIX/tests/tests2/"$t.c" ]; then
echo ' [SKIP]'
continue;
fi
cp $TINYCC_PREFIX/tests/tests2/$i* scaffold/tinycc
sh ${srcdest}build-aux/test.sh "scaffold/tinycc/$t" > scaffold/tinycc/"$t".log 2>&1
r=$?
total=$(expr $total + 1)
if [ $r = 0 ]; then
echo $t: [OK]
pass=$(expr $pass + 1)
else
echo $t: [FAIL]
fail=$(expr $fail + 1)
fi
done
[ $expect != 0 ] && echo "expect: $expect"
[ $fail != 0 ] && echo "failed: $fail"
[ $fail -lt $expect ] && echo "solved: $(expr $expect - $fail)"
echo "passed: $pass"
echo "total: $total"
if [ $fail != 0 -a $fail -gt $expect ]; then
echo FAILED: $fail/$total
exit 1
elif [ $fail != 0 ]; then
echo PASS: $pass/$total
else
echo PASS: $total
fi

View file

@ -20,13 +20,71 @@
set -e
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
. ./config.sh
./pre-inst-env bash ${srcdest}build-aux/check-boot.sh
./pre-inst-env sh ${srcdest}build-aux/check-mes.sh
./pre-inst-env bash ${srcdest}build-aux/check-mescc.sh
if [ -d $TINYCC_PREFIX/tests/tests2 ] ;then
./pre-inst-env sh ${srcdest}build-aux/check-tcc.sh
if $courageous; then
echo "Applying courage"
set +e
fi
CFLAGS=
if test $mes_libc = mes; then
CFLAGS="
-nostdinc
-nostdlib
-fno-builtin
"
fi
CPPFLAGS="
-D HAVE_CONFIG_H=1
-I ../include
-I ${srcdir}/include
-I ${srcdir}/include/$mes_kernel/$mes_cpu
"
LIBS=
LDFLAGS=
if test $mes_libc = mes; then
LDFLAGS="
-nostdlib
"
LIBS=-lc
fi
export CFLAGS
export CPPFLAGS
export LDFLAGS
#export LIBS
./pre-inst-env sh ${srcdest}build-aux/check-boot.sh
./pre-inst-env sh ${srcdest}build-aux/check-mes.sh
if test $compiler = gcc; then
(
cd gcc-lib
srcdest=$srcdir/../
srcdir=../$srcdir
../pre-inst-env sh ${srcdest}build-aux/check-mescc.sh
)
fi
(
cd mescc-lib
srcdest=$srcdir/../
srcdir=../$srcdir
compiler=mescc
mes_lib=mes
CFLAGS="
-nostdinc
-nostdlib
-fno-builtin
"
LDFLAGS="
-nostdlib
"
LIBS=-lc
AR="${srcdest}pre-inst-env ar"
CC="${srcdest}pre-inst-env mescc"
../pre-inst-env sh ${srcdest}build-aux/check-mescc.sh
)

View file

@ -20,6 +20,7 @@ AR:=@AR@
BASH:=@BASH@
BLOOD_ELF:=@BLOOD_ELF@
CC:=@CC@
DIFF:=@DIFF@
DOT:=@DOT@
GIT:=@GIT@
GUILD:=@GUILD@
@ -37,10 +38,13 @@ MES_FOR_BUILD:=@MES_FOR_BUILD@
MES_SEED:=@MES_SEED@
NYACC:=@NYACC@
PACKAGE:=@PACKAGE@
PACKAGE_NAME:=@PACKAGE_NAME@
PACKAGE_BUGREPORT:=@PACKAGE_BUGREPORT@
PERL:=@PERL@
TINYCC_PREFIX:=@TINYCC_PREFIX@
VERSION:=@VERSION@
V:=@V@
colors:=@colors@
abs_top_builddir:=@abs_top_builddir@
abs_top_srcdir:=@abs_top_srcdir@
@ -48,11 +52,13 @@ arch:=@arch@
build:=@build@
host:=@host@
mes_arch:=@mes_arch@
gcc_p:=@gcc_p@
mes_p:=@mes_p@
mesc_p:=@mesc_p@
tcc_p:=@tcc_p@
compiler:=@compiler@
courageous:=@courageous@
mes_system:=@mes_system@
mes_cpu:=@mes_cpu@
mes_bits:=@mes_bits@
mes_libc:=@mes_libc@
mes_kernel:=@mes_kernel@
prefix:=@prefix@
@ -61,6 +67,7 @@ datadir:=@datadir@
docdir:=@docdir@
guile_site_ccache_dir:=@guile_site_ccache_dir@
guile_site_dir:=@guile_site_dir@
includedir:=@includedir@
infodir:=@infodir@
libdir:=@libdir@
mandir:=@mandir@

View file

@ -1,164 +0,0 @@
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
srcdir=${srcdir-.}
top_builddir=${top_builddir-.}
if [ "$V" = 2 ]; then
echo $0
echo srcdest=${srcdest}
echo top_builddir=${top_builddir}
fi
if [ -n "$mes_p" -a -n "$gcc_p" ]; then
crt1=lib/linux/$mes_arch/crt1.o
fi
MES=${MES-${program_prefix}mes}
libc=${libc-"-l c"}
export libc
if [ ! "$CC" ]; then
CC="./pre-inst-env mescc"
fi
unset CFLAGS
unset CPPFLAGS
unset HEX2FLAGS
unset LDFLAGS
unset M1FLAGS
export AR
export CC
export CFLAGS
export CPPFLAGS
export GUILD
export GUILE
export GUILE_LOAD_COMPILED_PATH
export GUILE_LOAD_PATH
export HEX2
export HEX2FLAGS
export M1
export M1FLAGS
export MES
export MES_CFLAGS
export MES_FOR_BUILD
export MES_SEED
export MESCC
export MES_DEBUG
export MES_ARENA
export TINYCC_PREFIX
export V
export config_status
export abs_top_builddir
export abs_top_srcdir
export arch
export datadir
export moduledir
export prefix
export program_prefix
export srcdest
export srcdir
export top_builddir
export bits
export build
export host
export compiler
export gcc_p
export mes_p
export mesc_p
export tcc_p
export mes_arch
export with_glibc_p
CPPFLAGS=${CPPFLAGS-"
-D 'VERSION=\"$VERSION\"'
-D 'MODULEDIR=\"$moduledir\"'
-D 'PREFIX=\"$prefix\"'
-I ${srcdest}.
-I ${srcdest}lib
-I ${srcdest}include
"}
[ "$with_glibc_p" ] && CPPFLAGS="$CPPFLAGS -D SYSTEM_LIBC=1"
LDFLAGS=${LDFLAGS-"
-v
-g
-L lib/linux/$mes_arch
-L lib/linux
-L lib/$mes_arch
-L lib
"}
if [ -f "$MES_SEED/x86-mes/mes.S" ]; then
LDFLAGS="$LDFLAGS
-L $MES_SEED
"
fi
if [ -n "$gcc_p" ]; then
CFLAGS=${CFLAGS-"
-v
--std=gnu99
-O0
-g
"}
fi
if [ "$mes_p" -a "$gcc_p" ]; then
CFLAGS="$CFLAGS
-fno-builtin
-fno-stack-protector
-nostdinc
-nostdlib
-Wno-discarded-qualifiers
-Wno-int-to-pointer-cast
-Wno-pointer-to-int-cast
-Wno-pointer-sign
-Wno-int-conversion
-Wno-incompatible-pointer-types
"
fi
if [ "$arch" = "x86" ]; then
HEX2FLAGS=${HEX2FLAGS-"
--LittleEndian
--architecture x86
--BaseAddress 0x1000000
"}
M1FLAGS=${M1FLAGS-"
--LittleEndian
--architecture x86
"}
bits=32
elif [ "$arch" = "x86_64" ]; then
HEX2FLAGS=${HEX2FLAGS-"
--LittleEndian
--architecture amd64
--BaseAddress 0x1000000
"}
M1FLAGS=${M1FLAGS-"
--LittleEndian
--architecture amd64
"}
bits=64
fi

View file

@ -16,11 +16,12 @@
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
config_status=1
AR="@AR@"
config_sh=1
AR=${AR-"@AR@"}
BASH="@BASH@"
BLOOD_ELF="@BLOOD_ELF@"
CC="@CC@"
CC=${CC-"@CC@"}
DIFF=${DIFF-@DIFF@}
DOT="@DOT@"
GIT="@GIT@"
GUILD="@GUILD@"
@ -37,10 +38,13 @@ MES_FOR_BUILD="@MES_FOR_BUILD@"
MES_SEED="@MES_SEED@"
NYACC="@NYACC@"
PACKAGE="@PACKAGE@"
PACKAGE_NAME="@PACKAGE_NAME@"
PACKAGE_BUGREPORT="@PACKAGE_BUGREPORT@"
PERL="@PERL@"
TINYCC_PREFIX="@TINYCC_PREFIX@"
VERSION="@VERSION@"
V="@V@"
V=${V-"@V@"}
colors=${colors-@colors@}
abs_top_builddir="@abs_top_builddir@"
abs_top_srcdir="@abs_top_srcdir@"
@ -48,26 +52,44 @@ arch="@arch@"
build="@build@"
host="@host@"
mes_arch="@mes_arch@"
gcc_p="@gcc_p@"
mes_p="@mes_p@"
mesc_p="@mesc_p@"
tcc_p="@tcc_p@"
compiler=${compiler-@compiler@}
courageous=${courageous-@courageous@}
mes_system=@mes_system@
mes_cpu=@mes_cpu@
mes_bits=@mes_bits@
mes_libc=@mes_libc@
mes_kernel=@mes_kernel@
prefix="@prefix@"
bindir="@bindir@"
datadir="@datadir@"
pkgdatadir="@pkgdatadir@"
docdir="@docdir@"
guile_site_ccache_dir="@guile_site_ccache_dir@"
guile_site_dir="@guile_site_dir@"
includedir="@includedir@"
infodir="@infodir@"
libdir="@libdir@"
mandir="@mandir@"
moduledir="@moduledir@"
with_glibc_p="@with_glibc_p@"
program_prefix="@program_prefix@"
srcdest="@srcdest@"
srcdir="@srcdir@"
srcdest=${srcdest-"@srcdest@"}
srcdir=${srcdir-"@srcdir@"}
sysconfdir="@sysconfdir@"
top_builddir="@top_builddir@"
export PACKAGE
export PACKAGE_NAME
export PACKAGE_BUGREPORT
export AR
export CC
export DIFF
export V
export colors
export compiler
export courageous
export srcdest
export srcdir
export GUILE_AUTO_COMPILE

View file

@ -17,6 +17,8 @@
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
export PACKAGE
export PACKAGE_NAME
export PACKAGE_BUGREPORT
export VERSION
export abs_top_builddir
@ -40,6 +42,14 @@ export mandir
export moduledir
export sysconfdir
export compiler
export courageous
export mes_system
export mes_cpu
export mes_bits
export mes_libc
export mes_kernel
ifdef V
export V
endif
@ -48,18 +58,10 @@ ifdef DESTDIR
export DESTDIR
endif
ifdef arch
export arch
endif
ifdef CC
export CC
endif
ifdef CC64
export CC64
endif
ifdef BLOOD_ELF
export BLOOD_ELF
endif
@ -112,10 +114,6 @@ ifdef PERL
export PERL
endif
ifdef TCC
export TCC
endif
ifdef GUILE_LOAD_PATH
export GUILE_LOAD_PATH
endif
@ -139,7 +137,3 @@ endif
ifdef M1FLAGS
export M1FLAGS
endif
ifdef TINYCC_PREFIX
export TINYCC_PREFIX
endif

View file

@ -1,4 +1,4 @@
#! /bin/sh
#! @SHELL@
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@ -20,34 +20,44 @@
set -e
. ./config.status
. ./config.sh
mes_prefix=@prefix@/share/mes
v=
_v=
if test "$V" = 2; then
set -x
fi
if test "$V" -gt 0; then
v=v
_v=-v
fi
# use bash or lose if pipes fail
if [ -n "$BASHOPTS" ]; then
set -u
# Use bash or lose if pipes fail
if test -n "$BASHOPTS"; then
set -o pipefail
fi
mkdir -p ${DESTDIR}@bindir@
if [ -f src/x86-mes-mes ]; then
cp src/x86-mes-mes ${DESTDIR}@bindir@/mes
fi
cp scripts/mescc.scm ${DESTDIR}@bindir@/mescc.scm
cp scripts/mescc ${DESTDIR}@bindir@/mescc
DESTDIR=${DESTDIR-}
mkdir -p ${DESTDIR}${bindir}
cp $_v src/mes ${DESTDIR}${bindir}/mes
cp $_v scripts/ar ${DESTDIR}${bindir}/ar
cp $_v scripts/mescc.scm ${DESTDIR}${bindir}/mescc.scm
cp $_v scripts/mescc ${DESTDIR}${bindir}/mescc
sed \
-e "s,^#! /bin/sh,#! @SHELL@," \
scripts/diff.scm > ${DESTDIR}@bindir@/diff.scm
chmod +x ${DESTDIR}@bindir@/diff.scm
-e "s,^#! /bin/sh,#! ${SHELL}," \
scripts/diff.scm > ${DESTDIR}${bindir}/diff.scm
chmod +x ${DESTDIR}${bindir}/diff.scm
mkdir -p ${DESTDIR}@docdir@
mkdir -p ${DESTDIR}${docdir}
if [ -n "@PERL@" ]\
&& [ -n "@GIT@" ]\
&& @PERL@ -v > /dev/null\
&& @GIT@ status > /dev/null; then
@PERL@ ${srcdest}build-aux/gitlog-to-changelog --srcdir=. > ChangeLog
if test -n "${PERL}"\
&& test -n "${GIT}"\
&& ${PERL} -v > /dev/null\
&& ${GIT} status > /dev/null; then
${PERL} ${srcdest}build-aux/gitlog-to-changelog --srcdir=. > ChangeLog+
fi
cp\
@ -58,66 +68,50 @@ cp\
INSTALL\
NEWS\
README\
${DESTDIR}@docdir@
${DESTDIR}${docdir}
if [ -f ChangeLog ]; then
cp ChangeLog ${DESTDIR}@docdir@
if test -f ChangeLog+; then
cp $_v ChangeLog+ ${DESTDIR}${docdir}/ChangeLog
rm -f ChangeLog+
else
cp ChangeLog ${DESTDIR}@docdir@
cp $_v ChangeLog ${DESTDIR}${docdir}
fi
mkdir -p $DESTDIR$mes_prefix
rm -f $(find lib -type f -a -executable)
rm -f $(find lib/tests -type f -a -name '*.1')
rm -f $(find lib/tests -type f -a -name '*.2')
rm -f $(find lib/tests -type f -a -name '*.o')
rm -f $(find lib/tests -type f -a -name '*.log')
rm -f $(find lib/tests -type f -a -name '*.x86-mes*')
rm -f $(find lib/tests -type f -a -name '*.x86_64-mes*')
rm -f $(find scaffold -type f -a -executable)
rm -f $(find scaffold -type f -a -name '*.1')
rm -f $(find scaffold -type f -a -name '*.2')
rm -f $(find scaffold -type f -a -name '*.o')
rm -f $(find scaffold -type f -a -name '*.S')
rm -f $(find scaffold -type f -a -name '*.log')
rm -f $(find scaffold -type f -a -name '*.x86-mes*')
rm -f $(find scaffold -type f -a -name '*.x86_64-mes*')
if [ -z "$srcdest" ]; then
tar -cf- include lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- --exclude='*.go' module | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- scaffold | tar -xf- -C $DESTDIR$mes_prefix
mkdir -p $DESTDIR$libdir
mkdir -p $DESTDIR$pkgdatadir
# rm -f $(find lib -type f -a -executable)
# rm -f $(find scaffold -type f -a -executable)
tar -cf- -C ${srcdir} include lib/$mes_cpu-mes | tar -${v}xf- -C $DESTDIR$prefix
if test -z "$srcdest"; then
tar -cf- --exclude='*.go' module | tar -${v}xf- -C $DESTDIR$pkgdatadir
else
tar -cf- -C ${srcdest} include lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- -C lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- -C ${srcdest} module | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- -C ${srcdest} scaffold | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- -C ${srcdest} module | tar -${v}xf- -C $DESTDIR$pkgdatadir
fi
tar -cf- -C ${srcdest}mes module | tar -xf- -C $DESTDIR$mes_prefix
if [ -f src/mes.x86-mes-S ]; then
cp src/mes.x86-mes-S $DESTDIR$mes_prefix/lib/x86-mes/mes.S
tar -cf- -C ${srcdest}mes module | tar -${v}xf- -C $DESTDIR$pkgdatadir
if test -d gcc-lib/$mes_cpu-mes; then
tar -cf- -C gcc-lib/$mes_cpu-mes . | tar -${v}xf- -C $DESTDIR$libdir
fi
if [ -f src/mes.x86_64-mes-S ]; then
cp src/mes.x86_64-mes-S $DESTDIR$mes_prefix/lib/x86_64-mes/mes.S
if test -d mescc-lib/$mes_cpu-mes; then
tar -cf- -C mescc-lib $mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir
fi
mkdir -p ${DESTDIR}@guile_site_dir@
mkdir -p ${DESTDIR}@guile_site_ccache_dir@
tar -cf- -C ${srcdest}module --exclude='*.go' . | tar -xf- -C ${DESTDIR}@guile_site_dir@
tar -cf- -C module --exclude='*.scm' . | tar -xf- -C ${DESTDIR}@guile_site_ccache_dir@
mkdir -p ${DESTDIR}${guile_site_dir}
mkdir -p ${DESTDIR}${guile_site_ccache_dir}
tar -cf- -C ${srcdest}module --exclude='*.go' . | tar -${v}xf- -C ${DESTDIR}${guile_site_dir}
tar -cf- -C module --exclude='*.scm' . | tar -${v}xf- -C ${DESTDIR}${guile_site_ccache_dir}
if [ -f doc/mes.info ]; then
mkdir -p ${DESTDIR}@infodir@
tar -cf- doc/mes.info* doc/images | tar -xf- --strip-components=1 -C ${DESTDIR}@infodir@
install-info --info-dir=${DESTDIR}@infodir@ doc/mes.info
if test -f doc/mes.info; then
mkdir -p ${DESTDIR}${infodir}
tar -cf- doc/mes.info* doc/images | tar -${v}xf- --strip-components=1 -C ${DESTDIR}${infodir}
install-info --info-dir=${DESTDIR}${infodir} doc/mes.info
fi
if [ -f doc/mes.1 ]; then
mkdir -p ${DESTDIR}@mandir@/man1
cp doc/mes.1 ${DESTDIR}@mandir@/man1/
if test -f doc/mes.1; then
mkdir -p ${DESTDIR}${mandir}/man1
cp $_v doc/mes.1 ${DESTDIR}${mandir}/man1/
fi
if [ -f doc/mescc.1 ]; then
mkdir -p ${DESTDIR}@mandir@/man1
cp doc/mescc.1 ${DESTDIR}@mandir@/man1/
if test -f doc/mescc.1; then
mkdir -p ${DESTDIR}${mandir}/man1
cp $_v doc/mescc.1 ${DESTDIR}${mandir}/man1/
fi

View file

@ -34,7 +34,7 @@ if [ -n "$srcdest" ]; then
fi
export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
PATH="$abs_top_builddir/scripts:$abs_top_builddir/src:$abs_top_builddir/build-aux:$PATH"
PATH="$abs_top_builddir/scripts:$abs_top_builddir/scripts:$abs_top_builddir/src:$abs_top_builddir/build-aux:$PATH"
export PATH
MES=${MES-${abs_top_builddir}/src/${program_prefix}mes}

View file

@ -1,7 +1,7 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -20,30 +20,19 @@
set -e
if [ ! "$config_status" ]; then
. ./config.status
if [ "$V" = 2 ]; then
set -x
fi
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
. ${srcdest}build-aux/cc.sh
t=${1-scaffold/boot/00-zero.scm}
b=$(basename "$t" .scm)
t=${1-scaffold/tests/t}
o="$t"
rm -f "${program_prefix}$o"
compile "$t"
link "$t"
r=0
[ -f "$t".exit ] && r=$(cat "$t".exit)
set +e
$(dirname "$o")/${program_prefix}$(basename "$o") $ARGS > "$o".${program_prefix}1 2> "$o".${program_prefix}2
m=$?
cat "$o".${program_prefix}1
set -e
[ $m = $r ]
if [ -f "$t".stdout ]; then
$DIFF -ub "$t".stdout "$o".${program_prefix}1
if [ "$(basename $MES)" = guile ]; then
$MES -L ${srcdest}module -C module -L . -c '(begin (use-modules (mes guile)) (include-from-path "'"$t"'"))'
elif [ -z "${b/5[0-9]-*/}" ]; then
cat "$t" | MES_BOOT=boot-00.scm $MES
elif [ -z "${b/6[0-9]-*/}" ]; then
cat "$t" | MES_BOOT=boot-01.scm $MES
else
MES_BOOT=$t $MES;
fi

77
build-aux/test-c.sh Executable file
View file

@ -0,0 +1,77 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
set -e
if [ "$V" = 2 ]; then
set -x
fi
t=${1-lib/tests/scaffold/t.c}
b=$(dirname "$t")/$(basename "$t" .c)
o="$b"
o=lib/tests/${b#*lib/tests/}
if [ "$o" = "$b" ]; then
o=$(basename "$t" .c)
fi
rm -f "$o"
CC=${CC-gcc}
i=$(basename "$t" .c)
if [ -z "${i/[012][0-9]-*/}" ]; then
LIBS=
elif [ -z "${i/[34][0-9]-*/}" ]; then
LIBS='-l c-mini'
elif [ -z "${i/[78][0-9a-z]-*/}" ]; then
LIBS='-l c+tcc'
elif [ -z "${i/9[0-9a-z]-*/}" ]; then
LIBS='-l c+gnu'
else
LIBS='-l c'
fi
if test $mes_libc = system; then
crt1=
LIBS=-lmes
else
crt1=crt1.o
fi
$CC -c $CPPFLAGS $CFLAGS -o "$o".o "$t"
$CC $CFLAGS $LDFLAGS -L . -o "$o" $crt1 "$o".o $LIBS
set +e
#timeout 2 "$o" -s --long file0 file1 > "$o".1 2> "$o".2
timeout 2 "$o" > "$o".1 2> "$o".2
r=$?
set -e
if [ -f "$b".exit ]; then
e=$(cat "$b".exit)
else
e=0
fi
[ $r = $e ] || exit 1
if [ -f "$b".stdout ]; then
$DIFF -ub "$b".stdout "$o".1
fi
if [ -f "$b".stderr ]; then
$DIFF -ub "$b".stderr "$o".2
fi

148
build-aux/test-driver Executable file
View file

@ -0,0 +1,148 @@
#!/bin/sh
# test-driver - basic testsuite driver script.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 2011-2018 Free Software Foundation, Inc.
#
# 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 2, 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 <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
# Make unconditional expansion of undefined variables an error. This
# helps a lot in preventing typo-related bugs.
set -u
usage_error ()
{
echo "$0: $*" >&2
print_usage >&2
exit 2
}
print_usage ()
{
cat <<END
Usage:
test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
[--expect-failure={yes|no}] [--color-tests={yes|no}]
[--enable-hard-errors={yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
END
}
test_name= # Used for reporting.
log_file= # Where to save the output of the test script.
trs_file= # Where to save the metadata of the test run.
expect_failure=no
color_tests=no
enable_hard_errors=yes
while test $# -gt 0; do
case $1 in
--help) print_usage; exit $?;;
--version) echo "test-driver $scriptversion"; exit $?;;
--test-name) test_name=$2; shift;;
--log-file) log_file=$2; shift;;
--trs-file) trs_file=$2; shift;;
--color-tests) color_tests=$2; shift;;
--expect-failure) expect_failure=$2; shift;;
--enable-hard-errors) enable_hard_errors=$2; shift;;
--) shift; break;;
-*) usage_error "invalid option: '$1'";;
*) break;;
esac
shift
done
missing_opts=
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
if test x"$missing_opts" != x; then
usage_error "the following mandatory options are missing:$missing_opts"
fi
if test $# -eq 0; then
usage_error "missing argument"
fi
if test $color_tests = yes; then
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
red='' # Red.
grn='' # Green.
lgn='' # Light green.
blu='' # Blue.
mgn='' # Magenta.
std='' # No color.
else
red= grn= lgn= blu= mgn= std=
fi
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
trap "st=129; $do_exit" 1
trap "st=130; $do_exit" 2
trap "st=141; $do_exit" 13
trap "st=143; $do_exit" 15
# Test script is run here.
"$@" >$log_file 2>&1
estatus=$?
if test $enable_hard_errors = no && test $estatus -eq 99; then
tweaked_estatus=1
else
tweaked_estatus=$estatus
fi
case $tweaked_estatus:$expect_failure in
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
0:*) col=$grn res=PASS recheck=no gcopy=no;;
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
esac
# Report the test outcome and exit status in the logs, so that one can
# know whether the test passed or failed simply by looking at the '.log'
# file, without the need of also peaking into the corresponding '.trs'
# file (automake bug#11814).
echo "$res $test_name (exit status: $estatus)" >>$log_file
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
# Register the test result, and other relevant metadata.
echo ":test-result: $res" > $trs_file
echo ":global-test-result: $res" >> $trs_file
echo ":recheck: $recheck" >> $trs_file
echo ":copy-in-global-log: $gcopy" >> $trs_file
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

137
build-aux/test-suite.sh Normal file
View file

@ -0,0 +1,137 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2011-2018 Free Software Foundation, Inc.
# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
# Adapted from GNU Automake
TEST_SUITE_LOG=test-suite.log
dry_run=false
create_global_log=cat
subdir=$(basename $(pwd))
TEST_LOGS=
for t in $TESTS; do
b=$(dirname $t)/$(basename $t $test_ext)
d=$(dirname $t)
case " `echo $XFAIL_TESTS` " in
*[\ \ ]$t[\ \ ]*)
fail=yes;;
*)
fail=no;;
esac
mkdir -p $d
sh ${srcdest}build-aux/test-driver\
--test-name $t \
--log-file $b.log\
--trs-file $b.trs\
--color-tests $colors\
--enable-hard-errors no\
--expect-failure $fail\
-- $log_compiler\
${srcdest}$t
TEST_LOGS="$TEST_LOGS $b.log"
done
if test $colors = yes; then
red=''
grn=''
lgn=''
blu=''
mgn=''
brg=''
std=''
else
mgn= red= grn= lgn= blu= brg= std=
fi
bases="$TEST_LOGS"
bases=`for i in $bases; do echo $i; done | sed 's/\.log$//'`
bases=`echo $bases`
ws='[ ]'
results=`for b in $bases; do echo $b.trs; done`
test -n "$results" || results=/dev/null
all=` grep "^$ws*:test-result:" $results | wc -l`
pass=` grep "^$ws*:test-result:$ws*PASS" $results | wc -l`
fail=` grep "^$ws*:test-result:$ws*FAIL" $results | wc -l`
skip=` grep "^$ws*:test-result:$ws*SKIP" $results | wc -l`
xfail=`grep "^$ws*:test-result:$ws*XFAIL" $results | wc -l`
xpass=`grep "^$ws*:test-result:$ws*XPASS" $results | wc -l`
error=`grep "^$ws*:test-result:$ws*ERROR" $results | wc -l`
if test `expr $fail + $xpass + $error` -eq 0; then
success=true
else
success=false
fi
br='==================='; br=$br$br$br$br
result_count ()
{
if test x"$1" = x"--maybe-color"; then
maybe_colorize=yes
elif test x"$1" = x"--no-color"; then
maybe_colorize=no
else
echo "$@: invalid 'result_count' usage" >&2; exit 4
fi
shift
desc=$1 count=$2
if test $maybe_colorize = yes && test $count -gt 0; then
color_start=$3 color_end=$std
else
color_start= color_end=
fi
echo "${color_start}# $desc $count${color_end}"
}
create_testsuite_report ()
{
result_count $1 "TOTAL:" $all "$brg"
result_count $1 "PASS: " $pass "$grn"
result_count $1 "SKIP: " $skip "$blu"
result_count $1 "XFAIL:" $xfail "$lgn"
result_count $1 "FAIL: " $fail "$red"
result_count $1 "XPASS:" $xpass "$red"
result_count $1 "ERROR:" $error "$mgn"
}
{
echo "${PACKAGE}: ${subdir}/${TEST_SUITE_LOG}"
create_testsuite_report --no-color
echo
echo
for b in $bases; do echo $b; done\
| $create_global_log
} >${TEST_SUITE_LOG}.tmp || exit 1
mv ${TEST_SUITE_LOG}.tmp ${TEST_SUITE_LOG}
if $success; then
col="$grn"
else
col="$red"
test x"$V" = x0 || cat ${TEST_SUITE_LOG}
fi
echo "${col}$br${std}"
echo "${col}Testsuite summary for ${PACKAGE_NAME}${std}"
echo "${col}$br${std}"
create_testsuite_report --maybe-color
echo "$col$br$std"
if $success; then :; else
echo "${col}See ${subdir}/${TEST_SUITE_LOG}${std}"
if test -n "${PACKAGE_BUGREPORT}"; then
echo "${col}Please report to ${PACKAGE_BUGREPORT}${std}"
fi
echo "$col$br$std"
fi
$success || exit 1

View file

@ -16,26 +16,34 @@
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
LOG=
if [ -z "$V" -o "$V" = 0 ]; then
trace () {
echo " $1"
shift
eval "$@" $LOG
echo "$@" >> build.log
eval "$@ $LOG"
cat .log 1>&2
cat .log >> build.log
}
LOG=" >>build.log 2>&1"
LOG=" >.log 2>&1"
fi
if [ "$V" = 1 ]; then
trace () {
shift
echo "$@"
echo "$@" >> build.log
eval "$@ $LOG"
cat .log 1>&2
cat .log >> build.log
}
LOG=" >>build.log 2>&1"
LOG=" >.log 2>&1"
fi
if [ "$V" = 2 ]; then
set -x
trace () {
shift
echo "$@" >> build.log
eval "$@"
}
fi

View file

@ -20,31 +20,45 @@
#set -e
. ./config.status
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
. ./config.sh
GUILE=${GUILE-$(command -v guile)} || true
if [ -z "$GUILE" -o "$GUILE" = true ]; then
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-2.2}
else
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-$(guile -c '(display (effective-version))')}
v=
_v=
if test "$V" = 2; then
set -x
fi
if test "$V" -gt 0; then
v=v
_v=-v
fi
datadir=${datadir-$prefix/share}
docdir=${docdir-$datadir/doc/mes-$VERSION}
infodir=${infodir-$datadir/info}
mandir=${mandir-$datadir/man}
moduledir=${moduledir-$datadir/mes/module}
guile_site_dir=${guile_site_dir-$prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION}
guile_site_ccache_dir=${guile_site_ccache_dir-$prefix/lib/guile/$GUILE_EFFECTIVE_VERSION/site-ccache}
set -u
MES_PREFIX=${MES_PREFIX-$prefix/share/mes}
rm ${DESTDIR}${bindir}/mes
rm ${DESTDIR}${bindir}/ar
rm ${DESTDIR}${bindir}/mescc
rm ${DESTDIR}${bindir}/mescc.scm
rm ${DESTDIR}${bindir}/diff.scm
rmdir ${DESTDIR}${bindir} || :
rm $DESTDIR$prefix/bin/mes
rm $DESTDIR$prefix/bin/mescc
rm -f $DESTDIR$prefix/bin/diff.scm
rmdir $DESTDIR$prefix/bin || :
rm -r ${DESTDIR}${libdir}/$mes_cpu-mes
rm ${DESTDIR}${libdir}/libc-mini.a
rm ${DESTDIR}${libdir}/libmes.a
if cmp gcc-lib/libc.a ${DESTDIR}${libdir}/libc.a; then
rm ${DESTDIR}${libdir}/libc.a
fi
if cmp gcc-lib/libtcc1.a ${DESTDIR}${libdir}/libtcc1.a; then
rm ${DESTDIR}${libdir}/libtcc1.a
fi
rm ${DESTDIR}${libdir}/libc+tcc.a
rm ${DESTDIR}${libdir}/libc+gnu.a
rm -r ${DESTDIR}${includedir}/mes
rm $(grep -lr _MES_ ${DESTDIR}${includedir})
rmdir ${DESTDIR}${includedir}/linux/x86
rmdir ${DESTDIR}${includedir}/linux/x86_64
rmdir ${DESTDIR}${includedir}/linux
rmdir -p ${DESTDIR}${includedir}/sys
for i in\
AUTHORS\
@ -56,28 +70,27 @@ for i in\
NEWS\
README\
;do
rm $DESTDIR$docdir/$i || :;
rm ${DESTDIR}${docdir}/$i || :;
done
rmdir $DESTDIR$docdir || :
rm -r ${DESTDIR}${pkgdatadir}
rm -r ${DESTDIR}${guile_site_ccache_dir}/mes
rm -r ${DESTDIR}${guile_site_ccache_dir}/mescc
rm -r $DESTDIR$MES_PREFIX
rm -r $DESTDIR$guile_site_ccache_dir/mes
rm -r $DESTDIR$guile_site_ccache_dir/mescc
rm -r ${DESTDIR}${guile_site_dir}/mes
rm ${DESTDIR}${guile_site_dir}/mescc.scm
rm -r ${DESTDIR}${guile_site_dir}/mescc
rm -r $DESTDIR$guile_site_dir/mes
rm -r $DESTDIR$guile_site_dir/mescc
rm ${DESTDIR}${infodir}/dir
rm ${DESTDIR}${infodir}/mes.info*
rm ${DESTDIR}${infodir}/images/gcc-mesboot*
rm ${DESTDIR}${infodir}/images/README
rm ${DESTDIR}${mandir}/man1/mes.1
rm ${DESTDIR}${mandir}/man1/mescc.1
rm $DESTDIR$prefix/share/info/dir
rm $DESTDIR$prefix/share/info/mes.info*
rm $DESTDIR$prefix/share/info/images/gcc-mesboot*
rm $DESTDIR$prefix/share/info/images/README
rm $DESTDIR$mandir/man1/mes.1
rm $DESTDIR$mandir/man1/mescc.1
rmdir -p $DESTDIR$prefix/share/doc
rmdir -p $DESTDIR$prefix/share/info/images
rmdir -p $DESTDIR$guile_site_dir
rmdir -p $DESTDIR$guile_site_ccache_dir
rmdir -p $DESTDIR$mandir/man1
rmdir -p ${DESTDIR}${docdir}
rmdir -p ${DESTDIR}${infodir}/images
rmdir -p ${DESTDIR}${guile_site_dir}
rmdir -p ${DESTDIR}${guile_site_ccache_dir}
rmdir -p ${DESTDIR}${mandir}/man1
true

132
configure vendored
View file

@ -32,6 +32,12 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
#:use-module (ice-9 rdelim)
#:export (main))
(define *shell* "sh")
(define PACKAGE "mes")
(define PACKAGE-NAME "GNU Mes")
(define PACKAGE-BUGREPORT "bug-mes@gnu.org")
(define VERSION "0.19")
(cond-expand
(guile)
(mes (mes-use-module (srfi srfi-1))
@ -63,10 +69,6 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(and (and warn? (format (current-error-port) "warning: not found: ~a\n" name))
default)))
(define *shell* "sh")
(define PACKAGE "mes")
(define VERSION "0.19")
;;; Utility
(define (logf port string . rest)
(apply format (cons* port string rest))
@ -279,6 +281,7 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(bindir (value #t))
(datadir (value #t))
(docdir (value #t))
(includedir (value #t))
(libdir (value #t))
(srcdir (value #t))
(sysconfdir (value #t))
@ -290,14 +293,15 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(with-courage)
(infodir (value #t))
(mandir (value #t))
(disable-colors)
(enable-colors)
(disable-silent-rules)
(enable-silent-rules)
(with-system-libc)
(enable-fast-install) ; Ignored for Guix
(includedir (value #t)) ; Ignored for Debian
(mandir (value #t)) ; Ignored for Debian
(localstatedir (value #t)) ; Ignored for Debian
(libdir (value #t)) ; Ignored for Debian
(libexecdir (value #t)) ; Ignored for Debian
(runstatedir (value #t)) ; Ignored for Debian
(disable-maintainer-mode) ; Ignored for Debian
@ -320,17 +324,24 @@ Defaults for the options are specified in brackets.
Options:
-h, --help display this help
--build=BUILD configure for building on BUILD [guessed]
--colors no colorized output
--disable-silent-rules
verbose build output [V=1]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--mes use Mes C Library
-v, --verbose be verbose
--with-courage assert being courageous to configure for unsupported platform
--with-courage Assert that even if this platform is unsupported,
you will be courageous and port GNU Mes to it
(see \"Porting GNU Mes\" in the manual.)
--with-cheating cheat using Guile instead of Mes
--with-system-libc use system libc
Installation directories:
--prefix=DIR install in prefix DIR [~a]
--bindir=DIR user executables [PREFIX/bin]
--includedir=DIR C header files [PREFIX/include]
--infodir=DIR info documentation [PREFIX/share/info]
--libdir=DIR object code libraries [EPREFIX/lib]
--mandir=DIR man pages [PREFIX/share/man]
Program names:
@ -343,8 +354,6 @@ Ignored for Guix:
Ignored for Debian:
--disable-dependency-tracking
--disable-maintainer-mode
--includedir=DIR
--libdir=DIR
--libexecdir=DIR
--localstatedir=DIR
--runstatedir=DIR
@ -356,7 +365,6 @@ Some influential environment variables:
GUILD guild command
MES_FOR_BUILD build system MES [can be mes or guile]
MES_SEED location of mes-seed
TINYCC_PREFIX location of tinycc [for tests/test2]
" PACKAGE VERSION (getenv "prefix")))
(define (main args)
@ -376,11 +384,9 @@ Some influential environment variables:
(bindir (option-ref options 'bindir "${prefix}/bin"))
(datadir (option-ref options 'datadir "${prefix}/share"))
(docdir (option-ref options 'docdir "${datadir}/doc/mes-${VERSION}"))
(includedir (option-ref options 'libdir "${prefix}/include"))
(libdir (option-ref options 'libdir "${prefix}/lib"))
(moduledir "${datadir}/mes/module")
(moduledir/ (string-append
(gulp-pipe* "echo" prefix)
"/share/mes/module/"))
(pkgdatadir (string-append datadir "/mes"))
(guile-effective-version (effective-version))
(guile-site-dir (if (equal? prefix ".") (canonicalize-path ".")
(string-append prefix "/share/guile/site/" guile-effective-version)))
@ -397,8 +403,11 @@ Some influential environment variables:
(with-cheating? (option-ref options 'with-cheating #f))
(with-courage? (option-ref options 'with-courage #f))
(disable-colors? (option-ref options 'disable-colors #f))
(enable-colors? (option-ref options 'enable-colors #f))
(disable-silent-rules? (option-ref options 'disable-silent-rules #f))
(enable-silent-rules? (option-ref options 'enable-silent-rules #f))
(with-system-libc? (option-ref options 'with-system-libc #f))
(vars (filter (cut string-index <> #\=) (option-ref options '() '())))
(help? (option-ref options 'help #f))
(mes? (option-ref options 'mes #f)))
@ -425,6 +434,7 @@ Some influential environment variables:
(list (make-dep "hex2" #:version '(0 3))
(make-dep "M1" #:version '(0 3))
(make-dep "blood-elf" #:version '(0 1))
(make-dep "diff" #:optional? #t)
(make-dep "guile" #:version '(2 0) #:commands '("guile-2.2" "guile-2.0" "guile-2" "guile") #:optional? #t)
(make-dep "mes" #:version '(0 18) #:optional? #t)
(make-dep "guix" #:version '(0 13) #:optional? #t)
@ -483,16 +493,23 @@ Some influential environment variables:
(cons (check-link-c cc (make-dep "if cc can create executables" #:data "int main () {return 0;}"))
deps)
deps))
(mes? (or mes? (not (file-name "if cc can create executables" deps))))
(system-libc? (and with-system-libc? (file-name "if cc can create executables" deps)))
(build-type (or (and cc (gulp-pipe* cc "-dumpmachine")) build-type))
(arch (car (string-split build-type #\-)))
(arch (if (member arch '("i386" "i486" "i586" "i686")) "x86"
arch))
(mes-arch arch)
(mes-arch (if mes? (string-append mes-arch "-mes") mes-arch))
(mes-arch (if gcc? (string-append mes-arch "-gcc") mes-arch))
(mes-arch (if tcc? (string-append mes-arch "-gcc") mes-arch))
(posix? (and (not mesc?) (not mes?))))
(build-type-list (string-split build-type #\-))
(mes-cpu (car build-type-list))
(mes-cpu (if (member mes-cpu '("i386" "i486" "i586" "i686")) "x86"
mes-cpu))
(mes-bits (if (member mes-cpu '("x86_64")) "64"
"32"))
(mes-libc (if system-libc? "system" "mes"))
(kernel-list (filter (compose not (cut equal? <> "unknown")) (cdr build-type-list)))
(mes-kernel (cond ((or (equal? '("linux" "gnu") kernel-list)
(equal? "linux" (car kernel-list))) "linux")
((equal? '( "gnu") kernel-list) "gnu")
(else "unknown")))
(compiler (if gcc? "gcc" "mescc"))
(mes-system (string-join (list mes-cpu mes-kernel "mes") "-")))
(define* (substitute file-name pairs
#:key (target (if (string-suffix? ".in" file-name)
@ -508,8 +525,8 @@ Some influential environment variables:
line pairs))
(loop (read-line in 'concat))))))))
(when (and (not (member arch '("x86" "x86_64"))) (not with-courage?))
(stderr "platform not supported: ~a, try --with-courage\n" arch)
(when (and (not (member mes-system '("x86-linux-mes" "x86_64-linux-mes"))) (not with-courage?))
(stderr "platform not supported: ~a, try --with-courage\n" mes-system)
(exit 1))
(when (pair? missing)
(stderr "\nMissing dependencies: ~a\n" (string-join (map dependency-name missing)))
@ -523,18 +540,20 @@ Some influential environment variables:
(zero? (system* "git" "commit" "--allow-empty" "-m" "Import mes")))))
(let ((pairs `(("@PACKAGE@" . ,PACKAGE)
("@PACKAGE_NAME@" . ,PACKAGE-NAME)
("@PACKAGE_BUGREPORT@" . ,PACKAGE-BUGREPORT)
("@VERSION@" . ,VERSION)
("@arch@" . ,arch)
("@build@" . ,build-type)
("@host@" . ,host-type)
("@gcc_p@" . ,(if gcc? "1" ""))
("@mes_arch@" . ,mes-arch)
("@mes_p@" . ,(if mes? "1" ""))
("@mesc_p@" . ,(if mesc? "1" ""))
("@with_glibc_p@" . ,(if posix? "1" ""))
("@tcc_p@" . ,(if tcc? "1" ""))
("@courageous@" . ,(if with-courage? "true" "false"))
("@compiler@" . ,compiler)
("@mes_bits@" . ,mes-bits)
("@mes_kernel@" . ,mes-kernel)
("@mes_cpu@" . ,mes-cpu)
("@mes_libc@" . ,mes-libc)
("@mes_system@" . ,mes-system)
("@abs_top_srcdir@" . ,abs-top-srcdir)
("@abs_top_builddir@" . ,abs-top-builddir)
@ -547,21 +566,24 @@ Some influential environment variables:
("@program_prefix@" . ,program-prefix)
("@bindir@" . ,bindir)
("@datadir@" . ,datadir)
("@pkgdatadir@" . ,pkgdatadir)
("@docdir@" . ,docdir)
("@guile_site_ccache_dir@" . ,guile-site-ccache-dir)
("@guile_site_dir@" . ,guile-site-dir)
("@infodir@" . ,infodir)
("@includedir@" . ,includedir)
("@libdir@" . ,libdir)
("@mandir@" . ,mandir)
("@moduledir@" . ,moduledir)
("@sysconfdir@" . ,sysconfdir)
("@GUILE_EFFECTIVE_VERSION@" . ,(effective-version))
("@colors@" . ,(if disable-colors? "no" "yes"))
("@V@" . ,(if disable-silent-rules? "1" "0"))
("@AR@" . ,(or (file-name "ar" deps) ""))
("@BASH@" . ,(or (file-name "bash" deps) ""))
("@CC@" . ,(or (file-name "cc" deps) ""))
("@DIFF@" . ,(or (file-name "diff" deps) (string-append abs-top-builddir "/pre-inst-env diff.scm")))
("@DOT@" . ,(or (file-name "dot" deps) ""))
("@GIT@" . ,(or (file-name "git" deps) ""))
("@GUILE@" . ,guile)
@ -578,7 +600,6 @@ Some influential environment variables:
("@HEX2FLAGS@" . ,(or (getenv "HEX2FLAGS") ""))
("@M1FLAGS@" . ,(or (getenv "M1FLAGS") ""))
("mes/module/" . ,(string-append moduledir/))
,@(map
(lambda (o)
(cons (string-append "@" (variable-name o) "@") (or (format #f "~a" (dependency-file-name o)) "")))
@ -596,35 +617,52 @@ Some influential environment variables:
(substitute src pairs #:target target)))
'(
"build-aux/GNUmakefile.in"
"build-aux/config.status.in"
"build-aux/config.sh.in"
"build-aux/build.sh.in"
"build-aux/bootstrap.sh.in"
"build-aux/check.sh.in"
"build-aux/install.sh.in"
"build-aux/pre-inst-env.in"
"build-aux/uninstall.sh.in"
"mes/module/mes/boot-0.scm.in"
"scripts/ar.in"
"scripts/mescc.scm.in"
"scripts/mescc.in"
))
(chmod "pre-inst-env" #o755)
(chmod "scripts/ar" #o755)
(chmod "scripts/mescc" #o755)
(chmod "scripts/mescc.scm" #o755)
(chmod "build.sh" #o755)
(chmod "bootstrap.sh" #o755)
(chmod "check.sh" #o755)
(chmod "install.sh" #o755)
(chmod "uninstall.sh" #o755)
(system* "mkdir" "-p" "include/mes")
(let ((pkgdatadir (gulp-pipe* "sh" "-c" (string-append "prefix=" prefix
";datadir=" datadir
";echo ${datadir}/mes"))))
(with-output-to-file "include/mes/config.h"
(lambda _
(if system-libc?
(display "#define SYSTEM_LIBC 1
")
(display "#undef SYSTEM_LIBC
"))
(display (string-append "
#define VERSION \"" VERSION "\"
#define pkgdatadir \"" pkgdatadir "\"
")))))
(substitute (string-append srcdest "build-aux/config.make.in") pairs #:target ".config.make"))
(let ((make (and=> (file-name "make" deps) basename)))
(format (current-output-port)
"
GNU Mes is configured for ~a
(display (string-append "
GNU Mes is configured for
compiler: " compiler "
cpu: " mes-cpu "
bits: " mes-bits "
libc: " mes-libc "
kernel: " mes-kernel "
system: " mes-system "
Run:
~a to build mes
~a help for help on other targets\n"
mes-arch
(or make "./build.sh")
(or make "./build.sh"))))))
" (or make "./build.sh") " to build mes
" (or make "./build.sh") " help for help on other targets\n"))))))

View file

@ -1,7 +1,7 @@
#! /bin/sh
# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
@ -24,16 +24,27 @@ VERSION=0.19
srcdir=${srcdir-$(dirname $0)}
. ${srcdest}build-aux/trace.sh
# parse --mes
# parse --with-system-libc
cmdline=$(echo " $@")
p=${cmdline/ --mes/}
if [ "$p" != "$cmdline" ]; then
mes_p=${mes_p-1}
p=${cmdline/ --with-system-libc/}
if test "$p" != "$cmdline"; then
mes_libc=${mes_libc-system}
else
mes_libc=mes
fi
# parse --with-courage
cmdline=$(echo " $@")
p=${cmdline/ --with-courage/}
if test "$p" != "$cmdline"; then
courageous=true
else
courageous=false
fi
# parse --prefix=PREFIX
p=${cmdline/ --prefix=/ -prefix=}
if [ "$p" != "$cmdline" ]; then
if test "$p" != "$cmdline"; then
p=${p##* -prefix=}
p=${p% *}
p=${p% -*}
@ -45,7 +56,7 @@ fi
# parse --program-prefix=
p=${cmdline/ --program-prefix=/ -program-prefix=}
if [ "$p" != "$cmdline" ]; then
if test "$p" != "$cmdline"; then
p=${p##* -program-prefix=}
p=${p% *}
p=${p% -*}
@ -56,10 +67,11 @@ AR=${AR-$(command -v ar)} || true
BASH=${BASH-$(command -v bash)}
BLOOD_ELF=${BLOOD_ELF-$(command -v blood-elf)}
CC=${CC-$(command -v gcc)} || true
DIFF=${DIFF-$(command -v diff || echo $PWD/pre-inst-env diff.scm)}
GUILD=${GUILD-$(command -v guild)} || true
GUILE_TOOLS=${GUILE_TOOLS-$(command -v guile-tools)} || true
if [ ! "$GUILD" ]; then
if [ "$GUILE_TOOLS" ]; then
if test ! "$GUILD"; then
if test "$GUILE_TOOLS"; then
GUILD=$GUILE_TOOLS
else
GUILD=true
@ -73,7 +85,7 @@ GIT=${GIT-$(command -v git)} || true
PERL=${PERL-$(command -v perl)} || true
MES_SEED=${MES_SEED-../mes-seed}
if [ "$srcdir" = . ]; then
if test "$srcdir" = .; then
top_builddir=.
else
srcdest=${srcdest}
@ -82,7 +94,7 @@ fi
abs_top_srcdir=${abs_top_srcdir-$(cd ${srcdir} && pwd)}
abs_top_builddir=$PWD
if [ -z "$GUILE" -o "$GUILE" = true ]; then
if test -z "$GUILE" -o "$GUILE" = true; then
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-2.2}
else
GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-$(guile -c '(display (effective-version))')}
@ -91,6 +103,7 @@ bindir=$(eval echo ${bindir-$prefix/bin})
datadir=$(eval echo ${datadir-$prefix/share})
docdir=$(eval echo ${docdir-$datadir/doc/mes-$VERSION})
infodir=$(eval echo ${infodir-$datadir/info})
includedir=$(eval echo ${libdir-$prefix/include})
libdir=$(eval echo ${libdir-$prefix/lib})
mandir=$(eval echo ${mandir-$datadir/man})
moduledir=$(eval echo ${moduledir-$datadir/mes/module})
@ -101,17 +114,18 @@ guile_site_ccache_dir=$(eval echo ${guile_site_ccache_dir-$prefix/lib/guile/$GUI
subst () {
sed \
-e s,"@PACKAGE@,$PACKAGE,"\
-e s,"@PACKAGE_NAME@,$PACKAGE_NAME,"\
-e s,"@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,"\
-e s,"@VERSION@,$VERSION,"\
-e s,"@arch@,$arch,"\
-e s,"@build@,$build,"\
-e s,"@host@,$host,"\
-e s,"@compiler@,$compiler,"\
-e s,"@gcc_p@,$gcc_p,"\
-e s,"@mes_p@,$mes_p,"\
-e s,"@mesc_p@,$mesc_p,"\
-e s,"@tcc_p@,$tcc_p,"\
-e s,"@mes_arch@,$mes_arch,"\
-e s,"@with_glibc_p@,$with_glibc_p,"\
-e s,"@courageous@,$courageous,"\
-e s,"@mes_bits@,$mes_bits,"\
-e s,"@mes_kernel@,$mes_kernel,"\
-e s,"@mes_cpu@,$mes_cpu,"\
-e s,"@mes_libc@,$mes_libc,"\
-e s,"@mes_system@,$mes_system,"\
-e s,"@abs_top_srcdir@,$abs_top_srcdir,"\
-e s,"@abs_top_builddir@,$abs_top_builddir,"\
-e s,"@top_builddir@,$top_builddir,"\
@ -125,6 +139,7 @@ subst () {
-e s,"@guile_site_dir@,$guile_site_dir,"\
-e s,"@guile_site_ccache_dir@,$guile_site_ccache_dir,"\
-e s,"@infodir@,$infodir,"\
-e s,"@includedir@,$includedir,"\
-e s,"@libdir@,$libdir,"\
-e s,"@mandir@,$mandir,"\
-e s,"@moduledir@,$moduledir,"\
@ -135,6 +150,7 @@ subst () {
-e s,"@BASH@,$BASH,"\
-e s,"@BLOOD_ELF@,$BLOOD_ELF,"\
-e s,"@CC@,$CC,"\
-e s,"@DIFF@,$DIFF,"\
-e s,"@GIT@,$GIT,"\
-e s,"@GUILD@,$GUILD,"\
-e s,"@GUILE@,$GUILE,"\
@ -152,68 +168,88 @@ subst () {
$1 > $2
}
subst ${srcdest}build-aux/pre-inst-env.in pre-inst-env
chmod +x pre-inst-env
subst ${srcdest}scripts/mescc.in scripts/mescc
chmod +x scripts/mescc
subst ${srcdest}scripts/mescc.scm.in scripts/mescc.scm
chmod +x scripts/mescc.scm
host=${host-$($CC -dumpmachine 2>/dev/null || echo x86)}
if [ -z "$host" ]; then
arch=${arch-$(get_machine || uname -m)}
host=${host-$($CC -dumpmachine 2>/dev/null)}
if test -z "$host$host_type"; then
mes_cpu=${arch-$(get_machine || uname -m)}
else
arch=${host%%-*}
mes_cpu=${host%%-*}
fi
if [ "$arch" = i386\
-o "$arch" = i486\
-o "$arch" = i586\
-o "$arch" = i686\
]; then
arch=x86
if test "$mes_cpu" = i386\
|| test "$mes_cpu" = i486\
|| test "$mes_cpu" = i586\
|| test "$mes_cpu" = i686; then
mes_cpu=x86
fi
case "$host" in
*linux-gnu|*linux)
mes_kernel=linux;;
*gnu)
mes_kernel=gnu;;
*)
mes_kernel=linux;;
esac
case "$mes_cpu" in
x86_64)
mes_bits=64;;
*)
mes_bits=32;;
esac
#
if $CC --version | grep gcc; then #2>/dev/null; then
gcc_p=1
compiler=gcc
elif $CC --version | grep tcc; then #2>/dev/null; then
tcc_p=1
compiler=tcc
compiler=gcc
else
mes_p=1
mesc_p=1
compiler=mescc
fi
mes_arch=$arch
if [ "$mes_p" -o "$mesc_p" ]; then
mes_arch=$arch-mes
fi
mes_system=$mes_cpu-$mes_kernel-mes
if [ ! "$mesc_p" ]; then
mes_arch=$mes_arch-$compiler
fi
if [ ! "$mesc_p" -a ! "$mes_p" ]; then
with_glibc_p=1
fi
subst ${srcdest}mes/module/mes/boot-0.scm.in mes/module/mes/boot-0.scm
subst ${srcdest}build-aux/GNUmakefile.in GNUmakefile
subst ${srcdest}build-aux/config.status.in config.status
subst ${srcdest}build-aux/config.sh.in config.sh
subst ${srcdest}build-aux/build.sh.in build.sh
chmod +x build.sh
subst ${srcdest}build-aux/bootstrap.sh.in bootstrap.sh
chmod +x bootstrap.sh
subst ${srcdest}build-aux/check.sh.in check.sh
chmod +x check.sh
subst ${srcdest}build-aux/install.sh.in install.sh
chmod +x install.sh
subst ${srcdest}build-aux/pre-inst-env.in pre-inst-env
chmod +x pre-inst-env
subst ${srcdest}scripts/ar.in scripts/ar
chmod +x scripts/ar
subst ${srcdest}scripts/mescc.scm.in scripts/mescc.scm
chmod +x scripts/mescc.scm
subst ${srcdest}scripts/mescc.in scripts/mescc
chmod +x scripts/mescc
subst ${srcdest}build-aux/uninstall.sh.in uninstall.sh
chmod +x uninstall.sh
mkdir -p include/mes
if test $mes_libc = system; then
cat >> include/mes/config.h <<EOF
#define SYSTEM_LIBC 1
EOF
else
cat >> include/mes/config.h <<EOF
#undef SYSTEM_LIBC
EOF
fi
cat >> include/mes/config.h <<EOF
#define VERSION '"'$VERSION'"'
#define pkgdatadir "'"$pkgdatadir'"'
EOF
cat <<EOF
GNU Mes is configured for $mes_arch
GNU Mes is configured for
compiler: $compiler
cpu: $mes_cpu
bits: $mes_bits
libc: $mes_libc
kernel: $mes_kernel
system: $mes_system
Run:
./build.sh to build mes

View file

@ -27,8 +27,8 @@
#undef __MES_ASSERT_H
#include_next <assert.h>
#else // ! SYSTEM_LIBC
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
void assert_fail (char *s);
#define assert(x) ((x) ? (void)0 : __assert_fail (#x))
void __assert_fail (char *s);
#endif // ! SYSTEM_LIBC
#endif // __MES_ASSERT_H

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -17,5 +17,29 @@
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_GRP_H
#define __MES_GRP_H 1
#include <posix/getopt.c>
#if SYSTEM_LIBC
#undef __MES_GRP_H
#include_next <pwd.h>
#else // ! SYSTEM_LIBC
#include <sys/types.h>
struct group
{
char *gr_name;
gid_t gr_gid;
char **gr_mem;
};
struct group *getgrent (void);
void endgrent (void);
void setgrent (void);
struct group *getgrgid (gid_t gid);
struct group *getgrnam (char const *name);
#endif // ! SYSTEM_LIBC
#endif // __MES_GRP_H

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,18 +18,14 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <errno.h>
#ifndef __MES_SYSCALL_H
#define __MES_SYSCALL_H
#if __MESC__ && __i386__
#include <linux/x86-mes/mini.c>
#elif __MESC__ && __x86_64__
#include <linux/x86_64-mes/mini.c>
#elif __i386__
#include <linux/x86-mes-gcc/mini.c>
#elif __x86_64__
#include <linux/x86_64-mes-gcc/mini.c>
#else
#error arch not supported
#endif
long _sys_call (long sys_call);
long _sys_call1 (long sys_call, long one);
long _sys_call2 (long sys_call, long one, long two);
long _sys_call3 (long sys_call, long one, long two, long three);
long _sys_call4 (long sys_call, long one, long two, long three, long four);
long _sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six);
#include <posix/write.c>
#endif //__MES_SYSCALL_H

View file

@ -1,3 +1,26 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_BUILTINS_H
#define __MES_BUILTINS_H
// src/gc.mes
SCM gc_check ();
SCM gc ();
@ -389,3 +412,5 @@ SCM vector_entry (SCM x);
SCM vector_set_x (SCM x, SCM i, SCM e);
SCM list_to_vector (SCM x);
SCM vector_to_list (SCM v);
#endif //__MES_BUILTINS_H

324
include/mes/constants.h Normal file
View file

@ -0,0 +1,324 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_CONSTANTS_H
#define __MES_CONSTANTS_H
/* Symbols */
// CONSTANT cell_nil 1
#define cell_nil 1
// CONSTANT cell_f 2
#define cell_f 2
// CONSTANT cell_t 3
#define cell_t 3
// CONSTANT cell_dot 4
#define cell_dot 4
// CONSTANT cell_arrow 5
#define cell_arrow 5
// CONSTANT cell_undefined 6
#define cell_undefined 6
// CONSTANT cell_unspecified 7
#define cell_unspecified 7
// CONSTANT cell_closure 8
#define cell_closure 8
// CONSTANT cell_circular 9
#define cell_circular 9
// CONSTANT cell_begin 10
#define cell_begin 10
// CONSTANT cell_call_with_current_continuation 11
#define cell_call_with_current_continuation 11
// CONSTANT cell_vm_apply 12
#define cell_vm_apply 12
// CONSTANT cell_vm_apply2 13
#define cell_vm_apply2 13
// CONSTANT cell_vm_begin 14
#define cell_vm_begin 14
// CONSTANT cell_vm_begin_eval 15
#define cell_vm_begin_eval 15
// CONSTANT cell_vm_begin_expand 16
#define cell_vm_begin_expand 16
// CONSTANT cell_vm_begin_expand_eval 17
#define cell_vm_begin_expand_eval 17
// CONSTANT cell_vm_begin_expand_macro 18
#define cell_vm_begin_expand_macro 18
// CONSTANT cell_vm_begin_expand_primitive_load 19
#define cell_vm_begin_expand_primitive_load 19
// CONSTANT cell_vm_begin_primitive_load 20
#define cell_vm_begin_primitive_load 20
// CONSTANT cell_vm_begin_read_input_file 21
#define cell_vm_begin_read_input_file 21
// CONSTANT cell_vm_call_with_current_continuation2 22
#define cell_vm_call_with_current_continuation2 22
// CONSTANT cell_vm_call_with_values2 23
#define cell_vm_call_with_values2 23
// CONSTANT cell_vm_eval 24
#define cell_vm_eval 24
// CONSTANT cell_vm_eval2 25
#define cell_vm_eval2 25
// CONSTANT cell_vm_eval_check_func 26
#define cell_vm_eval_check_func 26
// CONSTANT cell_vm_eval_define 27
#define cell_vm_eval_define 27
// CONSTANT cell_vm_eval_macro_expand_eval 28
#define cell_vm_eval_macro_expand_eval 28
// CONSTANT cell_vm_eval_macro_expand_expand 29
#define cell_vm_eval_macro_expand_expand 29
// CONSTANT cell_vm_eval_pmatch_car 30
#define cell_vm_eval_pmatch_car 30
// CONSTANT cell_vm_eval_pmatch_cdr 31
#define cell_vm_eval_pmatch_cdr 31
// CONSTANT cell_vm_eval_set_x 32
#define cell_vm_eval_set_x 32
// CONSTANT cell_vm_evlis 33
#define cell_vm_evlis 33
// CONSTANT cell_vm_evlis2 34
#define cell_vm_evlis2 34
// CONSTANT cell_vm_evlis3 35
#define cell_vm_evlis3 35
// CONSTANT cell_vm_if 36
#define cell_vm_if 36
// CONSTANT cell_vm_if_expr 37
#define cell_vm_if_expr 37
// CONSTANT cell_vm_macro_expand 38
#define cell_vm_macro_expand 38
// CONSTANT cell_vm_macro_expand_car 39
#define cell_vm_macro_expand_car 39
// CONSTANT cell_vm_macro_expand_cdr 40
#define cell_vm_macro_expand_cdr 40
// CONSTANT cell_vm_macro_expand_define 41
#define cell_vm_macro_expand_define 41
// CONSTANT cell_vm_macro_expand_define_macro 42
#define cell_vm_macro_expand_define_macro 42
// CONSTANT cell_vm_macro_expand_lambda 43
#define cell_vm_macro_expand_lambda 43
// CONSTANT cell_vm_macro_expand_set_x 44
#define cell_vm_macro_expand_set_x 44
// CONSTANT cell_vm_return 45
#define cell_vm_return 45
// CONSTANT cell_symbol_dot 46
#define cell_symbol_dot 46
// CONSTANT cell_symbol_lambda 47
#define cell_symbol_lambda 47
// CONSTANT cell_symbol_begin 48
#define cell_symbol_begin 48
// CONSTANT cell_symbol_if 49
#define cell_symbol_if 49
// CONSTANT cell_symbol_quote 50
#define cell_symbol_quote 50
// CONSTANT cell_symbol_define 51
#define cell_symbol_define 51
// CONSTANT cell_symbol_define_macro 52
#define cell_symbol_define_macro 52
// CONSTANT cell_symbol_quasiquote 53
#define cell_symbol_quasiquote 53
// CONSTANT cell_symbol_unquote 54
#define cell_symbol_unquote 54
// CONSTANT cell_symbol_unquote_splicing 55
#define cell_symbol_unquote_splicing 55
// CONSTANT cell_symbol_syntax 56
#define cell_symbol_syntax 56
// CONSTANT cell_symbol_quasisyntax 57
#define cell_symbol_quasisyntax 57
// CONSTANT cell_symbol_unsyntax 58
#define cell_symbol_unsyntax 58
// CONSTANT cell_symbol_unsyntax_splicing 59
#define cell_symbol_unsyntax_splicing 59
// CONSTANT cell_symbol_set_x 60
#define cell_symbol_set_x 60
// CONSTANT cell_symbol_sc_expand 61
#define cell_symbol_sc_expand 61
// CONSTANT cell_symbol_macro_expand 62
#define cell_symbol_macro_expand 62
// CONSTANT cell_symbol_portable_macro_expand 63
#define cell_symbol_portable_macro_expand 63
// CONSTANT cell_symbol_sc_expander_alist 64
#define cell_symbol_sc_expander_alist 64
// CONSTANT cell_symbol_call_with_values 65
#define cell_symbol_call_with_values 65
// CONSTANT cell_symbol_call_with_current_continuation 66
#define cell_symbol_call_with_current_continuation 66
// CONSTANT cell_symbol_boot_module 67
#define cell_symbol_boot_module 67
// CONSTANT cell_symbol_current_module 68
#define cell_symbol_current_module 68
// CONSTANT cell_symbol_primitive_load 69
#define cell_symbol_primitive_load 69
// CONSTANT cell_symbol_read_input_file 70
#define cell_symbol_read_input_file 70
// CONSTANT cell_symbol_write 71
#define cell_symbol_write 71
// CONSTANT cell_symbol_display 72
#define cell_symbol_display 72
// CONSTANT cell_symbol_car 73
#define cell_symbol_car 73
// CONSTANT cell_symbol_cdr 74
#define cell_symbol_cdr 74
// CONSTANT cell_symbol_not_a_number 75
#define cell_symbol_not_a_number 75
// CONSTANT cell_symbol_not_a_pair 76
#define cell_symbol_not_a_pair 76
// CONSTANT cell_symbol_system_error 77
#define cell_symbol_system_error 77
// CONSTANT cell_symbol_throw 78
#define cell_symbol_throw 78
// CONSTANT cell_symbol_unbound_variable 79
#define cell_symbol_unbound_variable 79
// CONSTANT cell_symbol_wrong_number_of_args 80
#define cell_symbol_wrong_number_of_args 80
// CONSTANT cell_symbol_wrong_type_arg 81
#define cell_symbol_wrong_type_arg 81
// CONSTANT cell_symbol_buckets 82
#define cell_symbol_buckets 82
// CONSTANT cell_symbol_builtin 83
#define cell_symbol_builtin 83
// CONSTANT cell_symbol_frame 84
#define cell_symbol_frame 84
// CONSTANT cell_symbol_hashq_table 85
#define cell_symbol_hashq_table 85
// CONSTANT cell_symbol_module 86
#define cell_symbol_module 86
// CONSTANT cell_symbol_procedure 87
#define cell_symbol_procedure 87
// CONSTANT cell_symbol_record_type 88
#define cell_symbol_record_type 88
// CONSTANT cell_symbol_size 89
#define cell_symbol_size 89
// CONSTANT cell_symbol_stack 90
#define cell_symbol_stack 90
// CONSTANT cell_symbol_argv 91
#define cell_symbol_argv 91
// CONSTANT cell_symbol_mes_datadir 92
#define cell_symbol_mes_datadir 92
// CONSTANT cell_symbol_mes_version 93
#define cell_symbol_mes_version 93
// CONSTANT cell_symbol_internal_time_units_per_second 94
#define cell_symbol_internal_time_units_per_second 94
// CONSTANT cell_symbol_compiler 95
#define cell_symbol_compiler 95
// CONSTANT cell_symbol_arch 96
#define cell_symbol_arch 96
// CONSTANT cell_symbol_pmatch_car 97
#define cell_symbol_pmatch_car 97
// CONSTANT cell_symbol_pmatch_cdr 98
#define cell_symbol_pmatch_cdr 98
// CONSTANT cell_type_bytes 99
#define cell_type_bytes 99
// CONSTANT cell_type_char 100
#define cell_type_char 100
// CONSTANT cell_type_closure 101
#define cell_type_closure 101
// CONSTANT cell_type_continuation 102
#define cell_type_continuation 102
// CONSTANT cell_type_function 103
#define cell_type_function 103
// CONSTANT cell_type_keyword 104
#define cell_type_keyword 104
// CONSTANT cell_type_macro 105
#define cell_type_macro 105
// CONSTANT cell_type_number 106
#define cell_type_number 106
// CONSTANT cell_type_pair 107
#define cell_type_pair 107
// CONSTANT cell_type_port 108
#define cell_type_port 108
// CONSTANT cell_type_ref 109
#define cell_type_ref 109
// CONSTANT cell_type_special 110
#define cell_type_special 110
// CONSTANT cell_type_string 111
#define cell_type_string 111
// CONSTANT cell_type_struct 112
#define cell_type_struct 112
// CONSTANT cell_type_symbol 113
#define cell_type_symbol 113
// CONSTANT cell_type_values 114
#define cell_type_values 114
// CONSTANT cell_type_variable 115
#define cell_type_variable 115
// CONSTANT cell_type_vector 116
#define cell_type_vector 116
// CONSTANT cell_type_broken_heart 117
#define cell_type_broken_heart 117
// CONSTANT cell_test 118
#define cell_test 118
/* Cell types */
// CONSTANT TBYTES 0
#define TBYTES 0
// CONSTANT TCHAR 1
#define TCHAR 1
// CONSTANT TCLOSURE 2
#define TCLOSURE 2
// CONSTANT TCONTINUATION 3
#define TCONTINUATION 3
// CONSTANT TKEYWORD 4
#define TKEYWORD 4
// CONSTANT TMACRO 5
#define TMACRO 5
// CONSTANT TNUMBER 6
#define TNUMBER 6
// CONSTANT TPAIR 7
#define TPAIR 7
// CONSTANT TPORT 8
#define TPORT 8
// CONSTANT TREF 9
#define TREF 9
// CONSTANT TSPECIAL 10
#define TSPECIAL 10
// CONSTANT TSTRING 11
#define TSTRING 11
// CONSTANT TSTRUCT 12
#define TSTRUCT 12
// CONSTANT TSYMBOL 13
#define TSYMBOL 13
// CONSTANT TVALUES 14
#define TVALUES 14
// CONSTANT TVARIABLE 15
#define TVARIABLE 15
// CONSTANT TVECTOR 16
#define TVECTOR 16
// CONSTANT TBROKEN_HEART 17
#define TBROKEN_HEART 17
/* Struct types */
// CONSTANT STRUCT_TYPE 0
#define STRUCT_TYPE 0
// CONSTANT STRUCT_PRINTER 1
#define STRUCT_PRINTER 1
#define FRAME_SIZE 5
#define FRAME_PROCEDURE 4
#endif //__MES_CONSTANTS_H

View file

@ -21,7 +21,40 @@
#ifndef __MES_LIB_MINI_H
#define __MES_LIB_MINI_H
#if !SYSTEM_LIBC
#if HAVE_CONFIG_H
#include <mes/config.h>
#endif
// CONSTANT STDIN 0
#ifndef STDIN
#define STDIN 0
#endif
// CONSTANT STDOUT 1
#ifndef STDOUT
#define STDOUT 1
#endif
// CONSTANT STDERR 2
#ifndef STDERR
#define STDERR 2
#endif
char **environ;
int __stdin;
int __stdout;
int __stderr;
int eputs (char const *s);
int puts (char const *s);
int oputs (char const *s);
#if SYSTEM_LIBC
#include <sys/types.h>
#include <unistd.h>
#else //!SYSTEM_LIBC
#ifndef _SIZE_T
#define _SIZE_T
@ -57,33 +90,6 @@ typedef int error_t;
int errno;
#endif // !__MES_ERRNO_T
#endif //!WITH_LIBC
// CONSTANT STDIN 0
#ifndef STDIN
#define STDIN 0
#endif
// CONSTANT STDOUT 1
#ifndef STDOUT
#define STDOUT 1
#endif
// CONSTANT STDERR 2
#ifndef STDERR
#define STDERR 2
#endif
char **environ;
int __stdin;
int __stdout;
int __stderr;
int eputs (char const *s);
int puts (char const *s);
int oputs (char const *s);
#if !SYSTEM_LIBC
size_t strlen (char const *s);
ssize_t _write ();
ssize_t write (int filedes, void const *buffer, size_t size);

View file

@ -35,16 +35,12 @@ char *ltoab (long x, int base);
char *ntoab (long number, int base, int signed_p);
char *ultoa (unsigned long number);
char *utoa (unsigned number);
int atoi (char const *s);
int eputc (int c);
int fdgetc (int fd);
char * fdgets (char *s, int count, int fd);
int fdputc (int c, int fd);
int fdputs (char const *s, int fd);
int fdungetc (int c, int fd);
int _fdungetc_p (int fd);
int isdigit (int c);
int isspace (int c);
int isxdigit (int c);
int mes_open (char const *file_name, int flags, int mask);
int _open2 (char const *file_name, int flags);
int _open3 (char const *file_name, int flags, int mask);
@ -52,4 +48,14 @@ int oputc (int c);
int oputs (char const *s);
char *search_path (char const *file_name);
#if !SYSTEM_LIBC
extern char *__brk;
extern void (*__call_at_exit) (void);
void __assert_fail (char *s);
void _exit (int code);
long brk (void *addr);
#endif // !SYSTEM_LIBC
#endif //__MES_LIB_H

80
include/mes/macros.h Normal file
View file

@ -0,0 +1,80 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_MACROS_H
#define __MES_MACROS_H
#define TYPE(x) g_cells[x].type
#define CAR(x) g_cells[x].car
#define CDR(x) g_cells[x].cdr
#define NTYPE(x) g_news[x].type
#define NCAR(x) g_news[x].car
#define NCDR(x) g_news[x].cdr
#define BYTES(x) g_cells[x].car
#define LENGTH(x) g_cells[x].car
#define REF(x) g_cells[x].car
#define START(x) (g_cells[x].car >> 16)
#define LEN(x) (g_cells[x].car & 0xffff)
#define VARIABLE(x) g_cells[x].car
#define CLOSURE(x) g_cells[x].cdr
#define CONTINUATION(x) g_cells[x].cdr
#define CBYTES(x) (char*)&g_cells[x].cdr
#define CSTRING_STRUCT(x) (char*)&g_cells[x.cdr].cdr
#define MACRO(x) g_cells[x].car
#define NAME(x) g_cells[x].cdr
#define PORT(x) g_cells[x].car
#define STRING(x) g_cells[x].cdr
#define STRUCT(x) g_cells[x].cdr
#define VALUE(x) g_cells[x].cdr
#define VECTOR(x) g_cells[x].cdr
#define NLENGTH(x) g_news[x].car
#define NCBYTES(x) (char*)&g_news[x].cdr
#define NVALUE(x) g_news[x].cdr
#define NSTRING(x) g_news[x].cdr
#define NVECTOR(x) g_news[x].cdr
#define CSTRING(x) CBYTES (STRING (x))
#define MAKE_BYTES0(x) make_bytes (x, strlen (x))
#define NAME_SYMBOL(symbol,name) {size_t s = strlen (name); CAR (symbol) = s; CDR (symbol) = make_bytes (name, s);}
#define MAKE_CHAR(n) make_cell__ (TCHAR, 0, n)
#define MAKE_CONTINUATION(n) make_cell__ (TCONTINUATION, n, g_stack)
#define MAKE_NUMBER(n) make_cell__ (TNUMBER, 0, (long)n)
#define MAKE_REF(n) make_cell__ (TREF, n, 0)
#define MAKE_STRING0(x) make_string (x, strlen (x))
#define MAKE_STRING_PORT(x) make_cell__ (TPORT, -length__ (g_ports) - 2, x)
#define MAKE_MACRO(name, x) make_cell__ (TMACRO, x, STRING (name))
#define CAAR(x) CAR (CAR (x))
#define CADR(x) CAR (CDR (x))
#define CDAR(x) CDR (CAR (x))
#define CDDR(x) CDR (CDR (x))
#define CADAR(x) CAR (CDR (CAR (x)))
#define CADDR(x) CAR (CDR (CDR (x)))
#define CDADAR(x) CAR (CDR (CAR (CDR (x))))
#endif //__MES_MACROS_H

106
include/mes/mes.h Normal file
View file

@ -0,0 +1,106 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_MES_H
#define __MES_MES_H
#include <sys/types.h>
typedef long SCM;
struct scm
{
long type;
SCM car;
SCM cdr;
};
// mes
extern int g_debug;
extern char *g_buf;
extern SCM g_continuations;
extern SCM g_symbols;
extern SCM g_symbol_max;
// a/env
extern SCM r0;
// param 1
extern SCM r1;
// save 2
extern SCM r2;
// continuation
extern SCM r3;
// current-module
extern SCM m0;
// macro
extern SCM g_macros;
extern SCM g_ports;
// gc
extern long ARENA_SIZE;
extern long MAX_ARENA_SIZE;
extern long STACK_SIZE;
extern long JAM_SIZE;
extern long GC_SAFETY;
extern long MAX_STRING;
extern char *g_arena;
extern long g_free;
extern SCM g_stack;
extern SCM *g_stack_array;
extern struct scm *g_cells;
extern struct scm *g_news;
SCM alloc (long n);
SCM apply (SCM f, SCM x, SCM a);
SCM apply_builtin (SCM fn, SCM x);
SCM cstring_to_list (char const *s);
SCM cstring_to_symbol (char const *s);
SCM display_ (SCM x);
SCM fdisplay_ (SCM, int, int);
SCM gc_init ();
SCM gc_peek_frame ();
SCM gc_pop_frame ();
SCM gc_push_frame ();
SCM init_time (SCM a);
SCM make_bytes (char const *s, size_t length);
SCM make_cell__ (long type, SCM car, SCM cdr);
SCM make_hash_table_ (long size);
SCM make_hashq_type ();
SCM make_initial_module (SCM a);
SCM make_string (char const *s, size_t length);
SCM make_vector__ (long k);
SCM read_input_file_env (SCM);
SCM string_equal_p (SCM a, SCM b);
SCM struct_ref_ (SCM x, long i);
SCM struct_set_x_ (SCM x, long i, SCM e);
SCM vector_ref_ (SCM x, long i);
SCM vector_set_x_ (SCM x, long i, SCM e);
int peekchar ();
int readchar ();
int unreadchar ();
long length__ (SCM x);
size_t bytes_cells (size_t length);
void assert_max_string (size_t i, char const *msg, char *string);
#include "mes/builtins.h"
#include "mes/constants.h"
#include "mes/macros.h"
#endif //__MES_MES_H

View file

@ -25,6 +25,8 @@
#include_next <pwd.h>
#else // ! SYSTEM_LIBC
#include <sys/types.h>
struct passwd
{
char *pw_name;

View file

@ -37,6 +37,7 @@ typedef char *va_list;
#define va_end(ap) (void)((ap) = 0)
#define va_copy(dest, src) dest = src
int vexec (char const *file_name, va_list ap);
int vfprintf (FILE * stream, char const *template, va_list ap);
int vprintf (char const *format, va_list ap);
int vsprintf (char *str, char const *format, va_list ap);

View file

@ -51,7 +51,7 @@ void *memmove (void *dest, void const *src, size_t n);
void *memset (void *s, int c, size_t n);
void *memchr (void const *block, int c, size_t size);
int memcmp (void const *s1, void const *s2, size_t n);
void *memmem (void const *haystack, int haystack_len, void const *needle, int needle_len);
char *strcat (char *dest, char const *src);
char *strchr (char const *s, int c);
int strcasecmp (char const *s1, char const *s2);

View file

@ -83,6 +83,7 @@ struct stat
// *INDENT-ON*
int chmod (char const *file_name, mode_t mode);
int fstat (int filedes, struct stat *buf);
int mkdir (char const *file_name, mode_t mode);
int chown (char const *file_name, uid_t owner, gid_t group);
int rmdir (char const *file_name);

View file

@ -59,7 +59,6 @@ struct timespec
int clock_gettime (clockid_t clk_id, struct timespec *tp);
struct tm *localtime (time_t const *timep);
struct tm *gmtime (time_t const *time);
time_t time (time_t * tloc);
#endif // ! SYSTEM_LIBC

View file

@ -65,6 +65,7 @@ int execl (char const *file_name, char const *arg, ...);
int execve (char const *file, char *const argv[], char *const env[]);
int execvp (char const *file, char *const argv[]);
int fork (void);
int fsync (int filedes);
char *getcwd (char *buf, size_t size);
uid_t getuid (void);
gid_t getgid (void);
@ -72,6 +73,8 @@ int setgid (gid_t newgid);
int setuid (uid_t newuid);
uid_t geteuid (void);
gid_t getegid (void);
pid_t getpid (void);
pid_t getppid (void);
int isatty (int fd);
int link (char const *oldname, char const *newname);
off_t lseek (int fd, off_t offset, int whence);

View file

@ -1,10 +0,0 @@
void
assert_fail (char *s)
{
eputs ("assert fail: ");
eputs (s);
eputs ("\n");
char *fail = s;
fail = 0;
*fail = 0;
}

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -19,6 +19,7 @@
*/
#include <mes/lib.h>
#include <ctype.h>
int
isxdigit (int c)

View file

@ -1,7 +1,7 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright (C) 1993 Free Software Foundation, Inc.
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -31,5 +31,5 @@ __getdirentries (int filedes, char *buffer, size_t nbytes, off_t * basep)
if (basep)
*basep = lseek (filedes, (off_t) 0, SEEK_CUR);
return read (filedes, buf, nbytes);
return read (filedes, buffer, nbytes);
}

View file

@ -32,6 +32,8 @@
#include <dirstream.h>
int getdents (int filedes, char *buffer, size_t nbytes);
/* Read a directory entry from DIRP. */
struct dirent *
readdir (DIR * dirp)

View file

@ -1,121 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libc+tcc.c>
#if __GNU__
#error TODO, see wip-hurd
#elif __linux__
#include <linux/gnu.c>
#else
#error both __GNU__ and _linux__ are undefined, choose one
#endif
// m4
#include <stdlib/abort.c>
#include <stdlib/atol.c>
#include <stub/atof.c>
#include <string/bcmp.c>
#include <string/bcopy.c>
#include <string/bzero.c>
#include <stdio/fileno.c>
#include <stub/fpurge.c>
#include <stub/freadahead.c>
#include <string/index.c>
#include <ctype/isalnum.c>
#include <ctype/isalpha.c>
#include <ctype/iscntrl.c>
#include <ctype/isprint.c>
#include <ctype/ispunct.c>
#include <posix/mktemp.c>
#include <stub/pclose.c>
#include <stub/popen.c>
#include <string/rindex.c>
#include <stub/rewind.c>
#include <stub/setbuf.c>
#include <stub/system.c>
#include <string/strerror.c>
// binutils
#include <stdlib/abs.c>
#include <stub/chown.c>
#include <stub/ctime.c>
#include <stdio/fdgets.c>
#include <stdio/feof.c>
#include <stdio/fgets.c>
#include <stub/frexp.c>
#include <stdio/perror.c>
#include <stub/sigsetmask.c>
#include <string/strcspn.c>
#include <string/strncat.c>
#include <string/strpbrk.c>
#include <string/strspn.c>
#include <stub/sys_siglist.c>
#include <stub/umask.c>
#include <stub/utime.c>
#include <stub/fscanf.c>
#include <ctype/isascii.c>
#include <stdlib/bsearch.c>
#include <stub/gmtime.c>
#include <posix/sbrk.c>
#include <string/strdup.c>
#include <posix/raise.c>
#include <stub/strftime.c>
#include <stdlib/mbstowcs.c>
#include <stdio/clearerr.c>
#include <math/fabs.c>
// gcc
#include <stdio/freopen.c>
#include <stub/times.c>
#include <posix/sleep.c>
#include <posix/unsetenv.c>
#include <stdlib/atexit.c>
#include <posix/alarm.c>
#include <stub/getpwnam.c>
#if !__GNU__
#include <stdlib/alloca.c>
#endif
#include <stdlib/__exit.c>
#include <stub/__cleanup.c>
#include <dirent/__getdirentries.c>
#include <dirent/closedir.c>
#include <dirent/opendir.c>
#include <dirent/readdir.c>
// diffutils
#include <posix/execl.c>
// make
#include <stub/getlogin.c>
#include <stub/setvbuf.c>
#include <stub/sigblock.c>
#include <stub/sigaddset.c>
#include <stub/setlocale.c>
// bash
#include <stub/getpwuid.c>
#include <stub/rand.c>
#include <stub/sigdelset.c>
#include <stub/ttyname.c>

View file

@ -1,108 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <setjmp.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <signal.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <unistd.h>
#include <libc.c>
int errno;
#if __GNU__
#include <hurd/tcc.c>
#elif __linux__
#include <linux/tcc.c>
#else
#error both __GNU__ and _linux__ are undefined, choose one
#endif
#if __MESC__ && __i386__
#include <x86-mes/setjmp.c>
#elif __MESC__ && __x86_64__
#include <x86_64-mes/setjmp.c>
#elif __i386__
#include <x86-mes-gcc/setjmp.c>
#elif __x86_64__
#include <x86_64-mes-gcc/setjmp.c>
#else
#error arch not supported
#endif
#include <ctype/islower.c>
#include <ctype/isupper.c>
#include <ctype/tolower.c>
#include <ctype/toupper.c>
#include <mes/search-path.c>
#include <posix/execvp.c>
#include <stdio/fclose.c>
#include <stdio/fdopen.c>
#include <stdio/ferror.c>
#include <stdio/fflush.c>
#include <stdio/fopen.c>
#include <stdio/fprintf.c>
#include <stdio/fread.c>
#include <stdio/fseek.c>
#include <stdio/ftell.c>
#include <stdio/fwrite.c>
#include <stdio/printf.c>
#include <stdio/remove.c>
#include <stdio/snprintf.c>
#include <stdio/sprintf.c>
#include <stdio/sscanf.c>
#include <stdio/vfprintf.c>
#include <stdio/vprintf.c>
#include <stdio/vsnprintf.c>
#include <stdio/vsprintf.c>
#include <stdio/vsscanf.c>
#include <stdlib/calloc.c>
#include <stdlib/qsort.c>
#include <stdlib/strtof.c>
#include <stdlib/strtol.c>
#include <stdlib/strtold.c>
#include <stdlib/strtoll.c>
#include <stdlib/strtoul.c>
#include <stdlib/strtoull.c>
#include <string/memmem.c>
#include <string/memmove.c>
#include <string/strcat.c>
#include <string/strchr.c>
#include <string/strlwr.c>
#include <string/strncpy.c>
#include <string/strrchr.c>
#include <string/strstr.c>
#include <string/strupr.c>
#include <stub/sigaction.c>
#include <stub/ldexp.c>
#include <stub/mprotect.c>
#include <stub/localtime.c>
#include <stub/strtod.c>
#include <stub/sigemptyset.c>

View file

@ -1,89 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <sys/ioctl.h>
#include <stdarg.h>
#include <stdlib.h>
#include <mes/lib.h>
#include <stdio.h>
#include <mes/lib.h>
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>
#include <libc-mini.c>
#include <libmes.c>
#if __GNU__
#include <hurd/libc.c>
#elif __linux__
#include <linux/libc.c>
#else
#error both __GNU__ and _linux__ are undefined, choose one
#endif
void _env ();
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
int
__mes_debug ()
{
static int __mes_debug = -1;
if (__mes_debug == -1)
{
char *p = getenv ("MES_DEBUG");
__mes_debug = p ? MAX (atoi (p), 1) : 0;
}
return __mes_debug;
}
#if !___GNU__
#include <assert/assert.c>
#include <stdlib/malloc.c>
#include <string/memcpy.c>
#endif
#include <stdio/getchar.c>
#include <stdio/putchar.c>
#include <stdio/fputc.c>
#include <stdio/fputs.c>
#include <stdio/putc.c>
#include <stdio/getc.c>
#include <stdio/fgetc.c>
#include <stdio/ungetc.c>
#include <string/memchr.c>
#include <string/memcmp.c>
#include <string/memset.c>
#include <string/strcmp.c>
#include <string/strcpy.c>
#include <string/strncmp.c>
#include <stdlib/free.c>
#include <stdlib/realloc.c>
#include <posix/getenv.c>
#include <posix/isatty.c>
#include <posix/setenv.c>
#include <posix/wait.c>
#include <posix/execv.c>

View file

@ -1,147 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
// gcc/xgcc wants -lg with all these
// what's the story here?
#include <sys/time.h>
#define exit __exit
#define fprintf _fprintf
#define longjmp _longjmp
#define malloc _malloc
#define printf _printf
#define putchar _putchar
#define puts _puts
#define setjmp _setjmp
#define signal _signal
#define strcmp _strcmp
#define sprintf _sprintf
#define sscanf _sscanf
#include <libc+tcc.c>
#if __GNU__
#include <linux/gnu.c>
#elif __linux__
#include <linux/gnu.c>
#else
#error both __GNU__ and _linux__ are undefined, choose one
#endif
// m4
#include <stdlib/abort.c>
#include <stub/atof.c>
#include <string/bcmp.c>
#include <string/bcopy.c>
#include <string/bzero.c>
#include <stdio/fileno.c>
#include <stub/fpurge.c>
#include <stub/freadahead.c>
#include <string/index.c>
#include <ctype/isalnum.c>
#include <ctype/isalpha.c>
#include <ctype/iscntrl.c>
#include <ctype/isprint.c>
#include <ctype/ispunct.c>
#include <posix/mktemp.c>
#include <stub/pclose.c>
#include <stub/popen.c>
#include <string/rindex.c>
#include <stub/rewind.c>
#include <stub/setbuf.c>
#include <stub/system.c>
#include <string/strerror.c>
// binutils
#include <stdlib/abs.c>
#include <stub/chown.c>
#include <stub/ctime.c>
#include <stdio/fdgets.c>
#include <stdio/feof.c>
#include <stdio/fgets.c>
#include <stub/frexp.c>
#include <stdio/perror.c>
#include <stub/sigsetmask.c>
#include <string/strcspn.c>
#include <string/strncat.c>
#include <string/strpbrk.c>
#include <string/strspn.c>
#include <stub/sys_siglist.c>
#include <stub/umask.c>
#include <stub/utime.c>
#include <stub/fscanf.c>
#include <ctype/isascii.c>
#include <stdlib/bsearch.c>
#include <stub/gmtime.c>
#include <posix/sbrk.c>
#include <string/strdup.c>
#include <posix/raise.c>
#include <stub/strftime.c>
#include <stdlib/mbstowcs.c>
#include <stdio/clearerr.c>
#include <math/fabs.c>
// gcc
#include <stdio/freopen.c>
#include <stub/times.c>
#include <posix/sleep.c>
#include <posix/unsetenv.c>
#include <stdlib/atexit.c>
#include <posix/alarm.c>
#include <stub/getpwnam.c>
#if !__GNU__
#include <stdlib/alloca.c>
#endif
//#include <stdlib/__exit.c>
#include <stub/__cleanup.c>
int
__libc_subinit ()
{
static int stub = 0;
if (__mes_debug () && !stub)
eputs ("__libc_subinit stub\n");
stub = 1;
return 0;
}
int
__syscall_error ()
{
static int stub = 0;
if (__mes_debug () && !stub)
eputs ("__syscall_error stub\n");
stub = 1;
return 0;
}
int
__fpu_control ()
{
static int stub = 0;
if (__mes_debug () && !stub)
eputs ("__fpu_control stub\n");
stub = 1;
return 0;
}

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
access (char const *file_name, int how)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
long
brk (void *addr)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
chdir (char const *file_name)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
chmod (char const *file_name, mode_t mask)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,8 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <time.h>
int

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,10 +18,14 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <mes/lib.h>
int
close (int filedes)
{
if (filedes > 2)
__ungetc_buf[filedes] = -1;
__ungetc_clear (filedes);
return _sys_call1 (SYS_close, (int) filedes);
}

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
dup (int old)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
dup2 (int old, int new)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
execve (char const *file_name, char *const argv[], char *const env[])
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <stdarg.h>
int
fcntl (int filedes, int command, ...)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
fork ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
fstat (int filedes, struct stat *statbuf)
{

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
fsync (int filedes)
{

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <limits.h>
#include <sys/types.h>
char *
_getcwd (char *buffer, size_t size)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/types.h>
int
getdents (int filedes, char *buffer, size_t nbytes)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
gid_t
getegid ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
uid_t
geteuid ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
gid_t
getgid ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
pid_t
getpid ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
pid_t
getppid ()
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/resource.h>
int
getrusage (int processes, struct rusage *rusage)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,8 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/time.h>
int

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
uid_t
getuid ()
{

View file

@ -1,43 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/chdir.c>
#include <linux/fcntl.c>
#include <linux/fstat.c>
#include <linux/getdents.c>
#include <linux/getegid.c>
#include <linux/geteuid.c>
#include <linux/getgid.c>
#include <linux/getpid.c>
#include <linux/getppid.c>
#include <linux/getrusage.c>
#include <linux/getuid.c>
#include <linux/kill.c>
#include <linux/link.c>
#include <linux/lstat.c>
#include <linux/mkdir.c>
#include <linux/nanosleep.c>
#include <linux/pipe.c>
#include <linux/rename.c>
#include <linux/setgid.c>
#include <linux/settimer.c>
#include <linux/setuid.c>
#include <linux/signal.c>
#include <linux/sigprogmask.c>

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <stdarg.h>
#include <sys/ioctl.h>
int
ioctl (int filedes, unsigned long command, ...)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
int
kill (pid_t pid, int signum)
{

View file

@ -1,60 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes 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.
*
* GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <mes/lib.h>
#include <fcntl.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#if __MESC__ && __i386__
#include <linux/x86-mes/mes.c>
#elif __MESC__ && __x86_64__
#include <linux/x86_64-mes/mes.c>
#elif __i386__
#include <linux/x86-mes-gcc/mes.c>
#elif __x86_64__
#include <linux/x86_64-mes-gcc/mes.c>
#else
#error arch not supported
#endif
#include <linux/access.c>
#include <linux/brk.c>
#include <linux/chmod.c>
#include <linux/clock_gettime.c>
#include <linux/dup.c>
#include <linux/dup2.c>
#include <linux/execve.c>
#include <linux/fork.c>
#include <linux/fsync.c>
#include <linux/getcwd.c>
#include <linux/gettimeofday.c>
#include <linux/ioctl.c>
#include <linux/open.c>
#include <linux/read.c>
#include <linux/time.c>
#include <linux/unlink.c>
#include <linux/waitpid.c>

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
link (char const *old_name, char const *new_name)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/types.h>
off_t
lseek (int filedes, off_t offset, int whence)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
lstat (char const *file_name, struct stat *statbuf)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
mkdir (char const *file_name, mode_t mode)
{

View file

@ -18,8 +18,13 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <time.h>
#include <sys/time.h>
int
nanosleep (const struct timespec *requested_time, struct timespec *remaining)
nanosleep (struct timespec const *requested_time, struct timespec const *remaining)
{
return _sys_call2 (SYS_nanosleep, (long) requested_time, (long) remaining);
}

View file

@ -18,13 +18,19 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <mes/lib.h>
#include <fcntl.h>
#include <stdarg.h>
int
_open3 (char const *file_name, int flags, int mask)
{
int r = _sys_call3 (SYS_open, (long) file_name, (int) flags, (int) mask);
__ungetc_init ();
if (r > 2)
__ungetc_buf[r] = -1;
__ungetc_clear (r);
return r;
}

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
int
pipe (int filedes[2])
{

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <mes/lib.h>
#include <fcntl.h>
ssize_t
read (int filedes, void *buffer, size_t size)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
int
rename (char const *old_name, char const *new_name)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
rmdir (char const *file_name)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
int
setgid (gid_t newgid)
{

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/time.h>
#include <unistd.h>
int
setitimer (int which, struct itimerval const *new, struct itimerval *old)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
int
setuid (uid_t newuid)
{

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <unistd.h>
#include <signal.h>
#if __x86_64__
void
_restorer (void)

View file

@ -18,6 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <signal.h>
#include <unistd.h>
int
sigprocmask (int how, sigset_t const *set, sigset_t * oldset)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
stat (char const *file_name, struct stat *statbuf)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,8 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <time.h>
time_t

View file

@ -18,6 +18,9 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
int
unlink (char const *file_name)
{

View file

@ -18,6 +18,10 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/types.h>
pid_t
waitpid (pid_t pid, int *status_ptr, int options)
{

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2016,2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,6 +18,8 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include "mes/lib-mini.h"
#define SYS_exit "0x01"
#define SYS_write "0x04"

Some files were not shown because too many files have changed in this diff Show more