maintainer-approval requested: [Bug 230287] Mk/Uses/perl5.mk: Check existence of directory before "find" command usage for this directory : [Attachment 195755] Proposed patch (since 473539 revision)

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Thu Aug 2 06:16:01 UTC 2018


lightside <lightside at gmx.com> has asked freebsd-perl mailing list
<perl at FreeBSD.org> for maintainer-approval:
Bug 230287: Mk/Uses/perl5.mk: Check existence of directory before "find"
command usage for this directory
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230287

Attachment 195755: Proposed patch (since 473539 revision)
https://bugs.freebsd.org/bugzilla/attachment.cgi?id=195755&action=edit



--- Description ---
Hello.

I noticed, that some ports, which have USES+=perl5 (and USE_PERL5=build),
started to report about non existing
"<..>/work/stage/usr/local/lib/perl5/site_perl" directory, when using some
"find" command.
For example, x11-servers/xorg-server port:
-8<--
# cd /usr/ports/x11-servers/xorg-server
# make stage
<..>
find:
/usr/ports/x11-servers/xorg-server/work/stage/usr/local/lib/perl5/site_perl: No
such file or directory
install  -s -m 0644
/usr/ports/x11-servers/xorg-server/work/xorg-server-1.18.4/hw/xfree86/dixmods/.
libs/libglx.so

/usr/ports/x11-servers/xorg-server/work/stage/usr/local/lib/xorg/modules/extens
ions/.xorg/
<..>
# make clean
===>  Cleaning for xorg-server-1.18.4_9,1
-->8-

ftp/wget port:
-8<--
# cd /usr/ports/ftp/wget
# make stage
<..>
Making install in testenv
find: /usr/ports/wget/work/stage/usr/local/lib/perl5/site_perl: No such file or
directory
====> Compressing man pages (compress-man)
<..>
# make clean
===>  Cleaning for wget-1.19.5
-->8-

I found, that this is because of ports r473539 changes, which added removal of
README.pod files, if they exists in "${STAGEDIR}${PREFIX}/${SITE_PERL_REL}"
directory.

I propose to add some check for "${STAGEDIR}${PREFIX}/${SITE_PERL_REL}"
directory before find command usage for this directory:
-8<--
@[ -d "${STAGEDIR}${PREFIX}/${SITE_PERL_REL}" ] && \
	${FIND} ${STAGEDIR}${PREFIX}/${SITE_PERL_REL} -name README.pod -delete
|| :
-->8-

Similar to what was used for "${STAGEDIR}${SITE_MAN3}" directory:
https://svnweb.freebsd.org/ports/head/Mk/Uses/perl5.mk?view=markup&pathrev=4735
39#l306
-8<--
@[ -d "${STAGEDIR}${SITE_MAN3}" ] && \
	${FIND} ${STAGEDIR}${SITE_MAN3} -name '*::README.3' -delete || :
-->8-

How to check:
% [ -d "/usr/ports" ] && echo exists || echo not exists
exists
% find /usr/ports -maxdepth 1 -name Makefile
/usr/ports/Makefile
% cd /usr/ports && find * -maxdepth 0 -name Makefile
Makefile
% [ -d "/usr/ports/nonexistent" ] && echo exists || echo not exists
not exists
% find /usr/ports/nonexistent -maxdepth 1 -name Makefile
find: /usr/ports/nonexistent: No such file or directory
% [ -d "/usr/ports/nonexistent" ] && find /usr/ports/nonexistent -maxdepth 1
-name Makefile

Also possible to redirect message about non-existing directory to /dev/null:
% sh -c "find /usr/ports/nonexistent -maxdepth 1 -name Makefile 2>/dev/null"
% sh -c "cd /usr/ports/nonexistent 2>/dev/null && find * -maxdepth 0 -name
Makefile"

CC: mat@


More information about the freebsd-perl mailing list