diff options
Diffstat (limited to 'community/ocaml/APKBUILD')
-rw-r--r-- | community/ocaml/APKBUILD | 145 |
1 files changed, 96 insertions, 49 deletions
diff --git a/community/ocaml/APKBUILD b/community/ocaml/APKBUILD index 110b059b626..51cbf6e66fc 100644 --- a/community/ocaml/APKBUILD +++ b/community/ocaml/APKBUILD @@ -1,39 +1,52 @@ # Contributor: Borys Zhukov <mp5@mp5.im> # Contributor: Jakub Jirutka <jakub@jirutka.cz> -# Maintainer: +# Maintainer: omni <omni+alpine@hack.org> pkgname=ocaml -pkgver=4.08.1 -pkgrel=5 +pkgver=4.14.2 +pkgrel=1 pkgdesc="Main implementation of the Caml programming language" -url="http://ocaml.org/" -arch="all !x86 !armhf !armv7 !mips !mips64" -license="LGPL-2.1-or-later-WITH-linking-exception" +url="https://ocaml.org/" +# riscv64: hangs forever at final build step +# loongarch64: no upstream support +arch="all !riscv64 !loongarch64" +license="LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception" depends="$pkgname-runtime=$pkgver-r$pkgrel gcc" -makedepends="gdbm-dev libc-dev ncurses-dev zlib-dev binutils-dev" -[ "$CARCH" = "x86_64" ] || options="textrels" +makedepends="gdbm-dev libc-dev ncurses-dev zlib-dev binutils-dev rpm-scripts" +checkdepends="parallel" subpackages=" + $pkgname-abuild-helper:_abuild_helper:noarch $pkgname-doc - $pkgname-dev + $pkgname-byte $pkgname-ocamldoc $pkgname-compiler-libs:_compiler_libs $pkgname-runtime " -source="http://caml.inria.fr/pub/distrib/ocaml-${pkgver%.*}/$pkgname-$pkgver.tar.gz - compile-without-debug-info.patch - fix-mcontext-fields.patch - fix-segfault-in-ppc64le.patch - fix-check-parser-uptodate-or-warn.sh.patch - fix-fnocommon-duplicate-definition.patch +source="https://caml.inria.fr/pub/distrib/ocaml-${pkgver%.*}/ocaml-$pkgver.tar.gz + ocaml4-abuild-find " -builddir="$srcdir/$pkgname-$pkgver" + +# 32bit archs +case "$CARCH" in +armv7|armhf|x86) + options="$options textrels" + export LDFLAGS="$LDFLAGS -Wl,-z,notext" + ;; +esac build() { - cd "$builddir" + local extra_conf_opts + if ! subpackage_types_has byte; then + extra_conf_opts=" + --disable-installing-bytecode-programs + " + fi + ./configure \ --prefix /usr \ --bindir /usr/bin \ --libdir /usr/lib/ocaml \ --mandir /usr/share/man \ + $extra_conf_opts \ CC="${CC:-gcc}" \ AS="${CC:-gcc} -c" \ ASPP="${CC:-gcc} -c" @@ -41,15 +54,11 @@ build() { } check() { - cd "$builddir" - - # FIXME: there seem to be some spurious failures, ignore until fixed. - make -C testsuite all || true + make ocamltest + make -C testsuite parallel } package() { - cd "$builddir" - make DESTDIR="$pkgdir" install install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE @@ -63,65 +72,103 @@ package() { -a -delete # To be consistent with other binaries. - mv usr/bin/ocamldoc usr/bin/ocamldoc.byte + if subpackage_types_has byte; then + mv usr/bin/ocamldoc usr/bin/ocamldoc.byte + else + rm usr/bin/ocamldoc + fi ln -s ocamldoc.opt usr/bin/ocamldoc } -dev() { - pkgdesc="OCaml bytecode executables" +byte() { + pkgdesc="$pkgdesc (bytecode executables)" + replaces="$pkgname-dev" - _submv 'usr/bin/*.byte' + amove usr/bin/*.byte } ocamldoc() { - pkgdesc="Documentation generator for OCaml" + pkgdesc="$pkgdesc (documentation generator)" depends="$pkgname=$pkgver-r$pkgrel" replaces="$pkgname" # for backward compatibility - _submv usr/bin/ocamldoc\* - _submv usr/lib/ocaml/ocamldoc + amove usr/bin/ocamldoc* + amove usr/lib/ocaml/ocamldoc } _compiler_libs() { - pkgdesc="Compiler libraries for OCaml" + pkgdesc="$pkgdesc (compiler libraries)" depends="$pkgname=$pkgver-r$pkgrel" replaces="$pkgname" # for backward compatibility - _submv usr/lib/ocaml/compiler-libs + amove usr/lib/ocaml/compiler-libs } runtime() { - pkgdesc="OCaml runtime environment" + pkgdesc="$pkgdesc (runtime environment)" depends="" replaces="$pkgname" # for backward compatibility - _submv usr/bin/ocamlrun + amove usr/bin/ocamlrun* + amove usr/lib/ocaml/ld.conf local i; for i in \ '*.cmo' \ '*.cmi' \ '*.cma' \ - 'VERSION' \ 'stublibs' \ - 'vmthreads/*.cmi' \ - 'vmthreads/*.cma' \ 'threads/*.cmi' \ 'threads/*.cma' do - _submv "usr/lib/ocaml/$i" + amove "usr/lib/ocaml/$i" done } -_submv() { - local path="$1" - mkdir -p "$subpkgdir"/${path%/*} - mv "$pkgdir"/$path "$subpkgdir"/${path%/*}/ - rmdir -p "$pkgdir"/${path%/*} 2>/dev/null || true +_abuild_helper() { + pkgdesc="Helper script for OCaml 4 dependency tracing" + depends="$pkgname=$pkgver-r$pkgrel rpm-scripts" + install_if="$pkgname=$pkgver-r$pkgrel build-base" + + install -Dvm755 ocaml4-abuild-find -t "$subpkgdir"/usr/bin/ +} + +prepare_py_provides() { + local dir="${subpkgdir:-$pkgdir}" ocaml_providers="" + local pkgbasedir=${pkgbasedir:-"$startdir/pkg"} + local controldir="$pkgbasedir"/.control.${subpkgname:-$pkgname} + # the main package depends on -runtime, so declare + # what runtime provides under the main package as + # the move to runtime is not a whole directory + # move like -ocamldoc and -compiler-libs + if [ "$subpkgname" = "$pkgname-runtime" ]; then + controldir="$pkgbasedir"/.control.$pkgname + mkdir -p "$controldir" + fi + + options_has "!tracedeps" && return 0 + cd "$dir" + + local ocamlobjinfo="$pkgbasedir"/$pkgname/usr/bin/ocamlobjinfo + + ocaml_providers="$(find usr/lib/ocaml -type f \( \ + -name '*.cma' -o -name '*.cmi' -o -name '*.cmo' \ + -o -name '*.cmx' -o -name '*.cmxa' \) 2>/dev/null \ + | /usr/lib/rpm/ocamldeps.sh --provides -f "$ocamlobjinfo" \ + | sed -e 's/^ocaml(/ocaml4-intf:/' \ + -e 's/^ocamlx(/ocaml4-impl:/' \ + -e 's/) = /:/')" + + # Both ocaml-compiler-libs and ocaml-runtime contain a topdirs.cmi + # So, only allow "ocaml4-intf:Topdirs" in ocaml to avoid conflicts + local i; for i in $ocaml_providers; do + if [ "$subpkgname" != "$pkgname-compiler-libs" ] \ + || [ "${i%:*}" != "ocaml4-intf:Topdirs" ]; then + echo "$i=$pkgver-r$pkgrel" >> "$controldir"/.provides-py + fi + done } -sha512sums="8239c1879926e59c3d9611ad0d97618ce21b0528f1bd59db3df9c24287ad180ffa74f34e52e1fab39e71cbf8113a9a4ee5037cc33ae64ca6a9a109fe4ada0256 ocaml-4.08.1.tar.gz -49cbd6df3a70d00df33d34ab4508dd04d52cbc94efc6c8cac8668758e7346be3c7acedf5b8af38a0adb18c69b8d0859667b12cc11699002c048af962cf283ad2 compile-without-debug-info.patch -e853f609006bd2514bbf63cf9215150496ec62ceee3e55f6f719b19453c97251ad935245578528fab798e626dab5a6c4e2fd5fb652f99ddd5cfd261ac0c4c9bb fix-mcontext-fields.patch -e65b647427d9c94933d5be97857daf8cdc65e25c10066740dbcbab7a4e6f8ddb2277ee7d5796abf5916e5bdd59b057de736190432c480fc8ff2a4b2a94d46eca fix-segfault-in-ppc64le.patch -b3362906c23ecdb084db7dbf18cae22f0a54ba968f1ecf9c8d13c230ca221b3f77fa820a52e091ce7b71b1cb4a91faf1346692aa6fa411bb46fca784500def25 fix-check-parser-uptodate-or-warn.sh.patch -22b6aba45bba33707f1effc2c0690b2ffa1c3c00fb8fab896d99ab80da704a424b705d5a51cd01471c3caba8ad47a58aac72a6eec0adcf1ff594fbbabd4d194f fix-fnocommon-duplicate-definition.patch" +sha512sums=" +64df6462a83058e805ab29d58ef2f3597eb0ed52bf1294a9e6303fb783845cde78c7de04d165e77454a440fa2d50ff10ca81f2d1f9294f2dccdfe28824bce028 ocaml-4.14.2.tar.gz +66a05e85cb00ffa8c6c06f948ea5d3bc6a255296d5bf5ac353c60a4844047876b23b6c1ddea5de1c6849a98ae273f17e3723db49f96da49d5a0bf0d3192ec57c ocaml4-abuild-find +" |