summaryrefslogtreecommitdiff
blob: 07cd3c3125130ee687bfff2e093a13b3a6405b37 (plain)
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
135
136
137
138
139
140
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=5

inherit eutils flag-o-matic toolchain-funcs multilib

DESCRIPTION="Computer-aided number theory C library and tools"
HOMEPAGE="http://pari.math.u-bordeaux.fr/"
SRC_URI="http://pari.math.u-bordeaux.fr/pub/${PN}/unix/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~hppa ~mips ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-fbsd ~x86-linux ~x86-macos ~x86-solaris"
IUSE="data doc fltk gmp qt4 X"

RDEPEND="
	sys-libs/readline:0=
	data? ( sci-mathematics/pari-data )
	doc? ( X? ( x11-misc/xdg-utils ) )
	fltk? ( x11-libs/fltk:1 )
	gmp? ( dev-libs/gmp:0= )
	qt4? ( dev-qt/qtgui:4 )
	X? ( x11-libs/libX11 )"
DEPEND="${RDEPEND}
	doc? ( virtual/latex-base )"

get_compile_dir() {
	pushd "${S}/config" > /dev/null
	local fastread=yes
	source ./get_archos
	popd > /dev/null
	echo "O${osname}-${arch}"
}

src_prepare() {
	epatch "${FILESDIR}"/${PN}-2.3.2-strip.patch
	epatch "${FILESDIR}"/${PN}-2.3.2-ppc-powerpc-arch-fix.patch
	# fix parallel make
	epatch "${FILESDIR}"/${PN}-2.5.0-doc-make.patch
	# sage error handling patch
	epatch "${FILESDIR}"/${PN}-2.5.0-mp.c.patch
	# OS X: add -install_name to the linker option
	epatch "${FILESDIR}"/${PN}-2.5.0-macos.patch
	# fix automagic
	epatch "${FILESDIR}"/${PN}-2.5.1-no-automagic.patch
	# sage-on-gentoo trac 13902: Slowdown for PARI integer determinant
	epatch "${FILESDIR}"/${PN}-2.5.4-slow_determinant.patch
	# sage-on-gentoo trac 13054: polred bug / pari bug 1395
	epatch "${FILESDIR}"/${PN}-2.5.4-polred.patch

	# disable default building of docs during install
	sed -i \
		-e "s:install-doc install-examples:install-examples:" \
		config/Makefile.SH || die "Failed to fix makefile"

	# propagate ldflags
	sed -i \
		-e 's/$shared $extra/$shared $extra \\$(LDFLAGS)/' \
		config/get_dlld || die "failed to fix LDFLAGS"
	# move doc dir to a gentoo doc dir and replace acroread by xdg-open
	sed -i \
		-e "s:\$d = \$0:\$d = '${EPREFIX}/usr/share/doc/${PF}':" \
		-e 's:"acroread":"xdg-open":' \
		doc/gphelp.in || die "Failed to fix doc dir"

	sed -i "s:/\(usr\|lib64\):${EPREFIX}/\1:g" \
		config/get_{Qt,X11,include_path,libpth} \
		|| die "Failed to fix get_X11"

	# usersch3.tex is generated
	rm doc/usersch3.tex || die "failed to remove generated file"
}

src_configure() {
	tc-export CC
	export CPLUSPLUS=$(tc-getCXX)

	# need to force optimization here, as it breaks without
	if is-flag -O0; then
		replace-flags -O0 -O2
	elif ! is-flag -O?; then
		append-flags -O2
	fi

	# sysdatadir installs a pari.cfg stuff which is informative only
	./Configure \
		--prefix="${EPREFIX}"/usr \
		--datadir="${EPREFIX}"/usr/share/${PN} \
		--libdir="${EPREFIX}"/usr/$(get_libdir) \
		--sysdatadir="${EPREFIX}"/usr/share/doc/${PF} \
		--mandir="${EPREFIX}"/usr/share/man/man1 \
		--with-readline="${EPREFIX}"/usr \
		--with-ncurses-lib="${EPREFIX}"/usr/$(get_libdir) \
		$(use_with fltk) \
		$(use_with gmp) \
		$(use_with qt4 qt) \
		|| die "./Configure failed"
}

src_compile() {
	mycxxmake=LD\=$(tc-getCXX)

	local installdir=$(get_compile_dir)
	cd "${installdir}" || die "failed to change directory"
	# upstream set -fno-strict-aliasing.
	# aliasing is a known issue on amd64, work on x86 by sheer luck
	emake ${mymake} \
		CFLAGS="${CFLAGS} -fno-strict-aliasing -DGCC_INLINE -fPIC" lib-dyn
	emake ${mymake} ${mycxxmake} \
		CFLAGS="${CFLAGS} -DGCC_INLINE" gp ../gp

	if use doc; then
		cd "${S}" || die "failed to change directory"
		# To prevent sandbox violations by metafont
		VARTEXFONTS="${T}"/fonts emake docpdf
	fi
}

src_test() {
	emake dobench
}

src_install() {
	emake ${mymake} ${mycxxmake} DESTDIR="${D}" install
	dodoc MACHINES COMPAT
	if use doc; then
		# install gphelp and the pdf documentations manually.
		# the install-doc target is overkill.
		dodoc doc/*.pdf
		dobin doc/gphelp
		insinto /usr/share/doc/${PF}
		# gphelp looks for some of the tex sources...
		doins doc/*.tex doc/translations
		# Install the examples - for real.
		local installdir=$(get_compile_dir)
		cd "${installdir}" || die "failed to change directory"
		emake EXDIR="${ED}/usr/share/doc/${PF}/examples" install-examples
	fi
}