summaryrefslogtreecommitdiff
path: root/editors/emacs
diff options
context:
space:
mode:
authoruebayasi <uebayasi>2008-10-11 09:31:54 +0000
committeruebayasi <uebayasi>2008-10-11 09:31:54 +0000
commitb96889b1354fc2db619e890c37d47726128607e1 (patch)
tree28f89f081daec07805c1f982f0bc63a420c005ba /editors/emacs
parent82bb21f245fe7a2dee3f10a3aec11ffd03c27e07 (diff)
downloadpkgsrc-b96889b1354fc2db619e890c37d47726128607e1.tar.gz
Move mk/emacs.mk to editors/emacs/modules.mk.
Don't call pkg_info to get the installed Emacs version; always use the version matching EMACS_TYPE set by users. Be DEPENDS to it. This should address pkg/37146 by Aleksey Cheusov. While here convert some emacs lisp packages to user-destdir.
Diffstat (limited to 'editors/emacs')
-rw-r--r--editors/emacs/buildlink3.mk8
-rw-r--r--editors/emacs/modules.mk317
-rw-r--r--editors/emacs/version.mk9
3 files changed, 330 insertions, 4 deletions
diff --git a/editors/emacs/buildlink3.mk b/editors/emacs/buildlink3.mk
index 231eceaf891..02b5e681ab4 100644
--- a/editors/emacs/buildlink3.mk
+++ b/editors/emacs/buildlink3.mk
@@ -1,4 +1,4 @@
-# $NetBSD: buildlink3.mk,v 1.1 2007/10/29 12:40:03 uebayasi Exp $
+# $NetBSD: buildlink3.mk,v 1.2 2008/10/11 09:31:56 uebayasi Exp $
#
BUILDLINK_DEPTH:= ${BUILDLINK_DEPTH}+
@@ -13,9 +13,9 @@ BUILDLINK_PACKAGES+= emacs
BUILDLINK_ORDER:= ${BUILDLINK_ORDER} ${BUILDLINK_DEPTH}emacs
.if ${EMACS_BUILDLINK3_MK} == "+"
-.include "../../mk/emacs.mk"
-BUILDLINK_API_DEPENDS.emacs+= ${_EMACS_REQD.emacs22}
-BUILDLINK_PKGSRCDIR.emacs?= ${_EMACS_DEP.emacs22}
+.include "../../editors/emacs/modules.mk"
+BUILDLINK_API_DEPENDS.emacs+= ${_EMACS_REQD}
+BUILDLINK_PKGSRCDIR.emacs?= ${_EMACS_PKGDIR}
.endif # EMACS_BUILDLINK3_MK
BUILDLINK_CONTENTS_FILTER.emacs= ${EGREP} '.*\.el$$|.*\.elc$$'
diff --git a/editors/emacs/modules.mk b/editors/emacs/modules.mk
new file mode 100644
index 00000000000..ef8acdebe5c
--- /dev/null
+++ b/editors/emacs/modules.mk
@@ -0,0 +1,317 @@
+# $NetBSD: modules.mk,v 1.1 2008/10/11 09:31:56 uebayasi Exp $
+#
+# This Makefile fragment handles Emacs Lisp Packages (== ELPs).
+#
+# Note to users:
+#
+# * Users choose one favourite Emacs version (default GNU Emacs 21).
+#
+# * Emacs Lisp files are installed...
+# GNU emacs
+# -> ${PREFIX}/share/emacs/site-lisp/foo/...
+# XEmacs
+# ->${PREFIX}/lib/xemacs/site-packages/lisp/foo/...
+#
+# * You can't install an ELP for both Emacs and XEmacs
+# simultaneously.
+#
+# * XEmacs package's names are prefix'ed by "xemacs-".
+#
+# Note to package developers:
+#
+# * XEmacs package's names are prefix'ed by "xemacs-".
+#
+# This is to make sure ELPs for XEmacs keep their own dependency
+# tree (for example, if an ELP "bar" depends on another ELP "foo",
+# "xemacs-bar" depends on "xemacs-foo". "foo" (installed for GNU
+# Emacs) is useless for "xemacs-bar" in this case.).
+#
+# Make sure too that "foo" and "xemacs-foo" conflict each other,
+# since they can share some files. (Making all ELPs separately
+# installable for GNU Emacs/XEmacs might be possible.)
+#
+# * Assume each ELP supports all Emacs versions by default. If the
+# ELP supports only certain Emacs versions, define EMACS_VERSIONS
+# _ACCEPTED explicitly before including mk/emacs.mk.
+#
+# Variables for users:
+#
+# EMACS_TYPE
+# Description:
+# The user's favourite Emacs version.
+# Possible values:
+# emacs21, emacs21nox, emacs22, emacs22nox, emacs20, xemacs215, xemacs215nox, xemacs214, xemacs214nox
+# Default value:
+# emacs22
+#
+# Variables ELPs can provide:
+#
+# EMACS_MODULES
+# Description:
+# List of Emacs LISP modules that the current ELP
+# needs at run-time.
+# Possible values:
+# base, leim
+# Default value:
+# <undefined>
+#
+# EMACS_VERSIONS_ACCEPTED
+# Description:
+# Versions the ELP accepts (supports).
+# Possible values:
+# emacs21, emacs21nox, emacs22, emacs22nox, emacs20, xemacs215, xemacs215nox, xemacs214, xemacs214nox
+# Default value:
+# emacs21, emacs21nox, emacs22, emacs22nox, emacs20, xemacs215, xemacs215nox, xemacs214, xemacs214nox
+#
+# Variables provided for ELPs:
+#
+# EMACS_BIN
+# Description:
+# Path to Emacs executable.
+# Possible values:
+# ${PREFIX}/bin/emacs, ${PREFIX}/bin/xemacs
+#
+# EMACS_ETCPREFIX
+# Description:
+# Path to the directory misc. files should be
+# installed into. ELPs should append a short
+# name as a subdirectory.
+# Possible values:
+# ${PREFIX}/share
+# ${PREFIX}/lib/xemacs/site-packages/etc
+#
+# EMACS_FLAVOR
+# Description:
+# GNU Emacs (emacs) or XEmacs (xemacs).
+# Possible values:
+# emacs, xemacs
+#
+# EMACS_INFOPREFIX
+# Description:
+# Path to the directory Info files should be
+# installed into. Unlike EMACS_ETCPREFIX or
+# EMACS_LISPPREFIX, subdirectory is not needed.
+# Possible values:
+# ${PREFIX}/${PKGINFODIR}
+# ${PREFIX}/lib/xemacs/site-packages/info
+#
+# EMACS_LISPPREFIX
+# Description:
+# installed into. ELPs should append a short name
+# as a subdirectory.
+# Possible values:
+# ${PREFIX}/share/emacs/site-lisp
+# ${PREFIX}/lib/xemacs/site-packages/lisp
+#
+# EMACS_PKGNAME_PREFIX
+# Description:
+# The prefix of PKGNAME and DEPENDS lines. All ELPs
+# must honour this!
+# Possible values:
+# "", "xemacs-"
+#
+# EMACS_VERSION_MAJOR
+# Description:
+# Emacs major version.
+# Possible values:
+# 20, 21, 22, <integers more than that in the future>
+#
+# EMACS_VERSION_MINOR
+# Description:
+# Emacs minor version.
+# Possible values:
+# <integer>
+#
+# Variables provided in ELPs' PLIST:
+#
+# EMACS_ETCPREFIX
+# Description:
+# Same as the one in Makefile, except that
+# ${PREFIX} is omitted in PLIST.
+# Possible values:
+# share
+# lib/xemacs/site-packages/etc
+#
+# EMACS_INFOPREFIX
+# Description:
+# Same as the one in Makefile, except that
+# ${PREFIX} is omitted in PLIST.
+# Possible values:
+# ${PKGINFODIR}
+# lib/xemacs/site-packages/info
+#
+# EMACS_LISPPREFIX
+# Description:
+# Same as the one in Makefile, except that
+# ${PREFIX} is omitted in PLIST.
+# Possible values:
+# share/emacs/site-lisp
+# lib/xemacs/site-packages/lisp
+#
+# EMACS_VERSION
+# Description:
+# XXX
+# Possible values:
+# XXX
+#
+# FOR_{emacs21,emacs21nox,emacs22,emacs22nox,emacs20,xemacs215,xemacs215nox,xemacs214,xemacs214nox}
+# FOR_{emacs,xemacs}
+# FOR_{emacs_x,emacs_nox}
+# NOTFOR_{emacs21,emacs21nox,emacs22,emacs22nox,emacs20,xemacs215,xemacs215nox,xemacs214,xemacs214nox}
+# NOTFOR_{emacs,xemacs}
+# NOTFOR_{emacs_x,emacs_nox}
+# Description:
+# These macros will become either an empty string or
+# "@comment" depending on the Emacs version; when
+# "emacs21" is used, ${FOR_emacs} and ${FOR_emacs21}
+# become "" (empty), and other macros become
+# "@comment"; this means that only the PLIST lines
+# prefixed by ${FOR_emacs} and ${FOR_emacs21} are
+# valid.
+#
+# NOTFOR_* is the opposite of FOR_*.
+# Possible values:
+# "", "@comment"
+#
+
+.if !defined(EMACS_MK)
+EMACS_MK= # defined
+
+_VARGROUPS+= emacs
+_USER_VARS.emacs= EMACS_TYPE
+_PKG_VARS.emacs= EMACS_MODULES EMACS_VERSIONS_ACCEPTED
+_SYS_VARS.emacs= EMACS_BIN EMACS_ETCPREFIX EMACS_FLAVOR \
+ EMACS_INFOPREFIX EMACS_LISPPREFIX \
+ EMACS_PKGNAME_PREFIX \
+ EMACS_VERSION_MAJOR EMACS_VERSION_MINOR
+_DEF_VARS.emacs= _EMACS_TYPE _EMACS_PKGBASE
+BUILD_DEFS+= ${_USER_VARS.emacs}
+BUILD_DEFS_EFFECTS+= ${_SYS_VARS.emacs}
+
+.include "../../mk/bsd.prefs.mk"
+
+#
+# Constants
+#
+
+_EMACS_VERSIONS_ALL= \
+ emacs20 emacs21 emacs21nox emacs22 emacs22nox \
+ xemacs214 xemacs214nox xemacs215 xemacs215nox
+
+_EMACS_PKGDIR_MAP= \
+ emacs20@../../editors/emacs20 \
+ emacs21@../../editors/emacs21 \
+ emacs21nox@../../editors/emacs21-nox11 \
+ emacs22@../../editors/emacs \
+ emacs22nox@../../editors/emacs-nox11 \
+ xemacs214@../../editors/xemacs \
+ xemacs214nox@../../editors/xemacs-nox11 \
+ xemacs215@../../editors/xemacs-current \
+ xemacs215nox@../../editors/xemacs-current-nox11
+
+_EMACS_ETCDIR.emacs= share
+_EMACS_INFODIR.emacs= ${PKGINFODIR}
+_EMACS_LISPDIR.emacs= share/emacs/site-lisp
+_EMACS_PKGNAME_PREFIX.emacs=
+_EMACS_CONFLICTS.emacs= xemacs-${PKGBASE}-[0-9]*
+
+_EMACS_ETCDIR.xemacs= lib/xemacs/site-packages/etc
+_EMACS_INFODIR.xemacs= lib/xemacs/site-packages/info
+_EMACS_LISPDIR.xemacs= lib/xemacs/site-packages/lisp
+_EMACS_PKGNAME_PREFIX.xemacs= xemacs-
+_EMACS_CONFLICTS.xemacs= ${PKGBASE:C|^xemacs-||}-[0-9]*
+
+#
+# Version decision
+#
+# 1. Pick up an emacs version.
+#
+# add a dependency to the version;
+#
+# 2. Check if a given package can be used for the emacs version.
+#
+# if (package accepts the emacs version)
+# nothing to do;
+# else
+# abort;
+#
+
+_EMACS_TYPE= ${EMACS_TYPE}
+
+EMACS_VERSIONS_ACCEPTED?= ${_EMACS_VERSIONS_ALL}
+.if empty(EMACS_VERSIONS_ACCEPTED:M${_EMACS_TYPE})
+PKG_FAIL_REASON+= "Accepted versions are: ${EMACS_VERSIONS_ACCEPTED}"
+PKG_FAIL_REASON+= "No valid Emacs version installed found"
+.endif
+
+_EMACS_PKGDIR= ${_EMACS_PKGDIR_MAP:M${_EMACS_TYPE}@*:C|${_EMACS_TYPE}@||}
+
+.include "${_EMACS_PKGDIR}/version.mk"
+
+#
+# Dependencies and conflicts
+#
+
+DEPENDS+= ${_EMACS_REQD}:${_EMACS_PKGDIR}
+CONFLICTS+= ${_EMACS_CONFLICTS.${_EMACS_FLAVOR}}
+
+EMACS_MODULES?=
+.for _mod_ in ${EMACS_MODULES}
+.if !empty(_EMACS_PKGDEP.${_mod_})
+DEPENDS+= ${_EMACS_PKGDEP.${_mod_}}
+.endif
+.endfor
+
+#
+# Macros for packages
+#
+
+EMACS_FLAVOR= ${_EMACS_FLAVOR}
+EMACS_BIN= ${PREFIX}/bin/${_EMACS_FLAVOR}
+EMACS_VERSION_MAJOR= ${_EMACS_VERSION_MAJOR}
+EMACS_VERSION_MINOR= ${_EMACS_VERSION_MINOR}
+EMACS_ETCPREFIX= ${PREFIX}/${_EMACS_ETCDIR.${_EMACS_FLAVOR}}
+EMACS_INFOPREFIX= ${PREFIX}/${_EMACS_INFODIR.${_EMACS_FLAVOR}}
+EMACS_LISPPREFIX= ${PREFIX}/${_EMACS_LISPDIR.${_EMACS_FLAVOR}}
+EMACS_PKGNAME_PREFIX= ${_EMACS_PKGNAME_PREFIX.${_EMACS_FLAVOR}}
+
+GNU_CONFIGURE_INFODIR?= ${EMACS_INFOPREFIX}
+
+_EMACS_PLIST_SUBST=
+.for e in ${_EMACS_VERSIONS_ALL} emacs xemacs
+. if "${e}" == ${EMACS_FLAVOR} || "${e}" == ${_EMACS_TYPE}
+_EMACS_PLIST_SUBST+= FOR_${e}="" NOTFOR_${e}="@comment "
+. else
+_EMACS_PLIST_SUBST+= FOR_${e}="@comment " NOTFOR_${e}=""
+. endif
+.endfor
+.if empty(EMACS_TYPE:M*nox)
+_EMACS_PLIST_SUBST+= FOR_emacs_x="" NOTFOR_emacs_x="@comment "
+_EMACS_PLIST_SUBST+= FOR_emacs_nox="@comment " NOTFOR_emacs_nox=""
+.else
+_EMACS_PLIST_SUBST+= FOR_emacs_x="@comment " NOTFOR_emacs_x=""
+_EMACS_PLIST_SUBST+= FOR_emacs_nox="" NOTFOR_emacs_nox="@comment "
+.endif
+
+_EMACS_PLIST_SUBST+= EMACS_FLAVOR=${EMACS_FLAVOR:Q}
+_EMACS_PLIST_SUBST+= EMACS_VERSION=${_EMACS_VERSION_MAJOR:Q}.${_EMACS_VERSION_MINOR:Q}
+_EMACS_PLIST_SUBST+= EMACS_ETCPREFIX=${EMACS_ETCPREFIX:C|^${PREFIX}/||}
+_EMACS_PLIST_SUBST+= EMACS_INFOPREFIX=${EMACS_INFOPREFIX:C|^${PREFIX}/||}
+_EMACS_PLIST_SUBST+= EMACS_LISPPREFIX=${EMACS_LISPPREFIX:C|^${PREFIX}/||}
+
+PLIST_SUBST+= ${_EMACS_PLIST_SUBST}
+
+PRINT_PLIST_AWK+= { gsub(/${EMACS_LISPPREFIX:S|${PREFIX}/||:S|/|\\/|g}/, \
+ "$${EMACS_LISPPREFIX}"); \
+ print; next; }
+
+#
+# Build environment (buildlink3)
+#
+
+_EMACS_DIR= ${BUILDLINK_DIR}/share/emacs
+ALL_ENV+= EMACSLOADPATH=${_EMACS_DIR}/${_EMACS_VERSION_MAJOR}.${_EMACS_VERSION_MINOR}/lisp:${_EMACS_DIR}/site-lisp
+
+.include "${_EMACS_PKGDIR}/buildlink3.mk"
+
+.endif # EMACS_MK
diff --git a/editors/emacs/version.mk b/editors/emacs/version.mk
new file mode 100644
index 00000000000..bf23fb598cb
--- /dev/null
+++ b/editors/emacs/version.mk
@@ -0,0 +1,9 @@
+# $NetBSD: version.mk,v 1.1 2008/10/11 09:31:56 uebayasi Exp $
+
+_EMACS_FLAVOR= emacs
+_EMACS_REQD= emacs>=22
+_EMACS_PKGDEP.base=
+_EMACS_PKGDEP.leim=
+
+_EMACS_VERSION_MAJOR= 22
+_EMACS_VERSION_MINOR= 1