From ebeab81a5c2723c2f3d479de3712a9f6a7ee80de Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Sun, 31 Dec 2023 01:24:38 -0600 Subject: [PATCH] Give each emacs flavor its own emacsclient Move emacsclient from emacs-bin-common to the emacsVER (i.e. emacs-lucid, emacs-gtk, ...) packages so that each one will have the binary that was built for that flavor. I was using emacs-lucid, and after upgrading to 29.1, emacsclient (which was the pgtk flavor) no longer worked correctly, for example "-c -n" didn't open new frames. However the lucid build emacsclient worked fine. Explicitly list the variant and common bin alternatives instead of globbing. Add the alternatives variables to deb_sub so we don't need the separate perl -i substitutions. Stop splitting some of the debian/rules $(call ...) invocations across two lines because it was introducing a space into the argument value which would then break quoted expansions like "$(1)...". Thanks to Wang Yizhen for reporting the problem. Closes: 1050953 --- debian/emacs-bin-common.lintian-overrides | 1 - debian/emacs-bin-common.postinst.in | 14 ++-- debian/emacs-bin-common.prerm.in | 11 ++- debian/emacsVAR.lintian-overrides | 2 + debian/emacsVAR.postinst | 8 +++ debian/emacsVAR.prerm | 9 ++- debian/rules | 84 +++++++++++++---------- 7 files changed, 73 insertions(+), 56 deletions(-) diff --git a/debian/emacs-bin-common.lintian-overrides b/debian/emacs-bin-common.lintian-overrides index a6cb9b2c2ab..4be23de639c 100644 --- a/debian/emacs-bin-common.lintian-overrides +++ b/debian/emacs-bin-common.lintian-overrides @@ -1,4 +1,3 @@ binary-without-manpage [usr/bin/ctags.emacs] binary-without-manpage [usr/bin/ebrowse.emacs] -binary-without-manpage [usr/bin/emacsclient.emacs] binary-without-manpage [usr/bin/etags.emacs] diff --git a/debian/emacs-bin-common.postinst.in b/debian/emacs-bin-common.postinst.in index 4779cd0322e..1127f718e34 100644 --- a/debian/emacs-bin-common.postinst.in +++ b/debian/emacs-bin-common.postinst.in @@ -2,16 +2,12 @@ set -e -ALTERNATIVES="@ALTERNATIVES@" -BIN_PRIORITY="@BIN_PRIORITY@" - -# update-alternatives on things that collide with xemacs, other editors -for i in ${ALTERNATIVES} +for alt in @DEB_COMMON_ALTERNATIVES@ do - update-alternatives \ - --install "/usr/bin/$i" "$i" "/usr/bin/$i.emacs" "$BIN_PRIORITY" \ - --slave "/usr/share/man/man1/$i.1.gz" "$i.1.gz" \ - "/usr/share/man/man1/$i.emacs.1.gz" + update-alternatives \ + --install "/usr/bin/$alt" "$alt" "/usr/bin/$alt.emacs" "@BIN_PRIORITY@" \ + --slave "/usr/share/man/man1/$alt.1.gz" "$alt.1.gz" \ + "/usr/share/man/man1/$alt.emacs.1.gz" done #DEBHELPER# diff --git a/debian/emacs-bin-common.prerm.in b/debian/emacs-bin-common.prerm.in index e0baaf3aaa0..9e23e6ed4f7 100644 --- a/debian/emacs-bin-common.prerm.in +++ b/debian/emacs-bin-common.prerm.in @@ -2,15 +2,12 @@ set -e -ALTERNATIVES="@ALTERNATIVES@" - -# update-alternatives on things that collide with xemacs, other editors if [ "$1" != upgrade ] then - for i in ${ALTERNATIVES} - do - update-alternatives --remove "$i" /usr/bin/$i.emacs - done + for alt in @DEB_COMMON_ALTERNATIVES@ + do + update-alternatives --remove "$alt" "/usr/bin/$alt.emacs" + done fi #DEBHELPER# diff --git a/debian/emacsVAR.lintian-overrides b/debian/emacsVAR.lintian-overrides index 7c74a0b0ba7..9c5c6ab92d1 100644 --- a/debian/emacsVAR.lintian-overrides +++ b/debian/emacsVAR.lintian-overrides @@ -1,3 +1,5 @@ +binary-without-manpage [usr/bin/emacsclient.emacs] + # dpkg-maintscript-helper does not work due to arch:all to arch:any switch maintainer-script-may-use-dir_to_symlink_helper diff --git a/debian/emacsVAR.postinst b/debian/emacsVAR.postinst index 6ff8576f416..8d581423b92 100644 --- a/debian/emacsVAR.postinst +++ b/debian/emacsVAR.postinst @@ -28,6 +28,14 @@ update-alternatives \ --slave /usr/share/man/man1/editor.1.gz editor.1.gz \ /usr/share/man/man1/emacs.emacs.1.gz +for alt in @DEB_VAR_ALTERNATIVES@ +do + update-alternatives \ + --install "/usr/bin/$alt" "$alt" "/usr/bin/$alt.emacs" @BIN_PRIORITY@ \ + --slave "/usr/share/man/man1/$alt.1.gz" "$alt.1.gz" \ + "/usr/share/man/man1/$alt.emacs.1.gz" +done + # emacsen-common registration. /usr/lib/emacsen-common/emacs-install emacs diff --git a/debian/emacsVAR.prerm b/debian/emacsVAR.prerm index e5aa0e59b58..76452fb05a0 100644 --- a/debian/emacsVAR.prerm +++ b/debian/emacsVAR.prerm @@ -2,11 +2,14 @@ set -e -# update-alternatives on things that collide with xemacs, other editors if [ "$1" != upgrade ] then - update-alternatives --verbose --remove editor /usr/bin/emacs - update-alternatives --verbose --remove emacs /usr/bin/emacs-@X_SUPPORT@ + update-alternatives --verbose --remove editor /usr/bin/emacs + update-alternatives --verbose --remove emacs /usr/bin/emacs-@X_SUPPORT@ + for alt in @DEB_VAR_ALTERNATIVES@ + do + update-alternatives --remove "$alt" "/usr/bin/$alt.emacs" + done fi # emacsen-common registration. diff --git a/debian/rules b/debian/rules index f7cf5e5820e..55f7b6f22f4 100755 --- a/debian/rules +++ b/debian/rules @@ -8,7 +8,7 @@ # Copyright 2019 Andreas Beckmann # Copyright 1994,1995 Ian Jackson # Copyright 2004-2005 Jérôme Marant -# Copyright 1998-2020, 2022 Rob Browning +# Copyright 1998-2020, 2022-2023 Rob Browning # Originally copied from the GNU Hello Debian rules file (1.3). # Modified for emacs by Mark Eichin . @@ -101,6 +101,11 @@ ifeq (,$(joblimit)) joblimit := 1 endif +# Separate alternatives into variant (flavor) specific and common. +# For now, we only handle /usr/bin. +var_alternatives := emacsclient +common_alternatives := ctags ebrowse etags + # Info files that are going to show up in the main dir. main_dir_info_files := efaq.info @@ -194,6 +199,8 @@ define deb_sub -e "s|\@MENU_VERSION\@|$(menu_ver)|go;" \ -e "s|\@X_SUPPORT\@|$(xsupport)|go;" \ -e "s|\@BIN_PRIORITY\@|$(bin_priority)|go;" \ + -e "s|\@DEB_VAR_ALTERNATIVES\@|$(var_alternatives)|go;" \ + -e "s|\@DEB_COMMON_ALTERNATIVES\@|$(common_alternatives)|go;" \ < $(1) > $(2) endef @@ -375,8 +382,10 @@ define install_common_binpkg_bits # args: (1) srcdir (2) pkgdir (3) pkgname (4) bin-suffix install -d $(2)/usr/bin/ - test -f $(1)/usr/bin/emacs-* - cp -a $(1)/usr/bin/emacs-* $(2)/usr/bin/emacs-$(4) + cp -a $(1)/usr/bin/emacs-$(upstream_ver) $(2)/usr/bin/emacs-$(4) + set -x; for f in $(var_alternatives); do \ + cp -a "$(1)/usr/bin/$$f" "$(2)/usr/bin/$$f.emacs"; \ + done test -f $(1)/$(libexec_dir_emacs)/emacs-*.pdmp install -d $(2)/$(libexec_dir_emacs) @@ -487,43 +496,49 @@ override_dh_auto_install: $(autogen_install_files) ################################################## # emacs-bin-common ifneq (,$(findstring emacs-bin-common, $(shell dh_listpackages))) - # Move common binaries to emacs-bin-common. - # We take them from pgtk because that build's emacsclient - # can handle connections to all flavours, while the other - # builds' emacsclients cannot connect to pgtk under Wayland. - install -d $(pkgdir_bin_common)/usr - cp -a $(install_dir_pgtk)/usr/bin $(pkgdir_bin_common)/usr - cp -a $(install_dir_pgtk)/usr/libexec $(pkgdir_bin_common)/usr + # Move common binaries to emacs-bin-common. For now, just + # take them from pgtk. + + ## usr/bin + install -d $(pkgdir_bin_common)/usr/bin + cp -a $(install_dir_pgtk)/usr/bin $(pkgdir_bin_common)/usr/bin/debtmp + + set -x; \ + cd $(pkgdir_bin_common)/usr/bin; \ + for f in $(common_alternatives); do mv "debtmp/$$f" "$$f.emacs"; done + + set -x; \ + cd $(pkgdir_bin_common)/usr/bin/debtmp; \ + for f in $(var_alternatives); do rm "$$f"; done + + # Now there should ony be emacs and emacs-VER + cd $(pkgdir_bin_common)/usr/bin/debtmp \ + && rm emacs emacs-$(upstream_ver) + + # Failure here should indicate something new upstream that + # needs to be in var_alternatives or common_alternatives. - # Make sure there's just one. - test -f $(pkgdir_bin_common)/usr/bin/emacs-* - rm $(pkgdir_bin_common)/usr/bin/{emacs,emacs-*} - # The pdmp files are flavor-specific + + ls -A $(pkgdir_bin_common)/usr/bin/debtmp + + + + rmdir $(pkgdir_bin_common)/usr/bin/debtmp + + ## libexec + cp -a $(install_dir_pgtk)/usr/libexec $(pkgdir_bin_common)/usr + # pdmp files are flavor-specific + test -f $(pkgdir_bin_common)/$(libexec_dir_emacs)/emacs-*.pdmp rm $(pkgdir_bin_common)/$(libexec_dir_emacs)/emacs-*.pdmp - # Set up alternatives. - alternatives=$$(ls $(pkgdir_bin_common)/usr/bin) \ - && set -x \ - && paths=($$(echo debian/emacs-bin-common.*)) \ - && for f in "$${paths[@]%.in}"; \ - do \ - perl -pwi -e "s|\@ALTERNATIVES\@|$${alternatives}|go" "$$f" ; \ - done - - for f in `ls $(pkgdir_bin_common)/usr/bin`; \ - do \ - mv $(pkgdir_bin_common)/usr/bin/$$f \ - $(pkgdir_bin_common)/usr/bin/$$f.emacs ; \ - done endif ################################################## # emacs-gtk ifneq (,$(findstring emacs-gtk, $(shell dh_listpackages))) $(call emacs_inst,build-gtk,$(install_dir_gtk)) - $(call install_common_binpkg_bits,\ - $(install_dir_gtk),$(pkgdir_gtk),emacs-gtk,gtk) + $(call install_common_binpkg_bits,$(install_dir_gtk),$(pkgdir_gtk),emacs-gtk,gtk) # install desktop entries install -d $(pkgdir_gtk)/usr/share/applications @@ -536,8 +551,7 @@ override_dh_auto_install: $(autogen_install_files) ################################################## # emacs-pgtk ifneq (,$(findstring emacs, $(shell dh_listpackages))) - $(call install_common_binpkg_bits,\ - $(install_dir_pgtk),$(pkgdir_pgtk),emacs-pgtk,pgtk) + $(call install_common_binpkg_bits,$(install_dir_pgtk),$(pkgdir_pgtk),emacs-pgtk,pgtk) # install desktop entries install -d $(pkgdir_pgtk)/usr/share/applications @@ -551,8 +565,7 @@ override_dh_auto_install: $(autogen_install_files) # emacs-nox ifneq (,$(findstring emacs-nox, $(shell dh_listpackages))) $(call emacs_inst,build-nox,$(install_dir_nox)) - $(call install_common_binpkg_bits,\ - $(install_dir_nox),$(pkgdir_nox),emacs-nox,nox) + $(call install_common_binpkg_bits,$(install_dir_nox),$(pkgdir_nox),emacs-nox,nox) # install desktop entry install -d $(pkgdir_gtk)/usr/share/applications install -m 0644 \ @@ -564,8 +577,7 @@ override_dh_auto_install: $(autogen_install_files) # emacs-lucid ifneq (,$(findstring emacs-lucid, $(shell dh_listpackages))) $(call emacs_inst,build-lucid,$(install_dir_lucid)) - $(call install_common_binpkg_bits,\ - $(install_dir_lucid),$(pkgdir_lucid),emacs-lucid,lucid) + $(call install_common_binpkg_bits,$(install_dir_lucid),$(pkgdir_lucid),emacs-lucid,lucid) # install desktop entries install -d $(pkgdir_lucid)/usr/share/applications -- 2.30.2