• [gentoo-dev] [PATCH v3] eclass/dune.eclass: fix dune-install function

    From =?UTF-8?q?Maciej=20Bar=C4=87?=@21:1/5 to All on Thu Dec 9 23:40:02 2021
    Support EAPI 8 and drop support for EAPI 5.
    Set DUNE_PKG_NAME to PN by default.
    Move "Move docs to the appropriate place" block to dune-install
    to make dune-install now handle a list of subpackages correctly.

    Signed-off-by: Maciej Barć <xgqt@gentoo.org>
    ---
    eclass/dune.eclass | 50 ++++++++++++++++++++++++++++------------------
    1 file changed, 31 insertions(+), 19 deletions(-)

    diff --git a/eclass/dune.eclass b/eclass/dune.eclass
    index 02a8a870e..8cf8ededa 100644
    --- a/eclass/dune.eclass
    +++ b/eclass/dune.eclass
    @@ -8,7 +8,7 @@
    # ML <ml@gentoo.org>
    # @AUTHOR:
    # Rafael Kitover <rkitover@gmail.com>
    -# @SUPPORTED_EAPIS: 5 6 7
    +# @SUPPORTED_EAPIS: 6 7 8
    # @BLURB: Provides functions for installing Dune packages.
    # @DESCRIPTION:
    # Provides dependencies on dDne and OCaml and default src_compile, src_test and
    @@ -19,9 +19,10 @@
    # @DESCRIPTION:
    # Sets the actual Dune package name, if different from Gentoo package name.
    # Set before inheriting the eclass.
    +: ${DUNE_PKG_NAME:-${PN}}

    case ${EAPI:-0} in
    - 5|6|7) ;;
    + 6|7|8) ;;
    *) die "${ECLASS}: EAPI ${EAPI} not supported" ;;
    esac

    @@ -32,7 +33,7 @@ EXPORT_FUNCTIONS src_compile src_test src_install

    RDEPEND=">=dev-lang/ocaml-4:=[ocamlopt?] dev-ml/dune:="
    case ${EAPI:-0} in
  • From Ulrich Mueller@21:1/5 to All on Fri Dec 10 08:00:02 2021
    On Thu, 09 Dec 2021, Maciej Barć wrote:

    dune-install() {
    + local pkgs
    + if [[ -n "${@}" ]] ; then
    + pkgs="${@}"

    Here pkgs is a scalar ...

    + else
    + pkgs=${DUNE_PKG_NAME}
    + fi
    +
    + local myduneopts=(
    + --prefix="${ED%/}/usr"
    + --libdir="${D%/}$(ocamlc -where)"
    + --mandir="${ED%/}/usr/share/man"
    + )
    local pkg
    - for pkg ; do
    - dune install \
    - --prefix="${ED%/}/usr" \
    - --libdir="${D%/}$(ocamlc -where)" \
    - --mandir="${ED%/}/usr/share/man" \
    - "${pkg}" || die
    + for pkg in ${pkgs[@]} ; do

    ... and here it's an array?

    + dune install ${myduneopts[@]} ${pkg} || die
    +
    + # Move docs to the appropriate place.
    + if [ -d "${ED%/}/usr/doc/${pkg}" ] ; then
    + mkdir -p "${ED%/}/usr/share/doc/${PF}/" || die
    + mv "${ED%/}/usr/doc/${pkg}" "${ED%/}/usr/share/doc/${PF}/" || die
    + rm -rf "${ED%/}/usr/doc" || die
    + fi
    done
    }

    I'd write something like this:

    local -a pkgs=("$@")
    [[ ${#pkgs[@]} -eq 0 ]] && pkgs=(${DUNE_PKG_NAME})

    And the loop like this (note the double quotes to be whitespace-safe):

    for pkg in "${pkgs[@]}"; do
    ...
    done

    Ulrich

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQFDBAEBCAAtFiEEtDnZ1O9xIP68rzDbUYgzUIhBXi4FAmGy+ZwPHHVsbUBnZW50 b28ub3JnAAoJEFGIM1CIQV4uk8cH/2v53ZwYJmIUfhgWlC06EmK4XBLdLSE2SDcf 2bytc0rxheS3w7jpJUGIln9dlOIRn6EAMNnJCrZ4sVZa4p5FICrODXgURtsJn+Y9 UBBABQP0pFTeIVje+CU9n/uKMVmnz4XQkdaikXwqzAtrVU3CAt3CcTGd5udsSg2P X0s6L8dEN+XwZOBvh4PbJEtQnTIiV7s3F0WS4qQtUM/wsxbkSts5VUdveefMj+NG mJrjBSEt+Kfmk086WxijvK7wuSGQqFj0Unp6cqA2jK4oc1YD6Q5mH9+1cuv+PnLc yuWWa+WhE7pMX60sLbOEVScJxtVLSO5/VAPRmJRtamD/PLEceuw=qTwc
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulrich Mueller@21:1/5 to All on Fri Dec 10 09:00:02 2021
    On Fri, 10 Dec 2021, Ulrich Mueller wrote:

    I'd write something like this:

    local -a pkgs=("$@")
    [[ ${#pkgs[@]} -eq 0 ]] && pkgs=(${DUNE_PKG_NAME})

    Looks like I'm not immune against missing quotes either. :/
    The line should read:

    [[ ${#pkgs[@]} -eq 0 ]] && pkgs=("${DUNE_PKG_NAME}")

    And the loop like this (note the double quotes to be whitespace-safe):

    for pkg in "${pkgs[@]}"; do
    ...
    done

    -----BEGIN PGP SIGNATURE-----

    iQFDBAEBCAAtFiEEtDnZ1O9xIP68rzDbUYgzUIhBXi4FAmGzB4cPHHVsbUBnZW50 b28ub3JnAAoJEFGIM1CIQV4u8SYH/R73I0kQCEJgsM0/W8ZOELzDJVkYA9ADY+2T W0wk++Id/i96YRh6TruX1Bcs2eMkbrvK0imGwao/e+LLpDoh5jxw6fnn21ySWYVu /MoHpqibuOZfzzhqkBxmEAmHqu7geCLOuZnxYRVNHTcOB42sS8rhB706zHmj/4uK iBCKyyT2gtbAitRlISgVTDdi2h4OqCh69cV6Hk4N5Zt9bHFEnipfpfWN6ydKlC7a k7aPkfwfH4EcgOMlM6THtLr6r9+WqPjkZTg9js+lhA3VW8QjsO8sW0MQ+uVOlZsY wmPAzZc0AI21MPYNIpc0YhW1jPQlEssUYWJ5xHViscKX7Evbpro=
    =381V
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)