123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- # Copyright 1999-2017 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- EAPI=6
- RESTRICT="test"
- inherit git-r3 elisp-common eutils multilib pax-utils toolchain-funcs
- DESCRIPTION="High-performance programming language for technical computing"
- HOMEPAGE="http://julialang.org/"
- SRC_URI=""
- EGIT_REPO_URI="git://github.com/JuliaLang/julia.git"
- LICENSE="MIT"
- SLOT="0"
- KEYWORDS=""
- IUSE="emacs"
- RDEPEND="
- dev-lang/R:0=
- dev-libs/double-conversion:0=
- dev-libs/gmp:0=
- dev-libs/libgit2:0=
- dev-libs/mpfr:0=
- dev-libs/openspecfun
- sci-libs/arpack:0=
- sci-libs/camd:0=
- sci-libs/cholmod:0=
- sci-libs/fftw:3.0=[threads]
- sci-libs/openlibm:0=
- sci-libs/spqr:0=
- sci-libs/umfpack:0=
- sci-mathematics/glpk:0=
- >=sys-devel/llvm-3.9:0=
- >=sys-libs/libunwind-1.1:7=
- sys-libs/readline:0=
- sys-libs/zlib:0=
- >=virtual/blas-1.1
- virtual/lapack
- emacs? ( app-emacs/ess )"
- DEPEND="${RDEPEND}
- dev-util/patchelf
- virtual/pkgconfig"
- PATCHES=(
- "${FILESDIR}"/${PN}-9999-fix_build_system.patch
- )
- src_prepare() {
- epatch "${PATCHES[@]}"
- eapply_user
- # Sledgehammer:
- # - respect CFLAGS
- # - respect EPREFIX and Gentoo specific paths
- # - fix BLAS and LAPACK link interface
- sed -i \
- -e 's|$(JLDOWNLOAD)|${EPREFIX}/bin/true|' \
- -e 's|git submodule|${EPREFIX}/bin/true|g' \
- -e "s|GENTOOCFLAGS|${CFLAGS}|g" \
- -e "s|/usr/include|${EPREFIX%/}/usr/include|g" \
- deps/Makefile || die
- local libblas="$($(tc-getPKG_CONFIG) --libs-only-l blas)"
- libblas="${libblas%% *}"
- libblas="lib${libblas#-l}"
- local liblapack="$($(tc-getPKG_CONFIG) --libs-only-l lapack)"
- liblapack="${liblapack%% *}"
- liblapack="lib${liblapack#-l}"
- sed -i \
- -e "s|\(JULIA_EXECUTABLE = \)\(\$(JULIAHOME)/julia\)|\1 LD_LIBRARY_PATH=\$(BUILD)/$(get_libdir) \2|" \
- -e "s|GENTOOCFLAGS|${CFLAGS}|g" \
- -e "s|LIBDIR = lib|LIBDIR = $(get_libdir)|" \
- -e "s|/usr/lib|${EPREFIX}/usr/$(get_libdir)|" \
- -e "s|/usr/include|${EPREFIX}/usr/include|" \
- -e "s|\$(BUILD)/lib|\$(BUILD)/$(get_libdir)|" \
- -e "s|^JULIA_COMMIT = .*|JULIA_COMMIT = v${PV}|" \
- -e "s|-lblas|$($(tc-getPKG_CONFIG) --libs blas)|" \
- -e "s|= libblas|= ${libblas}|" \
- -e "s|-llapack|$($(tc-getPKG_CONFIG) --libs lapack)|" \
- -e "s|= liblapack|= ${liblapack}|" \
- Make.inc || die
- sed -i \
- -e "s|,lib)|,$(get_libdir))|g" \
- -e "s|\$(BUILD)/lib|\$(BUILD)/$(get_libdir)|g" \
- Makefile || die
- sed -i \
- -e "s|ar -rcs|$(tc-getAR) -rcs|g" \
- src/Makefile || die
- }
- src_configure() {
- # julia does not play well with the system versions of
- # dsfmt, libuv, pcre2 and utf8proc
- cat <<-EOF > Make.user
- USE_SYSTEM_DSFMT=0
- USE_SYSTEM_LIBUV=0
- USE_SYSTEM_PCRE=0
- USE_SYSTEM_RMATH=0
- USE_SYSTEM_UTF8PROC=0
- USE_LLVM_SHLIB=1
- USE_SYSTEM_ARPACK=1
- USE_SYSTEM_BLAS=1
- USE_SYSTEM_FFTW=1
- USE_SYSTEM_GMP=1
- USE_SYSTEM_GRISU=1
- USE_SYSTEM_LAPACK=1
- USE_SYSTEM_LIBGIT2=1
- USE_SYSTEM_LIBM=1
- USE_SYSTEM_LIBUNWIND=1
- USE_SYSTEM_LLVM=1
- USE_SYSTEM_MPFR=1
- USE_SYSTEM_OPENLIBM=1
- USE_SYSTEM_OPENSPECFUN=1
- USE_SYSTEM_PATCHELF=1
- USE_SYSTEM_READLINE=1
- USE_SYSTEM_SUITESPARSE=1
- USE_SYSTEM_ZLIB=1
- VERBOSE=1
- libdir="${EROOT}/usr/$(get_libdir)"
- EOF
- }
- src_compile() {
- # Julia accesses /proc/self/mem on Linux
- addpredict /proc/self/mem
- emake cleanall
- emake julia-release \
- prefix="/usr" DESTDIR="${D}" CC="$(tc-getCC)" CXX="$(tc-getCXX)"
- pax-mark m $(file usr/bin/julia-* | awk -F : '/ELF/ {print $1}')
- emake
- use emacs && elisp-compile contrib/julia-mode.el
- }
- src_test() {
- emake test
- }
- src_install() {
- emake install \
- prefix="/usr" DESTDIR="${D}" CC="$(tc-getCC)" CXX="$(tc-getCXX)"
- cat > 99julia <<-EOF
- LDPATH=${EROOT%/}/usr/$(get_libdir)/julia
- EOF
- doenvd 99julia
- if use emacs; then
- elisp-install "${PN}" contrib/julia-mode.el
- elisp-site-file-install "${FILESDIR}"/63julia-gentoo.el
- fi
- dodoc README.md
- mv "${ED}"/usr/etc/julia "${ED}"/etc || die
- rmdir "${ED}"/usr/etc || die
- rmdir "${ED}"/usr/libexec || die
- mv "${ED}"/usr/share/doc/julia/{examples,html} \
- "${ED}"/usr/share/doc/${P} || die
- rmdir "${ED}"/usr/share/doc/julia || die
- if [[ $(get_libdir) != lib ]]; then
- mkdir -p "${ED}"/usr/$(get_libdir) || die
- mv "${ED}"/usr/lib/julia "${ED}"/usr/$(get_libdir)/julia || die
- fi
- }
- pkg_postinst() {
- use emacs && elisp-site-regen
- }
- pkg_postrm() {
- use emacs && elisp-site-regen
- }
|