unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Rüdiger Sonderfeld" <ruediger@c-plusplus.net>
To: emacs-devel@gnu.org
Cc: 16507@debbugs.gnu.org
Subject: bug#16507: [RFC] Add a systemd service file for dealing with emacs --daemon.
Date: Wed, 03 Dec 2014 20:39:44 +0100	[thread overview]
Message-ID: <5741989.eboZExnV48@descartes> (raw)
In-Reply-To: <8738ki4ys4.fsf@geometryfactory.com>

As discussed in Bug#16507, I've added a systemd service file to deal with 
emacs --daemon.  This however requires some installation changes.  That's why 
I submit this patch for review before pushing it.

A new configuration flag `--with-systemduserunitdir' is added to set the 
installation directory for the user unit.  If it is unset an attempt is made 
to locate the default directory by using pkg-config.

(I guess this should also get an entry in etc/NEWS.)

* configure.ac (with_systemduserunitdir): New option.
* Makefile.in (systemdunitdir,SYSTEMD_UNITS): New variables.
(install-etc): Install systemd unit file.
(uninstall): Uninstall systemd unit file.
* etc/emacs.service.in: New file.
---
 ChangeLog            |  8 ++++++++
 Makefile.in          | 17 +++++++++++++++++
 configure.ac         | 19 +++++++++++++++++++
 etc/ChangeLog        |  5 +++++
 etc/emacs.service.in | 14 ++++++++++++++
 5 files changed, 63 insertions(+)
 create mode 100644 etc/emacs.service.in

diff --git a/ChangeLog b/ChangeLog
index cd7698c..05ad878 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-12-03  Rüdiger Sonderfeld  <ruediger@c-plusplus.de>
+
+	Add a systemd service file for dealing with emacs --daemon.
+	* configure.ac (with_systemduserunitdir): New option.
+	* Makefile.in (systemdunitdir,SYSTEMD_UNITS): New variables.
+	(install-etc): Install systemd unit file.
+	(uninstall): Uninstall systemd unit file.
+
 2014-12-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 	* .gitignore: Ignore loaddefs directly under lisp, and in
diff --git a/Makefile.in b/Makefile.in
index ccb70a4..b1e6be5 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -241,6 +241,9 @@ etcdocdir=@etcdocdir@
 # Where to install Emacs game score files.
 gamedir=@gamedir@
 
+# Where to install systemd unit files.
+systemdunitdir=@systemdunitdir@
+
 # ==================== Utility Programs for the Build ====================
 
 # Allow the user to specify the install program.
@@ -286,6 +289,9 @@ SUBDIR_MAKEFILES = `echo $(SUBDIR_MAKEFILES_IN:.in=) | sed 
's|$(srcdir)/||g'`
 COPYDIR = ${srcdir}/etc ${srcdir}/lisp
 COPYDESTS = "$(DESTDIR)${etcdir}" "$(DESTDIR)${lispdir}"
 
+# systemd unit
+SYSTEMD_UNITS = @SYSTEMD_UNITS@
+
 all: ${SUBDIR} info
 
 .PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 etc-emacsver
@@ -716,6 +722,16 @@ install-etc:
 	    || exit 1; \
 	  done ; \
 	done
+	if test "x$(SYSTEMD_UNITS)" = "xemacs.service" ; then \
+	  tmp=etc/emacs.service; rm -f $${tmp}; \
+	  sed \
+            -e "s;@emacs_prog@;${bindir}/${EMACSFULL};" \
+	    -e "s;@emacsclient_prog@;${bindir}/emacsclient${EXEEXT};" \
+	    "$(srcdir)/etc/emacs.service.in" > $${tmp}; \
+	  umask 022; $(MKDIR_P) "$(DESTDIR)$(systemdunitdir)"; \
+	  $(INSTALL_DATA) $${tmp} "$(DESTDIR)$(systemdunitdir)/emacs.service"; \
+	  rm -f $${tmp}; \
+	fi
 
 ### Build Emacs and install it, stripping binaries while installing them.
 install-strip:
@@ -771,6 +787,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc
 	  file="$(DESTDIR)${gamedir}/$${file}"; \
 	  [ -s "$${file}" ] || rm -f "$$file"; \
 	done
+	-rm -f "$(DESTDIR)$(systemdunitdir)/emacs.service"
 
 ### Windows-specific uninstall target for removing programs produced
 ### in nt/, and its Posix do-nothing shadow.
diff --git a/configure.ac b/configure.ac
index 010abc8..e737f1b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -374,6 +374,10 @@ otherwise for the first of `gfile' or `inotify' that is 
usable.])
  ],
  [with_file_notification=$with_features])
 
+AC_ARG_WITH([systemduserunitdir],
+ AS_HELP_STRING([--with-systemduserunitdir=DIR], [Directory for systemd user 
service files]),
+ [], [with_systemduserunitdir=default])
+
 ## For the times when you want to build Emacs but don't have
 ## a suitable makeinfo, and can live without the manuals.
 dnl http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01844.html
@@ -2678,6 +2682,21 @@ AC_SUBST(NOTIFY_OBJ)
 AC_SUBST(GFILENOTIFY_CFLAGS)
 AC_SUBST(GFILENOTIFY_LIBS)
 
+if test "x$with_systemduserunitdir" != xno; then
+  if test "x$with_systemduserunitdir" = xdefault; then
+    with_systemduserunitdir=`"$PKG_CONFIG" --variable=systemduserunitdir 
systemd`
+  fi
+  AC_SUBST([systemdunitdir], [$with_systemduserunitdir])
+fi
+
+if test -n "$with_systemduserunitdir" -a "x$with_systemduserunitdir" != xno ; 
then
+  SYSTEMD_UNITS="emacs.service"
+else
+  SYSTEMD_UNITS=""
+fi
+
+AC_SUBST(SYSTEMD_UNITS)
+
 dnl Do not put whitespace before the #include statements below.
 dnl Older compilers (eg sunos4 cc) choke on it.
 HAVE_XAW3D=no
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 4f672df..02c0895 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-03  Rüdiger Sonderfeld  <ruediger@c-plusplus.de>
+
+	Add a systemd service file for dealing with emacs --daemon.
+	* emacs.service.in: New file.
+
 2014-12-02  Eli Zaretskii  <eliz@gnu.org>
 
 	* NEWS: Mention 'bidi-find-overridden-directionality'.
diff --git a/etc/emacs.service.in b/etc/emacs.service.in
new file mode 100644
index 0000000..0e59bc2
--- /dev/null
+++ b/etc/emacs.service.in
@@ -0,0 +1,14 @@
+# -*- conf-mode -*-
+# Copyright (C) 2014 Free Software Foundation, Inc.
+[Unit]
+Description=Emacs: the extensible, customizable text editor - and more.
+Documentation=info:Emacs man:emacs(1) https://gnu.org/software/emacs/
+
+[Service]
+Type=forking
+ExecStart=@emacs_prog@ --daemon
+ExecStop=@emacsclient_prog@ --eval "(kill-emacs)"
+Restart=on-failure
+
+[Install]
+WantedBy=default.target
-- 
2.1.3






  parent reply	other threads:[~2014-12-03 19:39 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-20 12:34 bug#16507: 24.3; systemd unit for a GNU Emacs daemon Philipp Moeller
2014-01-20 16:58 ` Andreas Schwab
2014-01-20 17:05   ` Glenn Morris
2014-01-20 18:53 ` Ted Zlatanov
2014-01-20 20:25   ` Stefan Monnier
2014-01-20 21:03     ` Nathan Trapuzzano
2014-01-20 22:36     ` Mark Oteiza
2014-12-03 19:39 ` Rüdiger Sonderfeld [this message]
2014-12-03 21:08   ` bug#16507: [RFC] Add a systemd service file for dealing with emacs --daemon Romain Francoise
2014-12-03 21:16   ` joakim
     [not found]   ` <87iohstp9m.fsf@kima.orebokech.com>
2014-12-03 21:44     ` Rüdiger Sonderfeld
2014-12-03 22:08     ` Ulrich Mueller
     [not found]     ` <21631.35293.852427.367195@a1i15.kph.uni-mainz.de>
2014-12-04  0:18       ` Rüdiger Sonderfeld
     [not found]       ` <5628178.gi3dgk9OHo@descartes>
2014-12-04  2:57         ` Drew Adams
2014-12-04  6:26         ` Ulrich Mueller
2014-12-04  3:00   ` Glenn Morris
     [not found]   ` <pmvblsrueb.fsf@fencepost.gnu.org>
2014-12-05 17:26     ` Rüdiger Sonderfeld
2014-12-08 17:03       ` Glenn Morris
2014-12-08 18:51         ` Stefan Monnier
2014-12-08 20:41           ` Eli Zaretskii
2014-12-09  2:47             ` Stefan Monnier
2016-11-13 23:52               ` bug#16507: 24.3; systemd unit for a GNU Emacs daemon Glenn Morris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5741989.eboZExnV48@descartes \
    --to=ruediger@c-plusplus.net \
    --cc=16507@debbugs.gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).