Give each emacs flavor its own emacsclient
authorRob Browning <rlb@defaultvalue.org>
Sun, 31 Dec 2023 07:24:38 +0000 (01:24 -0600)
committerRob Browning <rlb@defaultvalue.org>
Mon, 1 Jan 2024 22:12:02 +0000 (16:12 -0600)
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
debian/emacs-bin-common.postinst.in
debian/emacs-bin-common.prerm.in
debian/emacsVAR.lintian-overrides
debian/emacsVAR.postinst
debian/emacsVAR.prerm
debian/rules

index a6cb9b2c2ab89bd1f0dc160da38fcb88061ca0c4..4be23de639c29f3e67e62c864f59c120513de32b 100644 (file)
@@ -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]
index 4779cd0322eeeaad5c6d0ad38872e451a105dd5c..1127f718e3429ec67a000181593d33ae54116964 100644 (file)
@@ -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#
index e0baaf3aaa06e0aa6cd04245e623492b6aef15f9..9e23e6ed4f7538fb7f4b03419c6668c73d976cce 100644 (file)
@@ -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#
index 7c74a0b0ba76885f3e7daf4381660770812ea9e3..9c5c6ab92d1a16e24eaa4041b6dd0b1e16dfa789 100644 (file)
@@ -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
 
index 6ff8576f416595ae73fb400ef223bac38b9e0fa4..8d581423b92f61761305d08a13156efbc09eeff7 100644 (file)
@@ -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
 
index e5aa0e59b5876afb26c00121e418a205a1c7a9c9..76452fb05a07f00fa7d3068b3841d18a5f162958 100644 (file)
@@ -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.
index f7cf5e5820ee3e48fd32c1a34491e327e61a9b13..55f7b6f22f40cdf3cc44707d6c348680e994001d 100755 (executable)
@@ -8,7 +8,7 @@
 # Copyright 2019 Andreas Beckmann <anbe@debian.org>
 # Copyright 1994,1995 Ian Jackson
 # Copyright 2004-2005 Jérôme Marant <jerome@debian.org>
-# Copyright 1998-2020, 2022 Rob Browning <rlb@defaultvalue.org>
+# Copyright 1998-2020, 2022-2023 Rob Browning <rlb@defaultvalue.org>
 
 # Originally copied from the GNU Hello Debian rules file (1.3).
 # Modified for emacs by Mark Eichin <eichin@kitten.gen.ma.us>.
@@ -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