1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
{ lib, stdenv, fetchurl
, autoreconfHook, bison, glm, flex, wrapQtAppsHook, cmake, pkg-config
, libglut, ghostscriptX, imagemagick, fftw, eigen, libtirpc
, boehmgc, libGLU, libGL, ncurses, readline, gsl, libsigsegv
, python3, qtbase, qtsvg, boost
, zlib, perl, curl
, texinfo
, texliveSmall
, darwin
}:
stdenv.mkDerivation (finalAttrs: {
version = "2.90";
pname = "asymptote";
outputs = [ "out" "man" "info" "doc" "tex" ];
src = fetchurl {
url = "mirror://sourceforge/asymptote/${finalAttrs.version}/asymptote-${finalAttrs.version}.src.tgz";
hash = "sha256-jGlW+4CL9EqPJJcpW0+muumMQYkrQPPuj8dYqSRwc0A=";
};
# override with TeX Live containers to avoid building sty, docs from source
texContainer = null;
texdocContainer = null;
nativeBuildInputs = [
autoreconfHook
bison
flex
bison
texinfo
wrapQtAppsHook
cmake
pkg-config
] ++ lib.optional (finalAttrs.texContainer == null || finalAttrs.texdocContainer == null)
(texliveSmall.withPackages (ps: with ps; [ epsf cm-super ps.texinfo media9 ocgx2 collection-latexextra ]));
buildInputs = [
ghostscriptX imagemagick fftw eigen
boehmgc ncurses readline gsl libsigsegv
zlib perl curl qtbase qtsvg boost
(python3.withPackages (ps: with ps; [ cson numpy pyqt5 ]))
] ++ lib.optionals stdenv.isLinux [ libtirpc ];
propagatedBuildInputs = [
glm
] ++ lib.optionals stdenv.isLinux [
libglut libGLU libGL
] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
OpenGL GLUT Cocoa
]);
dontWrapQtApps = true;
# do not build $tex/ls-R which will be generated by texlive.withPackages
# do not build and install sty and docs, if provided by tex/texdoc texlive containers
# (this is an optimisation to make texliveMedium and texliveFull independent of texliveSmall)
preConfigure = ''
HOME=$TMP
substituteInPlace Makefile.in \
--replace-fail ' install-texhash' '''
if [[ -n $texContainer ]] ; then
sed -i Makefile.in -e '/(\(latex\|context\)dir)/d'
substituteInPlace Makefile.in \
--replace-fail 'asy sty' 'asy'
else
prependToVar configureFlags "--with-latex=$tex/tex/latex" "--with-context=$tex/tex/context/third"
fi
if [[ -n $texdocContainer ]] ; then
substituteInPlace Makefile.in \
--replace-fail ' install-man' ''' \
--replace-fail 'docdir = $(DESTDIR)@docdir@' 'docdir = $(TMP)/doc'
fi
'';
# do not use bundled libgc.so
configureFlags = [ "--enable-gc=system" ]
# TODO add open_memstream to enable XDR/V3D on Darwin (requires memstream or >=10.13 Apple SDK)
++ lib.optional stdenv.isDarwin "--enable-xdr=no";
env.NIX_CFLAGS_COMPILE = "-I${boehmgc.dev}/include/gc";
postInstall = ''
rm "$out"/bin/xasy
makeQtWrapper "$out"/share/asymptote/GUI/xasy.py "$out"/bin/xasy --prefix PATH : "$out"/bin
if [[ -z $texdocContainer ]] ; then
mv "$info"/share/info/asymptote/*.info "$info"/share/info/
sed -i -e 's|(asymptote/asymptote)|(asymptote)|' "$info"/share/info/asymptote.info
rmdir "$info"/share/info/asymptote
rm -f "$info"/share/info/dir
fi
install -Dt $out/share/emacs/site-lisp/${finalAttrs.pname} $out/share/asymptote/*.el
'';
# fixupPhase crashes if the outputs are not directories
preFixup = ''
if [[ -n $texContainer ]] ; then
mkdir -p "$tex"
fi
if [[ -n $texdocContainer ]] ; then
mkdir -p "$doc" "$man" "$info"
fi
'';
postFixup = ''
if [[ -n $texContainer ]] ; then
rmdir "$tex"
ln -s "$texContainer" "$tex"
fi
if [[ -n $texdocContainer ]] ; then
mkdir -p "$man/share" "$info/share"
ln -s "$texdocContainer" "$doc/share"
ln -s "$texdocContainer/doc/man" "$man/share"
ln -s "$texdocContainer/doc/info" "$info/share"
fi
'';
dontUseCmakeConfigure = true;
enableParallelBuilding = true;
# Missing install depends:
# ...-coreutils-9.1/bin/install: cannot stat 'asy-keywords.el': No such file or directory
# make: *** [Makefile:272: install-asy] Error 1
enableParallelInstalling = false;
meta = with lib; {
description = "Tool for programming graphics intended to replace Metapost";
license = licenses.gpl3Plus;
maintainers = [ maintainers.raskin ];
platforms = platforms.linux ++ platforms.darwin;
};
})
|