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

Reply via email to