On Thu, Jul 29, 2021 at 12:38:09PM +0100, Stuart Henderson wrote:
> On 2021/07/29 07:10, Sebastien Marie wrote:
> > On Wed, Jul 28, 2021 at 06:39:32PM +0000, Klemens Nanni wrote:
> > > No idea why, but cargo's API from which cargo-module(5) fetches crates
> > > ships tarballs which seem to always have both Cargo.toml *and*
> > > Cargo.toml.orig.
> 
> Ah I didn't realise these came directly from distfiles.
> 
> > > By using `${PATCHORIG}' instead of hard-coding ".orig" I leave the files
> > > should porters user other PATCHORIG values and therefore avoid the
> > > conflict in the first place.
> 
> These files are specifically named .orig though, so rm'ing ${PATCHORIG}
> files just seems wrong. You could maybe skip removing them if PATCHORIG
> is set, not sure if that makes sense though.
> 
> > > I know this is raceu since `make PATCHORIG=.foo.orig extract &&
> > > make patch && make update-patches' will still trip over that, but our
> > > framework can't cope with everything and I simply find using
> > > `${PATCHORIG}' in cargo.port.mk both cleaner and more obvious.
> > > 
> > > 
> > > Feedback? Objections? OK?
> > 
> > The current pratice for patched ports using lang/rust is to set
> > PATCHORIG in the Makefile.
> > 
> > For quoting bsd.port.mk(5):
> >     PATCHORIG
> >        Suffix used by patch to rename original files, and update-patches
> >        to re-generate ${PATCHDIR}/${PATCH_LIST} by looking for files
> >        using this suffix.  Defaults to .orig.  For a port that already
> >        contains .orig files in the ${DISTFILES}, set this to something
> >        else, such as .pat.orig.  See also distpatch, DISTORIG.
> > 
> > 
> > About removing upstream files because there are conflicting with your
> > tool, I am unsure. But I am not strongly opposed. But please note that
> > it might not remove all conflicting files, and setting PATCHORIG might
> > be still need.
> > 
> > About your patch, it should be done differently:
> > 
> > - don't use PATCHORIG in a module. it could be something else than .orig
> > - respect MODCARGO_VENDOR_DIR variable: the Cargo.toml files could be 
> > somewhere else than ${WRKDIR}/*
> > - append `rm -f' to existing MODCARGO_post-extract definition (the line 
> > before) instead of using +=
> > 
> > (your diff doesn't remove Cargo.toml.orig files from crates using 
> > MODCARGO_CRATES)
> > 
> > 
> > The rm line should be something like (untested):
> >     rm -f -- ${MODCARGO_CARGOTOML}.orig 
> > ${MODCARGO_VENDOR_DIR}/*/Cargo.toml.orig ;
> 
> I think I am now leaning towards setting PATCHORIG rather than removing
> them. I see no other modules do this, but I don't think they have a
> widespread problem with .orig files in distfiles so it's not really
> needed elsewhere.
> 
> So here's one option (but read on because there's another option worth
> thinking about).
> 
> Index: cargo.port.mk
> ===================================================================
> RCS file: /cvs/ports/devel/cargo/cargo.port.mk,v
> retrieving revision 1.22
> diff -u -p -r1.22 cargo.port.mk
> --- cargo.port.mk     27 Apr 2021 06:51:10 -0000      1.22
> +++ cargo.port.mk     29 Jul 2021 11:22:04 -0000
> @@ -49,6 +49,10 @@ MASTER_SITES${MODCARGO_MASTER_SITESN} ?=
>  # per crates options
>  MODCARGO_CRATES_SQLITE3_BUNDLED ?= No
>  
> +# crates often include Cargo.toml.orig files, override the PATCHORIG
> +# default so that update-patches doesn't find them
> +PATCHORIG ?= .orig.port
> +
>  # Generated list of DISTFILES.
>  .for _cratename _cratever in ${MODCARGO_CRATES}
>  DISTFILES += 
> ${_MODCARGO_DIST_SUBDIR}${_cratename}-${_cratever}.tar.gz{${_cratename}/${_cratever}/download}:${MODCARGO_MASTER_SITESN}
> 
> 
> Index: man5/cargo-module.5
> ===================================================================
> RCS file: /cvs/src/share/man/man5/cargo-module.5,v
> retrieving revision 1.3
> diff -u -p -r1.3 cargo-module.5
> --- man5/cargo-module.5       26 Feb 2021 01:46:52 -0000      1.3
> +++ man5/cargo-module.5       29 Jul 2021 11:27:02 -0000
> @@ -84,6 +84,14 @@ By default
>  .Ev MASTER_SITES9
>  is used to download the crates.
>  .Pp
> +Because crates often include Cargo.toml.orig files,
> +this module changes the default setting of
> +.Ev PATCHORIG
> +to prevent
> +.Xr bsd.port.mk 5 Ns 's
> +.Cm update-patches
> +target from picking them up.
> +.Pp
>  This module defines:
>  .Bl -tag -width MODCARGO_CRATES_UPDATE
>  .It MODCARGO_CARGOTOML
> 
> 
> Problem though, it is a pain to have differing PATCHORIG settings
> between ports (I think it's fairly common for people working with ports
> to have an alias/wrapper to copy a file to .orig and edit the original,
> it's especially useful with PORTS_PRIVSEP because it can deal with
> setting uid too - so it's quite helpful if these don't differ between
> ports).
> 
> Should we just change the overall default for ports instead?
> 
> Untested but not likely to have a problem. There will also be some "find
> ... -name *.orig -delete" or similar to change in ports make targets,
> but they won't need to be changed all at once, only when plists are
> updated, and it will be obvious.
> 
> Index: bsd.port.mk
> ===================================================================
> RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
> retrieving revision 1.1555
> diff -u -p -r1.1555 bsd.port.mk
> --- bsd.port.mk       3 May 2021 17:53:15 -0000       1.1555
> +++ bsd.port.mk       29 Jul 2021 11:33:54 -0000
> @@ -761,7 +761,7 @@ MAKE_ENV += PATH='${PORTPATH}' PREFIX='$
>  
>  DISTORIG ?= .bak.orig
>  PATCH ?= /usr/bin/patch
> -PATCHORIG ?= .orig
> +PATCHORIG ?= .orig.port
>  PATCH_STRIP ?= -p0
>  PATCH_DIST_STRIP ?= -p0

Well, a lot of porters, myself included, have aliases and scripts to edit
files that make use of the .orig suffix, so there will be a lot of individual
churn in the second case.

I expect rust to be a Special Needs language, so I'm not sure the second
solution is worth it.

Reply via email to