diff --git a/gap-enterleave.patch b/gap-enterleave.patch deleted file mode 100644 index de7db12..0000000 --- a/gap-enterleave.patch +++ /dev/null @@ -1,189 +0,0 @@ ---- src/gapstate.h.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/gapstate.h 2019-02-07 13:15:02.178599668 -0700 -@@ -97,6 +97,9 @@ typedef struct GAPState { - - UInt1 StateSlots[STATE_SLOTS_SIZE]; - -+ /* For libgap-api.c */ -+ Int EnterStackCount; -+ - /* Allocation */ - #if !defined(USE_GASMAN) - #define MAX_GC_PREFIX_DESC 4 ---- src/gasman.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/gasman.c 2019-02-07 13:15:02.181599631 -0700 -@@ -1193,6 +1193,12 @@ void SetExtraMarkFuncBags(TNumExtraMarkF - } - - -+ -+void _MarkStackBottomBags(void* StackBottom) { -+ StackBottomBags = StackBottom; -+} -+ -+ - void InitBags ( - UInt initial_size, - Bag * stack_bottom, ---- src/gasman.h.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/gasman.h 2019-02-07 13:15:02.182599619 -0700 -@@ -982,6 +982,21 @@ extern void InitCollectFuncB - typedef void (*TNumExtraMarkFuncBags)(void); - extern void SetExtraMarkFuncBags(TNumExtraMarkFuncBags func); - -+ -+#ifdef __GNUC__ -+#define MarkStackBottomBags() \ -+ _MarkStackBottomBags(__builtin_frame_address(0)); -+/* -+#else -+ * TODO: Detect the best stack frame detection technique at configure time -+ * -+#define MarkStackBottomBags() \ -+ register void* rbp asm("rbp"); \ -+ _MarkStackBottomBags(rbp); -+*/ -+#endif -+extern void _MarkStackBottomBags(void* StackBottom); -+ - /**************************************************************************** - ** - *F InitBags(...) . . . . . . . . . . . . . . . . . . . . . initialize Gasman ---- src/libgap-api.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/libgap-api.c 2019-02-07 13:15:02.183599607 -0700 -@@ -10,6 +10,8 @@ - #include "lists.h" - #include "streams.h" - #include "stringobj.h" -+#include "system.h" -+ - - // - // Setup and initialisation -@@ -60,3 +62,28 @@ Obj GAP_EvalString(const char * cmd) - res = READ_ALL_COMMANDS(instream, False, True, viewObjFunc); - return res; - } -+ -+inline syJmp_buf * _GAP_GetReadJmpError(void) -+{ -+ return &(STATE(ReadJmpError)); -+} -+ -+inline Int _GAP_GetEnterStackCount(void) -+{ -+ return STATE(EnterStackCount); -+} -+ -+inline void _GAP_IncEnterStackCount(void) -+{ -+ STATE(EnterStackCount)++; -+} -+ -+inline void _GAP_DecEnterStackCount(void) -+{ -+ STATE(EnterStackCount)--; -+} -+ -+inline void _GAP_SetEnterStackCount(Int count) -+{ -+ STATE(EnterStackCount) = count; -+} ---- src/libgap-api.h.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/libgap-api.h 2019-02-07 13:15:02.183599607 -0700 -@@ -5,9 +5,93 @@ - - #include "gap.h" - --typedef void (*CallbackFunc)(void); -+#ifdef __GNUC__ -+#define unlikely(x) __builtin_expect(!!(x), 0) -+#else -+#define unlikely(x) (x) -+#endif - --// Initialisation and finalization -+ -+#ifndef GAP_ENTER_DEBUG -+#define GAP_ENTER_DEBUG 0 -+#endif -+ -+ -+extern syJmp_buf * _GAP_GetReadJmpError(void); -+extern Int _GAP_GetEnterStackCount(void); -+extern void _GAP_IncEnterStackCount(void); -+extern void _GAP_DecEnterStackCount(void); -+extern void _GAP_SetEnterStackCount(Int count); -+ -+ -+#if GAP_ENTER_DEBUG -+#define GAP_ENTER_DEBUG_MESSAGE(message, file, line) \ -+ fprintf(stderr, "%s: %d; %s:%d\n", message, _GAP_EnterStackCount, file, line); -+#else -+#define GAP_ENTER_DEBUG_MESSAGE(message, file, line) -+#endif -+ -+ -+#define GAP_EnterStack() \ -+ GAP_ENTER_DEBUG_MESSAGE("EnterStack", __FILE__, __LINE__); \ -+ Int _gap_tmp_enter_stack_count = _GAP_GetEnterStackCount(); \ -+ if (_gap_tmp_enter_stack_count < 0) { \ -+ _GAP_SetEnterStackCount(-_gap_tmp_enter_stack_count); \ -+ } else { \ -+ if (_gap_tmp_enter_stack_count == 0) { \ -+ MarkStackBottomBags(); \ -+ } \ -+ _GAP_IncEnterStackCount(); \ -+ } -+ -+ -+#define GAP_LeaveStack() \ -+ _GAP_DecEnterStackCount(); \ -+ GAP_ENTER_DEBUG_MESSAGE("LeaveStack", __FILE__, __LINE__); -+ -+ -+static inline int _GAP_Error_Prejmp(const char* file, int line) { -+#if GAP_ENTER_DEBUG -+ GAP_ENTER_DEBUG_MESSAGE("Error_Prejmp", file, line); -+#endif -+ if (_GAP_GetEnterStackCount() > 0) { -+ return 1; -+ } -+ return 0; -+} -+ -+ -+static inline int _GAP_Error_Postjmp(int JumpRet) -+{ -+ if (unlikely(JumpRet != 0)) { -+ /* This only should have been called from the outer-most -+ * GAP_EnterStack() call so make sure it resets the EnterStackCount; We -+ * set EnterStackCount to its negative which indicates to -+ * GAP_EnterStack that we just returned from a long jump and should -+ * reset EnterStackCount to its value at the return point rather than -+ * increment it again */ -+ Int tmp_count = _GAP_GetEnterStackCount(); -+ if (tmp_count > 0) { -+ _GAP_SetEnterStackCount(-tmp_count); -+ } -+ return 0; -+ } -+ -+ return 1; -+} -+ -+#define GAP_Error_Setjmp() (_GAP_Error_Prejmp(__FILE__, __LINE__) || \ -+ _GAP_Error_Postjmp(sySetjmp(*_GAP_GetReadJmpError()))) -+ -+ -+#define GAP_Enter() GAP_Error_Setjmp(); GAP_EnterStack() -+#define GAP_Leave() GAP_LeaveStack() -+ -+ -+//// -+//// Setup and initialisation -+//// -+typedef void (*CallbackFunc)(void); - - void GAP_Initialize(int argc, - char ** argv, diff --git a/gap-erroroutput.patch b/gap-erroroutput.patch deleted file mode 100644 index 035daf7..0000000 --- a/gap-erroroutput.patch +++ /dev/null @@ -1,101 +0,0 @@ ---- src/error.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/error.c 2019-02-07 13:12:12.925660213 -0700 -@@ -33,6 +33,8 @@ - - - static Obj ErrorInner; -+static Obj ERROR_OUTPUT = NULL; -+static Obj IsOutputStream; - - - /**************************************************************************** -@@ -40,6 +42,44 @@ static Obj ErrorInner; - *F * * * * * * * * * * * * * * error functions * * * * * * * * * * * * * * * - */ - -+/**************************************************************************** -+** -+*F OpenErrorOutput() . . . . . . . open the file or stream assigned to the -+** ERROR_OUTPUT global variable defined in -+** error.g, or "*errout*" otherwise -+*/ -+UInt OpenErrorOutput( void ) -+{ -+ /* Try to print the output to stream. Use *errout* as a fallback. */ -+ UInt ret = 0; -+ -+ if (ERROR_OUTPUT != NULL) { -+ if (IsStringConv(ERROR_OUTPUT)) { -+ ret = OpenOutput(CSTR_STRING(ERROR_OUTPUT)); -+ } -+ else { -+ if (CALL_1ARGS(IsOutputStream, ERROR_OUTPUT) == True) { -+ ret = OpenOutputStream(ERROR_OUTPUT); -+ } -+ } -+ } -+ -+ if (!ret) { -+ /* It may be we already tried and failed to open *errout* above but -+ * but this is an extreme case so it can't hurt to try again -+ * anyways */ -+ ret = OpenOutput("*errout*"); -+ if (ret) { -+ Pr("failed to open error stream\n", 0, 0); -+ } -+ else { -+ Panic("failed to open *errout*"); -+ } -+ } -+ -+ return ret; -+} -+ - - /**************************************************************************** - ** -@@ -615,6 +655,8 @@ static Int InitKernel(StructInitInfo * m - InitHdlrFuncsFromTable(GVarFuncs); - - ImportFuncFromLibrary("ErrorInner", &ErrorInner); -+ ImportFuncFromLibrary("IsOutputStream", &IsOutputStream); -+ ImportGVarFromLibrary("ERROR_OUTPUT", &ERROR_OUTPUT); - - // return success - return 0; ---- src/error.h.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/error.h 2019-02-07 13:12:12.926660201 -0700 -@@ -32,6 +32,14 @@ Int RegisterBreakloopObserver(intfunc fu - - /**************************************************************************** - ** -+*F OpenErrorOutput() . . . . . . . open the file or stream assigned to the -+** ERROR_OUTPUT global variable defined in -+** error.g, or "*errout*" otherwise -+*/ -+extern UInt OpenErrorOutput(); -+ -+/**************************************************************************** -+** - *F ErrorQuit( , , ) . . . . . . . . . . . print and quit - */ - extern void ErrorQuit(const Char * msg, Int arg1, Int arg2) NORETURN; ---- src/scanner.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/scanner.c 2019-02-07 13:12:12.929660164 -0700 -@@ -16,6 +16,7 @@ - - #include "scanner.h" - -+#include "error.h" - #include "gapstate.h" - #include "gaputils.h" - #include "io.h" -@@ -42,7 +43,7 @@ static void SyntaxErrorOrWarning(const C - if (STATE(NrErrLine) == 0) { - - // open error output -- OpenOutput("*errout*"); -+ OpenErrorOutput(); - - // print the message ... - if (error) diff --git a/gap-stat.patch b/gap-stat.patch index 4184838..17efa89 100644 --- a/gap-stat.patch +++ b/gap-stat.patch @@ -1,6 +1,6 @@ ---- src/integer.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/integer.c 2019-01-21 09:40:09.127695999 -0700 -@@ -583,6 +583,41 @@ Obj ObjInt_UInt8( UInt8 i ) +--- src/integer.c.orig 2019-02-23 15:43:33.000000000 -0700 ++++ src/integer.c 2019-03-12 13:39:47.357775303 -0600 +@@ -567,6 +567,41 @@ Obj ObjInt_UInt8( UInt8 i ) #endif } @@ -42,8 +42,8 @@ /************************************************************************** ** ** Convert GAP Integers to various C types -- see header file ---- src/integer.h.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/integer.h 2019-01-21 09:32:37.988860343 -0700 +--- src/integer.h.orig 2019-02-23 15:43:33.000000000 -0700 ++++ src/integer.h 2019-03-12 13:39:47.358775285 -0600 @@ -135,6 +135,8 @@ extern Obj ObjInt_Int(Int i); extern Obj ObjInt_UInt(UInt i); extern Obj ObjInt_Int8(Int8 i); diff --git a/gap-terminal.patch b/gap-terminal.patch deleted file mode 100644 index 928592d..0000000 --- a/gap-terminal.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- src/sysfiles.c.orig 2018-11-01 16:56:12.000000000 -0600 -+++ src/sysfiles.c 2019-02-07 13:07:58.554757018 -0700 -@@ -159,21 +159,23 @@ SYS_SY_BUFFER syBuffers[32]; - /* utility to check return value of 'write' */ - ssize_t echoandcheck(int fid, const char *buf, size_t count) { - int ret; -+ static int depth = 0; -+ depth++; - if (syBuf[fid].type == gzip_socket) { - ret = gzwrite(syBuf[fid].gzfp, buf, count); -- if (ret < 0) -+ if (ret < 0 && depth == 1) - ErrorQuit( - "Could not write to compressed file, see 'LastSystemError();'\n", - 0L, 0L); - } - else { - ret = write(syBuf[fid].echo, buf, count); -- if (ret < 0) -+ if (ret < 0 && depth == 1) - ErrorQuit("Could not write to file descriptor %d, see " - "'LastSystemError();'\n", - syBuf[fid].fp, 0L); - } -- -+ depth--; - return ret; - } - -@@ -1636,21 +1638,27 @@ Int SyWrite(Int fid, const void * ptr, s - static ssize_t SyWriteandcheck(Int fid, const void * buf, size_t count) - { - int ret; -+ static int depth = 0; -+ depth++; - if (syBuf[fid].type == gzip_socket) { - ret = gzwrite(syBuf[fid].gzfp, buf, count); -- if (ret < 0) -+ if (ret < 0 && depth == 1) { - ErrorQuit( - "Cannot write to compressed file, see 'LastSystemError();'\n", - 0L, 0L); -+ } - } - else { - ret = write(syBuf[fid].fp, buf, count); -- if (ret < 0) -+ if (ret < 0 && depth == 1) { - ErrorQuit("Cannot write to file descriptor %d, see " - "'LastSystemError();'\n", - syBuf[fid].fp, 0L); -+ } - } - -+ depth--; -+ - return ret; - } - diff --git a/gap.spec b/gap.spec index d149cbc..cc258fd 100644 --- a/gap.spec +++ b/gap.spec @@ -14,7 +14,7 @@ %global gapcpu %{_build} %endif %endif -%global gaparch %{gapcpu}-%{gapbits} +%global gaparch %{gapcpu}-%{gapbits}-kv3 # When bootstrapping a new architecture, there are no GAPDoc, gap-pkg-primgrp, # gap-pkg-smallgrp, or gap-pkg-transgrp packages yet, but the gap binary @@ -30,8 +30,8 @@ %bcond_with bootstrap Name: gap -Version: 4.10.0 -Release: 2%{?dist} +Version: 4.10.1 +Release: 1%{?dist} Summary: Computational discrete algebra %global majver %(cut -d. -f1-2 <<< %{version}) @@ -50,29 +50,23 @@ Source8: update-gap-workspace.1 Source9: gap.vim # Patch applied in bootstrap mode to break circular dependencies. Patch0: %{name}-bootstrap.patch -# Sagemath patch to prevent infinite recursion on failure to write to terminal -Patch1: %{name}-terminal.patch -# Sagemath patch to add a helper function for writing error messages -Patch2: %{name}-erroroutput.patch -# Sagemath patch to bracket use of libgap and stack local GAP objects -Patch3: %{name}-enterleave.patch # This patch applies a change from Debian to allow help files to be in gzip # compressed DVI files, and also adds support for viewing with xdg-open. -Patch4: %{name}-help.patch +Patch1: %{name}-help.patch # Add conversions from long long and unsigned long long values to GAP integers. # This is needed in gap-pkg-io to convert stat information to internal form on # 32-bit systems with the 64-bit stat interface. -Patch5: %{name}-stat.patch +Patch2: %{name}-stat.patch # Fix escapes in manualindex -Patch6: %{name}-escape.patch +Patch3: %{name}-escape.patch # Fix broken references in the reference manual's lab file -Patch7: %{name}-ref.patch +Patch4: %{name}-ref.patch # Add symbols wanted by other packages to the reference manual -Patch8: %{name}-doc.patch +Patch5: %{name}-doc.patch # Fix paths in gac -Patch9: %{name}-gac.patch +Patch6: %{name}-gac.patch # Ctbl code tries to change an immutable object -Patch10: %{name}-immutable.patch +Patch7: %{name}-immutable.patch BuildRequires: desktop-file-utils BuildRequires: gcc-c++ @@ -211,9 +205,6 @@ Headers and library links for libgap. %patch5 %patch6 %patch7 -%patch8 -%patch9 -%patch10 # Get the README cp -p %{SOURCE1} README.fedora @@ -231,6 +222,7 @@ sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \ -i libtool make %{?_smp_mflags} V=1 +make %{?_smp_mflags} libgap.la # Prepare to build packages sed -i "s|@gaparch@|%{gaparch}|" bin/%{gaparch}/gac @@ -258,11 +250,20 @@ cat > macros.%{name} << EOF EOF %install +# Install the headers +mkdir -p %{buildroot}%{_includedir}/gap/hpc +cp -p src/*.h %{buildroot}%{_includedir}/gap +cp -p src/hpc/*.h %{buildroot}%{_includedir}/gap/hpc + # Install libgap -%make_install +mkdir -p %{buildroot}%{_libdir} +libtool --mode=install %{_bindir}/install -c libgap.la %{buildroot}%{_libdir} rm -f %{buildroot}%{_libdir}/*.la -# Install update-gap-workspace +# Install the binaries +mkdir -p %{buildroot}%{_bindir} +install -p -m755 gap %{buildroot}%{_bindir} +install -p -m755 gac %{buildroot}%{_bindir} install -p -m755 %{SOURCE2} %{buildroot}%{_bindir} # Install the data @@ -299,9 +300,13 @@ cp -a bin %{buildroot}%{gapdir} # Fix symlinks to the binary and source directory pushd %{buildroot}%{gapdir}/bin/%{gaparch} -rm -f gap src +rm -f gap gac src ln -s %{_bindir}/gap gap +ln -s %{_bindir}/gac gac ln -s %{_includedir}/gap src +cd ../.. +ln -s %{_bindir}/gap gap +ln -s %{_bindir}/gac gac popd # Make an empty directory to hold the GAP packages @@ -370,7 +375,7 @@ sed -e "s|GAP_DIR=.*|GAP_DIR=$PWD|" \ -e "s|GAP_EXE=.*|GAP_EXE=$PWD|" \ -i bin/gap.sh sed -i "s|80 -r|& -l $PWD|" Makefile.rules -make testinstall +make check %endif %files @@ -379,6 +384,7 @@ make testinstall %{gapdir}/bin/gap.sh %dir %{gapdir}/bin/%{gaparch}/ %{gapdir}/bin/%{gaparch}/gap +%{gapdir}/gap %{_mandir}/man1/gap.1* %{_datadir}/appdata/gap.appdata.xml %{_datadir}/applications/gap.desktop @@ -424,6 +430,7 @@ make testinstall %{gapdir}/bin/%{gaparch}/extern/ %{gapdir}/bin/%{gaparch}/src %{gapdir}/etc/ +%{gapdir}/gac %{gapdir}/gen/ %{gapdir}/src %{gapdir}/tst/ @@ -445,6 +452,10 @@ make testinstall %{_libdir}/libgap.so %changelog +* Wed Mar 20 2019 Jerry James - 4.10.1-1 +- New upstream release +- Drop upstreamed sagemath patches + * Sun Feb 17 2019 Jerry James - 4.10.0-2 - Build in non-bootstrap mode diff --git a/sources b/sources index 11a832f..6e844ca 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gap-4.10.0.tar.bz2) = 137d904ee516f56c14863ca9943627054a20bf31efbfb68e6cca19052e28f608d1b6da5ad84f394c3cfd77b8103c17772e6653b792ee98b3cc9acd6833c5982f +SHA512 (gap-4.10.1.tar.bz2) = 699794e21a4fbbc188d3649453c1709fce8f28a4b2cb14243cc72a4bfb7ba3aeb281564f34ad9aff0bf3b1743a7e24455669fd0c80bbb134e051b84676898714