1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
8 inherit pax-utils toolchain-funcs
10 MY_PV="${PV//_rc/-rc}"
11 MY_LIBUV_V="2348256acf5759a544e5ca7935f638d2bc091d60"
12 MY_UTF8PROC_V="454f60150c7f023526d353e1e6b386f93ee0b116"
13 MY_LIBWHICH_V="81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
17 DESCRIPTION="High-performance programming language for technical computing"
18 HOMEPAGE="https://julialang.org/"
20 https://github.com/JuliaLang/${PN}/releases/download/v${MY_PV}/${PN}-${MY_PV}.tar.gz
21 https://api.github.com/repos/JuliaLang/libuv/tarball/${MY_LIBUV_V} -> ${PN}-libuv-${MY_LIBUV_V}.tar.gz
22 https://api.github.com/repos/JuliaLang/utf8proc/tarball/${MY_UTF8PROC_V} -> ${PN}-utf8proc-${MY_UTF8PROC_V}.tar.gz
23 https://api.github.com/repos/vtjnash/libwhich/tarball/${MY_LIBWHICH_V} -> ${PN}-libwhich-${MY_LIBWHICH_V}.tar.gz
24 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-${MY_DSFMT_V}.tar.gz -> ${PN}-dsfmt-${MY_DSFMT_V}.tar.gz
25 http://releases.llvm.org/${MY_LLVM}/llvm-${MY_LLVM}.src.tar.xz
30 KEYWORDS="~amd64 ~x86"
34 dev-libs/double-conversion:0=
37 >=dev-libs/libpcre2-10.23:0=[jit]
46 sci-libs/fftw:3.0=[threads]
50 sci-mathematics/glpk:0=
51 >=sys-libs/libunwind-1.1:0=
63 "${FILESDIR}"/${PN}-1.1.0-fix_build_system.patch
64 "${FILESDIR}"/${PN}-1.1.0-fix_llvm_install.patch
67 S="${WORKDIR}/${PN}-${MY_PV}"
71 # the main source tree, followed by deps
74 mkdir -p "${S}/deps/srccache/"
75 for i in "${tounpack[@]:1}"; do
76 cp "${DISTDIR}/${i}" "${S}/deps/srccache/${i#julia-}" || die
84 # - prevent fetching of bundled stuff in compile and install phase
86 # - respect EPREFIX and Gentoo specific paths
87 # - fix BLAS and LAPACK link interface
90 -e 's|git submodule|${EPREFIX}/bin/true|g' \
91 -e "s|GENTOOCFLAGS|${CFLAGS}|g" \
92 -e "s|/usr/include|${EPREFIX}/usr/include|g" \
95 local libblas="$($(tc-getPKG_CONFIG) --libs-only-l blas)"
96 libblas="${libblas%% *}"
97 libblas="lib${libblas#-l}"
98 local liblapack="$($(tc-getPKG_CONFIG) --libs-only-l lapack)"
99 liblapack="${liblapack%% *}"
100 liblapack="lib${liblapack#-l}"
103 -e "s|GENTOOCFLAGS|${CFLAGS}|g" \
104 -e "s|GENTOOLIBDIR|$(get_libdir)|" \
105 -e "s|^JULIA_COMMIT = .*|JULIA_COMMIT = v${PV}|" \
106 -e "s|-lblas|$($(tc-getPKG_CONFIG) --libs blas)|" \
107 -e "s|= libblas|= ${libblas}|" \
108 -e "s|-llapack|$($(tc-getPKG_CONFIG) --libs lapack)|" \
109 -e "s|= liblapack|= ${liblapack}|" \
113 -e "s|,lib)|,$(get_libdir))|g" \
114 -e "s|\$(BUILD)/lib|\$(BUILD)/$(get_libdir)|g" \
118 -e "s|ar -rcs|$(tc-getAR) -rcs|g" \
121 # disable doc install starting git fetching
122 sed -i -e 's~install: $(build_depsbindir)/stringreplace $(BUILDROOT)/doc/_build/html/en/index.html~install: $(build_depsbindir)/stringreplace~' Makefile || die
126 # julia does not play well with the system versions of dsfmt, libuv,
129 # USE_SYSTEM_LIBM=0 implies using external openlibm
130 cat <<-EOF > Make.user
137 USE_SYSTEM_LIBGIT2:=1
139 USE_SYSTEM_LIBUNWIND:=1
143 USE_SYSTEM_OPENLIBM:=1
144 USE_SYSTEM_OPENSPECFUN:=1
145 USE_SYSTEM_PATCHELF:=1
147 USE_SYSTEM_READLINE:=1
149 USE_SYSTEM_SUITESPARSE:=1
150 USE_SYSTEM_UTF8PROC:=0
153 libdir="${EROOT}/usr/$(get_libdir)"
160 # Julia accesses /proc/self/mem on Linux
161 addpredict /proc/self/mem
164 emake julia-release \
165 prefix="${EPREFIX}/usr" DESTDIR="${D}" \
166 CC="$(tc-getCC)" CXX="$(tc-getCXX)" \
168 pax-mark m $(file usr/bin/julia-* | awk -F : '/ELF/ {print $1}')
169 emake USE_BINARYBUILDER=0
177 # Julia is special. It tries to find a valid git repository (that would
178 # normally be cloned during compilation/installation). Just make it
181 git config --local user.email "whatyoudoing@example.com" && \
182 git config --local user.name "Whyyyyyy" && \
183 git commit -a --allow-empty -m "initial" || die "git failed"
186 prefix="${EPREFIX}/usr" DESTDIR="${D}" \
187 CC="$(tc-getCC)" CXX="$(tc-getCXX)" \
190 LDPATH=${EROOT}/usr/$(get_libdir)/julia
196 mv "${ED}"/usr/etc/julia "${ED}"/etc || die
197 rmdir "${ED}"/usr/etc || die
198 mv "${ED}"/usr/share/doc/julia/html "${ED}"/usr/share/doc/${PF} || die
199 rmdir "${ED}"/usr/share/doc/julia || die