GNU Emacs flavours in FreeBSD
r460621 added flavours to editors/emacs. If you previously used editors/emacs-nox11 to get a flavour suitable for most server systems, you’re in for a couple of surprises.
- Remove
EMACS_PORT_NAME=emacs-nox11from/etc/make.conf. - Remove
WITHOUT_X11=yesfrom/etc/make.conf. - Add
OPTIONS_UNSET+=X11to/etc/make.confsimply as a precaution. - Add
DEFAULT_VERSIONS+=emacs=noxto/etc/make.conf.
The full range of valid values, as of r460621, are full, canna, nox, devel_full, and devel_nox.
Be sure to repeat the above steps for /usr/local/etc/synth/LiveSystem-make.conf, or similar files, if you are using ports-mgmt/synth.
I was under the impression that I have now told the ports collection that I want the nox flavour of editors/emacs.
root@enterprise:/usr/ports/editors/emacs # make -V DEFAULT_VERSIONS | gsed 's/ /\n/g' apache=2.4 bdb=6 emacs=nox firebird=2.5 fpc=3.0.2 gcc=6 ghostscript=9 linux=c6_64 lua=5.2 mysql=5.7 perl5=5.26 php=7.1 pgsql=9.6 python=2.7 python2=2.7 python3=3.6 ruby=2.3 samba=4.6 ssl=openssl tcltk=8.6 varnish=4
To quote the relevant parts of the 20180201 entry of ports/head/UPDATING:
An alternative to the default flavor, full, can be set in make.conf. For
example, to set the nox flavor as the default, use
DEFAULT_VERSIONS+=emacs=nox
This is clearly not the case, just run make -C /usr/ports/editors/emacs config to prove my point. dialog4ports still shows the full (hah!) plethora of options. Instead, run these commands:
setenv FLAVOR nox make -C /usr/ports/editors/emacs config unsetenv FLAVOR
I ended up selecting ACL, LLDB, MODULES, SOURCES, XML, and KQUEUE.
If you, like me, are still using the severly outdated ports-mgmt/portupgrade, try this:
setenv FLAVOR nox portupgrade -fpvo editors/emacs editors/emacs-nox11 unsetenv FLAVOR
After about 3 minutes, depending on your processing speed, a new and shiny GNU Emacs has replaced the previously installed GNU Emacs.
---> ** Upgrade tasks 1: 1 done, 0 ignored, 0 skipped and 0 failed
---> Listing the results (+:done / -:ignored / *:skipped / !:failed)
+ editors/emacs (emacs-25.3_2,3 -> emacs-nox-25.3_2,3)
---> Packages processed: 1 done, 0 ignored, 0 skipped and 0 failed
---> Session ended at: Fri, 02 Feb 2018 10:12:14 +0100 (consumed 00:02:43)
If you have print/auctex and/or devel/distel installed, you need to update their package names:
portupgrade -fpv print/auctex devel/distel
The results are in:
---> ** Upgrade tasks 2: 2 done, 0 ignored, 0 skipped and 0 failed
---> Listing the results (+:done / -:ignored / *:skipped / !:failed)
+ devel/distel (distel-4.1.1_1 -> distel-emacs25_nox-4.1.1_2)
+ print/auctex (auctex-emacs-nox11-11.90_2 -> auctex-emacs25_nox-11.90_3)
---> Packages processed: 2 done, 0 ignored, 0 skipped and 0 failed
---> Session ended at: Fri, 02 Feb 2018 10:15:16 +0100 (consumed 00:00:40)
At least print/auctex and devel/distel have the decency to honour my request for the nox flavour of editors/emacs.
Edit and upgrade any local metaports to reflect the new port origins and package names. If you are using ports-mgmt/portmaster or ports-mgmt/synth, this should do:
RUN_DEPENDS+=emacs-nox>0:${PORTSDIR}/editors/emacs@nox
RUN_DEPENDS+=auctex-emacs25_nox>0:${PORTSDIR}/print/auctex@nox
RUN_DEPENDS+=distel-emacs25_nox>0:${PORTSDIR}/devel/distel@nox
Update 2018-02-05
I revisited ports-mgmt/portmaster this weekend and created this little shell script:
#!/bin/sh if [ "$#" = 0 ]; then extra=-a fi portmaster --no-confirm --no-term-title --no-index-fetch --index-first -g -w -D -v $extra $@
That first attempt resulted in a shell script generating a series of -r arguments for portmaster, excluding my local metaport.
#!/bin/sh
# $BSDnet: config/freebsd/enterprise/root/bin/run-pm-for-enterprise-base.sh,v 1.1 2018-02-20 12:08:53 trond Exp $
temporary_commandfile="/tmp/run-pm-for-enterprise-base-resume.sh"
for nv in `pkg version -vIL= | awk '{print $1}'`; do
r_list="${r_list} -r ${nv}"
done
unset nv
if [ -z "${r_list}" ]; then
echo "$0: empty list of outdated packages" >/dev/stderr
echo "$0: maybe you should run svn up /usr/ports" >/dev/stderr
exit 69
fi
commandline="portmaster --no-confirm --no-term-title --no-index-fetch --index-first -g -w -D -v -x enterprise-base ${r_list}"
echo "#!/bin/sh" > ${temporary_commandfile}
echo "export BATCH=yes" >> ${temporary_commandfile}
echo "export DISABLE_VULNERABILITIES=yes" >> ${temporary_commandfile}
echo "export PAGER=:" >> ${temporary_commandfile}
echo "${commandline} -R && rm ${temporary_commandfile}" >> ${temporary_commandfile}
chmod u+x,o-rwx ${temporary_commandfile}
export BATCH=yes
export DISABLE_VULNERABILITIES=yes
export PAGER=:
${commandline} && rm ${temporary_commandfile}
I have since embraced ports-mgmt/synth, but that one is not entirely without flaws.