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:
Jerry James 2019-02-16 09:12:12 -07:00
parent d28dc8ca77
commit 3ed98e88b7
19 changed files with 822 additions and 333 deletions

5
.gitignore vendored
View File

@ -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

View File

@ -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
View 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
View 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
View 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
View 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)

View File

@ -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
View 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

View File

@ -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
View 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

View File

@ -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
View 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.

View File

@ -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
View 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
View File

@ -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

View File

@ -1 +1 @@
autocmd BufRead,BufNewFile *.g,*.gi,*.gd set filetype=gap
autocmd BufRead,BufNewFile *.g,*.gap,*.gi,*.gd,*.grp set filetype=gap

View File

@ -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>

View File

@ -1 +1 @@
SHA512 (gap4r8p8_2017_08_20-15_12.tar.bz2) = 35162163c6619f3648ffb784b580e598f2c8faadcc98e76c29f23d85eb2ab9d839c47fb4ce73af328b51b5bcd5f82c19406b58f53983eb24832b3de8f009ba01
SHA512 (gap-4.10.0.tar.bz2) = 137d904ee516f56c14863ca9943627054a20bf31efbfb68e6cca19052e28f608d1b6da5ad84f394c3cfd77b8103c17772e6653b792ee98b3cc9acd6833c5982f

View File

@ -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"