Compare commits

...

82 Commits

Author SHA1 Message Date
Jan Nieuwenhuizen c13941261e
mes: Run indent.
for i in $(find . -name '*.h' -o -name '*.c'); do indent $i --no-tabs --no-space-after-casts; done
2019-02-11 07:55:17 +01:00
Jan Nieuwenhuizen dac4283f7d
mes: Grand indent: prepare. 2019-02-11 07:53:39 +01:00
Jan Nieuwenhuizen 615a4a1d22
doc: Update WIP 2019-02-11 07:40:23 +01:00
Jan Nieuwenhuizen a5474558c4
mescc: Mes C Library: Use mes_open to avoid open trickery.
* include/mes/lib.h (mes_open): Declare.
* lib/libmes.c[WITH_GLIBC]: Remove open undefine.
(mes_open)[!WITH_GLIBC]: New function.
* src/mes.c (open_boot): Use mes_open.
* src/posix.c (open_input_file): Likewise.
(open_output_file): Likewise.
2019-02-11 07:19:44 +01:00
Jan Nieuwenhuizen 60e7c8491f
mescc: Mes C Library: Remove dead code.
* lib/glibc.c: Remove.
* lib/abtol.c: Remove.
2019-02-11 07:19:44 +01:00
Jan Nieuwenhuizen c971e02614
mescc: Mes C Library: Explode linux/tcc.c. WIP 2019-02-11 07:19:43 +01:00
Jan Nieuwenhuizen 3d615ee790
mescc: Mes C Library: Explode linux/libc.c. WIP 2019-02-11 07:19:43 +01:00
Jan Nieuwenhuizen b2afb3b3f3
mescc: Mes C Library: Explode linux/gnu.c. WIP 2019-02-11 07:19:43 +01:00
Jan Nieuwenhuizen 544d601aea
mescc: Mes C Library: Explode libc-mini.c. WIP 2019-02-11 07:19:43 +01:00
Jan Nieuwenhuizen 8b149e7f4f
mescc: Mes C Library: Cleanup includes.
* include/mes/lib-mini.h: Move from include/libmes-mini.h.  Update users.
* include/mes/lib.h: Move from include/libmes.h.  Update users.
2019-02-11 07:19:31 +01:00
Jan Nieuwenhuizen 4fc1f5444a
mescc: Support -nodefaultlibs, -nostartfiles, -nostdlib.
* module/mescc.scm (parse-opts): Parse -nodefaultlibs, -nostartfiles, -nostdlib.
* module/mescc/mescc.scm (mescc:link): Handle -nodefaultlibs, -nostdlib.
(hex2->elf): Handle -nostartfiles, -nostdlib.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen d0e6228fa1
build: Do not install test binaries.
* build-aux/install.sh.in: Do not install test binaries.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen 29950ae645
mes: m2: Move force-output to Scheme.
* mes/module/mes/guile.mes (force-output): New function.
* src/posix.c (force_output): Remove.
* src/mes.c (mes_builtins): Remove adding of force-output.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen 39693eca63
mescc: Mes C Library: Support gcc-4.6.4: vsscanf: Support *, [, s.
* lib/stdio/vsscanf.c (vsscanf): Support  *, [, s.
* lib/stdio/vfscanf.c (vfscanf): Likewise.
* lib/tests/stdio/90-sscanf.c: Test it.
* build-aux/check-mescc.sh (tests): Run it.
* lib/x86-mes/x86.M1 (mov____%al,0x32(%ebp): New macro.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen 44add95226
mescc: Mes C Library: Support gcc-4.6.4: Allow larger qsort entries.
* lib/stdlib/qsort.c (qswap): Increase buffer to 128 bytes (gmp needs
36) and add assert.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen 544540d332
mescc: Mes C Library: Support gcc-4.6.4: Avoid type/size_t conflicts.
* include/alloca.h: Remove typedefs, include sys/types.h.
* include/stdint.h: Likewise.
* include/string.h: Likewise.
2019-02-10 19:30:01 +01:00
Jan Nieuwenhuizen 0f7af7ac61
mescc: Mes C Library: Support gcc-4.6.4: Add mmap, munmap.
* include/linux/x86/syscall.h (SYS_mmap, SYS_munmap): New macro.
* include/linux/x86_64/syscall.h (SYS_mmap, SYS_munmap): New macro.
* include/sys/mman.h (MAP_SHARED, MAP_PRIVATE, MAP_ANONYMOUS,
MAP_POPULATE, MAP_ANON, MAP_FAILED): New macro.
(mmap, munmap): Declare.
* lib/linux/gnu.c (mmap, munmap): New function.
* lib/linux/x86-mes-gcc/mes.c (_sys_call6): New function.
* lib/linux/x86-mes/mes.c (__sys_call6): New function.
(_sys_call6): New function.
* lib/linux/x86_64-mes-gcc/mes.c (_sys_call6): New function.
* lib/linux/x86_64-mes/mes.c (__sys_call): Cater for 6 syscall parameters.
(_sys_call6): New function.
* lib/x86-mes/x86.M1 (pop____%ebp): New macro.
* lib/x86_64-mes/x86_64.M1 (mov____0x8(%rbp),%r9): New macro.
2019-02-10 19:29:52 +01:00
Jan Nieuwenhuizen 96b585aba4
mescc: Mes C Library: Support gcc-4.6.4: Add strtok.
* include/string.h (strtok): Declare.
* lib/string/strtok.c (strtok): New file.
* lib/libc+gnu.c: Include it.
2019-02-09 23:25:45 +01:00
Jan Nieuwenhuizen ace1056fab
mescc: Mes C Library: Support gcc-4.6.4: Add labs.
* lib/math/labs.c: New file.
* lib/libc+gnu.c: Include it.
* include/math.h (labs): Declare.
2019-02-09 23:25:45 +01:00
Jan Nieuwenhuizen 834a722029
mescc: Mes C Library: Support gcc-4.6.4: Implement rewind.
* lib/stdio/rewind.c: Move from ../stub.  Implement.
* include/stdio.h (rewind): Declare.
* lib/libc+gnu.c: Update include.
* lib/libg.c: Update include.
* lib/stub/rewind.c: Remove.
2019-02-09 23:25:45 +01:00
Jan Nieuwenhuizen 7f26f85e75
mescc: Mes C Library: Support gcc-4.6.4: Add asctime stub.
* lib/stub/asctime.c: New file.
* lib/libc+gnu.c: Include it.
* include/time.h (asctime): Declare.
2019-02-09 23:25:45 +01:00
Jan Nieuwenhuizen 61033960aa
mescc: Mes C Library: Support gcc-4.6.4: vfprintf, vsnprintf: #-type.
* lib/stdio/vfprintf.c (vfprintf): Support #-type prefix.  Show whole
format upon error.
* lib/stdio/vsnprintf.c (vsnprintf): Likewise.
* lib/stdio/vfscanf.c (vfscanf): Show whole template upon error.
* lib/stdio/vsscanf.c (vsscanf): Likewise.
2019-02-09 23:25:45 +01:00
Jan Nieuwenhuizen b7b8470247
mescc: Mes C Library: Support gcc-4.6.4: vfprintf, vsnprintf: pad with space.
* lib/stdio/vfprintf.c (vfprintf): pad with space.
* lib/stdio/vsnprintf.c (vsnprintf): pad with space.
2019-02-09 23:25:44 +01:00
Jan Nieuwenhuizen a6072afb98
mescc: Mes C Library: Support gcc-4.6.4: atexit: return 0.
* lib/stdlib/atexit.c (atexit): return 0.
2019-02-08 19:34:50 +01:00
Jan Nieuwenhuizen 82332f0c0b
mescc: Mes C Library: Support gcc-4.6.4: Add SSIZE_MAX macro.
* include/stdint.h (SSIZE_MAX): New macro.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen 31e03d1cd7
mescc: Mes C Library: Support gcc-4.6.4: Add math stubs.
* lib/math/ceil.c: New file.
* lib/math/floor.c: New file.
* lib/stub/atan2.c: New file.
* lib/stub/cos.c: New file.
* lib/stub/exp.c: New file.
* lib/stub/log.c: New file.
* lib/stub/modf.c: New file.
* lib/stub/pow.c: New file.
* lib/stub/sin.c: New file.
* lib/stub/sqrt.c: New file.
* lib/libc+gnu.c: Include them.
* include/math.h (atan2, ceil, cos, exp, fabs, floor, log, modf, pow,
sin, sqrt): Declare.
* lib/math/fabs.c: Update.
* lib/stub/ldexp.c: Update.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen b6bbbf66e9
mescc: Mes C Library: Support gcc-4.6.4: Add fscanf, vfscanf.
* lib/stdio/vfscanf.c: New file.
* lib/stdio/fscanf.c: New file.
* include/stdio.h (fscanf): Declare.
* include/stdarg.h (vfscanf): Declare.
* lib/libc+gnu.c: Include them.
* lib/libg.c: Likewise.
* lib/stub/fscanf.c: Remove.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen 76729c9971
mescc: Mes C Library: vfprintf, vsnprintf: Pad floats with space.
* lib/stdio/vfprintf.c (vfprintf): Pad floats with space.
* lib/stdio/vsnprintf.c (vsnprintf): Pad floats with space.
* lib/tests/stdio/90-sprintf.c: Test it.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen e930a00a35
mescc: Mes C Library: Support gcc-4.6.4: Add float macros.
* include/float.h (DBL_EPSILON, DBL_MANT_DIG, DBL_MAX, DBL_MIN,
FLT_RADIX, LDBL_EPSILON, LDBL_MANT_DIG, LDBL_MAX, LDBL_MIN): New
macro.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen 2121b98bda
mescc: Mes C Library: Support gcc-4.6.4: Add stdint [U]SHRT macros.
* include/stdint.h (SHRT_MAX, SHRT_MIN, USHRT_MAX, USHRT_MIN): New
macro.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen a3fb84e6a6
mescc: Mes C Library: Support gcc-4.6.4: Add abort prototype.
* include/stdlib.h (abort): Add prototype.
2019-02-08 19:34:49 +01:00
Jan Nieuwenhuizen 087a0767a0
mescc: Mes C Library: Support gcc-4.6.4: Fix ctime stub.
* lib/stub/ctime.c (ctime): Fix stub to avoid segfault upon use.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 6c1b4cf1d7
mescc: Mes C Library: Support gcc-4.6.4: Fix uintptr_t, add [u]intmax_t.
* include/stdint.h: Fix uintptr_t, add [u]intmax_t.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 510f82a575
.dir-locals.el: Assert default GNU settings.
* .dir-locals.el: Assert default GNU settings.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 17a46c5c64
Fix typo in stage0 copyright headers.
* lib/x86-mes/elf-0footer.hex2: Fix typo.
* lib/x86-mes/elf32-0header.hex2: Fix typo.
* lib/x86-mes/elf32-body-exit-42.hex2: Fix typo.
* lib/x86-mes/elf32-footer-single-main.hex2: Fix typo.
* lib/x86-mes/elf32-header.hex2: Fix typo.
* lib/x86_64-mes/elf-0footer.hex2: Fix typo.
* lib/x86_64-mes/elf64-0header.hex2: Fix typo.
* lib/x86_64-mes/elf64-body-exit-42.hex2: Fix typo.
* lib/x86_64-mes/elf64-footer-single-main.hex2: Fix typo.
* lib/x86_64-mes/elf64-header.hex2: Fix typo.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 6a11d4c9b7
build: M2-Planet first-aid, simplest build script possible.
* simple.sh: New file.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 9eaccf70eb
build: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p.
* build-aux/build-mes.sh: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p.
* build-aux/build.sh.in: Likewise.
* build-aux/cc.sh (link): Likewise.
* build-aux/config.make.in (with_glibc_p): Likewise.
* build-aux/config.sh (libc): Likewise.
(CPPFLAGS): Likewise.
* build-aux/config.status.in (with_glibc_p): Likewise.
* build-aux/test.sh: Likewise.
* configure (main): Likewise.
* configure.sh (subst): Likewise.
(mes_arch): Likewise.
* include/libmes.h: Likewise.
* include/linux/x86_64/syscall.h: Likewise.
* lib/libmes.c: Likewise.
* lib/tests/stdio/70-printf-hello.c (main): Likewise.
* lib/tests/stdio/70-printf-simple.c (main): Likewise.
* lib/tests/stdio/80-sscanf.c (main): Likewise.
* lib/tests/stdlib/50-malloc.c: Likewise.
* module/mescc/preprocess.scm (c99-input->full-ast): Likewise.
* scaffold/cons-mes.c: Likewise.
* scaffold/lib/stdlib/malloc.c: Likewise.
* scaffold/micro-mes.c: Likewise.
* scaffold/tests/61-array.c (getenv): Likewise.
* scaffold/tiny-mes.c: Likewise.
* src/mes.c: Likewise.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 15c8c9857a
mescc: Mes C Library: Fix compile warnings.
* include/libmes.h (dtoab, itoa, ltoa, ntoab, ultoa, utoa): Return
char* (WAS: char const*).
* lib/*/*c: Update, add missing includes.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 2183f4bb2a
mescc: Mes C Library: vsscanf: Increase count for scanned float.
* lib/stdio/vsscanf.c (vsscanf): Increase count for scanned float.
2019-02-08 19:34:48 +01:00
Jan Nieuwenhuizen 6ffeec94a7
mescc: Mes C Library: Fix isatty.
* lib/posix/isatty.c (isatty): Test ioctl == 0.
* mes/module/mes/boot-0.scm.in: Update: no tty?: read from stdin.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen d23b72589d
test: 50-getenv: Test PATH, allow to fail.
* lib/tests/posix/50-getenv.c (main): Test PATH.
* build-aux/check-mescc.sh (broken): Add 50-getenv.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen 9a0daee989
mes: Support map and for-each with lists of unequal length.
* mes/module/mes/base.mes (map): Support lists of unequal length.
* mes/module/mes/scm.mes (for-each): Likewise.
* module/mescc/compile.scm (expr->register): Fix compile warning.
* tests/scm.test ("map 1,2", "map 2,1", "for-each 1,2", "for-each
2,1": Test it.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen 5f0e6200dc
mescc: Mes C Library: Use __ as global internal prefix.
* include/libmes-mini.h (g_stdin, g_stdout, g_stderr): Rename to
__stdin, __stdout, __stderr.  Update users.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen 013cb1f33d
mescc: Mes C Library: Support GNU Sed: Fix ungetc.
* include/sys/resource.h (OPEN_MAX, RLIMIT_NOFILE): New macro.
* lib/libc.c: Add memset.c include.
* lib/libc+tcc.c: Remove memset.c include.
* lib/linux/tcc.c (close):
* lib/mes/fdgetc.c (__ungetc_buf): New global.
(_ungetc_pos, _ungetc_fd, _ungetc_buf): Remove.  Update users.
* scaffold/tests/65-read.c: Update.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen 4d6084b20b
mescc: Mes C Library: Support GNU Tar: Fix getpwnam, getpwuid stubs.
* lib/stub/getpwnam.c (getpwnam): Return pointer to static struct
passwd.
* lib/stub/getpwuid.c (getpwuid): Likewise.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen e81e48c701
mescc: Mes C Library: Support GNU Tar: Add getgrgid, getgrnam, setgrent stub.
* include/grp.h: New file.
* lib/stub/getgrgid.c: New file.
* lib/stub/getgrnam.c: New file.
* lib/stub/setgrent.c: New file.
* lib/libc+gnu.c: Include them.
2019-02-08 19:34:47 +01:00
Jan Nieuwenhuizen 27045d21dc
mescc: Mes C Library: Support GNU Awk: Add wchar_t.
* include/sys/types.h (wchar_t): New typedef.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen a652026c08
mescc: Mes C Library: Support GNU Awk: Add getpgid, getpgrp stubs.
* include/unistd.h (getpgid, getpgrp): Declare.
* lib/stub/getpgid.c: New file.
* lib/stub/getpgrp.c: New file.
* lib/libc+gnu.c: Include them.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 6f08fee316
mescc: Mes C Library: Support GNU Tar: Add mktime stub, fix localtime stub.
* include/time.h (mktime): Declare.
* lib/stub/mktime.c: New stub.
* lib/libc+gnu.c: Include it.
* lib/stub/localtime.c (localtime): Return pointer to static struct
tm.  Avoids segfaults.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 29272e3d96
mescc: Mes C Library: Support GNU Tar: Add creat, mknod.
* include/linux/x86_64/syscall.h (SYS_mknod): New macro.
* include/linux/x86/syscall.h (SYS_mknod): New macro.
* lib/linux/gnu.c (mknod): New function, use it.
* include/sys/stat.h: Declare it.
* include/fcntl.h (creat): New macro.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 9033e03bbf
mescc: Mes C Library: Support GNU Tar: Add missing defines.
* include/errno.h (ENXIO): New macro.
* include/sys/stat.h (S_IFIFO, S_ISFIFO): New macro.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 1d8667e993
mescc: Mes C Library: Support GNU Bash: Add struct winsize.
* include/termio.h (struct winsize): New type.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 8d7de98307
mescc: Mes C Library: Support GNU Awk: Implement atof.
* lib/stdlib/atoi.c: Update.
* lib/stdlib/atof.c: Rename from stub/atof.c; Implement.
* lib/libc+gnu.c: Update include.
* lib/libg.c: Update include.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen b8e8de3d12
mescc: Mes C Library: Bugfix for tcc-compiled exit assembly.
* lib/linux/x86-mes-gcc/mini.c (_exit): Add clobbered registers %eax,
%ebx.  Fixes always exit 1.
2019-02-08 19:34:46 +01:00
Jan Nieuwenhuizen 94299b2860
mescc: Mes C Library: Support GNU Awk: Add dtoab, %f in vfprintf, vsnprintf.
* include/libmes.h (dtoab): Declare.
* lib/mes/ntoab.c (ntoab): Update.
* lib/mes/dtoab.c: New file.
* lib/tests/mes/90-dtoab.c: Test it.
* lib/tests/stdio/90-sprintf.c: Test it.
* build-aux/check-mescc.sh (tests): Run it, against...
* lib/tests/mes/90-dtoab.stdout: ...baseline.
* lib/stdio/vfprintf.c (vfprintf): Support %f, even more naive support
for %e, %E, %g, %G.
* lib/stdio/vsnprintf.c (vsnprintf): Likewise.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen c8a3d50705
mescc: Mes C Library: Support GNU Awk: Add abtod, implementing sttrod.
* include/libmes.h (abtod): Declare.
* lib/mes/abtod.c: New file.
* lib/mes/abtol.c: Update.
* lib/stdlib/strtod.c: Use it to implement; move from stub/strtod.
* lib/tests/mes/90-abtod.c: Test it.
* lib/tests/mes/90-abtod.stdout: Baseline.
* build-aux/check-mescc.sh (tests): Run it.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen c093998151
mescc: Mes C Library: Support GNU Awk: vsscanf: Support %f.
* lib/stdio/vsscanf.c (vsscanf): Support %f.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen b2aea040ec
mescc: Mes C Library: Support GNU Awk: Do not flush std files.
* lib/stdio/fflush.c (fflush): Do not flush std files.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen 761f48d8f0
mescc: Mes C Library: Support GNU Awk: Add isgraph.
* lib/ctype/isgraph.c: New file.
* lib/libc+gnu.c: Include it.
* include/ctype.h: Add missing prototypes.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen 2b41e3c1a0
mescc: Mes C Library: Support GNU Tar: Add readlink, readlink.
* lib/linux/gnu.c (readlink, symlink): New function.
* include/unistd.h (readlink, symlink): Declare.
* include/linux/x86/syscall.h (SYS_readlink, SYS_symlink): New macro.
* include/linux/x86_64/syscall.h (SYS_symlink, SYS_readlink): New
macro.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen f39e1cc250
mescc: Mes C Library: Support GNU Tar: Add execlp.
* lib/posix/execl.c (vexec): New function.
(execl): Use it.
* lib/posix/execlp.c: New file.
* lib/libc+gnu.c: Include it.
* include/unistd.h (execlp): Declare.
* lib/tests/posix/90-execlp.c: New file.
* lib/tests/posix/90-execlp.stdout: New file.
* build-aux/check-mescc.sh: Test it.
2019-02-08 19:34:45 +01:00
Jan Nieuwenhuizen ecf9220bbc
test: Remove special characters from files.
* scaffold/tests/06-call-not-1.c: Rename from 06-call-!1.c.
* scaffold/tests/06-not-call-1.c: Rename from 06-!call-1.c.
* scaffold/tests/12-if-eq.c: Rename from 12-if-==.c.
* scaffold/tests/13-if-neq.c: Rename from 13-if-!=.c.
* scaffold/tests/15-if-not-f.c: Rename from 15-if-!f.c.
* scaffold/tests/21-char-array-simple.c: Rename from 21-char[]-simple.c.
* scaffold/tests/21-char-array.c: Rename from 21-char[].c.
* scaffold/tests/22-while-char-array.c: Rename from 22-while-char[].c.
* scaffold/tests/41-ternary.c: Rename from 41-?.c.
* scaffold/tests/7u-call-ternary.c: Rename from 7u-call-?.c.
* scaffold/tests/7u-ternary-expression.c: Rename from 7u-?-expression.c.
* build-aux/check-mescc.sh (tests): Update.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen aa32fbd8ff
build: Support building with Gash.
* build-aux/check-mes.sh: Replace unspported $((..)) by $(expr ...).
* build-aux/check-mescc.sh: Likewise.
* build-aux/check-tcc.sh: Likewise.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen f5a6ba799d
build: Configure: remove temp files.
* configure (gulp-pipe*): Remove .error.
(check-header-c): Remove .config.c.
(check-compile-c): Likewise.
(check-link-c): Likewise.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen 86c6188906
build: Remove mini-mes.
* scaffold/mini-mes.c: Remove.
* build-aux/build-mes.sh: Remove commented build instructions.
* .gitignore: Remove pattern.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen feb8fc2bad
mescc: Mes C Library: Initialize streams in crt1.
* lib/linux/x86-mes-gcc/crt1.c: Initialize streams.
* lib/linux/x86-mes/crt1.c: Likewise.
* lib/linux/x86_64-mes-gcc/crt1.c: Likewise.
* lib/linux/x86_64-mes/crt1.c: Likewise.
* src/mes.c (main): Remove initialization of streams.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen 5e5be32e6f
mescc: Mes C Library: Populate with function tests from scaffold.
* .gitignore: Update.
* build-aux/bootstrap.sh.in: Update.
* build-aux/build-mes.sh: Update.
* build-aux/check-mescc.sh: Update.
* lib/tests/assert/50-assert.c: Move from scaffold/tests/50-assert.c.
* lib/tests/dirent/90-readdir.c: Move from scaffold/tests/99-readdir.c.
* lib/tests/dirent/readdir.dir: Move from scaffold/tests/readdir.dir.
* lib/tests/io/90-stat.c: Move from scaffold/tests/92-stat.c.
* lib/tests/mes/30-oputs.c: Move from scaffold/tests/31-oputs.c.
* lib/tests/mes/50-itoa.c: Move from scaffold/tests/51-itoa.c.
* lib/tests/posix/90-unsetenv.c: Move from scaffold/tests/94-unsetenv.c.
* lib/tests/setjmp/80-setjmp.c: Move from scaffold/tests/80-setjmp.c.
* lib/tests/signal/90-signal.c: Move from scaffold/tests/95-signal.c.
* lib/tests/stdio/70-printf-hello.c: Move from scaffold/tests/70-printf-hello.c.
* lib/tests/stdio/70-printf-simple.c: Move from scaffold/tests/70-printf-simple.c.
* lib/tests/stdio/70-printf.c: Move from scaffold/tests/70-printf.c.
* lib/tests/stdio/80-sscanf.c: Move from scaffold/tests/87-sscanf.c.
* lib/tests/stdio/90-fopen-append.c: Move from scaffold/tests/98-fopen.c.
* lib/tests/stdio/90-fopen.c: Move from scaffold/tests/97-fopen.c.
* lib/tests/stdio/90-fread-fwrite.c: Move from scaffold/tests/93-fread-fwrite.c.
* lib/tests/stdio/90-fseek.c: Move from scaffold/tests/91-fseek.c.
* lib/tests/stdlib/50-getenv.c: Move from lib/tests/stdlib/getenv.c.
* lib/tests/stdlib/50-malloc.c: Move from lib/tests/stdlib/malloc.c.
* lib/tests/stdlib/70-strtoull.c: Move from scaffold/tests/7j-strtoull.c.
* lib/tests/stdlib/80-qsort-dupes.c: Move from scaffold/tests/81-qsort-dupes.c.
* lib/tests/stdlib/80-qsort.c: Move from scaffold/tests/81-qsort.c.
* lib/tests/stdlib/90-strtol.c: Move from scaffold/tests/96-strto.c.
* lib/tests/string/30-strlen.c: Move from scaffold/tests/30-strlen.c.
* lib/tests/string/50-strcmp.c: Move from scaffold/tests/51-strcmp.c.
* lib/tests/string/50-strcpy.c: Move from scaffold/tests/53-strcpy.c.
* lib/tests/string/50-strncmp.c: Move from scaffold/tests/51-strncmp.c.
* lib/tests/string/70-strchr.c: Move from scaffold/tests/70-strchr.c.
* lib/tests/string/80-strncpy.c: Move from scaffold/tests/86-strncpy.c.
* lib/tests/string/80-strrchr.c: Move from scaffold/tests/88-strrchr.c.
* lib/tests/string/90-snprintf.c: Move from scaffold/tests/9a-snprintf.c.
* lib/tests/string/90-strpbrk.c: Move from scaffold/tests/90-strpbrk.c.
* lib/tests/string/90-strspn.c: Move from scaffold/tests/90-strspn.c.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen a43de2947d
mescc: Mes C Library: Start test suite.
TODO: move strict libc tests from scaffold/test/* here.

* lib/tests/stdlib/getenv.c: New file.
* lib/tests/stdlib/malloc.c: Move from scaffold.
* build-aux/bootstrap.sh.in: Built them.
* build-aux/build-mes.sh: Likewise.
2019-02-08 19:34:44 +01:00
Jan Nieuwenhuizen 35e203e49c
mes: Remove stray debugging newline output.
* mes/module/mes/guile.mes (open-input-file): Move debugging newline
into debug clause.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen f470ec826d
mescc: Mes C Library: Fix brk return type compare.
* lib/stdlib/malloc.c (malloc): Fix brk return type compare.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 2102d0d26e
core: Rename load_env to read_boot.
* src/mes.c (read_boot): Rename from load_env; Update users.
(open_boot): Rename from load_boot; Update users.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 51c6e0626d
core: Initialize g_buf dynamically, add MES_STRING_MAX override.
* src/mes.c (g_buf, MAX_STRING): Move from strings.c.
(gc_init_cells): Initialize g_buf dynamically.
(main): Add environment override MES_MAX_STRING for MAX_STRING.
* doc/mes.texi (Environment Variables): Document it.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 0b7a0a2d23
mes-snarf: rewrite for development-time snarfing
* build-aux/mes-snarf.scm (%gcc?): Remove.
(symbol->header): Produce code for src/builtins.h.
(symbol->source, symbol->names, function->environment): Remove.
(snarf-symbols): Rewrite, snarf from init_symbol (...).
(function->source): Produce code to be manually put into
(main): Remove --mes option.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 56315d3da5
core: Resurrect POSIX build. Thanks, gio!
* lib/libmes.c[POSIX]: Define and initialize g_stdin, g_stdout and
g_stderr that were moved to crt1 for non-POSIX builds.
* src/mes.c[POSIX]: Remove struct-initialisation exceptions.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen e2cf54fae5
core: Remove struct definitions for builtins, drop snarfing.
After making a change to the list of builtin functions, run

    cat src/*.i

and move the into

    src/mes.c:mes_builtins ()

and, or also after changing the list of fixed symbols in src/mes.c:mes_symbols (), do

    cat src/*.h > src/builtins.h

* build-aux/build.sh.in: Remove snarfing.
* build-aux/bootstrap.sh.in: Likewise.
* mes/module/mes/display.mes (display):
* mes/module/mes/type-0.mes (cell:type-alist): Remove <cell:function>.
(function?, builtin?): Remove.
* src/builtins.h: New file.
* src/mes.c (TFUNCTION): Remove.
(struct function): Remove.
(apply_builtin): Rewrite from call.
(mes_builtins): Rewrite.
(init_builtin, make_builtin_type, make_builtin, builtin_name,
builtin_arity, builtin, builtin_p, builtin_printer): New function.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 7ac74192c9
core: Remove struct definitions for cells, drop snarfing for symbols.
* src/mes.c (init_symbol): New function.
(mes_symbols): Use it.
(scm_nil, ... scm_test): Remove.
2019-02-08 19:34:43 +01:00
Jan Nieuwenhuizen 5ccf23f7e2
mes: Add take-while.
* mes/module/srfi/srfi-1.mes (take-while): New function.
2019-02-08 19:34:42 +01:00
Jan Nieuwenhuizen 9a82d835cd
mescc: Enhance POSIX command-line support, e.g. -DFOO=1.
* module/mescc.scm (unclump-single): New function.
(main): Use it to support -DFOO=bar, and equivalent.
2019-02-08 19:34:42 +01:00
Jan Nieuwenhuizen 99be4bf07e
build: Support running out-of-tree.
* build-aux/pre-inst-env.in (MES_PREFIX): Use absolute name.
2019-02-06 21:54:19 +01:00
Jan Nieuwenhuizen 3ebee71653
core: Remove string debugging.
* src/strings.c (make_bytes, make_string, string_equal_p,
symbol_to_string, symbol_to_keyword, make_symbol): Remove string
debugging.
2019-02-06 21:54:19 +01:00
Jan Nieuwenhuizen 41db6e22d1
core: Remove --dump, --load.
* mes/module/mes/boot-0.scm.in (tty?): Remove --dump, --load.
* src/mes.c (bload_env): Remove.
* src/reader.c (dump): Remove.
2019-02-06 21:54:18 +01:00
Jan Nieuwenhuizen d6e3618c39
doc: Post-release update.
* doc/announce/ANNOUNCE-0.19: Update.
2019-02-06 21:53:48 +01:00
487 changed files with 8661 additions and 5906 deletions

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,73 +16,20 @@
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
((nil
.
((indent-tabs-mode . nil)
(eval
.
(progn
(let ((top (locate-dominating-file default-directory ".dir-locals.el"))))
;; The GNU project defaults. These are also the GNU Emacs defaults.
;; Re-asserting theme here, however, as a courtesy for setups that use
;; a global override.
(
;; For writing GNU C code, see
;; https://www.gnu.org/prep/standards/html_node/Writing-C.html
(c-mode . ((c-file-style . "gnu")
(indent-tabs-mode . nil)))
(defun guile--manual-look-up (id mod)
(message "guile--manual-look-up id=%s => %s mod=%s" id (symbol-name id) mod)
(let ((info-lookup-other-window-flag
geiser-guile-manual-lookup-other-window-p))
(info-lookup-symbol (symbol-name id) 'scheme-mode))
(when geiser-guile-manual-lookup-other-window-p
(switch-to-buffer-other-window "*info*"))
(search-forward (format "%s" id) nil t))
(makefile-mode . ((indent-tabs-mode . t)))
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
(nil . ((indent-tabs-mode . nil)
(fill-column . 72)))
(defun guix-switch-profile (&optional profile)
"reset Emacs' environment by snarfing PROFILE/etc/profile"
(defun matches-in-string (regexp string)
"return a list of matches of REGEXP in STRING."
(let ((matches))
(save-match-data
(string-match "^" "")
(while (string-match regexp string (match-end 0))
(push (or (match-string 1 string) (match-string 0 string)) matches)))
matches))
(interactive "fprofile: ")
(let* ((output (shell-command-to-string (concat "GUIX_PROFILE= /bin/sh -x " profile "/etc/profile")))
(exports (matches-in-string "^[+] export \\(.*\\)" output)))
(mapcar (lambda (line) (apply #'setenv (split-string line "="))) exports )))
(defun shell-args-to-string (&rest args)
(shell-command-to-string (mapconcat 'identity args " ")))
(defun as (string &optional arch)
(let* ((arch (or arch "--64"))
(asm (subst-char-in-string ?_ ?\s string))
(foo (message "asm:%S" asm))
(result (shell-args-to-string "as" arch (concat "<(echo '" asm "')")))
(disassembly (shell-args-to-string "objdump" "-d" "a.out"))
(foo (message "disassembly: %S" disassembly))
(match (string-match "^ 0:[\t]\\([^\t]*\\)" disassembly))
(code (match-string 1 disassembly))
(code (apply 'concat (split-string code " " t))))
(insert " ")
(insert code)))
(defun as-32 (point mark)
(interactive "r")
(let* ((string (buffer-substring point mark))
(code (as string "--32")))
(insert " ")
(insert code)))
(defun as-64 (point mark)
(interactive "r")
(let* ((string (buffer-substring point mark))
(code (as string "--64")))
(insert " ")
(insert code)))))))
(makefile-mode
(indent-tabs-mode . t))
(scheme-mode
.
((geiser-active-implementations . (guile))
@ -96,5 +43,69 @@
(mapcar
#'prefix-dir-locals-dir
'("scripts" "module")))))))
(texinfo-mode . ((indent-tabs-mode . nil)
(fill-column . 72))))
(fill-column . 72)))
(nil .
((eval
.
(progn
(let ((top (locate-dominating-file default-directory ".dir-locals.el"))))
(defun guile--manual-look-up (id mod)
(message "guile--manual-look-up id=%s => %s mod=%s" id (symbol-name id) mod)
(let ((info-lookup-other-window-flag
geiser-guile-manual-lookup-other-window-p))
(info-lookup-symbol (symbol-name id) 'scheme-mode))
(when geiser-guile-manual-lookup-other-window-p
(switch-to-buffer-other-window "*info*"))
(search-forward (format "%s" id) nil t))
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
(defun guix-switch-profile (&optional profile)
"reset Emacs' environment by snarfing PROFILE/etc/profile"
(defun matches-in-string (regexp string)
"return a list of matches of REGEXP in STRING."
(let ((matches))
(save-match-data
(string-match "^" "")
(while (string-match regexp string (match-end 0))
(push (or (match-string 1 string) (match-string 0 string)) matches)))
matches))
(interactive "fprofile: ")
(let* ((output (shell-command-to-string (concat "GUIX_PROFILE= /bin/sh -x " profile "/etc/profile")))
(exports (matches-in-string "^[+] export \\(.*\\)" output)))
(mapcar (lambda (line) (apply #'setenv (split-string line "="))) exports )))
(defun shell-args-to-string (&rest args)
(shell-command-to-string (mapconcat 'identity args " ")))
(defun as (string &optional arch)
(let* ((arch (or arch "--64"))
(asm (subst-char-in-string ?_ ?\s string))
(foo (message "asm:%S" asm))
(result (shell-args-to-string "as" arch (concat "<(echo '" asm "')")))
(disassembly (shell-args-to-string "objdump" "-d" "a.out"))
(foo (message "disassembly: %S" disassembly))
(match (string-match "^ 0:[\t]\\([^\t]*\\)" disassembly))
(code (match-string 1 disassembly))
(code (apply 'concat (split-string code " " t))))
(insert " ")
(insert code)))
(defun as-32 (point mark)
(interactive "r")
(let* ((string (buffer-substring point mark))
(code (as string "--32")))
(insert " ")
(insert code)))
(defun as-64 (point mark)
(interactive "r")
(let* ((string (buffer-substring point mark))
(code (as string "--64")))
(insert " ")
(insert code))))))))

42
.gitignore vendored
View File

@ -62,22 +62,52 @@
/lib/x86-mes/0exit-42
/lib/x86-mes/exit-42
/lib/tests/*/[0-9a][0-9a-z]-*
/lib/tests/*/x86-mes-*
!/lib/tests/*/*.c
!/lib/tests/*/*.exit
!/lib/tests/*/*.stdout
/scaffold/argv
/scaffold/hello
/scaffold/main
/scaffold/malloc
/scaffold/micro-mes
/scaffold/tiny-mes
/scaffold/mini-mes
/scaffold/x86-mes-*
/scaffold/x86_64-mes-*
/scaffold/tests/x86-mes-*
/scaffold/tests/[0-9a][0-9a-z]-[^.]*
/scaffold/tests/[0-9a][0-9a-z]-*
/scaffold/tests/t.*
!/scaffold/tests/*.c
!/scaffold/tests/*.exit
!/scaffold/tests/*.stdout
/src/mes.mes.symbols.h
/src/gc.mes.h
/src/hash.mes.h
/src/lib.mes.h
/src/math.mes.h
/src/mes.mes.h
/src/module.mes.h
/src/posix.mes.h
/src/reader.mes.h
/src/strings.mes.h
/src/struct.mes.h
/src/vector.mes.h
/src/gc.mes.i
/src/hash.mes.i
/src/lib.mes.i
/src/math.mes.i
/src/mes.mes.i
/src/module.mes.i
/src/posix.mes.i
/src/reader.mes.i
/src/strings.mes.i
/src/struct.mes.i
/src/vector.mes.i
/src/*.h
/src/*.i
/src/mes
/src/x86-mes-mes
/src/x86_64-mes-mes
@ -124,3 +154,5 @@
/doc/images/gcc-mesboot-graph.eps
/doc/images/gcc-mesboot-graph.pdf
/doc/web/
/lib/x86_64-mes/0exit-42
/lib/x86_64-mes/exit-42

View File

@ -8,15 +8,15 @@ Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
notice and this notice are preserved.
* SETUP
guix environment -l .guix.scm #64 bit + 32bit
GUIX_PACKAGE_PATH=guix guix environment -l .guix.scm #64 bit + 32bit
or
guix environment --system=i686-linux -l .guix.scm #32 bit only
GUIX_PACKAGE_PATH=guix guix environment --system=i686-linux -l .guix.scm #32 bit only
or
guix package --profile=~/.config/guix/mes --manifest=build-aux/manifest.scm
GUIX_PACKAGE_PATH=guix guix package --profile=~/.config/guix/mes --manifest=build-aux/manifest.scm
. ~/.config/guix/mes/etc/profile
* BUILD
@ -260,3 +260,4 @@ https://notabug.org/rain1/hex86/src/master/tests/hex0b3.hex86
** <pdewacht> e.g. as described here
https://jamey.thesharps.us/2016/07/15/testing-strategies-for-corrode/
("Randomized testing with Csmith and C-Reduce") [10:58]
** linux syscalls: https://fedora.juszkiewicz.com.pl/syscalls.html

View File

@ -19,8 +19,8 @@ similar way.
* Regular build
** Prerequisites
*** Guix
guix environment -l .guix.scm #64 bit + 32bit
guix environment --system=i686-linux -l .guix.scm #32 bit only
GUIX_PACKAGE_PATH=guix guix environment -l .guix.scm #64 bit + 32bit
GUIX_PACKAGE_PATH=guix guix environment --system=i686-linux -l .guix.scm #32 bit only
*** Other GNU/Linux
- [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.5 is known to work.

View File

@ -10,18 +10,6 @@ MES_ARENA=${MES_ARENA-100000000}
MES_MAX_ARENA=${MES_MAX_ARENA-100000000}
MES_STACK=${MES_STACK-500000}
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/gc.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/hash.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/lib.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/math.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/mes.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/module.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/posix.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/reader.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/strings.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/struct.c
@GUILE@ -e '(mes-snarf)' build-aux/mes-snarf.scm --mes src/vector.c
hex2 --LittleEndian --Architecture 1 --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 1 --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 1 -f lib/x86-mes/x86.M1 -f @MES_SEED@/x86-mes/crt1.S -o lib/x86-mes/crt1.o
@ -63,9 +51,9 @@ mv lib/libc+gnu.x86-mes-o lib/x86-mes/libc+gnu.o
@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 scaffold/malloc.x86-mes-o scaffold/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/stdlib/50-malloc.x86-mes-o lib/tests/stdlib/50-malloc.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-malloc scaffold/malloc.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 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

View File

@ -32,7 +32,7 @@ fi
[ "$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
[ ! "$mesc_p" -a ! "$posix_p" ] && (program_prefix= compile lib/linux/$mes_arch/crt0)
[ ! "$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)
@ -69,14 +69,18 @@ compile scaffold/hello
compile scaffold/argv
(libc="-l c-mini" link scaffold/argv)
[ "$mes_p" ] && compile scaffold/malloc
[ "$mes_p" ] && link scaffold/malloc
[ "$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
#[ "$mes_p" ] && compile scaffold/mini-mes
#[ "$mes_p" ] && link scaffold/mini-mes
compile src/mes
link src/mes

View File

@ -27,13 +27,6 @@ if [ -n "$GUILE" -a "$GUILE" != true ]; then
sh ${srcdest}build-aux/build-guile.sh
fi
if [ ! "$mes_p" ]; then
sh ${srcdest}build-aux/snarf.sh
#elif [ ! -d "$MES_SEED" ]; then
#else
fi
sh ${srcdest}build-aux/snarf.sh --mes
if [ "$gcc_p$tcc_p" ]; then
sh ${srcdest}build-aux/build-mes.sh
elif [ -d "$MES_SEED" ]; then
@ -41,7 +34,7 @@ elif [ -d "$MES_SEED" ]; then
fi
## FIXME: remove this and have user configure/build/install for each compiler?
unset CFLAGS CPPFLAGS LDFLAGS gcc_p tcc_p posix_p
unset CFLAGS CPPFLAGS LDFLAGS gcc_p tcc_p with_glibc_p
MES=guile
mesc_p=1
mes_p=1

View File

@ -41,7 +41,7 @@ archive () {
link () {
lib=$libc
[ "$posix_p" ] && lib='-l mes'
[ "$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
}

View File

@ -66,14 +66,14 @@ for t in $tests; do
echo $t: [SKIP];
continue
fi
${top_builddir}/pre-inst-env sh "$t" &> $t.${mes}log
${top_builddir}/pre-inst-env sh "$t" > $t.${mes}log 2>&1
r=$?
total=$((total+1))
total=$(expr $total + 1)
if [ $r = 0 ]; then
echo $t: [${mes}OK]
else
echo $t: [${mes}FAIL]
fail=$((fail+1))
fail=$(expr $fail + 1)
fi
done
if [ $fail != 0 ]; then

View File

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

View File

@ -135,20 +135,20 @@ for t in $tests; do
continue;
fi
cp $TINYCC_PREFIX/tests/tests2/$i* scaffold/tinycc
sh ${srcdest}build-aux/test.sh "scaffold/tinycc/$t" &> scaffold/tinycc/"$t".log
sh ${srcdest}build-aux/test.sh "scaffold/tinycc/$t" > scaffold/tinycc/"$t".log 2>&1
r=$?
total=$((total+1))
total=$(expr $total + 1)
if [ $r = 0 ]; then
echo $t: [OK]
pass=$((pass+1))
pass=$(expr $pass + 1)
else
echo $t: [FAIL]
fail=$((fail+1))
fail=$(expr $fail + 1)
fi
done
[ $expect != 0 ] && echo "expect: $expect"
[ $fail != 0 ] && echo "failed: $fail"
[ $fail -lt $expect ] && echo "solved: $(($expect - $fail))"
[ $fail -lt $expect ] && echo "solved: $(expr $expect - $fail)"
echo "passed: $pass"
echo "total: $total"
if [ $fail != 0 -a $fail -gt $expect ]; then

View File

@ -25,8 +25,8 @@ set -e
. ${srcdest}build-aux/trace.sh
./pre-inst-env bash ${srcdest}build-aux/check-boot.sh
./pre-inst-env bash ${srcdest}build-aux/check-mes.sh
./pre-inst-env bash ${srcdest}build-aux/check-mescc.sh
./pre-inst-env sh ${srcdest}build-aux/check-mes.sh
./pre-inst-env sh ${srcdest}build-aux/check-mescc.sh
if [ -d $TINYCC_PREFIX/tests/tests2 ] ;then
./pre-inst-env bash ${srcdest}build-aux/check-tcc.sh
./pre-inst-env sh ${srcdest}build-aux/check-tcc.sh
fi

View File

@ -64,7 +64,7 @@ infodir:=@infodir@
libdir:=@libdir@
mandir:=@mandir@
moduledir:=@moduledir@
posix_p:=@posix_p@
with_glibc_p:=@with_glibc_p@
program_prefix:=@program_prefix@
srcdest:=@srcdest@
srcdir:=@srcdir@

View File

@ -81,7 +81,7 @@ export mes_p
export mesc_p
export tcc_p
export mes_arch
export posix_p
export with_glibc_p
CPPFLAGS=${CPPFLAGS-"
-D 'VERSION=\"$VERSION\"'
@ -92,7 +92,7 @@ CPPFLAGS=${CPPFLAGS-"
-I ${srcdest}include
"}
[ "$posix_p" ] && CPPFLAGS="$CPPFLAGS -D POSIX=1 -D WITH_GLIBC=1"
[ "$with_glibc_p" ] && CPPFLAGS="$CPPFLAGS -D WITH_GLIBC=1"
LDFLAGS=${LDFLAGS-"
-v

View File

@ -64,7 +64,7 @@ infodir="@infodir@"
libdir="@libdir@"
mandir="@mandir@"
moduledir="@moduledir@"
posix_p="@posix_p@"
with_glibc_p="@with_glibc_p@"
program_prefix="@program_prefix@"
srcdest="@srcdest@"
srcdir="@srcdir@"

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.
#
@ -25,7 +25,7 @@ set -e
mes_prefix=@prefix@/share/mes
# use bash or lose if pipes fail
if [ "$(basename $SHELL)" == bash ]; then
if [ "$(basename $SHELL)" = bash ]; then
set -o pipefail
fi
@ -39,7 +39,7 @@ cp scripts/mescc $DESTDIR@bindir@/mescc
sed \
-e "s,^#! /bin/sh,#! @SHELL@," \
scripts/diff.scm > $DESTDIR@bindir@/diff.scm
chmod -w+x $DESTDIR@bindir@/diff.scm
chmod +x $DESTDIR@bindir@/diff.scm
mkdir -p $DESTDIR@docdir@
@ -73,13 +73,28 @@ else
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- --exclude='*.E' --exclude='*.*-out' include lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- include lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- --exclude='*.go' module | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- --exclude='*.gcc*' --exclude='*.mes*' scaffold | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- scaffold | tar -xf- -C $DESTDIR$mes_prefix
else
tar -cf- -C ${srcdest} include lib | tar -xf- -C $DESTDIR$mes_prefix
tar -cf- -C lib --exclude='*.E' --exclude='*.*-out' | 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
fi
@ -92,23 +107,23 @@ 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
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 -xf- -C ${DESTDIR}@guile_site_dir@
tar -cf- -C module --exclude='*.scm' . | tar -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
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
fi
if [ -f doc/mes.1 ]; then
mkdir -p $DESTDIR@mandir@/man1
cp doc/mes.1 $DESTDIR@mandir@/man1/
mkdir -p ${DESTDIR}@mandir@/man1
cp 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/
mkdir -p ${DESTDIR}@mandir@/man1
cp doc/mescc.1 ${DESTDIR}@mandir@/man1/
fi

View File

@ -101,50 +101,23 @@ exec ${GUILE-guile} --no-auto-compile -L $(dirname $0) -C $(dirname $0) -e '(mes
(define %start 1)
(define (symbol->header s i)
(format #f "#define cell_~a ~a\n" s i))
(define (symbol->source s i)
(string-append
(format #f "g_free++;\n")
(format #f "g_cells[cell_~a] = scm_~a;\n\n" s s)))
(define (symbol->names s i)
(if %gcc?
(format #f "NAME_SYMBOL (cell_~a, scm_~a.name);\n" s s)
(format #f "NAME_SYMBOL (cell_~a, scm_~a.cdr);\n" s s)))
(format #f "// CONSTANT ~a ~a\n" s i)
(format #f "#define ~a ~a\n" s i)))
(define (function->header f i)
(let* ((arity (or (assoc-ref (function.annotation f) 'arity)
(if (string-null? (function.formals f)) 0
(length (string-split (function.formals f) #\,)))))
(n (if (eq? arity 'n) -1 arity)))
(string-append
(format #f "SCM ~a (~a);\n" (function.name f) (function.formals f))
(if %gcc?
(format #f "struct function fun_~a = {.function~a=&~a, .arity=~a, .name=~s};\n" (function.name f) arity (function.name f) n (function-scm-name f))
(format #f "struct function fun_~a = {&~a, ~a, ~s};\n" (function.name f) (function.name f) n (function-scm-name f)))
(if %gcc?
(format #f "struct scm ~a = {TFUNCTION, .name=0, .function=0};\n" (function-builtin-name f))
(format #f "struct scm ~a = {TFUNCTION, 0, 0};\n" (function-builtin-name f)))
(format #f "SCM cell_~a;\n\n" (function.name f)))))
(format #f "SCM ~a (~a);\n" (function.name f) (function.formals f))))
(define (function->source f i)
(string-append
(if %gcc?
(format #f "~a.function = g_function;\n" (function-builtin-name f))
(format #f "~a.car = g_function;\n" (function-builtin-name f)))
(format #f "g_functions[g_function++] = fun_~a;\n" (function.name f))
(format #f "cell_~a = g_free++;\n" (function.name f))
(format #f "g_cells[cell_~a] = ~a;\n\n" (function.name f) (function-builtin-name f))))
(define (function->environment f i)
(string-append
(if %gcc?
(format #f "scm_~a.string = MAKE_BYTES0 (fun_~a.name);\n" (function.name f) (function.name f))
(format #f "scm_~a.cdr = MAKE_BYTES0 (fun_~a.name);\n" (function.name f) (function.name f)))
(if %gcc?
(format #f "a = acons (cstring_to_symbol (CSTRING_STRUCT (scm_~a)), ~a, a);\n\n" (function.name f) (function-cell-name f))
(format #f "a = acons (cstring_to_symbol (CSTRING_STRUCT (scm_~a)), ~a, a);\n\n" (function.name f) (function-cell-name f)))))
(let* ((arity (or (assoc-ref (function.annotation f) 'arity)
(if (string-null? (function.formals f)) 0
(length (string-split (function.formals f) #\,)))))
(n (if (eq? arity 'n) -1 arity)))
(format #f " a = init_builtin (builtin_type, ~s, ~a, &~a, a);\n" (function.name f) n (function.name f))))
(define (disjoin . predicates)
(lambda (. arguments)
@ -152,12 +125,11 @@ exec ${GUILE-guile} --no-auto-compile -L $(dirname $0) -C $(dirname $0) -e '(mes
(define (snarf-symbols string)
(let* ((lines (string-split string #\newline))
(scm (filter (cut string-prefix? "struct scm scm_" <>) lines))
(symbols (filter (disjoin (cut string-contains <> "TSPECIAL") (cut string-contains <> "TSYMBOL")) scm)))
(symbols (filter (cut string-prefix? " init_symbol (" <>) lines)))
(define (line->symbol line)
((compose
(lambda (s) (string-take s (string-index s #\space)))
(cut string-drop <> (string-length "struct scm scm_")))
(lambda (s) (string-take s (string-index s #\,)))
(cut string-drop <> (string-length " init_symbol (")))
line))
(map line->symbol symbols)))
@ -218,27 +190,16 @@ exec ${GUILE-guile} --no-auto-compile -L $(dirname $0) -C $(dirname $0) -e '(mes
(source (make-file
(string-append base-name ".i")
(string-join (map function->source (filter (negate no-environment?) functions) (iota (length functions) (+ (length symbols) %start))) "")))
(environment (make-file
(string-append base-name ".environment.i")
(string-join (map function->environment (filter (negate no-environment?) functions) (iota (length functions) (+ (length symbols) %start))) "")))
(symbols.h (make-file
(string-append base-name ".symbols.h")
(string-join (map symbol->header symbols (iota (length symbols) %start)) "")))
(symbols.i (make-file
(string-append base-name ".symbols.i")
(string-join (map symbol->source symbols (iota (length symbols))) "")))
(symbol-names.i (make-file
(string-append base-name ".symbol-names.i")
(string-join (map symbol->names symbols (iota (length symbols))) ""))))
(list header source environment symbols.h symbols.i symbol-names.i)))
(string-join (map symbol->header symbols (iota (length symbols) %start)) ""))))
(list header source symbols.h)))
(define (file-write file)
(system* "mkdir" "-p" (dirname (file.name file)))
(with-output-to-file (file.name file) (lambda () (display (file.content file)))))
(define (main args)
(let* ((files (if (not (and (pair? (cdr args)) (equal? (cadr args) "--mes"))) (cdr args)
(begin (set! %gcc? #f)
(cddr args))))
(let* ((files (cdr args))
(files (append-map generate-includes files)))
(map file-write (filter content? files))))
(for-each file-write (filter content? files))))

View File

@ -24,7 +24,7 @@ abs_top_builddir="@abs_top_builddir@"
prefix=${prefix-@prefix@}
program_prefix=${program_prefix-@program_prefix@}
MES_PREFIX=${MES_PREFIX-${srcdest}mes}
MES_PREFIX=${MES_PREFIX-${abs_top_srcdir}/mes}
export MES_PREFIX
GUILE_LOAD_COMPILED_PATH="$abs_top_builddir/scripts:$abs_top_builddir/module${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"

View File

@ -23,18 +23,14 @@ set -e
. ${srcdest}build-aux/config.sh
. ${srcdest}build-aux/trace.sh
snarf=" "
if [ -n "$1" ]; then
snarf=.mes
fi
trace "SNARF$snarf gc.c" ${srcdest}build-aux/mes-snarf.scm $1 src/gc.c
trace "SNARF$snarf hash.c" ${srcdest}build-aux/mes-snarf.scm $1 src/hash.c
trace "SNARF$snarf lib.c" ${srcdest}build-aux/mes-snarf.scm $1 src/lib.c
trace "SNARF$snarf math.c" ${srcdest}build-aux/mes-snarf.scm $1 src/math.c
trace "SNARF$snarf mes.c" ${srcdest}build-aux/mes-snarf.scm $1 src/mes.c
trace "SNARF$snarf module.c" ${srcdest}build-aux/mes-snarf.scm $1 src/module.c
trace "SNARF$snarf posix.c" ${srcdest}build-aux/mes-snarf.scm $1 src/posix.c
trace "SNARF$snarf reader.c" ${srcdest}build-aux/mes-snarf.scm $1 src/reader.c
trace "SNARF$snarf strings.c" ${srcdest}build-aux/mes-snarf.scm $1 src/strings.c
trace "SNARF$snarf struct.c" ${srcdest}build-aux/mes-snarf.scm $1 src/struct.c
trace "SNARF$snarf vector.c" ${srcdest}build-aux/mes-snarf.scm $1 src/vector.c
trace "SNARF$snarf gc.c" ${srcdest}build-aux/mes-snarf.scm src/gc.c
trace "SNARF$snarf hash.c" ${srcdest}build-aux/mes-snarf.scm src/hash.c
trace "SNARF$snarf lib.c" ${srcdest}build-aux/mes-snarf.scm src/lib.c
trace "SNARF$snarf math.c" ${srcdest}build-aux/mes-snarf.scm src/math.c
trace "SNARF$snarf mes.c" ${srcdest}build-aux/mes-snarf.scm src/mes.c
trace "SNARF$snarf module.c" ${srcdest}build-aux/mes-snarf.scm src/module.c
trace "SNARF$snarf posix.c" ${srcdest}build-aux/mes-snarf.scm src/posix.c
trace "SNARF$snarf reader.c" ${srcdest}build-aux/mes-snarf.scm src/reader.c
trace "SNARF$snarf strings.c" ${srcdest}build-aux/mes-snarf.scm src/strings.c
trace "SNARF$snarf struct.c" ${srcdest}build-aux/mes-snarf.scm src/struct.c
trace "SNARF$snarf vector.c" ${srcdest}build-aux/mes-snarf.scm src/vector.c

View File

@ -38,12 +38,12 @@ link "$t"
r=0
[ -f "$t".exit ] && r=$(cat "$t".exit)
set +e
$(dirname "$o")/${program_prefix}$(basename "$o") $ARGS > "$o".${program_prefix}stdout
$(dirname "$o")/${program_prefix}$(basename "$o") $ARGS > "$o".${program_prefix}1 2> "$o".${program_prefix}2
m=$?
cat "$o".${program_prefix}stdout
cat "$o".${program_prefix}1
set -e
[ $m = $r ]
if [ -f "$t".expect ]; then
$DIFF -ub "$t".expect "$o".${program_prefix}stdout
if [ -f "$t".stdout ]; then
$DIFF -ub "$t".stdout "$o".${program_prefix}1
fi

View File

@ -26,7 +26,7 @@ sh ${srcdest}build-aux/test-cc.sh $1
if [ ! "$mesc_p" ]; then
#FIXME: c&p
unset CFLAGS CPPFLAGS LDFLAGS gcc_p tcc_p posix_p
unset CFLAGS CPPFLAGS LDFLAGS gcc_p tcc_p with_glibc_p
MES=${MES-guile}
mesc_p=1
mes_p=1

10
configure vendored
View File

@ -91,6 +91,8 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(output (read-string port))
(status (close-pipe port))
(error (with-input-from-file ".error" read-string)))
(when (file-exists? ".error")
(delete-file ".error"))
(set-current-error-port err)
(verbose "command[~a]: ~s => ~a [~a]\n" status command output error)
(if (not (zero? status)) ""
@ -223,6 +225,8 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(let ((name (dependency-name dependency)))
(stderr "checking for ~a..." name)
(let ((result (check cc name)))
(when (file-exists? ".config.c")
(delete-file ".config.c"))
(stderr " ~a\n" (if result "yes" "no"))
(if result (set-field dependency (dependency-file-name) name)
dependency))))
@ -231,6 +235,8 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(let ((name (dependency-name dependency)))
(stderr "checking for ~a..." name)
(let ((result (check cc (dependency-data dependency))))
(when (file-exists? ".config.c")
(delete-file ".config.c"))
(stderr " ~a\n" (if result "yes" "no"))
(if result (set-field dependency (dependency-file-name) name)
dependency))))
@ -239,6 +245,8 @@ MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)'
(let ((name (dependency-name dependency)))
(stderr "checking for ~a..." name)
(let ((result (check cc (dependency-data dependency))))
(when (file-exists? ".config.c")
(delete-file ".config.c"))
(stderr " ~a\n" (if result "yes" "no"))
(if result (set-field dependency (dependency-file-name) name)
dependency))))
@ -525,7 +533,7 @@ Some influential environment variables:
("@mes_arch@" . ,mes-arch)
("@mes_p@" . ,(if mes? "1" ""))
("@mesc_p@" . ,(if mesc? "1" ""))
("@posix_p@" . ,(if posix? "1" ""))
("@with_glibc_p@" . ,(if posix? "1" ""))
("@tcc_p@" . ,(if tcc? "1" ""))
("@abs_top_srcdir@" . ,abs-top-srcdir)

View File

@ -111,7 +111,7 @@ subst () {
-e s,"@mesc_p@,$mesc_p,"\
-e s,"@tcc_p@,$tcc_p,"\
-e s,"@mes_arch@,$mes_arch,"\
-e s,"@posix_p@,$posix_p,"\
-e s,"@with_glibc_p@,$with_glibc_p,"\
-e s,"@abs_top_srcdir@,$abs_top_srcdir,"\
-e s,"@abs_top_builddir@,$abs_top_builddir,"\
-e s,"@top_builddir@,$top_builddir,"\
@ -195,7 +195,7 @@ if [ ! "$mesc_p" ]; then
mes_arch=$mes_arch-$compiler
fi
if [ ! "$mesc_p" -a ! "$mes_p" ]; then
posix_p=1
with_glibc_p=1
fi
subst ${srcdest}mes/module/mes/boot-0.scm.in mes/module/mes/boot-0.scm

View File

@ -5,7 +5,8 @@ Subject: GNU Mes 0.19 released
We are pleased to announce the release of GNU Mes 0.19, representing
100 commits over 10 weeks.
Mes has now brought the Reduced Binary Seed bootstrap to Guix and work
Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
a GNU/Linux system without binary GNU toolchain or equivalent) and work
is ongoing to audit and verify this bootstrap path in NixOS.
This release introduces strings as byte-array, hash-tables and native
@ -68,8 +69,8 @@ Packages are available from Guix's core-updates branch.
Here are the MD5 and SHA1 checksums:
f9f901f175fbc8a5a3d90c9c551ccc8c mes-0.19.tar.gz
4f7612731a745ebb806548186453d55e0d0bf217 mes-0.19.tar.gz
99e134df87adc5fc5fd2c04941929c23 mes-0.19.tar.gz
c9781b3b6a814acc985c2ac68caa111a56583bca mes-0.19.tar.gz
[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
@ -131,7 +132,7 @@ installed in Guix from a git checkout by running
** Noteworthy bug fixes
*** Mes now supports characters #\xNN.
*** Mes now supports assq-ref and assoc-ref with alist == #f.
*** Mes now support \xNN in strings. Fixes using Nyacc-0.86.0.
*** Mes now supports \xNN in strings. This allows using Nyacc-0.86.0.
*** MesCC now supports the unary plus operator.
*** MesCC now supports the `U' integer suffix.
*** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h.

View File

@ -1,124 +1,123 @@
digraph "Guix bag" {
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" [label = "gcc-mesboot@4.9.4", shape = box, fontname = Helvetica];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod];
"/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkgoldenrod];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet];
"/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkviolet];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = red];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = red];
"/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = red];
"/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica];
"/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = darkgoldenrod];
"/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" [color = darkgoldenrod];
"/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [label = "mes-boot@0.18", shape = box, fontname = Helvetica];
"/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [color = cyan3];
"/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = cyan3];
"/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [label = "mescc-tools-boot@0.5.2", shape = box, fontname = Helvetica];
"/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica];
"/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica];
"/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" [label = "tcc-boot0@0.9.26-4.46ee3f1", shape = box, fontname = Helvetica];
"/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = darkseagreen];
"/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [color = darkseagreen];
"/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = darkseagreen];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = red];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = red];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = red];
"/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica];
"/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = blue];
"/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue];
"/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [color = dimgrey];
"/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = dimgrey];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = darkgoldenrod];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkgoldenrod];
"/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkgoldenrod];
"/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [label = "mesboot-headers@0.18", shape = box, fontname = Helvetica];
"/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet];
"/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet];
"/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkviolet];
"/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" [label = "gcc-mesboot1-wrapper@4.7.4", shape = box, fontname = Helvetica];
"/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue];
"/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [color = blue];
"/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = blue];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [label = "glibc-mesboot@2.16.0", shape = box, fontname = Helvetica];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen];
"/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" [label = "glibc-headers-mesboot@2.16.0", shape = box, fontname = Helvetica];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen];
"/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [label = "gcc-mesboot1@4.7.4", shape = box, fontname = Helvetica];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen];
"/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" [label = "gcc-mesboot@4.9.4", shape = box, fontname = Helvetica];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/j1kj1qmiv3rg88679bzxxbapgk8gn2qc-gcc-mesboot1-wrapper-4.7.4.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = magenta];
"/gnu/store/yyhvgy169sksvcs4mycmnxyl0za465sj-gcc-mesboot-4.9.4.drv" -> "/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" [color = magenta];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = red];
"/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = red];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" [color = cyan3];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = cyan3];
"/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = cyan3];
"/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica];
"/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" -> "/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" [color = blue];
"/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" -> "/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" [color = blue];
"/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = blue];
"/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" [label = "mes-boot@0.19", shape = box, fontname = Helvetica];
"/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" -> "/gnu/store/hyvpkk62xhr6blxmrd0s4cam40n48450-bootstrap-mescc-tools-0.5.2.drv" [color = dimgrey];
"/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" -> "/gnu/store/z4vssfndi1la67dvadsb4fv85rx5zig0-bootstrap-mes-0.drv" [color = dimgrey];
"/gnu/store/hyvpkk62xhr6blxmrd0s4cam40n48450-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica];
"/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica];
"/gnu/store/z4vssfndi1la67dvadsb4fv85rx5zig0-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica];
"/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" [label = "tcc-boot0@0.9.26-6.c004e9a", shape = box, fontname = Helvetica];
"/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" [color = darkseagreen];
"/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/hyvpkk62xhr6blxmrd0s4cam40n48450-bootstrap-mescc-tools-0.5.2.drv" [color = darkseagreen];
"/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/3l18gnbldwrkyzgxf9rl0vc3gqgs6vkc-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/z4vssfndi1la67dvadsb4fv85rx5zig0-bootstrap-mes-0.drv" [color = darkseagreen];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" -> "/gnu/store/ba3vgwp3ins7v31g38f7wn0y2wknxbbi-mes-boot-0.19.drv" [color = magenta];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" -> "/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" [color = magenta];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = magenta];
"/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica];
"/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" -> "/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" [color = magenta];
"/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/s31k70hy4hgyvissrwimx2s837494hvg-mesboot-headers-0.19.drv" [color = cyan3];
"/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = cyan3];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/a1ff309vviqfm73py9hnssz66ihyl16c-tcc-boot-0.9.27.drv" [color = darkgoldenrod];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = darkgoldenrod];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = darkgoldenrod];
"/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = darkgoldenrod];
"/gnu/store/s31k70hy4hgyvissrwimx2s837494hvg-mesboot-headers-0.19.drv" [label = "mesboot-headers@0.19", shape = box, fontname = Helvetica];
"/gnu/store/s31k70hy4hgyvissrwimx2s837494hvg-mesboot-headers-0.19.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/s31k70hy4hgyvissrwimx2s837494hvg-mesboot-headers-0.19.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = dimgrey];
"/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/dc08x4icyp3vhi3b6gkrpcvclhhb4bs1-gcc-core-mesboot-2.95.3.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = dimgrey];
"/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = dimgrey];
"/gnu/store/j1kj1qmiv3rg88679bzxxbapgk8gn2qc-gcc-mesboot1-wrapper-4.7.4.drv" [label = "gcc-mesboot1-wrapper@4.7.4", shape = box, fontname = Helvetica];
"/gnu/store/j1kj1qmiv3rg88679bzxxbapgk8gn2qc-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = darkseagreen];
"/gnu/store/j1kj1qmiv3rg88679bzxxbapgk8gn2qc-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" [color = darkseagreen];
"/gnu/store/j1kj1qmiv3rg88679bzxxbapgk8gn2qc-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" [color = darkseagreen];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" [label = "glibc-mesboot@2.16.0", shape = box, fontname = Helvetica];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = cyan3];
"/gnu/store/k0c7r9bfmc6a0ji6kl4gfhlppwlzb013-glibc-mesboot-2.16.0.drv" -> "/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" [color = cyan3];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" [label = "glibc-headers-mesboot@2.16.0", shape = box, fontname = Helvetica];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/s31k70hy4hgyvissrwimx2s837494hvg-mesboot-headers-0.19.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = magenta];
"/gnu/store/i8mwdv9j384qnwb7ipz92a7jb25yw5cw-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" [color = magenta];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" [label = "gcc-mesboot1@4.7.4", shape = box, fontname = Helvetica];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/rs1ggdq6bmzgjfkfqmkd6a6cxr9437v4-binutils-mesboot-2.20.1a.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/jjhwiiqy26bbz8ljil49j13mw2d60ja1-diffutils-mesboot-2.7.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = cyan3];
"/gnu/store/snivnh2vwkdq9iyim060k5bca3arkmd7-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" [color = cyan3];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/hb7v0ngmiq8097cr5h019qlhixwyfbgn-binutils-mesboot0-2.20.1a.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/b3znapqr1bjvy35ck6w9g8q18i7azw1a-glibc-mesboot0-2.2.5.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/0nl531x2qxvhq4rsmjb5w6689f1i9s3b-gcc-mesboot0-2.95.3.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/y12rm6j4zb71d7rfm05lp5zsgk3rwx4g-make-mesboot0-3.80.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/sflg089rcki77ay6p1d9p0k1d4g7yni4-bootstrap-binaries-0.drv" [color = magenta];
"/gnu/store/m5wqnh0ap50npqy2bivn4b907jqiwfyn-make-mesboot-3.82.drv" -> "/gnu/store/ffmmqdgq7wicc3z0xlj9b3w1i9g1z4r1-linux-libre-headers-bootstrap-0.drv" [color = magenta];
}

View File

@ -34,7 +34,7 @@ Documentation License''.
@titlepage
@title GNU Mes Reference Manual
@subtitle Full Source Bootstrapping of the GNU GuixSD Operating System
@subtitle Full Source Bootstrapping of the GNU Guix Operating System
@author Jan (janneke) Nieuwenhuizen
@page
@ -169,7 +169,7 @@ For all softwares on such a system we have the full source code and
build recipes available.
@c The Free System Distribution Guidelines (GNU FSDG)@footnote{Examples of
@c free operating systems are GNU GuixSD, GNU Parabola and Trisquel, see
@c free operating systems are GNU Guix, GNU Parabola and Trisquel, see
@c https://www.gnu.org/distros/free-system-distribution-guidelines.html}
@c can serve as help to create such a system
@ -253,7 +253,7 @@ binary seed that all software distributions inject are the so called
@emph{bootstrap binaries}. Bootstrap binaries are the initial binary
seeds that are used to start building the distribution.
The GNU GuixSD operating system has a relatively small closure of
The GNU Guix operating system has a relatively small closure of
bootstrap binaries: GNU binutils, GNU gcc, GNU Libc, GNU Guile, and
``Static binaries'' (think: bash, bzip2, coreutils, gawk, grep, gzip,
patch, sed, tar, xz).
@ -553,7 +553,7 @@ Recipe for yogurt: Add yogurt to milk.
@end quotation
The bootstrap problem we have set out to solve is that none of our
modern software distributions, and GuixSD in particular, can be created
modern software distributions, and Guix in particular, can be created
all from source code. In addition to the carefully signed source code
of all the programs (the `milk') an opaque binary seed (the `yogurt') is
injected as an essential dependency.
@ -592,7 +592,7 @@ responsibility.
The Mes full source bootstrap process@footnote{TBH, the current state of
affairs demands to label this a `Reduced Binary Seed bootstrap'} is
currently being developed in GuixSD@footnote{See
currently being developed in Guix@footnote{See
@file{gnu/packages/commencement.scm} in the @var{core-updates-next} branch in Guix
git
@url{http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/mes.scm?h=wip-bootstrap}}.
@ -622,11 +622,11 @@ glibc-source + binutils + gcc + glibc0 => glibc
@c This graph is generated from wip-bootstrap, doing:
@c ~/src/guix-boot/pre-inst-env guix graph --type=bag -e '(@@ (gnu packages commencement) gcc-mesboot)' doc/images/gcc-mesboot-graph.dot
@c ~/src/guix/core-updates/pre-inst-env guix graph --type=bag -e '(@@ (gnu packages commencement) gcc-mesboot)' > doc/images/gcc-mesboot-graph.dot
@c dot -T png doc/images/gcc-mesboot-graph.dot > doc/images/gcc-mesboot-graph.png
Here's a generated dependency diagram to for the final bootstrap gcc
that builds the rest of GuixSD
that builds the rest of Guix.
@image{images/gcc-mesboot-graph,2in,,Reference graph of the gcc-mesboot}
@ -757,6 +757,11 @@ The initial size of the arena @pxref{5.3,,, sicp, SICP} in cells. Default: 20,0
The maximum size of the arena in cells. Default: 100,000,000.
@item MES_MAX_STRING
@vindex MES_MAX_STRING
The maximum size of a string. Default: 524,288.
@item MES_DEBUG
@vindex MES_DEBUG
@ -814,6 +819,12 @@ The @var{option}s can be among the following:
@table @code
@item --align
align globals
@item --base-address=ADRRESS
use BaseAddress ADDRESS [0x1000000]
@item -c
@cindex compile
preprocess, compile and assemble only; do not link
@ -821,6 +832,12 @@ preprocess, compile and assemble only; do not link
@item -D @var{DEFINE}[=@var{VALUE}]
@cindex define DEFINE [VALUE=1]
@item -dumpmachine
@cindex arch
@cindex architecture
@cindex machine
display the compiler's target processor
@item -E
preprocess only; do not compile, assemble or link
@ -842,18 +859,30 @@ append DIR to library path
@item -l LIBNAME
link with LIBNAME
@item -m BITS
compile for BITS bits [32]
@item -O LEVEL
use optimizing LEVEL
@item -o FILE
write output to FILE
@item -S
preprocess and compile only; do not assemble or link
@item --std=STANDARD
assume that the input sources are for STANDARD
@item -v, --version
display version and exit
@item -w,--write=TYPE
dump Nyacc AST using TYPE @{pretty-print,write@}
@item -x LANGUAGE
specify LANGUAGE of the following input files
@end table
@menu
@ -1041,7 +1070,7 @@ Please send bug reports with full details to @email{bug-mes@@gnu.org}.
We would like to thank the following people for their help: Jeremiah
Orians, Peter de Wachter, rain1, Ricardo Wurmus, Rutger van Beusekom.
We also thank Ludovic Courtès for creating GuixSD and making the
We also thank Ludovic Courtès for creating GNU Guix and making the
bootstrap problem so painfully visible, John McCarthy for creating
LISP-1.5 and Alan Kay for their inspiring comment on
@url{https://queue.acm.org/detail.cfm?id=1039523, Page 13}.

View File

@ -29,18 +29,14 @@
#else // ! WITH_GLIBC
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
#undef size_t
typedef unsigned long size_t;
#endif
#include <sys/types.h>
#if _ALLOCA_UNSIGNED
void * alloca (unsigned size);
void *alloca (unsigned size);
#elif _ALLOCA_CHAR
char * alloca (int);
char *alloca (int);
#else
void * alloca (size_t size);
void *alloca (size_t size);
#endif
#endif // ! WITH_GLIBC

View File

@ -36,20 +36,20 @@
`struct ar_hdr', and as many bytes of member file data as its `ar_size'
member indicates, for each member file. */
#define ARMAG "!<arch>\n" /* String that begins an archive file. */
#define SARMAG 8 /* Size of that string. */
#define ARMAG "!<arch>\n" /* String that begins an archive file. */
#define SARMAG 8 /* Size of that string. */
#define ARFMAG "`\n" /* String in ar_fmag at end of each header. */
#define ARFMAG "`\n" /* String in ar_fmag at end of each header. */
struct ar_hdr
{
char ar_name[16]; /* Member file name, sometimes / terminated. */
char ar_date[12]; /* File date, decimal seconds since Epoch. */
char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */
char ar_mode[8]; /* File mode, in ASCII octal. */
char ar_size[10]; /* File size, in ASCII decimal. */
char ar_fmag[2]; /* Always contains ARFMAG. */
};
{
char ar_name[16]; /* Member file name, sometimes / terminated. */
char ar_date[12]; /* File date, decimal seconds since Epoch. */
char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */
char ar_mode[8]; /* File mode, in ASCII octal. */
char ar_size[10]; /* File size, in ASCII decimal. */
char ar_fmag[2]; /* Always contains ARFMAG. */
};
#endif // ! WITH_GLIBC

View File

@ -28,7 +28,7 @@
#include_next <assert.h>
#else // ! WITH_GLIBC
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
void assert_fail (char* s);
void assert_fail (char *s);
#endif // ! WITH_GLIBC
#endif // __MES_ASSERT_H

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -29,11 +29,23 @@
#else // ! WITH_GLIBC
#include <endian.h>
int isalnum (int c);
int isalpha (int c);
int isascii (int c);
int iscntrl (int c);
int isdigit (int c);
int isxdigit (int c);
int isgraph (int c);
int islower (int c);
int isnumber (int c, int base);
int isprint (int c);
int ispunct (int c);
int isspace (int c);
int isupper (int c);
int isxdigit (int c);
int tolower (int c);
int toupper (int c);
#endif // ! WITH_GLIBC
#endif // __MES_CTYPE_H

View File

@ -41,18 +41,18 @@
#include <stddef.h>
int __getdirentries (int filedes, char *buffer, size_t nbytes, off_t *basep);
int __getdirentries (int filedes, char *buffer, size_t nbytes, off_t * basep);
struct dirent
{
ino_t d_ino;
off_t d_off;
unsigned short int d_reclen;
{
ino_t d_ino;
off_t d_off;
unsigned short int d_reclen;
#if 0
unsigned char d_type;
unsigned char d_type;
#endif
char d_name[256]; /* We must not include limits.h! */
};
char d_name[256]; /* We must not include limits.h! */
};
/* Open a directory stream on NAME.
Return a DIR stream on the directory, or NULL if it could not be opened. */
@ -60,16 +60,16 @@ DIR *opendir (char const *name);
/* Close the directory stream DIRP.
Return 0 if successful, -1 if not. */
int closedir (DIR *dirp);
int closedir (DIR * dirp);
/* Read a directory entry from DIRP.
Return a pointer to a `struct dirent' describing the entry,
or NULL for EOF or error. The storage returned may be overwritten
by a later readdir call on the same DIR stream. */
struct dirent *readdir (DIR *dirp);
struct dirent *readdir (DIR * dirp);
/* Rewind DIRP to the beginning of the directory. */
extern void rewinddir (DIR *dirp);
extern void rewinddir (DIR * dirp);
#endif // ! WITH_GLIBC

View File

@ -37,16 +37,16 @@
/* Directory stream type. */
struct __dirstream
{
int fd; /* File descriptor. */
{
int fd; /* File descriptor. */
char *data; /* Directory block. */
size_t allocation; /* Space allocated for the block. */
size_t size; /* Total valid data in the block. */
size_t offset; /* Current offset into the block. */
char *data; /* Directory block. */
size_t allocation; /* Space allocated for the block. */
size_t size; /* Total valid data in the block. */
size_t offset; /* Current offset into the block. */
off_t filepos; /* Position of next entry to read. */
};
off_t filepos; /* Position of next entry to read. */
};
typedef struct __dirstream DIR;

View File

@ -38,14 +38,16 @@ int errno;
#define ENOENT 2
#define EINTR 4
#define EIO 5
#define ENXIO 6
#define E2BIG 7
#define ENOEXEC 8
#define ENOEXEC 8
#define EBADF 9
#define ECHILD 10
#define EAGAIN 11
#define ENOMEM 12
#define EACCES 13
#define EEXIST 17
#define EXDEV 18
#define ENOTDIR 20
#define EISDIR 21
#define EINVAL 22

View File

@ -29,6 +29,7 @@
#else // ! WITH_GLIBC
// *INDENT-OFF*
#define O_RDONLY 0
#define O_WRONLY 1
#define O_RDWR 2
@ -37,6 +38,7 @@
#define O_TRUNC 0x200
#define O_APPEND 0x400
#define O_DIRECTORY 0x10000
// *INDENT-ON*
#define FD_CLOEXEC 1
@ -46,6 +48,7 @@
#define F_GETFL 3
#define F_SETFL 4
#define creat(file_name, mode) open (file_name, O_WRONLY | O_CREAT | O_TRUNC, mode)
int dup (int old);
int dup2 (int old, int new);
int fcntl (int filedes, int command, ...);

View File

@ -26,4 +26,3 @@
#endif // (WITH_GLIBC)
#endif // __MES_FEATURES_H

View File

@ -29,6 +29,19 @@
#define DBL_MIN_EXP -1021
#define LDBL_MIN_EXP -1021
// gcc-4.6
#define DBL_EPSILON 1
#define DBL_MANT_DIG 1
#define DBL_MAX INT_MAX
#define DBL_MIN INT_MIN
#define FLT_RADIX 10
#define LDBL_EPSILON 1
#define LDBL_MANT_DIG 1
#define LDBL_MAX INT_MAX
#define LDBL_MIN INT_MIN
#endif // ! WITH_GLIBC
#endif // __MES_FLOAT_H

43
include/grp.h Normal file
View File

@ -0,0 +1,43 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
#ifndef __MES_GRP_H
#define __MES_GRP_H 1
#if WITH_GLIBC
#undef __MES_GRP_H
#include_next <pwd.h>
#else // ! WITH_GLIBC
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 // ! WITH_GLIBC
#endif // __MES_GRP_H

View File

@ -28,7 +28,7 @@
#include_next <libgen.h>
#else // ! WITH_GLIBC
char* dirname (char*);
char *dirname (char *);
#endif // ! WITH_GLIBC
#endif // __MES_LIBGEN_H

View File

@ -83,4 +83,13 @@
// make+POSIX
#define SYS_sigprocmask 0x7e
// tar
#define SYS_symlink 0x53
#define SYS_readlink 0x55
#define SYS_mknod 0x0e
// gcc-4.6.4
#define SYS_mmap 0x5a
#define SYS_munmap 0x5b
#endif // __MES_LINUX_X86_SYSCALL_H

View File

@ -77,7 +77,16 @@
#define SYS_getegid 0x6c
#define SYS_getppid 0x6e
// make+POSIX
// make+WITH_GLIBC
#define SYS_rt_sigprocmask 0x0e
// tar
#define SYS_symlink 0x58
#define SYS_readlink 0x59
#define SYS_mknod 0x85
// gcc-4.6.4
#define SYS_mmap 0x09
#define SYS_munmap 0x0b
#endif // __MES_LINUX_X86_64_SYSCALL_H

View File

@ -29,13 +29,16 @@
#else // ! WITH_GLIBC
// *INDENT-OFF*
#ifndef LC_ALL
#define LC_CTYPE 0
#define LC_NUMERIC 1
#define LC_COLLATE 3
#define LC_ALL 6
#endif
char * setlocale (int category, char const *locale);
// *INDENT-ON*
char *setlocale (int category, char const *locale);
#endif // ! WITH_GLIBC

View File

@ -23,10 +23,22 @@
#if WITH_GLIBC
#undef __MES_MATH_H
#include_next <math.h>
#else // ! WITH_GLIBC
double ldexp (double x, int exp);
#endif // ! WITH_GLIBC
#else // ! WITH_GLIBC
double atan2 (double y, double x);
double ceil (double x);
double cos (double x);
double exp (double x);
double fabs (double number);
double floor (double x);
long int labs (long int number);
double ldexp (double value, int exponent);
double log (double x);
double modf (double value, double *integer_part);
double pow (double base, double power);
double sin (double x);
double sqrt (double x);
#endif // ! WITH_GLIBC
#endif // __MES_MATH_H

View File

@ -18,13 +18,8 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_LIBMES_MINI_H
#define __MES_LIBMES_MINI_H
char **environ;
int g_stdin;
int g_stdout;
int g_stderr;
#ifndef __MES_LIB_MINI_H
#define __MES_LIB_MINI_H
#if !WITH_GLIBC
@ -64,26 +59,34 @@ int errno;
#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);
int eputs (char const *s);
int puts (char const *s);
int oputs (char const *s);
#if !WITH_GLIBC
size_t strlen (char const* s);
size_t strlen (char const *s);
ssize_t _write ();
ssize_t write (int filedes, void const *buffer, size_t size);
#endif // !WITH_GLIBC
#endif //__MES_LIBMES_MINI_H
#endif //__MES_LIB_MINI_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,33 +18,36 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __MES_LIBMES_H
#define __MES_LIBMES_H
#ifndef __MES_LIB_H
#define __MES_LIB_H
#include <libmes-mini.h>
#include <mes/lib-mini.h>
int __mes_debug ();
long abtol (char const** p, int base);
char const* ntoab (long number, int base, int signed_p);
char const* itoa (int number);
char const* ltoa (long number);
char const* ultoa (unsigned long number);
char const* utoa (unsigned number);
char const* ltoab (long x, int base);
double abtod (char const **p, int base);
long abtol (char const **p, int base);
char *dtoab (double number, int base, int signed_p);
char *itoa (int number);
char *ltoa (long number);
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);
int fdputc (int c, int fd);
int fdputs (char const* s, 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 _open3 (char const *file_name, int flags, int mask);
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);
int oputc (int c);
int oputs (char const* s);
int oputs (char const *s);
char *search_path (char const *file_name);
#endif //__MES_LIBMES_H
#endif //__MES_LIB_H

View File

@ -23,7 +23,7 @@
#if WITH_GLIBC
#undef __MES_PWD_H
#include_next <pwd.h>
#else // ! WITH_GLIBC
#else // ! WITH_GLIBC
struct passwd
{
@ -36,9 +36,9 @@ struct passwd
char *pw_shell;
};
struct passwd * getpwuid ();
struct passwd *getpwuid ();
#endif // ! WITH_GLIBC
#endif // ! WITH_GLIBC
#endif // __MES_PWD_H

View File

@ -31,6 +31,7 @@ typedef long stack_t;
#include <sys/types.h>
// *INDENT-OFF*
#define NSIG 30
#define SIGHUP 1
#define SIGINT 2
@ -85,40 +86,39 @@ typedef long stack_t;
#define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND
typedef struct siginfo_t
{
int si_signo;
int si_errno;
int si_code;
int si_trapno;
pid_t si_pid;
uid_t si_uid;
int si_status;
clock_t si_utime;
clock_t si_stime;
sigval_t si_value;
int si_int;
void *si_ptr;
int si_overrun;
int si_timerid;
void *si_addr;
long si_band;
int si_fd;
short si_addr_lsb;
void *si_lower;
void *si_upper;
int si_pkey;
void *si_call_addr;
int si_syscall;
int si_signo;
int si_errno;
int si_code;
int si_trapno;
pid_t si_pid;
uid_t si_uid;
int si_status;
clock_t si_utime;
clock_t si_stime;
sigval_t si_value;
int si_int;
void *si_ptr;
int si_overrun;
int si_timerid;
void *si_addr;
long si_band;
int si_fd;
short si_addr_lsb;
void *si_lower;
void *si_upper;
int si_pkey;
void *si_call_addr;
int si_syscall;
unsigned int si_arch;
} siginfo_t;
// *INDENT-ON*
#if __MESC__
typedef long sighandler_t;
#else
typedef void (*sighandler_t)(int);
typedef void (*sighandler_t) (int);
#endif
struct sigaction
@ -199,14 +199,14 @@ struct _libc_fpstate
typedef struct _libc_fpstate *fpregset_t;
typedef struct
{
gregset_t gregs;
/* Due to Linux's history we have to use a pointer here. The SysV/i386
ABI requires a struct with the values. */
fpregset_t fpregs;
unsigned long int oldmask;
unsigned long int cr2;
} mcontext_t;
{
gregset_t gregs;
/* Due to Linux's history we have to use a pointer here. The SysV/i386
ABI requires a struct with the values. */
fpregset_t fpregs;
unsigned long int oldmask;
unsigned long int cr2;
} mcontext_t;
/* Userlevel context. */
typedef struct ucontext
@ -221,20 +221,21 @@ typedef struct ucontext
#endif // !__i386__
int kill (pid_t pid, int signum);
int sigaction (int signum, struct sigaction const *act, struct sigaction *oldact);
int sigaddset (sigset_t *set, int signum);
int sigaction (int signum, struct sigaction const *act,
struct sigaction *oldact);
int sigaddset (sigset_t * set, int signum);
#if __MESC__
void* signal (int signum, void * action);
void *signal (int signum, void *action);
#else
sighandler_t signal (int signum, sighandler_t action);
#endif
int sigemptyset (sigset_t *set);
int sigemptyset (sigset_t * set);
#ifndef SIG_BLOCK
#define SIG_BLOCK 0
#define SIG_UNBLOCK 1
#define SIG_SETMASK 2
#endif
int sigprocmask (int how, sigset_t const *set, sigset_t *oldset);
int sigprocmask (int how, sigset_t const *set, sigset_t * oldset);
#endif //! WITH_GLIBC

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -31,14 +31,15 @@
#define __FOO_VARARGS 1
#endif
typedef long va_list;
typedef char *va_list;
#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1))
#define va_arg(ap, type) (type)(((long*)((ap) = ((ap) + sizeof (void*))))[-1])
#define va_end(ap) (void)((ap) = 0)
#define va_copy(dest, src) dest = src
int vfprintf (FILE *stream, char const *template, va_list ap);
int vprintf (char const* format, va_list ap);
int vfprintf (FILE * stream, char const *template, va_list ap);
int vfscanf (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);
int vsnprintf (char *str, size_t size, char const *format, va_list ap);
int vsscanf (char const *s, char const *template, va_list ap);

View File

@ -58,28 +58,10 @@ typedef int int32_t;
typedef unsigned long long uint64_t;
typedef long long int64_t;
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
#undef size_t
typedef unsigned long size_t;
#endif
#ifndef __MES_INTPTR_T
#define __MES_INTPTR_T
#undef intptr_t
typedef long intptr_t;
#endif
// FIXME
typedef int intmax_t;
typedef unsigned uintmax_t;
typedef unsigned* uintptr_t;
#ifndef __MES_PTRDIFF_T
#define __MES_PTRDIFF_T
#undef ptrdiff_t
typedef long ptrdiff_t;
#endif
#include <sys/types.h>
#define CHAR_BIT 8
#define CHAR_MAX 255
@ -103,6 +85,12 @@ typedef long ptrdiff_t;
#define INT_MIN -2147483648
#define INT_MAX 2147483647
#define SHRT_MAX INT16_MAX
#define SHRT_MIN INT16_MIN
#define USHRT_MAX UINT16_MAX
#define USHRT_MIN UINT16_MIN
#if __i386__
#define LONG_MIN INT_MIN
#define LONG_MAX INT_MAX
@ -121,6 +109,8 @@ typedef long ptrdiff_t;
#define SIZE_MAX UINT64_MAX
#endif
#define SSIZE_MAX LONG_MAX
#endif // ! WITH_GLIBC
#endif // __MES_STDINT_H

View File

@ -20,7 +20,7 @@
#ifndef __MES_STDIO_H
#define __MES_STDIO_H 1
#include <libmes.h>
#include <mes/lib.h>
#if WITH_GLIBC
#ifndef _GNU_SOURCE
@ -32,9 +32,9 @@
#else // ! WITH_GLIBC
#ifndef _IOFBF
#define _IOFBF 0 /* Fully buffered. */
#define _IOLBF 1 /* Line buffered. */
#define _IONBF 2 /* No buffering. */
#define _IOFBF 0 /* Fully buffered. */
#define _IOLBF 1 /* Line buffered. */
#define _IONBF 2 /* No buffering. */
#endif
#ifndef BUFSIZ
@ -58,35 +58,37 @@
FILE *fdopen (int fd, char const *mode);
FILE *fopen (char const *file_name, char const *mode);
int eputc (int c);
int eputs (char const* s);
int fclose (FILE *stream);
int feof (FILE *stream);
int ferror (FILE *stream);
int fflush (FILE *stream);
int fgetc (FILE* stream);
char *fgets (char *s, int size, FILE *stream);
int fprintf (FILE *stream, char const *format, ...);
int fpurge (FILE *stream);
int fputc (int c, FILE *stream);
int fputs (char const* s, FILE *stream);
int fseek (FILE *stream, long offset, int whence);
int getc (FILE *stream);
int eputs (char const *s);
int fclose (FILE * stream);
int feof (FILE * stream);
int ferror (FILE * stream);
int fflush (FILE * stream);
int fgetc (FILE * stream);
char *fgets (char *s, int size, FILE * stream);
int fprintf (FILE * stream, char const *format, ...);
int fpurge (FILE * stream);
int fputc (int c, FILE * stream);
int fputs (char const *s, FILE * stream);
int fscanf (FILE * stream, char const *template, ...);
int fseek (FILE * stream, long offset, int whence);
int getc (FILE * stream);
int getchar (void);
char *getlogin (void);
int printf (char const* format, ...);
int putc (int c, FILE* stream);
int printf (char const *format, ...);
int putc (int c, FILE * stream);
int putchar (int c);
int puts (char const* s);
int puts (char const *s);
int remove (char const *file_name);
int setvbuf (FILE *stream, char *buf, int mode, size_t size);
int snprintf(char *str, size_t size, char const *format, ...);
int sprintf (char *str, char const* format, ...);
int sscanf (char const *str, const char *format, ...);
int ungetc (int c, FILE* stream);
long ftell (FILE *stream);
size_t fread (void *ptr, size_t size, size_t count, FILE *stream);
size_t freadahead (FILE *fp);
size_t fwrite (void const *ptr, size_t size, size_t count, FILE *stream);
void rewind (FILE * stream);
int setvbuf (FILE * stream, char *buf, int mode, size_t size);
int snprintf (char *str, size_t size, char const *format, ...);
int sprintf (char *str, char const *format, ...);
int sscanf (char const *str, char const *format, ...);
int ungetc (int c, FILE * stream);
long ftell (FILE * stream);
size_t fread (void *ptr, size_t size, size_t count, FILE * stream);
size_t freadahead (FILE * fp);
size_t fwrite (void const *ptr, size_t size, size_t count, FILE * stream);
#endif // ! WITH_GLIBC

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -26,22 +26,25 @@
#endif
#undef __MES_STDLIB_H
#include_next <stdlib.h>
#else // ! WITH_GLIBC
#else // ! WITH_GLIBC
#include <sys/types.h>
#include <alloca.h>
void abort (void);
double atof (char const *s);
int atoi (char const *s);
int atexit (void (*function) (void));
void * calloc (size_t nmemb, size_t size);
void *calloc (size_t nmemb, size_t size);
void _exit (int status);
void exit (int status);
void free (void *ptr);
char* getenv (char const* s);
int setenv (char const* s, char const* v, int overwrite_p);
char *getenv (char const *s);
int setenv (char const *s, char const *v, int overwrite_p);
void unsetenv (char const *name);
void *malloc (size_t);
void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
void qsort (void *base, size_t nmemb, size_t size,
int (*compar) (void const *, void const *));
int rand (void);
void *realloc (void *p, size_t size);
double strtod (char const *string, char **tailptr);
@ -60,7 +63,8 @@ unsigned long long strtoull (char const *string, char **tailptr, int base);
typedef int (*comparison_fn_t) (void const *, void const *);
#endif
void * bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare);
void *bsearch (void const *key, void const *array, size_t count, size_t size,
comparison_fn_t compare);
#endif // ! WITH_GLIBC

View File

@ -29,41 +29,28 @@
#else // ! WITH_GLIBC
#ifndef NULL
#define NULL 0
#endif
#include <sys/types.h>
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
#undef size_t
typedef unsigned long size_t;
#endif
#ifndef __MES_SSIZE_T
#define __MES_SSIZE_T
#undef ssize_t
typedef long ssize_t;
#endif
void * memchr (void const *block, int c, size_t size);
void *memchr (void const *block, int c, size_t size);
void *memcpy (void *dest, void const *src, size_t n);
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);
void *memchr (void const *block, int c, size_t size);
int memcmp (void const *s1, void const *s2, size_t n);
char *strcat (char *dest, char const *src);
char *strchr (char const *s, int c);
int strcasecmp (char const *s1, char const *s2);
int strcmp (char const*, char const*);
int strcmp (char const *, char const *);
char *strcpy (char *dest, char const *src);
size_t strlen (char const*);
size_t strlen (char const *);
char *strncpy (char *to, char const *from, size_t size);
int strncmp (char const*, char const*, size_t);
int strncmp (char const *, char const *, size_t);
char *strrchr (char const *s, int c);
char *strstr (char const *haystack, char const *needle);
char * strlwr (char *string);
char * strupr (char *string);
char *strtok (char *new_string, char const *delimiters);
char *strlwr (char *string);
char *strupr (char *string);
char *strerror (int errnum);

View File

@ -26,4 +26,3 @@
#endif // (WITH_GLIBC)
#endif // __MES_STRINGS_H

View File

@ -26,4 +26,3 @@
#endif // (WITH_GLIBC)
#endif // __MES_SYS_CDEFS_H

View File

@ -33,4 +33,3 @@ int ioctl (int fd, unsigned long request, ...);
#endif // ! WITH_GLIBC
#endif // __MES_SYS_IOCTL_H

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -25,19 +25,26 @@
#include_next <sys/mman.h>
#else // ! WITH_GLIBC
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
typedef unsigned long size_t;
#endif
#include <sys/types.h>
#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
#define MAP_ANONYMOUS 0x20
#define MAP_POPULATE 0x08000
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FAILED ((void*)-1)
#define PROT_NONE 0
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
void *mmap (void *address, size_t length, int protect, int flags, int filedes,
off_t offset);
int mprotect (void *addr, size_t len, int prot);
int munmap (void *addr, size_t length);
#endif // ! WITH_GLIBC
#endif // __MES_SYS_MMAN_H

View File

@ -50,6 +50,8 @@ struct rusage
#define RUSAGE_SELF 0
#define RUSAGE_CHILDREN -1
#define RLIMIT_NOFILE 1024
#define OPEN_MAX RLIMIT_NOFILE
int getrusage (int processes, struct rusage *rusage);

View File

@ -23,9 +23,8 @@
#if WITH_GLIBC
#undef __MES_SYS_SELECT_H
#include_next <sys/select.h>
#else //! WITH_GLIBC
#else //! WITH_GLIBC
typedef int fd_set;
#endif //! WITH_GLIBC
#endif // __MES_SYS_SELECT_H

View File

@ -34,6 +34,7 @@
typedef int mode_t;
#endif
// *INDENT-OFF*
#if __i386__
struct stat
{
@ -79,13 +80,16 @@ struct stat
unsigned long __foo1;
};
#endif
// *INDENT-ON*
int chmod (char const *file_name, mode_t mode);
int mkdir (char const *file_name, mode_t mode);
int mknod (char const *file_name, mode_t mode, dev_t dev);
int chown (char const *file_name, uid_t owner, gid_t group);
int rmdir (char const *file_name);
int stat (char const *file_name, struct stat *buf);
#define S_IFIFO 0010000
#define S_IFCHR 0020000
#define S_IFDIR 0040000
#define S_IFBLK 0060000
@ -93,6 +97,7 @@ int stat (char const *file_name, struct stat *buf);
#define S_IFLNK 0120000
#define S_IFMT 0170000
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)

View File

@ -26,4 +26,3 @@
#endif // (WITH_GLIBC)
#endif // __MES_SYS_TIMEB_H

View File

@ -135,6 +135,15 @@ typedef long ssize_t;
typedef unsigned uid_t;
#endif
#ifndef __WCHAR_T
#define __WCHAR_T
#ifndef __MES_WCHAR_T
#define __MES_WCHAR_T
#undef wchar_t
typedef int wchar_t;
#endif
#endif
#endif // ! WITH_GLIBC
#endif // __MES_SYS_TYPES_H

View File

@ -26,4 +26,3 @@
#endif // (WITH_GLIBC)
#endif // __MES_SYS_UCONTEXT_H

View File

@ -36,7 +36,7 @@ struct user_fpregs_struct
long int fcs;
long int foo;
long int fos;
long int st_space [20];
long int st_space[20];
};
struct user_fpxregs_struct
@ -51,8 +51,8 @@ struct user_fpxregs_struct
long int fos;
long int mxcsr;
long int reserved;
long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
long int padding[56];
};
@ -77,32 +77,34 @@ struct user_regs_struct
long int xss;
};
// *INDENT-OFF*
struct user
{
struct user_regs_struct regs;
int u_fpvalid;
struct user_fpregs_struct i387;
unsigned long int u_tsize;
unsigned long int u_dsize;
unsigned long int u_ssize;
unsigned long int start_code;
unsigned long int start_stack;
long int signal;
int reserved;
struct user_regs_struct* u_ar0;
struct user_fpregs_struct* u_fpstate;
unsigned long int magic;
char u_comm [32];
int u_debugreg [8];
struct user_regs_struct regs;
int u_fpvalid;
struct user_fpregs_struct i387;
unsigned long int u_tsize;
unsigned long int u_dsize;
unsigned long int u_ssize;
unsigned long int start_code;
unsigned long int start_stack;
long int signal;
int reserved;
struct user_regs_struct *u_ar0;
struct user_fpregs_struct *u_fpstate;
unsigned long int magic;
char u_comm [32];
int u_debugreg [8];
};
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
#define NBPG PAGE_SIZE
#define UPAGES 1
#define HOST_TEXT_START_ADDR (u.start_code)
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
#define NBPG PAGE_SIZE
#define UPAGES 1
#define HOST_TEXT_START_ADDR (u.start_code)
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
// *INDENT-ON*
#endif // ! WITH_GLIBC

View File

@ -49,6 +49,14 @@
#define CS8 0000060
#define PARENB 0000400
struct winsize
{
unsigned short ws_row;
unsigned short ws_col;
unsigned short ws_xpixel;
unsigned short ws_ypixel;
};
struct termio
{
unsigned short c_iflag;

View File

@ -31,7 +31,8 @@ typedef long int clockid_t;
typedef long int time_t;
#endif
struct tm {
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
@ -55,11 +56,13 @@ struct timespec
#endif // __MES_STRUCT_TIMESPEC
#define CLOCK_PROCESS_CPUTIME_ID 2
char *asctime (struct tm const *broken_time);
int clock_gettime (clockid_t clk_id, struct timespec *tp);
struct tm *localtime (time_t const *timep);
struct tm *gmtime (time_t const *time);
int mktime (struct tm *broken_time);
time_t time (time_t *tloc);
time_t time (time_t * tloc);
#endif // ! WITH_GLIBC

View File

@ -62,6 +62,7 @@ unsigned int alarm (unsigned int seconds);
int close (int fd);
int execv (char const *file_name, char *const argv[]);
int execl (char const *file_name, char const *arg, ...);
int execlp (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);
@ -72,19 +73,23 @@ int setgid (gid_t newgid);
int setuid (uid_t newuid);
uid_t geteuid (void);
gid_t getegid (void);
pid_t getpgrp (void);
pid_t getpid (void);
int getpgid (pid_t pid);
int isatty (int fd);
int link (char const *oldname, char const *newname);
int link (char const *old_name, char const *new_name);
off_t lseek (int fd, off_t offset, int whence);
ssize_t read (int fd, void *buffer, size_t size);
ssize_t readlink (char const *file_name, char *buffer, size_t size);
#if __SBRK_CHAR_PTRDIFF
/* xmalloc in binutils <= 2.10.1 uses this old prototype */
char * sbrk (ptrdiff_t delta);
char *sbrk (ptrdiff_t delta);
#else
void * sbrk (intptr_t delta);
void *sbrk (intptr_t delta);
#endif
int symlink (char const *old_name, char const *new_name);
int unlink (char const *file_name);
ssize_t write (int filedes, void const *buffer, size_t size);
pid_t getpid (void);
#endif // ! WITH_GLIBC

View File

@ -1,5 +1,5 @@
void
assert_fail (char* s)
assert_fail (char *s)
{
eputs ("assert fail: ");
eputs (s);

View File

@ -18,7 +18,7 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libmes.h>
#include <mes/lib.h>
int
isdigit (int c)

27
lib/ctype/isgraph.c Normal file
View File

@ -0,0 +1,27 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
#include <ctype.h>
int
isgraph (int c)
{
return c > 32 && c < 127;
}

View File

@ -18,10 +18,11 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libmes.h>
#include <mes/lib.h>
int
isspace (int c)
{
return (c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' || c == ' ');
return (c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'
|| c == ' ');
}

View File

@ -18,7 +18,7 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libmes.h>
#include <mes/lib.h>
int
isxdigit (int c)

View File

@ -26,7 +26,7 @@
#include <unistd.h>
int
__getdirentries (int filedes, char *buffer, size_t nbytes, off_t *basep)
__getdirentries (int filedes, char *buffer, size_t nbytes, off_t * basep)
{
if (basep)
*basep = lseek (filedes, (off_t) 0, SEEK_CUR);

View File

@ -37,7 +37,7 @@
/* Close the directory stream DIRP.
Return 0 if successful, -1 if not. */
int
closedir (DIR *dirp)
closedir (DIR * dirp)
{
int filedes;

View File

@ -47,12 +47,12 @@ opendir (char const *name)
if (name[0] == '\0')
{
/* POSIX.1-1990 says an empty name gets ENOENT;
but `open' might like it fine. */
but `open' might like it fine. */
errno = ENOENT;
return 0;
}
fd = open (name, O_RDONLY|O_DIRECTORY);
fd = open (name, O_RDONLY | O_DIRECTORY);
if (fd < 0)
return 0;
@ -73,7 +73,7 @@ opendir (char const *name)
errno = save_errno;
return 0;
}
dirp->data = (char *) (dirp + 1);
dirp->data = (char *)(dirp + 1);
dirp->allocation = allocation;
dirp->fd = fd;

View File

@ -34,7 +34,7 @@
/* Read a directory entry from DIRP. */
struct dirent *
readdir (DIR *dirp)
readdir (DIR * dirp)
{
struct dirent *dp;
int saved_errno = errno;
@ -44,42 +44,43 @@ readdir (DIR *dirp)
size_t reclen;
if (dirp->offset >= dirp->size)
{
/* We've emptied out our buffer. Refill it. */
{
/* We've emptied out our buffer. Refill it. */
size_t maxread;
ssize_t bytes;
size_t maxread;
ssize_t bytes;
maxread = dirp->allocation;
maxread = dirp->allocation;
#if 0
off_t base;
bytes = __getdirentries (dirp->fd, dirp->data, maxread, &base);
off_t base;
bytes = __getdirentries (dirp->fd, dirp->data, maxread, &base);
#else
bytes = getdents (dirp->fd, dirp->data, maxread);
#endif
if (bytes <= 0)
{
/* Don't modifiy errno when reaching EOF. */
if (bytes == 0)
if (bytes <= 0)
{
/* Don't modifiy errno when reaching EOF. */
if (bytes == 0)
errno = saved_errno;
dp = 0;
break;
}
dirp->size = (size_t) bytes;
dp = 0;
break;
}
dirp->size = (size_t)bytes;
/* Reset the offset into the buffer. */
dirp->offset = 0;
}
/* Reset the offset into the buffer. */
dirp->offset = 0;
}
dp = (struct dirent *) &dirp->data[dirp->offset];
dp = (struct dirent *)&dirp->data[dirp->offset];
reclen = dp->d_reclen;
dirp->offset += reclen;
dirp->filepos = dp->d_off;
/* Skip deleted files. */
} while (dp->d_ino == 0);
}
while (dp->d_ino == 0);
return dp;
}

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.
*
@ -21,7 +21,7 @@
#include <libc+tcc.c>
#if __GNU__
#include <linux/gnu.c>
#error TODO, see wip-hurd
#elif __linux__
#include <linux/gnu.c>
#else
@ -31,7 +31,7 @@
// m4
#include <stdlib/abort.c>
#include <stdlib/atol.c>
#include <stub/atof.c>
#include <stdlib/atof.c>
#include <string/bcmp.c>
#include <string/bcopy.c>
#include <string/bzero.c>
@ -48,7 +48,7 @@
#include <stub/pclose.c>
#include <stub/popen.c>
#include <string/rindex.c>
#include <stub/rewind.c>
#include <stdio/rewind.c> // for gcc-4.6.4; could be stubbed
#include <stub/setbuf.c>
#include <stub/system.c>
#include <string/strerror.c>
@ -70,7 +70,8 @@
#include <stub/sys_siglist.c>
#include <stub/umask.c>
#include <stub/utime.c>
#include <stub/fscanf.c>
#include <stdio/fscanf.c> // for gcc-4.6.4; could be stubbed
#include <stdio/vfscanf.c> // dependency of fscanf
#include <ctype/isascii.c>
#include <stdlib/bsearch.c>
#include <stub/gmtime.c>
@ -83,7 +84,6 @@
#include <math/fabs.c>
// gcc
#include <stdio/freopen.c>
#include <stub/times.c>
#include <posix/sleep.c>
@ -119,3 +119,31 @@
#include <stub/rand.c>
#include <stub/sigdelset.c>
#include <stub/ttyname.c>
// gawk
#include <ctype/isgraph.c>
#include <stub/getpgid.c>
#include <stub/getpgrp.c>
// #include <mes/abtod.c> in libc+tcc for strtod,strtof (could be stubbed)
// tar
#include <posix/execlp.c>
#include <stub/getgrgid.c>
#include <stub/getgrnam.c>
#include <stub/mktime.c>
#include <stub/setgrent.c>
// gcc-4.6.4
#include <math/ceil.c>
#include <math/floor.c>
#include <math/labs.c>
#include <string/strtok.c>
#include <stub/atan2.c>
#include <stub/asctime.c>
#include <stub/cos.c>
#include <stub/exp.c>
#include <stub/log.c>
#include <stub/modf.c>
#include <stub/pow.c>
#include <stub/sin.c>
#include <stub/sqrt.c>

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -61,6 +61,8 @@ int errno;
#include <ctype/isupper.c>
#include <ctype/tolower.c>
#include <ctype/toupper.c>
#include <mes/abtod.c> // implementation instead of stub for GNU gawk
#include <mes/dtoab.c> // implementation instead of stub for GNU gawk
#include <mes/search-path.c>
#include <posix/execvp.c>
#include <stdio/fclose.c>
@ -85,6 +87,7 @@ int errno;
#include <stdio/vsscanf.c>
#include <stdlib/calloc.c>
#include <stdlib/qsort.c>
#include <stdlib/strtod.c>
#include <stdlib/strtof.c>
#include <stdlib/strtol.c>
#include <stdlib/strtold.c>
@ -93,7 +96,6 @@ int errno;
#include <stdlib/strtoull.c>
#include <string/memmem.c>
#include <string/memmove.c>
#include <string/memset.c>
#include <string/strcat.c>
#include <string/strchr.c>
#include <string/strlwr.c>
@ -105,5 +107,4 @@ int errno;
#include <stub/ldexp.c>
#include <stub/mprotect.c>
#include <stub/localtime.c>
#include <stub/strtod.c>
#include <stub/sigemptyset.c>

View File

@ -21,10 +21,10 @@
#include <sys/ioctl.h>
#include <stdarg.h>
#include <stdlib.h>
#include <libmes.h>
#include <mes/lib.h>
#include <stdio.h>
#include <libmes.h>
#include <mes/lib.h>
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>
@ -40,8 +40,6 @@
#error both __GNU__ and _linux__ are undefined, choose one
#endif
int g_stdin = 0;
void _env ();
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
@ -60,9 +58,9 @@ __mes_debug ()
#if !___GNU__
#include <string/memcpy.c>
#include <stdlib/malloc.c>
#include <assert/assert.c>
#include <stdlib/malloc.c>
#include <string/memcpy.c>
#endif
#include <stdio/getchar.c>
@ -76,15 +74,16 @@ __mes_debug ()
#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 <stdlib/getenv.c>
#include <stdlib/setenv.c>
#include <posix/getenv.c>
#include <posix/isatty.c>
#include <posix/setenv.c>
#include <posix/wait.c>
#include <posix/execv.c>

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.
*
@ -48,7 +48,7 @@
// m4
#include <stdlib/abort.c>
#include <stub/atof.c>
#include <stdlib/atof.c>
#include <string/bcmp.c>
#include <string/bcopy.c>
#include <string/bzero.c>
@ -65,7 +65,7 @@
#include <stub/pclose.c>
#include <stub/popen.c>
#include <string/rindex.c>
#include <stub/rewind.c>
#include <stdio/rewind.c> // for gcc-4.6.4; could be stubbed
#include <stub/setbuf.c>
#include <stub/system.c>
#include <string/strerror.c>
@ -87,7 +87,8 @@
#include <stub/sys_siglist.c>
#include <stub/umask.c>
#include <stub/utime.c>
#include <stub/fscanf.c>
#include <stdio/fscanf.c> // for gcc-4.6.4; could be stubbed
#include <stdio/vfscanf.c> // dependency of fscanf
#include <ctype/isascii.c>
#include <stdlib/bsearch.c>
#include <stub/gmtime.c>

View File

@ -18,7 +18,7 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libmes.h>
#include <mes/lib.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@ -41,10 +41,36 @@
#include <mes/fdputs.c>
#include <mes/fdungetc.c>
#if POSIX
#if WITH_GLIBC
#include <fcntl.h>
#include <stdarg.h>
// The Mes C Library defines and initializes these in crt1
int __stdin = STDIN;
int __stdout = STDOUT;
int __stderr = STDERR;
int
mes_open (char const *file_name, int flags, int mask)
{
__ungetc_init ();
int r = open (file_name, flags, mask);
if (r > 2)
__ungetc_buf[r] = -1;
return r;
}
#include <mes/eputs.c>
#include <mes/oputs.c>
#endif // POSIX
#else // !WITH_GLIBC
int
mes_open (char const *file_name, int flags, int mask)
{
return _open3 (file_name, flags, mask);
}
#endif // !WITH_GLIBC
#include <mes/eputc.c>
#include <mes/oputc.c>

View File

@ -18,7 +18,7 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libmes.h>
#include <mes/lib.h>
double
__divdi3 (double a, double b)
@ -37,7 +37,7 @@ __moddi3 (double a, double b)
if (__mes_debug () && !stub)
eputs ("__moddi3 stub\n");
stub = 1;
return ((int) a %(int)b);
return ((int)a % (int)b);
}
unsigned long long
@ -120,7 +120,7 @@ long
int
#else // !__TINYCC_
long long
#endif // !__TINYCC_
#endif // !__TINYCC_
__fixdfdi (double a1)
{
static int stub = 0;

25
lib/linux/access.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
access (char const *file_name, int how)
{
return _sys_call2 (SYS_access, (long)file_name, (int)how);
}

25
lib/linux/brk.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
long
brk (void *addr)
{
return _sys_call1 (SYS_brk, (long)addr);
}

25
lib/linux/chdir.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
int
chdir (char const *file_name)
{
return _sys_call1 (SYS_chdir, (long)file_name);
}

25
lib/linux/chmod.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
chmod (char const *file_name, mode_t mask)
{
return _sys_call2 (SYS_chmod, (long)file_name, (long)mask);
}

27
lib/linux/close.c Normal file
View File

@ -0,0 +1,27 @@
/* -*-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/>.
*/
int
close (int filedes)
{
if (filedes > 2)
__ungetc_buf[filedes] = -1;
return _sys_call1 (SYS_close, (int)filedes);
}

25
lib/linux/dup.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
dup (int old)
{
return _sys_call1 (SYS_dup, (int)old);
}

25
lib/linux/dup2.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
dup2 (int old, int new)
{
return _sys_call2 (SYS_dup2, (int)old, (int)new);
}

25
lib/linux/execve.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
execve (char const *file_name, char *const argv[], char *const env[])
{
return _sys_call3 (SYS_execve, (long)file_name, (long)argv, (long)env);
}

30
lib/linux/fcntl.c Normal file
View File

@ -0,0 +1,30 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
int
fcntl (int filedes, int command, ...)
{
va_list ap;
va_start (ap, command);
int data = va_arg (ap, int);
int r = _sys_call3 (SYS_fcntl, (int)filedes, (int)command, (int)data);
va_end (ap);
return r;
}

25
lib/linux/fork.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
fork ()
{
return _sys_call (SYS_fork);
}

25
lib/linux/fstat.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
int
fstat (int filedes, struct stat *statbuf)
{
return _sys_call2 (SYS_fstat, (int)filedes, (long)statbuf);
}

25
lib/linux/fsync.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-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/>.
*/
int
fsync (int filedes)
{
return _sys_call1 (SYS_fsync, (int)filedes);
}

37
lib/linux/getcwd.c Normal file
View File

@ -0,0 +1,37 @@
/* -*-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/>.
*/
char *
_getcwd (char *buffer, size_t size)
{
int r = _sys_call2 (SYS_getcwd, (long)buffer, (long)size);
if (r >= 0)
return buffer;
return 0;
}
char *
getcwd (char *buffer, size_t size)
{
static char buf[PATH_MAX];
if (buffer)
return _getcwd (buffer, size);
return _getcwd (buf, PATH_MAX);
}

25
lib/linux/getdents.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
int
getdents (int filedes, char *buffer, size_t nbytes)
{
return _sys_call3 (SYS_getdents, (int)filedes, (long)buffer, (long)nbytes);
}

25
lib/linux/getegid.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
gid_t
getegid ()
{
return _sys_call (SYS_getegid);
}

25
lib/linux/geteuid.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
uid_t
geteuid ()
{
return _sys_call (SYS_geteuid);
}

25
lib/linux/getgid.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
gid_t
getgid ()
{
return _sys_call (SYS_getgid);
}

25
lib/linux/getpid.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
pid_t
getpid ()
{
return _sys_call (SYS_getpid);
}

25
lib/linux/getppid.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
pid_t
getppid ()
{
return _sys_call (SYS_getppid);
}

25
lib/linux/getrusage.c Normal file
View File

@ -0,0 +1,25 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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/>.
*/
int
getrusage (int processes, struct rusage *rusage)
{
return _sys_call2 (SYS_getrusage, (int)processes, (long)rusage);
}

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