summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2014-07-26 17:08:41 +0200
committerGravatar Martin Szulecki2014-09-19 18:54:02 +0200
commit577538f213cd7132c7450db393fd6fef6bb46b5a (patch)
tree74a21364696e0e2f375613e1c45006d5e6779dc0
parentb7976d2a53b27ec9c42f81a22e91704dbcc5fb53 (diff)
downloadusbmuxd-577538f213cd7132c7450db393fd6fef6bb46b5a.tar.gz
usbmuxd-577538f213cd7132c7450db393fd6fef6bb46b5a.tar.bz2
Add systemd activation autofoo with fallback for udev and manual activation
-rw-r--r--.gitignore3
-rw-r--r--Makefile.am7
-rw-r--r--configure.ac82
-rw-r--r--systemd/Makefile.am21
-rw-r--r--systemd/usbmuxd.service.in7
-rw-r--r--udev/39-usbmuxd.rules.in8
-rw-r--r--udev/Makefile.am20
7 files changed, 136 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index 9a9e6e6..4e65390 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,4 +34,5 @@ py-compile
stamp-h1
src/.libs
src/usbmuxd
-udev/85-usbmuxd.rules
+udev/39-usbmuxd.rules
+systemd/usbmuxd.service
diff --git a/Makefile.am b/Makefile.am
index 4ee9db6..789b9b0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,7 @@
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = src
+SUBDIRS = src $(UDEV_SUB) $(SYSTEMD_SUB)
-udevrulesdir = /lib/udev/rules.d
-udevrules_DATA = udev/39-usbmuxd.rules
+DISTCHECK_CONFIGURE_FLAGS = \
+ --with-udevrulesdir=$$dc_install_base/$(udevrulesdir) \
+ --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) \ No newline at end of file
diff --git a/configure.ac b/configure.ac
index 6737f6f..33f6151 100644
--- a/configure.ac
+++ b/configure.ac
@@ -42,6 +42,45 @@ else
fi
fi
+AC_ARG_WITH([udevrulesdir],
+ AS_HELP_STRING([--with-udevrulesdir=DIR],
+ [Directory for udev rules]),
+ [],
+ [with_udevrulesdir=auto])
+if test "x$with_udevrulesdir" = "xauto"; then
+ udevdir=$($PKG_CONFIG --variable=udevdir udev)
+ if test "x$udevdir" != "x"; then
+ with_udevrulesdir=$udevdir"/rules.d"
+ else
+ with_udevrulesdir=$prefix/lib/udev/rules.d
+ fi
+fi
+AC_SUBST([udevrulesdir], [$with_udevrulesdir])
+
+AC_ARG_WITH([systemd],
+ [AS_HELP_STRING([--without-systemd],
+ [do not build with systemd support @<:@default=yes@:>@])],
+ [with_systemd=no],
+ [with_systemd=yes])
+
+AC_ARG_WITH([systemdsystemunitdir],
+ [AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
+ [directory for systemd service files])],
+ [with_systemdsystemunitdir=$withval],
+ [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+
+if test "x$with_systemdsystemunitdir" != xno; then
+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno -a "x$with_systemd" = "xyes" ])
+
+if test "x$with_systemd" = xyes; then
+ udev_activation_rule="TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"usbmuxd.service\""
+else
+ udev_activation_rule="RUN+=\"@sbindir@/usbmuxd -u -U usbmux\""
+fi
+AC_SUBST(udev_activation_rule)
+
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdint.h stdlib.h string.h])
@@ -61,20 +100,40 @@ AC_CHECK_FUNCS([strcasecmp strdup strerror strndup stpcpy])
# Check for operating system
AC_MSG_CHECKING([whether to enable WIN32 build settings])
+UDEV_SUB=
+SYSTEMD_SUB=
case ${host_os} in
*mingw32*|*cygwin*)
win32=true
AC_MSG_RESULT([yes])
AC_CHECK_TOOL([WINDRES], [windres], AC_MSG_ERROR([windres not found]))
AC_SUBST(WINDRES)
+ activation_method="manual"
+ ;;
+ darwin*)
+ win32=false
+ AC_MSG_RESULT([no])
+ activation_method="launchd"
;;
*)
win32=false
AC_MSG_RESULT([no])
+ UDEV_SUB=udev
+ activation_method="systemd"
+ if test "x$with_systemd" != "xyes"; then
+ echo "*** Note: support for systemd activation has been disabled, using udev activation instead ***"
+ activation_method="udev"
+ else
+ AC_DEFINE(WITH_SYSTEMD, 1, [Define to enable systemd support])
+ SYSTEMD_SUB=systemd
+ fi
;;
esac
AM_CONDITIONAL(WIN32, test x$win32 = xtrue)
+AC_SUBST([UDEV_SUB])
+AC_SUBST([SYSTEMD_SUB])
+
AS_COMPILER_FLAGS(GLOBAL_CFLAGS, "-g -Wall -Wextra -Wmissing-declarations -Wredundant-decls -Wshadow -Wpointer-arith -Wwrite-strings -Wswitch-default -Wno-unused-parameter")
AC_SUBST(GLOBAL_CFLAGS)
@@ -83,15 +142,30 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_OUTPUT([
Makefile
src/Makefile
-udev/39-usbmuxd.rules
+udev/Makefile
+systemd/Makefile
])
-echo "
+echo -n "
Configuration for $PACKAGE $VERSION:
-------------------------------------------
- Install prefix: ...........: $prefix
- Preflight worker support ..: $have_limd
+ install prefix ............: $prefix
+ preflight worker support ..: $have_limd
+ activation method .........: $activation_method
+"
+
+if test "x$activation_method" = "xsystemd"; then
+ echo -n " systemd unit directory ....: ${systemdsystemunitdir}
+"
+fi
+
+if test -n "$udevrulesdir"; then
+ echo -n " udev rules directory ......: ${udevrulesdir}
+"
+fi
+
+echo " compiler ..................: ${CC}
Now type 'make' to build $PACKAGE $VERSION,
and then 'make install' for installation.
diff --git a/systemd/Makefile.am b/systemd/Makefile.am
new file mode 100644
index 0000000..6626d60
--- /dev/null
+++ b/systemd/Makefile.am
@@ -0,0 +1,21 @@
+edit = \
+ $(SED) -r \
+ -e 's|@sbindir[@]|$(sbindir)|g' \
+ -e 's|@localstatedir[@]|$(localstatedir)|g' \
+ < $< > $@ || rm $@
+
+if HAVE_SYSTEMD
+
+systemdsystemunit_DATA = \
+ usbmuxd.service
+
+usbmuxd.service: usbmuxd.service.in
+ $(edit)
+
+EXTRA_DIST = \
+ usbmuxd.service.in
+
+CLEANFILES = \
+ usbmuxd.service
+
+endif
diff --git a/systemd/usbmuxd.service.in b/systemd/usbmuxd.service.in
new file mode 100644
index 0000000..761b39a
--- /dev/null
+++ b/systemd/usbmuxd.service.in
@@ -0,0 +1,7 @@
+[Unit]
+Description=Socket daemon for the usbmux protocol used by Apple devices
+
+[Service]
+Type=simple
+ExecStart=@sbindir@/usbmuxd -u -U usbmux -f
+PIDFile=@localstatedir@/run/usbmuxd.pid
diff --git a/udev/39-usbmuxd.rules.in b/udev/39-usbmuxd.rules.in
index f4eb66f..91b14db 100644
--- a/udev/39-usbmuxd.rules.in
+++ b/udev/39-usbmuxd.rules.in
@@ -1,7 +1,7 @@
-# usbmuxd ("Apple Mobile Device" muxer listening on /var/run/usbmuxd)
+# usbmuxd (Apple Mobile Device Muxer listening on /var/run/usbmuxd)
-# Initialize iOS devices into "deactivated" USB configuration state and run usbmuxd
-ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", RUN+="@prefix@/sbin/usbmuxd -u -U usbmux"
+# Initialize iOS devices into "deactivated" USB configuration state and activate usbmuxd
+ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@
# Exit usbmuxd when the last device is removed
-ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ENV{INTERFACE}=="255/*", RUN+="@prefix@/sbin/usbmuxd -x"
+ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ENV{INTERFACE}=="255/*", RUN+="@sbindir@/usbmuxd -x"
diff --git a/udev/Makefile.am b/udev/Makefile.am
new file mode 100644
index 0000000..95f565d
--- /dev/null
+++ b/udev/Makefile.am
@@ -0,0 +1,20 @@
+edit = \
+ $(SED) -r \
+ -e 's|@udev_activation_rule[@]|$(udev_activation_rule)|g' \
+ -e 's|@sbindir[@]|$(sbindir)|g' \
+ < $< > $@ || rm $@
+
+udevrules_DATA = \
+ 39-usbmuxd.rules
+
+39-usbmuxd.rules: 39-usbmuxd.rules.in
+ $(edit)
+
+EXTRA_DIST = \
+ 39-usbmuxd.rules.in
+
+MAINTAINERCLEANFILES = \
+ 39-usbmuxd.rules
+
+CLEANFILES = \
+ 39-usbmuxd.rules