aboutsummaryrefslogtreecommitdiffstats
path: root/community/julia
diff options
context:
space:
mode:
authorShiz <hi@shiz.me>2017-05-22 18:40:14 +0200
committerShiz <hi@shiz.me>2017-05-22 18:40:42 +0200
commit93ad08e10334b4133743f9042e8b9aff9583b23f (patch)
tree0e1d693037ed4e28451535c45887947e28027c23 /community/julia
parent7039b303d95e672b466926ed93c105e2dc7e2db2 (diff)
downloadaports-93ad08e10334b4133743f9042e8b9aff9583b23f.tar.bz2
aports-93ad08e10334b4133743f9042e8b9aff9583b23f.tar.xz
community/julia: move from testing
Diffstat (limited to 'community/julia')
-rw-r--r--community/julia/0001-hardened.patch29
-rw-r--r--community/julia/0002-verbose-build.patch17
-rw-r--r--community/julia/0003-no-clean-docs.patch18
-rw-r--r--community/julia/0004-remove-sysctl.h.patch33
-rw-r--r--community/julia/0005-fix-rpath-issues.patch11
-rw-r--r--community/julia/0008-ldconfig-compat.patch24
-rw-r--r--community/julia/APKBUILD175
-rwxr-xr-xcommunity/julia/find-syslibs19
-rw-r--r--community/julia/fix-or-disable-broken-tests.patch81
9 files changed, 407 insertions, 0 deletions
diff --git a/community/julia/0001-hardened.patch b/community/julia/0001-hardened.patch
new file mode 100644
index 0000000000..2984356c7b
--- /dev/null
+++ b/community/julia/0001-hardened.patch
@@ -0,0 +1,29 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Sun, 05 Jun 2016 14:11:00 +0200
+Subject: [PATCH] Disable PaX memory protection for julia binary
+--- a/Makefile
++++ b/Makefile
+@@ -71,7 +71,13 @@
+ julia-sysimg-debug : julia-inference julia-ui-debug
+ @$(MAKE) $(QUIET_MAKE) $(build_private_libdir)/sys-debug.$(SHLIB_EXT) JULIA_BUILD_MODE=debug
+
+-julia-debug julia-release : julia-% : julia-ui-% julia-sysimg-% julia-symlink julia-libccalltest
++julia-pax-release : julia-ui-release
++ paxmark m $(JULIA_EXECUTABLE_release)
++
++julia-pax-debug : julia-ui-debug
++ paxmark m $(JULIA_EXECUTABLE_debug)
++
++julia-debug julia-release : julia-% : julia-ui-% julia-pax-% julia-sysimg-% julia-symlink julia-libccalltest
+
+ debug release : % : julia-%
+
+@@ -527,7 +533,7 @@
+ test testall testall1 test clean distcleanall cleanall clean-* \
+ run-julia run-julia-debug run-julia-release run \
+ install binary-dist light-source-dist.tmp light-source-dist \
+- dist full-source-dist source-dist
++ dist full-source-dist source-dist julia-pax-release julia-pax-debug
+
+ test: check-whitespace $(JULIA_BUILD_MODE)
+ @$(MAKE) $(QUIET_MAKE) -C test default JULIA_BUILD_MODE=$(JULIA_BUILD_MODE)
diff --git a/community/julia/0002-verbose-build.patch b/community/julia/0002-verbose-build.patch
new file mode 100644
index 0000000000..c13f93fead
--- /dev/null
+++ b/community/julia/0002-verbose-build.patch
@@ -0,0 +1,17 @@
+Description: Ensure that build is verbose
+Author: Sébastien Villemot <sebastien@debian.org>
+Author: Shiz <hi@shiz.me>
+Forwarded: not-needed
+Last-Update: 2017-05-19
+---
+--- a/deps/libuv.mk
++++ b/deps/libuv.mk
+@@ -33,7 +33,7 @@
+ touch -c $(SRCDIR)/srccache/$(LIBUV_SRC_DIR)/configure
+ mkdir -p $(dir $@)
+ cd $(dir $@) && \
+- $< --with-pic $(CONFIGURE_COMMON) $(UV_FLAGS)
++ $< --with-pic $(CONFIGURE_COMMON) $(UV_FLAGS) --disable-silent-rules
+ touch -c $@
+ $(UV_SRC_TARGET): $(BUILDDIR)/$(LIBUV_SRC_DIR)/config.status
+ $(MAKE) -C $(dir $<) $(UV_MFLAGS)
diff --git a/community/julia/0003-no-clean-docs.patch b/community/julia/0003-no-clean-docs.patch
new file mode 100644
index 0000000000..89bb0f8fae
--- /dev/null
+++ b/community/julia/0003-no-clean-docs.patch
@@ -0,0 +1,18 @@
+--- a/Makefile
++++ b/Makefile
+@@ -540,7 +540,6 @@
+
+ clean: | $(CLEAN_TARGETS)
+ @-$(MAKE) -C $(BUILDROOT)/base clean
+- @-$(MAKE) -C $(BUILDROOT)/doc clean
+ @-$(MAKE) -C $(BUILDROOT)/src clean
+ @-$(MAKE) -C $(BUILDROOT)/ui clean
+ @-$(MAKE) -C $(BUILDROOT)/test clean
+@@ -564,7 +563,6 @@
+
+ distcleanall: cleanall
+ @-$(MAKE) -C $(BUILDROOT)/deps distcleanall
+- @-$(MAKE) -C $(BUILDROOT)/doc cleanall
+ -rm -fr $(build_prefix) $(build_staging)
+
+ .PHONY: default debug release check-whitespace release-candidate \
diff --git a/community/julia/0004-remove-sysctl.h.patch b/community/julia/0004-remove-sysctl.h.patch
new file mode 100644
index 0000000000..42c71cb893
--- /dev/null
+++ b/community/julia/0004-remove-sysctl.h.patch
@@ -0,0 +1,33 @@
+From 6f09a6de41e7e35779e0755d9e52a4bf79424109 Mon Sep 17 00:00:00 2001
+From: albap <albapompeo@gmail.com>
+Date: Sun, 31 Jan 2016 10:50:02 -0200
+Subject: [PATCH] Remove nonstandard header sys/sysctl.h
+
+This header prevents me from building Julia on musl libc.
+
+```
+/home/alba/julia/src/sys.c:16:24: fatal error: sys/sysctl.h: No such file or directory
+compilation terminated.
+Makefile:94: recipe for target 'sys.o' failed
+make[1]: *** [sys.o] Error 1
+```
+
+If I remove it from julia/src/sys.c then it works.
+
+Why is sys/sysctl.h needed in first place? I cannot find it in POSIX.
+---
+ src/sys.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/sys.c b/src/sys.c
+index 9a48871..89069a9 100644
+--- a/src/sys.c
++++ b/src/sys.c
+@@ -13,7 +13,6 @@
+ #ifdef _OS_WINDOWS_
+ #include <psapi.h>
+ #else
+-#include <sys/sysctl.h>
+ #include <sys/wait.h>
+ #include <sys/ptrace.h>
+ #include <unistd.h>
diff --git a/community/julia/0005-fix-rpath-issues.patch b/community/julia/0005-fix-rpath-issues.patch
new file mode 100644
index 0000000000..82c537756e
--- /dev/null
+++ b/community/julia/0005-fix-rpath-issues.patch
@@ -0,0 +1,11 @@
+--- a/Make.inc
++++ b/Make.inc
+@@ -873,7 +873,7 @@
+ RPATH_ESCAPED_ORIGIN := $(RPATH_ORIGIN)
+ RPATH_LIB := -Wl,-rpath,'@loader_path/' -Wl,-rpath,'@loader_path/julia/'
+ else
+- RPATH := -Wl,-rpath,'$$ORIGIN/$(build_libdir_rel)' -Wl,-rpath-link,$(build_shlibdir) -Wl,-z,origin
++ RPATH := -Wl,-rpath,'$$ORIGIN/$(build_libdir_rel)' -Wl,-rpath,'$$ORIGIN/$(build_private_libdir_rel)' -Wl,-rpath-link,$(build_shlibdir) -Wl,-z,origin
+ RPATH_ORIGIN := -Wl,-rpath,'$$ORIGIN' -Wl,-z,origin
+ RPATH_ESCAPED_ORIGIN := -Wl,-rpath,'\$$\$$ORIGIN' -Wl,-z,origin
+ RPATH_LIB := -Wl,-rpath,'$$ORIGIN' -Wl,-rpath,'$$ORIGIN/julia' -Wl,-z,origin
diff --git a/community/julia/0008-ldconfig-compat.patch b/community/julia/0008-ldconfig-compat.patch
new file mode 100644
index 0000000000..1d5fcd988b
--- /dev/null
+++ b/community/julia/0008-ldconfig-compat.patch
@@ -0,0 +1,24 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Thu, 9 Jun 2016 01:15:00 +0200
+Subject: [PATCH] Use our find-syslibs script instead of /sbin/ldconfig -p
+
+Julia uses "ldconfig -p" to find system libraries. The problem is that musl's
+ldconfig doesn't support the option "-p". Moreover, ldconfig relies on .pc
+files that are installed only with -dev subpackages.
+
+This workaround lies in using custom script that adapts output of scanelf to
+the format produced by "ldconfig -p".
+
+See https://github.com/JuliaLang/julia/issues/6742.
+
+--- a/src/runtime_ccall.cpp
++++ b/src/runtime_ccall.cpp
+@@ -30,7 +30,7 @@
+ char *line=NULL;
+ size_t sz=0;
+ #if defined(__linux__)
+- FILE *ldc = popen("/sbin/ldconfig -p", "r");
++ FILE *ldc = popen("/usr/share/julia/find-syslibs", "r");
+ #else
+ FILE *ldc = popen("/sbin/ldconfig -r", "r");
+ #endif
diff --git a/community/julia/APKBUILD b/community/julia/APKBUILD
new file mode 100644
index 0000000000..a7c788b05c
--- /dev/null
+++ b/community/julia/APKBUILD
@@ -0,0 +1,175 @@
+# Contributor: Jakub Jirutka <jakub@jirutka.cz>
+# Contributor: Shiz <hi@shiz.me>
+# Maintainer: Shiz <hi@shiz.me>
+pkgname=julia
+pkgver=0.5.2
+# Keep in sync with deps/libuv.version.
+_libuv_ver=8d5131b6c1595920dd30644cd1435b4f344b46c8
+_llvm_ver=3.9
+pkgrel=2
+pkgdesc="A high-level, high-performance dynamic language for technical computing"
+url="http://julialang.org"
+# x86: no libunwind package
+arch="x86_64"
+license="MIT"
+depends="arpack
+ dsfmt
+ fftw>=3.3
+ gmp>=5.0
+ libgit2>=0.21
+ mpfr3
+ openblas
+ openlibm
+ openspecfun>=0.4
+ pcre2>=10.0
+ suitesparse>=4.1
+ "
+depends_dev="arpack-dev
+ dsfmt-dev
+ fftw-dev
+ gmp-dev
+ libgit2-dev
+ libunwind-dev
+ llvm$_llvm_ver-dev
+ mpfr-dev
+ openblas-dev
+ openlibm-dev
+ openspecfun-dev
+ pcre2-dev
+ suitesparse-dev
+ utf8proc-dev>=2
+ "
+makedepends="$depends_dev
+ bash
+ cmake
+ gfortran
+ linux-headers
+ libressl-dev
+ paxmark
+ perl
+ "
+subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg"
+source="https://github.com/JuliaLang/julia/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz
+ libuv-$_libuv_ver.tar.gz::https://api.github.com/repos/JuliaLang/libuv/tarball/$_libuv_ver
+ find-syslibs
+ 0001-hardened.patch
+ 0002-verbose-build.patch
+ 0003-no-clean-docs.patch
+ 0004-remove-sysctl.h.patch
+ 0005-fix-rpath-issues.patch
+ 0008-ldconfig-compat.patch
+ fix-or-disable-broken-tests.patch
+ "
+builddir="$srcdir/$pkgname-$pkgver"
+ldpath="/usr/lib/julia"
+
+prepare() {
+ cd "$builddir"
+
+ # Julia needs patched libuv.
+ mkdir deps/srccache
+ cp "$srcdir"/libuv-$_libuv_ver.tar.gz deps/srccache
+
+ # Prevent fetching of bundled stuff in the build and package phase.
+ cat > deps/tools/jldownload <<-'EOF'
+ #!/bin/sh
+ echo "!!! Downloading of $2 to $1 disabled !!!"
+ echo "Abuild should not fetch any files in the build phase."
+ echo "Add all the needed files to the APKBUILD's source=."
+ exit 1
+ EOF
+
+ cat > Make.user <<-EOF
+ prefix=/usr
+ libexecdir=/usr/lib
+ sysconfdir=/etc
+ DESTDIR="$pkgdir"
+ LIBBLAS=-lopenblas
+ LIBBLASNAME=libopenblas
+ LIBLAPACK=-lopenblas
+ LIBLAPACKNAME=libopenblas
+ LLVM_CONFIG=/usr/lib/llvm$_llvm_ver/bin/llvm-config
+ LLVM_VER=$_llvm_ver
+ USE_SYSTEM_LLVM=1
+ USE_SYSTEM_LIBUNWIND=1
+ USE_SYSTEM_PCRE=1
+ USE_SYSTEM_LIBM=1
+ USE_SYSTEM_OPENLIBM=1
+ USE_SYSTEM_OPENSPECFUN=1
+ USE_SYSTEM_DSFMT=1
+ USE_SYSTEM_BLAS=1
+ USE_SYSTEM_LAPACK=1
+ USE_SYSTEM_FFTW=1
+ USE_SYSTEM_GMP=1
+ USE_SYSTEM_MPFR=1
+ USE_SYSTEM_ARPACK=1
+ USE_SYSTEM_SUITESPARSE=1
+ USE_SYSTEM_LIBUV=0
+ USE_SYSTEM_UTF8PROC=1
+ USE_SYSTEM_LIBGIT2=1
+ USE_SYSTEM_PATCHELF=1
+ USE_LLVM_SHLIB=1
+ VERBOSE=1
+ EOF
+
+ # Pre-SSE2 CPU targets are not supported;
+ # create a generic 32-bit x86 binary.
+ if [ "$CARCH" = x86 ]; then
+ echo "MARCH=i686" >> Make.user
+ echo "JULIA_CPU_TARGET=pentium4" >> Make.user
+ else
+ echo "MARCH=${CARCH/_/-}" >> Make.user
+ fi
+
+ default_prepare
+}
+
+build() {
+ cd "$builddir"
+
+ # If we don't clean here, then make install will recompile everything,
+ # don't know why...
+ make clean && make release
+}
+
+check() {
+ cd "$builddir"
+
+ # TMPDIR=... is needed to prevent the tests from trying to write
+ # into /tmp, which will fail.
+ mkdir -p "$builddir"/tmp
+ TMPDIR="$builddir"/tmp make test
+}
+
+package() {
+ cd "$builddir"
+
+ make install
+ install -D "$srcdir"/find-syslibs "$pkgdir"/usr/share/julia/find-syslibs
+ # re-apply lost PaX markings
+ paxmark m "$pkgdir"/usr/bin/julia "$pkgdir"/usr/bin/julia-debug
+}
+
+dbg() {
+ pkgdesc="$pkgdesc (debug build)"
+ replaces="$pkgname-debug"
+ default_dbg
+
+ install -d "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/*-debug "$subpkgdir"/usr/bin/
+
+ install -d "$subpkgdir"/usr/lib/julia
+ mv "$pkgdir"/usr/lib/*-debug.* "$subpkgdir"/usr/lib
+ mv "$pkgdir"/usr/lib/julia/*-debug.* "$subpkgdir"/usr/lib/julia/
+}
+
+sha512sums="70b3e23c7297d86268c2d32b0c19976dc6f9512bd41c5e9f621b1b9a082ed25ee85cf5f11f3e5acfc623b3a13fa88d245eb2609bad01935d86d90b502d068353 julia-0.5.2.tar.gz
+c53513a5aea84405bf302b084a23f24f54148aac90a2bd666219ce14879723baab959942934d0d801a4572fffd07e60a7d574ade8d7eb57b6da8216063c20a48 libuv-8d5131b6c1595920dd30644cd1435b4f344b46c8.tar.gz
+0283c7b0ff7dd99ae79f6ddac63513ce7d58ba31de506a3fee07af9b8882ddc275d0f9cb002381ba1e304bcacf252612fa16b21b85667422477e6b945b725899 find-syslibs
+15968d95b09ed0f2315e08a5fd14e798db7fd1faebd1327ceaf7886248b61d2e61f64e726d98cd70cbc2349c66fc3a707298a2481c6abf98c699826f3f2f4ccb 0001-hardened.patch
+6530709d5cd58970b5868a6a536727df6839b3aedfe81c67d4e5b37cf840803a33027eed338b47816810b9ae1119470acd097806e90a41cd59f8d1fcb0843663 0002-verbose-build.patch
+66add07137c3baafba86aea1469ee2cf669f3fa4c01195c04c7a3f9e1b4a85dee020bef315919efa6261b675049bc251aa9fc1878ae7f7929baed5084eb697d7 0003-no-clean-docs.patch
+6c111ccdd12af5b00fdf0b7cc8fba11980fceccf7c246b40e791cd1be8e39cd75b8c290c65ebd9b4add60fc242261e17e94807736fce6a96733e9bf18182b489 0004-remove-sysctl.h.patch
+9875b3cdc49bcc2812ea52b2e25836ba22058dbad94287c9aa7c4e4ee48b7819655588a08d49cb9a3c73431ff6969b3b7eb140fc96dc5b0d64777c3027e06538 0005-fix-rpath-issues.patch
+a66526aee8745875b254f0d27db78b10e76cd8489f4601c77b82674a31ee7a0cf417af8b24a520e069a464303ad7f0077b75543e197eaba48a75b960c9f81a05 0008-ldconfig-compat.patch
+1d128441bb3e15defa2b23c8d68255fe15320060ac7203ebf7d3573e9e8c0120ebf49b2256f022fdddcc816691c6271f35a27d36b03cbe203734b9f902417ca9 fix-or-disable-broken-tests.patch"
diff --git a/community/julia/find-syslibs b/community/julia/find-syslibs
new file mode 100755
index 0000000000..ef25263607
--- /dev/null
+++ b/community/julia/find-syslibs
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# This script adapts output of scanelf to the format produced by
+# GNU's "ldconfig -p".
+#
+# Note: Julia uses "ldconfig -p" as a workaround to find system
+# libraries, see https://github.com/JuliaLang/julia/issues/6742.
+#
+set -e
+
+echo 'libs found on ldpath'
+scanelf --ldpath -E ET_DYN -BF '%F %M %S %f' | while read path class soname _; do
+ case "$class" in
+ ELFCLASS32) arch='i686';;
+ ELFCLASS64) arch='x86-64';;
+ *) arch="$(uname -m | sed 's/_/-/g')";;
+ esac
+ printf '\t%s (libc,%s) => %s\n' "$soname" "$arch" "$path"
+done
diff --git a/community/julia/fix-or-disable-broken-tests.patch b/community/julia/fix-or-disable-broken-tests.patch
new file mode 100644
index 0000000000..fffadfb462
--- /dev/null
+++ b/community/julia/fix-or-disable-broken-tests.patch
@@ -0,0 +1,81 @@
+test/Makefile and tests/choosetests: disable libdl tests entirely due to TLS storage issue:
+ <Shiz> ERROR: Attempt to change TLS address.
+ <Shiz> from my understanding, that happens when the julia-global TLS state is being set twice
+ <Shiz> but I'm not sure what causes it -- we don't use the ifunc functionality as we don't use glibc,
+ and the only reference to the TLS setter function I can see is in ui/repl.c
+ <Shiz> I guess the issue is that ui/repl.c somehow gets included into the .so that libdl attempts to load
+test/spawn.jl: ENFILE is just as valid to return as EMFILE when the system runs out of fds;
+test/cmdlineargs.jl: the backtrace symbols are broken on multiple platforms, including musl;
+test/file.jl: fakeroot makes the stricter permission checks fail;
+test/read.jl: ditto.
+
+--- a/test/spawn.jl
++++ b/test/spawn.jl
+@@ -428,7 +428,7 @@
+ end
+ catch ex
+ isa(ex, Base.UVError) || rethrow(ex)
+- @test ex.code == Base.UV_EMFILE
++ @test ex.code == Base.UV_EMFILE || ex.code == Base.UV_ENFILE
+ finally
+ for p in ps
+ close(p)
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -4,7 +4,7 @@
+ include $(JULIAHOME)/Make.inc
+ # TODO: this Makefile ignores BUILDDIR, except for computing JULIA_EXECUTABLE
+
+-TESTS = all linalg $(filter-out TestHelpers runtests testdefs,$(patsubst $(SRCDIR)/%.jl,%,$(wildcard $(SRCDIR)/*.jl $(SRCDIR)/linalg/*.jl)))
++TESTS = all linalg $(filter-out TestHelpers runtests testdefs libdl,$(patsubst $(SRCDIR)/%.jl,%,$(wildcard $(SRCDIR)/*.jl $(SRCDIR)/linalg/*.jl)))
+
+ default: all
+
+--- a/test/cmdlineargs.jl
++++ b/test/cmdlineargs.jl
+@@ -301,7 +301,7 @@
+ bt = readstring(pipeline(ignorestatus(`$(Base.julia_cmd()) --startup-file=no --precompiled=$precomp
+ -E 'include("____nonexistent_file")'`), stderr=catcmd))
+ @test contains(bt, "in include_from_node1")
+- if is_windows() && Sys.WORD_SIZE == 32 && precomp == "yes"
++ if ((is_windows() && Sys.WORD_SIZE == 32) || is_linux()) && precomp == "yes"
+ # fixme, issue #17251
+ @test_broken contains(bt, "in include_from_node1(::String) at $(joinpath(".","loading.jl"))")
+ else
+--- a/test/choosetests.jl
++++ b/test/choosetests.jl
+@@ -31,7 +31,7 @@
+ "replutil", "sets", "test", "goto", "llvmcall", "grisu",
+ "nullable", "meta", "stacktraces", "profile", "libgit2", "docs",
+ "markdown", "base64", "serialize", "misc", "threads",
+- "enums", "cmdlineargs", "i18n", "workspace", "libdl", "int",
++ "enums", "cmdlineargs", "i18n", "workspace", "int",
+ "checked", "intset", "floatfuncs", "compile", "parallel", "inline",
+ "boundscheck", "error", "ambiguous", "cartesian"
+ ]
+--- a/test/file.jl
++++ b/test/file.jl
+@@ -174,8 +174,8 @@
+ @test stat(file).gid ==0
+ @test stat(file).uid ==0
+ else
+- @test_throws Base.UVError chown(file, -2, -1) # Non-root user cannot change ownership to another user
+- @test_throws Base.UVError chown(file, -1, -2) # Non-root user cannot change group to a group they are not a member of (eg: nogroup)
++ # @test_throws Base.UVError chown(file, -2, -1) # Non-root user cannot change ownership to another user
++ # @test_throws Base.UVError chown(file, -1, -2) # Non-root user cannot change group to a group they are not a member of (eg: nogroup)
+ end
+ else
+ # test that chown doesn't cause any errors for Windows
+--- a/test/read.jl
++++ b/test/read.jl
+@@ -462,8 +462,8 @@
+ @test eof(f1)
+ @test_throws Base.UVError eof(f2)
+ if get(ENV, "USER", "") != "root" && get(ENV, "HOME", "") != "/root"
+- @test_throws SystemError open(f, "r+")
+- @test_throws Base.UVError Base.Filesystem.open(f, Base.Filesystem.JL_O_RDWR)
++ # @test_throws SystemError open(f, "r+")
++ # @test_throws Base.UVError Base.Filesystem.open(f, Base.Filesystem.JL_O_RDWR)
+ else
+ warn("file permissions tests skipped due to running tests as root (not recommended)")
+ end