Index: bsd.port.mk =================================================================== RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v retrieving revision 1.687 diff -u -r1.687 bsd.port.mk --- bsd.port.mk 3 Jul 2011 15:51:18 -0000 1.687 +++ bsd.port.mk 15 Jul 2011 00:46:44 -0000 @@ -1046,7 +1046,20 @@ # DESKTOP_ENTRIES # - List of desktop entry files to generate and install in # ${DESKTOPDIR}. The format is +# # "Name" "Comment" "Icon" "Exec" "Categories" StartupNotify +# +# Notes: +# * Exec will also be used to name the .desktop file. +# If you need to use arguments in your .desktop file, then +# use the DESKTOP_ENTRIESv2 format. +# - See DESKTOP_ENTRIESv2 for additional info. +# DESKTOP_ENTRIESv2 +# - List of desktop entry files to generate and install in +# ${DESKTOPDIR}. The format is +# +# "Filename" "Name" "Comment" "Icon" "Exec" "Categories" StartupNotify +# # Rules: # * Only add desktop entries for applications which do not # require a terminal (ie. X applications). @@ -1064,9 +1077,10 @@ # If the deduction fails, you will have to set Categories # manually. You should check the generated value using # "make desktop-categories", and override it if necessary. -# * Exec will also be used to name the .desktop file. +# * Exec can also include arguments (DESKTOP_ENTRIESv2 Only). # * The files will be automatically added to ${PLIST}. # Example: +# "wininfo" \ # "X Window Information" \ # "Get information about X windows" \ # "wininfo.png" \ @@ -6368,7 +6382,61 @@ GNOME GTK Qt Motif Java ConsoleOnly AdvancedSettings check-desktop-entries: -.if defined(DESKTOP_ENTRIES) +.if defined(DESKTOP_ENTRIESv2) + @set -- ${DESKTOP_ENTRIESv2} XXX; \ + if [ `${EXPR} \( $$# - 1 \) % 7` -ne 0 ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: the DESKTOP_ENTRIES list must contain one or more groups of 7 elements"; \ + exit 1; \ + fi; \ + num=1; \ + while [ $$# -gt 7 ]; do \ + entry="#$$num"; \ + if [ -n "$$5" ]; then \ + entry="$$entry ($$4)"; \ + elif [ -n "$$2" ]; then \ + entry="$$entry ($$2)"; \ + fi; \ + if [ -z "$$1" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 1 (Filename) is empty"; \ + exit 1; \ + fi + if [ -z "$$2" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 2 (Name) is empty"; \ + exit 1; \ + fi; \ + if [ -z "$$5" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 5 (Exec) is empty"; \ + exit 1; \ + fi; \ + if [ -n "$$6" ]; then \ + for c in `${ECHO_CMD} "$$6" | ${TR} ';' ' '`; do \ + if ! ${ECHO_CMD} ${VALID_DESKTOP_CATEGORIES} | ${GREP} -wq $$c; then \ + ${ECHO_CMD} "${PKGNAME}: Makefile error: in desktop entry $$entry: category $$c is not a valid desktop category"; \ + exit 1; \ + fi; \ + done; \ + if ! ${ECHO_CMD} "$$6" | ${GREP} -q ';$$'; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 6 (Categories) does not end with a semicolon"; \ + exit 1; \ + fi; \ + else \ + if [ -z "`cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} desktop-categories`" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 6 (Categories) is empty and could not be deduced from the CATEGORIES variable"; \ + exit 1; \ + fi; \ + fi; \ + if [ -z "$$7" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 7 (StartupNotify) is empty"; \ + exit 1; \ + fi; \ + if [ "x$$7" != "xtrue" ] && [ "x$$7" != "xfalse" ]; then \ + ${ECHO_MSG} "${PKGNAME}: Makefile error: in desktop entry $$entry: field 7 (StartupNotify) is not \"true\" or \"false\""; \ + exit 1; \ + fi; \ + shift 7; \ + num=`${EXPR} $$num + 1`; \ + done +.elif defined(DESKTOP_ENTRIES) @set -- ${DESKTOP_ENTRIES} XXX; \ if [ `${EXPR} \( $$# - 1 \) % 6` -ne 0 ]; then \ ${ECHO_MSG} "${PKGNAME}: Makefile error: the DESKTOP_ENTRIES list must contain one or more groups of 6 elements"; \ @@ -6424,7 +6492,42 @@ .if !target(install-desktop-entries) install-desktop-entries: -.if defined(DESKTOP_ENTRIES) +.if defined(DESKTOP_ENTRIESv2) + @(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \ + (${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1) + @set -- ${DESKTOP_ENTRIESv2} XXX; \ + if [ -z "${_DESKTOPDIR_REL}" ]; then \ + ${ECHO_CMD} "@cwd ${DESKTOPDIR}" >> ${TMPPLIST}; \ + fi; \ + while [ $$# -gt 7 ]; do \ + filename="`${ECHO_CMD} "$$1" | ${SED} -E 's/[[:space:]]+.*//'`.desktop"; \ + pathname="${DESKTOPDIR}/$$filename"; \ + categories="$$6"; \ + if [ -z "$$categories" ]; then \ + categories="`cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} desktop-categories`"; \ + fi; \ + ${ECHO_CMD} "${_DESKTOPDIR_REL}$$filename" >> ${TMPPLIST}; \ + ${ECHO_CMD} "[Desktop Entry]" > $$pathname; \ + ${ECHO_CMD} "Type=Application" >> $$pathname; \ + ${ECHO_CMD} "Version=0.9.4" >> $$pathname; \ + ${ECHO_CMD} "Encoding=UTF-8" >> $$pathname; \ + ${ECHO_CMD} "Name=$$2" >> $$pathname; \ + if [ -n "$$3" ]; then \ + ${ECHO_CMD} "Comment=$$3" >> $$pathname; \ + fi; \ + if [ -n "$$4" ]; then \ + ${ECHO_CMD} "Icon=$$4" >> $$pathname; \ + fi; \ + ${ECHO_CMD} "Exec=$$5" >> $$pathname; \ + ${ECHO_CMD} "Categories=$$categories" >> $$pathname; \ + ${ECHO_CMD} "StartupNotify=$$7" >> $$pathname; \ + shift 7; \ + done; \ + ${ECHO_CMD} "@unexec rmdir ${DESKTOPDIR} 2>/dev/null || true" >> ${TMPPLIST}; \ + if [ -z "${_DESKTOPDIR_REL}" ]; then \ + ${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \ + fi +.elif defined(DESKTOP_ENTRIES) @(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \ (${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1) @set -- ${DESKTOP_ENTRIES} XXX; \