Sync Mk with ports
[dports.git] / Mk / Uses / emacs.mk
1 # Provide support for ports requiring Emacs.  This includes flavors with proper
2 # dependencies and useful variables.
3 #
4 # Feature:      emacs
5 # Usage:        USES=emacs or USES=emacs:args
6 # Valid ARGS:   build, run, noflavors
7 #
8 # build         Indicates that Emacs is required at build time.
9 # run           Indicates that Emacs is required at run time.
10 # noflavors     Prevents flavors.  This is implied when there is no run
11 #               dependency on Emacs.
12 #
13 # If build and run are omitted from the argument list, Emacs will be added to
14 # BUILD_DEPENDS and RUN_DEPENDS.  EMACS_NO_DEPENDS can be set to prevent both
15 # dependencies.
16 #
17 # Variables, which can be set in make.conf:
18 # DEFAULT_VERSIONS+=          The default flavor for Emacs ports (ports with
19 #                             USES=emacs, but not the Emacs ports themselves)
20 #                             can be added to DEFAULT_VERSIONS.  For example,
21 #                             DEFAULT_VERSIONS+= emacs=nox
22 #                             Valid flavors: full canna nox devel_full devel_nox
23 #                             Flavors specified on the command line take
24 #                             precedence.
25 #
26 # Variables, which can be set by ports:
27 # EMACS_FLAVORS_EXCLUDE:      Do NOT build these Emacs flavors.
28 #                             If EMACS_FLAVORS_EXCLUDE is not defined and
29 #                               - there is a run dependency on Emacs
30 #                               - the noflavors argument is not specified
31 #                             then all valid Emacs flavors are assumed.
32 #
33 # EMACS_NO_DEPENDS:           Do NOT add build or run dependencies on Emacs.
34 #                             This will prevent flavors.
35 #
36 # Variables, which can be read by ports:
37 # EMACS_CMD:                  Emacs command with full path (e.g. /usr/local/bin/emacs-28.2)
38 # EMACS_FLAVOR:               Used for dependencies (e.g. BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR})
39 # EMACS_LIBDIR:               Emacs Library directory without ${PREFIX} (e.g. share/emacs)
40 # EMACS_LIBDIR_WITH_VER:      Library directory without ${PREFIX} including version (e.g. share/emacs/28.2)
41 # EMACS_MAJOR_VER:            Emacs major version (e.g. 28)
42 # EMACS_PKGNAMESUFFIX:        PKGNAMESUFFIX to distinguish Emacs flavors
43 # EMACS_SITE_LISPDIR:         Emacs site-lisp directory without ${PREFIX} (e.g. share/emacs/site-lisp)
44 # EMACS_VER:                  Emacs version (e.g. 28.2)
45 # EMACS_VERSION_SITE_LISPDIR: Include version (e.g. share/emacs/28.2/site-lisp)
46 #-------------------------------------------------------------------------------
47 #
48 # MAINTAINER:   emacs@FreeBSD.org
49
50 .if !defined(_INCLUDE_USES_EMACS_MK)
51 _INCLUDE_USES_EMACS_MK= yes
52
53 # Make sure that no dependency or some other environment variable
54 # pollutes the build/run dependency detection
55 .undef _EMACS_BUILD_DEP
56 .undef _EMACS_RUN_DEP
57 .undef _EMACS_NOFLAVORS
58 _EMACS_ARGS=            ${emacs_ARGS:S/,/ /g}
59 .  if ${_EMACS_ARGS:Mbuild}
60 _EMACS_BUILD_DEP=       yes
61 _EMACS_ARGS:=           ${_EMACS_ARGS:Nbuild}
62 .  endif
63 .  if ${_EMACS_ARGS:Mrun}
64 _EMACS_RUN_DEP=         yes
65 _EMACS_ARGS:=           ${_EMACS_ARGS:Nrun}
66 .  endif
67 .  if ${_EMACS_ARGS:Mnoflavors}
68 _EMACS_NOFLAVORS=       yes
69 _EMACS_ARGS:=           ${_EMACS_ARGS:Nnoflavors}
70 .  endif
71
72 # If the port does not specify a build or run dependency, and does not define
73 # EMACS_NO_DEPENDS, assume both dependencies are required.
74 .  if !defined(_EMACS_BUILD_DEP) && !defined(_EMACS_RUN_DEP) && \
75         !defined(EMACS_NO_DEPENDS)
76 _EMACS_BUILD_DEP=       yes
77 _EMACS_RUN_DEP=         yes
78 .  endif
79
80 # Only set FLAVORS when...
81 .  if defined(_EMACS_RUN_DEP) && !defined(_EMACS_NOFLAVORS)
82 FLAVORS=        full canna nox devel_full devel_nox
83 # Sort the default to be first
84 .    if defined(EMACS_DEFAULT)
85 FLAVORS:=       ${EMACS_DEFAULT} ${FLAVORS:N${EMACS_DEFAULT}}
86 .    endif
87 .    for flavor in ${EMACS_FLAVORS_EXCLUDE}
88 FLAVORS:=       ${FLAVORS:N${flavor}}
89 .    endfor
90 .  endif
91
92 # Only set FLAVOR when...
93 .  if defined(_EMACS_RUN_DEP) && !defined(_EMACS_NOFLAVORS) && empty(FLAVOR)
94 .    if defined(EMACS_DEFAULT)
95 FLAVOR= ${EMACS_DEFAULT}
96 .    else
97 FLAVOR= ${FLAVORS:[1]}
98 .    endif # defined(EMACS_DEFAULT)
99 .  endif # !defined(_EMACS_NOFLAVORS) && defined(_EMACS_RUN_DEP) && empty(FLAVOR)
100
101 .  if !empty(FLAVOR)
102 EMACS_FLAVOR=   ${FLAVOR}
103 .  else
104 EMACS_FLAVOR=   full
105 .  endif
106
107 .  if ${FLAVOR:Mdevel*}
108 EMACS_VER=              30.0.50
109 EMACS_PORTDIR=          editors/emacs-devel
110 .  else
111 EMACS_VER=              28.2
112 EMACS_PORTDIR=          editors/emacs
113 .  endif
114
115 EMACS_MAJOR_VER=        ${EMACS_VER:C/\..*//}
116 EMACS_LIBDIR=           share/emacs
117 EMACS_LIBDIR_WITH_VER=  share/emacs/${EMACS_VER}
118 EMACS_PORT_NAME=        emacs${EMACS_MAJOR_VER}
119
120 .  if ${EMACS_FLAVOR} == "devel_full"
121 EMACS_PKGNAMESUFFIX=    -emacs_devel
122 .  elif ${EMACS_FLAVOR} == "devel_nox"
123 EMACS_PKGNAMESUFFIX=    -emacs_devel_nox
124 .  elif ${EMACS_FLAVOR} == "full"
125 EMACS_PKGNAMESUFFIX=
126 .  else
127 EMACS_PKGNAMESUFFIX=    -emacs_${EMACS_FLAVOR}
128 .  endif
129
130 EMACS_CMD=      ${PREFIX}/bin/emacs-${EMACS_VER}
131 EMACS_SITE_LISPDIR=     ${EMACS_LIBDIR}/site-lisp
132 EMACS_VERSION_SITE_LISPDIR=     ${EMACS_LIBDIR_WITH_VER}/site-lisp
133
134 .  if defined(_EMACS_BUILD_DEP)
135 BUILD_DEPENDS+=         ${EMACS_CMD}:${EMACS_PORTDIR}@${EMACS_FLAVOR:C/devel_//}
136 .  endif
137 .  if defined(_EMACS_RUN_DEP)
138 RUN_DEPENDS+=   ${EMACS_CMD}:${EMACS_PORTDIR}@${EMACS_FLAVOR:C/devel_//}
139 .  endif
140
141 MAKE_ARGS+=     EMACS=${EMACS_CMD}
142 SCRIPTS_ENV+=   EMACS_LIBDIR=${EMACS_LIBDIR} \
143                 EMACS_VER=${EMACS_VER} \
144                 EMACS_LIBDIR_WITH_VER=${EMACS_LIBDIR_WITH_VER} \
145                 EMACS_SITE_LISPDIR=${EMACS_SITE_LISPDIR} \
146                 EMACS_VERSION_SITE_LISPDIR=${EMACS_VERSION_SITE_LISPDIR}
147
148 PLIST_SUB+=     EMACS_LIBDIR=${EMACS_LIBDIR} \
149                 EMACS_VER=${EMACS_VER} \
150                 EMACS_LIBDIR_WITH_VER=${EMACS_LIBDIR_WITH_VER} \
151                 EMACS_SITE_LISPDIR=${EMACS_SITE_LISPDIR} \
152                 EMACS_VERSION_SITE_LISPDIR=${EMACS_VERSION_SITE_LISPDIR}
153
154 .endif # _INCLUDE_USES_EMACS_MK