Skip to content

Commit

Permalink
Add systemd activation autofoo with fallback for udev and manual acti…
Browse files Browse the repository at this point in the history
…vation
  • Loading branch information
FunkyM committed Sep 19, 2014
1 parent b7976d2 commit 577538f
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 12 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ py-compile
stamp-h1
src/.libs
src/usbmuxd
udev/85-usbmuxd.rules
udev/39-usbmuxd.rules
systemd/usbmuxd.service
7 changes: 4 additions & 3 deletions Makefile.am
Original file line number Diff line number Diff line change
@@ -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)
82 changes: 78 additions & 4 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand All @@ -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)

Expand All @@ -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.
Expand Down
21 changes: 21 additions & 0 deletions systemd/Makefile.am
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions systemd/usbmuxd.service.in
Original file line number Diff line number Diff line change
@@ -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
8 changes: 4 additions & 4 deletions udev/39-usbmuxd.rules.in
Original file line number Diff line number Diff line change
@@ -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"
20 changes: 20 additions & 0 deletions udev/Makefile.am
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 577538f

Please sign in to comment.