Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Apr 2014 03:39:02 +0000 (UTC)
From:      Bryan Drewery <bdrewery@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r351064 - in head: . Keywords Mk
Message-ID:  <201404120339.s3C3d2Sq009758@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bdrewery
Date: Sat Apr 12 03:39:02 2014
New Revision: 351064
URL: http://svnweb.freebsd.org/changeset/ports/351064
QAT: https://qat.redports.org/buildarchive/r351064/

Log:
  - Add a @sample plist keyword
  
    It accepts a file (must end in .sample, this is not configurable):
  
      @sample file.conf.sample
  
    This will install file.conf.sample and copy it to file.conf. The file.conf
    will be removed if it matches file.conf.sample on deinstall.
  
    This replaces older patterns of:
  
      @unexec if cmp -s %D/etc/pkgtools.conf %D/etc/pkgtools.conf.sample; then rm -f %D/etc/pkgtools.conf; fi
      etc/pkgtools.conf.sample
      @exec [ -f %B/pkgtools.conf ] || cp %B/%f %B/pkgtools.conf
  
    [1] This somewhat obsoletes work in ports/157168 which added CONF_FILES,
        but we have been moving towards more logic in pkg-plist where possible
        and less magical macros. Though this thinking does clash with autoplist
        ideas. We may still want CONF_FILES, which just drops a list of
        @sample entries into the plist anyway.
  - Add a Keywords/pkg_install.awk and hook it into generate-plist. This is
    for pkg_install compatibility since it does not know how to read
    Keywords/sample.yaml.
    This file gives us a strategy to implement more keywords before
    pkg_install is EOL.
    Keywords are documented here:
    https://github.com/freebsd/pkg/commit/bffc31420b1fd6146a43c9abcd45109dd901198a
  - This needs to be documented in PH and portlint support added still.
  
  PR:		ports/157168 [1]
  Discussed with:	bapt
  Reviewed by:	bapt
  Requested by:	many
  With hat:	portmgr

Added:
  head/Keywords/pkg_install.awk   (contents, props changed)
  head/Keywords/sample.yaml   (contents, props changed)
Modified:
  head/CHANGES
  head/Mk/bsd.port.mk

Modified: head/CHANGES
==============================================================================
--- head/CHANGES	Sat Apr 12 03:26:25 2014	(r351063)
+++ head/CHANGES	Sat Apr 12 03:39:02 2014	(r351064)
@@ -10,6 +10,23 @@ in the release notes and/or placed into 
 
 All ports committers are allowed to commit to this file.
 
+20140411:
+AUTHOR: bdrewery@FreeBSD.org
+
+  A new plist keyword has been added, @sample. It accepts a file (must end in
+  .sample):
+
+    @sample file.conf.sample
+
+  This will install file.conf.sample and copy it to file.conf. The file.conf
+  will be removed if it matches file.conf.sample on deinstall.
+
+  This replaces older patterns of:
+
+    @unexec if cmp -s %D/etc/pkgtools.conf %D/etc/pkgtools.conf.sample; then rm -f %D/etc/pkgtools.conf; fi
+    etc/pkgtools.conf.sample
+    @exec [ -f %B/pkgtools.conf ] || cp %B/%f %B/pkgtools.conf
+
 20140312:
 AUTHOR: bapt@FreeBSD.org
 

Added: head/Keywords/pkg_install.awk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/Keywords/pkg_install.awk	Sat Apr 12 03:39:02 2014	(r351064)
@@ -0,0 +1,31 @@
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+#
+# This file handles converting keywords to pkg_install compatible format.
+# It will be removed once pkg_install is EOL.
+#
+
+#  @sample somefile.conf.sample
+# ->
+#  @comment begin @sample somefile.conf.sample
+#  @unexec if cmp -s %D/etc/somefile.conf %D/etc/somefile.conf.sample; then rm -f %D/etc/somefile.conf; fi
+#  etc/somefile.conf.sample
+#  @exec if ! [ -f %D/etc/somefile.conf ]; then cp %D/etc/somefile.conf.sample %D/etc/somefile.conf; fi
+#  @comment end @sample somefile.conf.sample
+# 
+$1 == "@sample" {
+  sample_file=$2
+  # Take out .sample
+  target_file=substr(sample_file, 0, length(sample_file) - 7)
+  print "@comment begin " $0
+  print "@unexec if cmp -s '%D/" target_file "' '%D/" sample_file "'; then rm -f '%D/" target_file "'; fi"
+  print sample_file
+  print "@exec if ! [ -f '%D/" target_file "' ]; then /bin/cp -p '%D/" sample_file "' '%D/" target_file "'; fi"
+  print "@comment end " $0
+  next
+}
+# Print everything else as-is
+{
+  print $0
+}

Added: head/Keywords/sample.yaml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/Keywords/sample.yaml	Sat Apr 12 03:39:02 2014	(r351064)
@@ -0,0 +1,29 @@
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+#
+# @sample etc/somefile.conf.sample
+#
+# This will install the somefile.conf.sample and automatically copy to
+# somefile.conf if it doesn't exist. On deinstall it will remove the
+# somefile.conf if it still matches the sample, otherwise it is
+# kept.
+#
+# This replaces the old pattern:
+#  @unexec if cmp -s %D/etc/pkgtools.conf %D/etc/pkgtools.conf.sample; then rm -f %D/etc/pkgtools.conf; fi
+#  etc/pkgtools.conf.sample
+#  @exec [ -f %B/pkgtools.conf ] || cp %B/%f %B/pkgtools.conf
+
+actions: [file]
+post-install: |
+  sample_file="%D/%@"
+  target_file="${sample_file%.sample}"
+  if ! [ -f "${target_file}" ]; then
+    /bin/cp -p "${sample_file}" "${target_file}"
+  fi
+pre-deinstall: |
+  sample_file="%D/%@"
+  target_file="${sample_file%.sample}"
+  if cmp -s "${target_file}" "${sample_file}"; then
+    rm -f "${target_file}"
+  fi

Modified: head/Mk/bsd.port.mk
==============================================================================
--- head/Mk/bsd.port.mk	Sat Apr 12 03:26:25 2014	(r351063)
+++ head/Mk/bsd.port.mk	Sat Apr 12 03:39:02 2014	(r351064)
@@ -1405,6 +1405,7 @@ ETCDIR?=		${PREFIX}/etc/${PORTNAME}
 
 PACKAGES?=		${PORTSDIR}/packages
 TEMPLATES?=		${PORTSDIR}/Templates
+KEYWORDS?=		${PORTSDIR}/Keywords
 
 PATCHDIR?=		${MASTERDIR}/files
 FILESDIR?=		${MASTERDIR}/files
@@ -5625,6 +5626,8 @@ generate-plist:
 .endif
 .if !defined(WITH_PKGNG)
 	@cd ${.CURDIR} && { ${MAKE} pretty-print-config | fold -sw 120 | ${SED} -e 's/^/@comment OPTIONS:/'; } >> ${TMPPLIST}
+	@${AWK} -f ${KEYWORDS}/pkg_install.awk ${TMPPLIST} > ${TMPPLIST}.keyword && \
+	    ${MV} -f ${TMPPLIST}.keyword ${TMPPLIST}
 .endif
 .endif
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201404120339.s3C3d2Sq009758>