Date: Friday, November 25, 2016 @ 19:11:54 Author: arojas Revision: 196870
archrelease: copy trunk to community-staging-i686, community-staging-x86_64 Added: libgap/repos/community-staging-i686/ libgap/repos/community-staging-i686/PKGBUILD (from rev 196869, libgap/trunk/PKGBUILD) libgap/repos/community-staging-i686/libgap-4.8.6.patch (from rev 196869, libgap/trunk/libgap-4.8.6.patch) libgap/repos/community-staging-x86_64/ libgap/repos/community-staging-x86_64/PKGBUILD (from rev 196869, libgap/trunk/PKGBUILD) libgap/repos/community-staging-x86_64/libgap-4.8.6.patch (from rev 196869, libgap/trunk/libgap-4.8.6.patch) ---------------------------------------------+ community-staging-i686/PKGBUILD | 37 community-staging-i686/libgap-4.8.6.patch | 1861 ++++++++++++++++++++++++++ community-staging-x86_64/PKGBUILD | 37 community-staging-x86_64/libgap-4.8.6.patch | 1861 ++++++++++++++++++++++++++ 4 files changed, 3796 insertions(+) Copied: libgap/repos/community-staging-i686/PKGBUILD (from rev 196869, libgap/trunk/PKGBUILD) =================================================================== --- community-staging-i686/PKGBUILD (rev 0) +++ community-staging-i686/PKGBUILD 2016-11-25 19:11:54 UTC (rev 196870) @@ -0,0 +1,37 @@ +# $Id$ +# Maintainer: Antonio Rojas <aro...@archlinux.org> +# Contributor: Lukas Fleischer + +pkgname=libgap +pkgver=4.8.6 +pkgrel=1 +pkgdesc="A C library version of the GAP kernel" +arch=(i686 x86_64) +url="https://bitbucket.org/vbraun/libgap" +license=(GPL) +depends=(gap) +makedepends=(git python2-ply) +#source=("https://bitbucket.org/vbraun/$pkgname/downloads/$pkgname-$pkgver.tar.gz") +source=("git+https://bitbucket.org/vbraun/libgap/src#commit=6f4bb7e" + libgap-4.8.6.patch) +md5sums=('SKIP' + '11c0a2657c77af80ae41b38c2bb0ba50') + +prepare() { + cd src + patch -p1 -i ../libgap-4.8.6.patch + python2 scripts/libGAPify.py --modify src + autoreconf -vi +} + +build() { + cd src + + ./configure --prefix=/usr + make +} + +package() { + cd src + make install DESTDIR="$pkgdir" +} Copied: libgap/repos/community-staging-i686/libgap-4.8.6.patch (from rev 196869, libgap/trunk/libgap-4.8.6.patch) =================================================================== --- community-staging-i686/libgap-4.8.6.patch (rev 0) +++ community-staging-i686/libgap-4.8.6.patch 2016-11-25 19:11:54 UTC (rev 196870) @@ -0,0 +1,1861 @@ +From 55035e11db706d4dea0c8834d3059c33f77c1d42 Mon Sep 17 00:00:00 2001 +From: Lukas Fleischer <lfleisc...@lfos.de> +Date: Fri, 25 Nov 2016 13:59:22 +0100 +Subject: [PATCH] Update to 4.8.6 + +--- + Makefile.in | 19 +- + aclocal.m4 | 1 + + config.guess | 6 +- + config.sub | 10 +- + configure | 123 ++++++++- + configure.ac | 2 +- + m4/libtool.m4 | 5 +- + patches/gap-4.8.6.patch | 684 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/Makefile.in | 18 +- + src/bool.c | 2 +- + src/code.c | 40 ++- + src/gap.c | 1 + + src/intfuncs.c | 33 --- + src/listfunc.c | 7 +- + src/pperm.c | 4 +- + src/profile.c | 75 +++++- + src/profile.h | 3 +- + src/read.c | 10 +- + src/streams.c | 74 ++---- + src/sysfiles.c | 93 ++++++- + src/sysfiles.h | 15 +- + src/system.c | 4 +- + src/trans.c | 4 +- + test/Makefile.in | 9 +- + 24 files changed, 1076 insertions(+), 166 deletions(-) + create mode 100644 patches/gap-4.8.6.patch + +diff --git a/Makefile.in b/Makefile.in +index 44732ab..c5f0384 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -97,10 +97,10 @@ host_triplet = @host@ + target_triplet = @target@ + subdir = . + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ +@@ -169,7 +169,7 @@ CSCOPE = cscope + DIST_SUBDIRS = $(SUBDIRS) + am__DIST_COMMON = $(srcdir)/Makefile.in AUTHORS COPYING ChangeLog \ + INSTALL NEWS README TODO compile config.guess config.sub \ +- install-sh ltmain.sh missing ++ depcomp install-sh ltmain.sh missing + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + distdir = $(PACKAGE)-$(VERSION) + top_distdir = $(distdir) +@@ -250,6 +250,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +@@ -558,7 +559,7 @@ distdir: $(DISTFILES) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" + dist-gzip: distdir +- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz ++ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + + dist-bzip2: distdir +@@ -584,7 +585,7 @@ dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 +- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz ++ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + + dist-zip: distdir +@@ -602,7 +603,7 @@ dist dist-all: + distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ ++ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ +@@ -612,7 +613,7 @@ distcheck: dist + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ ++ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac +diff --git a/aclocal.m4 b/aclocal.m4 +index e62b4ad..b839773 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1170,6 +1170,7 @@ AC_SUBST([am__tar]) + AC_SUBST([am__untar]) + ]) # _AM_PROG_TAR + ++m4_include([m4/ld-version-script.m4]) + m4_include([m4/libtool.m4]) + m4_include([m4/ltoptions.m4]) + m4_include([m4/ltsugar.m4]) +diff --git a/config.guess b/config.guess +index dbfb978..6c32c86 100755 +--- a/config.guess ++++ b/config.guess +@@ -1,8 +1,8 @@ + #! /bin/sh + # Attempt to guess a canonical system name. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2015-01-01' ++timestamp='2014-11-04' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -50,7 +50,7 @@ version="\ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright 1992-2015 Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +diff --git a/config.sub b/config.sub +index 6467c95..7ffe373 100755 +--- a/config.sub ++++ b/config.sub +@@ -1,8 +1,8 @@ + #! /bin/sh + # Configuration validation subroutine script. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2015-01-01' ++timestamp='2014-12-03' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -68,7 +68,7 @@ Report bugs and patches to <config-patc...@gnu.org>." + version="\ + GNU config.sub ($timestamp) + +-Copyright 1992-2015 Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -260,7 +260,7 @@ case $basic_machine in + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ +- | fido | fr30 | frv | ft32 \ ++ | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ +@@ -1025,7 +1025,7 @@ case $basic_machine in + ;; + ppc64) basic_machine=powerpc64-unknown + ;; +- ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown +diff --git a/configure b/configure +index e3c0c61..b9f24ba 100755 +--- a/configure ++++ b/configure +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.69 for libGAP 4.8.3. ++# Generated by GNU Autoconf 2.69 for libGAP 4.8.6. + # + # Report bugs to <sage-de...@googlegroups.com>. + # +@@ -590,8 +590,8 @@ MAKEFLAGS= + # Identity of this package. + PACKAGE_NAME='libGAP' + PACKAGE_TARNAME='libgap' +-PACKAGE_VERSION='4.8.3' +-PACKAGE_STRING='libGAP 4.8.3' ++PACKAGE_VERSION='4.8.6' ++PACKAGE_STRING='libGAP 4.8.6' + PACKAGE_BUGREPORT='sage-de...@googlegroups.com' + PACKAGE_URL='' + +@@ -635,6 +635,9 @@ ac_includes_default="\ + ac_subst_vars='am__EXEEXT_FALSE + am__EXEEXT_TRUE + LTLIBOBJS ++HAVE_LD_VERSION_SCRIPT_FALSE ++HAVE_LD_VERSION_SCRIPT_TRUE ++LIBGAP_LT_VERSION + NEED_ITANIUMOBJ_FALSE + NEED_ITANIUMOBJ_TRUE + LIBOBJS +@@ -779,6 +782,7 @@ with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock ++enable_ld_version_script + ' + ac_precious_vars='build_alias + host_alias +@@ -1332,7 +1336,7 @@ if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures libGAP 4.8.3 to adapt to many kinds of systems. ++\`configure' configures libGAP 4.8.6 to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1403,7 +1407,7 @@ fi + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of libGAP 4.8.3:";; ++ short | recursive ) echo "Configuration of libGAP 4.8.6:";; + esac + cat <<\_ACEOF + +@@ -1422,6 +1426,9 @@ Optional Features: + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) ++ --enable-ld-version-script ++ enable linker version script (default is enabled ++ when possible) + + Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] +@@ -1520,7 +1527,7 @@ fi + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-libGAP configure 4.8.3 ++libGAP configure 4.8.6 + generated by GNU Autoconf 2.69 + + Copyright (C) 2012 Free Software Foundation, Inc. +@@ -2183,7 +2190,7 @@ cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by libGAP $as_me 4.8.3, which was ++It was created by libGAP $as_me 4.8.6, which was + generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ +@@ -3157,7 +3164,7 @@ fi + + # Define the identity of the package. + PACKAGE='libgap' +- VERSION='4.8.3' ++ VERSION='4.8.6' + + + cat >>confdefs.h <<_ACEOF +@@ -11936,9 +11943,6 @@ fi + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command +@@ -11947,7 +11951,7 @@ fi + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +@@ -14448,6 +14452,93 @@ $as_echo "#define SYS_IS_CYGWIN32 0" >>confdefs.h + + fi + ++LIBGAP_RELEASE_MAJOR=${PACKAGE_VERSION%.*} ++LIBGAP_VERSION_MAJOR=${PACKAGE_VERSION%%.*} ++LIBGAP_VERSION_MINOR=${LIBGAP_RELEASE_MAJOR#*.} ++LIBGAP_VERSION_MICRO=${PACKAGE_VERSION##*.} ++LIBGAP_VERSION_MICRO=${LIBGAP_VERSION_MICRO%-*} ++LIBGAP_LT_VERSION="$(expr ${LIBGAP_VERSION_MAJOR} + ${LIBGAP_VERSION_MINOR}):${LIBGAP_VERSION_MICRO}:${LIBGAP_VERSION_MINOR}" ++ ++ ++ ++# Checks for linker script support: ++ ++ # Check whether --enable-ld-version-script was given. ++if test "${enable_ld_version_script+set}" = set; then : ++ enableval=$enable_ld_version_script; have_ld_version_script=$enableval ++fi ++ ++ if test -z "$have_ld_version_script"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LD -Wl,--version-script works" >&5 ++$as_echo_n "checking if LD -Wl,--version-script works... " >&6; } ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" ++ cat > conftest.map <<EOF ++foo ++EOF ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ accepts_syntax_errors=yes ++else ++ accepts_syntax_errors=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ if test "$accepts_syntax_errors" = no; then ++ cat > conftest.map <<EOF ++VERS_1 { ++ global: sym; ++}; ++ ++VERS_2 { ++ global: sym; ++} VERS_1; ++EOF ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ have_ld_version_script=yes ++else ++ have_ld_version_script=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ else ++ have_ld_version_script=no ++ fi ++ rm -f conftest.map ++ LDFLAGS="$save_LDFLAGS" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ld_version_script" >&5 ++$as_echo "$have_ld_version_script" >&6; } ++ fi ++ if test "$have_ld_version_script" = "yes"; then ++ HAVE_LD_VERSION_SCRIPT_TRUE= ++ HAVE_LD_VERSION_SCRIPT_FALSE='#' ++else ++ HAVE_LD_VERSION_SCRIPT_TRUE='#' ++ HAVE_LD_VERSION_SCRIPT_FALSE= ++fi ++ ++ + + #OUTPUT + cat >confcache <<\_ACEOF +@@ -14592,6 +14683,10 @@ if test -z "${NEED_ITANIUMOBJ_TRUE}" && test -z "${NEED_ITANIUMOBJ_FALSE}"; then + as_fn_error $? "conditional \"NEED_ITANIUMOBJ\" was never defined. + Usually this means the macro was only invoked conditionally." "$LINENO" 5 + fi ++if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then ++ as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. ++Usually this means the macro was only invoked conditionally." "$LINENO" 5 ++fi + + : "${CONFIG_STATUS=./config.status}" + ac_write_fail=0 +@@ -14989,7 +15084,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by libGAP $as_me 4.8.3, which was ++This file was extended by libGAP $as_me 4.8.6, which was + generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -15055,7 +15150,7 @@ _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ +-libGAP config.status 4.8.3 ++libGAP config.status 4.8.6 + configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +diff --git a/configure.ac b/configure.ac +index 695caee..7355821 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + AC_PREREQ([2.66]) + + # Note: the version number must match the GAP version number +-AC_INIT([libGAP], [4.8.3], [sage-de...@googlegroups.com]) ++AC_INIT([libGAP], [4.8.6], [sage-de...@googlegroups.com]) + + AC_CANONICAL_TARGET + AM_INIT_AUTOMAKE +diff --git a/m4/libtool.m4 b/m4/libtool.m4 +index a644432..a3bc337 100644 +--- a/m4/libtool.m4 ++++ b/m4/libtool.m4 +@@ -2867,9 +2867,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command +@@ -2878,7 +2875,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff --git a/patches/gap-4.8.6.patch b/patches/gap-4.8.6.patch +new file mode 100644 +index 0000000..71b4ee5 +--- /dev/null ++++ b/patches/gap-4.8.6.patch +@@ -0,0 +1,684 @@ ++diff -urd upstream-gap-4.8.6/src/c_filt1.c src/c_filt1.c ++--- upstream-gap-4.8.6/src/c_filt1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_filt1.c 2016-11-25 13:39:28.975513235 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_IS__FUNCTION; ++diff -urd upstream-gap-4.8.6/src/c_meths1.c src/c_meths1.c ++--- upstream-gap-4.8.6/src/c_meths1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_meths1.c 2016-11-25 13:39:28.982179816 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_METHOD__0ARGS; ++Only in src: config.h ++Only in src: config.h.in ++Only in src: config.h.in~ ++diff -urd upstream-gap-4.8.6/src/c_oper1.c src/c_oper1.c ++--- upstream-gap-4.8.6/src/c_oper1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_oper1.c 2016-11-25 13:39:28.982179816 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_REREADING; ++diff -urd upstream-gap-4.8.6/src/c_random.c src/c_random.c ++--- upstream-gap-4.8.6/src/c_random.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_random.c 2016-11-25 13:39:28.985513106 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_QUO__INT; ++diff -urd upstream-gap-4.8.6/src/c_type1.c src/c_type1.c ++--- upstream-gap-4.8.6/src/c_type1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_type1.c 2016-11-25 13:39:28.985513106 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_NAME__FUNC; ++Only in src: .deps ++diff -urd upstream-gap-4.8.6/src/gap.c src/gap.c ++--- upstream-gap-4.8.6/src/gap.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/gap.c 2016-11-25 13:39:29.105511560 +0100 ++@@ -212,14 +212,14 @@ ++ #endif ++ ++ static StructImportedGVars ImportedGVars[MAX_IMPORTED_GVARS]; ++-static Int NrImportedGVars; +++Int NrImportedGVars; ++ ++ static StructImportedGVars ImportedFuncs[MAX_IMPORTED_GVARS]; ++-static Int NrImportedFuncs; +++Int NrImportedFuncs; ++ ++ char *original_argv0; ++ static char **sysargv; ++-static char **sysenviron; +++char **sysenviron; ++ ++ Obj ShellContext = 0; ++ Obj BaseShellContext = 0; ++@@ -730,11 +730,7 @@ ++ } ++ #endif ++ ++-#ifdef COMPILECYGWINDLL ++-#define main realmain ++-#endif ++- ++-int main ( +++int gap_main_loop ( ++ int argc, ++ char * argv [], ++ char * environ [] ) ++@@ -1311,6 +1307,7 @@ ++ ++ Obj FuncJUMP_TO_CATCH( Obj self, Obj payload) ++ { +++ libgap_call_error_handler(); ++ TLS(ThrownObject) = payload; ++ syLongjmp(TLS(ReadJmpError), 1); ++ return 0; ++Only in src: gap_version.h ++diff -urd upstream-gap-4.8.6/src/gasman.c src/gasman.c ++--- upstream-gap-4.8.6/src/gasman.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/gasman.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -137,6 +137,7 @@ ++ ++ #include "objects.h" /* objects */ ++ #include "scanner.h" /* scanner */ +++#include "libgap_internal.h" /* gasman callback */ ++ ++ #include "code.h" /* coder */ ++ #include "thread.h" /* threads */ ++@@ -2210,6 +2211,9 @@ ++ /* prepare the list of marked bags for the future */ ++ MarkedBags = 0; ++ +++ /* call the libgap callback so library users can mark their own bags */ +++ libgap_call_gasman_callback(); +++ ++ /* mark from the static area */ ++ for ( i = 0; i < GlobalBags.nr; i++ ) ++ MARK_BAG( *GlobalBags.addr[i] ); ++diff -urd upstream-gap-4.8.6/src/iostream.c src/iostream.c ++--- upstream-gap-4.8.6/src/iostream.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/iostream.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -48,6 +48,8 @@ ++ #include "thread.h" /* threads */ ++ #include "tls.h" /* thread-local storage */ ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <stdio.h> /* standard input/output functions */ ++ #include <stdlib.h> ++ #include <string.h> ++@@ -886,8 +888,9 @@ ++ InitHdlrFuncsFromTable( GVarFuncs ); ++ ++ /* Set up the trap to detect future dying children */ +++#ifdef LIBGAP_SIGNALS ++ signal( SIGCHLD, ChildStatusChanged ); ++- +++#endif ++ return 0; ++ } ++ ++Only in src: libgap.c ++Only in src: libgap.h ++Only in src: libgap_internal.h ++Only in src: libgap.la ++Only in src: libgap_la-ariths.lo ++Only in src: libgap_la-ariths.o ++Only in src: libgap_la-blister.lo ++Only in src: libgap_la-blister.o ++Only in src: libgap_la-bool.lo ++Only in src: libgap_la-bool.o ++Only in src: libgap_la-calls.lo ++Only in src: libgap_la-calls.o ++Only in src: libgap_la-c_filt1.lo ++Only in src: libgap_la-c_filt1.o ++Only in src: libgap_la-c_meths1.lo ++Only in src: libgap_la-c_meths1.o ++Only in src: libgap_la-code.lo ++Only in src: libgap_la-code.o ++Only in src: libgap_la-compiler.lo ++Only in src: libgap_la-compiler.o ++Only in src: libgap_la-compstat.lo ++Only in src: libgap_la-compstat.o ++Only in src: libgap_la-c_oper1.lo ++Only in src: libgap_la-c_oper1.o ++Only in src: libgap_la-costab.lo ++Only in src: libgap_la-costab.o ++Only in src: libgap_la-c_random.lo ++Only in src: libgap_la-c_random.o ++Only in src: libgap_la-c_type1.lo ++Only in src: libgap_la-c_type1.o ++Only in src: libgap_la-cyclotom.lo ++Only in src: libgap_la-cyclotom.o ++Only in src: libgap_la-dteval.lo ++Only in src: libgap_la-dteval.o ++Only in src: libgap_la-dt.lo ++Only in src: libgap_la-dt.o ++Only in src: libgap_la-exprs.lo ++Only in src: libgap_la-exprs.o ++Only in src: libgap_la-finfield.lo ++Only in src: libgap_la-finfield.o ++Only in src: libgap_la-funcs.lo ++Only in src: libgap_la-funcs.o ++Only in src: libgap_la-gap.lo ++Only in src: libgap_la-gap.o ++Only in src: libgap_la-gasman.lo ++Only in src: libgap_la-gasman.o ++Only in src: libgap_la-gmpints.lo ++Only in src: libgap_la-gmpints.o ++Only in src: libgap_la-gvars.lo ++Only in src: libgap_la-gvars.o ++Only in src: libgap_la-integer.lo ++Only in src: libgap_la-integer.o ++Only in src: libgap_la-intfuncs.lo ++Only in src: libgap_la-intfuncs.o ++Only in src: libgap_la-intrprtr.lo ++Only in src: libgap_la-intrprtr.o ++Only in src: libgap_la-iostream.lo ++Only in src: libgap_la-iostream.o ++Only in src: libgap_la-libgap.lo ++Only in src: libgap_la-libgap.o ++Only in src: libgap_la-listfunc.lo ++Only in src: libgap_la-listfunc.o ++Only in src: libgap_la-listoper.lo ++Only in src: libgap_la-listoper.o ++Only in src: libgap_la-lists.lo ++Only in src: libgap_la-lists.o ++Only in src: libgap_la-macfloat.lo ++Only in src: libgap_la-macfloat.o ++Only in src: libgap_la-objccoll.lo ++Only in src: libgap_la-objccoll.o ++Only in src: libgap_la-objcftl.lo ++Only in src: libgap_la-objcftl.o ++Only in src: libgap_la-objects.lo ++Only in src: libgap_la-objects.o ++Only in src: libgap_la-objfgelm.lo ++Only in src: libgap_la-objfgelm.o ++Only in src: libgap_la-objpcgel.lo ++Only in src: libgap_la-objpcgel.o ++Only in src: libgap_la-objscoll.lo ++Only in src: libgap_la-objscoll.o ++Only in src: libgap_la-opers.lo ++Only in src: libgap_la-opers.o ++Only in src: libgap_la-permutat.lo ++Only in src: libgap_la-permutat.o ++Only in src: libgap_la-plist.lo ++Only in src: libgap_la-plist.o ++Only in src: libgap_la-pperm.lo ++Only in src: libgap_la-pperm.o ++Only in src: libgap_la-precord.lo ++Only in src: libgap_la-precord.o ++Only in src: libgap_la-profile.lo ++Only in src: libgap_la-profile.o ++Only in src: libgap_la-range.lo ++Only in src: libgap_la-range.o ++Only in src: libgap_la-rational.lo ++Only in src: libgap_la-rational.o ++Only in src: libgap_la-read.lo ++Only in src: libgap_la-read.o ++Only in src: libgap_la-records.lo ++Only in src: libgap_la-records.o ++Only in src: libgap_la-saveload.lo ++Only in src: libgap_la-saveload.o ++Only in src: libgap_la-scanner.lo ++Only in src: libgap_la-scanner.o ++Only in src: libgap_la-sctable.lo ++Only in src: libgap_la-sctable.o ++Only in src: libgap_la-set.lo ++Only in src: libgap_la-set.o ++Only in src: libgap_la-stats.lo ++Only in src: libgap_la-stats.o ++Only in src: libgap_la-streams.lo ++Only in src: libgap_la-streams.o ++Only in src: libgap_la-string.lo ++Only in src: libgap_la-string.o ++Only in src: libgap_la-sysfiles.lo ++Only in src: libgap_la-sysfiles.o ++Only in src: libgap_la-system.lo ++Only in src: libgap_la-system.o ++Only in src: libgap_la-tietze.lo ++Only in src: libgap_la-tietze.o ++Only in src: libgap_la-trans.lo ++Only in src: libgap_la-trans.o ++Only in src: libgap_la-vars.lo ++Only in src: libgap_la-vars.o ++Only in src: libgap_la-vec8bit.lo ++Only in src: libgap_la-vec8bit.o ++Only in src: libgap_la-vecffe.lo ++Only in src: libgap_la-vecffe.o ++Only in src: libgap_la-vecgf2.lo ++Only in src: libgap_la-vecgf2.o ++Only in src: libgap_la-vector.lo ++Only in src: libgap_la-vector.o ++Only in src: libgap_la-weakptr.lo ++Only in src: libgap_la-weakptr.o ++Only in src: libgap.map ++Only in src: .libs ++diff -urd upstream-gap-4.8.6/src/lists.c src/lists.c ++--- upstream-gap-4.8.6/src/lists.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/lists.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -1976,7 +1976,7 @@ ++ } ++ if ( LEN_LIST( poss ) != LEN_LIST( obj ) ) { ++ obj = ErrorReturnObj( ++- "List Assigments: <objs> must have the same length as <positions> (%d)", +++ "List Assignments: <objs> must have the same length as <positions> (%d)", ++ LEN_LIST( poss ), 0L, ++ "you can replace <objs> via 'return <objs>;'" ); ++ } ++Only in src: Makefile ++Only in src: Makefile.am ++Only in src: Makefile.in ++diff -urd upstream-gap-4.8.6/src/objscoll.c src/objscoll.c ++--- upstream-gap-4.8.6/src/objscoll.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/objscoll.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -103,7 +103,7 @@ ++ #define SingleCollectWord C8Bits_SingleCollectWord ++ #define Solution C8Bits_Solution ++ #define UIntN UInt1 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++@@ -125,7 +125,7 @@ ++ #define SingleCollectWord C16Bits_SingleCollectWord ++ #define Solution C16Bits_Solution ++ #define UIntN UInt2 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++@@ -147,7 +147,7 @@ ++ #define SingleCollectWord C32Bits_SingleCollectWord ++ #define Solution C32Bits_Solution ++ #define UIntN UInt4 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++diff -urd upstream-gap-4.8.6/src/saveload.c src/saveload.c ++--- upstream-gap-4.8.6/src/saveload.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/saveload.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -924,7 +924,7 @@ ++ if ((x & 3) == 1) ++ Pr("Immediate integer %d\n", INT_INTOBJ((Obj)x),0L); ++ else if ((x & 3) == 2) ++- Pr("Immedate FFE %d %d\n", VAL_FFE(x), SIZE_FF(FLD_FFE(x))); +++ Pr("Immediate FFE %d %d\n", VAL_FFE(x), SIZE_FF(FLD_FFE(x))); ++ else ++ Pr("Reference to bag number %d\n",x>>2,0L); ++ } ++diff -urd upstream-gap-4.8.6/src/scanner.c src/scanner.c ++--- upstream-gap-4.8.6/src/scanner.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/scanner.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -64,6 +64,8 @@ ++ #include "tls.h" ++ #include "thread.h" ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <assert.h> ++ #include <limits.h> ++ #include <stdlib.h> ++@@ -2453,150 +2455,25 @@ ++ KOutputStream stream, ++ Char ch ) ++ { ++- Int i, hint, spos; ++- Char str [MAXLENOUTPUTLINE]; ++- ++- ++- /* '\01', increment indentation level */ ++- if ( ch == '\01' ) { ++- ++- if (!stream->format) ++- return; ++- ++- /* add hint to break line */ ++- addLineBreakHint(stream, stream->pos, 16*stream->indent, 1); ++- } ++- ++- /* '\02', decrement indentation level */ ++- else if ( ch == '\02' ) { ++- ++- if (!stream -> format) ++- return; ++- ++- /* if this is a better place to split the line remember it */ ++- addLineBreakHint(stream, stream->pos, 16*stream->indent, -1); ++- } ++- ++- /* '\03', print line */ ++- else if ( ch == '\03' ) { ++- ++- /* print the line */ ++- if (stream->pos != 0) ++- { ++- stream->line[ stream->pos ] = '\0'; ++- PutLineTo(stream, stream->pos ); ++- ++- /* start the next line */ ++- stream->pos = 0; ++- } ++- /* reset line break hints */ ++- stream->hints[0] = -1; ++- ++- } ++- ++- /* <newline> or <return>, print line, indent next */ ++- else if ( ch == '\n' || ch == '\r' ) { ++- ++- /* put the character on the line and terminate it */ ++- stream->line[ stream->pos++ ] = ch; ++- stream->line[ stream->pos ] = '\0'; ++- ++- /* print the line */ ++- PutLineTo( stream, stream->pos ); ++- ++- /* and dump it from the buffer */ ++- stream->pos = 0; ++- if (stream -> format) ++- { ++- /* indent for next line */ ++- for ( i = 0; i < stream->indent; i++ ) ++- stream->line[ stream->pos++ ] = ' '; ++- } ++- /* reset line break hints */ ++- stream->hints[0] = -1; ++- ++- } ++- ++- /* normal character, room on the current line */ ++- else if ( stream->pos < SyNrCols-2-TLS(NoSplitLine) ) { ++- ++- /* put the character on this line */ ++- stream->line[ stream->pos++ ] = ch; ++- ++- } ++- ++- else ++- { ++- /* position to split */ ++- if ( (hint = nrLineBreak(stream)) != -1 ) ++- spos = stream->hints[3*hint]; ++- else ++- spos = 0; ++- ++- /* if we are going to split at the end of the line, and we are ++- formatting discard blanks */ ++- if ( stream->format && spos == stream->pos && ch == ' ' ) { ++- ; ++- } ++- ++- /* full line, acceptable split position */ ++- else if ( stream->format && spos != 0 ) { ++- ++- /* add character to the line, terminate it */ ++- stream->line[ stream->pos++ ] = ch; ++- stream->line[ stream->pos++ ] = '\0'; ++- ++- /* copy the rest after the best split position to a safe place */ ++- for ( i = spos; i < stream->pos; i++ ) ++- str[ i-spos ] = stream->line[ i ]; ++- str[ i-spos] = '\0'; ++- ++- /* print line up to the best split position */ ++- stream->line[ spos++ ] = '\n'; ++- stream->line[ spos ] = '\0'; ++- PutLineTo( stream, spos ); ++- spos--; ++- ++- /* indent for the rest */ ++- stream->pos = 0; ++- for ( i = 0; i < stream->hints[3*hint+2]; i++ ) ++- stream->line[ stream->pos++ ] = ' '; ++- spos -= stream->hints[3*hint+2]; ++- ++- /* copy the rest onto the next line */ ++- for ( i = 0; str[ i ] != '\0'; i++ ) ++- stream->line[ stream->pos++ ] = str[ i ]; ++- /* recover line break hints for copied rest */ ++- for ( i = hint+1; stream->hints[3*i] != -1; i++ ) ++- { ++- stream->hints[3*(i-hint-1)] = stream->hints[3*i]-spos; ++- stream->hints[3*(i-hint-1)+1] = stream->hints[3*i+1]; ++- stream->hints[3*(i-hint-1)+2] = stream->hints[3*i+2]; ++- } ++- stream->hints[3*(i-hint-1)] = -1; ++- } ++- ++- /* full line, no split position */ ++- else { ++- ++- if (stream->format) ++- { ++- /* append a '\',*/ ++- stream->line[ stream->pos++ ] = '\\'; ++- stream->line[ stream->pos++ ] = '\n'; ++- } ++- /* and print the line */ ++- stream->line[ stream->pos ] = '\0'; ++- PutLineTo( stream, stream->pos ); ++- ++- /* add the character to the next line */ ++- stream->pos = 0; ++- stream->line[ stream->pos++ ] = ch; ++- ++- if (stream->format) ++- stream->hints[0] = -1; ++- } ++- +++ // printf("PutChrTo %i %i %c %hhx\n", stream->file, stream->isstream, ch, ch); +++ if (ch <= 3) // GAP control characters +++ return; +++ // Magic constants are defined in SyFopen +++ if (stream->file == 0) { // negative number indicates an error +++ assert(False); +++ } else if (stream->file == 0) { // 0 identifies the standard input file "*stdin*" +++ assert(False); +++ } else if (stream->file == 1) { // 1 identifies the standard outpt file "*stdout*" +++ libgap_append_stdout(ch); +++ } else if (stream->file == 2) { // 2 identifies the brk loop input file "*errin*" +++ assert(False); +++ } else if (stream->file == 3) { // 3 identifies the error messages file "*errout*" +++ libgap_append_stderr(ch); +++ } else { // anything else is a real file descriptor +++ stream->line[stream->pos++] = ch; +++ stream->line[stream->pos++] = '\0'; +++ PutLineTo(stream, stream->pos); +++ stream->pos = 0; ++ } ++ } ++ ++Only in src: stamp-h1 ++diff -urd upstream-gap-4.8.6/src/sysfiles.c src/sysfiles.c ++--- upstream-gap-4.8.6/src/sysfiles.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/sysfiles.c 2016-11-25 13:39:29.115511430 +0100 ++@@ -42,6 +42,8 @@ ++ #include "thread.h" /* threads */ ++ #include "tls.h" /* thread-local storage */ ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <assert.h> ++ #include <fcntl.h> ++ ++@@ -1135,16 +1137,20 @@ ++ ++ void syAnswerCont ( int signr ) ++ { +++#ifdef LIBGAP_SIGNALS ++ syStartraw( syFid ); ++ signal( SIGCONT, SIG_DFL ); ++ kill( getpid(), SIGCONT ); +++#endif ++ } ++ ++ void syAnswerTstp ( int signr ) ++ { +++#ifdef LIBGAP_SIGNALS ++ syStopraw( syFid ); ++ signal( SIGCONT, syAnswerCont ); ++ kill( getpid(), SIGTSTP ); +++#endif ++ } ++ ++ #endif ++@@ -1217,12 +1223,13 @@ ++ ++ #endif ++ ++- +++#ifdef LIBGAP_SIGNALS ++ #ifdef SIGTSTP ++ /* install signal handler for stop */ ++ syFid = fid; ++ signal( SIGTSTP, syAnswerTstp ); ++ #endif +++#endif ++ ++ /* indicate success */ ++ return 1; ++@@ -1245,10 +1252,12 @@ ++ if ( SyWindow ) ++ return; ++ +++#ifdef LIBGAP_SIGNALS ++ #ifdef SIGTSTP ++ /* remove signal handler for stop */ ++ signal( SIGTSTP, SIG_DFL ); ++ #endif +++#endif ++ ++ #if HAVE_TERMIOS_H ++ ++@@ -1342,11 +1351,13 @@ ++ ++ void SyInstallAnswerIntr ( void ) ++ { +++#ifdef LIBGAP_SIGNALS ++ if ( signal( SIGINT, SIG_IGN ) != SIG_IGN ) ++ { ++ signal( SIGINT, syAnswerIntr ); ++ siginterrupt( SIGINT, 0 ); ++ } +++#endif ++ } ++ ++ ++@@ -1625,7 +1636,9 @@ ++ if (CO <= 0) ++ CO = win.ws_col; ++ } +++#ifdef LIBGAP_SIGNALS ++ (void) signal(SIGWINCH, syWindowChangeIntr); +++#endif ++ } ++ #endif /* TIOCGWINSZ */ ++ ++@@ -3256,7 +3269,13 @@ ++ UInt length, ++ Int fid) ++ { ++- return syFgets( line, length, fid, 1); +++ if(fid!=0 && fid!=2) { +++ // not stdin/stderr; probably file IO. Do the standard thing. +++ // printf("SyFgets fid=%i\n", fid); +++ return syFgets( line, length, fid, 1); +++ } +++ return libgap_get_input(line, length); +++ // return syFgets( line, length, fid, 1); ++ } ++ ++ ++@@ -3380,7 +3399,7 @@ ++ # endif ++ #endif ++ ++-extern char ** environ; +++#include "libgap_internal.h" ++ ++ void NullSignalHandler(int scratch) {} ++ ++@@ -3495,6 +3514,7 @@ ++ `After that, we call the old signal handler, in case any other children have died in the ++ meantime. This resets the handler */ ++ +++#ifdef LIBGAP_SIGNALS ++ func2 = signal( SIGCHLD, SIG_DFL ); ++ ++ /* This may return SIG_DFL (0x0) or SIG_IGN (0x1) if the previous handler ++@@ -3503,6 +3523,7 @@ ++ * is to do nothing */ ++ if(func2 == SIG_ERR || func2 == SIG_DFL || func2 == SIG_IGN) ++ func2 = &NullSignalHandler; +++#endif ++ ++ /* clone the process */ ++ pid = vfork(); ++@@ -3514,8 +3535,9 @@ ++ if ( pid != 0 ) { ++ ++ /* ignore a CTRL-C */ +++#ifdef LIBGAP_SIGNALS ++ func = signal( SIGINT, SIG_IGN ); ++- +++#endif ++ /* wait for some action */ ++ #if HAVE_WAITPID ++ wait_pid = waitpid( pid, &status, 0 ); ++@@ -3523,18 +3545,24 @@ ++ wait_pid = wait4( pid, &status, 0, &usage ); ++ #endif ++ if ( wait_pid == -1 ) { +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return -1; ++ } ++ ++ if ( WIFSIGNALED(status) ) { +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return -1; ++ } +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return WEXITSTATUS(status); ++ } ++ ++Only in src: sysfiles.c.orig +diff --git a/src/Makefile.in b/src/Makefile.in +index 3ccedf9..13263fe 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -90,13 +90,14 @@ POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ + target_triplet = @target@ +-@NEED_ITANIUMOBJ_TRUE@am__append_1 = itanium.s ++@HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(top_srcdir)/src/libgap.map ++@NEED_ITANIUMOBJ_TRUE@am__append_2 = itanium.s + subdir = src + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(libgapinclude_HEADERS) \ +@@ -290,6 +291,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +@@ -379,6 +381,8 @@ top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + DEFAULT_INCLUDES = -I@top_builddir@ + lib_LTLIBRARIES = libgap.la ++libgap_la_LT_INFO = -version-info @LIBGAP_LT_VERSION@ ++libgap_la_LD_VERSION_SCRIPT = $(am__append_1) + libgap_la_SOURCES = ariths.c c_random.c gmpints.c objccoll.c \ + rational.c system.c blister.c c_type1.c gvars.c objcftl.c \ + read.c tietze.c bool.c cyclotom.c integer.c objects.c \ +@@ -389,7 +393,7 @@ libgap_la_SOURCES = ariths.c c_random.c gmpints.c objccoll.c \ + compiler.c funcs.c listfunc.c permutat.c stats.c weakptr.c \ + compstat.c gap.c listoper.c plist.c streams.c c_oper1.c \ + lists.c precord.c string.c costab.c gasman.c macfloat.c \ +- range.c sysfiles.c pperm.c trans.c profile.c $(am__append_1) ++ range.c sysfiles.c pperm.c trans.c profile.c $(am__append_2) + libgapincludedir = @includedir@/gap + libgapinclude_HEADERS = \ + ariths.h cyclotom.h integer.h objcftl.h rational.h sysfiles.h \ +@@ -413,7 +417,7 @@ libgap_la_CFLAGS = $(AM_CFLAGS) \ + + + # the no-undefined is necessary for Cygwin +-libgap_la_LDFLAGS = -lm @GMP_LIBS@ -no-undefined ++libgap_la_LDFLAGS = $(libgap_la_LT_INFO) $(libgap_la_LD_VERSION_SCRIPT) @GMP_LIBS@ -lm -no-undefined + all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +diff --git a/src/bool.c b/src/bool.c +index 1fa9d5a..5d64437 100644 +--- a/src/bool.c ++++ b/src/bool.c +@@ -373,7 +373,7 @@ static Int InitKernel ( + StructInitInfo * module ) + { + /* install the marking functions for boolean values */ +- InfoBags[ T_BOOL ].name = "boolean"; ++ InfoBags[ T_BOOL ].name = "boolean or fail"; + InitMarkFuncBags( T_BOOL, MarkNoSubBags ); + + /* init filters and functions */ +diff --git a/src/code.c b/src/code.c +index 6bcdf21..e0e2e8f 100644 +--- a/src/code.c ++++ b/src/code.c +@@ -135,8 +135,33 @@ Obj FILENAME_STAT(Stat stat) + filename = ELM_PLIST(FilenameCache, filenameid); + return filename; + } +- +- ++ ++ ++/**************************************************************************** ++** ++** Fill in filename and line of a statement, checking we do not overflow ++** the space we have for storing information ++*/ ++Stat fillFilenameLine(Int fileid, Int line, Int size, Int type) ++{ ++ Stat stat; ++ if(fileid < 0 || fileid >= (1 << 16)) ++ { ++ fileid = (1 << 16) - 1; ++ RegisterProfilingFileOverflowOccured(); ++ } ++ if(line < 0 || line >= (1 << 16)) ++ { ++ line = (1 << 16) - 1; ++ RegisterProfilingLineOverflowOccured(); ++ } ++ ++ stat = ((Stat)fileid << 48) + ((Stat)line << 32) + ++ ((Stat)size << 8) + (Stat)type; ++ ++ return stat; ++} ++ + /**************************************************************************** + ** + *F NewStat( <type>, <size> ) . . . . . . . . . . . allocate a new statement +@@ -173,8 +198,7 @@ Stat NewStatWithLine ( + setup_gapname(TLS(Input)); + + /* enter type and size */ +- ADDR_STAT(stat)[-1] = ((Stat)TLS(Input)->gapnameid << 48) + ((Stat)line << 32) + +- ((Stat)size << 8) + (Stat)type; ++ ADDR_STAT(stat)[-1] = fillFilenameLine(TLS(Input)->gapnameid, line, size, type); + RegisterStatWithProfiling(stat); + /* return the new statement */ + return stat; +@@ -218,9 +242,8 @@ Expr NewExpr ( + } + + /* enter type and size */ +- ADDR_EXPR(expr)[-1] = ((Stat)TLS(Input)->gapnameid << 48) + +- ((Stat)TLS(Input)->number << 32) + +- ((Stat)size << 8) + type; ++ ADDR_EXPR(expr)[-1] = fillFilenameLine(TLS(Input)->gapnameid, ++ TLS(Input)->number, size, type); + RegisterStatWithProfiling(expr); + /* return the new expression */ + return expr; +@@ -3510,6 +3533,3 @@ StructInitInfo * InitInfoCode ( void ) + + *E code.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here + */ +- +- +- +diff --git a/src/gap.c b/src/gap.c +index 58528c9..68b5eff 100644 +--- a/src/gap.c ++++ b/src/gap.c +@@ -3091,6 +3091,7 @@ static Int PostRestore ( + Last2 = GVarName( "last2" ); + Last3 = GVarName( "last3" ); + Time = GVarName( "time" ); ++ AssGVar(Time, INTOBJ_INT(0)); + QUITTINGGVar = GVarName( "QUITTING" ); + + /* return success */ +diff --git a/src/intfuncs.c b/src/intfuncs.c +index 51a542b..1614c3c 100644 +--- a/src/intfuncs.c ++++ b/src/intfuncs.c +@@ -202,36 +202,6 @@ UInt4 nextrandMT_int32(UInt4* mt) + return y; + } + +- +-Obj FuncRandomListMT(Obj self, Obj mtstr, Obj list) +-{ +- Int len, a, lg; +- UInt4 *mt; +- while ((! IsStringConv(mtstr)) || GET_LEN_STRING(mtstr) < 2500) { +- mtstr = ErrorReturnObj( +- "<mtstr> must be a string with at least 2500 characters, ", +- 0L, 0L, +- "you can replace <mtstr> via 'return <mtstr>;'" ); +- } +- while (! IS_LIST(list)) { +- list = ErrorReturnObj( +- "<list> must be a list, not a %s", +- (Int)TNAM_OBJ(list), 0L, +- "you can replace <list> via 'return <list>;'" ); +- } +- len = LEN_LIST(list); +- if (len == 0) return Fail; +- mt = (UInt4*) CHARS_STRING(mtstr); +- lg = 31 - CLog2Int(len); +- for (a = nextrandMT_int32(mt) >> lg; +- a >= len; +- a = nextrandMT_int32(mt) >> lg +- ); +- return ELM_LIST(list, a+1); +-} +- +- +- + /**************************************************************************** + ** + *F FuncHASHKEY_BAG(<self>,<obj>,<seed>,<offset>,<maxlen>) +@@ -678,9 +648,6 @@ static StructGVarFunc GVarFuncs [] = { + { "InitRandomMT", 1, "initstr", + FuncInitRandomMT, "src/integer.c:InitRandomMT" }, + +- { "RandomListMT", 2, "mtstr, list", +- FuncRandomListMT, "src/integer.c:RandomListMT" }, +- + { 0 } + + }; +diff --git a/src/listfunc.c b/src/listfunc.c +index 7d04525..4b92f01 100644 +--- a/src/listfunc.c ++++ b/src/listfunc.c +@@ -232,8 +232,10 @@ Obj RemPlist ( + } + removed = ELM_PLIST(list, pos); + SET_ELM_PLIST(list, pos, (Obj)0L); +- SET_LEN_PLIST(list, pos-1); +- if ( pos == 1 ) { ++ pos--; ++ while ( 1 <= pos && ELM_PLIST( list, pos ) == 0 ) { pos--; } ++ SET_LEN_PLIST(list, pos); ++ if ( pos == 0 ) { + RetypeBag(list, T_PLIST_EMPTY); + } + if (4*pos*sizeof(Obj) < 3*SIZE_BAG(list)) +@@ -302,6 +304,7 @@ Obj FuncAPPEND_LIST_INTR ( + len2 = GET_LEN_STRING(list2); + GROW_STRING(list1, len1 + len2); + SET_LEN_STRING(list1, len1 + len2); ++ CLEAR_FILTS_LIST(list1); + memmove( (void *)(CHARS_STRING(list1) + len1), + (void *)CHARS_STRING(list2), len2 + 1); + /* ensure trailing zero */ +diff --git a/src/pperm.c b/src/pperm.c +index 5965767..45a536b 100644 +--- a/src/pperm.c ++++ b/src/pperm.c +@@ -2246,7 +2246,7 @@ Obj PrintPPerm4(Obj self, Obj f){ + + deg=DEG_PPERM4(f); + if(deg==0) Pr("<empty partial perm>", 0L, 0L); +- n=MAX(deg, CODEG_PPERM2(f)); ++ n=MAX(deg, CODEG_PPERM4(f)); + ResizeTmpPPerm(n); + ptseen=(UInt4*)(ADDR_OBJ(TmpPPerm)); + for(i=0;i<n;i++) ptseen[i]=0; +@@ -4451,7 +4451,7 @@ Obj QuoPPerm22(Obj f, Obj g){ + } + } + } +- CODEG_PPERM2(quo)=codeg; ++ CODEG_PPERM4(quo)=codeg; + return quo; + } + +diff --git a/src/profile.c b/src/profile.c +index 6e5d22e..c2f82d3 100644 +--- a/src/profile.c ++++ b/src/profile.c +@@ -509,6 +509,73 @@ Obj ProfileEvalBoolPassthrough(Expr stat) + } + + ++/**************************************************************************** ++** ++** This functions check if we overflow either 2^16 lines, or files. ++** In this case profiling will "give up". We print a warning to tell users ++** that this happens. ++**/ ++ ++Int HaveReportedLineProfileOverflow; ++Int ShouldReportLineProfileOverflow; ++ ++Int HaveReportedFileProfileOverflow; ++Int ShouldReportFileProfileOverflow; ++ ++// This function only exists to allow testing of these overflow checks ++Obj FuncCLEAR_PROFILE_OVERFLOW_CHECKS(Obj self) { ++ HaveReportedLineProfileOverflow = 0; ++ ShouldReportLineProfileOverflow = 0; ++ ++ HaveReportedFileProfileOverflow = 0; ++ ShouldReportFileProfileOverflow = 0; ++ ++ return 0; ++} ++ ++void CheckPrintOverflowWarnings() { ++ if(!HaveReportedLineProfileOverflow && ShouldReportLineProfileOverflow) ++ { ++ HaveReportedLineProfileOverflow = 1; ++ Pr("#I Profiling only works on the first 65,535 lines of each file\n" ++ "#I (this warning will only appear once).\n", ++ 0L, 0L); ++ } ++ ++ if(!HaveReportedFileProfileOverflow && ShouldReportFileProfileOverflow) ++ { ++ HaveReportedFileProfileOverflow = 1; ++ Pr("#I Profiling only works for the first 65,535 read files\n" ++ "#I (this warning will only appear once).\n", ++ 0L, 0L ); ++ } ++} ++ ++void RegisterProfilingLineOverflowOccured() ++{ ++ Int active; ++ HashLock(&profileState); ++ active = profileState_Active; ++ HashUnlock(&profileState); ++ ShouldReportLineProfileOverflow = 1; ++ if(active) ++ { ++ CheckPrintOverflowWarnings(); ++ } ++} ++ ++void RegisterProfilingFileOverflowOccured() ++{ ++ Int active; ++ HashLock(&profileState); ++ active = profileState_Active; ++ HashUnlock(&profileState); ++ ShouldReportFileProfileOverflow = 1; ++ if(active) ++ { ++ CheckPrintOverflowWarnings(); ++ } ++} + + /**************************************************************************** + ** +@@ -603,7 +670,7 @@ Obj FuncACTIVATE_PROFILING ( + if(profileState_Active) { + return Fail; + } +- ++ + if(profileState.profiledPreviously && + coverage == True) { + ErrorMayQuit("Code coverage can only be started once per" +@@ -611,6 +678,8 @@ Obj FuncACTIVATE_PROFILING ( + return Fail; + } + ++ CheckPrintOverflowWarnings(); ++ + OutputtedFilenameList = NEW_PLIST(T_PLIST, 0); + + if ( ! IsStringConv( filename ) ) { +@@ -897,6 +966,8 @@ void RegisterStatWithProfiling(Stat stat) + } + + ++ ++ + /**************************************************************************** + ** + +@@ -913,6 +984,8 @@ static StructGVarFunc GVarFuncs [] = { + FuncACTIVATE_PROFILING, "src/profile.c:ACTIVATE_PROFILING" }, + { "DEACTIVATE_PROFILING", 0, "", + FuncDEACTIVATE_PROFILING, "src/profile.c:DEACTIVATE_PROFILING" }, ++ { "CLEAR_PROFILE_OVERFLOW_CHECKS", 0, "", ++ FuncCLEAR_PROFILE_OVERFLOW_CHECKS, "src/profile.c:CLEAR_PROFILE_OVERFLOW_CHECKS" }, + { "IsLineByLineProfileActive", 0, "", + FuncIS_PROFILE_ACTIVE, "src/profile.c:IsLineByLineProfileActive" }, + { "ACTIVATE_COLOR_PROFILING", 1, "bool", +diff --git a/src/profile.h b/src/profile.h +index d6f4fa7..27bbd6f 100644 +--- a/src/profile.h ++++ b/src/profile.h +@@ -28,7 +28,8 @@ + StructInitInfo * InitInfoProfile ( void ); + + void RegisterStatWithProfiling(Stat); +- ++void RegisterProfilingLineOverflowOccured(); ++void RegisterProfilingFileOverflowOccured(); + + void InstallEvalBoolFunc( Int, Obj(*)(Expr)); + void InstallEvalExprFunc( Int, Obj(*)(Expr)); +diff --git a/src/read.c b/src/read.c +index f69d149..a8f6601 100644 +--- a/src/read.c ++++ b/src/read.c +@@ -551,13 +551,19 @@ void ReadCallVarAss ( + } + } + ++#ifdef HPCGAP ++#define ASSIGN_ERROR_MESSAGE ":= or ::=" ++#else ++#define ASSIGN_ERROR_MESSAGE ":=" ++#endif ++ + /* if we need a statement */ + else if ( mode == 's' || (mode == 'x' && IS_IN(TLS(Symbol), S_ASSIGN)) ) { + if ( type != 'c' && type != 'C') { + if (TLS(Symbol) != S_ASSIGN) +- Match( S_INCORPORATE, ":= or ::=", follow); ++ Match( S_INCORPORATE, ASSIGN_ERROR_MESSAGE, follow); + else +- Match( S_ASSIGN, ":= or ::=", follow ); ++ Match( S_ASSIGN, ASSIGN_ERROR_MESSAGE, follow ); + if ( TLS(CountNams) == 0 || !TLS(IntrCoding) ) { TLS(CurrLHSGVar) = (type == 'g' ? var : 0); } + ReadExpr( follow, 'r' ); + } +diff --git a/src/streams.c b/src/streams.c +index 7738672..93fbe07 100644 +--- a/src/streams.c ++++ b/src/streams.c +@@ -1947,25 +1947,30 @@ Obj FuncWRITE_STRING_FILE_NC ( + Obj fid, + Obj str ) + { +- Int len = 0, ret; ++ Int len = 0, l, ret; ++ char *ptr; + + /* don't check the argument */ + + len = GET_LEN_STRING(str); +- ret = write( syBuf[INT_INTOBJ(fid)].echo, CHARS_STRING(str), len); +- return (ret == len)?True : Fail; ++ ptr = CSTR_STRING(str); ++ while (len > 0) { ++ l = (len > 1048576) ? 1048576 : len; ++ ret = write( syBuf[INT_INTOBJ(fid)].echo, ptr, l); ++ if (ret == -1) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len -= ret; ++ ptr += ret; ++ } ++ return True; + } + +- + Obj FuncREAD_STRING_FILE ( + Obj self, + Obj fid ) + { +- Char buf[20001]; +- Int ret, len; +- UInt lstr; +- Obj str; +- + /* check the argument */ + while ( ! IS_INTOBJ(fid) ) { + fid = ErrorReturnObj( +@@ -1973,56 +1978,7 @@ Obj FuncREAD_STRING_FILE ( + (Int)TNAM_OBJ(fid), 0L, + "you can replace <fid> via 'return <fid>;'" ); + } +- +-#if ! SYS_IS_CYGWIN32 +- /* fstat seems completely broken under CYGWIN */ +-#if HAVE_STAT +- /* first try to get the whole file as one chunk, this avoids garbage +- collections because of the GROW_STRING calls below */ +- { +- struct stat fstatbuf; +- if ( syBuf[INT_INTOBJ(fid)].pipe == 0 && +- fstat( syBuf[INT_INTOBJ(fid)].fp, &fstatbuf) == 0 ) { +- if((off_t)(Int)fstatbuf.st_size != fstatbuf.st_size) { +- ErrorMayQuit( +- "The file is too big to fit the current workspace", +- (Int)0, (Int)0); +- } +- len = (Int) fstatbuf.st_size; +- str = NEW_STRING( len ); +- ret = read( syBuf[INT_INTOBJ(fid)].fp, +- CHARS_STRING(str), len); +- CHARS_STRING(str)[ret] = '\0'; +- SET_LEN_STRING(str, ret); +- if ( (off_t) ret == fstatbuf.st_size ) { +- return str; +- } +- } +- } +-#endif +-#endif +- /* read <fid> until we see eof (in 20kB pieces) */ +- str = NEW_STRING(0); +- len = 0; +- while (1) { +- if ( (ret = read( syBuf[INT_INTOBJ(fid)].fp , buf, 20000)) <= 0 ) +- break; +- len += ret; +- GROW_STRING( str, len ); +- lstr = GET_LEN_STRING(str); +- memcpy( CHARS_STRING(str)+lstr, buf, ret ); +- *(CHARS_STRING(str)+lstr+ret) = '\0'; +- SET_LEN_STRING(str, lstr+ret); +- } +- +- /* fix the length of <str> */ +- len = GET_LEN_STRING(str); +- ResizeBag( str, SIZEBAG_STRINGLEN(len) ); +- +- /* and return */ +- +- syBuf[INT_INTOBJ(fid)].ateof = 1; +- return len == 0 ? Fail : str; ++ return SyReadStringFid(INT_INTOBJ(fid)); + } + + /**************************************************************************** +diff --git a/src/sysfiles.c b/src/sysfiles.c +index 99e7974..fd46d1a 100644 +--- a/src/sysfiles.c ++++ b/src/sysfiles.c +@@ -1424,9 +1424,6 @@ static void syAnswerAlarm ( int signr, siginfo_t * si, void *context) + Later we might want to do something cleverer with throwing an + exception or dealing better if this isn't our timer */ + assert( signr == TIMER_SIGNAL); +- assert( si->si_signo == TIMER_SIGNAL); +- assert( si->si_code == SI_TIMER); +- assert( si->si_value.sival_int == 0x12345678 ); + SyAlarmRunning = 0; + SyAlarmHasGoneOff = 1; + InterruptExecStat(); +@@ -4055,6 +4052,96 @@ Char * SyTmpdir ( const Char * hint ) + #endif + #endif + ++Obj SyReadStringFile(Int fid) ++{ ++ Char buf[32769]; ++ Int ret, len; ++ UInt lstr; ++ Obj str; ++ ++ /* read <fid> until we see eof (in 32kB pieces) */ ++ str = NEW_STRING(0); ++ len = 0; ++ do { ++ ret = read( syBuf[fid].fp , buf, 32768); ++ if (ret < 0) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len += ret; ++ GROW_STRING( str, len ); ++ lstr = GET_LEN_STRING(str); ++ memcpy( CHARS_STRING(str)+lstr, buf, ret ); ++ *(CHARS_STRING(str)+lstr+ret) = '\0'; ++ SET_LEN_STRING(str, lstr+ret); ++ } while(ret > 0); ++ ++ /* fix the length of <str> */ ++ len = GET_LEN_STRING(str); ++ ResizeBag( str, SIZEBAG_STRINGLEN(len) ); ++ ++ syBuf[fid].ateof = 1; ++ return str; ++} ++ ++#if !defined(SYS_IS_CYGWIN32) && defined(HAVE_STAT) ++/* fstat seems completely broken under CYGWIN */ ++/* first try to get the whole file as one chunk, this avoids garbage ++ collections because of the GROW_STRING calls below */ ++Obj SyReadStringFileStat(Int fid) ++{ ++ Int ret, len; ++ Obj str; ++ Int l; ++ char *ptr; ++ struct stat fstatbuf; ++ ++ if( fstat( syBuf[fid].fp, &fstatbuf) == 0 ) { ++ if((off_t)(Int)fstatbuf.st_size != fstatbuf.st_size) { ++ ErrorMayQuit( ++ "The file is too big to fit the current workspace", ++ (Int)0, (Int)0); ++ } ++ len = (Int) fstatbuf.st_size; ++ str = NEW_STRING( len ); ++ CHARS_STRING(str)[len] = '\0'; ++ SET_LEN_STRING(str, len); ++ ptr = CSTR_STRING(str); ++ while (len > 0) { ++ l = (len > 1048576) ? 1048576 : len; ++ ret = read( syBuf[fid].fp, ptr, l); ++ if (ret == -1) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len -= ret; ++ ptr += ret; ++ } ++ syBuf[fid].ateof = 1; ++ return str; ++ } else { ++ SySetErrorNo(); ++ return Fail; ++ } ++} ++ ++Obj SyReadStringFid(Int fid) ++{ ++ if(syBuf[fid].pipe == 1) { ++ return SyReadStringFile(fid); ++ } else { ++ return SyReadStringFileStat(fid); ++ } ++} ++ ++#else ++ ++Obj SyReadStringFid(Int fid) { ++ return SyReadStringFile(fid); ++} ++ ++#endif ++ + + + /**************************************************************************** +diff --git a/src/sysfiles.h b/src/sysfiles.h +index 497acca..dbf6b19 100644 +--- a/src/sysfiles.h ++++ b/src/sysfiles.h +@@ -630,8 +630,21 @@ extern void syWinPut ( + const Char * cmd, + const Char * str ); + ++/*************************************************************************** ++ ** ++ *F SyReadStringFid( <fid> ) ++ ** - read file given by <fid> into a string ++ *F SyReadStringFile( <fid> ) ++ ** - read file given by <fid> into a string, only rely on read() ++ *F SyReadStringFileStat( <fid> ) ++ ** - read file given by <fid> into a string, use stat() to determine ++ ** size of file before reading. This does not work for pipes ++ */ ++ ++extern Obj SyReadStringFid(Int fid); ++extern Obj SyReadStringFile(Int fid); ++extern Obj SyReadStringFileGeneric(Int fid); + +- + /**************************************************************************** + ** + +diff --git a/src/system.c b/src/system.c +index 8548293..e34b898 100644 +--- a/src/system.c ++++ b/src/system.c +@@ -78,10 +78,10 @@ Int enableCodeCoverageAtStartup( Char **argv, void * dummy); + /**************************************************************************** + ** + *V SyKernelVersion . . . . . . . . . . . . . . . hard coded kernel version +-** do not edit the following line. Occurences of `4.8.3' and `today' ++** do not edit the following line. Occurences of `4.8.6' and `today' + ** will be replaced by string matching by distribution wrapping scripts. + */ +-const Char * SyKernelVersion = "4.8.3"; ++const Char * SyKernelVersion = "4.8.6"; + + /**************************************************************************** + ** +diff --git a/src/trans.c b/src/trans.c +index f7ec508..8699166 100644 +--- a/src/trans.c ++++ b/src/trans.c +@@ -421,7 +421,7 @@ Obj FuncRANK_TRANS_LIST(Obj self, Obj f, Obj list){ + rank=0; + for(i=1;i<=len;i++){ + pt=ELM_LIST(list, i); +- if(!TNUM_OBJ(pt)==T_INT||INT_INTOBJ(pt)<1){ ++ if(TNUM_OBJ(pt)!=T_INT||INT_INTOBJ(pt)<1){ + ErrorQuit("usage: the second argument <list> must be a list of positive\n integers (not a %s)", (Int)TNAM_OBJ(pt), 0L); + } + j=INT_INTOBJ(pt)-1; +@@ -439,7 +439,7 @@ Obj FuncRANK_TRANS_LIST(Obj self, Obj f, Obj list){ + rank=0; + for(i=1;i<=len;i++){ + pt=ELM_LIST(list, i); +- if(!TNUM_OBJ(pt)==T_INT||INT_INTOBJ(pt)<1){ ++ if(TNUM_OBJ(pt)!=T_INT||INT_INTOBJ(pt)<1){ + ErrorQuit("usage: the second argument <list> must be a list of positive\n integers (not a %s)", (Int)TNAM_OBJ(pt), 0L); + } + j=INT_INTOBJ(pt)-1; +diff --git a/test/Makefile.in b/test/Makefile.in +index 013b127..6de463f 100644 +--- a/test/Makefile.in ++++ b/test/Makefile.in +@@ -92,10 +92,10 @@ TESTS = test$(EXEEXT) shell$(EXEEXT) error_handler$(EXEEXT) + check_PROGRAMS = test$(EXEEXT) shell$(EXEEXT) error_handler$(EXEEXT) + subdir = test + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +@@ -430,6 +430,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +-- +2.7.4.1.g5468f9e + Copied: libgap/repos/community-staging-x86_64/PKGBUILD (from rev 196869, libgap/trunk/PKGBUILD) =================================================================== --- community-staging-x86_64/PKGBUILD (rev 0) +++ community-staging-x86_64/PKGBUILD 2016-11-25 19:11:54 UTC (rev 196870) @@ -0,0 +1,37 @@ +# $Id$ +# Maintainer: Antonio Rojas <aro...@archlinux.org> +# Contributor: Lukas Fleischer + +pkgname=libgap +pkgver=4.8.6 +pkgrel=1 +pkgdesc="A C library version of the GAP kernel" +arch=(i686 x86_64) +url="https://bitbucket.org/vbraun/libgap" +license=(GPL) +depends=(gap) +makedepends=(git python2-ply) +#source=("https://bitbucket.org/vbraun/$pkgname/downloads/$pkgname-$pkgver.tar.gz") +source=("git+https://bitbucket.org/vbraun/libgap/src#commit=6f4bb7e" + libgap-4.8.6.patch) +md5sums=('SKIP' + '11c0a2657c77af80ae41b38c2bb0ba50') + +prepare() { + cd src + patch -p1 -i ../libgap-4.8.6.patch + python2 scripts/libGAPify.py --modify src + autoreconf -vi +} + +build() { + cd src + + ./configure --prefix=/usr + make +} + +package() { + cd src + make install DESTDIR="$pkgdir" +} Copied: libgap/repos/community-staging-x86_64/libgap-4.8.6.patch (from rev 196869, libgap/trunk/libgap-4.8.6.patch) =================================================================== --- community-staging-x86_64/libgap-4.8.6.patch (rev 0) +++ community-staging-x86_64/libgap-4.8.6.patch 2016-11-25 19:11:54 UTC (rev 196870) @@ -0,0 +1,1861 @@ +From 55035e11db706d4dea0c8834d3059c33f77c1d42 Mon Sep 17 00:00:00 2001 +From: Lukas Fleischer <lfleisc...@lfos.de> +Date: Fri, 25 Nov 2016 13:59:22 +0100 +Subject: [PATCH] Update to 4.8.6 + +--- + Makefile.in | 19 +- + aclocal.m4 | 1 + + config.guess | 6 +- + config.sub | 10 +- + configure | 123 ++++++++- + configure.ac | 2 +- + m4/libtool.m4 | 5 +- + patches/gap-4.8.6.patch | 684 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/Makefile.in | 18 +- + src/bool.c | 2 +- + src/code.c | 40 ++- + src/gap.c | 1 + + src/intfuncs.c | 33 --- + src/listfunc.c | 7 +- + src/pperm.c | 4 +- + src/profile.c | 75 +++++- + src/profile.h | 3 +- + src/read.c | 10 +- + src/streams.c | 74 ++---- + src/sysfiles.c | 93 ++++++- + src/sysfiles.h | 15 +- + src/system.c | 4 +- + src/trans.c | 4 +- + test/Makefile.in | 9 +- + 24 files changed, 1076 insertions(+), 166 deletions(-) + create mode 100644 patches/gap-4.8.6.patch + +diff --git a/Makefile.in b/Makefile.in +index 44732ab..c5f0384 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -97,10 +97,10 @@ host_triplet = @host@ + target_triplet = @target@ + subdir = . + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ +@@ -169,7 +169,7 @@ CSCOPE = cscope + DIST_SUBDIRS = $(SUBDIRS) + am__DIST_COMMON = $(srcdir)/Makefile.in AUTHORS COPYING ChangeLog \ + INSTALL NEWS README TODO compile config.guess config.sub \ +- install-sh ltmain.sh missing ++ depcomp install-sh ltmain.sh missing + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + distdir = $(PACKAGE)-$(VERSION) + top_distdir = $(distdir) +@@ -250,6 +250,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +@@ -558,7 +559,7 @@ distdir: $(DISTFILES) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" + dist-gzip: distdir +- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz ++ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + + dist-bzip2: distdir +@@ -584,7 +585,7 @@ dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 +- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz ++ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + + dist-zip: distdir +@@ -602,7 +603,7 @@ dist dist-all: + distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ ++ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ +@@ -612,7 +613,7 @@ distcheck: dist + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ ++ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac +diff --git a/aclocal.m4 b/aclocal.m4 +index e62b4ad..b839773 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1170,6 +1170,7 @@ AC_SUBST([am__tar]) + AC_SUBST([am__untar]) + ]) # _AM_PROG_TAR + ++m4_include([m4/ld-version-script.m4]) + m4_include([m4/libtool.m4]) + m4_include([m4/ltoptions.m4]) + m4_include([m4/ltsugar.m4]) +diff --git a/config.guess b/config.guess +index dbfb978..6c32c86 100755 +--- a/config.guess ++++ b/config.guess +@@ -1,8 +1,8 @@ + #! /bin/sh + # Attempt to guess a canonical system name. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2015-01-01' ++timestamp='2014-11-04' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -50,7 +50,7 @@ version="\ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright 1992-2015 Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +diff --git a/config.sub b/config.sub +index 6467c95..7ffe373 100755 +--- a/config.sub ++++ b/config.sub +@@ -1,8 +1,8 @@ + #! /bin/sh + # Configuration validation subroutine script. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2014 Free Software Foundation, Inc. + +-timestamp='2015-01-01' ++timestamp='2014-12-03' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -68,7 +68,7 @@ Report bugs and patches to <config-patc...@gnu.org>." + version="\ + GNU config.sub ($timestamp) + +-Copyright 1992-2015 Free Software Foundation, Inc. ++Copyright 1992-2014 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -260,7 +260,7 @@ case $basic_machine in + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ +- | fido | fr30 | frv | ft32 \ ++ | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ +@@ -1025,7 +1025,7 @@ case $basic_machine in + ;; + ppc64) basic_machine=powerpc64-unknown + ;; +- ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown +diff --git a/configure b/configure +index e3c0c61..b9f24ba 100755 +--- a/configure ++++ b/configure +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.69 for libGAP 4.8.3. ++# Generated by GNU Autoconf 2.69 for libGAP 4.8.6. + # + # Report bugs to <sage-de...@googlegroups.com>. + # +@@ -590,8 +590,8 @@ MAKEFLAGS= + # Identity of this package. + PACKAGE_NAME='libGAP' + PACKAGE_TARNAME='libgap' +-PACKAGE_VERSION='4.8.3' +-PACKAGE_STRING='libGAP 4.8.3' ++PACKAGE_VERSION='4.8.6' ++PACKAGE_STRING='libGAP 4.8.6' + PACKAGE_BUGREPORT='sage-de...@googlegroups.com' + PACKAGE_URL='' + +@@ -635,6 +635,9 @@ ac_includes_default="\ + ac_subst_vars='am__EXEEXT_FALSE + am__EXEEXT_TRUE + LTLIBOBJS ++HAVE_LD_VERSION_SCRIPT_FALSE ++HAVE_LD_VERSION_SCRIPT_TRUE ++LIBGAP_LT_VERSION + NEED_ITANIUMOBJ_FALSE + NEED_ITANIUMOBJ_TRUE + LIBOBJS +@@ -779,6 +782,7 @@ with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock ++enable_ld_version_script + ' + ac_precious_vars='build_alias + host_alias +@@ -1332,7 +1336,7 @@ if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures libGAP 4.8.3 to adapt to many kinds of systems. ++\`configure' configures libGAP 4.8.6 to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1403,7 +1407,7 @@ fi + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of libGAP 4.8.3:";; ++ short | recursive ) echo "Configuration of libGAP 4.8.6:";; + esac + cat <<\_ACEOF + +@@ -1422,6 +1426,9 @@ Optional Features: + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) ++ --enable-ld-version-script ++ enable linker version script (default is enabled ++ when possible) + + Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] +@@ -1520,7 +1527,7 @@ fi + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-libGAP configure 4.8.3 ++libGAP configure 4.8.6 + generated by GNU Autoconf 2.69 + + Copyright (C) 2012 Free Software Foundation, Inc. +@@ -2183,7 +2190,7 @@ cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by libGAP $as_me 4.8.3, which was ++It was created by libGAP $as_me 4.8.6, which was + generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ +@@ -3157,7 +3164,7 @@ fi + + # Define the identity of the package. + PACKAGE='libgap' +- VERSION='4.8.3' ++ VERSION='4.8.6' + + + cat >>confdefs.h <<_ACEOF +@@ -11936,9 +11943,6 @@ fi + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command +@@ -11947,7 +11951,7 @@ fi + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +@@ -14448,6 +14452,93 @@ $as_echo "#define SYS_IS_CYGWIN32 0" >>confdefs.h + + fi + ++LIBGAP_RELEASE_MAJOR=${PACKAGE_VERSION%.*} ++LIBGAP_VERSION_MAJOR=${PACKAGE_VERSION%%.*} ++LIBGAP_VERSION_MINOR=${LIBGAP_RELEASE_MAJOR#*.} ++LIBGAP_VERSION_MICRO=${PACKAGE_VERSION##*.} ++LIBGAP_VERSION_MICRO=${LIBGAP_VERSION_MICRO%-*} ++LIBGAP_LT_VERSION="$(expr ${LIBGAP_VERSION_MAJOR} + ${LIBGAP_VERSION_MINOR}):${LIBGAP_VERSION_MICRO}:${LIBGAP_VERSION_MINOR}" ++ ++ ++ ++# Checks for linker script support: ++ ++ # Check whether --enable-ld-version-script was given. ++if test "${enable_ld_version_script+set}" = set; then : ++ enableval=$enable_ld_version_script; have_ld_version_script=$enableval ++fi ++ ++ if test -z "$have_ld_version_script"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LD -Wl,--version-script works" >&5 ++$as_echo_n "checking if LD -Wl,--version-script works... " >&6; } ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" ++ cat > conftest.map <<EOF ++foo ++EOF ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ accepts_syntax_errors=yes ++else ++ accepts_syntax_errors=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ if test "$accepts_syntax_errors" = no; then ++ cat > conftest.map <<EOF ++VERS_1 { ++ global: sym; ++}; ++ ++VERS_2 { ++ global: sym; ++} VERS_1; ++EOF ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ have_ld_version_script=yes ++else ++ have_ld_version_script=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ else ++ have_ld_version_script=no ++ fi ++ rm -f conftest.map ++ LDFLAGS="$save_LDFLAGS" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ld_version_script" >&5 ++$as_echo "$have_ld_version_script" >&6; } ++ fi ++ if test "$have_ld_version_script" = "yes"; then ++ HAVE_LD_VERSION_SCRIPT_TRUE= ++ HAVE_LD_VERSION_SCRIPT_FALSE='#' ++else ++ HAVE_LD_VERSION_SCRIPT_TRUE='#' ++ HAVE_LD_VERSION_SCRIPT_FALSE= ++fi ++ ++ + + #OUTPUT + cat >confcache <<\_ACEOF +@@ -14592,6 +14683,10 @@ if test -z "${NEED_ITANIUMOBJ_TRUE}" && test -z "${NEED_ITANIUMOBJ_FALSE}"; then + as_fn_error $? "conditional \"NEED_ITANIUMOBJ\" was never defined. + Usually this means the macro was only invoked conditionally." "$LINENO" 5 + fi ++if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then ++ as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. ++Usually this means the macro was only invoked conditionally." "$LINENO" 5 ++fi + + : "${CONFIG_STATUS=./config.status}" + ac_write_fail=0 +@@ -14989,7 +15084,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by libGAP $as_me 4.8.3, which was ++This file was extended by libGAP $as_me 4.8.6, which was + generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -15055,7 +15150,7 @@ _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ +-libGAP config.status 4.8.3 ++libGAP config.status 4.8.6 + configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +diff --git a/configure.ac b/configure.ac +index 695caee..7355821 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + AC_PREREQ([2.66]) + + # Note: the version number must match the GAP version number +-AC_INIT([libGAP], [4.8.3], [sage-de...@googlegroups.com]) ++AC_INIT([libGAP], [4.8.6], [sage-de...@googlegroups.com]) + + AC_CANONICAL_TARGET + AM_INIT_AUTOMAKE +diff --git a/m4/libtool.m4 b/m4/libtool.m4 +index a644432..a3bc337 100644 +--- a/m4/libtool.m4 ++++ b/m4/libtool.m4 +@@ -2867,9 +2867,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command +@@ -2878,7 +2875,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff --git a/patches/gap-4.8.6.patch b/patches/gap-4.8.6.patch +new file mode 100644 +index 0000000..71b4ee5 +--- /dev/null ++++ b/patches/gap-4.8.6.patch +@@ -0,0 +1,684 @@ ++diff -urd upstream-gap-4.8.6/src/c_filt1.c src/c_filt1.c ++--- upstream-gap-4.8.6/src/c_filt1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_filt1.c 2016-11-25 13:39:28.975513235 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_IS__FUNCTION; ++diff -urd upstream-gap-4.8.6/src/c_meths1.c src/c_meths1.c ++--- upstream-gap-4.8.6/src/c_meths1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_meths1.c 2016-11-25 13:39:28.982179816 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_METHOD__0ARGS; ++Only in src: config.h ++Only in src: config.h.in ++Only in src: config.h.in~ ++diff -urd upstream-gap-4.8.6/src/c_oper1.c src/c_oper1.c ++--- upstream-gap-4.8.6/src/c_oper1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_oper1.c 2016-11-25 13:39:28.982179816 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_REREADING; ++diff -urd upstream-gap-4.8.6/src/c_random.c src/c_random.c ++--- upstream-gap-4.8.6/src/c_random.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_random.c 2016-11-25 13:39:28.985513106 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_QUO__INT; ++diff -urd upstream-gap-4.8.6/src/c_type1.c src/c_type1.c ++--- upstream-gap-4.8.6/src/c_type1.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/c_type1.c 2016-11-25 13:39:28.985513106 +0100 ++@@ -1,6 +1,6 @@ ++ #ifndef AVOID_PRECOMPILED ++ /* C file produced by GAC */ ++-#include "src/compiled.h" +++#include "compiled.h" ++ ++ /* global variables used in handlers */ ++ static GVar G_NAME__FUNC; ++Only in src: .deps ++diff -urd upstream-gap-4.8.6/src/gap.c src/gap.c ++--- upstream-gap-4.8.6/src/gap.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/gap.c 2016-11-25 13:39:29.105511560 +0100 ++@@ -212,14 +212,14 @@ ++ #endif ++ ++ static StructImportedGVars ImportedGVars[MAX_IMPORTED_GVARS]; ++-static Int NrImportedGVars; +++Int NrImportedGVars; ++ ++ static StructImportedGVars ImportedFuncs[MAX_IMPORTED_GVARS]; ++-static Int NrImportedFuncs; +++Int NrImportedFuncs; ++ ++ char *original_argv0; ++ static char **sysargv; ++-static char **sysenviron; +++char **sysenviron; ++ ++ Obj ShellContext = 0; ++ Obj BaseShellContext = 0; ++@@ -730,11 +730,7 @@ ++ } ++ #endif ++ ++-#ifdef COMPILECYGWINDLL ++-#define main realmain ++-#endif ++- ++-int main ( +++int gap_main_loop ( ++ int argc, ++ char * argv [], ++ char * environ [] ) ++@@ -1311,6 +1307,7 @@ ++ ++ Obj FuncJUMP_TO_CATCH( Obj self, Obj payload) ++ { +++ libgap_call_error_handler(); ++ TLS(ThrownObject) = payload; ++ syLongjmp(TLS(ReadJmpError), 1); ++ return 0; ++Only in src: gap_version.h ++diff -urd upstream-gap-4.8.6/src/gasman.c src/gasman.c ++--- upstream-gap-4.8.6/src/gasman.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/gasman.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -137,6 +137,7 @@ ++ ++ #include "objects.h" /* objects */ ++ #include "scanner.h" /* scanner */ +++#include "libgap_internal.h" /* gasman callback */ ++ ++ #include "code.h" /* coder */ ++ #include "thread.h" /* threads */ ++@@ -2210,6 +2211,9 @@ ++ /* prepare the list of marked bags for the future */ ++ MarkedBags = 0; ++ +++ /* call the libgap callback so library users can mark their own bags */ +++ libgap_call_gasman_callback(); +++ ++ /* mark from the static area */ ++ for ( i = 0; i < GlobalBags.nr; i++ ) ++ MARK_BAG( *GlobalBags.addr[i] ); ++diff -urd upstream-gap-4.8.6/src/iostream.c src/iostream.c ++--- upstream-gap-4.8.6/src/iostream.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/iostream.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -48,6 +48,8 @@ ++ #include "thread.h" /* threads */ ++ #include "tls.h" /* thread-local storage */ ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <stdio.h> /* standard input/output functions */ ++ #include <stdlib.h> ++ #include <string.h> ++@@ -886,8 +888,9 @@ ++ InitHdlrFuncsFromTable( GVarFuncs ); ++ ++ /* Set up the trap to detect future dying children */ +++#ifdef LIBGAP_SIGNALS ++ signal( SIGCHLD, ChildStatusChanged ); ++- +++#endif ++ return 0; ++ } ++ ++Only in src: libgap.c ++Only in src: libgap.h ++Only in src: libgap_internal.h ++Only in src: libgap.la ++Only in src: libgap_la-ariths.lo ++Only in src: libgap_la-ariths.o ++Only in src: libgap_la-blister.lo ++Only in src: libgap_la-blister.o ++Only in src: libgap_la-bool.lo ++Only in src: libgap_la-bool.o ++Only in src: libgap_la-calls.lo ++Only in src: libgap_la-calls.o ++Only in src: libgap_la-c_filt1.lo ++Only in src: libgap_la-c_filt1.o ++Only in src: libgap_la-c_meths1.lo ++Only in src: libgap_la-c_meths1.o ++Only in src: libgap_la-code.lo ++Only in src: libgap_la-code.o ++Only in src: libgap_la-compiler.lo ++Only in src: libgap_la-compiler.o ++Only in src: libgap_la-compstat.lo ++Only in src: libgap_la-compstat.o ++Only in src: libgap_la-c_oper1.lo ++Only in src: libgap_la-c_oper1.o ++Only in src: libgap_la-costab.lo ++Only in src: libgap_la-costab.o ++Only in src: libgap_la-c_random.lo ++Only in src: libgap_la-c_random.o ++Only in src: libgap_la-c_type1.lo ++Only in src: libgap_la-c_type1.o ++Only in src: libgap_la-cyclotom.lo ++Only in src: libgap_la-cyclotom.o ++Only in src: libgap_la-dteval.lo ++Only in src: libgap_la-dteval.o ++Only in src: libgap_la-dt.lo ++Only in src: libgap_la-dt.o ++Only in src: libgap_la-exprs.lo ++Only in src: libgap_la-exprs.o ++Only in src: libgap_la-finfield.lo ++Only in src: libgap_la-finfield.o ++Only in src: libgap_la-funcs.lo ++Only in src: libgap_la-funcs.o ++Only in src: libgap_la-gap.lo ++Only in src: libgap_la-gap.o ++Only in src: libgap_la-gasman.lo ++Only in src: libgap_la-gasman.o ++Only in src: libgap_la-gmpints.lo ++Only in src: libgap_la-gmpints.o ++Only in src: libgap_la-gvars.lo ++Only in src: libgap_la-gvars.o ++Only in src: libgap_la-integer.lo ++Only in src: libgap_la-integer.o ++Only in src: libgap_la-intfuncs.lo ++Only in src: libgap_la-intfuncs.o ++Only in src: libgap_la-intrprtr.lo ++Only in src: libgap_la-intrprtr.o ++Only in src: libgap_la-iostream.lo ++Only in src: libgap_la-iostream.o ++Only in src: libgap_la-libgap.lo ++Only in src: libgap_la-libgap.o ++Only in src: libgap_la-listfunc.lo ++Only in src: libgap_la-listfunc.o ++Only in src: libgap_la-listoper.lo ++Only in src: libgap_la-listoper.o ++Only in src: libgap_la-lists.lo ++Only in src: libgap_la-lists.o ++Only in src: libgap_la-macfloat.lo ++Only in src: libgap_la-macfloat.o ++Only in src: libgap_la-objccoll.lo ++Only in src: libgap_la-objccoll.o ++Only in src: libgap_la-objcftl.lo ++Only in src: libgap_la-objcftl.o ++Only in src: libgap_la-objects.lo ++Only in src: libgap_la-objects.o ++Only in src: libgap_la-objfgelm.lo ++Only in src: libgap_la-objfgelm.o ++Only in src: libgap_la-objpcgel.lo ++Only in src: libgap_la-objpcgel.o ++Only in src: libgap_la-objscoll.lo ++Only in src: libgap_la-objscoll.o ++Only in src: libgap_la-opers.lo ++Only in src: libgap_la-opers.o ++Only in src: libgap_la-permutat.lo ++Only in src: libgap_la-permutat.o ++Only in src: libgap_la-plist.lo ++Only in src: libgap_la-plist.o ++Only in src: libgap_la-pperm.lo ++Only in src: libgap_la-pperm.o ++Only in src: libgap_la-precord.lo ++Only in src: libgap_la-precord.o ++Only in src: libgap_la-profile.lo ++Only in src: libgap_la-profile.o ++Only in src: libgap_la-range.lo ++Only in src: libgap_la-range.o ++Only in src: libgap_la-rational.lo ++Only in src: libgap_la-rational.o ++Only in src: libgap_la-read.lo ++Only in src: libgap_la-read.o ++Only in src: libgap_la-records.lo ++Only in src: libgap_la-records.o ++Only in src: libgap_la-saveload.lo ++Only in src: libgap_la-saveload.o ++Only in src: libgap_la-scanner.lo ++Only in src: libgap_la-scanner.o ++Only in src: libgap_la-sctable.lo ++Only in src: libgap_la-sctable.o ++Only in src: libgap_la-set.lo ++Only in src: libgap_la-set.o ++Only in src: libgap_la-stats.lo ++Only in src: libgap_la-stats.o ++Only in src: libgap_la-streams.lo ++Only in src: libgap_la-streams.o ++Only in src: libgap_la-string.lo ++Only in src: libgap_la-string.o ++Only in src: libgap_la-sysfiles.lo ++Only in src: libgap_la-sysfiles.o ++Only in src: libgap_la-system.lo ++Only in src: libgap_la-system.o ++Only in src: libgap_la-tietze.lo ++Only in src: libgap_la-tietze.o ++Only in src: libgap_la-trans.lo ++Only in src: libgap_la-trans.o ++Only in src: libgap_la-vars.lo ++Only in src: libgap_la-vars.o ++Only in src: libgap_la-vec8bit.lo ++Only in src: libgap_la-vec8bit.o ++Only in src: libgap_la-vecffe.lo ++Only in src: libgap_la-vecffe.o ++Only in src: libgap_la-vecgf2.lo ++Only in src: libgap_la-vecgf2.o ++Only in src: libgap_la-vector.lo ++Only in src: libgap_la-vector.o ++Only in src: libgap_la-weakptr.lo ++Only in src: libgap_la-weakptr.o ++Only in src: libgap.map ++Only in src: .libs ++diff -urd upstream-gap-4.8.6/src/lists.c src/lists.c ++--- upstream-gap-4.8.6/src/lists.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/lists.c 2016-11-25 13:39:29.108844850 +0100 ++@@ -1976,7 +1976,7 @@ ++ } ++ if ( LEN_LIST( poss ) != LEN_LIST( obj ) ) { ++ obj = ErrorReturnObj( ++- "List Assigments: <objs> must have the same length as <positions> (%d)", +++ "List Assignments: <objs> must have the same length as <positions> (%d)", ++ LEN_LIST( poss ), 0L, ++ "you can replace <objs> via 'return <objs>;'" ); ++ } ++Only in src: Makefile ++Only in src: Makefile.am ++Only in src: Makefile.in ++diff -urd upstream-gap-4.8.6/src/objscoll.c src/objscoll.c ++--- upstream-gap-4.8.6/src/objscoll.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/objscoll.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -103,7 +103,7 @@ ++ #define SingleCollectWord C8Bits_SingleCollectWord ++ #define Solution C8Bits_Solution ++ #define UIntN UInt1 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++@@ -125,7 +125,7 @@ ++ #define SingleCollectWord C16Bits_SingleCollectWord ++ #define Solution C16Bits_Solution ++ #define UIntN UInt2 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++@@ -147,7 +147,7 @@ ++ #define SingleCollectWord C32Bits_SingleCollectWord ++ #define Solution C32Bits_Solution ++ #define UIntN UInt4 ++-#include "src/objscoll-impl.h" +++#include "objscoll-impl.h" ++ ++ /**************************************************************************** ++ ** ++diff -urd upstream-gap-4.8.6/src/saveload.c src/saveload.c ++--- upstream-gap-4.8.6/src/saveload.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/saveload.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -924,7 +924,7 @@ ++ if ((x & 3) == 1) ++ Pr("Immediate integer %d\n", INT_INTOBJ((Obj)x),0L); ++ else if ((x & 3) == 2) ++- Pr("Immedate FFE %d %d\n", VAL_FFE(x), SIZE_FF(FLD_FFE(x))); +++ Pr("Immediate FFE %d %d\n", VAL_FFE(x), SIZE_FF(FLD_FFE(x))); ++ else ++ Pr("Reference to bag number %d\n",x>>2,0L); ++ } ++diff -urd upstream-gap-4.8.6/src/scanner.c src/scanner.c ++--- upstream-gap-4.8.6/src/scanner.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/scanner.c 2016-11-25 13:39:29.112178140 +0100 ++@@ -64,6 +64,8 @@ ++ #include "tls.h" ++ #include "thread.h" ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <assert.h> ++ #include <limits.h> ++ #include <stdlib.h> ++@@ -2453,150 +2455,25 @@ ++ KOutputStream stream, ++ Char ch ) ++ { ++- Int i, hint, spos; ++- Char str [MAXLENOUTPUTLINE]; ++- ++- ++- /* '\01', increment indentation level */ ++- if ( ch == '\01' ) { ++- ++- if (!stream->format) ++- return; ++- ++- /* add hint to break line */ ++- addLineBreakHint(stream, stream->pos, 16*stream->indent, 1); ++- } ++- ++- /* '\02', decrement indentation level */ ++- else if ( ch == '\02' ) { ++- ++- if (!stream -> format) ++- return; ++- ++- /* if this is a better place to split the line remember it */ ++- addLineBreakHint(stream, stream->pos, 16*stream->indent, -1); ++- } ++- ++- /* '\03', print line */ ++- else if ( ch == '\03' ) { ++- ++- /* print the line */ ++- if (stream->pos != 0) ++- { ++- stream->line[ stream->pos ] = '\0'; ++- PutLineTo(stream, stream->pos ); ++- ++- /* start the next line */ ++- stream->pos = 0; ++- } ++- /* reset line break hints */ ++- stream->hints[0] = -1; ++- ++- } ++- ++- /* <newline> or <return>, print line, indent next */ ++- else if ( ch == '\n' || ch == '\r' ) { ++- ++- /* put the character on the line and terminate it */ ++- stream->line[ stream->pos++ ] = ch; ++- stream->line[ stream->pos ] = '\0'; ++- ++- /* print the line */ ++- PutLineTo( stream, stream->pos ); ++- ++- /* and dump it from the buffer */ ++- stream->pos = 0; ++- if (stream -> format) ++- { ++- /* indent for next line */ ++- for ( i = 0; i < stream->indent; i++ ) ++- stream->line[ stream->pos++ ] = ' '; ++- } ++- /* reset line break hints */ ++- stream->hints[0] = -1; ++- ++- } ++- ++- /* normal character, room on the current line */ ++- else if ( stream->pos < SyNrCols-2-TLS(NoSplitLine) ) { ++- ++- /* put the character on this line */ ++- stream->line[ stream->pos++ ] = ch; ++- ++- } ++- ++- else ++- { ++- /* position to split */ ++- if ( (hint = nrLineBreak(stream)) != -1 ) ++- spos = stream->hints[3*hint]; ++- else ++- spos = 0; ++- ++- /* if we are going to split at the end of the line, and we are ++- formatting discard blanks */ ++- if ( stream->format && spos == stream->pos && ch == ' ' ) { ++- ; ++- } ++- ++- /* full line, acceptable split position */ ++- else if ( stream->format && spos != 0 ) { ++- ++- /* add character to the line, terminate it */ ++- stream->line[ stream->pos++ ] = ch; ++- stream->line[ stream->pos++ ] = '\0'; ++- ++- /* copy the rest after the best split position to a safe place */ ++- for ( i = spos; i < stream->pos; i++ ) ++- str[ i-spos ] = stream->line[ i ]; ++- str[ i-spos] = '\0'; ++- ++- /* print line up to the best split position */ ++- stream->line[ spos++ ] = '\n'; ++- stream->line[ spos ] = '\0'; ++- PutLineTo( stream, spos ); ++- spos--; ++- ++- /* indent for the rest */ ++- stream->pos = 0; ++- for ( i = 0; i < stream->hints[3*hint+2]; i++ ) ++- stream->line[ stream->pos++ ] = ' '; ++- spos -= stream->hints[3*hint+2]; ++- ++- /* copy the rest onto the next line */ ++- for ( i = 0; str[ i ] != '\0'; i++ ) ++- stream->line[ stream->pos++ ] = str[ i ]; ++- /* recover line break hints for copied rest */ ++- for ( i = hint+1; stream->hints[3*i] != -1; i++ ) ++- { ++- stream->hints[3*(i-hint-1)] = stream->hints[3*i]-spos; ++- stream->hints[3*(i-hint-1)+1] = stream->hints[3*i+1]; ++- stream->hints[3*(i-hint-1)+2] = stream->hints[3*i+2]; ++- } ++- stream->hints[3*(i-hint-1)] = -1; ++- } ++- ++- /* full line, no split position */ ++- else { ++- ++- if (stream->format) ++- { ++- /* append a '\',*/ ++- stream->line[ stream->pos++ ] = '\\'; ++- stream->line[ stream->pos++ ] = '\n'; ++- } ++- /* and print the line */ ++- stream->line[ stream->pos ] = '\0'; ++- PutLineTo( stream, stream->pos ); ++- ++- /* add the character to the next line */ ++- stream->pos = 0; ++- stream->line[ stream->pos++ ] = ch; ++- ++- if (stream->format) ++- stream->hints[0] = -1; ++- } ++- +++ // printf("PutChrTo %i %i %c %hhx\n", stream->file, stream->isstream, ch, ch); +++ if (ch <= 3) // GAP control characters +++ return; +++ // Magic constants are defined in SyFopen +++ if (stream->file == 0) { // negative number indicates an error +++ assert(False); +++ } else if (stream->file == 0) { // 0 identifies the standard input file "*stdin*" +++ assert(False); +++ } else if (stream->file == 1) { // 1 identifies the standard outpt file "*stdout*" +++ libgap_append_stdout(ch); +++ } else if (stream->file == 2) { // 2 identifies the brk loop input file "*errin*" +++ assert(False); +++ } else if (stream->file == 3) { // 3 identifies the error messages file "*errout*" +++ libgap_append_stderr(ch); +++ } else { // anything else is a real file descriptor +++ stream->line[stream->pos++] = ch; +++ stream->line[stream->pos++] = '\0'; +++ PutLineTo(stream, stream->pos); +++ stream->pos = 0; ++ } ++ } ++ ++Only in src: stamp-h1 ++diff -urd upstream-gap-4.8.6/src/sysfiles.c src/sysfiles.c ++--- upstream-gap-4.8.6/src/sysfiles.c 2016-11-12 15:42:10.000000000 +0100 +++++ src/sysfiles.c 2016-11-25 13:39:29.115511430 +0100 ++@@ -42,6 +42,8 @@ ++ #include "thread.h" /* threads */ ++ #include "tls.h" /* thread-local storage */ ++ +++#include "libgap_internal.h" /* GAP shared library */ +++ ++ #include <assert.h> ++ #include <fcntl.h> ++ ++@@ -1135,16 +1137,20 @@ ++ ++ void syAnswerCont ( int signr ) ++ { +++#ifdef LIBGAP_SIGNALS ++ syStartraw( syFid ); ++ signal( SIGCONT, SIG_DFL ); ++ kill( getpid(), SIGCONT ); +++#endif ++ } ++ ++ void syAnswerTstp ( int signr ) ++ { +++#ifdef LIBGAP_SIGNALS ++ syStopraw( syFid ); ++ signal( SIGCONT, syAnswerCont ); ++ kill( getpid(), SIGTSTP ); +++#endif ++ } ++ ++ #endif ++@@ -1217,12 +1223,13 @@ ++ ++ #endif ++ ++- +++#ifdef LIBGAP_SIGNALS ++ #ifdef SIGTSTP ++ /* install signal handler for stop */ ++ syFid = fid; ++ signal( SIGTSTP, syAnswerTstp ); ++ #endif +++#endif ++ ++ /* indicate success */ ++ return 1; ++@@ -1245,10 +1252,12 @@ ++ if ( SyWindow ) ++ return; ++ +++#ifdef LIBGAP_SIGNALS ++ #ifdef SIGTSTP ++ /* remove signal handler for stop */ ++ signal( SIGTSTP, SIG_DFL ); ++ #endif +++#endif ++ ++ #if HAVE_TERMIOS_H ++ ++@@ -1342,11 +1351,13 @@ ++ ++ void SyInstallAnswerIntr ( void ) ++ { +++#ifdef LIBGAP_SIGNALS ++ if ( signal( SIGINT, SIG_IGN ) != SIG_IGN ) ++ { ++ signal( SIGINT, syAnswerIntr ); ++ siginterrupt( SIGINT, 0 ); ++ } +++#endif ++ } ++ ++ ++@@ -1625,7 +1636,9 @@ ++ if (CO <= 0) ++ CO = win.ws_col; ++ } +++#ifdef LIBGAP_SIGNALS ++ (void) signal(SIGWINCH, syWindowChangeIntr); +++#endif ++ } ++ #endif /* TIOCGWINSZ */ ++ ++@@ -3256,7 +3269,13 @@ ++ UInt length, ++ Int fid) ++ { ++- return syFgets( line, length, fid, 1); +++ if(fid!=0 && fid!=2) { +++ // not stdin/stderr; probably file IO. Do the standard thing. +++ // printf("SyFgets fid=%i\n", fid); +++ return syFgets( line, length, fid, 1); +++ } +++ return libgap_get_input(line, length); +++ // return syFgets( line, length, fid, 1); ++ } ++ ++ ++@@ -3380,7 +3399,7 @@ ++ # endif ++ #endif ++ ++-extern char ** environ; +++#include "libgap_internal.h" ++ ++ void NullSignalHandler(int scratch) {} ++ ++@@ -3495,6 +3514,7 @@ ++ `After that, we call the old signal handler, in case any other children have died in the ++ meantime. This resets the handler */ ++ +++#ifdef LIBGAP_SIGNALS ++ func2 = signal( SIGCHLD, SIG_DFL ); ++ ++ /* This may return SIG_DFL (0x0) or SIG_IGN (0x1) if the previous handler ++@@ -3503,6 +3523,7 @@ ++ * is to do nothing */ ++ if(func2 == SIG_ERR || func2 == SIG_DFL || func2 == SIG_IGN) ++ func2 = &NullSignalHandler; +++#endif ++ ++ /* clone the process */ ++ pid = vfork(); ++@@ -3514,8 +3535,9 @@ ++ if ( pid != 0 ) { ++ ++ /* ignore a CTRL-C */ +++#ifdef LIBGAP_SIGNALS ++ func = signal( SIGINT, SIG_IGN ); ++- +++#endif ++ /* wait for some action */ ++ #if HAVE_WAITPID ++ wait_pid = waitpid( pid, &status, 0 ); ++@@ -3523,18 +3545,24 @@ ++ wait_pid = wait4( pid, &status, 0, &usage ); ++ #endif ++ if ( wait_pid == -1 ) { +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return -1; ++ } ++ ++ if ( WIFSIGNALED(status) ) { +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return -1; ++ } +++#ifdef LIBGAP_SIGNALS ++ signal( SIGINT, func ); ++ (*func2)(SIGCHLD); +++#endif ++ return WEXITSTATUS(status); ++ } ++ ++Only in src: sysfiles.c.orig +diff --git a/src/Makefile.in b/src/Makefile.in +index 3ccedf9..13263fe 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -90,13 +90,14 @@ POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ + target_triplet = @target@ +-@NEED_ITANIUMOBJ_TRUE@am__append_1 = itanium.s ++@HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(top_srcdir)/src/libgap.map ++@NEED_ITANIUMOBJ_TRUE@am__append_2 = itanium.s + subdir = src + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(libgapinclude_HEADERS) \ +@@ -290,6 +291,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +@@ -379,6 +381,8 @@ top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + DEFAULT_INCLUDES = -I@top_builddir@ + lib_LTLIBRARIES = libgap.la ++libgap_la_LT_INFO = -version-info @LIBGAP_LT_VERSION@ ++libgap_la_LD_VERSION_SCRIPT = $(am__append_1) + libgap_la_SOURCES = ariths.c c_random.c gmpints.c objccoll.c \ + rational.c system.c blister.c c_type1.c gvars.c objcftl.c \ + read.c tietze.c bool.c cyclotom.c integer.c objects.c \ +@@ -389,7 +393,7 @@ libgap_la_SOURCES = ariths.c c_random.c gmpints.c objccoll.c \ + compiler.c funcs.c listfunc.c permutat.c stats.c weakptr.c \ + compstat.c gap.c listoper.c plist.c streams.c c_oper1.c \ + lists.c precord.c string.c costab.c gasman.c macfloat.c \ +- range.c sysfiles.c pperm.c trans.c profile.c $(am__append_1) ++ range.c sysfiles.c pperm.c trans.c profile.c $(am__append_2) + libgapincludedir = @includedir@/gap + libgapinclude_HEADERS = \ + ariths.h cyclotom.h integer.h objcftl.h rational.h sysfiles.h \ +@@ -413,7 +417,7 @@ libgap_la_CFLAGS = $(AM_CFLAGS) \ + + + # the no-undefined is necessary for Cygwin +-libgap_la_LDFLAGS = -lm @GMP_LIBS@ -no-undefined ++libgap_la_LDFLAGS = $(libgap_la_LT_INFO) $(libgap_la_LD_VERSION_SCRIPT) @GMP_LIBS@ -lm -no-undefined + all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +diff --git a/src/bool.c b/src/bool.c +index 1fa9d5a..5d64437 100644 +--- a/src/bool.c ++++ b/src/bool.c +@@ -373,7 +373,7 @@ static Int InitKernel ( + StructInitInfo * module ) + { + /* install the marking functions for boolean values */ +- InfoBags[ T_BOOL ].name = "boolean"; ++ InfoBags[ T_BOOL ].name = "boolean or fail"; + InitMarkFuncBags( T_BOOL, MarkNoSubBags ); + + /* init filters and functions */ +diff --git a/src/code.c b/src/code.c +index 6bcdf21..e0e2e8f 100644 +--- a/src/code.c ++++ b/src/code.c +@@ -135,8 +135,33 @@ Obj FILENAME_STAT(Stat stat) + filename = ELM_PLIST(FilenameCache, filenameid); + return filename; + } +- +- ++ ++ ++/**************************************************************************** ++** ++** Fill in filename and line of a statement, checking we do not overflow ++** the space we have for storing information ++*/ ++Stat fillFilenameLine(Int fileid, Int line, Int size, Int type) ++{ ++ Stat stat; ++ if(fileid < 0 || fileid >= (1 << 16)) ++ { ++ fileid = (1 << 16) - 1; ++ RegisterProfilingFileOverflowOccured(); ++ } ++ if(line < 0 || line >= (1 << 16)) ++ { ++ line = (1 << 16) - 1; ++ RegisterProfilingLineOverflowOccured(); ++ } ++ ++ stat = ((Stat)fileid << 48) + ((Stat)line << 32) + ++ ((Stat)size << 8) + (Stat)type; ++ ++ return stat; ++} ++ + /**************************************************************************** + ** + *F NewStat( <type>, <size> ) . . . . . . . . . . . allocate a new statement +@@ -173,8 +198,7 @@ Stat NewStatWithLine ( + setup_gapname(TLS(Input)); + + /* enter type and size */ +- ADDR_STAT(stat)[-1] = ((Stat)TLS(Input)->gapnameid << 48) + ((Stat)line << 32) + +- ((Stat)size << 8) + (Stat)type; ++ ADDR_STAT(stat)[-1] = fillFilenameLine(TLS(Input)->gapnameid, line, size, type); + RegisterStatWithProfiling(stat); + /* return the new statement */ + return stat; +@@ -218,9 +242,8 @@ Expr NewExpr ( + } + + /* enter type and size */ +- ADDR_EXPR(expr)[-1] = ((Stat)TLS(Input)->gapnameid << 48) + +- ((Stat)TLS(Input)->number << 32) + +- ((Stat)size << 8) + type; ++ ADDR_EXPR(expr)[-1] = fillFilenameLine(TLS(Input)->gapnameid, ++ TLS(Input)->number, size, type); + RegisterStatWithProfiling(expr); + /* return the new expression */ + return expr; +@@ -3510,6 +3533,3 @@ StructInitInfo * InitInfoCode ( void ) + + *E code.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here + */ +- +- +- +diff --git a/src/gap.c b/src/gap.c +index 58528c9..68b5eff 100644 +--- a/src/gap.c ++++ b/src/gap.c +@@ -3091,6 +3091,7 @@ static Int PostRestore ( + Last2 = GVarName( "last2" ); + Last3 = GVarName( "last3" ); + Time = GVarName( "time" ); ++ AssGVar(Time, INTOBJ_INT(0)); + QUITTINGGVar = GVarName( "QUITTING" ); + + /* return success */ +diff --git a/src/intfuncs.c b/src/intfuncs.c +index 51a542b..1614c3c 100644 +--- a/src/intfuncs.c ++++ b/src/intfuncs.c +@@ -202,36 +202,6 @@ UInt4 nextrandMT_int32(UInt4* mt) + return y; + } + +- +-Obj FuncRandomListMT(Obj self, Obj mtstr, Obj list) +-{ +- Int len, a, lg; +- UInt4 *mt; +- while ((! IsStringConv(mtstr)) || GET_LEN_STRING(mtstr) < 2500) { +- mtstr = ErrorReturnObj( +- "<mtstr> must be a string with at least 2500 characters, ", +- 0L, 0L, +- "you can replace <mtstr> via 'return <mtstr>;'" ); +- } +- while (! IS_LIST(list)) { +- list = ErrorReturnObj( +- "<list> must be a list, not a %s", +- (Int)TNAM_OBJ(list), 0L, +- "you can replace <list> via 'return <list>;'" ); +- } +- len = LEN_LIST(list); +- if (len == 0) return Fail; +- mt = (UInt4*) CHARS_STRING(mtstr); +- lg = 31 - CLog2Int(len); +- for (a = nextrandMT_int32(mt) >> lg; +- a >= len; +- a = nextrandMT_int32(mt) >> lg +- ); +- return ELM_LIST(list, a+1); +-} +- +- +- + /**************************************************************************** + ** + *F FuncHASHKEY_BAG(<self>,<obj>,<seed>,<offset>,<maxlen>) +@@ -678,9 +648,6 @@ static StructGVarFunc GVarFuncs [] = { + { "InitRandomMT", 1, "initstr", + FuncInitRandomMT, "src/integer.c:InitRandomMT" }, + +- { "RandomListMT", 2, "mtstr, list", +- FuncRandomListMT, "src/integer.c:RandomListMT" }, +- + { 0 } + + }; +diff --git a/src/listfunc.c b/src/listfunc.c +index 7d04525..4b92f01 100644 +--- a/src/listfunc.c ++++ b/src/listfunc.c +@@ -232,8 +232,10 @@ Obj RemPlist ( + } + removed = ELM_PLIST(list, pos); + SET_ELM_PLIST(list, pos, (Obj)0L); +- SET_LEN_PLIST(list, pos-1); +- if ( pos == 1 ) { ++ pos--; ++ while ( 1 <= pos && ELM_PLIST( list, pos ) == 0 ) { pos--; } ++ SET_LEN_PLIST(list, pos); ++ if ( pos == 0 ) { + RetypeBag(list, T_PLIST_EMPTY); + } + if (4*pos*sizeof(Obj) < 3*SIZE_BAG(list)) +@@ -302,6 +304,7 @@ Obj FuncAPPEND_LIST_INTR ( + len2 = GET_LEN_STRING(list2); + GROW_STRING(list1, len1 + len2); + SET_LEN_STRING(list1, len1 + len2); ++ CLEAR_FILTS_LIST(list1); + memmove( (void *)(CHARS_STRING(list1) + len1), + (void *)CHARS_STRING(list2), len2 + 1); + /* ensure trailing zero */ +diff --git a/src/pperm.c b/src/pperm.c +index 5965767..45a536b 100644 +--- a/src/pperm.c ++++ b/src/pperm.c +@@ -2246,7 +2246,7 @@ Obj PrintPPerm4(Obj self, Obj f){ + + deg=DEG_PPERM4(f); + if(deg==0) Pr("<empty partial perm>", 0L, 0L); +- n=MAX(deg, CODEG_PPERM2(f)); ++ n=MAX(deg, CODEG_PPERM4(f)); + ResizeTmpPPerm(n); + ptseen=(UInt4*)(ADDR_OBJ(TmpPPerm)); + for(i=0;i<n;i++) ptseen[i]=0; +@@ -4451,7 +4451,7 @@ Obj QuoPPerm22(Obj f, Obj g){ + } + } + } +- CODEG_PPERM2(quo)=codeg; ++ CODEG_PPERM4(quo)=codeg; + return quo; + } + +diff --git a/src/profile.c b/src/profile.c +index 6e5d22e..c2f82d3 100644 +--- a/src/profile.c ++++ b/src/profile.c +@@ -509,6 +509,73 @@ Obj ProfileEvalBoolPassthrough(Expr stat) + } + + ++/**************************************************************************** ++** ++** This functions check if we overflow either 2^16 lines, or files. ++** In this case profiling will "give up". We print a warning to tell users ++** that this happens. ++**/ ++ ++Int HaveReportedLineProfileOverflow; ++Int ShouldReportLineProfileOverflow; ++ ++Int HaveReportedFileProfileOverflow; ++Int ShouldReportFileProfileOverflow; ++ ++// This function only exists to allow testing of these overflow checks ++Obj FuncCLEAR_PROFILE_OVERFLOW_CHECKS(Obj self) { ++ HaveReportedLineProfileOverflow = 0; ++ ShouldReportLineProfileOverflow = 0; ++ ++ HaveReportedFileProfileOverflow = 0; ++ ShouldReportFileProfileOverflow = 0; ++ ++ return 0; ++} ++ ++void CheckPrintOverflowWarnings() { ++ if(!HaveReportedLineProfileOverflow && ShouldReportLineProfileOverflow) ++ { ++ HaveReportedLineProfileOverflow = 1; ++ Pr("#I Profiling only works on the first 65,535 lines of each file\n" ++ "#I (this warning will only appear once).\n", ++ 0L, 0L); ++ } ++ ++ if(!HaveReportedFileProfileOverflow && ShouldReportFileProfileOverflow) ++ { ++ HaveReportedFileProfileOverflow = 1; ++ Pr("#I Profiling only works for the first 65,535 read files\n" ++ "#I (this warning will only appear once).\n", ++ 0L, 0L ); ++ } ++} ++ ++void RegisterProfilingLineOverflowOccured() ++{ ++ Int active; ++ HashLock(&profileState); ++ active = profileState_Active; ++ HashUnlock(&profileState); ++ ShouldReportLineProfileOverflow = 1; ++ if(active) ++ { ++ CheckPrintOverflowWarnings(); ++ } ++} ++ ++void RegisterProfilingFileOverflowOccured() ++{ ++ Int active; ++ HashLock(&profileState); ++ active = profileState_Active; ++ HashUnlock(&profileState); ++ ShouldReportFileProfileOverflow = 1; ++ if(active) ++ { ++ CheckPrintOverflowWarnings(); ++ } ++} + + /**************************************************************************** + ** +@@ -603,7 +670,7 @@ Obj FuncACTIVATE_PROFILING ( + if(profileState_Active) { + return Fail; + } +- ++ + if(profileState.profiledPreviously && + coverage == True) { + ErrorMayQuit("Code coverage can only be started once per" +@@ -611,6 +678,8 @@ Obj FuncACTIVATE_PROFILING ( + return Fail; + } + ++ CheckPrintOverflowWarnings(); ++ + OutputtedFilenameList = NEW_PLIST(T_PLIST, 0); + + if ( ! IsStringConv( filename ) ) { +@@ -897,6 +966,8 @@ void RegisterStatWithProfiling(Stat stat) + } + + ++ ++ + /**************************************************************************** + ** + +@@ -913,6 +984,8 @@ static StructGVarFunc GVarFuncs [] = { + FuncACTIVATE_PROFILING, "src/profile.c:ACTIVATE_PROFILING" }, + { "DEACTIVATE_PROFILING", 0, "", + FuncDEACTIVATE_PROFILING, "src/profile.c:DEACTIVATE_PROFILING" }, ++ { "CLEAR_PROFILE_OVERFLOW_CHECKS", 0, "", ++ FuncCLEAR_PROFILE_OVERFLOW_CHECKS, "src/profile.c:CLEAR_PROFILE_OVERFLOW_CHECKS" }, + { "IsLineByLineProfileActive", 0, "", + FuncIS_PROFILE_ACTIVE, "src/profile.c:IsLineByLineProfileActive" }, + { "ACTIVATE_COLOR_PROFILING", 1, "bool", +diff --git a/src/profile.h b/src/profile.h +index d6f4fa7..27bbd6f 100644 +--- a/src/profile.h ++++ b/src/profile.h +@@ -28,7 +28,8 @@ + StructInitInfo * InitInfoProfile ( void ); + + void RegisterStatWithProfiling(Stat); +- ++void RegisterProfilingLineOverflowOccured(); ++void RegisterProfilingFileOverflowOccured(); + + void InstallEvalBoolFunc( Int, Obj(*)(Expr)); + void InstallEvalExprFunc( Int, Obj(*)(Expr)); +diff --git a/src/read.c b/src/read.c +index f69d149..a8f6601 100644 +--- a/src/read.c ++++ b/src/read.c +@@ -551,13 +551,19 @@ void ReadCallVarAss ( + } + } + ++#ifdef HPCGAP ++#define ASSIGN_ERROR_MESSAGE ":= or ::=" ++#else ++#define ASSIGN_ERROR_MESSAGE ":=" ++#endif ++ + /* if we need a statement */ + else if ( mode == 's' || (mode == 'x' && IS_IN(TLS(Symbol), S_ASSIGN)) ) { + if ( type != 'c' && type != 'C') { + if (TLS(Symbol) != S_ASSIGN) +- Match( S_INCORPORATE, ":= or ::=", follow); ++ Match( S_INCORPORATE, ASSIGN_ERROR_MESSAGE, follow); + else +- Match( S_ASSIGN, ":= or ::=", follow ); ++ Match( S_ASSIGN, ASSIGN_ERROR_MESSAGE, follow ); + if ( TLS(CountNams) == 0 || !TLS(IntrCoding) ) { TLS(CurrLHSGVar) = (type == 'g' ? var : 0); } + ReadExpr( follow, 'r' ); + } +diff --git a/src/streams.c b/src/streams.c +index 7738672..93fbe07 100644 +--- a/src/streams.c ++++ b/src/streams.c +@@ -1947,25 +1947,30 @@ Obj FuncWRITE_STRING_FILE_NC ( + Obj fid, + Obj str ) + { +- Int len = 0, ret; ++ Int len = 0, l, ret; ++ char *ptr; + + /* don't check the argument */ + + len = GET_LEN_STRING(str); +- ret = write( syBuf[INT_INTOBJ(fid)].echo, CHARS_STRING(str), len); +- return (ret == len)?True : Fail; ++ ptr = CSTR_STRING(str); ++ while (len > 0) { ++ l = (len > 1048576) ? 1048576 : len; ++ ret = write( syBuf[INT_INTOBJ(fid)].echo, ptr, l); ++ if (ret == -1) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len -= ret; ++ ptr += ret; ++ } ++ return True; + } + +- + Obj FuncREAD_STRING_FILE ( + Obj self, + Obj fid ) + { +- Char buf[20001]; +- Int ret, len; +- UInt lstr; +- Obj str; +- + /* check the argument */ + while ( ! IS_INTOBJ(fid) ) { + fid = ErrorReturnObj( +@@ -1973,56 +1978,7 @@ Obj FuncREAD_STRING_FILE ( + (Int)TNAM_OBJ(fid), 0L, + "you can replace <fid> via 'return <fid>;'" ); + } +- +-#if ! SYS_IS_CYGWIN32 +- /* fstat seems completely broken under CYGWIN */ +-#if HAVE_STAT +- /* first try to get the whole file as one chunk, this avoids garbage +- collections because of the GROW_STRING calls below */ +- { +- struct stat fstatbuf; +- if ( syBuf[INT_INTOBJ(fid)].pipe == 0 && +- fstat( syBuf[INT_INTOBJ(fid)].fp, &fstatbuf) == 0 ) { +- if((off_t)(Int)fstatbuf.st_size != fstatbuf.st_size) { +- ErrorMayQuit( +- "The file is too big to fit the current workspace", +- (Int)0, (Int)0); +- } +- len = (Int) fstatbuf.st_size; +- str = NEW_STRING( len ); +- ret = read( syBuf[INT_INTOBJ(fid)].fp, +- CHARS_STRING(str), len); +- CHARS_STRING(str)[ret] = '\0'; +- SET_LEN_STRING(str, ret); +- if ( (off_t) ret == fstatbuf.st_size ) { +- return str; +- } +- } +- } +-#endif +-#endif +- /* read <fid> until we see eof (in 20kB pieces) */ +- str = NEW_STRING(0); +- len = 0; +- while (1) { +- if ( (ret = read( syBuf[INT_INTOBJ(fid)].fp , buf, 20000)) <= 0 ) +- break; +- len += ret; +- GROW_STRING( str, len ); +- lstr = GET_LEN_STRING(str); +- memcpy( CHARS_STRING(str)+lstr, buf, ret ); +- *(CHARS_STRING(str)+lstr+ret) = '\0'; +- SET_LEN_STRING(str, lstr+ret); +- } +- +- /* fix the length of <str> */ +- len = GET_LEN_STRING(str); +- ResizeBag( str, SIZEBAG_STRINGLEN(len) ); +- +- /* and return */ +- +- syBuf[INT_INTOBJ(fid)].ateof = 1; +- return len == 0 ? Fail : str; ++ return SyReadStringFid(INT_INTOBJ(fid)); + } + + /**************************************************************************** +diff --git a/src/sysfiles.c b/src/sysfiles.c +index 99e7974..fd46d1a 100644 +--- a/src/sysfiles.c ++++ b/src/sysfiles.c +@@ -1424,9 +1424,6 @@ static void syAnswerAlarm ( int signr, siginfo_t * si, void *context) + Later we might want to do something cleverer with throwing an + exception or dealing better if this isn't our timer */ + assert( signr == TIMER_SIGNAL); +- assert( si->si_signo == TIMER_SIGNAL); +- assert( si->si_code == SI_TIMER); +- assert( si->si_value.sival_int == 0x12345678 ); + SyAlarmRunning = 0; + SyAlarmHasGoneOff = 1; + InterruptExecStat(); +@@ -4055,6 +4052,96 @@ Char * SyTmpdir ( const Char * hint ) + #endif + #endif + ++Obj SyReadStringFile(Int fid) ++{ ++ Char buf[32769]; ++ Int ret, len; ++ UInt lstr; ++ Obj str; ++ ++ /* read <fid> until we see eof (in 32kB pieces) */ ++ str = NEW_STRING(0); ++ len = 0; ++ do { ++ ret = read( syBuf[fid].fp , buf, 32768); ++ if (ret < 0) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len += ret; ++ GROW_STRING( str, len ); ++ lstr = GET_LEN_STRING(str); ++ memcpy( CHARS_STRING(str)+lstr, buf, ret ); ++ *(CHARS_STRING(str)+lstr+ret) = '\0'; ++ SET_LEN_STRING(str, lstr+ret); ++ } while(ret > 0); ++ ++ /* fix the length of <str> */ ++ len = GET_LEN_STRING(str); ++ ResizeBag( str, SIZEBAG_STRINGLEN(len) ); ++ ++ syBuf[fid].ateof = 1; ++ return str; ++} ++ ++#if !defined(SYS_IS_CYGWIN32) && defined(HAVE_STAT) ++/* fstat seems completely broken under CYGWIN */ ++/* first try to get the whole file as one chunk, this avoids garbage ++ collections because of the GROW_STRING calls below */ ++Obj SyReadStringFileStat(Int fid) ++{ ++ Int ret, len; ++ Obj str; ++ Int l; ++ char *ptr; ++ struct stat fstatbuf; ++ ++ if( fstat( syBuf[fid].fp, &fstatbuf) == 0 ) { ++ if((off_t)(Int)fstatbuf.st_size != fstatbuf.st_size) { ++ ErrorMayQuit( ++ "The file is too big to fit the current workspace", ++ (Int)0, (Int)0); ++ } ++ len = (Int) fstatbuf.st_size; ++ str = NEW_STRING( len ); ++ CHARS_STRING(str)[len] = '\0'; ++ SET_LEN_STRING(str, len); ++ ptr = CSTR_STRING(str); ++ while (len > 0) { ++ l = (len > 1048576) ? 1048576 : len; ++ ret = read( syBuf[fid].fp, ptr, l); ++ if (ret == -1) { ++ SySetErrorNo(); ++ return Fail; ++ } ++ len -= ret; ++ ptr += ret; ++ } ++ syBuf[fid].ateof = 1; ++ return str; ++ } else { ++ SySetErrorNo(); ++ return Fail; ++ } ++} ++ ++Obj SyReadStringFid(Int fid) ++{ ++ if(syBuf[fid].pipe == 1) { ++ return SyReadStringFile(fid); ++ } else { ++ return SyReadStringFileStat(fid); ++ } ++} ++ ++#else ++ ++Obj SyReadStringFid(Int fid) { ++ return SyReadStringFile(fid); ++} ++ ++#endif ++ + + + /**************************************************************************** +diff --git a/src/sysfiles.h b/src/sysfiles.h +index 497acca..dbf6b19 100644 +--- a/src/sysfiles.h ++++ b/src/sysfiles.h +@@ -630,8 +630,21 @@ extern void syWinPut ( + const Char * cmd, + const Char * str ); + ++/*************************************************************************** ++ ** ++ *F SyReadStringFid( <fid> ) ++ ** - read file given by <fid> into a string ++ *F SyReadStringFile( <fid> ) ++ ** - read file given by <fid> into a string, only rely on read() ++ *F SyReadStringFileStat( <fid> ) ++ ** - read file given by <fid> into a string, use stat() to determine ++ ** size of file before reading. This does not work for pipes ++ */ ++ ++extern Obj SyReadStringFid(Int fid); ++extern Obj SyReadStringFile(Int fid); ++extern Obj SyReadStringFileGeneric(Int fid); + +- + /**************************************************************************** + ** + +diff --git a/src/system.c b/src/system.c +index 8548293..e34b898 100644 +--- a/src/system.c ++++ b/src/system.c +@@ -78,10 +78,10 @@ Int enableCodeCoverageAtStartup( Char **argv, void * dummy); + /**************************************************************************** + ** + *V SyKernelVersion . . . . . . . . . . . . . . . hard coded kernel version +-** do not edit the following line. Occurences of `4.8.3' and `today' ++** do not edit the following line. Occurences of `4.8.6' and `today' + ** will be replaced by string matching by distribution wrapping scripts. + */ +-const Char * SyKernelVersion = "4.8.3"; ++const Char * SyKernelVersion = "4.8.6"; + + /**************************************************************************** + ** +diff --git a/src/trans.c b/src/trans.c +index f7ec508..8699166 100644 +--- a/src/trans.c ++++ b/src/trans.c +@@ -421,7 +421,7 @@ Obj FuncRANK_TRANS_LIST(Obj self, Obj f, Obj list){ + rank=0; + for(i=1;i<=len;i++){ + pt=ELM_LIST(list, i); +- if(!TNUM_OBJ(pt)==T_INT||INT_INTOBJ(pt)<1){ ++ if(TNUM_OBJ(pt)!=T_INT||INT_INTOBJ(pt)<1){ + ErrorQuit("usage: the second argument <list> must be a list of positive\n integers (not a %s)", (Int)TNAM_OBJ(pt), 0L); + } + j=INT_INTOBJ(pt)-1; +@@ -439,7 +439,7 @@ Obj FuncRANK_TRANS_LIST(Obj self, Obj f, Obj list){ + rank=0; + for(i=1;i<=len;i++){ + pt=ELM_LIST(list, i); +- if(!TNUM_OBJ(pt)==T_INT||INT_INTOBJ(pt)<1){ ++ if(TNUM_OBJ(pt)!=T_INT||INT_INTOBJ(pt)<1){ + ErrorQuit("usage: the second argument <list> must be a list of positive\n integers (not a %s)", (Int)TNAM_OBJ(pt), 0L); + } + j=INT_INTOBJ(pt)-1; +diff --git a/test/Makefile.in b/test/Makefile.in +index 013b127..6de463f 100644 +--- a/test/Makefile.in ++++ b/test/Makefile.in +@@ -92,10 +92,10 @@ TESTS = test$(EXEEXT) shell$(EXEEXT) error_handler$(EXEEXT) + check_PROGRAMS = test$(EXEEXT) shell$(EXEEXT) error_handler$(EXEEXT) + subdir = test + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/m4/ld-version-script.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +@@ -430,6 +430,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + LD = @LD@ + LDFLAGS = @LDFLAGS@ ++LIBGAP_LT_VERSION = @LIBGAP_LT_VERSION@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ +-- +2.7.4.1.g5468f9e +