From 3ed98e88b72010449f3ab3c19f837a54f6ab2353 Mon Sep 17 00:00:00 2001 From: Jerry James Date: Feb 16 2019 16:12:12 +0000 Subject: 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. --- diff --git a/.gitignore b/.gitignore index ce92509..96dfb68 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/gap-README.fedora b/gap-README.fedora index a947263..6cf86d5 100644 --- a/gap-README.fedora +++ b/gap-README.fedora @@ -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 ----------------------- diff --git a/gap-bootstrap.patch b/gap-bootstrap.patch new file mode 100644 index 0000000..a133447 --- /dev/null +++ b/gap-bootstrap.patch @@ -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 diff --git a/gap-doc.patch b/gap-doc.patch new file mode 100644 index 0000000..7ccd740 --- /dev/null +++ b/gap-doc.patch @@ -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"> + + + +--- 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"> + ## + ## +-## + ## nothing ++## + ## Does dst{dcols} := src{scols} + ## 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"> + ## + ## + ## +@@ -303,6 +304,7 @@ end ); + ## the four basic representations in &GAP; + ## + ## ++## <#/GAPDoc> + ## + DeclareRepresentation( "IsInternalRep", IS_OBJECT, [], IS_OBJECT ); + DeclareRepresentation( "IsPositionalObjectRep", IS_OBJECT, [], IS_OBJECT ); diff --git a/gap-enterleave.patch b/gap-enterleave.patch new file mode 100644 index 0000000..de7db12 --- /dev/null +++ b/gap-enterleave.patch @@ -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, diff --git a/gap-erroroutput.patch b/gap-erroroutput.patch new file mode 100644 index 0000000..035daf7 --- /dev/null +++ b/gap-erroroutput.patch @@ -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( , , ) . . . . . . . . . . . print and quit + */ + extern void ErrorQuit(const Char * msg, Int arg1, Int arg2) NORETURN; +--- src/scanner.c.orig 2018-11-01 16:56:12.000000000 -0600 ++++ src/scanner.c 2019-02-07 13:12:12.929660164 -0700 +@@ -16,6 +16,7 @@ + + #include "scanner.h" + ++#include "error.h" + #include "gapstate.h" + #include "gaputils.h" + #include "io.h" +@@ -42,7 +43,7 @@ static void SyntaxErrorOrWarning(const C + if (STATE(NrErrLine) == 0) { + + // open error output +- OpenOutput("*errout*"); ++ OpenErrorOutput(); + + // print the message ... + if (error) diff --git a/gap-escape.patch b/gap-escape.patch index a8bf2ba..1011aee 100644 --- a/gap-escape.patch +++ b/gap-escape.patch @@ -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 = ) { - # 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 diff --git a/gap-gac.patch b/gap-gac.patch new file mode 100644 index 0000000..fe3e734 --- /dev/null +++ b/gap-gac.patch @@ -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 diff --git a/gap-help.patch b/gap-help.patch index 65097ea..1f0b987 100644 --- a/gap-help.patch +++ b/gap-help.patch @@ -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. diff --git a/gap-immutable.patch b/gap-immutable.patch new file mode 100644 index 0000000..a9e8b5c --- /dev/null +++ b/gap-immutable.patch @@ -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 diff --git a/gap-paths.patch b/gap-paths.patch deleted file mode 100644 index 972f6ec..0000000 --- a/gap-paths.patch +++ /dev/null @@ -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*) diff --git a/gap-ref.patch b/gap-ref.patch new file mode 100644 index 0000000..1fa368b --- /dev/null +++ b/gap-ref.patch @@ -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. + + + +-
+-Calling a function with a list argument that is interpreted as +-several arguments ++
++Calling a function with a list argument that is interpreted as several arguments + + <#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(); + + RandomPartialPerm + +- ++ + + A random partial permutation. + +@@ -1013,8 +1012,7 @@ gap> MultiplicativeZero(f); + in &GAP; into partial permutations. + + +- ++ + + + A partial permutation. +@@ -1165,8 +1163,7 @@ gap> AsPartialPerm(f, [ 2 .. 4 ] ); + + LQUO(g, f) + +- LQUO ++ LQUO + returns g^-1*f + when f is a partial permutation and + g is a permutation or partial permutation. diff --git a/gap-stat.patch b/gap-stat.patch index 862dca2..4184838 100644 --- a/gap-stat.patch +++ b/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<> (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); - -+ -+/************************************************************************** -+** 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); -+ -+ - /**************************************************************************** + ** 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); + + /************************************************************************** ** - *F PrintInt( ) . . . . . . . . . . . . . . . print an integer constant diff --git a/gap-terminal.patch b/gap-terminal.patch new file mode 100644 index 0000000..928592d --- /dev/null +++ b/gap-terminal.patch @@ -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; + } + diff --git a/gap.spec b/gap.spec index 880962b..cb012bd 100644 --- a/gap.spec +++ b/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 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 -# Get the value of the GAParch variable -source ./sysinfo.gap +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 + +# Remove build paths +sed -i "s|$PWD|%{gapdir}|g" sysinfo.gap bin/gap.sh bin/%{gaparch}/gac doc/make_doc -# 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 +# 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,' $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 - 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 - 4.8.8-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild diff --git a/gap.vim b/gap.vim index 780c008..03e7902 100644 --- a/gap.vim +++ b/gap.vim @@ -1 +1 @@ -autocmd BufRead,BufNewFile *.g,*.gi,*.gd set filetype=gap +autocmd BufRead,BufNewFile *.g,*.gap,*.gi,*.gd,*.grp set filetype=gap diff --git a/gap.xml b/gap.xml index 5262a46..c8da3c8 100644 --- a/gap.xml +++ b/gap.xml @@ -2,6 +2,10 @@ GAP input + + + + diff --git a/sources b/sources index 1e1640d..11a832f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gap4r8p8_2017_08_20-15_12.tar.bz2) = 35162163c6619f3648ffb784b580e598f2c8faadcc98e76c29f23d85eb2ab9d839c47fb4ce73af328b51b5bcd5f82c19406b58f53983eb24832b3de8f009ba01 +SHA512 (gap-4.10.0.tar.bz2) = 137d904ee516f56c14863ca9943627054a20bf31efbfb68e6cca19052e28f608d1b6da5ad84f394c3cfd77b8103c17772e6653b792ee98b3cc9acd6833c5982f diff --git a/update-gap-workspace b/update-gap-workspace index 263be34..78dd8cf 100755 --- a/update-gap-workspace +++ b/update-gap-workspace @@ -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"