This construction doesn't work

Scot Hetzel swhetzel at
Tue Jun 29 14:30:21 UTC 2010

On Tue, Jun 29, 2010 at 1:34 AM, Darren Pilgrim <freebsd at> wrote:
> Paul Schmehl wrote:
>> I'm working on a port update for one of the ports that I maintain, and
>> I've run into a problem that I can't seem to solve.
>> I use this construction to ensure that the port doesn't overwrite the conf
>> file, if one exists:
>> .for f in barnyard2.conf
>>        ${INSTALL_DATA} ${WRKSRC}/etc/${f} ${PREFIX}/etc/${f}-sample
>>        [ -f ${PREFIX}/etc/${f} ] || \
>>        ${INSTALL_DATA} ${WRKSRC}/etc/${f} ${PREFIX}/etc/${f}
>> .endfor
>> But it gets overwritten anyway.  What am I doing wrong?  I thought this
>> worked before, but I can't be sure.  Testing proves that it does not work
>> now.  I tried to changing to an if [ ! -f construction, but that didn't do a
>> thing.

The above may be working properly, the problem could be that the
sources have code in them that installs barnyard2.conf to PREFIX/etc/.
 Check the sources Makefile to see if they are installing this file.
If they are, patch them to install the file as the *-sample.

> Instead of doing this in Makefile, do it in pkg-plist:
> @unexec if cmp -s %D/etc/barnyard2.conf.sample %D/etc/barnyard2.conf; then
> rm -f %D/etc/barnyard2.conf; fi
> etc/barnyard2.conf.sample
> @exec if [ ! -f %D/etc/barnyard2.conf ] ; then cp -p %D/%F
> %D/etc/barnyard2.conf && chmod 600 %D/etc/barnyard2.conf; fi
> Relevant section of the Porter's Handbook:

While this works when installing a package, you still need code in the
Makefile to install barnyard2.conf if it doesn't exist when installing
the port.


More information about the freebsd-ports mailing list