1PORTNAME=	emacs
2DISTVERSION=	30.2
3PORTREVISION=	5
4PORTEPOCH=	3
5CATEGORIES=	editors
6MASTER_SITES=	GNU
7
8.if ${FLAVOR:U} == canna
9PATCH_SITES+=	https://www.gentei.org/~yuuji/software/emacs30canna/:canna
10PATCHFILES+=	emacs30.1-canna-20250224.diff.gz:-p1:canna
11.endif
12
13MAINTAINER=	ports@MidnightBSD.org
14COMMENT=	GNU editing macros ${COMMENT_${FLAVOR}}
15WWW=		https://www.gnu.org/software/emacs/
16COMMENT_nox=	(No X flavor)
17COMMENT_canna=	(Canna Japanese input flavor)
18COMMENT_wayland=	(Wayland flavor)
19
20LICENSE=	gpl3+
21LICENSE_FILE=	${WRKSRC}/COPYING
22
23LIB_DEPENDS=	libgmp.so:math/gmp
24
25FLAVORS=			full canna nox wayland
26canna_PKGNAMESUFFIX=		-canna
27canna_LIB_DEPENDS=		libcanna.so:japanese/canna-lib
28canna_CONFLICTS_INSTALL=	emacs emacs-nox emacs-wayland
29canna_DESCR=			${.CURDIR}/pkg-descr-canna
30full_CONFLICTS_INSTALL=		emacs-canna emacs-nox emacs-wayland
31nox_PKGNAMESUFFIX=		-nox
32nox_CONFLICTS_INSTALL=		emacs emacs-canna emacs-wayland
33wayland_PKGNAMESUFFIX=		-wayland
34wayland_CONFLICTS_INSTALL=	emacs emacs-canna emacs-nox
35
36USES=		cpe gmake localbase:ldflags ncurses pkgconfig tar:xz
37CPE_VENDOR=	gnu
38
39GNU_CONFIGURE=		yes
40CONFIGURE_TARGET=	${ARCH}-portbld-freebsd12.4
41CONFIGURE_ARGS=		--disable-build-details \
42			--localstatedir=/var \
43			--without-gconf \
44			--without-libsystemd \
45			--without-selinux
46.if ${FLAVOR:U} == canna
47CONFIGURE_ARGS+=	--with-canna
48.elif ${FLAVOR:U} == nox
49CONFIGURE_ARGS+=	--with-sound=no \
50			--with-x-toolkit=no \
51			--without-cairo \
52			--without-dbus \
53			--without-gconf \
54			--without-gif \
55			--without-gsettings \
56			--without-imagemagick \
57			--without-jpeg \
58			--without-lcms2 \
59			--without-libotf \
60			--without-m17n-flt \
61			--without-pgtk \
62			--without-png \
63			--without-rsvg \
64			--without-tiff \
65			--without-toolkit-scroll-bars \
66			--without-webp \
67			--without-x \
68			--without-xim \
69			--without-xpm \
70			--without-xwidgets
71.elif ${FLAVOR:U} == wayland
72CONFIGURE_ARGS+=	--without-x
73.else
74CONFIGURE_ARGS+=	--with-x
75.endif
76# See r468320 to determine if/when the next line can be removed
77CONFIGURE_ENV=		ac_cv_header_sys_sysinfo_h=no
78
79CONFLICTS_INSTALL=	emacs-devel emacs-devel-nox
80
81BINARY_ALIAS=	makeinfo=true
82SUB_FILES=	pkg-message sources.el
83SUB_LIST=	EMACS_VER=${DISTVERSION} \
84		NATIVECOMP_COMMENT_END=${NATIVECOMP_COMMENT_END} \
85		NATIVECOMP_COMMENT_START=${NATIVECOMP_COMMENT_START}
86
87INFO=		auth autotype bovine calc ccmode cl dbus dired-x ebrowse ede \
88		ediff edt efaq eglot eieio eintr elisp emacs emacs-gnutls \
89		emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
90		htmlfontify idlwave ido info mairix-el message mh-e \
91		modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
92		rcirc reftex remember sasl sc semantic ses sieve smtpmail \
93		speedbar srecode todo-mode tramp transient url use-package \
94		vhdl-mode vip viper vtable widget wisent woman
95INFO_PATH=	${DATADIR_REL}/info
96.if ${FLAVOR:U} == canna
97PLIST_FILES+=	${DATADIR}/${DISTVERSION}/lisp/canna.el.gz \
98		${DATADIR}/${DISTVERSION}/lisp/canna.elc \
99		${DATADIR}/${DISTVERSION}/lisp/isearch-ext.el.gz \
100		${DATADIR}/${DISTVERSION}/lisp/isearch-ext.elc
101.endif
102PLIST_SUB=	EMACS_VER=${DISTVERSION} \
103		GNU_HOST=${CONFIGURE_TARGET}
104
105OPTIONS_DEFINE=			ACL DBUS GNUTLS GSETTINGS HARFBUZZ LCMS2 M17N \
106				MAILUTILS MODULES NATIVECOMP OTF PGTK \
107				SCROLLBARS SOURCES SQLITE3 THREADS TREESITTER \
108				XFT XIM XML XWIDGETS
109OPTIONS_DEFAULT=		ACL CAIRO DBUS GIF GNUTLS GSETTINGS GTK3 \
110				HARFBUZZ JPEG KQUEUE LCMS2 MAILUTILS MODULES \
111				OSS PNG SCROLLBARS SOURCES SQLITE3 SVG THREADS \
112				TIFF TREESITTER WEBP XIM XML XPM
113.if ${FLAVOR:U} != nox
114OPTIONS_DEFAULT+=		NATIVECOMP
115.endif
116OPTIONS_GROUP=			GRAPHICS
117OPTIONS_GROUP_GRAPHICS=		CAIRO GIF JPEG MAGICK PNG SVG TIFF WEBP XPM
118OPTIONS_RADIO=			FILENOTIFY SOUND X11TOOLKIT
119OPTIONS_RADIO_FILENOTIFY=	GFILE KQUEUE
120OPTIONS_RADIO_SOUND=		ALSA OSS
121OPTIONS_RADIO_X11TOOLKIT=	GTK2 GTK3 MOTIF XAW XAW3D
122.if ${FLAVOR:U} == wayland
123OPTIONS_EXCLUDE+=		GTK2 MOTIF XAW XAW3D XIM ${PGTK_PREVENTS} \
124				${PGTK_IMPLIES:@i@${${i}_PREVENTS}@}
125OPTIONS_SLAVE+=			PGTK ${PGTK_IMPLIES} \
126				${PGTK_IMPLIES:@i@${${i}_IMPLIES}@}
127.elif ${FLAVOR:U} == nox
128OPTIONS_EXCLUDE+=		ALSA CAIRO DBUS GFILE GIF GSETTINGS GTK2 GTK3 \
129				HARFBUZZ JPEG LCMS2 M17N MAGICK MOTIF OSS OTF \
130				PGTK PNG SCROLLBARS SVG TIFF WEBP XAW XAW3D XFT \
131				XIM XPM XWIDGETS
132.endif
133OPTIONS_EXCLUDE_armv7=		NATIVECOMP
134OPTIONS_EXCLUDE_powerpc64=	NATIVECOMP
135OPTIONS_SUB=			YES
136
137ACL_DESC=		Access control list support
138CAIRO_DESC=		Cairo graphics library support [implies PNG, prevents XFT]
139FILENOTIFY_DESC=	File notification support
140GFILE_DESC=		File notification via gfile
141GRAPHICS_DESC=		Graphics support
142GSETTINGS_DESC=		GSettings API for application settings
143HARFBUZZ_DESC=		HarfBuzz for text shaping
144KQUEUE_DESC=		File notification via kqueue
145M17N_DESC=		M17N support for text-shaping [implies XFT]
146MAGICK_DESC=		ImageMagick image processing support (deprecated)
147MAILUTILS_DESC=		Mail framework via GNU Mailutils
148MODULES_DESC=		Dynamic modules support
149NATIVECOMP_DESC=	Emacs Lisp native compiler support
150OTF_DESC=		Opentype fonts
151PGTK_DESC=		Pure GTK GUI [implies CAIRO, GTK3]
152SCROLLBARS_DESC=	Toolkit scroll-bars
153SOURCES_DESC=		Install sources
154SVG_DESC=		Scalable vector graphics support [implies PNG]
155TREESITTER_DESC=	tree-sitter support
156X11TOOLKIT_DESC=	X11 toolkit
157XAW3D_DESC=		Athena3D widgets
158XAW_DESC=		Athena widgets
159XIM_DESC=		X Input Method
160XWIDGETS_DESC=		Experimental GTK widgets [implies GTK3]
161
162ACL_CONFIGURE_ENABLE=		acl
163ALSA_LIB_DEPENDS=		libasound.so:audio/alsa-lib
164ALSA_CONFIGURE_ON=		--with-sound=alsa
165CAIRO_IMPLIES=			PNG
166CAIRO_PREVENTS=			XFT
167CAIRO_LIB_DEPENDS=		libfontconfig.so:x11-fonts/fontconfig \
168				libfreetype.so:print/freetype2
169CAIRO_USE=			GNOME=cairo
170CAIRO_CONFIGURE_WITH=		cairo
171DBUS_LIB_DEPENDS=		libdbus-1.so:devel/dbus
172DBUS_CONFIGURE_WITH=		dbus
173GFILE_USE=			GNOME=glib20
174GFILE_CONFIGURE_ON=		--with-file-notification=gfile
175GIF_LIB_DEPENDS=		libgif.so:graphics/giflib
176GIF_CONFIGURE_WITH=		gif
177GNUTLS_LIB_DEPENDS=		libgnutls.so:security/gnutls
178GNUTLS_CONFIGURE_WITH=		gnutls
179GSETTINGS_USE=			GNOME=glib20
180GSETTINGS_CONFIGURE_WITH=	gsettings
181GTK2_LIB_DEPENDS=		libfontconfig.so:x11-fonts/fontconfig \
182				libfreetype.so:print/freetype2
183GTK2_USE=			GNOME=cairo,gtk20
184GTK2_CONFIGURE_ON=		--with-x-toolkit=gtk2
185GTK3_LIB_DEPENDS=		libfontconfig.so:x11-fonts/fontconfig \
186				libfreetype.so:print/freetype2
187GTK3_USE=			GNOME=cairo,gtk30
188GTK3_CONFIGURE_ON=		--with-x-toolkit=gtk3
189HARFBUZZ_LIB_DEPENDS=		libharfbuzz.so:print/harfbuzz
190HARFBUZZ_CONFIGURE_WITH=	harfbuzz
191JPEG_USES=			jpeg
192JPEG_CONFIGURE_WITH=		jpeg
193KQUEUE_CONFIGURE_ON=		--with-file-notification=kqueue
194LCMS2_LIB_DEPENDS=		liblcms2.so:graphics/lcms2
195LCMS2_CONFIGURE_WITH=		lcms2
196#LTO_CONFIGURE_ON=		--enable-link-time-optimization
197M17N_IMPLIES=			XFT
198M17N_LIB_DEPENDS=		libm17n.so:devel/m17n-lib
199M17N_CONFIGURE_WITH=		m17n-flt
200MAGICK_USES=			magick:7
201MAGICK_CONFIGURE_WITH=		imagemagick
202MAILUTILS_RUN_DEPENDS=		mailutils:mail/mailutils
203MAILUTILS_CONFIGURE_WITH=	mailutils
204MAILUTILS_CONFIGURE_ENV_OFF=	ac_cv_lib_lockfile_maillock=no \
205				ac_cv_prog_liblockfile=no
206MODULES_CONFIGURE_WITH=		modules
207MOTIF_USES=			motif
208MOTIF_CONFIGURE_ON=		--with-x-toolkit=motif
209NATIVECOMP_USE=			GCC=13
210NATIVECOMP_CONFIGURE_WITH=	native-compilation=aot
211OSS_CONFIGURE_ON=		--with-sound=oss
212OTF_LIB_DEPENDS=		libotf.so:print/libotf
213OTF_CONFIGURE_WITH=		libotf
214PGTK_IMPLIES=			CAIRO GTK3 SCROLLBARS
215PGTK_PREVENTS=			M17N XFT XPM
216PGTK_CATEGORIES=		wayland
217PGTK_CONFIGURE_WITH=		pgtk
218PNG_LIB_DEPENDS=		libpng16.so:graphics/png
219PNG_CONFIGURE_WITH=		png
220SCROLLBARS_CONFIGURE_WITH=	toolkit-scroll-bars
221.if ${FLAVOR:U} == canna
222SOURCES_PLIST_FILES=		${DATADIR}/${DISTVERSION}/src/canna.c
223.endif
224SQLITE3_USES=			sqlite:3
225SQLITE3_CONFIGURE_WITH=		sqlite3
226SVG_IMPLIES=			PNG
227SVG_USE=			GNOME=cairo,librsvg2
228SVG_CONFIGURE_WITH=		rsvg
229THREADS_CONFIGURE_WITH=		threads
230TIFF_LIB_DEPENDS=		libtiff.so:graphics/tiff
231TIFF_CONFIGURE_WITH=		tiff
232TREESITTER_IMPLIES=		MODULES
233TREESITTER_LIB_DEPENDS=		libtree-sitter.so:devel/tree-sitter
234TREESITTER_CONFIGURE_WITH=	tree-sitter
235WEBP_LIB_DEPENDS=		libwebpdemux.so:graphics/webp
236WEBP_CONFIGURE_WITH=		webp
237XAW3D_LIB_DEPENDS=		libXaw3d.so:x11-toolkits/libXaw3d
238XAW3D_CONFIGURE_ON=		--with-x-toolkit=athena
239XAW_USE=			XORG=xaw
240XAW_CONFIGURE_ON=		--with-x-toolkit=athena \
241				--without-xaw3d
242XFT_LIB_DEPENDS=		libfontconfig.so:x11-fonts/fontconfig \
243				libfreetype.so:print/freetype2
244XFT_USE=			XORG=xft,xrender
245XFT_CONFIGURE_WITH=		xft
246XIM_CONFIGURE_WITH=		xim
247# keep XML_USES=gnome, because nox flavor does not have USES=gnome
248XML_USES=			gnome
249XML_USE=			GNOME=libxml2
250XML_CONFIGURE_WITH=		xml2
251XPM_USE=			XORG=xpm
252XPM_CONFIGURE_WITH=		xpm
253XWIDGETS_IMPLIES=		GTK3
254XWIDGETS_LIB_DEPENDS=		libsoup-2.4.so:devel/libsoup \
255				libwebkit2gtk-4.0.so:www/webkit2-gtk@40
256XWIDGETS_USE=			XORG=xcomposite
257XWIDGETS_CONFIGURE_WITH=	xwidgets
258
259.include <bsd.mport.options.mk>
260
261.if ${PORT_OPTIONS:MNATIVECOMP}
262NATIVECOMP_COMMENT_END=
263NATIVECOMP_COMMENT_START=
264.else
265NATIVECOMP_COMMENT_END=		'*/'
266NATIVECOMP_COMMENT_START=	'/*'
267.endif
268
269.if ${FLAVOR:U} != nox
270USES+=		desktop-file-utils gnome
271.if !${PORT_OPTIONS:MPGTK}
272USES+=		xorg
273USE_XORG+=	ice sm x11 xcb xcomposite xext xfixes xi xinerama xmu xrandr \
274		xrender xt
275.endif
276.endif
277
278.if !${PORT_OPTIONS:MGTK2} && !${PORT_OPTIONS:MGTK3} && !${PORT_OPTIONS:MMOTIF} && \
279	!${PORT_OPTIONS:MXAW} && !${PORT_OPTIONS:MXAW3D}
280CONFIGURE_ARGS+=	--with-x-toolkit=no
281.endif
282
283# Schema generation is dependent on both PGTK, and GSETTINGS options
284# as per https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=183936ee8e5
285.if ${PORT_OPTIONS:MGSETTINGS} && ${PORT_OPTIONS:MPGTK}
286GLIB_SCHEMAS+=	org.gnu.emacs.defaults.gschema.xml
287.endif
288
289.if ${FLAVOR} == nox
290# With a desktop entry stage-qa will give a warning about requiring
291# desktop-file-utils and portlint -C will give a warning about INSTALLS_ICONS,
292# but don't pull in those dependencies with the nox flavor.
293post-patch:
294	@${REINPLACE_CMD} -e 's/^Terminal=.*$$/Terminal=true/' ${WRKSRC}/etc/emacs.desktop
295.endif
296
297post-install:
298	@${RM} -r ${PREFIX}/lib/systemd
299	@(cd ${PREFIX} && ${FIND} libexec/emacs/${DISTVERSION}/${CONFIGURE_TARGET}/ -name emacs-*.pdmp >> ${TMPPLIST})
300	${RM} ${FAKE_DESTDIR}${TRUE_PREFIX}/share/emacs/info/dir
301
302post-install-MAILUTILS-on:
303	cd ${FAKE_DESTDIR}${TRUE_PREFIX} && ${LN} -sf bin/movemail \
304		libexec/emacs/${DISTVERSION}/${CONFIGURE_TARGET}
305
306# Natively compiled elisp files names include build checksum information, so add
307# these files to the plist after the build.
308post-install-NATIVECOMP-on:
309	@(cd ${WRKSRC} && ${FIND} native-lisp -type f | ${SED} -e 's,^,lib/emacs/${DISTVERSION}/,') >> ${TMPPLIST}
310#	@${FIND} ${FAKE_DESTDIR}${PREFIX}/lib/emacs/${DISTVERSION:R}/native-lisp/ -name '*.eln*' -exec ${STRIP_CMD} {} +
311
312post-install-SOURCES-on:
313	@${MKDIR} ${FAKE_DESTDIR}${DATADIR}/${DISTVERSION}/src
314	${INSTALL_DATA} ${WRKSRC}/src/*.[ch] ${FAKE_DESTDIR}${DATADIR}/${DISTVERSION}/src
315	${INSTALL_DATA} ${WRKDIR}/sources.el ${FAKE_DESTDIR}${DATADIR}/${DISTVERSION}/site-lisp/site-start.el
316
317.include <bsd.port.mk>
318