Skip to content

Commit

Permalink
sage: fix threejs integration
Browse files Browse the repository at this point in the history
Before this it didn't find the correct files. Unfortunately, the
interactive parts of sage are hard to test automatically.
  • Loading branch information
timokau committed Jun 18, 2019
1 parent a1dd419 commit f2f26ac
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 2 deletions.
2 changes: 1 addition & 1 deletion pkgs/applications/science/math/sage/default.nix
Expand Up @@ -33,7 +33,7 @@ let
# `sagelib`, i.e. all of sage except some wrappers and runtime dependencies
sagelib = self.callPackage ./sagelib.nix {
inherit flint ecl arb;
inherit sage-src pynac singular;
inherit sage-src env-locations pynac singular;
linbox = pkgs.linbox.override { withSage = true; };
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
};
Expand Down
64 changes: 64 additions & 0 deletions pkgs/applications/science/math/sage/patches/threejs-offline.patch
@@ -0,0 +1,64 @@
diff --git a/build/pkgs/threejs/spkg-src b/build/pkgs/threejs/spkg-src
index 91780d813c..254b850a24 100755
--- a/build/pkgs/threejs/spkg-src
+++ b/build/pkgs/threejs/spkg-src
@@ -20,9 +20,17 @@ URL3="https://raw.githubusercontent.com/mrdoob/three.js/${GIT_VERSION}/LICENSE"
echo "Downloading $URL3"
curl -OL "$URL3"

+# Set up directory structure
+
+mkdir build
+mv three.min.js build
+
+mkdir -p examples/js/controls
+mv OrbitControls.js examples/js/controls
+
# Package
-tar czf "$SAGE_ROOT/upstream/threejs-${GIT_VERSION}.tar.gz" 'three.min.js' 'OrbitControls.js' 'LICENSE'
-rm -rf 'three.min.js' 'OrbitControls.js' 'LICENSE'
+tar czf "$SAGE_ROOT/upstream/threejs-${GIT_VERSION}.tar.gz" build examples 'LICENSE'
+rm -rf 'build' 'examples' 'LICENSE'

# Update package info
echo "${GIT_VERSION}" > 'package-version.txt'
diff --git a/src/sage/repl/rich_output/backend_ipython.py b/src/sage/repl/rich_output/backend_ipython.py
index 7c27d48a21..8bf4861a35 100644
--- a/src/sage/repl/rich_output/backend_ipython.py
+++ b/src/sage/repl/rich_output/backend_ipython.py
@@ -411,10 +411,15 @@ class BackendIPythonCommandline(BackendIPython):
sage: backend.threejs_offline_scripts()
'...<script ...</script>...'
"""
- from sage.env import SAGE_SHARE
+ from sage.env import THREEJS_DIR

- scripts = [os.path.join(SAGE_SHARE, 'threejs', script)
- for script in ['three.min.js', 'OrbitControls.js']]
+ scripts = [
+ os.path.join(THREEJS_DIR, script)
+ for script in [
+ 'build/three.min.js',
+ 'examples/js/controls/OrbitControls.js',
+ ]
+ ]

if sys.platform == 'cygwin':
import cygwin
@@ -594,13 +599,13 @@ class BackendIPythonNotebook(BackendIPython):
sage: from sage.repl.rich_output.backend_ipython import BackendIPythonNotebook
sage: backend = BackendIPythonNotebook()
sage: backend.threejs_offline_scripts()
- '...<script src="/nbextensions/threejs/three.min...<\\/script>...'
+ '...<script src="/nbextensions/threejs/build/three.min...<\\/script>...'
"""
from sage.repl.rich_output import get_display_manager
CDN_scripts = get_display_manager().threejs_scripts(online=True)
return """
-<script src="/nbextensions/threejs/three.min.js"></script>
-<script src="/nbextensions/threejs/OrbitControls.js"></script>
+<script src="/nbextensions/threejs/build/three.min.js"></script>
+<script src="/nbextensions/threejs/examples/js/controls/OrbitControls.js"></script>
<script>
if ( !window.THREE ) document.write('{}');
</script>
3 changes: 3 additions & 0 deletions pkgs/applications/science/math/sage/sage-src.nix
Expand Up @@ -68,6 +68,9 @@ stdenv.mkDerivation rec {
url = "https://git.sagemath.org/sage.git/patch/?h=c4d966e7cb0c7b87c55d52dc6f46518433a2a0a2";
sha256 = "0pqbbsx8mriwny422s9mp3z5d095cnam32sm62q4mxk8g8jb9vm9";
})

# https://trac.sagemath.org/ticket/28007
./patches/threejs-offline.patch
];

# Since sage unfortunately does not release bugfix releases, packagers must
Expand Down
6 changes: 5 additions & 1 deletion pkgs/applications/science/math/sage/sagelib.nix
@@ -1,4 +1,5 @@
{ sage-src
, env-locations
, perl
, buildPythonPackage
, arb
Expand Down Expand Up @@ -125,8 +126,11 @@ buildPythonPackage rec {
export SAGE_ROOT="$PWD"
export SAGE_LOCAL="$SAGE_ROOT"
export SAGE_SHARE="$SAGE_LOCAL/share"
export JUPYTER_PATH="$SAGE_LOCAL/jupyter"
# set locations of dependencies (needed for nbextensions like threejs)
. ${env-locations}/sage-env-locations
export JUPYTER_PATH="$SAGE_LOCAL/jupyter"
export PATH="$SAGE_ROOT/build/bin:$SAGE_ROOT/src/bin:$PATH"
export SAGE_NUM_THREADS="$NIX_BUILD_CORES"
Expand Down

0 comments on commit f2f26ac

Please sign in to comment.