Bug in ports system's DISTFILES handling?

Frank Laszlo laszlof at tvog.net
Mon Jan 17 11:52:03 PST 2005


This is quite possibly a bug. I took a lot at bsd.port.mk, and DISTFILES 
is supposed to default to
${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX} Which is does, until you 
"append" something else to it, exactly what you are trying to do. Other 
ports I'm looking at simply define the DISTFILES below the MASTER_SITE. 
This is going to cause a warning in portlint, but hey.. what can ya do. 
I'm going to investigate further. Hope this was helpful.

__________________________________________________
Frank Laszlo
System Administrator
The VonOstin Group
Email:  laszlof at tvog.net
WWW:    http://www.vonostingroup.com
Mobile: 248-863-7584



Conrad J. Sabatier wrote:

>As the (relatively new) maintainer of games/gnuchess, I recently
>encountered a peculiar problem re: the handling of DISTFILES=
>declarations (actually DISTFILES+= declarations, to be more precise),
>which I think may have exposed an actual bug in the ports build system.
>
>Basically, this port has both a standard source distfile
>"gnuchess-5.0.7.tar.gz", i.e., ${PORTNAME}${PORTVERSION}${EXTRACT_SUFX},
>as well as an optional file "book_1.01.pgn.gz", which is used to
>creating the opening book for gnuchess, based on the setting of the
>Makefile's OPENING_BOOK option.  This latter file is handled via a
>script, as it must be renamed to book.dat after extraction, before being
>submitted to gnuchess to generate its opening book file, hence the use
>of EXTRACT_ONLY= within the conditional block.
>
>Here's the current CVS version of the Makefile:
>
># New ports collection makefile for:	Gnu Chess
># Date created:		04 July 1996
># Whom:			markm
>#
># $FreeBSD: ports/games/gnuchess/Makefile,v 1.20 2004/12/28 23:19:42
>edwin Exp $#
>
>PORTNAME=	gnuchess
>PORTVERSION=	5.07
>CATEGORIES=	games
>MASTER_SITES=	${MASTER_SITE_GNU}
>MASTER_SITE_SUBDIR=	chess
>
>MAINTAINER=	conrads at cox.net
>COMMENT=	"Classic" Gnu Chess
>
>PLIST_FILES=	bin/gnuchess \
>		bin/gnuchessx
>
>.if !defined(NOPORTDOCS)
>PORTDOCS=	ChangeLog \
>		NEWS \
>		README
>.endif
>
>OPTIONS=    OPENING_BOOK "Install opening book (24 MB download)" on
>
>.include <bsd.port.pre.mk>
>
>.if defined(WITH_OPENING_BOOK)
>DISTFILES+=	book_1.01.pgn.gz
>PLIST_DIRS+=	%%DATADIR%%
>PLIST_FILES+=	%%DATADIR%%/book.dat
>EXTRACT_ONLY=	${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}
>.endif
>
>USE_REINPLACE=	yes
>GNU_CONFIGURE=	yes
>CONFIGURE_TARGET=	--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
>CONFIGURE_ENV=	LIBS="${PTHREAD_LIBS}"
>
>post-patch:
>	@${REINPLACE_CMD} -e 's|-D_THREAD_SAFE|${PTHREAD_CFLAGS:S/"//g}|g ; \
>		 s|-pthread ||g' ${WRKSRC}/configure
>
>pre-install:
>.if defined(WITH_OPENING_BOOK)
>	@${SH} ${SCRIPTDIR}/create_opening_book.sh ${DISTDIR} ${WRKSRC}
>.endif
>
>post-install:
>	${LN} -f ${PREFIX}/bin/gnuchess ${PREFIX}/bin/gnuchessx
>.if defined(WITH_OPENING_BOOK)
>	@${ECHO_CMD} Installing opening book
>	${MKDIR} ${DATADIR} && \
>	${CP} ${WRKSRC}/src/book.dat ${DATADIR}
>.endif
>.if !defined(NOPORTDOCS)
>	@${ECHO_CMD} Installing documentation
>	${MKDIR} ${DOCSDIR} && \
>	${CP} ${WRKSRC}/NEWS ${DOCSDIR} && \
>	${CP} ${WRKSRC}/doc/* ${DOCSDIR}
>.endif
>
>.include <bsd.port.post.mk>
>
>
>This all appears to be fine, and portlint accepts it without complaint,
>yet when the fetch target is run, the source package, i.e., 
>gnuchess-5.0.7.tar.gz, is not retrieved, regardless of the setting of
>the OPENING_BOOK option, whereas the book file is handled properly.
>
>Running 'portlint-v' on the port reveals that the conditionally executed
>"DISTFILES+=	book_1.01.pgn.gz" line is, in fact, appending to a
>previously null variable, whereas one would expect that DISTFILES would
>have already been set equal to DISTNAME automatically.
>
>In order to please portlint, my first attempt at remedying the problem
>was to add an explicit DISTNAME= line to the first block of
>declarations, but this still didn't work, producing exactly the same
>errors.
>
>It was only by adding an explicit
>"DISTFILES=${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}" to the first block
>that the problem went away, although portlint now complains about using
>DISTFILES= for only a single file, apparently not taking into
>consideration at all the later, optional appending of the opening book
>file.
>
>Incidentally, portlint also complains that the EXTRACT_ONLY= line should
>appear earlier, but I have to agree with Edwin Groothuis (who made a few
>small mods to the Makefile after my original submission) that this line
>belongs where it is now, within the conditional block.
>
>Anyway, does this look like a genuine bug to anyone?  It sure does to
>me.  You'll note that the Makefile also uses PLIST_DIRS+= and
>PLIST_FILES+= declarations, but these behave exactly as one would
>expect, whereas DISTFILES+= seems to be badly broken.  Shouldn't
>DISTFILES be automatically set equal to DISTNAME early on, prior to any
>other declarations which may alter or override it?
>
>Thanks for taking the time to read this.
>
>  
>


More information about the freebsd-ports mailing list