aboutsummaryrefslogtreecommitdiffstats
path: root/Mk/Scripts
diff options
context:
space:
mode:
authormat <mat@FreeBSD.org>2018-01-28 16:25:06 +0800
committermat <mat@FreeBSD.org>2018-01-28 16:25:06 +0800
commit8281476d1a2a36fe0243aab91b085856007099bf (patch)
tree77e8c30dd6dbf00e9f1db35a56396d450a032557 /Mk/Scripts
parent3b8429b68ffedbede7573da28b7c65230941dac5 (diff)
downloadfreebsd-ports-gnome-8281476d1a2a36fe0243aab91b085856007099bf.tar.gz
freebsd-ports-gnome-8281476d1a2a36fe0243aab91b085856007099bf.tar.zst
freebsd-ports-gnome-8281476d1a2a36fe0243aab91b085856007099bf.zip
Extract desktop-categories, check-desktop-entries, and install-desktop-entries into scripts.
PR: 225301 Exp-run by: antoine Reviewed by: jilles, kevans Sponsored by: Absolight Differential Revision: https://reviews.freebsd.org/D11304
Diffstat (limited to 'Mk/Scripts')
-rw-r--r--Mk/Scripts/check-desktop-entries.sh111
-rw-r--r--Mk/Scripts/desktop-categories.sh89
-rw-r--r--Mk/Scripts/install-desktop-entries.sh66
3 files changed, 266 insertions, 0 deletions
diff --git a/Mk/Scripts/check-desktop-entries.sh b/Mk/Scripts/check-desktop-entries.sh
new file mode 100644
index 000000000000..30025f985916
--- /dev/null
+++ b/Mk/Scripts/check-desktop-entries.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+set -e
+
+. "${dp_SCRIPTSDIR}/functions.sh"
+
+validate_env dp_CURDIR dp_ECHO_CMD dp_ECHO_MSG dp_EXPR dp_GREP dp_PKGNAME \
+ dp_SED dp_TR dp_MAKE
+
+[ -n "${DEBUG_MK_SCRIPTS}" ] || [ -n "${DEBUG_MK_SCRIPTS_CHECK_DESKTOP_ENTRIES}" ] && set -x
+
+set -u
+
+# http://standards.freedesktop.org/menu-spec/menu-spec-latest.html
+DESKTOP_CATEGORIES_MAIN='AudioVideo Audio Video Development Education Game
+Graphics Network Office Science Settings System Utility'
+DESKTOP_CATEGORIES_ADDITIONAL='Building Debugger IDE GUIDesigner Profiling
+RevisionControl Translation Calendar ContactManagement Database Dictionary
+Chart Email Finance FlowChart PDA ProjectManagement Presentation Spreadsheet
+WordProcessor 2DGraphics VectorGraphics RasterGraphics 3DGraphics Scanning OCR
+Photography Publishing Viewer TextTools DesktopSettings HardwareSettings
+Printing PackageManager Dialup InstantMessaging Chat IRCClient Feed
+FileTransfer HamRadio News P2P RemoteAccess Telephony TelephonyTools
+VideoConference WebBrowser WebDevelopment Midi Mixer Sequencer Tuner TV
+AudioVideoEditing Player Recorder DiscBurning ActionGame AdventureGame
+ArcadeGame BoardGame BlocksGame CardGame KidsGame LogicGame RolePlaying Shooter
+Simulation SportsGame StrategyGame Art Construction Music Languages
+ArtificialIntelligence Astronomy Biology Chemistry ComputerScience
+DataVisualization Economy Electricity Geography Geology Geoscience History
+Humanities ImageProcessing Literature Maps Math NumericalAnalysis
+MedicalSoftware Physics Robotics Spirituality Sports ParallelComputing
+Amusement Archiving Compression Electronics Emulator Engineering FileTools
+FileManager TerminalEmulator Filesystem Monitor Security Accessibility
+Calculator Clock TextEditor Documentation Adult Core KDE GNOME MATE XFCE GTK Qt
+Motif Java ConsoleOnly'
+DESKTOP_CATEGORIES_RESERVED='Screensaver TrayIcon Applet Shell'
+
+VALID_DESKTOP_CATEGORIES="${dp_VALID_DESKTOP_CATEGORIES} ${DESKTOP_CATEGORIES_MAIN} ${DESKTOP_CATEGORIES_ADDITIONAL} ${DESKTOP_CATEGORIES_RESERVED}"
+
+if [ "$(${dp_EXPR} $# % 6)" -ne 0 ]; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: the DESKTOP_ENTRIES list must contain one or more groups of 6 elements"
+ exit 1
+fi
+
+num=0
+
+while [ $# -ge 6 ]; do
+ num=$(${dp_EXPR} ${num} + 1)
+ entry="#${num}"
+
+ Name="${1}"
+ #Comment="${2}" # Not Used
+ Icon="${3}"
+ Exec="${4}"
+ Categories="${5}"
+ StartupNotify="${6}"
+
+ shift 6
+
+ if [ -n "${Exec}" ]; then
+ entry="${entry} (${Exec})"
+ elif [ -n "${Name}" ]; then
+ entry="${entry} (${Name})"
+ fi
+
+ if [ -z "${Name}" ]; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: in desktop entry ${entry}: field 1 (Name) is empty"
+ exit 1
+ fi
+
+ if ${dp_EXPR} '(' "${Icon}" : '.*\.xpm$' ')' '|' '(' "${Icon}" : '.*\.png$' ')' '|' '(' "${Icon}" : '.*\.svg$' ')' > /dev/null; then
+ if ! echo "${Icon}" | ${dp_GREP} -qe '^/' ; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile warning: in desktop entry ${entry}: field 3 (Icon) should be either absolute path or icon name without extension if installed icons follow Icon Theme Specification"
+ fi
+ fi
+
+ if [ -z "${Exec}" ]; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: in desktop entry ${entry}: field 4 (Exec) is empty"
+ exit 1
+ fi
+
+ if [ -n "${Categories}" ]; then
+ for c in $(${dp_ECHO_CMD} "${Categories}" | ${dp_TR} ';' ' '); do
+ if ! ${dp_ECHO_CMD} "${VALID_DESKTOP_CATEGORIES}" | ${dp_GREP} -wq "${c}"; then
+ ${dp_ECHO_CMD} "${dp_PKGNAME}: Makefile warning: in desktop entry ${entry}: category ${c} is not a valid desktop category"
+ fi
+ done
+
+ if ! ${dp_ECHO_CMD} "${Categories}" | ${dp_GREP} -Eq "$(${dp_ECHO_CMD} "${DESKTOP_CATEGORIES_MAIN}" | ${dp_SED} -E 's,[[:blank:]]+,\|,g')"; then
+ ${dp_ECHO_CMD} "${dp_PKGNAME}: Makefile warning: in desktop entry ${entry}: field 5 (Categories) must contain at least one main desktop category (make -VDESKTOP_CATEGORIES_MAIN)"
+ fi
+
+ if ! ${dp_EXPR} "${Categories}" : '.*;$' > /dev/null; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: in desktop entry ${entry}: field 5 (Categories) does not end with a semicolon"
+ exit 1
+ fi
+ else
+ if [ -z "$(cd "${dp_CURDIR}" && ${dp_MAKE} desktop-categories)" ]; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: in desktop entry ${entry}: field 5 (Categories) is empty and could not be deduced from the CATEGORIES variable"
+ exit 1
+ fi
+ fi
+
+ if [ "${StartupNotify}" != "true" ] && [ "${StartupNotify}" != "false" ] && [ -n "${StartupNotify}" ]; then
+ ${dp_ECHO_MSG} "${dp_PKGNAME}: Makefile error: in desktop entry ${entry}: field 6 (StartupNotify) is not \"true\", \"false\" or \"\"(empty)"
+ exit 1
+ fi
+done
diff --git a/Mk/Scripts/desktop-categories.sh b/Mk/Scripts/desktop-categories.sh
new file mode 100644
index 000000000000..7d5414b7ed12
--- /dev/null
+++ b/Mk/Scripts/desktop-categories.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+set -e
+
+. "${dp_SCRIPTSDIR}/functions.sh"
+
+validate_env dp_CATEGORIES dp_SORT dp_TR dp_ECHO_CMD
+
+[ -n "${DEBUG_MK_SCRIPTS}" ] || [ -n "${DEBUG_MK_SCRIPTS_DESKTOP_CATEGORIES}" ] && set -x
+
+set -u
+
+categories=""
+for native_category in ${dp_CATEGORIES}; do
+ c=""
+ case ${native_category} in
+ accessibility) c="Utility Accessibility" ;;
+ archivers) c="Utility Archiving" ;;
+ astro) c="Education Science Astronomy" ;;
+ audio) c="AudioVideo Audio" ;;
+ benchmarks) c="System" ;;
+ biology) c="Education Science Biology" ;;
+ cad) c="Graphics Engineering" ;;
+ comms) c="Utility" ;;
+ converters) c="Utility" ;;
+ databases) c="Office Database" ;;
+ deskutils) c="Utility" ;;
+ devel) c="Development" ;;
+ dns) c="Network" ;;
+ elisp) c="Development" ;;
+ editors) c="Utility" ;;
+ emulators) c="System Emulator" ;;
+ finance) c="Office Finance" ;;
+ ftp) c="Network FileTransfer" ;;
+ games) c="Game" ;;
+ geography) c="Education Science Geography" ;;
+ gnome) c="GNOME GTK" ;;
+ graphics) c="Graphics" ;;
+ hamradio) c="HamRadio" ;;
+ haskell) c="Development" ;;
+ irc) c="Network IRCClient" ;;
+ java) c="Development Java" ;;
+ kde) c="KDE Qt" ;;
+ lang) c="Development" ;;
+ lisp) c="Development" ;;
+ mail) c="Office Email" ;;
+ mate) c="MATE GTK" ;;
+ math) c="Education Science Math" ;;
+ mbone) c="Network AudioVideo" ;;
+ multimedia) c="AudioVideo" ;;
+ net) c="Network" ;;
+ net-im) c="Network InstantMessaging" ;;
+ net-mgmt) c="Network" ;;
+ net-p2p) c="Network P2P" ;;
+ news) c="Network News" ;;
+ palm) c="Office PDA" ;;
+ parallel) c="ParallelComputing" ;;
+ pear) c="Development WebDevelopment" ;;
+ perl5) c="Development" ;;
+ python) c="Development" ;;
+ ruby) c="Development" ;;
+ rubygems) c="Development" ;;
+ scheme) c="Development" ;;
+ science) c="Science Education" ;;
+ security) c="System Security" ;;
+ shells) c="System Shell" ;;
+ sysutils) c="System" ;;
+ tcl*|tk*) c="Development" ;;
+ textproc) c="Utility TextTools" ;;
+ www) c="Network" ;;
+ x11-clocks) c="Utility Clock" ;;
+ x11-fm) c="System FileManager" ;;
+ xfce) c="GTK XFCE" ;;
+ zope) c="Development WebDevelopment" ;;
+ esac
+ if [ -n "${c}" ]; then
+ categories="${categories} ${c}"
+ fi
+done
+
+if [ -n "${categories}" ]; then
+ for c in ${categories}; do
+ ${dp_ECHO_CMD} "${c}"
+ done | ${dp_SORT} -u | ${dp_TR} '\n' ';'
+ ${dp_ECHO_CMD}
+fi
diff --git a/Mk/Scripts/install-desktop-entries.sh b/Mk/Scripts/install-desktop-entries.sh
new file mode 100644
index 000000000000..5acb4db84799
--- /dev/null
+++ b/Mk/Scripts/install-desktop-entries.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+# $FreeBSD$
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+set -e
+
+. "${dp_SCRIPTSDIR}/functions.sh"
+
+validate_env dp_SED dp_ECHO_CMD dp_STAGEDIR dp_DESKTOPDIR
+
+[ -n "${DEBUG_MK_SCRIPTS}" ] || [ -n "${DEBUG_MK_SCRIPTS_INSTALL_DESKTOP_ENTRIES}" ] && set -x
+
+set -u
+
+while [ $# -ge 6 ]; do
+
+ Name="${1}"
+ Comment="${2}"
+ Icon="${3}"
+ Exec="${4}"
+ Categories="${5}"
+ StartupNotify="${6}"
+
+ shift 6
+
+ filename="$(${dp_ECHO_CMD} "${Exec}" | ${dp_SED} -e 's,^/,,g;s,[/ ],_,g;s,[^_[:alnum:]],,g').desktop"
+
+ pathname="${dp_STAGEDIR}${dp_DESKTOPDIR}/${filename}"
+
+ ${dp_ECHO_CMD} "${dp_DESKTOPDIR}/${filename}" >> "${dp_TMPPLIST}"
+
+ {
+ ${dp_ECHO_CMD} "[Desktop Entry]"
+ ${dp_ECHO_CMD} "Type=Application"
+ ${dp_ECHO_CMD} "Version=1.0"
+ ${dp_ECHO_CMD} "Name=${Name}"
+ } > "${pathname}"
+
+ if [ -n "${Comment}" ]; then
+ comment="${Comment}"
+ else
+ comment="$(cd "${dp_CURDIR}" && ${dp_MAKE} -VCOMMENT)"
+ fi
+
+ ${dp_ECHO_CMD} "GenericName=${comment}" >> "${pathname}"
+ ${dp_ECHO_CMD} "Comment=${comment}" >> "${pathname}"
+
+ if [ -n "${Icon}" ]; then
+ ${dp_ECHO_CMD} "Icon=${Icon}" >> "${pathname}"
+ fi
+
+ ${dp_ECHO_CMD} "Exec=${Exec}" >> "${pathname}"
+
+ if [ -n "${Categories}" ]; then
+ categories="${Categories}"
+ else
+ categories="$(cd "${dp_CURDIR}" && ${dp_MAKE} desktop-categories)"
+ fi
+
+ ${dp_ECHO_CMD} "Categories=${categories}" >> "${pathname}"
+
+ if [ -n "${StartupNotify}" ]; then
+ ${dp_ECHO_CMD} "StartupNotify=${StartupNotify}" >> "${pathname}"
+ fi
+done