New upstream release.
Also: - Drop upstreamed -paths patch. - Add -bootstrap patch to break circular build dependencies. - Add -escape, -ref, -doc, -gac, and -immutable patches. - Add -terminal, -erroroutput, and -enterleave patches from sagemath. - Add libgap and libgap-devel subpackages. - Move the commandline application into the main package. - Change BRs and Rs due to recent TeXLive packaging changes. - Create all of the icon sizes supported by hicolor-icon-theme. - Fix update-gap-workspace on initial build with empty workspace. - Disable hardened build, which breaks RTLD_LAZY in the module loader. - Build in bootstrap mode.
This commit is contained in:
parent
d28dc8ca77
commit
3ed98e88b7
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,4 +1 @@
|
||||
/gap4r8p5_2016_09_25-11_49.tar.bz2
|
||||
/gap4r8p6_2016_11_12-14_25.tar.bz2
|
||||
/gap4r8p7_2017_03_24-21_21.tar.bz2
|
||||
/gap4r8p8_2017_08_20-15_12.tar.bz2
|
||||
/gap*.tar.bz2
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
GAP (http://www.gap-system.org) is a system for computational discrete
|
||||
algebra. Many add-on components ("packages") are available for GAP. Most of
|
||||
algebra. Many add-on components ("packages") are available for GAP, most of
|
||||
them not yet available from Fedora. However, they can be installed locally in
|
||||
any of the following locations:
|
||||
- /usr/local/share/gap/pkg
|
||||
@ -19,8 +19,8 @@ Saved Workspaces, or How to make GAP start faster
|
||||
GAP starts slowly because it needs to parse all the libraries installed at
|
||||
start up. To make GAP start faster, it is possible to save the GAP workspace
|
||||
and reload it at the next start up. To support this, Fedora provides a
|
||||
Debian-derived script, update-gap-workspace; see the the
|
||||
update-gap-workspace(1) manual page.
|
||||
Debian-derived script, update-gap-workspace; see the update-gap-workspace(1)
|
||||
manual page.
|
||||
|
||||
Colors in the GAP shell
|
||||
-----------------------
|
||||
|
12
gap-bootstrap.patch
Normal file
12
gap-bootstrap.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- lib/system.g.orig 2018-11-01 16:56:15.000000000 -0600
|
||||
+++ lib/system.g 2019-01-24 09:33:07.685657846 -0700
|
||||
@@ -30,9 +30,6 @@ BIND_GLOBAL( "GAPInfo", rec(
|
||||
Dependencies := MakeImmutable(rec(
|
||||
NeededOtherPackages := [
|
||||
[ "gapdoc", ">= 1.2" ],
|
||||
- [ "primgrp", ">= 3.1.0" ],
|
||||
- [ "smallgrp", ">= 1.0" ],
|
||||
- [ "transgrp", ">= 1.0" ],
|
||||
],
|
||||
)),
|
||||
# There is no SuggestedOtherPackages here because the default value of
|
50
gap-doc.patch
Normal file
50
gap-doc.patch
Normal file
@ -0,0 +1,50 @@
|
||||
--- doc/ref/matobj.xml.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ doc/ref/matobj.xml 2019-02-08 14:34:13.213378845 -0700
|
||||
@@ -48,6 +48,7 @@ vectors and matrices.
|
||||
<#Include Label="MatObj_ZeroVector">
|
||||
<#Include Label="MatObj_ConstructingFilter_Vector">
|
||||
<#Include Label="MatObj_Randomize_Vectors">
|
||||
+ <#Include Label="CopySubVector">
|
||||
<#Include Label="MatObj_WeightOfVector">
|
||||
<#Include Label="MatObj_DistanceOfVectors">
|
||||
|
||||
--- doc/ref/types.xml.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ doc/ref/types.xml 2019-02-12 15:49:20.589138949 -0700
|
||||
@@ -345,6 +345,7 @@ objects. It provides automatic storing
|
||||
below).
|
||||
|
||||
<#Include Label="RepresentationsOfObject">
|
||||
+<#Include Label="IsPositionalObjectRep">
|
||||
|
||||
</Section>
|
||||
|
||||
--- lib/matobj2.gd.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ lib/matobj2.gd 2019-02-08 14:34:16.934332151 -0700
|
||||
@@ -565,8 +565,8 @@ DeclareOperation( "Randomize", [IsVector
|
||||
## <#GAPDoc Label="CopySubVector">
|
||||
## <ManSection>
|
||||
## <Oper Name="CopySubVector" Arg='dst, dcols, src, scols'/>
|
||||
-## <Description>
|
||||
## <Returns>nothing</Returns>
|
||||
+## <Description>
|
||||
## Does <C><A>dst</A>{<A>dcols</A>} := <A>src</A>{<A>scols</A>}</C>
|
||||
## without creating an intermediate object and thus - at least in
|
||||
## special cases - much more efficiently. For certain objects like
|
||||
--- lib/type.g.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ lib/type.g 2019-02-12 15:50:29.468882817 -0700
|
||||
@@ -293,6 +293,7 @@ end );
|
||||
#R IsComponentObjectRep
|
||||
#R IsDataObjectRep
|
||||
##
|
||||
+## <#GAPDoc Label="IsPositionalObjectRep">
|
||||
## <ManSection>
|
||||
## <Filt Name="IsInternalRep" Arg='obj' Type='Representation'/>
|
||||
## <Filt Name="IsPositionalObjectRep" Arg='obj' Type='Representation'/>
|
||||
@@ -303,6 +304,7 @@ end );
|
||||
## the four basic representations in &GAP;
|
||||
## </Description>
|
||||
## </ManSection>
|
||||
+## <#/GAPDoc>
|
||||
##
|
||||
DeclareRepresentation( "IsInternalRep", IS_OBJECT, [], IS_OBJECT );
|
||||
DeclareRepresentation( "IsPositionalObjectRep", IS_OBJECT, [], IS_OBJECT );
|
189
gap-enterleave.patch
Normal file
189
gap-enterleave.patch
Normal file
@ -0,0 +1,189 @@
|
||||
--- 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,
|
101
gap-erroroutput.patch
Normal file
101
gap-erroroutput.patch
Normal file
@ -0,0 +1,101 @@
|
||||
--- 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( <msg>, <arg1>, <arg2> ) . . . . . . . . . . . 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)
|
@ -1,11 +1,59 @@
|
||||
--- etc/buildman.pe.orig 2016-03-19 16:17:51.000000000 -0600
|
||||
+++ etc/buildman.pe 2016-04-02 07:40:55.865074279 -0600
|
||||
@@ -575,7 +575,7 @@ sub make_tex {
|
||||
--- doc/manualindex.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ doc/manualindex 2019-01-24 15:29:17.825867480 -0700
|
||||
@@ -9,31 +9,31 @@ makeindex -l $1.idl
|
||||
|
||||
SCANMSK: while ( $line = <MSK> ) {
|
||||
# treat the {{...}} replacements
|
||||
- while ( $line =~ /{{([^}]*)}}/ ) {
|
||||
+ while ( $line =~ /\{\{([^}]*)\}\}/ ) {
|
||||
$key = $1;
|
||||
if ( $key =~ /date/ ) {
|
||||
$replace=`date +"%d %B %Y"`;
|
||||
# put hyphenation help into long commands
|
||||
echo "Hyphenating long index entries"
|
||||
-echo '{a=index($0,"`");\
|
||||
- if (a==0) {print $0;}\
|
||||
- else {\
|
||||
- b=index($0,"'"'"'");\
|
||||
- if (b-a>40) {\
|
||||
- anf=substr($0,1,a);\
|
||||
- mid=substr($0,a+1,b-a-1);\
|
||||
- end=substr($0,b);\
|
||||
- b=length(mid);\
|
||||
- i=1;\
|
||||
- cap=1;\
|
||||
- mid2=substr(mid,1,i-1);\
|
||||
- while (i<=length(mid)) {\
|
||||
- c=substr(mid,i,1);\
|
||||
- if (c!=tolower(c)){\
|
||||
- if (cap==0) mid2 = mid2 "\\\-";\
|
||||
- cap=1;\
|
||||
- }\
|
||||
- else cap=0;\
|
||||
- mid2=mid2 c;\
|
||||
- i=i+1;\
|
||||
- }\
|
||||
- print anf mid2 end;\
|
||||
- }\
|
||||
- else print $0;\
|
||||
+echo '{a=index($0,"`");
|
||||
+ if (a==0) {print $0;}
|
||||
+ else {
|
||||
+ b=index($0,"'"'"'");
|
||||
+ if (b-a>40) {
|
||||
+ anf=substr($0,1,a);
|
||||
+ mid=substr($0,a+1,b-a-1);
|
||||
+ end=substr($0,b);
|
||||
+ b=length(mid);
|
||||
+ i=1;
|
||||
+ cap=1;
|
||||
+ mid2=substr(mid,1,i-1);
|
||||
+ while (i<=length(mid)) {
|
||||
+ c=substr(mid,i,1);
|
||||
+ if (c!=tolower(c)){
|
||||
+ if (cap==0) mid2 = mid2 "\\-";
|
||||
+ cap=1;
|
||||
+ }
|
||||
+ else cap=0;
|
||||
+ mid2=mid2 c;
|
||||
+ i=i+1;
|
||||
+ }
|
||||
+ print anf mid2 end;
|
||||
+ }
|
||||
+ else print $0;
|
||||
}
|
||||
}' >mh.awk
|
||||
cp $1.ind $1.idl
|
||||
|
33
gap-gac.patch
Normal file
33
gap-gac.patch
Normal file
@ -0,0 +1,33 @@
|
||||
--- cnf/gac.in.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ cnf/gac.in 2019-01-25 16:28:32.995611111 -0700
|
||||
@@ -51,18 +51,18 @@
|
||||
SHELL="@SHELL@"
|
||||
|
||||
# absolute path of the directory in which GAP was compiled
|
||||
-abs_top_builddir="@abs_top_builddir@"
|
||||
+abs_top_builddir="/usr/lib/gap"
|
||||
|
||||
# path of the directory the GAP sources contained in
|
||||
-abs_top_srcdir="@abs_top_srcdir@"
|
||||
+abs_top_srcdir="/usr/lib/gap"
|
||||
|
||||
#
|
||||
libdir="@libdir@"
|
||||
|
||||
# path to the GAP executable
|
||||
-gap_compiler="${abs_top_builddir}/gap"
|
||||
+gap_compiler="/usr/bin/gap"
|
||||
|
||||
-libtool="$SHELL $abs_top_builddir/libtool"
|
||||
+libtool="$SHELL /usr/bin/libtool"
|
||||
CC="@CC@"
|
||||
|
||||
# These three should be filled in by the standard autoconf procedures
|
||||
@@ -431,6 +431,5 @@ fi
|
||||
#Remove temporary directory.
|
||||
#We may assume it is empty at this stage.
|
||||
if [ "$savetemps" = "false" ]; then
|
||||
- rm -rf "${gactmp}/.libs"
|
||||
- rmdir "${gactmp}"
|
||||
+ rm -rf "${gactmp}"
|
||||
fi
|
@ -1,6 +1,6 @@
|
||||
--- lib/helpdef.gi.orig 2017-08-20 09:12:44.000000000 -0600
|
||||
+++ lib/helpdef.gi 2017-09-05 20:24:09.247455395 -0600
|
||||
@@ -269,6 +269,11 @@ HELP_BOOK_HANDLER.default.ReadSix := fun
|
||||
--- lib/helpdef.gi.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ lib/helpdef.gi 2019-01-21 09:11:54.961416746 -0700
|
||||
@@ -402,6 +402,11 @@ HELP_BOOK_HANDLER.default.ReadSix := fun
|
||||
res.pdffile := ShallowCopy(fname);
|
||||
Add(res.formats, "pdf");
|
||||
fi;
|
||||
@ -10,13 +10,13 @@
|
||||
+ Add(res.formats, "dvi");
|
||||
+ fi;
|
||||
fi;
|
||||
res.directories := Directory(fname{[1..Length(fname)-10]});
|
||||
res.directories := [ Directory(fname{[1..Length(fname)-10]}) ];
|
||||
return res;
|
||||
--- lib/helpview.gi.orig 2017-08-20 09:12:44.000000000 -0600
|
||||
+++ lib/helpview.gi 2017-09-05 20:24:09.248455393 -0600
|
||||
@@ -432,6 +432,27 @@ show := function(file)
|
||||
end
|
||||
);
|
||||
--- lib/helpview.gi.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ lib/helpview.gi 2019-01-21 09:11:54.985416307 -0700
|
||||
@@ -436,6 +436,27 @@ if IsHPCGAP then
|
||||
MakeReadOnlyObj(HELP_VIEWER_INFO);
|
||||
fi;
|
||||
|
||||
+# View HTML, DVI, or PDF files with xdg-open, which opens documents with the
|
||||
+# user's preferred application.
|
||||
|
11
gap-immutable.patch
Normal file
11
gap-immutable.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- lib/ctblfuns.gi.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ lib/ctblfuns.gi 2019-02-12 08:43:52.769804253 -0700
|
||||
@@ -4319,7 +4319,7 @@ InstallGlobalFunction( ReductionToFinite
|
||||
|
||||
if k <> 1 then
|
||||
|
||||
- primes:= PrimeDivisors( m );
|
||||
+ primes:= ShallowCopy( PrimeDivisors( m ) );
|
||||
sol:= fail;
|
||||
|
||||
while not IsEmpty( primes ) do
|
@ -1,73 +0,0 @@
|
||||
--- cnf/gac.in.orig 2016-06-04 06:41:02.000000000 -0600
|
||||
+++ cnf/gac.in 2016-06-15 08:09:24.657574013 -0600
|
||||
@@ -55,16 +55,16 @@
|
||||
## option is appended at the end of the link command after the .o
|
||||
## files to link.
|
||||
##
|
||||
-gap_bin=@gapbin@
|
||||
+gap_bin=/usr/include/gap
|
||||
|
||||
if [ "X${gap_bin}" = "X$0" ]; then
|
||||
gap_dir="../../";
|
||||
gap_compiler="./gap";
|
||||
gap_binary="./";
|
||||
else
|
||||
- gap_dir="${gap_bin}/../..";
|
||||
- gap_compiler="${gap_bin}/gap";
|
||||
- gap_binary="${gap_bin}";
|
||||
+ gap_dir=/usr/lib/gap;
|
||||
+ gap_compiler=/usr/bin/gap;
|
||||
+ gap_binary=${gap_dir}/bin/@gaparch@;
|
||||
fi
|
||||
gap_options=""
|
||||
gap_include="${gap_dir}/src"
|
||||
@@ -173,9 +173,9 @@ gap_compile () {
|
||||
##
|
||||
c_compile () {
|
||||
echo ${c_compiler} $3 -o $1 -I${gap_dir} \
|
||||
- -I${gap_bin} -DCONFIG_H -c $2
|
||||
+ -I${gap_bin} -I${gap_binary} -DCONFIG_H -c $2
|
||||
${c_compiler} $3 -o $1 -I${gap_dir} \
|
||||
- -I${gap_bin} -DCONFIG_H -c $2 || exit 1
|
||||
+ -I${gap_bin} -I${gap_binary} -DCONFIG_H -c $2 || exit 1
|
||||
}
|
||||
|
||||
|
||||
@@ -439,17 +439,17 @@ make_compstat () {
|
||||
objects="${gactmp}/$$compstat.o ${objects}"
|
||||
}
|
||||
|
||||
-make_tmpdir () {
|
||||
- basetmp=${TMPDIR:-/tmp}; #honor the TMPDIR environment variable.
|
||||
- gactmp="$basetmp/gac$$";
|
||||
- mkdir "$gactmp" || exit 1;
|
||||
-}
|
||||
+#make_tmpdir () {
|
||||
+# basetmp=${TMPDIR:-/tmp}; #honor the TMPDIR environment variable.
|
||||
+# gactmp="$basetmp/gac$$";
|
||||
+# mkdir "$gactmp" || exit 1;
|
||||
+#}
|
||||
|
||||
#On systems with mktemp(1) this function is better:
|
||||
-#make_tmpdir ()
|
||||
-#{
|
||||
-# gactmp=`mktemp -d -t "gacXXXXXXX"`;
|
||||
-#}
|
||||
+make_tmpdir ()
|
||||
+{
|
||||
+ gactmp=`mktemp -d -t "gacXXXXXXX"`;
|
||||
+}
|
||||
|
||||
#############################################################################
|
||||
##
|
||||
--- configure.orig 2016-06-04 06:41:02.000000000 -0600
|
||||
+++ configure 2016-06-15 08:09:24.678572331 -0600
|
||||
@@ -4098,7 +4098,7 @@ $as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
-gapdir=`pwd`
|
||||
+gapdir=/usr/lib/gap
|
||||
|
||||
case $target_os in
|
||||
cygwin*)
|
47
gap-ref.patch
Normal file
47
gap-ref.patch
Normal file
@ -0,0 +1,47 @@
|
||||
--- doc/ref/function.xml.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ doc/ref/function.xml 2019-01-25 07:45:01.081185307 -0700
|
||||
@@ -34,10 +34,8 @@ functions.
|
||||
|
||||
|
||||
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
|
||||
-<Section Label="Calling a function with a list argument that is interpreted as
|
||||
-several arguments">
|
||||
-<Heading>Calling a function with a list argument that is interpreted as
|
||||
-several arguments</Heading>
|
||||
+<Section Label="Calling a function with a list argument that is interpreted as several arguments">
|
||||
+<Heading>Calling a function with a list argument that is interpreted as several arguments</Heading>
|
||||
|
||||
<#Include Label="CallFuncList">
|
||||
|
||||
--- doc/ref/pperm.xml.orig 2018-11-01 16:56:12.000000000 -0600
|
||||
+++ doc/ref/pperm.xml 2019-01-24 16:06:33.538234336 -0700
|
||||
@@ -441,8 +441,7 @@ gap> EmptyPartialPerm();
|
||||
|
||||
<ManSection><Heading>RandomPartialPerm</Heading>
|
||||
<Func Name="RandomPartialPerm" Arg="n" Label="for a positive integer"/>
|
||||
- <Func Name="RandomPartialPerm" Arg="set" Label="for a set of positive
|
||||
- integers"/>
|
||||
+ <Func Name="RandomPartialPerm" Arg="set" Label="for a set of positive integers"/>
|
||||
<Func Name="RandomPartialPerm" Arg="dom, img" Label="for domain and image"/>
|
||||
<Returns>A random partial permutation.</Returns>
|
||||
<Description>
|
||||
@@ -1013,8 +1012,7 @@ gap> MultiplicativeZero(f);
|
||||
in &GAP; into partial permutations.
|
||||
|
||||
<ManSection>
|
||||
- <Oper Name="AsPartialPerm" Arg="f, set" Label="for a permutation and a set of
|
||||
- positive integers"/>
|
||||
+ <Oper Name="AsPartialPerm" Arg="f, set" Label="for a permutation and a set of positive integers"/>
|
||||
<Meth Name="AsPartialPerm" Arg="f" Label="for a permutation"/>
|
||||
<Meth Name="AsPartialPerm" Arg="f, n" Label="for a permutation and a positive integer"/>
|
||||
<Returns>A partial permutation.</Returns>
|
||||
@@ -1165,8 +1163,7 @@ gap> AsPartialPerm(f, [ 2 .. 4 ] );
|
||||
|
||||
<Mark><C>LQUO(<A>g</A>, <A>f</A>)</C></Mark>
|
||||
<Item>
|
||||
- <Index Key="LQUO" Subkey="for a permutation or partial permutation
|
||||
- and partial permutation"><C>LQUO</C></Index>
|
||||
+ <Index Key="LQUO" Subkey="for a permutation or partial permutation and partial permutation"><C>LQUO</C></Index>
|
||||
returns <C><A>g</A>^-1*<A>f</A></C>
|
||||
when <A>f</A> is a partial permutation and
|
||||
<A>g</A> is a permutation or partial permutation.
|
135
gap-stat.patch
135
gap-stat.patch
@ -1,7 +1,7 @@
|
||||
--- src/gmpints.c.orig 2016-03-19 16:35:29.000000000 -0600
|
||||
+++ src/gmpints.c 2016-04-02 07:38:28.517903402 -0600
|
||||
@@ -377,6 +377,41 @@ Obj ObjInt_UInt( UInt i )
|
||||
}
|
||||
--- 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 )
|
||||
#endif
|
||||
}
|
||||
|
||||
+Obj ObjInt_LongLong( long long i )
|
||||
@ -21,8 +21,8 @@
|
||||
+ gmp = NewBag( T_INTNEG, sizeof(i) );
|
||||
+ ull = (unsigned long long) -i;
|
||||
+ }
|
||||
+ for ( j = 0U; j < sizeof(i) / sizeof(TypLimb); j++ )
|
||||
+ ((TypLimb *)ADDR_OBJ( gmp ))[j] = ull >> (j * sizeof(TypLimb));
|
||||
+ for ( j = 0U; j < sizeof(i) / sizeof(mp_limb_t); j++ )
|
||||
+ ((mp_limb_t *)ADDR_OBJ( gmp ))[j] = ull >> (j * sizeof(mp_limb_t));
|
||||
+ return GMP_NORMALIZE( gmp );
|
||||
+}
|
||||
+
|
||||
@ -34,119 +34,22 @@
|
||||
+ if ( i < 1ULL<<NR_SMALL_INT_BITS )
|
||||
+ return INTOBJ_INT((Int) i);
|
||||
+ gmp = NewBag( T_INTPOS, sizeof(i) );
|
||||
+ for ( j = 0U; j < sizeof(i) / sizeof(TypLimb); j++ )
|
||||
+ ((TypLimb *)ADDR_OBJ( gmp ))[j] = i >> (j * sizeof(TypLimb));
|
||||
+ for ( j = 0U; j < sizeof(i) / sizeof(mp_limb_t); j++ )
|
||||
+ ((mp_limb_t *)ADDR_OBJ( gmp ))[j] = i >> (j * sizeof(mp_limb_t));
|
||||
+ return GMP_NORMALIZE( gmp );
|
||||
+}
|
||||
+
|
||||
|
||||
/****************************************************************************
|
||||
/**************************************************************************
|
||||
**
|
||||
--- src/gmpints.h.orig 2016-03-19 16:35:29.000000000 -0600
|
||||
+++ src/gmpints.h 2016-04-02 07:38:28.518903322 -0600
|
||||
@@ -87,6 +87,21 @@ typedef mp_size_t TypGMPSize;
|
||||
Obj ObjInt_Int(Int i);
|
||||
Obj ObjInt_UInt(UInt i);
|
||||
** 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
|
||||
@@ -135,6 +135,8 @@ extern Obj ObjInt_Int(Int i);
|
||||
extern Obj ObjInt_UInt(UInt i);
|
||||
extern Obj ObjInt_Int8(Int8 i);
|
||||
extern Obj ObjInt_UInt8(UInt8 i);
|
||||
+extern Obj ObjInt_LongLong(long long i);
|
||||
+extern Obj ObjInt_ULongLong(unsigned long long i);
|
||||
|
||||
+
|
||||
+/**************************************************************************
|
||||
+** The following two functions convert a C long long or unsigned long long
|
||||
+** respectively into* a GAP integer, either an immediate, small integer if
|
||||
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
|
||||
+**
|
||||
+*F ObjInt_LongLong(long long i)
|
||||
+*F ObjInt_ULongLong(unsigned long long i)
|
||||
+**
|
||||
+****************************************************************************/
|
||||
+
|
||||
+Obj ObjInt_LongLong(long long i);
|
||||
+Obj ObjInt_ULongLong(unsigned long long i);
|
||||
+
|
||||
+
|
||||
/****************************************************************************
|
||||
/**************************************************************************
|
||||
**
|
||||
*/
|
||||
--- src/integer.c.orig 2016-03-19 16:35:29.000000000 -0600
|
||||
+++ src/integer.c 2016-04-02 07:38:28.520903161 -0600
|
||||
@@ -216,6 +216,58 @@ Obj ObjInt_UInt(UInt i)
|
||||
}
|
||||
|
||||
|
||||
+/**************************************************************************
|
||||
+** The following two functions convert a C long long or unsigned long long
|
||||
+** respectively into a GAP integer, either an immediate, small integer if
|
||||
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
|
||||
+**
|
||||
+*F ObjInt_LongLong(long long i)
|
||||
+*F ObjInt_ULongLong(unsigned long long i)
|
||||
+**
|
||||
+****************************************************************************/
|
||||
+
|
||||
+#define NDIGITS_RAW (sizeof (long long) / sizeof (TypDigit))
|
||||
+#define NDIGITS (NDIGITS_RAW >= 4U ? NDIGITS_RAW : 4U)
|
||||
+
|
||||
+Obj ObjInt_LongLong(long long i)
|
||||
+{
|
||||
+ Obj n;
|
||||
+ long long bound = 1LL << NR_SMALL_INT_BITS;
|
||||
+ if (i >= bound) {
|
||||
+ /* We have to make a big integer */
|
||||
+ size_t j;
|
||||
+ n = NewBag(T_INTPOS, NDIGITS);
|
||||
+ for ( j = 0U; j < NDIGITS; j++ )
|
||||
+ ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS));
|
||||
+ return n;
|
||||
+ } else if (-i > bound) {
|
||||
+ size_t j;
|
||||
+ n = NewBag(T_INTNEG, NDIGITS);
|
||||
+ for ( j = 0U; j < NDIGITS; j++ )
|
||||
+ ADDR_INT(n)[j] = (TypDigit) ((-i) >> (j * NR_DIGIT_BITS));
|
||||
+ return n;
|
||||
+ } else {
|
||||
+ return INTOBJ_INT((Int) i);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+Obj ObjInt_ULongLong(unsigned long long i)
|
||||
+{
|
||||
+ Obj n;
|
||||
+ unsigned long long bound = 1ULL << NR_SMALL_INT_BITS;
|
||||
+ if (i >= bound) {
|
||||
+ /* We have to make a big integer */
|
||||
+ size_t j;
|
||||
+ n = NewBag(T_INTPOS, NDIGITS);
|
||||
+ for ( j = 0U; j < NDIGITS; j++ )
|
||||
+ ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS));
|
||||
+ return n;
|
||||
+ } else {
|
||||
+ return INTOBJ_INT((Int) i);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
--- src/integer.h.orig 2016-03-19 16:35:29.000000000 -0600
|
||||
+++ src/integer.h 2016-04-02 07:38:28.521903081 -0600
|
||||
@@ -59,6 +59,20 @@ Obj ObjInt_Int(Int i);
|
||||
Obj ObjInt_UInt(UInt i);
|
||||
|
||||
|
||||
+/**************************************************************************
|
||||
+** The following two functions convert a C long long or unsigned long long
|
||||
+** respectively into a GAP integer, either an immediate, small integer if
|
||||
+** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG.
|
||||
+**
|
||||
+*F ObjInt_LongLong(long long i)
|
||||
+*F ObjInt_ULongLong(unsigned long long i)
|
||||
+**
|
||||
+****************************************************************************/
|
||||
+
|
||||
+Obj ObjInt_LongLong(long long i);
|
||||
+Obj ObjInt_ULongLong(unsigned long long i);
|
||||
+
|
||||
+
|
||||
/****************************************************************************
|
||||
**
|
||||
*F PrintInt( <int> ) . . . . . . . . . . . . . . . print an integer constant
|
||||
|
59
gap-terminal.patch
Normal file
59
gap-terminal.patch
Normal file
@ -0,0 +1,59 @@
|
||||
--- 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;
|
||||
}
|
||||
|
336
gap.spec
336
gap.spec
@ -1,17 +1,34 @@
|
||||
%global upstreamver 4r8p8
|
||||
%global pkgdate 2017_08_20-15_12
|
||||
%global gapdirname gap%(cut -dp -f1 <<< %upstreamver)
|
||||
# The module loader does not work with PIE
|
||||
%undefine _hardened_build
|
||||
|
||||
%global gapdir %{_prefix}/lib/gap
|
||||
%global icondir %{_datadir}/icons/hicolor
|
||||
%global gapbits default%{__isa_bits}
|
||||
%global gaparch %{_build}-%{gapbits}
|
||||
|
||||
# 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
|
||||
# refuses to run unless all four are present. Therefore, build as follows:
|
||||
# 1. Build this package in bootstrap mode.
|
||||
# 2. Build GAPDoc.
|
||||
# 3. Build gap-pkg-primgrp and gap-pkg-transgrp.
|
||||
# 4. Build gap-pkg-autodoc in bootstrap mode.
|
||||
# 5. Build gap-pkg-io
|
||||
# 6. Build gap-pkg-autodoc in non-bootstrap mode.
|
||||
# 7. Build gap-pkg-smallgrp.
|
||||
# 8. Build this package in non-bootstrap mode.
|
||||
%bcond_without bootstrap
|
||||
|
||||
Name: gap
|
||||
Version: %(sed -r "s/r|p/./g" <<< %upstreamver)
|
||||
Release: 5%{?dist}
|
||||
Version: 4.10.0
|
||||
Release: 0%{?dist}
|
||||
Summary: Computational discrete algebra
|
||||
|
||||
%global majver %(cut -d. -f1-2 <<< %{version})
|
||||
|
||||
License: GPLv2+
|
||||
URL: http://www.gap-system.org/
|
||||
Source0: http://www.gap-system.org/pub/gap/gap48/tar.bz2/%{name}%{upstreamver}_%{pkgdate}.tar.bz2
|
||||
Source0: https://www.gap-system.org/pub/gap/gap-%{majver}/tar.bz2/%{name}-%{version}.tar.bz2
|
||||
Source1: gap-README.fedora
|
||||
Source2: update-gap-workspace
|
||||
Source3: gap.xml
|
||||
@ -21,55 +38,63 @@ Source6: gap.1.in
|
||||
Source7: gac.1.in
|
||||
Source8: update-gap-workspace.1
|
||||
Source9: gap.vim
|
||||
# This patch from Debian rearranges some paths to match Linux conventions.
|
||||
Patch0: %{name}-paths.patch
|
||||
# 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.
|
||||
Patch1: %{name}-help.patch
|
||||
# Filed as an upstream git pull request. Force use of the 64-bit stat()
|
||||
# routines to avoid overflow of the inode and size fields. The functions
|
||||
# supplied by this patch are used by gap-pkg-io.
|
||||
Patch2: %{name}-stat.patch
|
||||
|
||||
# Fix some unescaped curly braces in the tools
|
||||
Patch100: %{name}-escape.patch
|
||||
Patch4: %{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
|
||||
# Fix escapes in manualindex
|
||||
Patch6: %{name}-escape.patch
|
||||
# Fix broken references in the reference manual's lab file
|
||||
Patch7: %{name}-ref.patch
|
||||
# Add symbols wanted by other packages to the reference manual
|
||||
Patch8: %{name}-doc.patch
|
||||
# Fix paths in gac
|
||||
Patch9: %{name}-gac.patch
|
||||
# Ctbl code tries to change an immutable object
|
||||
Patch10: %{name}-immutable.patch
|
||||
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: ghostscript
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: m4
|
||||
BuildRequires: libtool
|
||||
BuildRequires: netpbm-progs
|
||||
BuildRequires: parallel
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: procps
|
||||
BuildRequires: readline-devel
|
||||
BuildRequires: tex(a4wide.sty)
|
||||
BuildRequires: tex(color.cfg)
|
||||
BuildRequires: tex(color.sty)
|
||||
BuildRequires: tex(english.ldf)
|
||||
BuildRequires: tex(enumitem.sty)
|
||||
BuildRequires: tex(fancyvrb.sty)
|
||||
BuildRequires: tex(language.dat)
|
||||
BuildRequires: tex(pslatex.sty)
|
||||
BuildRequires: tex(psnfss.map)
|
||||
BuildRequires: tex(updmap-hdr.cfg)
|
||||
BuildRequires: tex-bibtex
|
||||
BuildRequires: tex-cm
|
||||
BuildRequires: tex(tex)
|
||||
BuildRequires: tex-cm-super
|
||||
BuildRequires: tex-dvips
|
||||
BuildRequires: tex-ec
|
||||
BuildRequires: tex-gsftopk
|
||||
BuildRequires: tex-helvetic
|
||||
BuildRequires: tex-latex-bin
|
||||
BuildRequires: tex-makeindex
|
||||
BuildRequires: tex-mfware
|
||||
BuildRequires: tex-rsfs
|
||||
BuildRequires: tex-symbol
|
||||
BuildRequires: tex-times
|
||||
BuildRequires: zlib-devel
|
||||
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: %{name}-core%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-online-help = %{version}-%{release}
|
||||
# The gap binary executes gunzip
|
||||
Requires: gzip
|
||||
Requires: hicolor-icon-theme
|
||||
|
||||
%description
|
||||
GAP is a system for computational discrete algebra, with particular
|
||||
@ -80,23 +105,26 @@ of algebraic objects. GAP is used in research and teaching for studying
|
||||
groups and their representations, rings, vector spaces, algebras,
|
||||
combinatorial structures, and more.
|
||||
|
||||
This is a metapackage that requires the standard GAP components.
|
||||
This package contains the commandline application.
|
||||
|
||||
%package libs
|
||||
Summary: Essential GAP libraries
|
||||
BuildArch: noarch
|
||||
|
||||
%description libs
|
||||
This package contains the essential GAP libraries: lib and grp, as well as
|
||||
the primitive, small, and transitive group databases.
|
||||
This package contains the essential GAP libraries: lib and grp.
|
||||
|
||||
%package core
|
||||
Summary: GAP core components
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
%if %{without bootstrap}
|
||||
Requires: GAPDoc
|
||||
# The gap binary executes gunzip
|
||||
Requires: gzip
|
||||
Requires: hicolor-icon-theme
|
||||
Requires: gap-pkg-primgrp
|
||||
Requires: gap-pkg-smallgrp
|
||||
Requires: gap-pkg-transgrp
|
||||
%endif
|
||||
|
||||
Suggests: catdoc
|
||||
|
||||
%description core
|
||||
This package contains the core GAP system.
|
||||
@ -112,10 +140,9 @@ online help system.
|
||||
|
||||
%package devel
|
||||
Summary: GAP compiler and development files
|
||||
Requires: %{name}-core%{?isa} = %{version}-%{release}
|
||||
Requires: %{name}-online-help = %{version}-%{release}
|
||||
Requires: gcc
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: gmp-devel%{?_isa}
|
||||
Requires: libtool
|
||||
|
||||
%description devel
|
||||
This package contains the GAP compiler (gac) and the header files necessary
|
||||
@ -131,75 +158,108 @@ BuildArch: noarch
|
||||
This package provides VIM add-on files to support editing GAP sources.
|
||||
Both syntax highlighting and indentation are supported.
|
||||
|
||||
%package -n libgap
|
||||
Summary: Library containing core GAP logic
|
||||
Requires: %{name}-core%{?_isa} = %{version}-%{release}
|
||||
# The code executes gunzip
|
||||
Requires: gzip
|
||||
# The packages that GAP itself considers default
|
||||
Requires: gap-pkg-autpgrp
|
||||
Requires: gap-pkg-alnuth
|
||||
Requires: gap-pkg-crisp
|
||||
Requires: gap-pkg-ctbllib
|
||||
Requires: gap-pkg-factint
|
||||
Requires: gap-pkg-fga
|
||||
Requires: gap-pkg-irredsol
|
||||
Requires: gap-pkg-laguna
|
||||
Requires: gap-pkg-polenta
|
||||
Requires: gap-pkg-polycyclic
|
||||
Requires: gap-pkg-resclasses
|
||||
Requires: gap-pkg-sophus
|
||||
Requires: gap-pkg-tomlib
|
||||
|
||||
%description -n libgap
|
||||
Library containing core GAP logic
|
||||
|
||||
%package -n libgap-devel
|
||||
Summary: Headers and library links for libgap
|
||||
Requires: gap-devel = %{version}-%{release}
|
||||
Requires: libgap = %{version}-%{release}
|
||||
|
||||
%description -n libgap-devel
|
||||
Headers and library links for libgap.
|
||||
|
||||
%prep
|
||||
%setup -q -n %{gapdirname}
|
||||
%setup -q
|
||||
%if %{with bootstrap}
|
||||
%patch0
|
||||
%endif
|
||||
%patch1
|
||||
%patch2
|
||||
|
||||
# Replace the CFLAGS and LDFLAGS
|
||||
sed -re "s|(gp_cv_prog_cc_cdynoptions=)\"-fPIC -Wall -O2|\1\"\$RPM_OPT_FLAGS -fPIC -D_GNU_SOURCE|" \
|
||||
-e "s|(gp_cv_prog_cc_cdynlinking=)\"-shared -g[[:digit:]]*|\1\"\-Wl,-z,relro -shared|" \
|
||||
-i cnf/configure.out
|
||||
%patch3
|
||||
%patch4
|
||||
%patch5
|
||||
%patch6
|
||||
%patch7
|
||||
%patch8
|
||||
%patch9
|
||||
%patch10
|
||||
|
||||
# Get the README
|
||||
cp -p %{SOURCE1} README.fedora
|
||||
|
||||
# Unpack the tools
|
||||
pushd etc
|
||||
./install-tools.sh
|
||||
popd
|
||||
mv doc/gapmacrodoc.pdf .
|
||||
|
||||
# Fix unescaped curly braces in the tools
|
||||
%patch100
|
||||
|
||||
%build
|
||||
# -Wl,-z,now breaks use of RTLD_LAZY
|
||||
%configure --with-gmp=system LIBS="-lm" LDFLAGS="-Wl,-z,relro" \
|
||||
CPPFLAGS='-D_GNU_SOURCE -DSYS_DEFAULT_PATHS=\"%{gapdir}\"'
|
||||
make %{?_smp_mflags}
|
||||
export LDFLAGS="-Wl,-z,relro -Wl,--as-needed"
|
||||
export CPPFLAGS='-DSYS_DEFAULT_PATHS="\"%{gapdir}\""'
|
||||
export STRIP=%{_bindir}/true
|
||||
%configure
|
||||
|
||||
# Get the value of the GAParch variable
|
||||
source ./sysinfo.gap
|
||||
# Get rid of undesirable hardcoded rpaths
|
||||
sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
|
||||
-e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
|
||||
-i.orig libtool
|
||||
|
||||
make %{?_smp_mflags} V=1
|
||||
|
||||
# Prepare to build packages
|
||||
sed -i "s|@gaparch@|$GAParch|" bin/$GAParch/gac
|
||||
mkdir -p bin/$GAParch/extern/gmp/include
|
||||
ln -s %{_includedir}/gmp.h bin/$GAParch/extern/gmp/include
|
||||
sed -i "s|@gaparch@|%{gaparch}|" bin/%{gaparch}/gac
|
||||
mkdir -p bin/%{gaparch}/extern/gmp/include
|
||||
ln -s %{_includedir}/gmp.h bin/%{gaparch}/extern/gmp/include
|
||||
|
||||
# Rebuild the manuals from source
|
||||
export GAP_DIR=$PWD
|
||||
make manuals
|
||||
|
||||
# Compress help files
|
||||
find doc -name \*.toc | parallel %{?_smp_mflags} --no-notice gzip --best
|
||||
# Manually fix up a broken lab entry
|
||||
sed -i 's/ / /g;/Calling a function/N;s/\n/ /' doc/ref/manual.lab
|
||||
|
||||
# Compress large group files
|
||||
find -O3 small -mindepth 2 -type f | \
|
||||
parallel %{?_smp_mflags} --no-notice gzip --best -f
|
||||
parallel %{?_smp_mflags} --no-notice gzip --best ::: prim/grps/*.g trans/*.grp
|
||||
# Remove build paths
|
||||
sed -i "s|$PWD|%{gapdir}|g" sysinfo.gap bin/gap.sh bin/%{gaparch}/gac doc/make_doc
|
||||
|
||||
# Fix mangled paths in gap.sh
|
||||
sed -i "s|^\(GAP_EXE=\).*|\1%{_bindir}|;/ GAP_EXE=/d" bin/gap.sh
|
||||
|
||||
# Create an RPM macro file for GAP packages
|
||||
cat > macros.%{name} << EOF
|
||||
%%_gap_version %{version}
|
||||
%%_gap_upstream_version %{upstreamver}
|
||||
%%_gap_dir %{gapdir}
|
||||
%%_gap_arch %{gaparch}
|
||||
EOF
|
||||
|
||||
%install
|
||||
# Get the value of the GAParch variable
|
||||
source ./sysinfo.gap
|
||||
# Install libgap
|
||||
%make_install
|
||||
rm -f %{buildroot}%{_libdir}/*.la
|
||||
|
||||
# Install the binaries
|
||||
mkdir -p %{buildroot}%{_bindir}
|
||||
ln -s %{gapdir}/bin/gap.sh %{buildroot}%{_bindir}/gap
|
||||
cp -p %{SOURCE2} %{buildroot}%{_bindir}
|
||||
# Install update-gap-workspace
|
||||
install -p -m755 %{SOURCE2} %{buildroot}%{_bindir}
|
||||
|
||||
# Install the data
|
||||
mkdir -p %{buildroot}%{gapdir}/etc
|
||||
cp -a grp lib prim small trans tst %{buildroot}%{gapdir}
|
||||
cp -p etc/{convert.pl,packpack,buildman.pe} %{buildroot}%{gapdir}/etc
|
||||
cp -a grp lib tst %{buildroot}%{gapdir}
|
||||
cp -p etc/convert.pl %{buildroot}%{gapdir}/etc
|
||||
rm -f %{buildroot}%{gapdir}/tst/mockpkg/doc/.gitignore
|
||||
|
||||
# Install the arch-specific files
|
||||
cp -a sysinfo.gap* %{buildroot}%{gapdir}
|
||||
@ -208,28 +268,44 @@ cp -a sysinfo.gap* %{buildroot}%{gapdir}
|
||||
mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}
|
||||
touch %{buildroot}%{_localstatedir}/lib/%{name}/workspace.gz
|
||||
|
||||
# Install the header and object files where the GAP compiler can find them
|
||||
mkdir -p %{buildroot}%{gapdir}/src
|
||||
cp -p src/*.h %{buildroot}%{gapdir}/src
|
||||
mkdir -p %{buildroot}%{gapdir}/bin
|
||||
sed 's,/usr/bin/env bash,/bin/bash,' bin/BuildPackages.sh > \
|
||||
%{buildroot}%{gapdir}/bin/BuildPackages.sh
|
||||
chmod 0755 %{buildroot}%{gapdir}/bin/BuildPackages.sh
|
||||
touch -r bin/BuildPackages.sh %{buildroot}%{gapdir}/bin/BuildPackages.sh
|
||||
cp -p bin/gap*.sh %{buildroot}%{gapdir}/bin
|
||||
cp -a bin/$GAParch %{buildroot}%{gapdir}/bin
|
||||
# Make a link to the headers so the GAP compiler can find them
|
||||
ln -s %{_includedir}/gap %{buildroot}%{gapdir}/src
|
||||
|
||||
# Install config.h
|
||||
mkdir -p %{buildroot}%{gapdir}/gen
|
||||
cp -p gen/gap_version.c %{buildroot}%{gapdir}/gen
|
||||
cp -p gen/config.h %{buildroot}%{_includedir}/gap
|
||||
ln -s %{_includedir}/gap %{buildroot}%{gapdir}/gen/config.h
|
||||
|
||||
# Munge the header files
|
||||
for fil in %{buildroot}%{_includedir}/gap/{*.h,hpc/*.h}; do
|
||||
sed -i.orig 's,^\(#[[:blank:]]*include[[:blank:]]*\)"\(.*\)",\1<gap/\2>,' $fil
|
||||
touch -r $fil.orig $fil
|
||||
rm -f $fil.orig
|
||||
done
|
||||
|
||||
# Install the binaries
|
||||
cp -a bin %{buildroot}%{gapdir}
|
||||
|
||||
# Fix symlinks to the binary and source directory
|
||||
pushd %{buildroot}%{gapdir}/bin/%{gaparch}
|
||||
rm -f gap src
|
||||
ln -s %{_bindir}/gap gap
|
||||
ln -s %{_includedir}/gap src
|
||||
popd
|
||||
|
||||
# Make an empty directory to hold the GAP packages
|
||||
mkdir -p %{buildroot}%{gapdir}/pkg
|
||||
|
||||
# Intall the documentation
|
||||
cp -a doc %{buildroot}%{gapdir}
|
||||
rm -f %{buildroot}%{gapdir}/doc/*.in
|
||||
rm -f %{buildroot}%{gapdir}/doc/*/*.{aux,bbl,blg,brf,idx,ilg,ind,log,out,pnr}
|
||||
chmod a+x %{buildroot}%{gapdir}/doc/manualindex
|
||||
|
||||
# Install the icon; the original is 1024x1024
|
||||
bmptopnm bin/gapicon.bmp > gapicon.pnm
|
||||
for size in 32 48 64 96 128 192 256 512; do
|
||||
bmptopnm cnf/cygwin/gapicon.bmp > gapicon.pnm
|
||||
for size in 16 22 24 32 36 48 64 72 96 128 192 256 512; do
|
||||
mkdir -p %{buildroot}%{icondir}/${size}x${size}/apps
|
||||
pamscale -xsize=$size -ysize=$size gapicon.pnm | pnmtopng -compression=9 \
|
||||
> %{buildroot}%{icondir}/${size}x${size}/apps/%{name}.png
|
||||
@ -254,9 +330,9 @@ cp -p macros.%{name} %{buildroot}%{_rpmconfigdir}/macros.d
|
||||
|
||||
# Install the VIM support
|
||||
mkdir -p %{buildroot}%{_datadir}/vim/vimfiles/indent
|
||||
cp -p etc/gap_indent.vim %{buildroot}%{_datadir}/vim/vimfiles/indent
|
||||
cp -p etc/vim/gap_indent.vim %{buildroot}%{_datadir}/vim/vimfiles/indent
|
||||
mkdir -p %{buildroot}%{_datadir}/vim/vimfiles/syntax
|
||||
cp -p etc/gap.vim %{buildroot}%{_datadir}/vim/vimfiles/syntax
|
||||
cp -p etc/vim/gap.vim %{buildroot}%{_datadir}/vim/vimfiles/syntax
|
||||
mkdir -p %{buildroot}%{_datadir}/vim/vimfiles/ftdetect
|
||||
cp -p %{SOURCE9} %{buildroot}%{_datadir}/vim/vimfiles/ftdetect
|
||||
|
||||
@ -278,46 +354,49 @@ fi
|
||||
%{_bindir}/update-gap-workspace > /dev/null || :
|
||||
|
||||
%check
|
||||
export LC_ALL=C.UTF-8
|
||||
sed -e "s|^GAP_DIR=.*|GAP_DIR=$PWD|" \
|
||||
-e "s|\$GAP_DIR/bin/\$GAP_PRG|$PWD/bin/\$GAP_PRG|" \
|
||||
-i bin/gap.sh bin/gap-default*.sh
|
||||
sed -i "s|80 -r|& -l $PWD|" Makefile-default*
|
||||
-i bin/gap.sh
|
||||
sed -i "s|80 -r|& -l $PWD|" Makefile.rules
|
||||
make testinstall
|
||||
|
||||
%files
|
||||
# No files in the metapackage
|
||||
|
||||
%files libs
|
||||
%doc small/README
|
||||
%license etc/GPL
|
||||
%dir %{gapdir}
|
||||
%{gapdir}/grp/
|
||||
%{gapdir}/lib/
|
||||
%{gapdir}/prim/
|
||||
%{gapdir}/small/
|
||||
%{gapdir}/trans/
|
||||
|
||||
%files core
|
||||
%doc README.fedora
|
||||
%{_bindir}/gap
|
||||
%{_bindir}/update-gap-workspace
|
||||
%{gapdir}/bin/
|
||||
%exclude %{gapdir}/bin/*/gac
|
||||
%{gapdir}/sysinfo.gap*
|
||||
%{gapdir}/pkg/
|
||||
%{gapdir}/bin/gap.sh
|
||||
%dir %{gapdir}/bin/%{gaparch}/
|
||||
%{gapdir}/bin/%{gaparch}/gap
|
||||
%{_mandir}/man1/gap.1*
|
||||
%{_mandir}/man1/update-gap-workspace.1*
|
||||
%{_datadir}/appdata/gap.appdata.xml
|
||||
%{_datadir}/applications/gap.desktop
|
||||
%{_datadir}/mime/packages/gap.xml
|
||||
%{icondir}/16x16/apps/gap.png
|
||||
%{icondir}/22x22/apps/gap.png
|
||||
%{icondir}/24x24/apps/gap.png
|
||||
%{icondir}/32x32/apps/gap.png
|
||||
%{icondir}/36x36/apps/gap.png
|
||||
%{icondir}/48x48/apps/gap.png
|
||||
%{icondir}/64x64/apps/gap.png
|
||||
%{icondir}/72x72/apps/gap.png
|
||||
%{icondir}/96x96/apps/gap.png
|
||||
%{icondir}/128x128/apps/gap.png
|
||||
%{icondir}/192x192/apps/gap.png
|
||||
%{icondir}/256x256/apps/gap.png
|
||||
%{icondir}/512x512/apps/gap.png
|
||||
|
||||
%files libs
|
||||
%license LICENSE
|
||||
%dir %{gapdir}
|
||||
%{gapdir}/grp/
|
||||
%{gapdir}/lib/
|
||||
|
||||
%files core
|
||||
%{_bindir}/update-gap-workspace
|
||||
%{gapdir}/pkg/
|
||||
%{gapdir}/sysinfo.gap
|
||||
%{gapdir}/sysinfo.gap-%{gapbits}
|
||||
%{_mandir}/man1/update-gap-workspace.1*
|
||||
%dir %{_localstatedir}/lib/%{name}/
|
||||
%verify(user group mode) %{_localstatedir}/lib/%{name}/workspace.gz
|
||||
|
||||
@ -325,22 +404,49 @@ make testinstall
|
||||
%{gapdir}/doc/
|
||||
|
||||
%files devel
|
||||
%doc etc/README.tools gapmacrodoc.pdf
|
||||
%doc doc/gapmacrodoc.pdf
|
||||
%{_bindir}/gac
|
||||
%{gapdir}/bin/BuildPackages.sh
|
||||
%{gapdir}/bin/*/gac
|
||||
%{gapdir}/bin/%{gaparch}/gac
|
||||
%{gapdir}/bin/%{gaparch}/config.h
|
||||
%{gapdir}/bin/%{gaparch}/extern/
|
||||
%{gapdir}/bin/%{gaparch}/src
|
||||
%{gapdir}/etc/
|
||||
%{gapdir}/src/
|
||||
%{gapdir}/gen/
|
||||
%{gapdir}/src
|
||||
%{gapdir}/tst/
|
||||
%{_includedir}/gap/
|
||||
%{_mandir}/man1/gac.1*
|
||||
%{_rpmconfigdir}/macros.d/macros.%{name}
|
||||
|
||||
%files vim
|
||||
%doc etc/debug.vim etc/debugvim.txt etc/README.vim-utils
|
||||
%doc etc/vim/debug.vim etc/vim/debugvim.txt etc/vim/README.vim-utils
|
||||
%{_datadir}/vim/vimfiles/ftdetect/gap.vim
|
||||
%{_datadir}/vim/vimfiles/indent/gap_indent.vim
|
||||
%{_datadir}/vim/vimfiles/syntax/gap.vim
|
||||
|
||||
%files -n libgap
|
||||
%{_libdir}/libgap.so.0
|
||||
%{_libdir}/libgap.so.0.*
|
||||
|
||||
%files -n libgap-devel
|
||||
%{_libdir}/libgap.so
|
||||
|
||||
%changelog
|
||||
* Fri Feb 1 2019 Jerry James <loganjerry@gmail.com> - 4.10.0-0
|
||||
- New upstream release
|
||||
- Drop upstreamed -paths patch
|
||||
- Add -bootstrap patch to break circular build dependencies
|
||||
- Add -escape, -ref, -doc, -gac, and -immutable patches
|
||||
- Add -terminal, -erroroutput, and -enterleave patches from sagemath
|
||||
- Add libgap and libgap-devel subpackages
|
||||
- Move the commandline application into the main package
|
||||
- Change BRs and Rs due to recent TeXLive packaging changes
|
||||
- Create all of the icon sizes supported by hicolor-icon-theme
|
||||
- Fix update-gap-workspace on initial build with empty workspace
|
||||
- Disable hardened build, which breaks RTLD_LAZY in the module loader
|
||||
- Build in bootstrap mode
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.8.8-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
|
2
gap.vim
2
gap.vim
@ -1 +1 @@
|
||||
autocmd BufRead,BufNewFile *.g,*.gi,*.gd set filetype=gap
|
||||
autocmd BufRead,BufNewFile *.g,*.gap,*.gi,*.gd,*.grp set filetype=gap
|
||||
|
4
gap.xml
4
gap.xml
@ -2,6 +2,10 @@
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-gap">
|
||||
<comment>GAP input</comment>
|
||||
<glob pattern="*.g"/>
|
||||
<glob pattern="*.gap"/>
|
||||
<glob pattern="*.gi"/>
|
||||
<glob pattern="*.gd"/>
|
||||
<glob pattern="*.grp"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (gap4r8p8_2017_08_20-15_12.tar.bz2) = 35162163c6619f3648ffb784b580e598f2c8faadcc98e76c29f23d85eb2ab9d839c47fb4ce73af328b51b5bcd5f82c19406b58f53983eb24832b3de8f009ba01
|
||||
SHA512 (gap-4.10.0.tar.bz2) = 137d904ee516f56c14863ca9943627054a20bf31efbfb68e6cca19052e28f608d1b6da5ad84f394c3cfd77b8103c17772e6653b792ee98b3cc9acd6833c5982f
|
||||
|
@ -24,7 +24,9 @@ delete) echo -n "Deleting GAP workspace $WORKSPACE.gz: "
|
||||
rm -f $WORKSPACE.gz
|
||||
mkdir -p `dirname $WORKSPACE`
|
||||
echo 'SaveWorkspace("'$WORKSPACE'");' | $GAP -q -r -R >/dev/null
|
||||
gzip --best $WORKSPACE
|
||||
if [ -e $WORKSPACE ]; then
|
||||
gzip --best $WORKSPACE
|
||||
fi
|
||||
echo "done.";;
|
||||
*)
|
||||
echo "$0 update"
|
||||
|
Loading…
Reference in New Issue
Block a user