git: 306567bc74fb - main - x11-fonts/fontconfig: Use triggers to rebuild fc-cache

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Tue, 22 Mar 2022 12:30:01 UTC
The branch main has been updated by bapt:

URL: https://cgit.FreeBSD.org/ports/commit/?id=306567bc74fbdfb30c62479083b933835f314c8f

commit 306567bc74fbdfb30c62479083b933835f314c8f
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2022-03-18 13:36:57 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2022-03-22 12:29:52 +0000

    x11-fonts/fontconfig: Use triggers to rebuild fc-cache
    
    Stop forcing the overwrite of the cache at each run it is not necessary
    most of the time.
    
    Reviewed by:    tcberner
    Differencial Revision:  https://reviews.freebsd.org/D34602
    
    While here rework USES=fonts to drop @fcfontsdir which is not nessary anymore
    and convert the @fontsdir into lua which make it way simpler to read
---
 Keywords/fcfontsdir.ucl                      | 27 ----------------------
 Keywords/fontsdir.ucl                        | 34 ++++++++++++----------------
 Mk/Uses/fonts.mk                             | 10 ++++----
 x11-fonts/font-misc-ethiopic/pkg-plist       |  2 +-
 x11-fonts/fontconfig/Makefile                |  7 +++---
 x11-fonts/fontconfig/files/fontconfig.ucl.in |  9 ++++++++
 x11-fonts/fontconfig/files/pkg-install.in    | 10 --------
 7 files changed, 32 insertions(+), 67 deletions(-)

diff --git a/Keywords/fcfontsdir.ucl b/Keywords/fcfontsdir.ucl
deleted file mode 100644
index 81f9d4e716ab..000000000000
--- a/Keywords/fcfontsdir.ucl
+++ /dev/null
@@ -1,27 +0,0 @@
-# MAINTAINER: x11@FreeBSD.org
-
-actions: [dir]
-post-install: <<EOD
-  case "%@" in
-  /*) fontsdir="%@" ;;
-  *) fontsdir="%D/%@" ;;
-  esac
-  fc-cache -fs ${fontsdir} 2>/dev/null || true
-  mkfontscale ${fontsdir} 2>/dev/null || true
-  mkfontdir ${fontsdir} 2>/dev/null || true
-EOD
-post-deinstall: <<EOD
-  case "%@" in
-  /*) fontsdir="%@" ;;
-  *) fontsdir="%D/%@" ;;
-  esac
-  fc-cache -fs ${fontsdir} 2>/dev/null || true
-  mkfontscale ${fontsdir} 2>/dev/null || true
-  if [ -e ${fontsdir}/fonts.scale -a "`stat -f '%%z' ${fontsdir}/fonts.scale 2>/dev/null`" = '2' ]; then
-    rm ${fontsdir}/fonts.scale
-  fi
-  mkfontdir ${fontsdir} 2>/dev/null || true
-  if [ -e ${fontsdir}/fonts.dir -a "`stat -f '%%z' ${fontsdir}/fonts.dir 2>/dev/null`" = '2' ]; then
-    rm ${fontsdir}/fonts.dir
-  fi
-EOD
diff --git a/Keywords/fontsdir.ucl b/Keywords/fontsdir.ucl
index 09c31572bf50..8c0701223e53 100644
--- a/Keywords/fontsdir.ucl
+++ b/Keywords/fontsdir.ucl
@@ -1,25 +1,19 @@
 # MAINTAINER: x11@FreeBSD.org
 
 actions: [dir]
-post-install: <<EOD
-  case "%@" in
-  /*) fontsdir="%@" ;;
-  *) fontsdir="%D/%@" ;;
-  esac
-  mkfontscale ${fontsdir} 2>/dev/null || true
-  mkfontdir ${fontsdir} 2>/dev/null || true
+post-install-lua: <<EOD
+  fontdir = pkg.prefixed_path("%@")
+  pkg.exec({"mkfontscale", fontdir})
+  pkg.exec({"mkfontdir", fontdir})
 EOD
-post-deinstall: <<EOD
-  case "%@" in
-  /*) fontsdir="%@" ;;
-  *) fontsdir="%D/%@" ;;
-  esac
-  mkfontscale ${fontsdir} 2>/dev/null || true
-  if [ -e ${fontsdir}/fonts.scale -a "`stat -f '%%z' ${fontsdir}/fonts.scale 2>/dev/null`" = '2' ]; then
-    rm ${fontsdir}/fonts.scale
-  fi
-  mkfontdir ${fontsdir} 2>/dev/null || true
-  if [ -e ${fontsdir}/fonts.dir -a "`stat -f '%%z' ${fontsdir}/fonts.dir 2>/dev/null`" = '2' ]; then
-    rm ${fontsdir}/fonts.dir
-  fi
+post-deinstall-lua: <<EOD
+  fontdir = pkg.prefixed_path("%@")
+  pkg.exec({"mkfontscale", fontdir})
+  pkg.exec({"mkfontdir", fontdir})
+  for _, v in pairs {"/fonts.scale", "/fonts.dir" } do
+    local st = pkg.stat(fontdir .. v)
+    if st and st.type == "reg" and st.size == 2 then
+      os.remove(fontdir .. v)
+    end
+  end
 EOD
diff --git a/Mk/Uses/fonts.mk b/Mk/Uses/fonts.mk
index acc751b5be2f..1547744747bc 100644
--- a/Mk/Uses/fonts.mk
+++ b/Mk/Uses/fonts.mk
@@ -41,23 +41,23 @@
 _INCLUDE_USES_FONTS_MK=	yes
 
 .if empty(fonts_ARGS)
-fonts_ARGS=	fcfontsdir
+fonts_ARGS=	fontsdir
 .endif
 
-.if !empty(fonts_ARGS:Nfc:Nfontsdir:Nfcfontsdir:Nnone)
+.if !empty(fonts_ARGS:Nfc:Nfontsdir:Nnone)
 IGNORE=	USES=fonts - invalid ARGS (${fonts_ARGS})
 .endif
 
-.if !empty(fonts_ARGS:Mfc) || !empty(fonts_ARGS:Mfcfontsdir)
+.if !empty(fonts_ARGS:Mfc) || !empty(fonts_ARGS:Mfontsdir)
 RUN_DEPENDS+=	fc-cache:x11-fonts/fontconfig
 .endif
-.if !empty(fonts_ARGS:Mfontsdir) || !empty(fonts_ARGS:Mfcfontsdir)
+.if !empty(fonts_ARGS:Mfontsdir)
 RUN_DEPENDS+=	mkfontscale:x11-fonts/mkfontscale
 .endif
 
 FONTNAME?=	${PORTNAME}
 FONTSDIR?=	${PREFIX}/share/fonts/${FONTNAME}
-.if !empty(fonts_ARGS:Nnone)
+.if !empty(fonts_ARGS:Mfontsdir)
 PLIST_FILES+=	"@${fonts_ARGS} ${FONTSDIR}"
 .endif
 .if defined(FONTPATHSPEC) && !empty(FONTPATHSPEC)
diff --git a/x11-fonts/font-misc-ethiopic/pkg-plist b/x11-fonts/font-misc-ethiopic/pkg-plist
index 94cfc23c0419..d90a9cea8586 100644
--- a/x11-fonts/font-misc-ethiopic/pkg-plist
+++ b/x11-fonts/font-misc-ethiopic/pkg-plist
@@ -1,4 +1,4 @@
-@fcfontsdir share/fonts/OTF
+@fontsdir share/fonts/OTF
 share/fonts/OTF/GohaTibebZemen.otf
 share/fonts/TTF/GohaTibebZemen.ttf
 @comment share/fonts/OTF/fonts.dir
diff --git a/x11-fonts/fontconfig/Makefile b/x11-fonts/fontconfig/Makefile
index 8977dc2dabd8..5672a999d63d 100644
--- a/x11-fonts/fontconfig/Makefile
+++ b/x11-fonts/fontconfig/Makefile
@@ -2,7 +2,7 @@
 
 PORTNAME=	fontconfig
 DISTVERSION=	2.13.94
-PORTREVISION=	1
+PORTREVISION=	2
 PORTEPOCH=	1
 CATEGORIES=	x11-fonts
 MASTER_SITES=	https://www.freedesktop.org/software/fontconfig/release/
@@ -16,7 +16,8 @@ LICENSE_FILE=	${WRKSRC}/COPYING
 LIB_DEPENDS=	libfreetype.so:print/freetype2 \
 		libexpat.so:textproc/expat2
 
-USES=		cpe gperf meson pkgconfig python:3.6+,build shebangfix tar:xz
+USES=		cpe gperf meson pkgconfig python:3.6+,build shebangfix tar:xz \
+		trigger
 CPE_VENDOR=	fontconfig_project
 USE_LDCONFIG=	yes
 
@@ -26,8 +27,6 @@ SHEBANG_FILES=	conf.d/link_confs.py \
 		fc-lang/fc-lang.py
 
 TEST_TARGET=	test
-SUB_FILES=	pkg-install
-SUB_LIST=	PREFIX=${PREFIX}
 
 # Custom configuration variables
 FCDEFAULTFONTS=	${PREFIX}/share/fonts
diff --git a/x11-fonts/fontconfig/files/fontconfig.ucl.in b/x11-fonts/fontconfig/files/fontconfig.ucl.in
new file mode 100644
index 000000000000..4f7c1909e63e
--- /dev/null
+++ b/x11-fonts/fontconfig/files/fontconfig.ucl.in
@@ -0,0 +1,9 @@
+path: [ "%%PREFIX%%/share/fonts", %%PREFIX%%/etc/fonts/conf.d ]
+trigger: {
+	type: lua
+	sandbox: false
+	script: <<EOS
+print("Running fc-cache to build fontconfig cache...")
+pkg.exec({"%%PREFIX%%/bin/fc-cache", "-s" })
+EOS
+}
diff --git a/x11-fonts/fontconfig/files/pkg-install.in b/x11-fonts/fontconfig/files/pkg-install.in
deleted file mode 100644
index 4dc92cbbbe33..000000000000
--- a/x11-fonts/fontconfig/files/pkg-install.in
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-PATH=/bin:/usr/bin:/sbin:/usr/sbin:%%PREFIX%%/bin
-export PATH
-
-if [ "$2" = "POST-INSTALL" ]; then
-    echo "Running fc-cache to build fontconfig cache..."
-    fc-cache -f -s -v
-    exit 0
-fi