On Mon, Oct 11, 2021 at 11:46:53AM +0200, Sebastien Marie wrote:
>
few comments on the diff after some testing.
please note that for now, I don't get a successful build of audio/psst
with cargo.port.mk changes: it seems to still need network to resolv
git crates dependencies.
> > Index: cargo.port.mk
> > ===================================================================
> > RCS file: /cvs/ports/devel/cargo/cargo.port.mk,v
> > retrieving revision 1.24
> > diff -u -p -r1.24 cargo.port.mk
> > --- cargo.port.mk 11 Sep 2021 07:13:13 -0000 1.24
> > +++ cargo.port.mk 10 Oct 2021 20:02:03 -0000
> > @@ -42,10 +42,15 @@ _MODCARGO_DIST_SUBDIR = ${MODCARGO_DIST_
> > .endif
> >
> > # Use MASTER_SITES9 to grab crates by default.
> > -# Could be changed by setting MODCARGO_MASTER_SITESN.
> > MODCARGO_MASTER_SITESN ?= 9
> > MASTER_SITES${MODCARGO_MASTER_SITESN} ?= ${MASTER_SITES_CRATESIO}
> >
> > +# Use MASTER_SITES8 to grab crates as GitHub tarballs by default.
> > +MODCARGO_MASTER_SITES_GITN ?= 8
> > +# This assumes that all git crates come from the same site
> > +# or that all sites support the same URL/download API.
> > +MASTER_SITES${MODCARGO_MASTER_SITES_GITN} ?= https://github.com/
> > +
> > # per crates options
> > MODCARGO_CRATES_SQLITE3_BUNDLED ?= No
> >
> > @@ -54,6 +59,14 @@ MODCARGO_CRATES_SQLITE3_BUNDLED ?= No
> > DISTFILES +=
> > ${_MODCARGO_DIST_SUBDIR}${_cratename}-${_cratever}.tar.gz{${_cratename}/${_cratever}/download}:${MODCARGO_MASTER_SITESN}
> > .endfor
> >
> > +.for _cratename _cratever _crateurl in ${MODCARGO_CRATES_GIT}
> > +# strip leading master site, e.g.
> > https://github.com/author/project/archive/hash ->
> > author/project/archive/hash
> > +_MODCARGO_CRATE_PATH_${_cratename} =
> > ${_crateurl:${MASTER_SITES${MODCARGO_MASTER_SITES_GITN}}%=}
> > +# keep hash in filename (from bsd.port.mk's GH_COMMIT code)
> > +_MODCARGO_CRATE_COMMIT_${_cratename} =
> > ${_MODCARGO_CRATE_PATH_${_cratename}:T:C/(........).*/\1/}
> > +DISTFILES +=
> > ${_MODCARGO_DIST_SUBDIR}${_cratename}-${_cratever}-${_MODCARGO_CRATE_COMMIT_${_cratename}}{${_MODCARGO_CRATE_PATH_${_cratename}}}.tar.gz:${MODCARGO_MASTER_SITES_GITN}
> > +.endfor
> > +
> > # post-extract target for preparing crates directory.
> > # It will put all crates in the local crates directory.
> > MODCARGO_post-extract = \
> > @@ -63,6 +76,15 @@ MODCARGO_post-extract = \
> > MODCARGO_post-extract += \
> > mv ${WRKDIR}/${_cratename}-${_cratever}
> > ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever} ;
> > .endfor
> > +.for _cratename _cratever _crateurl in ${MODCARGO_CRATES_GIT}
> > +# strip author and turn path into unique directory name, e.g.
> > author/project/archive/hash -> project-hash
> > +_MODCARGO_CRATE_DIR_${_cratename} =
> > ${_MODCARGO_CRATE_PATH_${_cratename}:C/^[^\/]+\///:S/\/archive\//-/}
> > +# do not move a commit based directory as it may contain multiple crates,
> > e.g.
> > +# druid-d815bc... contains druid-0.7.0, druid-derive-0.4.0 and
> > druid-shell-0.7.0
> > +MODCARGO_post-extract += \
> > + ${ECHO_MSG} "[modcargo] ${_MODCARGO_CRATE_DIR_${_cratename}} got
> > linked to instead" ; \
it will be fine without this ECHO_MSG.
> > + ln -s ${WRKDIR}/${_MODCARGO_CRATE_DIR_${_cratename}}
> > ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever} ;
the line should be break with \
ln -s ${WRKDIR}/${_MODCARGO_CRATE_DIR_${_cratename}} \
${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever} ;
> > +.endfor
> >
> > # post-extract target to provide clean environment for specific crates
> > # in order to avoid rebuilding libraries from source behind us.
> > @@ -179,6 +201,13 @@ MODCARGO_post-patch += \
> > ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever} ;
> > .endfor
> >
> > +.for _cratename _cratever _crateurlUNUSED in ${MODCARGO_CRATES_GIT}
> > +MODCARGO_post-patch += \
a message is need here (cargo-generate-vendor is a long operation, so
it is better to know why the build is stalling).
${ECHO_MSG} "[modcargo] Generating metadata for
${_cratename}-${_cratever}-${_MODCARGO_CRATE_COMMIT_${_cratename}}"
> > + ${LOCALBASE}/bin/cargo-generate-vendor \
> > +
> > ${FULLDISTDIR}/${_MODCARGO_DIST_SUBDIR}${_cratename}-${_cratever}.tar.gz \
the archive name changed:
${FULLDISTDIR}/${_MODCARGO_DIST_SUBDIR}${_cratename}-${_cratever}-${_MODCARGO_CRATE_COMMIT_${_cratename}}.tar.gz
> > + ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever} ;
> > +.endfor
> > +
> > # configure hook. Place a config file for overriding crates-io index by
> > # local source directory, and set compilation options (based on release).
> > # Enabled by use of "CONFIGURE_STYLE=cargo".
> > @@ -347,12 +376,17 @@ _modcargo-metadata:
> > @${MODCARGO_post-patch}
> >
> > # modcargo-gen-crates will output crates list from Cargo.lock file.
> > +# number signs (#) in MODCARGO_CRATES_GIT are problematic, replace here!
> > modcargo-gen-crates: extract
> > @echo '# run: make modcargo-gen-crates-licenses'
> > @awk ' /^name = / { n=$$3; gsub("\"", "", n); } \
> > /^version = / { v=$$3; gsub("\"", "", v); } \
> > - /^source =
> > "registry\+https:\/\/github.com\/rust-lang\/crates\.io-index"/ \
> > - { print "MODCARGO_CRATES += " n " " v; }' \
> > + /^source =
> > "registry\+https:\/\/github\.com\/rust-lang\/crates\.io-index"$$/ \
> > + { print "MODCARGO_CRATES += " n " " v; } \
> > + /^source = "git\+https:\/\/github\.com\/.+"$$/ \
> > + { s=$$3; gsub("\"", "", s); \
> > + sub("git\\+", "", s); sub("(\\?.*)?#", "/archive/",
> > s); \
> > + print "MODCARGO_CRATES_GIT += " n " " v " " s; }'
> > \
> > <${MODCARGO_CARGOTOML:toml=lock}
> >
> > # modcargo-gen-crates-licenses will try to grab license information from
> > downloaded crates.
> > @@ -360,6 +394,11 @@ modcargo-gen-crates-licenses: configure
> > @echo '# $$Open''BSD$$'
> > .for _cratename _cratever in ${MODCARGO_CRATES}
> > @echo -n "MODCARGO_CRATES += ${_cratename} ${_cratever} # "
> > + @sed -ne '/^license.*=/{;s/^license.*=
> > *"\([^"]*\)".*/\1/p;q;};$$s/^.*$$/XXX missing license/p' \
> > + ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever}/Cargo.toml
> > +.endfor
> > +.for _cratename _cratever _crateurl in ${MODCARGO_CRATES_GIT}
> > + @echo -n "MODCARGO_CRATES_GIT += ${_cratename} ${_cratever}
> > ${_crateurl} # "
> > @sed -ne '/^license.*=/{;s/^license.*=
> > *"\([^"]*\)".*/\1/p;q;};$$s/^.*$$/XXX missing license/p' \
> > ${MODCARGO_VENDOR_DIR}/${_cratename}-${_cratever}/Cargo.toml
> > .endfor
>
> --
> Sebastien Marie
--
Sebastien Marie