diff options
author | mat <mat@FreeBSD.org> | 2018-01-28 16:25:06 +0800 |
---|---|---|
committer | mat <mat@FreeBSD.org> | 2018-01-28 16:25:06 +0800 |
commit | 8281476d1a2a36fe0243aab91b085856007099bf (patch) | |
tree | 77e8c30dd6dbf00e9f1db35a56396d450a032557 /Mk/Scripts | |
parent | 3b8429b68ffedbede7573da28b7c65230941dac5 (diff) | |
download | freebsd-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.sh | 111 | ||||
-rw-r--r-- | Mk/Scripts/desktop-categories.sh | 89 | ||||
-rw-r--r-- | Mk/Scripts/install-desktop-entries.sh | 66 |
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 |