From e2f2e747972c5505d2b74d95fbce7901b9831b21 Mon Sep 17 00:00:00 2001 From: Eitan Adler Date: Mon, 11 Nov 2013 21:41:26 +0000 Subject: [PATCH] Copy npapi.mk from the mplayer port and USEify it. Ports that currently include www/linux-mplayer-plugin/Makefile.npapi should be switched to USES once this is stagified. Approved by: bdrewery --- Mk/Uses/npapi.mk | 209 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 Mk/Uses/npapi.mk diff --git a/Mk/Uses/npapi.mk b/Mk/Uses/npapi.mk new file mode 100644 index 000000000000..614bec250661 --- /dev/null +++ b/Mk/Uses/npapi.mk @@ -0,0 +1,209 @@ +# $FreeBSD$ +# +# MAINTAINER: ports@FreeBSD.org +# +# Feature: npapi +# Usage: USES=npapi +# Valid ARGS: none +# +# Additional variables that affect npapi behaviour: +# NPAPI_ID - Extension id, might be in {12345-...} or dev@org format +# NPAPI_FILES - List of files in npapi archive. This is used to produce +# PLIST_FILES. NPAPI_FILES can be generated by npapi-gen, but be +# sure to put chrome.manifest in ${FILESDIR} before that if you +# need it. +# NPAPI_DIRS - List of directories in npapi archive. This is used to produce +# PLIST_DIRS. +# NPAPI_LIBDIR - Name of the directory to install plugins in. +# Default: ${PREFIX}/lib/npapi +# NPAPI_NPAPIDIR +# - Name of the directory to install plugin's files in. +# Default: ${NPAPI_LIBDIR}/${NPAPI_ID} +# USE_NPAPI - If set, the port installs one or more npapi plugins. +# If this is set to a list of apps (wildcards possible) the +# plugins will be installed for them only. "linux" and "native" +# keywords can be used to support all linux-compat and native +# browsers, correspondingly. "embed" keyword prevents the +# do-install target being set to a default. +# WITH_NPAPI - A user-tunable variable, determines which apps should +# plugin be made available for. Can be set to a list of +# apps, same as USE_NPAPI, and/or to "ext:app[,app,app,...]" +# tuples. ext should be a portname. If ext starts and ends with +# a slash (`/'), it is treated as an extended regular expression +# (see re_format(7)). Right of the colon should be a list of +# apps in the same format as USE_NPAPI, but comma- instead of +# whitespace-delimited. If no matching tuples for an plugin are +# found, WITH_NPAPI is scanned for non tuple-records which are +# then treated as a USE_NPAPI list. If several tuples match, the +# last non-regexp one takes precedence, then the last regexp +# one. +# +# Npapi's are installed into ${LOCALBASE}/lib/npapi/${NPAPI_ID} by default and +# links are made to all apps which have the engine (firefox, thunderbird, flock, +# netscape messenger and navigator at the moment). relink and relink-all targets +# can be invoked to refarm the links of a single plugins or all installed +# plugins accordingly. +# +# npapi ports do not depend on their master applications. You can install an +# plugin before the app and run relink when the app is present. +# +.if !defined(_INCLUDE_USES_NPAPI_MK) +_INCLUDE_USES_NPAPI_MK= yes + +.if defined(npapi) +IGNORE= Incorrect 'USES+= npapi:${npapi_ARGS}' npapi takes no arguments +.endif + +NPAPI_ID?= ${PKGBASE} +NPAPI_DISTNAME?= ${PORTNAME} +NPAPI_WRKSRC?= ${WRKSRC} +NPAPI_PKGINSTALL?= ${WRKDIR}/npapi-pkg-install +NPAPI_PKGDEINSTALL?= ${WRKDIR}/npapi-pkg-deinstall +PKGINSTALL?= ${NPAPI_PKGINSTALL} +PKGDEINSTALL?= ${NPAPI_PKGDEINSTALL} + +NPAPI_APPS_ALL_WC= *mozilla* *firefox* *flock* *seamonkey* *opera* \ + *netscape-messenger* *netscape-navigator* +NPAPI_APPS_ALL_WC_LINUX= ${NPAPI_APPS_ALL_WC:S/^*/linux-/} +NPAPI_APPS_ALL_WC_NATIVE= ${NPAPI_APPS_ALL_WC:S/^*//} +NPAPI_APPS_ALL= firefox firefox-devel linux-firefox linux-firefox-devel \ + flock flock-devel linux-flock linux-flock-devel \ + mozilla mozilla-devel linux-mozilla firefox3 firefox35 \ + linux-netscape-messenger linux-netscape-navigator \ + nvu linux-nvu \ + opera opera-devel linux-opera linux-opera-devel \ + seamonkey seamonkey-devel linux-seamonkey linux-seamonkey-devel \ + sunbird sunbird-devel linux-sunbird linux-sunbird-devel + +# === Let's process WITH_NPAPI into WITH_NPAPI_APPS +WITH_NPAPI_TUPLES= ${WITH_NPAPI:M*?\:?*} +WITH_NPAPI_NTUPLES= ${WITH_NPAPI:N*\:*} +WITH_NPAPI_TUPLES_RX= ${WITH_NPAPI_TUPLES:M/*?*/\:?*} +WITH_NPAPI_TUPLES_WC= ${WITH_NPAPI_TUPLES:N/*?*/\:?*} +WITH_NPAPI_MATCH?= ${PORTNAME} +WITH_NPAPI_MATCHSTRING?= _=~match~=_ + +.for tuple_rx in ${WITH_NPAPI_TUPLES_RX} +_rx= ${tuple_rx:C!/(.*)/\:.*!\1!} +_apps= ${tuple_rx:C!/.*/\:(.*)!\1!} +_testrx=${WITH_NPAPI_MATCH:C!.*${_rx}.*!${WITH_NPAPI_MATCHSTRING}!} +.if ${_testrx} == ${WITH_NPAPI_MATCHSTRING} +WITH_NPAPI_APPS:= ${_apps:S/,/ /g} +.endif +.endfor + +.for tuple_wc in ${WITH_NPAPI_TUPLES_WC} +_wc= ${tuple_wc:C!(.*)\:.*!\1!} +_apps= ${tuple_wc:C!.*\:(.*)!\1!} +.if ${_wc} == ${WITH_NPAPI_MATCH} +WITH_NPAPI_APPS:= ${_apps:S/,/ /g} +.endif +.endfor + +.if ${WITH_NPAPI_NTUPLES} +WITH_NPAPI_APPS?= ${WITH_NPAPI_NTUPLES} +.endif +# === WITH_NPAPI has been processed + +.ifdef WITH_NPAPI_APPS +USE_NPAPI= ${WITH_NPAPI_APPS} +.endif + +.if !defined(USE_NPAPI) || ${USE_NPAPI:U} == "YES" || ${USE_NPAPI} == "*" +USE_NPAPI= ${NPAPI_APPS_ALL_WC} +.endif + +.for _TEMP_APP__ in ${NPAPI_APPS_ALL} +_TEMP_APP_=${_TEMP_APP__} +_TEMP_FLAG_=0 +. for _TEMP_USE__ in ${USE_NPAPI} +_TEMP_USE_=${_TEMP_USE__} +. if !${_TEMP_APP_:C!${_TEMP_USE_:S/*/.*/:S/?/./}!!} || \ + ( ${_TEMP_APP_:Mlinux-*} && ${_TEMP_USE_:Mlinux} ) || \ + ( ${_TEMP_APP_:Nlinux-*} && ${_TEMP_USE_:Mnative} ) +_TEMP_FLAG_=1 +. endif +. endfor +. if ${_TEMP_FLAG_} +USE_NPAPI_EXP+= ${_TEMP_APP__} +. endif +.endfor + +NPAPI_APPS?= ${USE_NPAPI_EXP:S.^.${LOCALBASE}/lib/.:S.$./plugins.:N*opera*} \ + ${USE_NPAPI_EXP:S.^.${LOCALBASE}/share/.:S.$./plugins.:M*/opera*} +NPAPI_SLDIRS_ALL= ${NPAPI_APPS_ALL:S.^.${NPAPI_SLDIR}/.} +NPAPI_SLDIRS= ${USE_NPAPI_EXP:S.^.${NPAPI_SLDIR}/.} +NPAPI_LINKFARMS= ${NPAPI_APPS} ${NPAPI_SLDIRS} + +NPAPI_LIBDIR?= ${PREFIX}/lib/npapi +NPAPI_SLDIR?= ${NPAPI_LIBDIR}/symlinks +.ifndef NPAPI_DISTNAMES +NPAPI_NPAPIDIR?= ${NPAPI_LIBDIR}/${NPAPI_ID} +.endif +NPAPI_DIRS_TRY= ${NPAPI_SLDIRS_ALL:S,^${PREFIX}/,,} \ + ${NPAPI_SLDIR:S,^${PREFIX}/,,} \ + ${NPAPI_LIBDIR:S,^${PREFIX}/,,} + +PLIST_SUB+= NPAPI_LIBDIR="${NPAPI_LIBDIR:S,^${PREFIX}/,,}" \ + NPAPI_NPAPIDIR="${NPAPI_NPAPIDIR:S,^${PREFIX}/,,}" + +_TD= ${NPAPI_NPAPIDIR:S,^${PREFIX}/,,} +_TD_FULL= ${NPAPI_NPAPIDIR} +_A= >> ${TMPPLIST} +_PI= ${NPAPI_PKGINSTALL} +_PD= ${NPAPI_PKGDEINSTALL} +_Q= 2>/dev/null || true +PLIST_FILES+= ${NPAPI_FILES:S!^!${_TD}/!} +PLIST_DIRS+= ${NPAPI_DIRS:S!^!${_TD}/!} ${_TD} + +.for dist in ${NPAPI_DISTNAMES} +NPAPI_NPAPIDIR_${dist}= ${NPAPI_LIBDIR}/${NPAPI_ID_${dist}} +_TD_${dist}= ${NPAPI_NPAPIDIR_${dist}:S,^${PREFIX}/,,} +PLIST_FILES+= ${NPAPI_FILES_${dist}:S!^!${_TD_${dist}}/!} +PLIST_DIRS+= ${NPAPI_DIRS_${dist}:S!^!${_TD_${dist}}/!} ${_TD_${dist}} +.endfor + +npapi-do-install: + ${INSTALL} -d ${_TD_FULL} ${STAGEDIR}${NPAPI_SLDIRS_ALL} + ${CP} -p ${NPAPI_FILES:S,^,${NPAPI_WRKSRC}/,} ${_TD_FULL}/ + ${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${_TD_FULL}/ + ${CHMOD} -R a+rX,go-w ${_TD_FULL}/ + for _dir in ${NPAPI_LINKFARMS} ; { ${LN} -sf ${_TD_FULL}/* $$_dir ${_Q} ; } + ${ECHO_CMD} '${INSTALL} -d ${NPAPI_SLDIRS_ALL}' > ${_PI} + ${ECHO_CMD} 'for _dir in ${NPAPI_LINKFARMS} ; \ + { ${LN} -sf ${NPAPI_FILES:S,^,${_TD_FULL}/,} $$_dir/ ${_Q}; }' >> ${_PI} + ${ECHO_CMD} 'for _dir in ${NPAPI_LINKFARMS} ; \ + { ${RM} -f ${NPAPI_FILES:S,^,\$_dir/,} ; }' > ${_PD} + ${ECHO_CMD} 'rmdir ${NPAPI_DIRS_TRY:S,^,${PREFIX}/,} ${_Q}' >> ${_PD} +.if ${PKGINSTALL} != ${NPAPI_PKGINSTALL} + ${CAT} ${NPAPI_PKGINSTALL} >> ${PKGINSTALL} +.endif +.if ${PKGDEINSTALL} != ${NPAPI_PKGDEINSTALL} + ${CAT} ${NPAPI_PKGDEINSTALL} >> ${PKGDEINSTALL} +.endif + +.if !target(do-install) && !${USE_NPAPI:Membed} +do-install: npapi-do-install +.endif + +.if !target(relink) +relink: + @-for _app in ${NPAPI_APPS} ; { ${LN} -sf ${_TD_FULL}/* $$_app ${_Q} ; } +.endif + +# Maintainer section +npapi-gen: extract + @${ECHO_CMD} -n 'NPAPI_FILES=' + @cd ${NPAPI_WRKSRC} && ${FIND} -s . -not -type d | cut -f2- -d/ | ${TR} '\n' ' ' + @${ECHO_CMD} + @${ECHO_CMD} -n 'NPAPI_DIRS=' + @cd ${NPAPI_WRKSRC} && ${FIND} -ds . -not -name . -type d | cut -f2- -d/ | ${TR} '\n' ' ' + @${ECHO_CMD} + +npapi-plist: extract + @${FIND} -s ${NPAPI_WRKSRC} -not -type d | \ + ${SED} -e "s,^${NPAPI_WRKSRC},%%NPAPI_NPAPIDIR%%," > ${PLIST} + @${FIND} -ds ${NPAPI_WRKSRC} -type d -not -name ${DISTNAME} | \ + ${SED} -e "s,^${NPAPI_WRKSRC},@dirrm %%NPAPI_NPAPIDIR%%," >> ${PLIST} + +.endif