Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346#!/usr/bin/env perl # Turn on autoflush local $| = 1; $pwd = `pwd`; chomp $pwd; $tstdir = "$pwd/tst"; $i = ""; $tmpdir = "/tmp/testPq"; while ( (-d "$tmpdir$i") && !(-W "$tmpdir$i") ) { $i++ } $tmpdir .= $i; system("rm -rf $tmpdir; mkdir $tmpdir"); print "Made dir: $tmpdir\n"; $ANUPQversion = "3.2"; $pqbinaryversion = "1.9"; $AutPGrpversion = "1.5"; $GAPversion = "4.5"; # required GAP version for ANUPQ print "Testing installation of ANUPQ Package (version $ANUPQversion)\n\n", "The first two tests check that the pq C program compiled ok.\n"; $pq = "$pwd/bin/x86_64-pc-linux-gnu-gcc-default64/pq"; ### standalone tests ############################################### # Test 1 print "Test 1: Testing the pq binary ..."; check("test1.pga", ""); # Test 2 print "Test 2: Testing the pq binary's stack size ..."; check("test2.pga", ""); print "The pq C program compiled ok! We test it's the right one below.\n\n", "The next tests check that you have the right version of GAP\n", "for version $ANUPQversion of the ANUPQ package and that GAP is finding\n", "the right versions of the ANUPQ and AutPGrp packages.\n\n"; ### GAP - ANUPQ package tests ##################################### # Test GAP print "Checking GAP ...\n"; $pq_does_not_know_GAP = 0; $GAP_EXEC = "gap"; if ( ($gap = $ENV{ANUPQ_GAP_EXEC}) ne "" ) { print " Found ANUPQ_GAP_EXEC environment variable set to: $gap\n"; } elsif ($GAP_EXEC ne "") { chomp($gap = $GAP_EXEC); print " pq binary made with GAP set to: $gap\n"; } else { $pq_does_not_know_GAP = 1; chomp($gap = `which gap4` || `which gap`); print " Found gap: $gap\n"; } open( GAPIN, ">$tmpdir/gapinput"); print GAPIN "CompareVersionNumbers(VERSION, \"$GAPversion\");\n", "VERSION;\n", "SetInfoLevel(InfoWarning, 0); # switch off warning messages\n", "TestPackageAvailability(\"anupq\", \"$ANUPQversion\");\n", "if LoadPackage(\"anupq\", \"$ANUPQversion\") = true then\n", " Print(GAPInfo.PackagesInfo.anupq[1].Version, \"\\n\");\n", " Print(ANUPQData.version, \"\\n\");\n", "fi;\n", "TestPackageAvailability(\"autpgrp\", \"\");\n", "TestPackageAvailability(\"autpgrp\", \"$AutPGrpversion\");\n", "if LoadPackage(\"autpgrp\", \"$AutPGrpversion\") = true then\n", " Print(GAPInfo.PackagesInfo.autpgrp[1].Version);\n", "elif LoadPackage(\"autpgrp\") = true then\n", " Print(GAPInfo.PackagesInfo.autpgrp[1].Version, \"\\n\");\n", "fi;\n"; close GAPIN; print " Starting GAP to determine version and package availability ...\n"; system("$gap -A -q -r < $tmpdir/gapinput > $tmpdir/gapout"); #print "$tmpdir/gapinput:\n"; #system("more $tmpdir/gapinput"); #print "$tmpdir/gapoutput:\n"; #system("more $tmpdir/gapoutput"); open(GAPOUT, "<$tmpdir/gapout"); $line = <GAPOUT>; while ( $line =~ /^\#W/ ) { $line = <GAPOUT>; } $version = <GAPOUT>; if ( $line !~ /(true|false)/ ) { # the GAP 3 case $version = $line; } $version =~ s/"//g; chomp $version; if ( $line =~ /true/ ) { print " GAP version ($version) ... OK.\n"; } elsif ( $line =~ /false/ ) { die " GAP version ($version) ... too old! At least GAP $GAPversion required!\n"; } else { die " GAP version ($version) ... please install GAP 4,", " at least version $GAPversion required!\n\n", " If you already have a new enough version of GAP 4 installed\n", " then you probably need to compile pq with an", " explicit GAP path, e.g.\n\n", " make GAP=/usr/local/bin/gap4\n"; } if ( ($line = <GAPOUT>) !~ /(fail|#I Error)/ ) { while ( ($line = <GAPOUT>) =~ /^#I/ ) { } chomp ($ANUPQfoundversion = $line); if ($ANUPQfoundversion == $ANUPQversion) { print " GAP found ANUPQ package (version $ANUPQfoundversion) ... good.\n"; } else { # $ANUPQfoundversion > $ANUPQversion print " GAP found ANUPQ package in a more recent version ", "($ANUPQfoundversion) ...\n", " Please check your installation!\n"; } } else { die " GAP did not find version $ANUPQversion of ANUPQ package ... \n". " Please check installation instructions for ANUPQ package.\n"; } if ( ($line = <GAPOUT>) !~ /(fail|#I Error)/ ) { chomp ($pqbinaryfoundversion = $line); if ($pqbinaryversion eq $pqbinaryfoundversion) { print " GAP found pq binary (version $pqbinaryfoundversion) ... good.\n"; } else { die " GAP found pq binary (version $pqbinaryfoundversion) ... not current!\n", " ANUPQ $ANUPQversion uses version $pqbinaryversion of ", "the pq program.\n", " It seems an earlier installation has been found?!\n"; } } else { die " GAP does not have the appropriate pq program installed ... \n", " ANUPQ $ANUPQversion uses version $pqbinaryversion of \n", " the pq program.\n"; } if ( ($line = <GAPOUT>) !~ /(fail|#I Error)/ ) { if ( ($line = <GAPOUT>) !~ /(fail|#I Error)/ ) { chomp ($AutPGrpfoundversion = <GAPOUT>); print " GAP found AutPGrp package (version $AutPGrpfoundversion) ... good.\n"; } else { chomp ($AutPGrpfoundversion = <GAPOUT>); die " GAP found AutPGrp package (version $AutPGrpfoundversion) ... too old!\n", " The ANUPQ package requires at least version $AutPGrpversion of ", "the AutPGrp package.\n"; } } else { die " GAP does not have the AutPGrp package installed ... \n", " The ANUPQ package requires the AutPGrp package \n", " (at least version $AutPGrpversion) for the computation of \n", " automorphism groups.\n"; } close GAPOUT; print " GAP is OK.\n\n"; # Test 3 print "Test 3: Checking the link between the pq binary and GAP ..."; if ( $pq_does_not_know_GAP ) { print " failed\n"; die " The environment variable: ANUPQ_GAP_EXEC is not set;\n". " and the pq binary was made with: make ... GAP=\"\" ??\n". " Please check the ANUPQ package installation instructions\n". " and either set the environment variable: ANUPQ_GAP_EXEC, or\n". " re-make the pq binary setting GAP to a valid path.\n"; } check("test3.pga", ""); # Test 4 print "Test 4: Testing the standard presentation part of the pq binary ..."; check("test4.sp", "-i -k "); # Test 5 print "Test 5: Doing p-group generation (final GAP/ANUPQ) test ..."; open( GAPIN, ">$tmpdir/gapinput"); print GAPIN "SetInfoLevel(InfoWarning, 0); LoadPackage( \"anupq\" );;\n", "SetInfoLevel(InfoWarning, 1);\n", "SetInfoLevel(InfoANUPQ, 1);\n", "Test( \"tst/anupga.tst\" );\n"; close GAPIN; system("$gap -b < $tmpdir/gapinput > $tmpdir/gapout"); open(GAPOUT, "<$tmpdir/gapout"); $seen_gap_prompt = 0; while (<GAPOUT>) { $seen_gap_prompt = 1 if ( /^gap> /); next if ( !$seen_gap_prompt ); if ( /^((gap> )*(\#I --|[+] |Line|$)|true$)/ ) { next; } elsif( /Pcgs\(\[ f1, f2, f3, f4 \]\) -> \[ / ) { next; } else { print " error.\n"; die " Please email the file: $tmpdir/gapout\n", " to Greg.Gamble\@uwa.edu.au\n"; } } print " OK.\n", "Tests complete.\n"; system("rm -rf $tmpdir; mkdir $tmpdir"); print "Removed dir: $tmpdir\n", "Enjoy using your functional ANUPQ package!\n"; sub check { my ($file, $opts) = @_; (my $outfile = $file) =~ s/[.](pga|sp)/.out/; # run pq over test file and clean out system-dependent stuff system("( cd $tmpdir; ". " $pq $opts< $tstdir/$file ". # ignore first two lines containing hostname and date information " | tail -n +3 ". " | grep -v seconds | grep -v '#I --' ". # sometimes emitted by gap-dev if a C source file CRC is out-of-date " | grep -v '#W ' ". # sometimes some shell escape sequence is printed " | sed -e 's/.\\[\\?.\\[\\?1034h//' ". # sometimes Info-ed by other packages " | grep -v 'GAPDoc not available' ". " | grep -v '#I default' | grep -v '#I a method' ". " | grep -v '#I underly' | grep -v '#I probably' ". " | grep -v ' g1, g2' | grep -v ' g18, g19, g20' ". " > $outfile )"); # now the only differences with the master copy should be due to pq's banner my @diff = `diff $tstdir/out/$outfile $tmpdir/$outfile`; if ($diff[0] =~ /^0a1,2/) { @diff = splice(@diff, 3); #remove first three difference lines } if (@diff == 0) { print " OK.\n"; } else { #print " differences:\n @diff"; if ( $file =~ /3/ ) { if ($ENV{ANUPQ_GAP_EXEC} ne "") { die " Please check the ANUPQ package installation instructions.\n" ." The setting of the environment variable: ANUPQ_GAP_EXEC\n" ." is not a valid path for GAP.\n"; } else { die " Please check the ANUPQ package installation instructions.\n" ." Value of <path> when the pq was made with: make ... GAP=<path>\n" ." is not a valid path for GAP.\n"; } } else { if ( $file =~ /4/ && @diff == 10 && !(grep { !/^\d+d\d+$/ && !/^<.*automorphism group/ } @diff) ) { #differences due to not compiling with gmp print " OK.\n"; } else { print " error.\n"; die " Please email the file: $tmpdir/$outfile\n", " to Greg.Gamble\@uwa.edu.au\n"; } } } }