build: Support Debian build, install.

* scripts/mescc: Support Debian build, install.
* lib/libmes.c (fdgetc): Allow Nyacc/ungetc conflict.
* build-aux/export.make (ARCH): Export.
* build-aux/build-mes.sh: Disable full build for non-bootstrap
  x86-only.
* check.sh (total): Use bash to invoke build-aux/check-mescc.sh.
* build-aux/build-guile.sh (SCM_FILES): Support guile-2.0.
* module/mes/guile.scm (guile-2.0): Support guile-2.0.
* build-aux/build-mes.sh: Use bash.
* build-aux/setup-mes.sh: New file.
This commit is contained in:
Jan Nieuwenhuizen 2018-07-07 17:31:06 +02:00
parent a25653e7f1
commit 69813a6da3
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
11 changed files with 140 additions and 61 deletions

View File

@ -47,13 +47,17 @@ guile/mescc/preprocess.scm
export srcdir=. export srcdir=.
export host=$($GUILE -c "(display %host-type)") export host=$($GUILE -c "(display %host-type)")
if [ "$GUILE_EFFECTIVE_VERSION" = "2.0" ]; then
abs=$PWD/
fi
#$GUILE --no-auto-compile -L guile -C guile -s build-aux/compile-all.scm $SCM_FILES #$GUILE --no-auto-compile -L guile -C guile -s build-aux/compile-all.scm $SCM_FILES
for i in $SCM_FILES; do for i in $SCM_FILES; do
go=${i%%.scm}.go go=${i%%.scm}.go
if [ $i -nt $go ]; then if [ $i -nt $go ]; then
echo " GUILEC $i" echo " GUILEC $i"
$GUILE_TOOLS compile -L guile -L scripts -o $go $i $GUILE_TOOLS compile -L ${abs}guile -L ${abs}scripts -o $go $i
fi fi
done done
@ -65,6 +69,6 @@ for i in $SCRIPTS; do
go=${i%%.scm}.go go=${i%%.scm}.go
if [ $i -nt $go ]; then if [ $i -nt $go ]; then
echo " GUILEC $i" echo " GUILEC $i"
$GUILE_TOOLS compile -L guile -L scripts -o $go $i $GUILE_TOOLS compile -L ${abs}guile -L ${abs}scripts -o $go $i
fi fi
done done

View File

@ -97,34 +97,44 @@ if [ -d "$MES_SEED" ]; then
fi fi
PREPROCESS=1 PREPROCESS=1
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt0 if [ ! -d "$MES_SEED" ] \
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt1 && [ "$ARCH" = "i386" \
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crti -o "$ARCH" = "i586" \
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crtn -o "$ARCH" = "i686" ]; then
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mini MES_ARENA=100000000
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc fi
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libgetopt
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc+tcc ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/crt0
ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc+gnu ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/crt1
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/crt1
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/crti
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/crtn
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/libc-mini
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/libc
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/libgetopt
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/libc+tcc
ARCHDIR=1 NOLINK=1 bash build-aux/cc-mes.sh lib/libc+gnu
[ -n "$SEED" ] && exit 0 [ -n "$SEED" ] && exit 0
MES_ARENA=${MES_ARENA-10000000} MES_ARENA=${MES_ARENA-100000000}
sh build-aux/mes-snarf.scm --mes src/gc.c bash build-aux/mes-snarf.scm --mes src/gc.c
sh build-aux/mes-snarf.scm --mes src/lib.c bash build-aux/mes-snarf.scm --mes src/lib.c
sh build-aux/mes-snarf.scm --mes src/math.c bash build-aux/mes-snarf.scm --mes src/math.c
sh build-aux/mes-snarf.scm --mes src/mes.c bash build-aux/mes-snarf.scm --mes src/mes.c
sh build-aux/mes-snarf.scm --mes src/posix.c bash build-aux/mes-snarf.scm --mes src/posix.c
sh build-aux/mes-snarf.scm --mes src/reader.c bash build-aux/mes-snarf.scm --mes src/reader.c
sh build-aux/mes-snarf.scm --mes src/vector.c bash build-aux/mes-snarf.scm --mes src/vector.c
sh build-aux/cc-mes.sh scaffold/main echo MES_ARENA=$MES_ARENA
sh build-aux/cc-mes.sh scaffold/hello bash build-aux/cc-mes.sh scaffold/main
sh build-aux/cc-mes.sh scaffold/argv
sh build-aux/cc-mes.sh scaffold/malloc bash build-aux/cc-mes.sh scaffold/main
bash build-aux/cc-mes.sh scaffold/hello
bash build-aux/cc-mes.sh scaffold/argv
bash build-aux/cc-mes.sh scaffold/malloc
##sh build-aux/cc-mes.sh scaffold/micro-mes ##sh build-aux/cc-mes.sh scaffold/micro-mes
##sh build-aux/cc-mes.sh scaffold/tiny-mes ##sh build-aux/cc-mes.sh scaffold/tiny-mes
# sh build-aux/cc-mes.sh scaffold/mini-mes # bash build-aux/cc-mes.sh scaffold/mini-mes
bash build-aux/cc-mes.sh src/mes
sh build-aux/cc-mes.sh src/mes
cp src/mes.mes-out src/mes cp src/mes.mes-out src/mes

View File

@ -63,20 +63,20 @@ else
fi fi
if [ -n "$PREPROCESS" ]; then if [ -n "$PREPROCESS" ]; then
sh $MESCC $MESCCFLAGS $CPPFLAGS -E -o "$o.E" "$c".c bash $MESCC $MESCCFLAGS $CPPFLAGS -E -o "$o.E" "$c".c
sh $MESCC $MESCCFLAGS -S "$o".E bash $MESCC $MESCCFLAGS -S "$o".E
sh $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S bash $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S
if [ -z "$NOLINK" ]; then if [ -z "$NOLINK" ]; then
sh $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS bash $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS
fi fi
elif [ -n "$COMPILE" ]; then elif [ -n "$COMPILE" ]; then
sh $MESCC $MESCCFLAGS $CPPFLAGS -S -o "$o.S" "$c".c bash $MESCC $MESCCFLAGS $CPPFLAGS -S -o "$o.S" "$c".c
sh $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S bash $MESCC $MESCCFLAGS -c -o "$o".${p}o "$o".S
if [ -z "$NOLINK" ]; then if [ -z "$NOLINK" ]; then
sh $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS bash $MESCC $MESCCFLAGS -o "$o".${p}out "$o".${p}o $MESCCLIBS
fi fi
elif [ -z "$NOLINK" ]; then elif [ -z "$NOLINK" ]; then
sh $MESCC $MESCCFLAGS $CPPFLAGS -o "$o".${p}out "$c".c $MESCCLIBS bash $MESCC $MESCCFLAGS $CPPFLAGS -o "$o".${p}out "$c".c $MESCCLIBS
else else
sh $MESCC $MESCCFLAGS $CPPFLAGS -c -o "$o".${p}out "$c".c bash $MESCC $MESCCFLAGS $CPPFLAGS -c -o "$o".${p}o "$c".c
fi fi

View File

@ -10,6 +10,10 @@ ifdef VERSION
export VERSION export VERSION
endif endif
ifdef ARCH
export ARCH
endif
ifdef CC ifdef CC
export CC export CC
endif endif

62
build-aux/setup-mes.sh Normal file
View File

@ -0,0 +1,62 @@
#! /bin/sh
set -e
if [ -n "$BUILD_DEBUG" ]; then
set -x
fi
mkdir -p src
cd src
GUILE_EFFECTIVE_VERSION=2.2
GUILE_SITE_DIR=/usr/local/share/guile/site/$GUILE_EFFECTIVE_VERSION
GUILE_SITE_CCACHE_DIR=/usr/local/lib/guile/$GUILE_EFFECTIVE_VERSION/site-ccache
GUILE_LOAD_PATH=$GUILE_SITE_DIR
GUILE_LOAD_COMPILED_PATH=$GUILE_SITE_CCACHE_DIR
export GUILE_LOAD_PATH
export GUILE_LOAD_COMPILED_PATH
sudo apt-get install --no-install-recommends build-essential ca-certificates gcc-i686-linux-gnu guile-$GUILE_EFFECTIVE_VERSION-dev help2man texinfo
echo checking for M1
if ! command -v M1; then
if sudo apt-get install mescc-tools; then
echo yay
else
wget -O mescc-tools-Release_0.5.1.tar.gz https://github.com/oriansj/mescc-tools/archive/Release_0.5.1.tar.gz
tar xf mescc-tools-Release_0.5.1.tar.gz
cd mescc-tools-Release_0.5.1
make
make check
sudo make install
cd ..
fi
fi
echo checking for Nyacc
if ! guile -c '(use-modules (nyacc lalr)) (display *nyacc-version*) (newline)'; then
if sudo apt-get install --no-install-recommends nyacc; then
echo yay
else
wget -O nyacc-v0.80.43.tar.gz https://gitlab.com/janneke/nyacc/-/archive/v0.80.43/nyacc-v0.80.43.tar.gz
tar xf nyacc-v0.80.43.tar.gz
cd nyacc-v0.80.43
./configure --prefix=/usr/local
make
make check
sudo make install
cd ..
fi
fi
echo checking for mes
if ! command -v mes; then
sudo apt-get install --no-install-recommends git
git clone http://gitlab.com/janneke/mes
cd mes
git checkout wip-gnu
./configure
make
make check
make install
fi

View File

@ -18,10 +18,12 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Mes. If not, see <http://www.gnu.org/licenses/>. # along with Mes. If not, see <http://www.gnu.org/licenses/>.
export BASH
export CC32 export CC32
export GUILE MES MES_ARENA export GUILE MES MES_ARENA
export BUILD_DEBUG export BUILD_DEBUG
BASH=${BASH-bash}
CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)} CC32=${CC32-$(command -v i686-unknown-linux-gnu-gcc)}
GUILE=${GUILE-guile} GUILE=${GUILE-guile}
MES=${MES-src/mes} MES=${MES-src/mes}
@ -95,4 +97,4 @@ else
echo PASS: $total echo PASS: $total
fi fi
sh build-aux/check-mescc.sh $BASH build-aux/check-mescc.sh

View File

@ -1,12 +1,13 @@
#! /bin/sh #! /bin/sh
set -e set -e
set -o pipefail
if [ -n "$BUILD_DEBUG" ]; then if [ -n "$BUILD_DEBUG" ]; then
set -x set -x
fi fi
# use bash or lose if pipes fail
[ -n "$BASH" ] && set -o pipefail
SHELL=${SHELL-$(command -v sh)} SHELL=${SHELL-$(command -v sh)}
PREFIX=${PREFIX-/usr/local} PREFIX=${PREFIX-/usr/local}
MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes} MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes}

View File

@ -148,12 +148,23 @@ fdgetc (int fd)
} }
else else
{ {
if (_ungetc_fd != fd) i = _ungetc_buf[_ungetc_pos];
if (_ungetc_fd != fd && i == 10)
{
// FIXME: Nyacc's ungetc exposes harmless libmec.c bug
// we need one unget position per FD
_ungetc_pos = -1;
_ungetc_fd = -1;
return fdgetc (fd);
}
else if (_ungetc_fd != fd)
{ {
eputs (" ***MES LIB C*** fdgetc ungetc conflict unget-fd="); eputs (" ***MES LIB C*** fdgetc ungetc conflict unget-fd=");
eputs (itoa (_ungetc_fd)); eputs (itoa (_ungetc_fd));
eputs (", fdgetc-fd="); eputs (", fdgetc-fd=");
eputs (itoa (fd)); eputs (itoa (fd));
eputs (", c=");
eputs (itoa ( _ungetc_buf[_ungetc_pos]));
eputs ("\n"); eputs ("\n");
exit (1); exit (1);
} }
@ -186,6 +197,8 @@ fdputs (char const* s, int fd)
int int
fdungetc (int c, int fd) fdungetc (int c, int fd)
{ {
if (c == -1)
return c;
if (_ungetc_pos == -1) if (_ungetc_pos == -1)
_ungetc_fd = fd; _ungetc_fd = fd;
else if (_ungetc_fd != fd) else if (_ungetc_fd != fd)

View File

@ -89,22 +89,7 @@
(cond-expand (cond-expand
(guile-2.2) (guile-2.2)
(guile-2 (guile-2)
(eval-when (compile load eval)
(define-syntax include-from-path
(lambda (x)
(syntax-case x ()
((k filename)
(let ((fn (syntax->datum #'filename)))
(with-syntax ((fn (datum->syntax
#'filename
(canonicalize-path
(or (%search-load-path fn)
(syntax-violation 'include-from-path
"file not found in path"
x #'filename))))))
#'(include fn))))))))
(export include-from-path))
(guile (guile
(use-modules (ice-9 syncase)) (use-modules (ice-9 syncase))
(define (compose proc . rest) (define (compose proc . rest)

View File

@ -228,10 +228,10 @@
(if (string-null? prefix) o (string-append prefix "/" o))) (if (string-null? prefix) o (string-append prefix "/" o)))
(prefix-file file-name))) (prefix-file file-name)))
(define (assert-system* . commands) (define (assert-system* . args)
(let ((status (apply system* commands))) (let ((status (apply system* args)))
(when (not (zero? status)) (when (not (zero? status))
(stderr "mescc: failed: ~a\n" (string-join command)) (stderr "mescc: failed: ~a\n" (string-join args))
(exit status)) (exit status))
status)) status))

View File

@ -4,7 +4,7 @@ if [ -n "$BUILD_DEBUG" ]; then
set -x set -x
fi fi
PREFIX=${PREFIX-@PREFIX@} PREFIX=${PREFIX-@PREFIX@}
if [ "$PREFIX" = @PREFIX""@ -o ! -d "$PREFIX" ] if [ "@PREFIX@" = @PREFIX""@ -o ! -d "$PREFIX/share/mes/module" ]
then then
MES_PREFIX=${MES_PREFIX-$(cd $(dirname $0)/.. && pwd)} MES_PREFIX=${MES_PREFIX-$(cd $(dirname $0)/.. && pwd)}
else else
@ -22,8 +22,6 @@ if [ '(' -z "$mes_p" -a -z "$MES" ')' -o "$MES" = "guile" -o "$MES" = "mes.guile
exec ${GUILE-guile} -L $GUILEDIR -e '(mescc)' -s "$0" "$@" exec ${GUILE-guile} -L $GUILEDIR -e '(mescc)' -s "$0" "$@"
else else
MES=${MES-$(dirname $0)/mes} MES=${MES-$(dirname $0)/mes}
MES_MODULEDIR=${MES_MODULEDIR-$MES_PREFIX/"module"}
export MES_MODULEDIR
exec ${MES-mes} -e '(mescc)' -s $0 "$@" exec ${MES-mes} -e '(mescc)' -s $0 "$@"
fi fi
!# !#