Okay, so what do we do with the new errno?

YONETANI Tomokazu qhwt+dfly at les.ath.cx
Sun May 8 20:28:12 PDT 2005


On Wed, May 04, 2005 at 09:21:43AM -0700, Matthew Dillon wrote:
>     The only thing we can do for programs which declare errno regardless
>     of anything else is to rip out such declarations and throw an
>     #include <errno.h> in instead.  Those programs are plain and simply
>     broken and the authors need to fix their code.

But there's a bunch of them and totally kills automatic nature of
port builds. So I decided to write an aggressive make rule
to automatically replace these annoying declarations.

%%%
. if defined(USE_EXTERN_ERRNO_SMASHER)
RE_EXTERN_ERRNO=^[[:space:]]*extern[[:space:]]*int[[:space:]]*errno;.*
# for make -jN safety
. ORDER: extern-errno-smasher pre-configure
configure: extern-errno-smasher
extern-errno-smasher:
	@${ECHO} "===> Activating errno-smasher" 1>&2
	@if ${GREP} -rq "${RE_EXTERN_ERRNO}" ${WRKSRC}; then \
		${ECHO} " ==> found errno declaration, smashing it" 1>&2; \
		${FIND} ${WRKSRC} -type f -print0 | ${XARGS} -0 \
		sed -i.bak -e "s/${RE_EXTERN_ERRNO}/#include <errno.h>/"; \
	fi
	# I'm using sed instead of ${REINPLACE_CMD} here, because
	# it's not activated unless you have USE_REINPLACE defined.
. endif
%%%

This sometimes works, but not if you're in a port directory which has
a dfport override, because WRKSRC evaluates to empty, so I'm only
using it from the command line.  Anyone has an idea to make it actually
work?





More information about the Bugs mailing list