From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2195) id CFD093851C25; Thu, 30 Apr 2020 03:26:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CFD093851C25 To: cygwin-apps-cvs@sourceware.org Subject: [cygport - the Cygwin packaging tool] branch master, updated. 0.33.1-33-gd6e4074 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 9b2c792f83e2f28c4da60a5603da08419b5f873f X-Git-Newrev: d6e4074c793a3b5ffdbe80df2196fc9847308e34 Message-Id: <20200430032653.CFD093851C25@sourceware.org> Date: Thu, 30 Apr 2020 03:26:53 +0000 (GMT) From: Yaakov Selkowitz X-BeenThere: cygwin-apps-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin-apps git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Apr 2020 03:26:53 -0000 https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=d6e4074c793a3b5ffdbe80df2196fc9847308e34 commit d6e4074c793a3b5ffdbe80df2196fc9847308e34 Author: Yaakov Selkowitz Date: Wed Apr 29 23:05:29 2020 -0400 ocaml-dune: new cygclass https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=7d24eb71bdd91e2a368739728dbd522ddd4faaac commit 7d24eb71bdd91e2a368739728dbd522ddd4faaac Author: Yaakov Selkowitz Date: Wed Apr 29 23:04:15 2020 -0400 list_deps: use ocamlobjinfo for better OCaml dependency detection https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=a11e26a4e6c67a123a8320ea8789843e2191ffb6 commit a11e26a4e6c67a123a8320ea8789843e2191ffb6 Author: Yaakov Selkowitz Date: Wed Apr 29 22:45:52 2020 -0400 pkg_pkg: add cygport to all source package build-depends Diff: --- cygclass/meson.build | 3 + cygclass/ocaml-dune.cygclass | 99 +++++++++++++++++++++ lib/pkg_info.cygpart | 27 +++++- lib/pkg_pkg.cygpart | 7 +- testsuite/distdir/result-1.5.tbz | Bin 0 -> 2174 bytes .../dist/multiple/multiple-3.14-1-src.hint | 2 +- .../dist/single/single-2.3.4-1-src.hint | 2 +- testsuite/ocaml/dune/ocaml-result.cygport | 15 ++++ testsuite/ocaml/dune/ocaml-result.list | 14 +++ testsuite/ocaml/meson.build | 5 ++ 10 files changed, 169 insertions(+), 5 deletions(-) diff --git a/cygclass/meson.build b/cygclass/meson.build index 69f2fd1..94568af 100644 --- a/cygclass/meson.build +++ b/cygclass/meson.build @@ -111,6 +111,8 @@ # For packages which depend on Lua or provide Lua modules. # * ocaml.cygclass - # For packages which depend on OCaml or provide OCaml libraries. +# * ocaml-dune.cygclass - +# For OCaml packages which use the Dune buildsystem. # * octave.cygclass - # For packages which depend on Octave or provide Octave modules. # * perl.cygclass - @@ -199,6 +201,7 @@ cygclasses = files( 'multilib.cygclass', 'ninja.cygclass', 'ocaml.cygclass', + 'ocaml-dune.cygclass', 'octave.cygclass', 'perl.cygclass', 'php.cygclass', diff --git a/cygclass/ocaml-dune.cygclass b/cygclass/ocaml-dune.cygclass new file mode 100644 index 0000000..113fccb --- /dev/null +++ b/cygclass/ocaml-dune.cygclass @@ -0,0 +1,99 @@ +################################################################################ +# +# ocaml-dune.cygclass - functions for installing OCaml packages with Dune +# +# Part of cygport - Cygwin packaging application +# Copyright (C) 2006-2019 Yaakov Selkowitz +# Provided by the Cygwin project +# +# cygport is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cygport is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cygport. If not, see . +# +################################################################################ + +#****h* Cygclasses/ocaml-dune.cygclass +# SYNOPSIS +# inherit ocaml-dune +# DESCRIPTION +# Dune is a relatively new, and increasingly popular, build system designed +# for OCaml projects. +# +# This cygclass provides functions for building Dune-based OCaml packages. +# INHERITS +# ocaml.cygclass +# REQUIRES +# ocaml-dune +#**** + +inherit ocaml + +check_prog_req dune ocaml-dune + +#****v* ocaml-dune.cygclass/OCAML_DUNE_BUILD_ARGS +# DESCRIPTION +# Arguments, usually build targets, to be passed to "dune build" +# by ocaml_dune_compile. +#**** + +#****C* ocaml-dune.cygclass/ocaml_dune_compile +# DESCRIPTION +# Runs "dune build", passing OCAML_DUNE_BUILD_ARGS and any given arguments. +#**** +ocaml_dune_compile() { + DUNE_BUILD_DIR=${B} \ + dune build --display=verbose --profile=release ${OCAML_DUNE_BUILD_ARGS} ${@} || error "dune build failed" +} + +#****I* ocaml-dune.cygclass/ocaml_dune_install +# DESCRIPTION +# Runs "dune install" with a destdir of $D. +#**** +ocaml_dune_install() { + DUNE_BUILD_DIR=${B} \ + dune install --display=verbose --destdir ${D} || error "dune install failed" +} + +#****T* ocaml-dune.cygclass/ocaml_dune_test +# DESCRIPTION +# Runs "dune runtest" with any given test directories. +#**** +ocaml_dune_test() { + DUNE_BUILD_DIR=${B} \ + dune runtest --display=verbose ${OCAML_DUNE_TEST_TARGETS} ${@} || error "dune runtest failed" +} + +#****o* ocaml-dune.cygclass/src_compile (ocaml-dune) +# DEFINITION +src_compile() { + cd ${S} + ocaml_dune_compile +} +#**** + +#****o* ocaml-dune.cygclass/src_install (ocaml-dune) +# DEFINITION +src_install() { + cd ${S} + ocaml_dune_install +} +#**** + +#****o* ocaml-dune.cygclass/src_test (ocaml-dune) +# DEFINITION +src_test() { + cd ${S} + ocaml_dune_test +} +#**** + +readonly -f ocaml_dune_compile ocaml_dune_install ocaml_dune_test diff --git a/lib/pkg_info.cygpart b/lib/pkg_info.cygpart index 4d6f598..aa4f666 100644 --- a/lib/pkg_info.cygpart +++ b/lib/pkg_info.cygpart @@ -357,9 +357,32 @@ __list_deps() { if check_prog ocamlc.opt then mldir=$(ocamlc.opt -where) + if [ -d ${D}${mldir} ] + then + for cma in $(find ${D}${mldir} ${mldir} -name '*.cma') + do + ocamlobjinfo $cma | sed -nr "s#(Unit|Module) name: #$cma:#p" + done > ${T}/.cmaobjinfo.out + for cmxa in $(find ${D}${mldir} ${mldir} -name '*.cmxa') + do + ocamlobjinfo $cmxa | sed -nr "s#(Unit|Module) name: #$cmxa:#p" + done > ${T}/.cmxaobjinfo.out + alldeps+=" "$(find "${@//^_^/ }" -type f -name '*.cma' | xargs -r ocamlobjinfo \ + | grep -Eo '[0-9a-f]{32}[[:space:]]+[A-Za-z0-9_]+' \ + | sort -u \ + | while read md5sum module + do grep -m 1 ":$module$" ${T}/.cmaobjinfo.out | sed -e 's/:.*//' + done | sort -u) + alldeps+=" "$(find "${@//^_^/ }" -type f -name '*.cmxa' | xargs -r ocamlobjinfo \ + | grep -Eo '[0-9a-f]{32}[[:space:]]+[A-Za-z0-9_]+' \ + | sort -u \ + | while read md5sum module + do grep -m 1 ":$module$" ${T}/.cmxaobjinfo.out | sed -e 's/:.*//' + done | sort -u) + fi for mllib in $(find "${@//^_^/ }" -type f -name '*.cmxa') do - for mldep in $(strings ${mllib} | sed -ne 's/^.-l\([^@]*\).*/lib\1/gp') + for mldep in $(ocamlobjinfo ${mllib} | sed -nr '/^Extra C object files:/s/(.*: )?-l([^ ]*)/lib\2/gp') do if [ -f ${mllib%/*}/${mldep}.a ] then @@ -372,7 +395,7 @@ __list_deps() { fi done done - if check_prog ocamlfind + if check_prog ocamlfind && [ ${PN} != "ocaml-findlib" ] then alldeps+=" "$(find "${@//^_^/ }" -path "${mldir#/}/*/META" \ | xargs -r grep -h 'requires *=' \ diff --git a/lib/pkg_pkg.cygpart b/lib/pkg_pkg.cygpart index 119d6a6..23bb229 100644 --- a/lib/pkg_pkg.cygpart +++ b/lib/pkg_pkg.cygpart @@ -386,6 +386,11 @@ __pkg_diff() { default_excludes+=" *.linfo"; fi + if inherited ocaml + then + default_excludes+=" .merlin"; + fi + # cd now so that wildcards aren't mistakenly expanded to match files in # user's directory cd ${workdir}; @@ -910,7 +915,7 @@ _EOF then cat > ${distdir}/${PN}/${PN}-${PVR}-src.hint <<-_EOF category: ${!pkg_category_var:-${CATEGORY}} -build-depends: ${BUILD_REQUIRES} +build-depends: cygport ${BUILD_REQUIRES} sdesc: "${!pkg_summary_var:-${SUMMARY}}" ldesc: "${!pkg_description_var:-${DESCRIPTION:-${!pkg_summary_var:-${SUMMARY}}}}" skip: diff --git a/testsuite/distdir/result-1.5.tbz b/testsuite/distdir/result-1.5.tbz new file mode 100644 index 0000000..939a9e9 Binary files /dev/null and b/testsuite/distdir/result-1.5.tbz differ diff --git a/testsuite/hints/multiple/hints/multiple-3.14-1.x86_64/dist/multiple/multiple-3.14-1-src.hint b/testsuite/hints/multiple/hints/multiple-3.14-1.x86_64/dist/multiple/multiple-3.14-1-src.hint index 46ca274..c07abf4 100644 --- a/testsuite/hints/multiple/hints/multiple-3.14-1.x86_64/dist/multiple/multiple-3.14-1-src.hint +++ b/testsuite/hints/multiple/hints/multiple-3.14-1.x86_64/dist/multiple/multiple-3.14-1-src.hint @@ -1,5 +1,5 @@ category: Base -build-depends: +build-depends: cygport sdesc: "Summary of hints for multiple package test (source)" ldesc: "Description of hints for multiple package test (source)" skip: diff --git a/testsuite/hints/single/hints/single-2.3.4-1.x86_64/dist/single/single-2.3.4-1-src.hint b/testsuite/hints/single/hints/single-2.3.4-1.x86_64/dist/single/single-2.3.4-1-src.hint index 7bd601a..afad2f6 100644 --- a/testsuite/hints/single/hints/single-2.3.4-1.x86_64/dist/single/single-2.3.4-1-src.hint +++ b/testsuite/hints/single/hints/single-2.3.4-1.x86_64/dist/single/single-2.3.4-1-src.hint @@ -1,5 +1,5 @@ category: Base -build-depends: +build-depends: cygport sdesc: "Summary of hints for single package test" ldesc: "Description of hints for single package test" skip: diff --git a/testsuite/ocaml/dune/ocaml-result.cygport b/testsuite/ocaml/dune/ocaml-result.cygport new file mode 100644 index 0000000..f52ac17 --- /dev/null +++ b/testsuite/ocaml/dune/ocaml-result.cygport @@ -0,0 +1,15 @@ +inherit ocaml-dune + +NAME="ocaml-result" +VERSION=1.5 +RELEASE=1 +CATEGORY="OCaml" +SUMMARY="Compatibility library for OCaml result type" +DESCRIPTION="Projects that want to use the new result type defined in OCaml +4.03+ while staying compatible with older version of OCaml should use the +Result module defined in this library." +HOMEPAGE="https://github.com/janestreet/result" +SRC_URI="${HOMEPAGE}/releases/download/${VERSION}/result-${VERSION}.tbz" +SRC_DIR="result-${VERSION}" + +BUILD_REQUIRES="ocaml ocaml-dune" diff --git a/testsuite/ocaml/dune/ocaml-result.list b/testsuite/ocaml/dune/ocaml-result.list new file mode 100644 index 0000000..57e68a8 --- /dev/null +++ b/testsuite/ocaml/dune/ocaml-result.list @@ -0,0 +1,14 @@ +/usr/lib/ocaml/result/META +/usr/lib/ocaml/result/dune-package +/usr/lib/ocaml/result/opam +/usr/lib/ocaml/result/result.a +/usr/lib/ocaml/result/result.cma +/usr/lib/ocaml/result/result.cmi +/usr/lib/ocaml/result/result.cmt +/usr/lib/ocaml/result/result.cmx +/usr/lib/ocaml/result/result.cmxa +/usr/lib/ocaml/result/result.cmxs +/usr/lib/ocaml/result/result.ml +/usr/share/doc/ocaml-result/CHANGES.md +/usr/share/doc/ocaml-result/LICENSE.md +/usr/share/doc/ocaml-result/README.md diff --git a/testsuite/ocaml/meson.build b/testsuite/ocaml/meson.build index f50622c..ded19fe 100644 --- a/testsuite/ocaml/meson.build +++ b/testsuite/ocaml/meson.build @@ -2,3 +2,8 @@ ocaml = find_program('ocamlc.opt', required: false) if ocaml.found() tests += [['ocaml/findlib']] endif + +ocaml_dune = find_program('dune', required: false) +if ocaml_dune.found() +tests += [['ocaml/dune']] +endif