Initial import.

This commit is contained in:
Jerry James 2012-01-12 07:51:11 -07:00
parent 9a8d96d228
commit 574c3520e5
19 changed files with 1525 additions and 0 deletions

1
.gitignore vendored
View File

@ -0,0 +1 @@
/gap4r4p12.tar.bz2

71
gac.1.in Normal file
View File

@ -0,0 +1,71 @@
.TH "GAC" "1" "@VERSION@" "GAP" "User Commands"
.SH "NAME"
gac \- Compile GAP input files
.SH "SYNOPSIS"
.B gac
[\fI\-d\fP] [\fI\-c|\-C\fP] [\fI\-o <output>\fP] {\fI\-f<option>\fP}
\fI<input>\fP ...
.SH "DESCRIPTION"
.PP
GAC compiles GAP input files, which must be GAP source code (suffix '.g' or
\'.gap'), C source code (suffix '.c'), or compiled code files (suffix '.o').
.SH "OPTIONS"
If neither \fI\-c\fP nor \fI\-C\fP is given, then gac compiles the code
completely, producing a new kernel for static compilation or a dynamically
loadable '.so' file for dynamic compilation.
.TP
\fB\-d\fP, \fB\-\-dynamic\fP
Compile for dynamic loading.
.TP
\fB\-c\fP, \fB\-\-compile\fP
Only compile the input files to '.o' object files, which must be further
linked to make a static kernel or dynamically loadable module.
.TP
\fB\-C\fP, \fB\-\-create\-c\fP
Only compile the input files to C code, which will require compilation and
linking to be usable.
.TP
\fB\-r\fP
Statically compiled files are assumed to be given by pathnames relative to the
GAP root, and will be compiled for automatic loading when files are sought
relative to the GAP root.
.TP
\fB\-o\fP, \fB\-\-output\fP \fI<output>\fP
Set the name of the output file.
.TP
\fB\-ffast\-int\-arith\fP
Emit code for arithmetic operations which works faster if both operands are
small integers, and slower otherwise.
.TP
\fB\-ffast\-plain\-lists\fP
Emit code for list access which works faster if the list is a plain list, and
slower otherwise.
.TP
\fB\-ffast\-list\-funcs\fP
Inline the list functions 'Add' and 'Length', for a small speed boost.
.TP
\fB\-fno\-check\-types\fP
Emit no error checks for element types, which improves performance but may
result in a crash if an error happens.
.TP
\fB\-fno\-check\-list\-elms\fP
Emit no error checks for list access, which improves performance but may
result in a crash if an error happens.
.TP
\fB\-p\fP \fI<option>\fP
Pass the given option to the C compiler.
.TP
\fB\-P\fP \fI<option>\fP
Pass the given option to the C linker.
.TP
\fB\-k\fP, \fB\-\-gap\-compiler\fP \fI<path>\fP
Use the given path to find the GAP binary, instead of the default.
.TP
\fB\-i\fP, \fB\-\-gap\-include\fP \fI<path>\fP
Use the given path to find the GAP header files, instead of the default.
.TP
\fB\-l\fP, \fB\-\-gap\-binary\fP \fI<path>\fP
Use the given path to find the GAP binary directory, instead of the default.
.SH "SEE ALSO"
.PP
\fIgap\fP(1), \fIupdate-gap-workspace\fP(1)

65
gap-README.fedora Normal file
View File

@ -0,0 +1,65 @@
GAP for Fedora
Based on "GAP for Debian" by Bill Allombert <ballombe@debian.org>
GAP (http://www.gap-system.org) is a system for computational discrete
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
- /usr/local/lib/gap/pkg
- ~/gap/pkg
Some packages must be compiled. The necessary tools are available in the
gap-devel package.
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.
Colors in the GAP shell
-----------------------
If you would like the GAP shell to display the prompt, input, etc. in color,
you can try colorprompt.g by Frank Lübeck. Add this line to ~/.gaprc:
ColorPrompt(true);
See /usr/share/gap/lib/colorprompt.g for more information.
Browsing GAP Documentation
--------------------------
By default, GAP will display documentation in a terminal. Other options are
available. Insert one of the following into ~/.gaprc:
SetHelpViewer("firefox"); # Displays HTML documentation in Firefox
SetHelpViewer("konqueror"); # Displays HTML documentation in Konqueror
SetHelpViewer("lynx"); # Displays HTML documentation in Lynx
SetHelpViewer("w3m"); # Displays HTML documentation in w3m
SetHelpViewer("xdvi"); # Displays DVI documentation in xdvi
SetHelpViewer("xpdf"); # Displays PDF documentation in xpdf
SetHelpViewer("xdghtml"); # Displays HTML documentation using xdg-open
SetHelpViewer("xdgdvi"); # Displays DVI documentation using xdg-open
SetHelpViewer("xdgpdf"); # Displays PDF documentation using xdg-open
The last three are Fedora extensions. They use xdg-open to open the
documentation files with the user's preferred applications.
Large GAP libraries are compressed
----------------------------------
To save disk space, the largest GAP libraries are compressed with gzip. GAP
automatically decompresses them.
Supporting GAP
--------------
If you use GAP, please send a short note to support@gap-system.org stating you
use the Fedora packages of GAP so the GAP team can keep track of the number of
GAP users. This helps them obtain funding for the project.

231
gap-alias.patch Normal file
View File

@ -0,0 +1,231 @@
--- ./src/sysfiles.h.orig 2008-09-02 10:50:38.000000000 -0600
+++ ./src/sysfiles.h 2011-08-04 13:57:32.717487674 -0600
@@ -46,7 +46,7 @@
extern Int SyFindOrLinkGapRootFile (
Char * filename,
Int4 crc_gap,
- Char * result,
+ union StringOrInitInfo * result,
Int len );
--- ./src/sysfiles.c.orig 2008-12-14 14:25:54.000000000 -0700
+++ ./src/sysfiles.c 2011-08-04 14:07:06.846239128 -0600
@@ -191,7 +191,7 @@
Int SyFindOrLinkGapRootFile (
Char * filename,
Int4 crc_gap,
- Char * result,
+ union StringOrInitInfo * result,
Int len )
{
UInt4 crc_dyn = 0;
@@ -215,19 +215,19 @@
#endif
/* find the GAP file */
- result[0] = '\0';
+ result->string[0] = '\0';
tmp = SyFindGapRootFile(filename);
if ( tmp ) {
- SyStrncat( result, tmp, len );
+ SyStrncat( result->string, tmp, len );
name[0] = '\0';
SyStrncat( name, tmp, 255 );
}
- if ( result[0] ) {
- if ( SyIsReadableFile(result) == 0 ) {
+ if ( result->string[0] ) {
+ if ( SyIsReadableFile(result->string) == 0 ) {
found_gap = 1;
}
else {
- result[0] = '\0';
+ result->string[0] = '\0';
}
}
if ( ! SyUseModule ) {
@@ -389,11 +389,11 @@
if (found_dyn)
syUnloadLastModule ();
#endif
- *(StructInitInfo**)result = info_sta;
+ result->info = info_sta;
return 2;
}
if ( found_gap && found_dyn ) {
- *(StructInitInfo**)result = info_dyn;
+ result->info = info_dyn;
return 1;
}
if ( found_gap ) {
@@ -404,11 +404,11 @@
if (found_dyn)
syUnloadLastModule ();
#endif
- *(StructInitInfo**)result = info_sta;
+ result->info = info_sta;
return 2;
}
if ( found_dyn ) {
- *(StructInitInfo**)result = info_dyn;
+ result->info = info_dyn;
return 1;
}
return 0;
--- ./src/gap.c.orig 2007-10-04 09:05:16.000000000 -0600
+++ ./src/gap.c 2011-08-04 14:09:27.815182164 -0600
@@ -1650,7 +1650,7 @@
StructInitInfo * info;
Int4 crc1;
Int4 crc2;
- Char result[256];
+ union StringOrInitInfo result;
Int res;
@@ -1670,7 +1670,7 @@
/* check if have a statically or dynamically loadable module */
crc1 = INT_INTOBJ(crc);
- res = SyFindOrLinkGapRootFile(CSTR_STRING(filename), crc1, result, 256);
+ res = SyFindOrLinkGapRootFile(CSTR_STRING(filename), crc1, &result, 256);
/* not found */
if ( res == 0 ) {
@@ -1685,7 +1685,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' dynamically\n",
(Int)CSTR_STRING(filename), 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
UpdateCopyFopyInfo();
res = res || info->initLibrary(info);
@@ -1703,7 +1703,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' statically\n",
(Int)CSTR_STRING(filename), 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
UpdateCopyFopyInfo();
res = res || info->initLibrary(info);
@@ -1721,15 +1721,15 @@
/* compute the crc value of the original and compare */
if ( SyCheckCompletionCrcComp ) {
- crc2 = SyGAPCRC(result);
+ crc2 = SyGAPCRC(result.string);
if ( crc1 != crc2 ) {
return INTOBJ_INT(4);
}
}
- /*CCC filename = NEW_STRING( SyStrlen(result) );
+ /*CCC filename = NEW_STRING( SyStrlen(result.string) );
SyStrncat( CSTR_STRING(filename), result, SyStrlen(result) );CCC*/
- len = SyStrlen(result);
- C_NEW_STRING(filename, len, result);
+ len = SyStrlen(result.string);
+ C_NEW_STRING(filename, len, result.string);
CompThenFuncs = NEW_PLIST( T_PLIST, COMP_THEN_OFFSET );
SET_LEN_PLIST( CompThenFuncs, COMP_THEN_OFFSET );
--- ./src/system.h.orig 2007-10-06 16:53:20.000000000 -0600
+++ ./src/system.h 2011-08-04 14:04:52.971092306 -0600
@@ -1105,6 +1105,10 @@
typedef StructInitInfo* (*InitInfoFunc)(void);
+union StringOrInitInfo {
+ Char string[256];
+ StructInitInfo * info;
+};
/****************************************************************************
**
--- ./src/saveload.c.orig 2002-06-16 06:37:20.000000000 -0600
+++ ./src/saveload.c 2011-08-04 13:41:46.547763965 -0600
@@ -37,6 +37,11 @@
#include "saveload.h" /* saving and loading */
#undef INCLUDE_DECLARATION_PART
+union double_bytes {
+ Double d;
+ UInt1 bytes[sizeof(Double)];
+};
+
/***************************************************************************
**
@@ -438,19 +443,19 @@
void SaveDouble( Double d)
{
UInt i;
- UInt1 buf[sizeof(Double)];
- *(Double *)buf = d;
+ union double_bytes buf;
+ buf.d = d;
for (i = 0; i < sizeof(Double); i++)
- SAVE_BYTE(buf[i]);
+ SAVE_BYTE(buf.bytes[i]);
}
Double LoadDouble( void)
{
UInt i;
- UInt1 buf[sizeof(Double)];
+ union double_bytes buf;
for (i = 0; i < sizeof(Double); i++)
- buf[i] = LOAD_BYTE();
- return *(Double *)buf;
+ buf.bytes[i] = LOAD_BYTE();
+ return buf.d;
}
/***************************************************************************
--- ./src/streams.c.orig 2008-09-02 10:52:34.000000000 -0600
+++ ./src/streams.c 2011-08-04 14:10:55.735229846 -0600
@@ -316,13 +316,13 @@
Int READ_GAP_ROOT ( Char * filename )
{
- Char result[256];
+ union StringOrInitInfo result;
Int res;
UInt type;
StructInitInfo * info;
/* try to find the file */
- res = SyFindOrLinkGapRootFile( filename, 0L, result, 256 );
+ res = SyFindOrLinkGapRootFile( filename, 0L, &result, 256 );
/* not found */
if ( res == 0 ) {
@@ -335,7 +335,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' dynamically\n",
(Int)filename, 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
if (!SyRestoring) {
UpdateCopyFopyInfo();
@@ -356,7 +356,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' statically\n",
(Int)filename, 0L );
}
- info = *(StructInitInfo**)result;
+ info = result.info;
res = info->initKernel(info);
if (!SyRestoring) {
UpdateCopyFopyInfo();
@@ -388,7 +388,7 @@
Pr( "#I READ_GAP_ROOT: loading '%s' as GAP file\n",
(Int)filename, 0L );
}
- if ( OpenInput(result) ) {
+ if ( OpenInput(result.string) ) {
SySetBuffering(Input->file);
while ( 1 ) {
ClearError();

233
gap-crc.patch Normal file
View File

@ -0,0 +1,233 @@
--- lib/read3.co.orig 2008-12-15 08:56:40.000000000 -0700
+++ lib/read3.co 2011-12-30 15:39:05.989250432 -0700
@@ -5172,7 +5172,7 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/grpnames.g"
-#F file="lib/grpnames.gd" crc=115395428
+#F file="lib/grpnames.gd" crc=33537811
RANK_FILTER_LIST := [ 33223879, 16, 33223879, 16, 1, 0, 1, 0, 66060696, 21,
993, 2, 1, 0, 33223879, 16, 33223879, 16, 1, 0, 1, 0, 65012480, 21, 993, 2,
1, 0, 33223879, 16, 33223879, 16, 1, 0, 1, 0, 62915088, 21, 993, 2, 1, 0,
@@ -5198,7 +5198,7 @@ RANK_FILTER_LIST := [ 33223879, 16, 332
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/grpnames.gd", 115395428 );
+COM_RESULT := COM_FILE( "lib/grpnames.gd", 33537811 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/grpnames.gd\"");
elif COM_RESULT = 1 then
@@ -6485,12 +6485,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/straight.gd"
-#F file="lib/memory.gd" crc=-69936802
+#F file="lib/memory.gd" crc=-50727669
RANK_FILTER_LIST := [ 1985, 1, 1, 0, 1, 0, 56000950, 4, 993, 2, 1, 0 ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/memory.gd", -69936802 );
+COM_RESULT := COM_FILE( "lib/memory.gd", -50727669 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/memory.gd\"");
elif COM_RESULT = 1 then
@@ -8687,12 +8687,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/semiquo.gd"
-#F file="lib/pager.gd" crc=120998950
+#F file="lib/pager.gd" crc=-28594049
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/pager.gd", 120998950 );
+COM_RESULT := COM_FILE( "lib/pager.gd", -28594049 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/pager.gd\"");
elif COM_RESULT = 1 then
@@ -8714,12 +8714,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/pager.gd"
-#F file="lib/helpbase.gd" crc=-118849687
+#F file="lib/helpbase.gd" crc=-88527990
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/helpbase.gd", -118849687 );
+COM_RESULT := COM_FILE( "lib/helpbase.gd", -88527990 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/helpbase.gd\"");
elif COM_RESULT = 1 then
@@ -8767,12 +8767,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/helpbase.gd"
-#F file="lib/helpview.gd" crc=8491351
+#F file="lib/helpview.gd" crc=-1578046
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/helpview.gd", 8491351 );
+COM_RESULT := COM_FILE( "lib/helpview.gd", -1578046 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/helpview.gd\"");
elif COM_RESULT = 1 then
@@ -8823,12 +8823,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/helpt2t.gd"
-#F file="lib/helpdef.gd" crc=-55952681
+#F file="lib/helpdef.gd" crc=66735597
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/helpdef.gd", -55952681 );
+COM_RESULT := COM_FILE( "lib/helpdef.gd", 66735597 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/helpdef.gd\"");
elif COM_RESULT = 1 then
--- lib/read4.co.orig 2008-12-15 08:56:40.000000000 -0700
+++ lib/read4.co 2011-12-30 15:39:06.065250381 -0700
@@ -84,12 +84,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/methwhy.g"
-#F file="lib/pager.gi" crc=-122078620
+#F file="lib/pager.gi" crc=133116398
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/pager.gi", -122078620 );
+COM_RESULT := COM_FILE( "lib/pager.gi", 133116398 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/pager.gi\"");
elif COM_RESULT = 1 then
@@ -118,12 +118,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/pager.gi"
-#F file="lib/helpbase.gi" crc=81259865
+#F file="lib/helpbase.gi" crc=-62250938
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/helpbase.gi", 81259865 );
+COM_RESULT := COM_FILE( "lib/helpbase.gi", -62250938 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/helpbase.gi\"");
elif COM_RESULT = 1 then
@@ -207,12 +207,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/helpt2t.gi"
-#F file="lib/helpdef.gi" crc=92366536
+#F file="lib/helpdef.gi" crc=110442633
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/helpdef.gi", 92366536 );
+COM_RESULT := COM_FILE( "lib/helpdef.gi", 110442633 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/helpdef.gi\"");
elif COM_RESULT = 1 then
--- lib/read5.co.orig 2008-12-15 08:56:54.000000000 -0700
+++ lib/read5.co 2011-12-30 15:39:08.386248776 -0700
@@ -4863,12 +4863,12 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/polyrat.gi"
-#F file="lib/polyconw.gi" crc=-103456530
+#F file="lib/polyconw.gi" crc=-104825482
RANK_FILTER_LIST := [ ];
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/polyconw.gi", -103456530 );
+COM_RESULT := COM_FILE( "lib/polyconw.gi", -104825482 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/polyconw.gi\"");
elif COM_RESULT = 1 then
@@ -10743,7 +10743,7 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/grpprmcs.gi"
-#F file="lib/grpnames.gi" crc=-100562243
+#F file="lib/grpnames.gi" crc=-3569340
RANK_FILTER_LIST := [ 29419057, 21, 29419057, 21, 29419057, 21, 29419057,
21, 29419057, 21, 29419057, 21, 29419057, 21, 29419057, 21, 29419057, 21,
29419057, 21, 29419057, 21, 29419057, 21, 29419057, 21, 29419057, 21,
@@ -10752,7 +10752,7 @@ RANK_FILTER_LIST := [ 29419057, 21, 294
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/grpnames.gi", -100562243 );
+COM_RESULT := COM_FILE( "lib/grpnames.gi", -3569340 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/grpnames.gi\"");
elif COM_RESULT = 1 then
@@ -11617,7 +11617,7 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/grpmat.gi"
-#F file="lib/grpffmat.gi" crc=-70944848
+#F file="lib/grpffmat.gi" crc=-126348146
RANK_FILTER_LIST := [ 65760937, 34, 57928553, 19, 65749777, 242, 65749777,
242, 65749777, 242, 10987176, 246, 61964548, 248, 58412696, 30, 10987176,
246, 58412696, 30, 61964548, 248, 10987176, 246, 61964548, 248, 10987176,
@@ -11626,7 +11626,7 @@ RANK_FILTER_LIST := [ 65760937, 34, 579
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/grpffmat.gi", -70944848 );
+COM_RESULT := COM_FILE( "lib/grpffmat.gi", -126348146 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/grpffmat.gi\"");
elif COM_RESULT = 1 then
@@ -12793,7 +12793,7 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/adjoin.gi"
-#F file="lib/semirel.gi" crc=82907093
+#F file="lib/semirel.gi" crc=-45125472
RANK_FILTER_LIST := [ 11831026, 13, 11831026, 13, 11831026, 13, 11831026,
13, 11831026, 13, 62127694, 11, 47185096, 11, 57146508, 11, 49709012, 10,
49709012, 10, 11819866, 15, 1, 0, 11819866, 15, 1, 0, 11819866, 15, 1, 0,
@@ -12813,7 +12813,7 @@ RANK_FILTER_LIST := [ 11831026, 13, 118
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/semirel.gi", 82907093 );
+COM_RESULT := COM_FILE( "lib/semirel.gi", -45125472 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/semirel.gi\"");
elif COM_RESULT = 1 then
--- lib/read7.co.orig 2008-12-15 08:56:58.000000000 -0700
+++ lib/read7.co 2011-12-30 15:39:08.990248358 -0700
@@ -2041,7 +2041,7 @@ Unbind(RANK_FILTER_COUNT);
Unbind(COM_RESULT);
#E file="lib/straight.gi"
-#F file="lib/memory.gi" crc=-124009148
+#F file="lib/memory.gi" crc=52960952
RANK_FILTER_LIST := [ 1985, 1, 61553939, 107, 8193, 2, 1, 0, 1, 0, 61553939,
107, 8194, 4, 24857226, 21, 61553939, 107, 61553939, 107, 61553939, 107,
61553939, 107, 61553939, 107, 61553939, 107, 61553939, 107, 61553939, 107,
@@ -2056,7 +2056,7 @@ RANK_FILTER_LIST := [ 1985, 1, 61553939
RANK_FILTER_COUNT := 1;
#C load module, file, or complete
-COM_RESULT := COM_FILE( "lib/memory.gi", -124009148 );
+COM_RESULT := COM_FILE( "lib/memory.gi", 52960952 );
if COM_RESULT = fail then
Error("cannot locate file \"lib/memory.gi\"");
elif COM_RESULT = 1 then

111
gap-emacs.patch Normal file
View File

@ -0,0 +1,111 @@
--- ./etc/emacs/gap-process.el.orig 2005-05-08 01:44:58.000000000 -0600
+++ ./etc/emacs/gap-process.el 2011-08-04 15:25:18.327841875 -0600
@@ -337,7 +337,9 @@
(unwind-protect
(progn
(with-output-to-temp-buffer "*Completions*"
- (print-help-return-message))
+ (if (featurep 'xemacs)
+ (print-help-return-message)
+ (help-print-return-message)))
(set-process-filter process 'gap-completions-filter)
(process-send-string process (concat gap-completion-ident
"\t\t\C-x")))))))
@@ -371,8 +373,10 @@
(unwind-protect
(progn
(with-output-to-temp-buffer "*Help*"
- (print-help-return-message))
- (set-process-filter process 'gap-help-filter)
+ (if (featurep 'xemacs)
+ (print-help-return-message)
+ (help-print-return-message)))
+ (set-process-filter process 'gap-help-filter)
(process-send-string process (concat "?" topic "\n"))))))
(defun get-start-process (progm &optional name dir args startfile)
@@ -382,17 +386,17 @@
containing initial standard input to process."
(interactive)
(require 'comint)
- (setq name (or name (file-name-nondirectory progm)))
- (setq buffname (concat "*" name "*"))
- (cond ((not (comint-check-proc buffname))
- (let ((buff (get-buffer-create buffname)))
- (set-buffer buff)
- (switch-to-buffer buff)
- (if dir (cd dir))
- (apply 'make-comint name progm startfile args)))
- (t
- (switch-to-buffer buffname)
- (get-buffer buffname))))
+ (let ((name (or name (file-name-nondirectory progm)))
+ (buffname (concat "*" name "*")))
+ (cond ((not (comint-check-proc buffname))
+ (let ((buff (get-buffer-create buffname)))
+ (set-buffer buff)
+ (switch-to-buffer buff)
+ (if dir (cd dir))
+ (apply 'make-comint name progm startfile args)))
+ (t
+ (switch-to-buffer buffname)
+ (get-buffer buffname)))))
(defun string-strip-chars (string strip)
"Take STRING and remove characters in STRIP"
(while (> (length strip) 0)
--- ./etc/emacs/gap-mode.el.orig 2001-08-15 10:42:16.000000000 -0600
+++ ./etc/emacs/gap-mode.el 2011-08-04 15:29:19.482725282 -0600
@@ -89,15 +89,6 @@
(autoload 'gap-complete "gap-process" nil t)
-;;! Fix member function?!
-(defun memberequal (x y)
- "Like memq, but uses `equal' for comparison.
-This is a subr in Emacs 19."
- (while (and y (not (equal x (car y))))
- (setq y (cdr y)))
- y)
-
-
(defvar gap-indent-brackets t
"* Whether to check back for unclosed brackets in determining
indentation level. This is good for formatting lists and matrices.")
@@ -445,12 +436,12 @@
(setq name (buffer-substring (match-beginning 2) (match-end 2)))
(goto-char (match-end 0)))
(t (error "gap-insert-local-variables incorrect code!")))
- (if (not (memberequal name names))
+ (if (not (member name names))
(setq names (append names (list name))))))
(beginning-of-line)
(let (lnames)
(while (car names)
- (if (memberequal (car names) formal)
+ (if (member (car names) formal)
(setq names (cdr names))
(setq lnames (append lnames (list (car names))))
(setq names (cdr names))))
@@ -527,11 +518,11 @@
;;! Now the indentation functions and variables
;;
-(setq gap-end-of-statement
+(defconst gap-end-of-statement
(concat "\\(;\\|\\<then\\>\\|\\<else\\>\\|\\<do\\>\\|"
"\\<repeat\\>\\|\\<function\\>.*(.*)\\)"))
-(setq gap-increment-indentation-regexp (concat "^[ \t]*\\("
+(defconst gap-increment-indentation-regexp (concat "^[ \t]*\\("
"if\\>"
"\\|else\\>"
"\\|elif\\>"
@@ -541,7 +532,7 @@
"\\|.*\\<function\\>"
"\\)"))
-(setq gap-decrement-indentation-regexp (concat "^[ \t]*\\("
+(defconst gap-decrement-indentation-regexp (concat "^[ \t]*\\("
"fi\\>"
"\\|od\\>"
"\\|else\\>"

27
gap-env.patch Normal file
View File

@ -0,0 +1,27 @@
--- ./src/system.c.orig 2008-12-15 06:08:32.000000000 -0700
+++ ./src/system.c 2011-12-30 16:42:48.444607336 -0700
@@ -2042,6 +2042,7 @@ void InitSystem (
/* Char * ptr; */ /* pointer to the pre'malloc'ated */
/* Char * ptr1; */ /* more pre'malloc'ated */
Char * *ptrlist;
+ Char * envvar;
UInt i; /* loop variable */
Int res; /* return from option processing function */
#if SYS_MAC_MWC
@@ -2299,6 +2300,16 @@ void InitSystem (
#endif
+ /* process environment variables */
+ envvar = getenv("GAP_DIR");
+ if (envvar == NULL)
+ envvar = "/usr/share/gap";
+ setGapRootPath(&envvar, NULL);
+ envvar = getenv("GAP_MEM");
+ if (envvar == NULL)
+ envvar = "32m";
+ storeMemory2(&envvar, &SyStorMin);
+
/* scan the command line for options */
while ( argc > 1 && argv[1][0] == '-' ) {

44
gap-help.patch Normal file
View File

@ -0,0 +1,44 @@
--- ./lib/helpdef.gi.orig 2008-06-23 04:12:20.000000000 -0600
+++ ./lib/helpdef.gi 2011-12-30 15:24:46.334844855 -0700
@@ -332,6 +332,11 @@ HELP_BOOK_HANDLER.default.ReadSix := fun
res.pdffile := ShallowCopy(fname);
Add(res.formats, "pdf");
fi;
+ fname{[Length(fname)-5..Length(fname)]} := "dvi.gz";
+ if IsExistingFile( fname ) = true then
+ res.dvifile := ShallowCopy(fname);
+ Add(res.formats, "dvi");
+ fi;
fi;
res.directories := Directory(fname{[1..Length(fname)-10]});
return res;
--- ./lib/helpview.gi.orig 2005-04-20 05:38:02.000000000 -0600
+++ ./lib/helpview.gi 2011-12-30 15:30:48.173594656 -0700
@@ -283,6 +283,27 @@ show := function(file)
end
);
+# View HTML, DVI, or PDF files with xdg-open, which opens documents with the
+# user's preferred application.
+HELP_VIEWER_INFO.xdghtml := rec(
+type := "url",
+show := function(url)
+ Exec(Concatenation("xdg-open \"", url, "\""));
+end
+);
+HELP_VIEWER_INFO.xdgdvi := rec(
+type := "dvi",
+show := function(file)
+ Exec(Concatenation("xdg-open \"", file, "\""));
+end
+);
+HELP_VIEWER_INFO.xdgpdf := rec(
+type := "pdf",
+show := function(file)
+ Exec(Concatenation("xdg-open \"", file, "\""));
+end
+);
+
#############################################################################
##
#F SetHelpViewer(<viewer>): Set the viewer used for help

73
gap-paths.patch Normal file
View File

@ -0,0 +1,73 @@
--- ./configure.orig 2007-10-04 09:05:16.000000000 -0600
+++ ./configure 2012-01-03 16:55:54.417003009 -0700
@@ -2764,7 +2764,7 @@ echo "${ECHO_T}no" >&6; }
fi
-gapdir=`pwd`
+gapdir=/usr/share/gap
mkdir -p bin
ac_config_files="$ac_config_files Makefile sysinfo.gap:sysinfo.in bin/gap.sh:gap.shi"
--- ./cnf/gac.in.orig 2006-03-05 06:37:06.000000000 -0700
+++ ./cnf/gac.in 2012-01-03 16:59:18.237794244 -0700
@@ -51,16 +51,16 @@
## The option '-P <option>' tells 'gac' to pass the option <option> to the
## C linker.
##
-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"
@@ -111,9 +111,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
+ -I${gap_bin} -I${gap_binary} -DCONFIG_H -c $2
}
@@ -387,17 +387,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"`;
+}
#############################################################################
##

20
gap-raw.patch Normal file
View File

@ -0,0 +1,20 @@
--- ./src/sysfiles.c.orig 2008-12-14 14:25:54.000000000 -0700
+++ ./src/sysfiles.c 2011-12-30 15:12:00.360374500 -0700
@@ -1523,7 +1523,7 @@ extern void syStopraw (
** to cooked mode before stopping GAP and back to raw mode when continueing.
*/
-#if !SYS_IS_DARWIN && (SYS_BSD || SYS_MACH || HAVE_SGTTY_H)
+#if !HAVE_TERMIOS_H && !SYS_IS_DARWIN && (SYS_BSD || SYS_MACH || HAVE_SGTTY_H)
#ifndef SYS_SGTTY_H /* terminal control functions */
# include <sgtty.h>
@@ -2072,7 +2072,7 @@ UInt syStartraw (
**
*f syStopraw( <fid> ) . . . . . . . . . . . . . . . . . . . . . . BSD/MACH
*/
-#if !SYS_IS_DARWIN && (SYS_BSD || SYS_MACH || HAVE_SGTTY_H)
+#if !HAVE_TERMIOS_H && !SYS_IS_DARWIN && (SYS_BSD || SYS_MACH || HAVE_SGTTY_H)
void syStopraw (
Int fid )

123
gap.1.in Normal file
View File

@ -0,0 +1,123 @@
.TH "GAP" "1" "@VERSION@" "GAP" "User Commands"
.SH "NAME"
gap \- Run the Groups, Algorithms and Programming system
.SH "SYNOPSIS"
.B gap
[\fIOPTIONS\fP] [\fIFILES\fP]
.SH "DESCRIPTION"
.PP
GAP is a system for computational discrete algebra, with particular emphasis
on Computational Group Theory. GAP provides a programming language, a library
of thousands of functions implementing algebraic algorithms written in the GAP
language as well as large data libraries of algebraic objects. GAP is used in
research and teaching for studying groups and their representations, rings,
vector spaces, algebras, combinatorial structures, and more.
.SH "OPTIONS"
Boolean options (b, e, p, q, r, A, D, M, N, O, T, X, and Y) toggle the current
value each time they are used. Default actions are indicated first.
.PP
MEM options indicate a number of bytes. Larger units are indicated with
trailing characters: 'k' for kilobytes, m for megabytes, and g for gigabytes.
For example, '512k' means 512 kilobytes.
.TP
\fB\-a\fP \fIMEM\fP
Set the amount of preallocated space.
.TP
\fB\-b\fP
Disable/enable the banner.
.TP
\fB\-c\fP \fIMEM\fP
Set the cache size.
.TP
\fB\-e\fP
Disable/enable quitting on Ctrl-D.
.TP
\fB\-f\fP
Force line editing.
.TP
\fB\-g\fP
Show GASMAN messages. If this option is given once, then full garbage
collections are shown. If it is given twice, all garbage collections are
shown.
.TP
\fB\-h\fP
Print a help message and exit.
.TP
\fB\-i\fP \fIFILE\fP
Load an alternate init file.
.TP
\fB\-l\fP \fIPATHS\fP
Set the GAP root paths. A leading semicolon means to append PATHS to the
existing list of root paths. A trailing semicolon means to prepend PATHS.
Otherwise, the list of root paths is replaced with PATHS.
.TP
\fB\-m\fP \fIMEM\fP
Set the initial workspace size.
.TP
\fB\-n\fP
Prevent line editing.
.TP
\fB\-o\fP \fIMEM\fP
Set the hint for the maximal workspace size. GAP may allocate more.
.TP
\fB\-p\fP
Enable/disable emitting extra commands to the output to tell a window handler
what GAP is doing.
.TP
\fB\-q\fP
Enable/disable quiet mode.
.TP
\fB\-r\fP
Disable/enable reading of the .gaprc file.
.TP
\fB\-x\fP \fINUM\fP
Set the window width to NUM columns.
.TP
\fB\-y\fP \fINUM\fP
Set the window height to NUM rows.
.TP
\fB\-A\fP
Disable/enable autoloading of GAP packages.
.TP
\fB\-B\fP \fINAME\fP
Set the name of the current architecture.
.TP
\fB\-C\fP \fI<output>\fP \fI<input>\fP \fI<name>\fP
Compile an input file with the given name into an output file.
.TP
\fB\-D\fP
Enable/disable debugging the loading of library files.
.TP
\fB\-K\fP \fIMEM\fP
Set the maximal workspace size. GAP never allocates more.
.TP
\fB\-L\fP \fIFILE\fP
Restore a saved workspace.
.TP
\fB\-M\fP
Disable/enable loading of compiled modules.
.TP
\fB\-N\fP
Disable/enable check for completion files.
.TP
\fB\-O\fP
Enable/disable compatibility with GAP 3, by causing false and fail to be the
same value.
.TP
\fB\-R\fP
Prevent restoring of workspace (causes -L to be ignored).
.TP
\fB\-T\fP
Disable/enable break loop.
.TP
\fB\-U\fP \fIOPTIONS\fP
Set the compile options for compiling GAP files.
.TP
\fB\-X\fP
Enable/disable CRC while reading completion.
.TP
\fB\-Y\fP
Enable/disable CRC while completing files.
.SH "SEE ALSO"
.PP
\fIgac\fP(1), \fIupdate-gap-workspace\fP(1)

11
gap.desktop Normal file
View File

@ -0,0 +1,11 @@
[Desktop Entry]
Name=GAP
GenericName=Computational discrete algebra
Comment=Groups, Algorithms, Programming
Exec=gap %U
Icon=/usr/share/icons/hicolor/32x32/gap.png
Terminal=true
Type=Application
Categories=Education;Science;Math;
MimeType=application/x-gap;

5
gap.el Normal file
View File

@ -0,0 +1,5 @@
(autoload 'gap-mode "gap-mode" "Gap editing mode" t)
(autoload 'gap "gap-process" "Run GAP in emacs buffer" t)
(add-to-list 'auto-mode-alist '("\\.g$" . gap-mode))
(add-to-list 'auto-mode-alist '("\\.gap$" . gap-mode))
(setq gap-executable "/usr/bin/gap")

421
gap.spec Normal file
View File

@ -0,0 +1,421 @@
%global upstreamver 4r4p12
%global gapdirname gap%(echo %upstreamver | cut -dp -f1)
%global gapdir %{_datadir}/gap
%global gaparchdir %{_prefix}/lib/gap
%global icondir %{_datadir}/icons/hicolor
Name: gap
Version: %(echo %upstreamver | sed -r "s/r|p/./g")
Release: 3%{?dist}
Summary: Computational discrete algebra
Group: Applications/Engineering
License: GPLv2+
URL: http://www.gap-system.org/
Source0: ftp://ftp.gap-system.org/pub/gap/gap4/tar.bz2/%{name}%{upstreamver}.tar.bz2
Source1: gap-README.fedora
Source2: update-gap-workspace
Source3: gap.xml
Source4: gap.desktop
Source5: gap.el
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: gap-paths.patch
# This patch from Debian makes GAP use termios controls instead of BSD ioctls
# to manage a raw terminal.
Patch1: gap-raw.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.
Patch2: gap-help.patch
# This patch will not be sent upstream. It fixes some CRCs after converting
# the source files from ISO8859-1 to UTF-8 and applying the previous patches.
Patch3: gap-crc.patch
# This patch will not be sent upstream. It makes the main binary read the
# environment variables now read by gap.sh, so we can dispose of the shell
# script and run the actual binary directly.
Patch4: gap-env.patch
# This patch was sent upstream 4 Aug 2011. It fixes several places where the
# sources violate ANSI C alias analysis rules.
Patch5: gap-alias.patch
# This patch was sent upstream 4 Aug 2011. It fixes some cosmetic issues in
# the Emacs Lisp sources.
Patch6: gap-emacs.patch
BuildRequires: desktop-file-utils
BuildRequires: netpbm-progs
BuildRequires: emacs
BuildRequires: xemacs
Requires: %{name}-libs = %{version}-%{release}
Requires: %{name}-core%{?_isa} = %{version}-%{release}
Requires: %{name}-online-help = %{version}-%{release}
Requires: %{name}-prim-groups = %{version}-%{release}
Requires: %{name}-small-groups = %{version}-%{release}
Requires: %{name}-trans-groups = %{version}-%{release}
%description
GAP is a system for computational discrete algebra, with particular
emphasis on Computational Group Theory. GAP provides a programming
language, a library of thousands of functions implementing algebraic
algorithms written in the GAP language as well as large data libraries
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.
%package libs
Summary: Essential GAP libraries
Group: Applications/Engineering
BuildArch: noarch
%description libs
This package contains the essential GAP libraries: lib and grp.
%package core
Summary: GAP core components
Group: Applications/Engineering
Requires: %{name}-libs = %{version}-%{release}
# The gap binary executes gunzip
Requires: gzip
Requires: hicolor-icon-theme
%description core
This package contains the core GAP system.
%package online-help
Summary: Online help for GAP
Group: Documentation
Requires: %{name}-core = %{version}-%{release}
BuildArch: noarch
%description online-help
This package contains the documentation in TeX format needed for GAP's
online help system.
%package devel
Summary: GAP compiler and development files
Group: Development/Languages
Requires: %{name}-core%{?isa} = %{version}-%{release}
Requires: gcc
%description devel
This package contains the GAP compiler (gac) and the header files necessary
for developing GAP programs.
%package prim-groups
Summary: Database of primitive groups for GAP
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}
BuildArch: noarch
%description prim-groups
This package contains a database of primitive groups for GAP.
%package small-groups
Summary: Database of small groups for GAP
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}
BuildArch: noarch
%description small-groups
This package contains a database of groups of small order for GAP. The
database includes the group data and identification routines for groups
of order up to 2000.
%package trans-groups
Summary: Database of transitive groups for GAP
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}
BuildArch: noarch
%description trans-groups
This package contains a database of transitive groups for GAP.
%package vim
Summary: Edit GAP files with VIM
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}, vim-filesystem
BuildArch: noarch
%description vim
This package provides VIM add-on files to support editing GAP sources.
Both syntax highlighting and indentation are supported.
%package emacs
Summary: Edit GAP files with Emacs
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}
Requires: emacs(bin) >= %{_emacs_version}
BuildArch: noarch
%description emacs
This package provides Emacs add-on files to support editing GAP sources
and running GAP from within Emacs.
%package emacs-el
Summary: Emacs Lisp source files for GAP
Group: Applications/Engineering
Requires: %{name}-emacs = %{version}-%{release}
BuildArch: noarch
%description emacs-el
Emacs Lisp source files for GAP. This package is not needed to use the
GAP Emacs support.
%package xemacs
Summary: Edit GAP files with XEmacs
Group: Applications/Engineering
Requires: %{name}-core = %{version}-%{release}
Requires: xemacs(bin) >= %{_xemacs_version}, xemacs-packages-base
BuildArch: noarch
%description xemacs
This package provides XEmacs add-on files to support editing GAP sources
and running GAP from within XEmacs.
%package xemacs-el
Summary: XEmacs Lisp source files for GAP
Group: Applications/Engineering
Requires: %{name}-xemacs = %{version}-%{release}
BuildArch: noarch
%description xemacs-el
XEmacs Lisp source files for GAP. This package is not needed to use the
GAP XEmacs support.
%prep
%setup -q -n %{gapdirname}
%patch0
%patch1
%patch2
%patch3
%patch4
%patch5
%patch6
# Replace the CFLAGS
sed -i "s|gp_cv_cflags=\"-Wall -g -O2\"|gp_cv_cflags='$RPM_OPT_FLAGS -DSYS_DEFAULT_PATHS=\\\\\"%{gapdir}\\\\\"'|" \
cnf/configure.out
# Fix file encodings
for f in description4r4p6 etc/gap*.vim etc/README.vim-utils lib/colorprompt.g \
lib/grpffmat.gi lib/grpnames.gd lib/grpnames.gi lib/helpbase.* \
lib/helpdef.* lib/helpview.* lib/memory.* lib/pager.* \
lib/polyconw.gi lib/semirel.gi small/README; do
iconv -f iso8859-1 -t utf-8 $f > $f.new
touch -f $f $f.new
mv -f $f.new $f
done
# Get the README
cp -p %{SOURCE1} README.fedora
%build
%configure
make %{?_smp_mflags} compile
# Compress help files
find doc -name \*.dvi -o -name \*.toc | xargs gzip --best
# Compress large group files
find -O3 small -mindepth 2 -type f | xargs gzip --best -f
gzip --best prim/grps/*.g trans/*.grp
%install
# Get the value of the GAParch variable
source ./sysinfo.gap
# Install the binaries
mkdir -p $RPM_BUILD_ROOT%{_bindir}
cp -p bin/$GAParch/gap $RPM_BUILD_ROOT%{_bindir}
cp -p %{SOURCE2} $RPM_BUILD_ROOT%{_bindir}
sed -e "s|@gaparch@|$GAParch|" \
-e "s| -DSYS_DEFAULT_PATHS=\\\"/usr/share/gap\\\"||" \
bin/$GAParch/gac > $RPM_BUILD_ROOT%{_bindir}/gac
chmod a+x $RPM_BUILD_ROOT%{_bindir}/ga*
# Install the data
mkdir -p $RPM_BUILD_ROOT%{gapdir}/etc
cp -a grp lib prim small trans tst $RPM_BUILD_ROOT%{gapdir}
cp -p etc/debug* $RPM_BUILD_ROOT%{gapdir}/etc
# Install the arch-specific files
mkdir -p $RPM_BUILD_ROOT%{gaparchdir}
cp -p sysinfo.gap $RPM_BUILD_ROOT%{gaparchdir}
# Create the system workspace, initially empty
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/%{name}
touch $RPM_BUILD_ROOT%{_localstatedir}/lib/%{name}/workspace
# Install the header and object files where the GAP compiler can find them
mkdir -p $RPM_BUILD_ROOT%{gaparchdir}/src
cp -p src/*.h bin/$GAParch/config.h $RPM_BUILD_ROOT%{gaparchdir}/src
mkdir -p $RPM_BUILD_ROOT%{gaparchdir}/bin/$GAParch
cp -p bin/$GAParch/*.o $RPM_BUILD_ROOT%{gaparchdir}/bin/$GAParch
# Make an empty directory to hold the GAP packages
mkdir -p $RPM_BUILD_ROOT%{gapdir}/pkg
# Intall the documentation
cp -a doc $RPM_BUILD_ROOT%{gapdir}
rm -f $RPM_BUILD_ROOT%{gapdir}/doc/manualindex
rm -fr $RPM_BUILD_ROOT%{gapdir}/doc/test
# Install the icon
mkdir -p $RPM_BUILD_ROOT%{icondir}/32x32
bmptopnm bin/gapicon.bmp | pnmtopng -compression=9 \
> $RPM_BUILD_ROOT%{icondir}/32x32/gap.png
# Install the MIME type
mkdir -p $RPM_BUILD_ROOT%{_datadir}/mime/packages
cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_datadir}/mime/packages
# Install the desktop file
mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications
desktop-file-install --mode=644 --dir=$RPM_BUILD_ROOT%{_datadir}/applications \
%{SOURCE4}
# Install the VIM support
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/indent
cp -p etc/gap_indent.vim $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/indent
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/syntax
cp -p etc/gap.vim $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/syntax
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/ftdetect
cp -p %{SOURCE9} $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/ftdetect
# Install the Emacs support
mkdir -p $RPM_BUILD_ROOT%{_emacs_sitelispdir}
cp -p etc/emacs/gap*.el $RPM_BUILD_ROOT%{_emacs_sitelispdir}
pushd $RPM_BUILD_ROOT%{_emacs_sitelispdir}
%{_emacs_bytecompile} gap*.el
popd
mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir}
cp -p %{SOURCE5} $RPM_BUILD_ROOT%{_emacs_sitestartdir}
# Install the XEmacs support
mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitelispdir}
cp -p etc/emacs/gap*.el $RPM_BUILD_ROOT%{_xemacs_sitelispdir}
pushd $RPM_BUILD_ROOT%{_xemacs_sitelispdir}
%{_xemacs_bytecompile} gap*.el
popd
mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitestartdir}
cp -p %{SOURCE5} $RPM_BUILD_ROOT%{_xemacs_sitestartdir}
# Install the man pages
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
sed "s|@VERSION@|%{version}|" %{SOURCE6} > $RPM_BUILD_ROOT%{_mandir}/man1/gap.1
sed "s|@VERSION@|%{version}|" %{SOURCE7} > $RPM_BUILD_ROOT%{_mandir}/man1/gac.1
cp -p %{SOURCE8} $RPM_BUILD_ROOT%{_mandir}/man1
%post core
update-mime-database %{_datadir}/mime &>/dev/null ||:
touch --no-create %{icondir} >&/dev/null ||:
update-desktop-database %{_datadir}/applications &>/dev/null ||:
%{_bindir}/update-gap-workspace
%postun core
update-mime-database %{_datadir}/mime &>/dev/null ||:
touch --no-create %{icondir} >&/dev/null ||:
%{_bindir}/gtk-update-icon-cache %{icondir} >&/dev/null ||:
update-desktop-database %{_datadir}/applications &>/dev/null ||:
%posttrans
%{_bindir}/gtk-update-icon-cache %{icondir} >&/dev/null ||:
%posttrans prim-groups -p %{_bindir}/update-gap-workspace
%postun prim-groups -p %{_bindir}/update-gap-workspace
%posttrans small-groups -p %{_bindir}/update-gap-workspace
%postun small-groups -p %{_bindir}/update-gap-workspace
%posttrans trans-groups -p %{_bindir}/update-gap-workspace
%postun trans-groups -p %{_bindir}/update-gap-workspace
%check
sed -e "s|^GAP_DIR=.*|GAP_DIR=$RPM_BUILD_ROOT%{gapdir}|" \
-e "s|\$GAP_DIR/bin/\$GAP_PRG|$RPM_BUILD_ROOT%{_bindir}/gap|" \
-i bin/gap.sh
make testinstall
%files
# No files in the metapackage
%files libs
%doc etc/GPL
%dir %{gapdir}
%{gapdir}/grp/
%{gapdir}/lib/
%files core
%doc README README.fedora description*
%{_bindir}/gap
%{_bindir}/update-gap-workspace
%dir %{gaparchdir}
%{gaparchdir}/sysinfo.gap
%{gapdir}/pkg/
%{_mandir}/man1/gap.1*
%{_mandir}/man1/update-gap-workspace.1*
%{_datadir}/applications/gap.desktop
%{_datadir}/mime/packages/gap.xml
%{icondir}/32x32/gap.png
%dir %{_localstatedir}/lib/%{name}/
%verify(user group mode) %{_localstatedir}/lib/%{name}/workspace
%files online-help
%{gapdir}/doc/
%files devel
%{_bindir}/gac
%{gaparchdir}/bin/
%{gaparchdir}/src/
%{gapdir}/tst/
%{_mandir}/man1/gac.1*
%files prim-groups
%{gapdir}/prim/
%files small-groups
%doc small/README
%{gapdir}/small/
%files trans-groups
%{gapdir}/trans/
%files vim
%{gapdir}/etc/
%{_datadir}/vim/vimfiles/ftdetect/gap.vim
%{_datadir}/vim/vimfiles/indent/gap_indent.vim
%{_datadir}/vim/vimfiles/syntax/gap.vim
%files emacs
%doc etc/emacs/gap-mode.doc
%{_emacs_sitelispdir}/gap*.elc
%{_emacs_sitestartdir}/gap.el
%files emacs-el
%{_emacs_sitelispdir}/gap*.el
%files xemacs
%doc etc/emacs/gap-mode.doc
%{_xemacs_sitelispdir}/gap*.elc
%{_xemacs_sitestartdir}/gap.el
%files xemacs-el
%{_xemacs_sitelispdir}/gap*.el
%changelog
* Wed Jan 11 2012 Jerry James <loganjerry@gmail.com> - 4.4.12-3
- Fix problems found on review
* Tue Jan 3 2012 Jerry James <loganjerry@gmail.com> - 4.4.12-2
- Mimic Debian's subpackage structure
* Wed Oct 12 2011 Jerry James <loganjerry@gmail.com> - 4.4.12-1
- Initial RPM

1
gap.vim Normal file
View File

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

7
gap.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-gap">
<comment>GAP input</comment>
<glob pattern="*.gap"/>
</mime-type>
</mime-info>

View File

@ -0,0 +1 @@
2808c00e85e98843bb0e1a62c33ad5f0 gap4r4p12.tar.bz2

36
update-gap-workspace Executable file
View File

@ -0,0 +1,36 @@
#!/bin/sh
#
# Script borrowed from Debian. Thanks to the Debian packagers.
set -e
GAP="/usr/bin/gap"
if ! test -x "$GAP"; then
exit 0;
fi
if test `id -u` = 0; then
WORKSPACE=/var/lib/gap/workspace
else
WORKSPACE=$HOME/gap/workspace
fi
case $1 in
delete) echo -n "Deleting GAP workspace $WORKSPACE.gz: "
rm -f $WORKSPACE.gz
echo "done.";;
''|update) echo -n "Updating GAP workspace $WORKSPACE.gz: "
rm -f $WORKSPACE.gz
mkdir -p `dirname $WORKSPACE`
echo 'SaveWorkspace("'$WORKSPACE'");' | $GAP -q -r -R >/dev/null
gzip --best $WORKSPACE
echo "done.";;
*)
echo "$0 update"
echo " Update GAP workspace in $WORKSPACE.gz"
echo
echo "$0 delete"
echo " Delete GAP workspace in $WORKSPACE.gz"
;;
esac

44
update-gap-workspace.1 Normal file
View File

@ -0,0 +1,44 @@
.TH "UPDATE-GAP-WORKSPACE" "1" "July 2003" "GAP" "User Commands"
.SH "NAME"
update-gap-workspace \- manage a GAP workspace.
.SH "SYNOPSIS"
\&update-gap-workspace
.PP
\&update-gap-workspace update
.IP
Create or update the GAP workspace.
.PP
\&update-gap-workspace delete
.IP
Delete the GAP workspace.
.SH "DESCRIPTION"
At start up, GAP load all libraries and packages available on the system.
This take several seconds. To save time, GAP can store the result of
this initialisation in a `workspace'.
.I update-gap-workspace
help to manage such workspaces.
.I update-gap-workspace
can be run as root to manage the system-wide workspace.
.I update-gap-workspace
can be run as a normal user. In this case the workspace is stored in
$HOME/gap/workspace.gz.
.PP
Note that you need to rebuild the workspace each time GAP packages are
added, removed or updated. To automate that task, if the system-wide
workspace exists, it is automatically updated whenever a GAP-related
Debian package is installed or upgraded.
.PP
The gap script will automatically load such workspace at start up.
.SH "FILES"
.I /var/lib/gap/workspace.gz:
.RS
The system-wide GAP workspace.
.RE
.I $HOME/gap/workspace.gz:
.RS
The user-specific GAP workspace.
.SH "SEE ALSO"
.I gap(1),
.I The \`SaveWorkspace' function in the GAP manual.
.SH "AUTHOR"
Bill Allombert <ballombe@debian.org>