This construction doesn't work
Scot Hetzel
swhetzel at gmail.com
Tue Jun 29 14:30:21 UTC 2010
On Tue, Jun 29, 2010 at 1:34 AM, Darren Pilgrim <freebsd at bitfreak.org> 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:
>
> http://www.freebsd.org/doc/en/books/porters-handbook/plist-config.html
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.
Scot
More information about the freebsd-ports
mailing list