Date: Thursday, March 31, 2016 @ 08:19:41 Author: arojas Revision: 169008
- libgap 4.8 rebuild - fix docs path - create meataxe data dir at startup Added: sagemath/trunk/gap-4.8.patch Modified: sagemath/trunk/PKGBUILD sagemath/trunk/env.patch sagemath/trunk/paths.patch ---------------+ PKGBUILD | 15 +- env.patch | 7 - gap-4.8.patch | 378 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ paths.patch | 2 4 files changed, 393 insertions(+), 9 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-03-31 06:07:21 UTC (rev 169007) +++ PKGBUILD 2016-03-31 06:19:41 UTC (rev 169008) @@ -9,7 +9,7 @@ pkgname=sagemath pkgver=7.1 -pkgrel=2 +pkgrel=3 pkgdesc="Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab" arch=(i686 x86_64) url="http://www.sagemath.org" @@ -26,7 +26,7 @@ 'coxeter3: Coxeter groups implementation' 'cryptominisat: SAT solver' 'gap-data: for computing Galois groups' 'jupyter-notebook: Jupyter notebook interface' 'atlas-lapack: improved performance for some linear algebra operations') makedepends=(cython2-devel boost ratpoints symmetrica fflas-ffpack python2-jinja coin-or-cbc - mcqd coxeter3 cryptominisat modular_decomposition bliss-graphs tdlib meataxe python2-pkgconfig) # libfes + mcqd coxeter3 cryptominisat modular_decomposition bliss-graphs tdlib python2-pkgconfig meataxe) # libfes conflicts=(sage-mathematics) replaces=(sage-mathematics) provides=(sage-mathematics) @@ -33,19 +33,20 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/sagemath/sage/archive/$pkgver.tar.gz" pexpect.zip::"https://github.com/pexpect/pexpect/archive/524495960dd8898ddd30f7ba37298de51beee773.zip" anal.h package.patch env.patch paths.patch clean.patch skip-check.patch - disable-fes.patch jupyter-path.patch test-optional.patch python-2.7.11.patch) + disable-fes.patch jupyter-path.patch test-optional.patch python-2.7.11.patch gap-4.8.patch) md5sums=('c68e846444b9370fe79f43395cdc2725' 'a346bb2c0350c1cb17d5325235c5e38a' 'a906a180d198186a39820b0a2f9a9c63' '9ba81f717ffd4e20b8b2f2a318307488' - '9e5b8b4f3ce28f51999ce0dd8c9358e7' - '1a60304525ac5a5f45114cc704807894' + '21010618e80fc28582a84695a1fed0e5' + '0f746ed394fd7eb7a6b3963014976098' '6d9ae0978ce6a05a0da2cafdfb178a09' '5947a420a0b1483f0cbc74c76895789b' '4eb23a3c7363258bc9ba764d6e5512ba' '16b529194c6105c3364127bd8f1efa83' 'cdcabd475b80afe0534a5621e972736e' - 'ef927896f2071b442b1d07d7e69f5f3a') + 'ef927896f2071b442b1d07d7e69f5f3a' + '8f631f4132d3a97dade07e4c60044aed') prepare(){ cd sage-$pkgver @@ -84,6 +85,8 @@ # patch -p0 -i ../fes02.patch # disable fes module, fails to compile patch -p0 -i ../disable-fes.patch +# port to GAP 4.8 http://trac.sagemath.org/ticket/19911 + patch -p1 -i ../gap-4.8.patch # use python2 sed -e 's|#!/usr/bin/env python|#!/usr/bin/env python2|' -e 's|exec python|exec python2|' -i src/bin/* Modified: env.patch =================================================================== --- env.patch 2016-03-31 06:07:21 UTC (rev 169007) +++ env.patch 2016-03-31 06:19:41 UTC (rev 169008) @@ -68,7 +68,7 @@ +export SAGE_EXTCODE="$SAGE_SHARE/ext" +export SAGE_SRC="$SAGE_SHARE/source" +export SAGE_DOC_SRC="$SAGE_SRC/doc" -+export SAGE_DOC="$SAGE_SHARE/doc/sage" ++export SAGE_DOC="/usr/share/doc/sage" # We offer a toolchain option, so if $SAGE_LOCAL/toolchain/toolchain-env exists source it. # Since the user might do something crazy we do not do any checks, but hope for the best. @@ -82,10 +82,13 @@ if [ -z "$SAGE_REPO_ANONYMOUS" ]; then SAGE_REPO_ANONYMOUS="git://trac.sagemath.org/sage.git" export SAGE_REPO_ANONYMOUS -@@ -363,38 +318,30 @@ +@@ -363,38 +318,33 @@ export SAGE_STARTUP_FILE fi ++export LIBMTX="$DOT_SAGE/meataxe" ++[[ -d $LIBMTX ]] || mkdir $LIBMTX # Create meataxe data dir ++ -IPYTHONDIR=`find "$SAGE_SPKG_INST" -name "ipython*"` -if [ -n "$IPYTHONDIR" ]; then - export IPYTHONDIR="$DOT_SAGE/${IPYTHONDIR##*/}" Added: gap-4.8.patch =================================================================== --- gap-4.8.patch (rev 0) +++ gap-4.8.patch 2016-03-31 06:19:41 UTC (rev 169008) @@ -0,0 +1,378 @@ +diff --git a/src/ext/gap/console.g b/src/ext/gap/console.g +index 57043ff..db8b925 100644 +--- a/src/ext/gap/console.g ++++ b/src/ext/gap/console.g +@@ -1,6 +1,6 @@ +-# If we are loaded with a workspace then $SAGE will be defined and in ++# If we are loaded with a workspace then \$SAGE will be defined and in + # that case we need to call StartInteract so that the pager will be + # set correctly. See trac #5043. +-if IsBound($SAGE) then +- $SAGE.StartInteract(); ++if IsBound(\$SAGE) then ++ \$SAGE.StartInteract(); + fi; +diff --git a/src/ext/gap/sage.g b/src/ext/gap/sage.g +index 8535b7d..2216fda 100644 +--- a/src/ext/gap/sage.g ++++ b/src/ext/gap/sage.g +@@ -2,15 +2,15 @@ + # + # SAGE support utilities to read into the GAP session. + # +-$SAGE := rec(); ++\$SAGE := rec(); + +-$SAGE.OldPager := Pager; ++\$SAGE.OldPager := Pager; + + +-$SAGE.NewPager := ++\$SAGE.NewPager := + function( data ) + local str, lines, line, fn, start; +- str := OutputTextFile($SAGE.tempfile,false); ++ str := OutputTextFile(\$SAGE.tempfile,false); + start := 1; + if IsRecord(data) then + lines := data.lines; +@@ -30,38 +30,38 @@ $SAGE.NewPager := + Print("Page from ",start,"\n"); + end; + +-$SAGE.StartInteract := function() ++\$SAGE.StartInteract := function() + MakeReadWriteGlobal("Pager"); +- Pager := $SAGE.OldPager; +- HELP_VIEWER_INFO.screen.show := $SAGE.OldPager; ++ Pager := \$SAGE.OldPager; ++ HELP_VIEWER_INFO.screen.show := \$SAGE.OldPager; + MakeReadOnlyGlobal("Pager"); + end; + + +-$SAGE.StopInteract := function() ++\$SAGE.StopInteract := function() + MakeReadWriteGlobal("Pager"); +- Pager := $SAGE.NewPager; +- HELP_VIEWER_INFO.screen.show := $SAGE.NewPager; ++ Pager := \$SAGE.NewPager; ++ HELP_VIEWER_INFO.screen.show := \$SAGE.NewPager; + MakeReadOnlyGlobal("Pager"); + end; + + +-$SAGE.StopInteract(); ++\$SAGE.StopInteract(); + +-#$SAGE.ErrorHandler := function(m,a,m2,mode) ++#\$SAGE.ErrorHandler := function(m,a,m2,mode) + # PrintTo("*errout*", m); + # if a <> fail then + # PrintTo("*errout*",a); + # fi; +-# SetErrorHandler($SAGE.ErrorHandler); ++# SetErrorHandler(\$SAGE.ErrorHandler); + # return true; + #end; + +-#SetErrorHandler($SAGE.ErrorHandler); ++#SetErrorHandler(\$SAGE.ErrorHandler); + + SetAllInfoLevels(0); + +-$SAGE.OperationsAdmittingFirstArgument := function(obj) ++\$SAGE.OperationsAdmittingFirstArgument := function(obj) + local hits, myflags, i, flagss, flags; + hits := []; + myflags := FlagsType(TypeObj(obj)); +@@ -78,7 +78,7 @@ $SAGE.OperationsAdmittingFirstArgument := function(obj) + end; + + +-$SAGE.CleanOperationName := function(name) ++\$SAGE.CleanOperationName := function(name) + local lt, ls; + lt := Length("Tester("); + if Length(name) > lt and name{[1..lt]} = "Tester(" then +@@ -91,7 +91,7 @@ $SAGE.CleanOperationName := function(name) + return name; + end; + +-$SAGE.HasAtLeastOneMethodAsFirstArgument := function(op,obj) ++\$SAGE.HasAtLeastOneMethodAsFirstArgument := function(op,obj) + local t, f, n, meths, i; + t := TypeObj(obj); + f := FlagsType(t); +@@ -107,11 +107,11 @@ $SAGE.HasAtLeastOneMethodAsFirstArgument := function(op,obj) + end; + + +-$SAGE.PlausibleTabCompletionsForSage := function(o) ++\$SAGE.PlausibleTabCompletionsForSage := function(o) + local ops, opnames; +- ops := Filtered($SAGE.OperationsAdmittingFirstArgument(o), op -> +- $SAGE.HasAtLeastOneMethodAsFirstArgument(op,o)); +- opnames := List(ops, op -> $SAGE.CleanOperationName(NameFunction(op))); ++ ops := Filtered(\$SAGE.OperationsAdmittingFirstArgument(o), op -> ++ \$SAGE.HasAtLeastOneMethodAsFirstArgument(op,o)); ++ opnames := List(ops, op -> \$SAGE.CleanOperationName(NameFunction(op))); + return Concatenation(opnames, GLOBAL_FUNCTION_NAMES); + end; + +diff --git a/src/sage/groups/finitely_presented.py b/src/sage/groups/finitely_presented.py +index 92a4393..fd856ef 100644 +--- a/src/sage/groups/finitely_presented.py ++++ b/src/sage/groups/finitely_presented.py +@@ -1168,9 +1168,7 @@ class FinitelyPresentedGroup(GroupMixinLibGAP, UniqueRepresentation, + You can attempt to reduce the presentation of the output group:: + + sage: D = C2.semidirect_product(C8, hom); D +- Finitely presented group < a, b, c, d | +- a^2, b^-1*a^-1*b*a*d^-1*c^-1, c^-1*a^-1*c*a*d^-1, d^-1*a^-1*d*a, +- b^2*c^-1, c^-1*b^-1*c*b, d^-1*b^-1*d*b, c^2*d^-1, d^-1*c^-1*d*c, d^2 > ++ Finitely presented group < a, b | a^2, b^8, a^-1*b*a*b > + sage: D = C2.semidirect_product(C8, hom, reduced=True); D + Finitely presented group < a, b | a^2, (a*b)^2, b^8 > + +@@ -1178,10 +1176,9 @@ class FinitelyPresentedGroup(GroupMixinLibGAP, UniqueRepresentation, + sage: C4 = groups.presentation.Cyclic(4) + sage: hom = (C3.gens(), [(C4.gens(), C4.gens())]) + sage: C3.semidirect_product(C4, hom) +- Finitely presented group < a, b, c | +- a^3, b^-1*a^-1*b*a, c^-1*a^-1*c*a, b^2*c^-1, c^-1*b^-1*c*b, c^2 > ++ Finitely presented group < a, b | a^3, b^4, a^-1*b*a*b^-1 > + sage: D = C3.semidirect_product(C4, hom, reduced=True); D +- Finitely presented group < a, b | a^3, b^4, b^-1*a^-1*b*a > ++ Finitely presented group < a, b | a^3, b^4, a^-1*b*a*b^-1 > + sage: D.as_permutation_group().is_cyclic() + True + +@@ -1193,9 +1190,7 @@ class FinitelyPresentedGroup(GroupMixinLibGAP, UniqueRepresentation, + sage: C12 = groups.presentation.Cyclic(12) + sage: hom = (C5.gens(), [(C12.gens(), C12.gens())]) + sage: sp = C5.semidirect_product(C12, hom, check=False); sp +- Finitely presented group < a, b, c, d | +- a^5, b^-1*a^-1*b*a, c^-1*a^-1*c*a, d^-1*a^-1*d*a, b^2*d^-1, +- c^-1*b^-1*c*b, d^-1*b^-1*d*b, c^3, d^-1*c^-1*d*c, d^2 > ++ Finitely presented group < a, b | a^5, b^12, a^-1*b*a*b^-1 > + sage: sp.as_permutation_group().is_cyclic(), sp.order() + (True, 60) + +diff --git a/src/sage/groups/matrix_gps/matrix_group.py b/src/sage/groups/matrix_gps/matrix_group.py +index 698a587..3e200e6 100644 +--- a/src/sage/groups/matrix_gps/matrix_group.py ++++ b/src/sage/groups/matrix_gps/matrix_group.py +@@ -584,19 +584,19 @@ class MatrixGroup_gap(GroupMixinLibGAP, MatrixGroup_generic, ParentLibGAP): + sage: i = iter(GL(6,5)) + sage: [ next(i) for j in range(8) ] + [ +- [1 0 0 0 0 0] [4 0 0 0 0 1] [0 4 0 0 0 0] [0 4 0 0 0 0] +- [0 1 0 0 0 0] [4 0 0 0 0 0] [0 0 4 0 0 0] [0 0 4 0 0 0] +- [0 0 1 0 0 0] [0 4 0 0 0 0] [0 0 0 4 0 0] [0 0 0 4 0 0] +- [0 0 0 1 0 0] [0 0 4 0 0 0] [0 0 0 0 4 0] [0 0 0 0 4 0] +- [0 0 0 0 1 0] [0 0 0 4 0 0] [0 0 0 0 0 4] [0 0 0 0 0 4] +- [0 0 0 0 0 1], [0 0 0 0 4 0], [1 4 0 0 0 0], [2 4 0 0 0 0], ++ [1 0 0 0 0 0] [2 0 0 0 0 0] [3 0 0 0 0 0] [3 2 0 0 0 0] ++ [0 1 0 0 0 0] [0 1 0 0 0 0] [0 1 0 0 0 0] [0 1 0 0 0 0] ++ [0 0 1 0 0 0] [0 0 1 0 0 0] [0 0 1 0 0 0] [0 0 1 0 0 0] ++ [0 0 0 1 0 0] [0 0 0 1 0 0] [0 0 0 1 0 0] [0 0 0 1 0 0] ++ [0 0 0 0 1 0] [0 0 0 0 1 0] [0 0 0 0 1 0] [0 0 0 0 1 0] ++ [0 0 0 0 0 1], [0 0 0 0 0 1], [0 0 0 0 0 1], [0 0 0 0 0 1], + <BLANKLINE> +- [3 0 0 0 0 1] [4 0 0 1 3 3] [0 0 0 2 0 0] [1 0 0 0 4 4] +- [3 0 0 0 0 0] [4 0 0 0 3 3] [0 0 0 0 4 0] [1 0 0 0 0 4] +- [0 4 0 0 0 0] [3 0 0 0 0 1] [2 2 0 0 0 2] [1 0 0 0 0 0] +- [0 0 4 0 0 0] [3 0 0 0 0 0] [1 4 0 0 0 0] [0 1 0 0 0 0] +- [0 0 0 4 0 0] [0 4 0 0 0 0] [0 2 4 0 0 0] [0 0 1 0 0 0] +- [4 0 0 0 2 3], [2 0 3 4 4 4], [0 0 1 4 0 0], [0 0 0 1 0 0] ++ [2 1 0 0 0 0] [3 3 0 2 3 0] [2 4 0 1 4 0] [1 2 4 1 0 3] ++ [0 1 0 0 0 0] [0 1 0 0 0 0] [0 1 0 0 0 0] [0 1 0 0 0 0] ++ [0 0 1 0 0 0] [0 0 1 0 0 0] [0 0 1 0 0 0] [0 0 1 0 0 0] ++ [0 0 0 1 0 0] [0 0 0 1 0 0] [0 0 0 1 0 0] [0 0 0 1 0 0] ++ [0 0 0 0 1 0] [0 0 0 0 1 0] [0 0 0 0 1 0] [0 0 0 0 1 0] ++ [0 0 0 0 0 1], [0 0 0 0 0 1], [0 0 0 0 0 1], [0 0 0 0 0 1] + ] + + This is the direct computation in GAP, which will just run +diff --git a/src/sage/groups/perm_gps/permgroup.py b/src/sage/groups/perm_gps/permgroup.py +index 2a426f1..5295949 100644 +--- a/src/sage/groups/perm_gps/permgroup.py ++++ b/src/sage/groups/perm_gps/permgroup.py +@@ -1548,18 +1548,23 @@ class PermutationGroup_generic(group.FiniteGroup): + + EXAMPLES:: + +- sage: SymmetricGroup(10).stabilizer(4)._order() ++ sage: G = SymmetricGroup(10).subgroup([(i, 10) for i in range(1, 10) if i != 4]) ++ sage: G._order() + 362880 +- sage: SymmetricGroup(10).stabilizer(4).stabilizer(5)._order() +- 40320 +- sage: SymmetricGroup(200).stabilizer(100)._order() == factorial(199) # this should be very fast +- True + + TESTS:: + + sage: [SymmetricGroup(n).stabilizer(1)._gap_().Size() for n in [4..10]] + [6, 24, 120, 720, 5040, 40320, 362880] +- sage: [SymmetricGroup(n).stabilizer(1)._order() for n in [4..10]] ++ sage: special_gens = [ ++ ....: [(3,4), (2,4)], ++ ....: [(4,5), (3,5), (2,5)], ++ ....: [(5,6), (4,6), (3,6), (2,6)], ++ ....: [(6,7), (5,7), (4,7), (3,7), (2,7)], ++ ....: [(7,8), (6,8), (5,8), (4,8), (3,8), (2,8)], ++ ....: [(8,9), (7,9), (6,9), (5,9), (4,9), (3,9), (2,9)], ++ ....: [(9,10), (8,10), (7,10), (6,10), (5,10), (4,10), (3,10), (2,10)]] ++ sage: [SymmetricGroup(n).subgroup(gen)._order() for gen in special_gens] + [6, 24, 120, 720, 5040, 40320, 362880] + """ + gens = self.gens() +diff --git a/src/sage/interfaces/expect.py b/src/sage/interfaces/expect.py +index 756f701..88dbf82 100644 +--- a/src/sage/interfaces/expect.py ++++ b/src/sage/interfaces/expect.py +@@ -1423,13 +1423,13 @@ class StdOutContext: + return self.interface + + def __exit__(self, typ, value, tb): +- """ ++ r""" + EXAMPLE:: + + sage: from sage.interfaces.expect import StdOutContext + sage: with StdOutContext(gap): + ....: gap('1+1') +- $sage... ++ \$sage... + """ + if self.silent: + return +diff --git a/src/sage/interfaces/gap.py b/src/sage/interfaces/gap.py +index 1f446aa..198fe84 100644 +--- a/src/sage/interfaces/gap.py ++++ b/src/sage/interfaces/gap.py +@@ -716,7 +716,7 @@ class Gap_generic(ExtraTabCompletion, Expect): + sage: gap.eval('quit;') + '' + sage: a = gap(3) +- ** Gap crashed or quit executing '$sage...:=3;;' ** ++ ** Gap crashed or quit executing '\$sage...:=3;;' ** + Restarting Gap and trying again + sage: a + 3 +@@ -858,7 +858,7 @@ class Gap_generic(ExtraTabCompletion, Expect): + EXAMPLES:: + + sage: print gap.version() +- 4.7... ++ 4.8... + """ + return self.eval('VERSION')[1:-1] + +@@ -1162,25 +1162,29 @@ class Gap(Gap_generic): + return reduce_load_GAP, tuple([]) + + def _next_var_name(self): +- """ ++ r""" + Returns the next unused variable name. + ++ Note that names starting with dollar signs are valid GAP ++ identifiers, but need to be escaped with a backslash starting ++ with GAP-4.8. ++ + EXAMPLES:: + + sage: g = Gap() + sage: g._next_var_name() +- '$sage1' ++ '\\$sage1' + sage: g(2)^2 + 4 + sage: g._next_var_name() +- '$sage...' ++ '\\$sage...' + """ + if len(self._available_vars) != 0: + v = self._available_vars[0] + del self._available_vars[0] + return v + self.__seq += 1 +- return '$sage%s'%self.__seq ++ return r'\$sage%s'%self.__seq + + def _start(self): + """ +@@ -1324,7 +1328,7 @@ class Gap(Gap_generic): + else: + tmp_to_use = self._local_tmpfile() + self.eval('SetGAPDocTextTheme("none")') +- self.eval('$SAGE.tempfile := "%s";'%tmp_to_use) ++ self.eval(r'\$SAGE.tempfile := "%s";'%tmp_to_use) + line = Expect.eval(self, "? %s"%s) + Expect.eval(self, "? 1") + match = re.search("Page from (\d+)", line) +@@ -1384,7 +1388,7 @@ class Gap(Gap_generic): + sage: gap._pre_interact() + sage: gap._post_interact() + """ +- self._eval_line("$SAGE.StartInteract();") ++ self._eval_line(r'\$SAGE.StartInteract();') + + def _post_interact(self): + """ +@@ -1393,7 +1397,7 @@ class Gap(Gap_generic): + sage: gap._pre_interact() + sage: gap._post_interact() + """ +- self._eval_line("$SAGE.StopInteract();") ++ self._eval_line(r'\$SAGE.StopInteract();') + + def _eval_line_using_file(self, line): + i = line.find(':=') +@@ -1641,7 +1645,7 @@ class GapElement(GapElement_generic): + """ + from sage.misc.misc import uniq + P = self.parent() +- v = P.eval('$SAGE.OperationsAdmittingFirstArgument(%s)'%self.name()) ++ v = P.eval(r'\$SAGE.OperationsAdmittingFirstArgument(%s)'%self.name()) + v = v.replace('Tester(','').replace('Setter(','').replace(')','').replace('\n', '') + v = v.split(',') + v = [ oper.split('"')[1] for oper in v ] +diff --git a/src/sage/libs/gap/gap_includes.pxd b/src/sage/libs/gap/gap_includes.pxd +index bd945c7..fa23ba5 100644 +--- a/src/sage/libs/gap/gap_includes.pxd ++++ b/src/sage/libs/gap/gap_includes.pxd +@@ -131,7 +131,7 @@ cdef extern from "gap/objects.h": + cdef int libGAP_LAST_TESTING_TNUM + + cdef extern from "gap/read.h": +- void* libGAP_ReadEvalCommand(libGAP_Obj context) ++ void* libGAP_ReadEvalCommand(libGAP_Obj context, libGAP_UInt *dualSemicolon) + void* libGAP_ReadEvalFile() + void* libGAP_ReadEvalResult + bint libGAP_READ_ERROR() +diff --git a/src/sage/libs/gap/util.pyx b/src/sage/libs/gap/util.pyx +index 52a75be..d62b8e9 100644 +--- a/src/sage/libs/gap/util.pyx ++++ b/src/sage/libs/gap/util.pyx +@@ -280,7 +280,7 @@ cdef libGAP_Obj gap_eval(str gap_string) except? NULL: + libgap_start_interaction(cmd) + try: + sig_on() +- status = libGAP_ReadEvalCommand(libGAP_BottomLVars) ++ status = libGAP_ReadEvalCommand(libGAP_BottomLVars, NULL) + if status != libGAP_STATUS_END: + libgap_call_error_handler() + sig_off() +@@ -464,7 +464,7 @@ def command(command_string): + libgap_start_interaction(cmd) + try: + sig_on() +- status = libGAP_ReadEvalCommand(libGAP_BottomLVars) ++ status = libGAP_ReadEvalCommand(libGAP_BottomLVars, NULL) + if status != libGAP_STATUS_END: + libgap_call_error_handler() + sig_off() Modified: paths.patch =================================================================== --- paths.patch 2016-03-31 06:07:21 UTC (rev 169007) +++ paths.patch 2016-03-31 06:19:41 UTC (rev 169008) @@ -31,7 +31,7 @@ -_add_variable_or_fallback('SAGE_DOT_GIT', opj('$SAGE_ROOT', '.git')) +_add_variable_or_fallback('SAGE_EXTCODE', opj('$SAGE_SHARE', 'ext')) +_add_variable_or_fallback('SAGE_DOC_SRC', opj('$SAGE_SRC', 'doc')) -+_add_variable_or_fallback('SAGE_DOC', opj('$SAGE_SHARE', 'doc', 'sage')) ++_add_variable_or_fallback('SAGE_DOC', opj('/usr/share', 'doc', 'sage')) +_add_variable_or_fallback('DOT_SAGE', opj(os.environ.get('HOME'), '.sage')) _add_variable_or_fallback('SAGE_DISTFILES', opj('$SAGE_ROOT', 'upstream'))