Index: usb-modeswitch-2.6.0/Makefile =================================================================== --- usb-modeswitch-2.6.0.orig/Makefile +++ usb-modeswitch-2.6.0/Makefile @@ -5,17 +5,24 @@ CFLAGS += -Wall -Wno-deprecated-dec LIBS = `pkg-config --libs --cflags libusb-1.0` RM = /bin/rm -f OBJS = usb_modeswitch.c -PREFIX = $(DESTDIR)/usr -ETCDIR = $(DESTDIR)/etc +PREFIX = /usr/local +ETCDIR = $(PREFIX)/etc SYSDIR = $(ETCDIR)/systemd/system UPSDIR = $(ETCDIR)/init -UDEVDIR = $(DESTDIR)/lib/udev +UDEVDIR = $(PREFIX)/lib/udev SBINDIR = $(PREFIX)/sbin MANDIR = $(PREFIX)/share/man/man1 +USE_UPSTART=$(shell if command -v initctl > /dev/null; then echo "true"; fi) +USE_SYSTEMD=$(shell if command -v systemctl > /dev/null; then echo "true"; fi) + .PHONY: clean install install-common uninstall \ dispatcher-script dispatcher-dynlink dispatcher-statlink \ - install-script install-dynlink install-statlink + install-script install-dynlink install-statlink \ + install-upstart install-systemd \ + configure-dispatcher configure-script \ + configure-upstart configure-systemd \ + configure all: all-with-script-dispatcher @@ -28,7 +35,25 @@ all-with-statlink-dispatcher: $(PROG) di $(PROG): $(OBJS) usb_modeswitch.h $(CC) -o $(PROG) $(OBJS) $(CFLAGS) $(LIBS) $(LDFLAGS) -dispatcher-script: usb_modeswitch_dispatcher.tcl +configure-dispatcher: + sed -i \ + -e 's,^\(set setup(sbindir) \).*$$,\1$(SBINDIR),' \ + -e 's,^\(set setup(etcdir) \).*$$,\1$(ETCDIR),' \ + usb_modeswitch_dispatcher.tcl + +configure-script: + sed -i -e 's,^\(SBINDIR=\).*$$,\1$(SBINDIR),' usb_modeswitch.sh + +configure-systemd: + sed -i -e 's,@sbindir@,$(SBINDIR),' usb_modeswitch@.service + +configure-upstart: + sed -i -e 's,@sbindir@,$(SBINDIR),' usb-modeswitch-upstart.conf + +configure: configure-dispatcher configure-script \ + configure-systemd configure-upstart + +dispatcher-script: configure-dispatcher usb_modeswitch_dispatcher.tcl DISPATCH=dispatcher-script cp -f usb_modeswitch_dispatcher.tcl usb_modeswitch_dispatcher @@ -53,16 +78,28 @@ distclean: clean # If the systemd folder is present, install the service for starting the dispatcher # If not, use the dispatcher directly from the udev rule as in previous versions -install-common: $(PROG) $(DISPATCH) - install -D --mode=755 usb_modeswitch $(SBINDIR)/usb_modeswitch - install -D --mode=755 usb_modeswitch.sh $(UDEVDIR)/usb_modeswitch - install -D --mode=644 usb_modeswitch.conf $(ETCDIR)/usb_modeswitch.conf - install -D --mode=644 usb_modeswitch.1 $(MANDIR)/usb_modeswitch.1 - install -D --mode=644 usb_modeswitch_dispatcher.1 $(MANDIR)/usb_modeswitch_dispatcher.1 - install -D --mode=755 usb_modeswitch_dispatcher $(SBINDIR)/usb_modeswitch_dispatcher +install-common: $(PROG) configure $(DISPATCH) + install -D --mode=755 usb_modeswitch $(DESTDIR)$(SBINDIR)/usb_modeswitch + install -D --mode=755 usb_modeswitch.sh $(DESTDIR)$(UDEVDIR)/usb_modeswitch + install -D --mode=644 usb_modeswitch.conf $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf + install -D --mode=644 usb_modeswitch.1 $(DESTDIR)$(MANDIR)/usb_modeswitch.1 + install -D --mode=644 usb_modeswitch_dispatcher.1 $(DESTDIR)$(MANDIR)/usb_modeswitch_dispatcher.1 + install -D --mode=755 usb_modeswitch_dispatcher $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher install -d $(DESTDIR)/var/lib/usb_modeswitch - test -d $(UPSDIR) -a -e /sbin/initctl && install --mode=644 usb-modeswitch-upstart.conf $(UPSDIR) || test 1 - test -d $(SYSDIR) -a \( -e /usr/bin/systemctl -o -e /bin/systemctl \) && install --mode=644 usb_modeswitch@.service $(SYSDIR) || test 1 + +install-upstart: + install -D --mode=644 usb-modeswitch-upstart.conf $(DESTDIR)$(UPSDIR)/usb-modeswitch-upstart.conf + +install-systemd: + install -D --mode=644 usb_modeswitch@.service $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service + +ifeq ($(USE_UPSTART),true) +install-common: install-upstart +endif + +ifeq ($(USE_SYSTEMD),true) +install-common: install-systemd +endif install: install-script @@ -73,10 +110,10 @@ install-dynlink: dispatcher-dynlink inst install-statlink: dispatcher-statlink install-common uninstall: - $(RM) $(SBINDIR)/usb_modeswitch - $(RM) $(SBINDIR)/usb_modeswitch_dispatcher - $(RM) $(UDEVDIR)/usb_modeswitch - $(RM) $(ETCDIR)/usb_modeswitch.conf - $(RM) $(MANDIR)/usb_modeswitch.1 + $(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch + $(RM) $(DESTDIR)$(SBINDIR)/usb_modeswitch_dispatcher + $(RM) $(DESTDIR)$(UDEVDIR)/usb_modeswitch + $(RM) $(DESTDIR)$(ETCDIR)/usb_modeswitch.conf + $(RM) $(DESTDIR)$(MANDIR)/usb_modeswitch.1 $(RM) -R $(DESTDIR)/var/lib/usb_modeswitch - $(RM) $(SYSDIR)/usb_modeswitch@.service + $(RM) $(DESTDIR)$(SYSDIR)/usb_modeswitch@.service Index: usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf =================================================================== --- usb-modeswitch-2.6.0.orig/usb-modeswitch-upstart.conf +++ usb-modeswitch-2.6.0/usb-modeswitch-upstart.conf @@ -1,5 +1,5 @@ start on usb-modeswitch-upstart task script - exec /usr/sbin/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM + exec @sbindir@/usb_modeswitch_dispatcher --switch-mode $UMS_PARAM end script Index: usb-modeswitch-2.6.0/usb_modeswitch.sh =================================================================== --- usb-modeswitch-2.6.0.orig/usb_modeswitch.sh +++ usb-modeswitch-2.6.0/usb_modeswitch.sh @@ -1,5 +1,9 @@ #!/bin/sh # part of usb_modeswitch 2.6.0 + +# Compile time configuration, injected by the Makefile +SBINDIR=/usr/sbin + device_in() { if [ ! -e /var/lib/usb_modeswitch/$1 ]; then @@ -37,7 +41,7 @@ if [ $(expr "$1" : "--.*") ]; then v_id=$3 fi fi -PATH=/sbin:/usr/sbin:$PATH + case "$1" in --driver-bind) # driver binding code removed @@ -46,9 +50,7 @@ case "$1" in --symlink-name) device_in "link_list" $v_id $p_id if [ "$?" = "1" ]; then - if [ -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then - exec usb_modeswitch_dispatcher $1 $2 2>>/dev/null - fi + exec $SBINDIR/usb_modeswitch_dispatcher $1 $2 2>>/dev/null fi exit 0 ;; @@ -61,15 +63,13 @@ if [ "$p2" = "" -a "$p1" != "" ]; then p2=$p1 fi -PATH=/bin:/sbin:/usr/bin:/usr/sbin -init_path=`readlink -f /sbin/init` -if [ `basename $init_path` = "systemd" ]; then +if command -v systemctl > /dev/null; then systemctl --no-block restart usb_modeswitch@$p2.service -elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then +elif command -v initctl > /dev/null; then initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$p2 else # only old distros, new udev will kill all subprocesses exec 1<&- 2<&- 5<&- 7<&- - exec usb_modeswitch_dispatcher --switch-mode $p2 & + exec $SBINDIR/usb_modeswitch_dispatcher --switch-mode $p2 & fi exit 0 Index: usb-modeswitch-2.6.0/usb_modeswitch@.service =================================================================== --- usb-modeswitch-2.6.0.orig/usb_modeswitch@.service +++ usb-modeswitch-2.6.0/usb_modeswitch@.service @@ -3,6 +3,6 @@ Description=USB_ModeSwitch_%i [Service] Type=oneshot -ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-mode %i +ExecStart=@sbindir@/usb_modeswitch_dispatcher --switch-mode %i #ExecStart=/bin/echo %i Index: usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl =================================================================== --- usb-modeswitch-2.6.0.orig/usb_modeswitch_dispatcher.tcl +++ usb-modeswitch-2.6.0/usb_modeswitch_dispatcher.tcl @@ -12,6 +12,16 @@ # Part of usb-modeswitch-2.6.0 package # (C) Josua Dietze 2009-2019 +# Compile-time configuration, injected by the Makefile. +set setup(sbindir) /usr/sbin +set setup(etcdir) /etc + +# External dependency default location +set setup(dbdir) /usr/share/usb_modeswitch + +# Derived configuration +set setup(dbdir_etc) $setup(etcdir)/usb_modeswitch.d + set arg0 [lindex $argv 0] if [regexp {\.tcl$} $arg0] { if [file exists $arg0] { @@ -115,10 +125,8 @@ if {![regexp {(.*?):.*$} $arg1 d device] } } -set setup(dbdir) /usr/share/usb_modeswitch -set setup(dbdir_etc) /etc/usb_modeswitch.d if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} { - Log "\nError: no config database found in /usr/share or /etc. Exit" + Log "\nError: no config database found in $setup(dbdir) or $setup(dbdir_etc). Exit" SafeExit } @@ -285,7 +293,7 @@ if {$config(NoMBIMCheck)==0 && $usb(bNum if [CheckMBIM] { Log " driver for MBIM devices is available" Log "Find MBIM configuration number ..." - if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] { + if [catch {set cfgno [exec $setup(sbindir)/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] { Log "Error when trying to find MBIM configuration, switch to legacy modem mode" } else { set cfgno [string trim $cfgno] @@ -321,7 +329,7 @@ if {$report == ""} { # Now we are actually switching if $flags(logging) { Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)" - catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report + catch {set report [exec $setup(sbindir)/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report Log "\nVerbose debug output of usb_modeswitch and libusb follows" Log "(Note that some USB errors are to be expected in the process)" Log "--------------------------------" @@ -329,7 +337,7 @@ if {$report == ""} { Log "--------------------------------" Log "(end of usb_modeswitch output)\n" } else { - catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report + catch {set report [exec $setup(sbindir)/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report } } @@ -522,12 +530,12 @@ return 1 proc {ParseGlobalConfig} {path} { -global flags +global flags setup set configFile "" if [string length $path] { set places [list $path] } else { - set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch] + set places [list $setup(etcdir)/usb_modeswitch.conf $setup(etcdir)/sysconfig/usb_modeswitch $setup(etcdir)/default/usb_modeswitch] } foreach cfg $places { if [file exists $cfg] { @@ -923,10 +931,12 @@ proc {SysLog} {msg} { global flags if {![info exists flags(logger)]} { - set flags(logger) "" - foreach fn {/bin/logger /usr/bin/logger} { - if [file exists $fn] { - set flags(logger) $fn + set flags(logger) [exec sh -c "command -v logger || true"] + if {$flags(logger) == ""} { + foreach fn {/bin/logger /usr/bin/logger} { + if [file exists $fn] { + set flags(logger) $fn + } } } Log "Logger is $flags(logger)"