[pacman-dev] [PATCH] makepkg: list files containing $srcdir (FS#31558)

Dave Reisner d at falconindy.com
Fri May 17 21:34:38 EDT 2013


On Sat, May 18, 2013 at 11:23:10AM +1000, Allan McRae wrote:
> On 15/05/13 11:08, Phillip Smith wrote:
> > From 2730cfde03792ad847343d7339b7a8cacc6ff81e Mon Sep 17 00:00:00 2001
> > From: Phillip Smith <phillip.smith at naturesorganics.com.au>
> > Date: Wed, 15 May 2013 11:04:03 +1000
> > Subject: [PATCH] makepkg: list files containing $srcdir (FS#31558)
> > 
> > when checking for files in a built package that contain references to
> > $srcdir or $pkgdir_base, show the files that match to assist in
> > debugging.
> > ---
> 
> Much easier to review if the patch is sent inline....
> 
> >  scripts/makepkg.sh.in | 14 +++++++++-----
> >  1 file changed, 9 insertions(+), 5 deletions(-)
> > 
> > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> > index 75ddfe5..70d39b7 100644
> > --- a/scripts/makepkg.sh.in
> > +++ b/scripts/makepkg.sh.in
> > @@ -1606,11 +1606,15 @@ tidy_install() {
> >  	done
> >  
> >  	# check for references to the build and package directory
> > -	if find "${pkgdir}" -type f -print0 | xargs -0  grep -q -I "${srcdir}" ; then
> > -		warning "$(gettext "Package contains reference to %s")" "\$srcdir"
> > -	fi
> > -	if find "${pkgdir}" -type f -print0 | xargs -0  grep -q -I "${pkgdirbase}" ; then
> > -		warning "$(gettext "Package contains reference to %s")" "\$pkgdir"
> > +	srcdir_refs=$(cd "${pkgdir}" && find -type f -print0 | xargs -0 grep -I -l "${srcdir}")
> > +	if [[ -n $srcdir_refs ]] ; then

While it's equivalent, we've generally checked for array length by using
something like:

  if (( ${#array[*]} )); then

> > +		warning "$(gettext "The following files within the package reference %s")" "\$srcdir"
> > +		echo $srcdir_refs	# quotes are important to maintain line breaks
> 
> The lack of quotes indicates that they are not that important!  Also,
> are there issues with files with spaces?

Allan is correct here -- there's problems with files containing spaces
because of how the array is created

> I think it should look like this  (falconindy will correct me if not...)
> 
> srcdir_refs=($(cd ...))
> if [[ -n $s...
> 	warning...
> 	printf "  %s\n" "${srcdir_refs[@]}"
> 

Close, but there's still word splitting issues here. I'd suggest something like:

  mapfile -t srcdir_refs < \
    <(cd "$pkgdir" && find -type f -exec grep -Il "$srcdir" {} +))

d

> 
> > +	fi
> > +	pkgdir_refs=$(cd "${pkgdir}" && find -type f -print0 | xargs -0 grep -I -l "${pkgdirbase}")
> > +	if [[ -n $pkgdir_refs ]] ; then
> > +		warning "$(gettext "The following files within the package reference %s")" "\$pkgdir"
> > +		echo "$pkgdir_refs"	# quotes are important to maintain line breaks
> >  	fi
> >  
> >  	if check_option "zipman" "y" && [[ -n ${MAN_DIRS[*]} ]]; then
> 
> 


More information about the pacman-dev mailing list