| #### |
| # |
| # Based partly on package(s) or directions found at these URLs |
| # https://www.archlinux.org/packages/community/x86_64/julia/ |
| # https://github.com/JuliaLang/julia/blob/master/doc/build/build.md |
| # https://github.com/JuliaLang/julia/blob/master/doc/build/windows.md |
| # https://github.com/JuliaLang/julia/blob/master/doc/build/distributing.md |
| # |
| # Maintainer: gym603 <gui_yuan_miao@163.com> |
| # Contributor: Tim Stahlhut <stahta01@gmail.com> |
| # |
| #### |
| # |
| # Normal build command |
| # makepkg-mingw -sLf --nocheck |
| # |
| # Added tty and msg2 start and finish messages because of makepkg log |
| # lockups. They help to figure out which tee command to kill. |
| # |
| #### |
| |
| _make_verbose=0 # 0 or 1 (PR value is 0) |
| _show_log_lockup_info=0 # 0 or 1 (PR value is 0) |
| |
| _realname=julia |
| pkgbase=mingw-w64-${_realname} |
| pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") |
| pkgver=1.4.1 |
| pkgrel=1 |
| _rc= |
| _sourcedir=${_realname}-${pkgver}${_rc} |
| pkgdesc="High-level, high-performance, dynamic programming language for technical computing (mingw-w64)" |
| arch=('any') |
| mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64') |
| url="https://julialang.org/" |
| license=('MIT') |
| depends=("p7zip" |
| "${MINGW_PACKAGE_PREFIX}-gcc-libs" |
| "${MINGW_PACKAGE_PREFIX}-suitesparse" |
| "${MINGW_PACKAGE_PREFIX}-lapack" |
| "${MINGW_PACKAGE_PREFIX}-openblas" |
| "${MINGW_PACKAGE_PREFIX}-libunwind") |
| makedepends=("patch" |
| "make" |
| "tar" |
| "${MINGW_PACKAGE_PREFIX}-gcc-fortran" |
| "${MINGW_PACKAGE_PREFIX}-gmp" |
| "${MINGW_PACKAGE_PREFIX}-diffutils" |
| "${MINGW_PACKAGE_PREFIX}-python2" |
| "${MINGW_PACKAGE_PREFIX}-cmake" |
| "perl") |
| source=(${_sourcedir}.tar.gz::https://github.com/JuliaLang/julia/releases/download/v${pkgver}/${_realname}-${pkgver}${_rc}.tar.gz |
| 003-1.1.1-msys2-fix-CMAKE_GENERATOR_COMMAND-and-CMAKE_C_COMPILER.patch |
| 004-1.1.1-msys2-fix-base-floatfuncs.jl.patch |
| 007-1.3.0-pkgbuild-make-install-no-build.patch |
| 008-1.1.1-msys2-fix-i686-gcc-dll-name.patch |
| 009-1.1.1-msys2-find-modname-in-julia_dl-before-default-paths.patch |
| 010-1.3.0-msys2-fix-install-dir.patch |
| 012-1.1.1-gcc-remove-USING_SJLJ_EXCEPTIONS.patch |
| 015-1.1.1-mingw-use-O2-instead-of-O3.patch |
| 016-1.3.0-msys2-Add-SRCCACHE-LIBGIT2_SRC_DIR-source-extracted-target.patch |
| 017-1.4.1-backport-1.4.2-Add-GCC10-to-GCC-version-mappings-35849.patch |
| 018-1.4.1-llvm-8.0.1-D64937-gcc10.patch |
| 019-1.4.1-port-nl-libgit2-v0.99.0.patch |
| ) |
| sha256sums=('71709a1e04f4f4ac54668cc32530a7d36062ee890fafbcba8dec178987fa0a0c' |
| 'b9a82888f79ce2786a68919b37eb52f0dd44cbac53dd49a6e95401916fa4edd2' |
| '221023d4ebf2721a9b5cedbc6a3550c26c3c9897f5332a6ea4a68ec1f1510b05' |
| '75187094bda0c52d90e5ae9fc3fe170f23ad745d5a1debe762d7da010b9df830' |
| '71fb4b167b9dcf5d227e8ce7e05d35301f2f6ce2b353c4215e8282d5d3a8dc33' |
| 'f82628d0a12c1503ce3a032c6194392f257f49c03724d6788a6d7f5789e33982' |
| '4a4c7b2257177ddf82cfcae1aac0e68b611d1b455f16ce8dd29a33ea9269aefb' |
| '2c1db914a1a83245b91d66cdb1cddfa9f8b262f73125032041b8d7c6cbecb19a' |
| '8c4b2007b91b8fb91cc29fae95fef26a28b655db0547019e0c40423f236b940c' |
| '9ad3bd47d1b9f30bb42346495eca012e9be74e626d008a80882be3f5e30af91a' |
| '93e32c0143ca3fb6392608e1cb8c0564a703b76d09996d29ec74f7f7e56d3936' |
| '7128c1e721cf39c357096efe975e7eaf5de4d0d5bac763fb929f85309fedf742' |
| 'c8be2be8d62ea653439a5c18e56f8026c83f0f1127934b12d7faf60630befd45') |
| |
| # Helper macros to help make tasks easier # |
| apply_patch_with_msg() { |
| for _patch in "$@" |
| do |
| msg2 "Applying ${_patch}" |
| patch -Nbp1 -i "${srcdir}/${_patch}" |
| done |
| } |
| |
| _make_user_config () { |
| cat <<EOF >Make.user |
| USE_BINARYBUILDER = 0 |
| USE_BINARYBUILDER_LLVM = 0 |
| USE_BINARYBUILDER_OPENLIBM = 0 |
| USE_BINARYBUILDER_LIBUV = 0 |
| USE_BINARYBUILDER_PCRE = 0 |
| USE_BINARYBUILDER_MBEDTLS = 0 |
| USE_BINARYBUILDER_LIBSSH2 = 0 |
| USE_BINARYBUILDER_LIBGIT2 = 0 |
| USE_SYSTEM_SUITESPARSE = 1 |
| USE_SYSTEM_LIBUV = 0 |
| # USE_SYSTEM_LIBM = 1 |
| # USE_SYSTEM_OPENLIBM = 1 |
| USE_SYSTEM_DSFMT = 0 |
| USE_SYSTEM_LLVM = 0 |
| # USE_SYSTEM_PCRE = 1 |
| USE_SYSTEM_BLAS = 1 |
| LIBBLAS=-lopenblas |
| LIBBLASNAME=libopenblas |
| USE_SYSTEM_GMP = 0 |
| USE_SYSTEM_ZLIB = 1 |
| USE_SYSTEM_MBEDTLS = 1 |
| USE_SYSTEM_LIBSSH2 = 1 |
| # USE_SYSTEM_LIBGIT2 = 1 |
| USE_SYSTEM_MPFR = 0 |
| # USE_SYSTEM_UTF8PROC = 1 |
| # USE_SYSTEM_CURL = 1 |
| USE_SYSTEM_LIBUNWIND = 1 |
| USE_SYSTEM_P7ZIP = 1 |
| USE_SYSTEM_LAPACK = 1 |
| EOF |
| } |
| |
| prepare() { |
| cd "${srcdir}/${_sourcedir}" |
| |
| rm -f deps/patches/llvm-8.0.1-D64937-gcc10.patch |
| |
| apply_patch_with_msg \ |
| 003-1.1.1-msys2-fix-CMAKE_GENERATOR_COMMAND-and-CMAKE_C_COMPILER.patch \ |
| 004-1.1.1-msys2-fix-base-floatfuncs.jl.patch \ |
| 007-1.3.0-pkgbuild-make-install-no-build.patch \ |
| 008-1.1.1-msys2-fix-i686-gcc-dll-name.patch \ |
| 009-1.1.1-msys2-find-modname-in-julia_dl-before-default-paths.patch \ |
| 010-1.3.0-msys2-fix-install-dir.patch \ |
| 012-1.1.1-gcc-remove-USING_SJLJ_EXCEPTIONS.patch \ |
| 015-1.1.1-mingw-use-O2-instead-of-O3.patch \ |
| 016-1.3.0-msys2-Add-SRCCACHE-LIBGIT2_SRC_DIR-source-extracted-target.patch \ |
| 017-1.4.1-backport-1.4.2-Add-GCC10-to-GCC-version-mappings-35849.patch \ |
| 018-1.4.1-llvm-8.0.1-D64937-gcc10.patch |
| |
| [[ -d "${srcdir}/build-${MINGW_CHOST}" ]] && rm -rf "${srcdir}/build-${MINGW_CHOST}" |
| msg2 "directory copy starting" |
| cp -rp "${srcdir}/${_sourcedir}/." "${srcdir}/build-${MINGW_CHOST}" |
| msg2 "directory copy finished" |
| |
| cd "${srcdir}/build-${MINGW_CHOST}" |
| _make_user_config; # create Make.user in current directory |
| if [[ "$_show_log_lockup_info" == "1" ]]; then |
| tty |
| msg2 "prepare finished" |
| fi |
| } |
| |
| build() { |
| #### Errors found during current or past builds of Julia on MSys2 |
| # BB of LLVM does not work right; llvm-config returns empty results. |
| # LB of GMP 6.1.2 does not work with make target configure. |
| # SB of GMP 6.2.0 is not found by sysimg.jl |
| # LB of lapack failed with error gfortran: Argument list too long |
| # SB of libgit2 failed with error: could not load library libgit2 |
| # |
| # BB means Binary Build done by Julia server |
| # SB means System Build done by MSys2 package |
| # LB means Local Build done by Julia make system running locally |
| #### |
| if [[ "$_show_log_lockup_info" == "1" ]]; then |
| msg2 "build started" |
| fi |
| |
| cd "${srcdir}/build-${MINGW_CHOST}" |
| |
| # Per distributing.md CPUs older than Pentium 4 are not supported. |
| case "${CARCH}" in |
| i686) |
| export CFLAGS="-march=pentium4" |
| export CXXFLAGS="-march=pentium4" |
| ;; |
| esac |
| |
| # option "-w" disables all warnings |
| env CFLAGS="$CFLAGS -w" CXXFLAGS="$CXXFLAGS -w" \ |
| make VERBOSE=${_make_verbose} \ |
| LOCALBASE=${MINGW_PREFIX} |
| if [[ "$_show_log_lockup_info" == "1" ]]; then |
| tty |
| msg2 "build finished" |
| fi |
| } |
| |
| check() { |
| msg2 "check started" |
| |
| cd "${srcdir}/build-${MINGW_CHOST}" |
| |
| cd test |
| make print-TESTS # list the tests |
| env PATH="${srcdir}/build-${MINGW_CHOST}/usr/bin:$PATH" \ |
| ../usr/bin/julia --check-bounds=yes --startup-file=no ./runtests.jl all --skip Sockets --skip Distributed --skip LibGit2/libgit2 --skip FileWatching --skip file |
| find ../stdlib \( -name \*.cov -o -name \*.mem \) -delete |
| rm -r depot/compiled |
| if [[ "$_show_log_lockup_info" == "1" ]]; then |
| tty |
| msg2 "check finished" |
| fi |
| } |
| |
| package_julia() { |
| backup=("${MINGW_PREFIX:1}"/etc/julia/startup.jl) |
| |
| cd "${srcdir}/build-${MINGW_CHOST}" |
| |
| make DESTDIR="${pkgdir}" install \ |
| prefix=${MINGW_PREFIX} |
| |
| # Documentation is in the julia-docs package. |
| rm -rf "$pkgdir${MINGW_PREFIX}/share/"{doc,julia/doc} |
| # Man pages in share/man are duplicate. |
| #rm -rf "$pkgdir${MINGW_PREFIX}/share/man" |
| |
| install -Dm644 LICENSE.md "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE.md" |
| } |
| |
| package_julia-docs() { |
| pkgdesc='Documentation and examples for Julia' |
| depends=(${MINGW_PACKAGE_PREFIX}-julia) |
| |
| install -d "$pkgdir${MINGW_PREFIX}/share/doc" |
| cp -r ${_sourcedir}/doc "$pkgdir${MINGW_PREFIX}/share/doc/${_realname}" |
| rm -rf "$pkgdir${MINGW_PREFIX}/share/doc/${_realname}/man" |
| install -Dm644 ${_sourcedir}/LICENSE.md \ |
| "$pkgdir${MINGW_PREFIX}/share/licenses/julia-docs/LICENSE.md" |
| } |
| |
| # template start; name=mingw-w64-splitpkg-wrappers; version=1.0; |
| # vim: set ft=bash : |
| |
| # generate wrappers |
| for _name in "${pkgname[@]}"; do |
| _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}" |
| _func="$(declare -f "${_short}")" |
| eval "${_func/#${_short}/package_${_name}}" |
| done |
| # template end; |