diff options
| author | 2014-07-26 17:08:41 +0200 | |
|---|---|---|
| committer | 2014-09-19 18:54:02 +0200 | |
| commit | 577538f213cd7132c7450db393fd6fef6bb46b5a (patch) | |
| tree | 74a21364696e0e2f375613e1c45006d5e6779dc0 | |
| parent | b7976d2a53b27ec9c42f81a22e91704dbcc5fb53 (diff) | |
| download | usbmuxd-577538f213cd7132c7450db393fd6fef6bb46b5a.tar.gz usbmuxd-577538f213cd7132c7450db393fd6fef6bb46b5a.tar.bz2 | |
Add systemd activation autofoo with fallback for udev and manual activation
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile.am | 7 | ||||
| -rw-r--r-- | configure.ac | 82 | ||||
| -rw-r--r-- | systemd/Makefile.am | 21 | ||||
| -rw-r--r-- | systemd/usbmuxd.service.in | 7 | ||||
| -rw-r--r-- | udev/39-usbmuxd.rules.in | 8 | ||||
| -rw-r--r-- | udev/Makefile.am | 20 | 
7 files changed, 136 insertions, 12 deletions
| @@ -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 | 
