chiark / gitweb /
import udev repository
authorKay Sievers <kay.sievers@vrfy.org>
Tue, 3 Apr 2012 19:08:04 +0000 (21:08 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Tue, 3 Apr 2012 19:08:04 +0000 (21:08 +0200)
210 files changed:
1  2 
src/udev/.gitignore
src/udev/.vimrc
src/udev/COPYING
src/udev/ChangeLog
src/udev/INSTALL
src/udev/Makefile.am
src/udev/NEWS
src/udev/README
src/udev/TODO
src/udev/autogen.sh
src/udev/configure.ac
src/udev/m4/.gitignore
src/udev/rules/42-usb-hid-pm.rules
src/udev/rules/50-udev-default.rules
src/udev/rules/60-persistent-alsa.rules
src/udev/rules/60-persistent-input.rules
src/udev/rules/60-persistent-serial.rules
src/udev/rules/60-persistent-storage-tape.rules
src/udev/rules/60-persistent-storage.rules
src/udev/rules/75-net-description.rules
src/udev/rules/75-tty-description.rules
src/udev/rules/78-sound-card.rules
src/udev/rules/80-drivers.rules
src/udev/rules/95-udev-late.rules
src/udev/src/.gitignore
src/udev/src/COPYING
src/udev/src/accelerometer/61-accelerometer.rules
src/udev/src/accelerometer/accelerometer.c
src/udev/src/ata_id/ata_id.c
src/udev/src/cdrom_id/60-cdrom_id.rules
src/udev/src/cdrom_id/cdrom_id.c
src/udev/src/collect/collect.c
src/udev/src/docs/.gitignore
src/udev/src/docs/Makefile.am
src/udev/src/docs/libudev-docs.xml
src/udev/src/docs/libudev-sections.txt
src/udev/src/docs/libudev.types
src/udev/src/docs/version.xml.in
src/udev/src/floppy/60-floppy.rules
src/udev/src/floppy/create_floppy_devices.c
src/udev/src/gudev/.gitignore
src/udev/src/gudev/COPYING
src/udev/src/gudev/docs/.gitignore
src/udev/src/gudev/docs/Makefile.am
src/udev/src/gudev/docs/gudev-docs.xml
src/udev/src/gudev/docs/gudev-sections.txt
src/udev/src/gudev/docs/gudev.types
src/udev/src/gudev/docs/version.xml.in
src/udev/src/gudev/gjs-example.js
src/udev/src/gudev/gudev-1.0.pc.in
src/udev/src/gudev/gudev.h
src/udev/src/gudev/gudevclient.c
src/udev/src/gudev/gudevclient.h
src/udev/src/gudev/gudevdevice.c
src/udev/src/gudev/gudevdevice.h
src/udev/src/gudev/gudevenumerator.c
src/udev/src/gudev/gudevenumerator.h
src/udev/src/gudev/gudevenums.h
src/udev/src/gudev/gudevenumtypes.c.template
src/udev/src/gudev/gudevenumtypes.h.template
src/udev/src/gudev/gudevmarshal.list
src/udev/src/gudev/gudevprivate.h
src/udev/src/gudev/gudevtypes.h
src/udev/src/gudev/seed-example-enum.js
src/udev/src/gudev/seed-example.js
src/udev/src/keymap/.gitignore
src/udev/src/keymap/95-keyboard-force-release.rules
src/udev/src/keymap/95-keymap.rules
src/udev/src/keymap/README.keymap.txt
src/udev/src/keymap/check-keymaps.sh
src/udev/src/keymap/findkeyboards
src/udev/src/keymap/force-release-maps/common-volume-keys
src/udev/src/keymap/force-release-maps/dell-touchpad
src/udev/src/keymap/force-release-maps/hp-other
src/udev/src/keymap/force-release-maps/samsung-90x3a
src/udev/src/keymap/force-release-maps/samsung-other
src/udev/src/keymap/keyboard-force-release.sh.in
src/udev/src/keymap/keymap.c
src/udev/src/keymap/keymaps/acer
src/udev/src/keymap/keymaps/acer-aspire_5720
src/udev/src/keymap/keymaps/acer-aspire_5920g
src/udev/src/keymap/keymaps/acer-aspire_6920
src/udev/src/keymap/keymaps/acer-aspire_8930
src/udev/src/keymap/keymaps/acer-travelmate_c300
src/udev/src/keymap/keymaps/asus
src/udev/src/keymap/keymaps/compaq-e_evo
src/udev/src/keymap/keymaps/dell
src/udev/src/keymap/keymaps/dell-latitude-xt2
src/udev/src/keymap/keymaps/everex-xt5000
src/udev/src/keymap/keymaps/fujitsu-amilo_li_2732
src/udev/src/keymap/keymaps/fujitsu-amilo_pa_2548
src/udev/src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505
src/udev/src/keymap/keymaps/fujitsu-amilo_pro_v3205
src/udev/src/keymap/keymaps/fujitsu-amilo_si_1520
src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v5
src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v6
src/udev/src/keymap/keymaps/genius-slimstar-320
src/udev/src/keymap/keymaps/hewlett-packard
src/udev/src/keymap/keymaps/hewlett-packard-2510p_2530p
src/udev/src/keymap/keymaps/hewlett-packard-compaq_elitebook
src/udev/src/keymap/keymaps/hewlett-packard-pavilion
src/udev/src/keymap/keymaps/hewlett-packard-presario-2100
src/udev/src/keymap/keymaps/hewlett-packard-tablet
src/udev/src/keymap/keymaps/hewlett-packard-tx2
src/udev/src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint
src/udev/src/keymap/keymaps/inventec-symphony_6.0_7.0
src/udev/src/keymap/keymaps/lenovo-3000
src/udev/src/keymap/keymaps/lenovo-ideapad
src/udev/src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint
src/udev/src/keymap/keymaps/lenovo-thinkpad_x200_tablet
src/udev/src/keymap/keymaps/lenovo-thinkpad_x6_tablet
src/udev/src/keymap/keymaps/lg-x110
src/udev/src/keymap/keymaps/logitech-wave
src/udev/src/keymap/keymaps/logitech-wave-cordless
src/udev/src/keymap/keymaps/logitech-wave-pro-cordless
src/udev/src/keymap/keymaps/maxdata-pro_7000
src/udev/src/keymap/keymaps/medion-fid2060
src/udev/src/keymap/keymaps/medionnb-a555
src/udev/src/keymap/keymaps/micro-star
src/udev/src/keymap/keymaps/module-asus-w3j
src/udev/src/keymap/keymaps/module-ibm
src/udev/src/keymap/keymaps/module-lenovo
src/udev/src/keymap/keymaps/module-sony
src/udev/src/keymap/keymaps/module-sony-old
src/udev/src/keymap/keymaps/module-sony-vgn
src/udev/src/keymap/keymaps/olpc-xo
src/udev/src/keymap/keymaps/onkyo
src/udev/src/keymap/keymaps/oqo-model2
src/udev/src/keymap/keymaps/samsung-90x3a
src/udev/src/keymap/keymaps/samsung-other
src/udev/src/keymap/keymaps/samsung-sq1us
src/udev/src/keymap/keymaps/samsung-sx20s
src/udev/src/keymap/keymaps/toshiba-satellite_a100
src/udev/src/keymap/keymaps/toshiba-satellite_a110
src/udev/src/keymap/keymaps/toshiba-satellite_m30x
src/udev/src/keymap/keymaps/zepto-znote
src/udev/src/libudev-device-private.c
src/udev/src/libudev-device.c
src/udev/src/libudev-enumerate.c
src/udev/src/libudev-list.c
src/udev/src/libudev-monitor.c
src/udev/src/libudev-private.h
src/udev/src/libudev-queue-private.c
src/udev/src/libudev-queue.c
src/udev/src/libudev-selinux-private.c
src/udev/src/libudev-util-private.c
src/udev/src/libudev-util.c
src/udev/src/libudev.c
src/udev/src/libudev.h
src/udev/src/libudev.pc.in
src/udev/src/mtd_probe/75-probe_mtd.rules
src/udev/src/mtd_probe/mtd_probe.c
src/udev/src/mtd_probe/mtd_probe.h
src/udev/src/mtd_probe/probe_smartmedia.c
src/udev/src/rule_generator/75-cd-aliases-generator.rules
src/udev/src/rule_generator/75-persistent-net-generator.rules
src/udev/src/rule_generator/rule_generator.functions
src/udev/src/rule_generator/write_cd_rules
src/udev/src/rule_generator/write_net_rules
src/udev/src/scsi_id/.gitignore
src/udev/src/scsi_id/README
src/udev/src/scsi_id/scsi.h
src/udev/src/scsi_id/scsi_id.8
src/udev/src/scsi_id/scsi_id.c
src/udev/src/scsi_id/scsi_id.h
src/udev/src/scsi_id/scsi_serial.c
src/udev/src/sd-daemon.c
src/udev/src/sd-daemon.h
src/udev/src/test-libudev.c
src/udev/src/test-udev.c
src/udev/src/udev-builtin-blkid.c
src/udev/src/udev-builtin-firmware.c
src/udev/src/udev-builtin-hwdb.c
src/udev/src/udev-builtin-input_id.c
src/udev/src/udev-builtin-kmod.c
src/udev/src/udev-builtin-path_id.c
src/udev/src/udev-builtin-usb_id.c
src/udev/src/udev-builtin.c
src/udev/src/udev-control.socket
src/udev/src/udev-ctrl.c
src/udev/src/udev-event.c
src/udev/src/udev-kernel.socket
src/udev/src/udev-node.c
src/udev/src/udev-rules.c
src/udev/src/udev-settle.service.in
src/udev/src/udev-trigger.service.in
src/udev/src/udev-watch.c
src/udev/src/udev.conf
src/udev/src/udev.h
src/udev/src/udev.pc.in
src/udev/src/udev.service.in
src/udev/src/udev.xml
src/udev/src/udevadm-control.c
src/udev/src/udevadm-info.c
src/udev/src/udevadm-monitor.c
src/udev/src/udevadm-settle.c
src/udev/src/udevadm-test-builtin.c
src/udev/src/udevadm-test.c
src/udev/src/udevadm-trigger.c
src/udev/src/udevadm.c
src/udev/src/udevadm.xml
src/udev/src/udevd.c
src/udev/src/udevd.xml
src/udev/src/v4l_id/60-persistent-v4l.rules
src/udev/src/v4l_id/v4l_id.c
src/udev/test/.gitignore
src/udev/test/rule-syntax-check.py
src/udev/test/rules-test.sh
src/udev/test/sys.tar.xz
src/udev/test/udev-test.pl

index 0000000,0000000..fa3500b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,40 @@@
++*~
++*.o
++*.a
++*.lo
++*.la
++.libs
++.deps
++.dirstamp
++Makefile
++Makefile.in
++/aclocal.m4
++/autom4te.cache
++/config.h
++/config.h.in
++/config.log
++/config.status
++/config.guess
++/config.sub
++/libtool
++/ltmain.sh
++/install-sh
++/missing
++/configure
++/stamp-h1
++/depcomp
++/gtk-doc.make
++/build-aux
++/udev-test-install
++/udevd
++/udevadm
++/test-udev
++/test-libudev
++/accelerometer
++/ata_id
++/cdrom_id
++/collect
++/mtd_probe
++/v4l_id
++/keymap
++/scsi_id
diff --cc src/udev/.vimrc
index 0000000,0000000..366fbdc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++" 'set exrc' in ~/.vimrc will read .vimrc from the current directory
++set tabstop=8
++set shiftwidth=8
++set expandtab
index 0000000,d159169..d159169
mode 000000,100644..100644
--- /dev/null
index 0000000,dd58138..dd58138
mode 000000,100644..100644
--- /dev/null
index 0000000,0a34e77..0a34e77
mode 000000,100644..100644
--- /dev/null
index 0000000,0000000..1c7f86b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,712 @@@
++# Copyright (C) 2008-2012 Kay Sievers <kay.sievers@vrfy.org>
++# Copyright (C) 2009 Diego Elio 'Flameeyes' Pettenò <flameeyes@gmail.com>
++
++SUBDIRS = .
++
++ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
++
++AM_MAKEFLAGS = --no-print-directory
++
++LIBUDEV_CURRENT=13
++LIBUDEV_REVISION=2
++LIBUDEV_AGE=13
++
++LIBGUDEV_CURRENT=1
++LIBGUDEV_REVISION=1
++LIBGUDEV_AGE=1
++
++AM_CPPFLAGS = \
++      -include $(top_builddir)/config.h \
++      -I$(top_srcdir)/src \
++      -DSYSCONFDIR=\""$(sysconfdir)"\" \
++      -DPKGLIBEXECDIR=\""$(libexecdir)/udev"\"
++
++AM_CFLAGS = \
++      ${my_CFLAGS} \
++      -fvisibility=hidden \
++      -ffunction-sections \
++      -fdata-sections
++
++AM_LDFLAGS = \
++      -Wl,--gc-sections \
++      -Wl,--as-needed
++
++DISTCHECK_CONFIGURE_FLAGS = \
++      --enable-debug \
++      --enable-rule_generator \
++      --enable-floppy \
++      --with-selinux \
++      --enable-gtk-doc \
++      --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
++
++BUILT_SOURCES =
++EXTRA_DIST =
++CLEANFILES =
++INSTALL_EXEC_HOOKS =
++INSTALL_DATA_HOOKS =
++UNINSTALL_EXEC_HOOKS =
++DISTCHECK_HOOKS =
++DISTCLEAN_LOCAL_HOOKS =
++
++udevhomedir = $(libexecdir)/udev
++udevhome_SCRIPTS =
++dist_udevhome_SCRIPTS =
++dist_udevhome_DATA =
++dist_man_MANS =
++
++SED_PROCESS = \
++      $(AM_V_GEN)$(MKDIR_P) $(dir $@) && $(SED) \
++      -e 's,@VERSION\@,$(VERSION),g' \
++      -e 's,@prefix\@,$(prefix),g' \
++      -e 's,@rootprefix\@,$(rootprefix),g' \
++      -e 's,@exec_prefix\@,$(exec_prefix),g' \
++      -e 's,@libdir\@,$(libdir),g' \
++      -e 's,@includedir\@,$(includedir),g' \
++      -e 's,@bindir\@,$(bindir),g' \
++      -e 's,@pkglibexecdir\@,$(libexecdir)/udev,g' \
++      < $< > $@ || rm $@
++
++%.pc: %.pc.in Makefile
++      $(SED_PROCESS)
++
++%.rules: %.rules.in Makefile
++      $(SED_PROCESS)
++
++%.service: %.service.in Makefile
++      $(SED_PROCESS)
++
++%.sh: %.sh.in Makefile
++      $(SED_PROCESS)
++      $(AM_V_GEN)chmod +x $@
++
++%.pl: %.pl.in Makefile
++      $(SED_PROCESS)
++      $(AM_V_GEN)chmod +x $@
++
++# ------------------------------------------------------------------------------
++SUBDIRS += src/docs
++
++include_HEADERS = src/libudev.h
++lib_LTLIBRARIES = libudev.la
++noinst_LTLIBRARIES = libudev-private.la
++
++libudev_la_SOURCES =\
++      src/libudev-private.h \
++      src/libudev.c \
++      src/libudev-list.c \
++      src/libudev-util.c \
++      src/libudev-device.c \
++      src/libudev-enumerate.c \
++      src/libudev-monitor.c \
++      src/libudev-queue.c
++
++libudev_la_LDFLAGS = \
++      $(AM_LDFLAGS) \
++      -version-info $(LIBUDEV_CURRENT):$(LIBUDEV_REVISION):$(LIBUDEV_AGE)
++
++libudev_private_la_SOURCES =\
++      $(libudev_la_SOURCES) \
++      src/libudev-util-private.c \
++      src/libudev-device-private.c \
++      src/libudev-queue-private.c
++
++if WITH_SELINUX
++libudev_private_la_SOURCES += src/libudev-selinux-private.c
++libudev_private_la_LIBADD = $(SELINUX_LIBS)
++endif
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = src/libudev.pc
++EXTRA_DIST += src/libudev.pc.in
++CLEANFILES += src/libudev.pc
++
++EXTRA_DIST += src/COPYING
++# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed
++libudev-install-move-hook:
++      if test "$(libdir)" != "$(rootlib_execdir)"; then \
++              mkdir -p $(DESTDIR)$(rootlib_execdir) && \
++              so_img_name=$$(readlink $(DESTDIR)$(libdir)/libudev.so) && \
++              so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \
++              ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libudev.so && \
++              mv $(DESTDIR)$(libdir)/libudev.so.* $(DESTDIR)$(rootlib_execdir); \
++      fi
++
++libudev-uninstall-move-hook:
++      rm -f $(DESTDIR)$(rootlib_execdir)/libudev.so*
++
++INSTALL_EXEC_HOOKS += libudev-install-move-hook
++UNINSTALL_EXEC_HOOKS += libudev-uninstall-move-hook
++
++# ------------------------------------------------------------------------------
++udev-confdirs:
++      -mkdir -p $(DESTDIR)$(sysconfdir)/udev/rules.d
++      -mkdir -p $(DESTDIR)$(libexecdir)/udev/devices
++
++INSTALL_DATA_HOOKS += udev-confdirs
++
++udevrulesdir = $(libexecdir)/udev/rules.d
++dist_udevrules_DATA = \
++      rules/42-usb-hid-pm.rules \
++      rules/50-udev-default.rules \
++      rules/60-persistent-storage-tape.rules \
++      rules/60-persistent-serial.rules \
++      rules/60-persistent-input.rules \
++      rules/60-persistent-alsa.rules \
++      rules/60-persistent-storage.rules \
++      rules/75-net-description.rules \
++      rules/75-tty-description.rules \
++      rules/78-sound-card.rules \
++      rules/80-drivers.rules \
++      rules/95-udev-late.rules
++
++udevconfdir = $(sysconfdir)/udev
++dist_udevconf_DATA = src/udev.conf
++
++sharepkgconfigdir = $(datadir)/pkgconfig
++sharepkgconfig_DATA = src/udev.pc
++EXTRA_DIST += src/udev.pc.in
++CLEANFILES += src/udev.pc
++
++if WITH_SYSTEMD
++dist_systemdsystemunit_DATA = \
++      src/udev-control.socket \
++      src/udev-kernel.socket
++
++systemdsystemunit_DATA = \
++      src/udev.service \
++      src/udev-trigger.service \
++      src/udev-settle.service
++
++EXTRA_DIST += \
++      src/udev.service.in \
++      src/udev-trigger.service.in \
++      src/udev-settle.service.in
++
++CLEANFILES += \
++      src/udev.service \
++      src/udev-trigger.service \
++      src/udev-settle.service
++
++systemd-install-hook:
++      mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants
++      ln -sf ../udev-control.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-control.socket
++      ln -sf ../udev-kernel.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-kernel.socket
++      mkdir -p $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants
++      ln -sf ../udev.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev.service
++      ln -sf ../udev-trigger.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev-trigger.service
++
++INSTALL_DATA_HOOKS += systemd-install-hook
++endif
++
++bin_PROGRAMS = \
++      udevadm
++
++pkglibexec_PROGRAMS = \
++      udevd
++
++udev_common_sources = \
++      src/udev.h \
++      src/udev-event.c \
++      src/udev-watch.c \
++      src/udev-node.c \
++      src/udev-rules.c \
++      src/udev-ctrl.c \
++      src/udev-builtin.c \
++      src/udev-builtin-blkid.c \
++      src/udev-builtin-firmware.c \
++      src/udev-builtin-hwdb.c \
++      src/udev-builtin-input_id.c \
++      src/udev-builtin-kmod.c \
++      src/udev-builtin-path_id.c \
++      src/udev-builtin-usb_id.c
++
++udev_common_CFLAGS = \
++      $(BLKID_CFLAGS) \
++      $(KMOD_CFLAGS)
++
++udev_common_LDADD = \
++      libudev-private.la \
++      $(BLKID_LIBS) \
++      $(KMOD_LIBS)
++
++udev_common_CPPFLAGS = \
++      $(AM_CPPFLAGS) \
++      -DFIRMWARE_PATH="$(FIRMWARE_PATH)" \
++      -DUSB_DATABASE=\"$(USB_DATABASE)\" -DPCI_DATABASE=\"$(PCI_DATABASE)\"
++
++udevd_SOURCES = \
++      $(udev_common_sources) \
++      src/udevd.c \
++      src/sd-daemon.h \
++      src/sd-daemon.c
++udevd_CFLAGS = $(udev_common_CFLAGS)
++udevd_LDADD = $(udev_common_LDADD)
++udevd_CPPFLAGS = $(udev_common_CPPFLAGS)
++
++udevadm_SOURCES = \
++      $(udev_common_sources) \
++      src/udevadm.c \
++      src/udevadm-info.c \
++      src/udevadm-control.c \
++      src/udevadm-monitor.c \
++      src/udevadm-settle.c \
++      src/udevadm-trigger.c \
++      src/udevadm-test.c \
++      src/udevadm-test-builtin.c
++udevadm_CFLAGS = $(udev_common_CFLAGS)
++udevadm_LDADD = $(udev_common_LDADD)
++udevadm_CPPFLAGS = $(udev_common_CPPFLAGS)
++
++# ------------------------------------------------------------------------------
++if ENABLE_MANPAGES
++dist_man_MANS += \
++      src/udev.7 \
++      src/udevadm.8 \
++      src/udevd.8
++endif
++
++EXTRA_DIST += \
++      src/udev.xml \
++      src/udevadm.xml \
++      src/udevd.xml
++
++if HAVE_XSLTPROC
++dist_noinst_DATA = \
++      src/udev.html \
++      src/udevadm.html \
++      src/udevd.html
++
++src/%.7 src/%.8 : src/%.xml
++      $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
++
++src/%.html : src/%.xml
++      $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/xhtml-1_1/docbook.xsl $<
++endif
++
++# ------------------------------------------------------------------------------
++TESTS = \
++      test/udev-test.pl \
++      test/rules-test.sh
++
++check_PROGRAMS = \
++      test-libudev \
++      test-udev
++
++test_libudev_SOURCES = src/test-libudev.c
++test_libudev_LDADD = libudev.la
++
++test_udev_SOURCES = \
++      $(udev_common_sources) \
++      src/test-udev.c
++test_udev_CFLAGS = $(udev_common_CFLAGS)
++test_udev_LDADD = $(udev_common_LDADD)
++test_udev_CPPFLAGS = $(udev_common_CPPFLAGS)
++test_udev_DEPENDENCIES = test/sys
++
++# packed sysfs test tree
++test/sys:
++      $(AM_V_GEN)mkdir -p test && tar -C test/ -xJf $(top_srcdir)/test/sys.tar.xz
++
++test-sys-distclean:
++      -rm -rf test/sys
++DISTCLEAN_LOCAL_HOOKS += test-sys-distclean
++
++EXTRA_DIST += test/sys.tar.xz
++
++# ------------------------------------------------------------------------------
++ata_id_SOURCES = src/ata_id/ata_id.c
++ata_id_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += ata_id
++
++# ------------------------------------------------------------------------------
++cdrom_id_SOURCES = src/cdrom_id/cdrom_id.c
++cdrom_id_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += cdrom_id
++dist_udevrules_DATA += src/cdrom_id/60-cdrom_id.rules
++
++# ------------------------------------------------------------------------------
++collect_SOURCES = src/collect/collect.c
++collect_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += collect
++
++# ------------------------------------------------------------------------------
++scsi_id_SOURCES =\
++      src/scsi_id/scsi_id.c \
++      src/scsi_id/scsi_serial.c \
++      src/scsi_id/scsi.h \
++      src/scsi_id/scsi_id.h
++scsi_id_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += scsi_id
++dist_man_MANS += src/scsi_id/scsi_id.8
++EXTRA_DIST += src/scsi_id/README
++
++# ------------------------------------------------------------------------------
++v4l_id_SOURCES = src/v4l_id/v4l_id.c
++v4l_id_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += v4l_id
++dist_udevrules_DATA += src/v4l_id/60-persistent-v4l.rules
++
++# ------------------------------------------------------------------------------
++accelerometer_SOURCES = src/accelerometer/accelerometer.c
++accelerometer_LDADD = libudev-private.la -lm
++pkglibexec_PROGRAMS += accelerometer
++dist_udevrules_DATA += src/accelerometer/61-accelerometer.rules
++
++# ------------------------------------------------------------------------------
++if ENABLE_GUDEV
++SUBDIRS += src/gudev/docs
++
++libgudev_includedir=$(includedir)/gudev-1.0/gudev
++libgudev_include_HEADERS = \
++      src/gudev/gudev.h \
++      src/gudev/gudevenums.h \
++      src/gudev/gudevenumtypes.h \
++      src/gudev/gudevtypes.h \
++      src/gudev/gudevclient.h \
++      src/gudev/gudevdevice.h \
++      src/gudev/gudevenumerator.h
++
++lib_LTLIBRARIES += libgudev-1.0.la
++
++pkgconfig_DATA += src/gudev/gudev-1.0.pc
++EXTRA_DIST += src/gudev/gudev-1.0.pc.in
++CLEANFILES += src/gudev/gudev-1.0.pc
++
++libgudev_1_0_la_SOURCES = \
++      src/gudev/gudevenums.h \
++      src/gudev/gudevenumtypes.h \
++      src/gudev/gudevenumtypes.h\
++      src/gudev/gudevtypes.h \
++      src/gudev/gudevclient.h \
++      src/gudev/gudevclient.c \
++      src/gudev/gudevdevice.h \
++      src/gudev/gudevdevice.c \
++      src/gudev/gudevenumerator.h \
++      src/gudev/gudevenumerator.c \
++      src/gudev/gudevprivate.h
++
++nodist_libgudev_1_0_la_SOURCES = \
++      src/gudev/gudevmarshal.h \
++      src/gudev/gudevmarshal.c \
++      src/gudev/gudevenumtypes.h \
++      src/gudev/gudevenumtypes.c
++BUILT_SOURCES += $(nodist_libgudev_1_0_la_SOURCES)
++
++libgudev_1_0_la_CPPFLAGS = \
++      $(AM_CPPFLAGS) \
++      -I$(top_builddir)/src\
++      -I$(top_srcdir)/src\
++      -I$(top_builddir)/src/gudev \
++      -I$(top_srcdir)/src/gudev \
++      -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT \
++      -D_GUDEV_COMPILATION \
++      -DG_LOG_DOMAIN=\"GUdev\"
++
++libgudev_1_0_la_CFLAGS = \
++      -fvisibility=default \
++      $(GLIB_CFLAGS)
++
++libgudev_1_0_la_LIBADD = libudev.la $(GLIB_LIBS)
++
++libgudev_1_0_la_LDFLAGS = \
++      -version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \
++      -export-dynamic -no-undefined \
++      -export-symbols-regex '^g_udev_.*'
++
++EXTRA_DIST += \
++      src/gudev/COPYING \
++      src/gudev/gudevmarshal.list \
++      src/gudev/gudevenumtypes.h.template \
++      src/gudev/gudevenumtypes.c.template \
++      src/gudev/gjs-example.js \
++      src/gudev/seed-example-enum.js \
++      src/gudev/seed-example.js
++
++src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list
++      $(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@
++
++src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list
++      $(AM_V_GEN)echo "#include \"gudevmarshal.h\"" > $@ && \
++      glib-genmarshal $< --prefix=g_udev_marshal --body >> $@
++
++src/gudev/gudevenumtypes.h: src/gudev/gudevenumtypes.h.template src/gudev/gudevenums.h
++      $(AM_V_GEN)glib-mkenums --template $^ > \
++          $@.tmp && mv $@.tmp $@
++
++src/gudev/gudevenumtypes.c: src/gudev/gudevenumtypes.c.template src/gudev/gudevenums.h
++      $(AM_V_GEN)glib-mkenums --template $^ > \
++          $@.tmp && mv $@.tmp $@
++
++if ENABLE_INTROSPECTION
++src/gudev/GUdev-1.0.gir: libgudev-1.0.la $(G_IR_SCANNER)
++      $(AM_V_GEN)$(G_IR_SCANNER) -v \
++              --warn-all \
++              --namespace GUdev \
++              --nsversion=1.0 \
++              --include=GObject-2.0 \
++              --library=gudev-1.0 \
++              --library-path=$(top_builddir)/src \
++              --library-path=$(top_builddir)/src/gudev \
++              --output $@ \
++              --pkg=glib-2.0 \
++              --pkg=gobject-2.0 \
++              --pkg-export=gudev-1.0 \
++              --c-include=gudev/gudev.h \
++              -I$(top_srcdir)/src/\
++              -I$(top_builddir)/src/\
++              -D_GUDEV_COMPILATION \
++              -D_GUDEV_WORK_AROUND_DEV_T_BUG \
++              $(top_srcdir)/src/gudev/gudev.h \
++              $(top_srcdir)/src/gudev/gudevtypes.h \
++              $(top_srcdir)/src/gudev/gudevenums.h \
++              $(or $(wildcard $(top_builddir)/src/gudev/gudevenumtypes.h),$(top_srcdir)/src/gudev/gudevenumtypes.h) \
++              $(top_srcdir)/src/gudev/gudevclient.h \
++              $(top_srcdir)/src/gudev/gudevdevice.h \
++              $(top_srcdir)/src/gudev/gudevenumerator.h \
++              $(top_srcdir)/src/gudev/gudevclient.c \
++              $(top_srcdir)/src/gudev/gudevdevice.c \
++              $(top_srcdir)/src/gudev/gudevenumerator.c
++
++src/gudev/GUdev-1.0.typelib: src/gudev/GUdev-1.0.gir $(G_IR_COMPILER)
++      $(AM_V_GEN)g-ir-compiler $< -o $@
++
++girdir = $(GIRDIR)
++gir_DATA = src/gudev/GUdev-1.0.gir
++
++typelibsdir = $(GIRTYPELIBDIR)
++typelibs_DATA = src/gudev/GUdev-1.0.typelib
++
++CLEANFILES += $(gir_DATA) $(typelibs_DATA)
++endif # ENABLE_INTROSPECTION
++
++# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed
++libgudev-install-move-hook:
++      if test "$(libdir)" != "$(rootlib_execdir)"; then \
++              mkdir -p $(DESTDIR)$(rootlib_execdir) && \
++              so_img_name=$$(readlink $(DESTDIR)$(libdir)/libgudev-1.0.so) && \
++              so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \
++              ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libgudev-1.0.so && \
++              mv $(DESTDIR)$(libdir)/libgudev-1.0.so.* $(DESTDIR)$(rootlib_execdir); \
++      fi
++
++libgudev-uninstall-move-hook:
++      rm -f $(DESTDIR)$(rootlib_execdir)/libgudev-1.0.so*
++
++INSTALL_EXEC_HOOKS += libgudev-install-move-hook
++UNINSTALL_EXEC_HOOKS += libgudev-uninstall-move-hook
++endif
++
++# ------------------------------------------------------------------------------
++if ENABLE_KEYMAP
++keymap_SOURCES = src/keymap/keymap.c
++keymap_CPPFLAGS = $(AM_CPPFLAGS) -I src/keymap
++nodist_keymap_SOURCES = \
++      src/keymap/keys-from-name.h \
++      src/keymap/keys-to-name.h
++BUILT_SOURCES += $(nodist_keymap_SOURCES)
++
++pkglibexec_PROGRAMS += keymap
++dist_doc_DATA = src/keymap/README.keymap.txt
++
++dist_udevrules_DATA += \
++      src/keymap/95-keymap.rules \
++      src/keymap/95-keyboard-force-release.rules
++
++dist_udevhome_SCRIPTS += src/keymap/findkeyboards
++udevhome_SCRIPTS += src/keymap/keyboard-force-release.sh
++
++EXTRA_DIST += \
++      src/keymap/check-keymaps.sh \
++      src/keymap/keyboard-force-release.sh.in
++
++CLEANFILES += \
++      src/keymap/keys.txt \
++      src/keymap/keys-from-name.gperf \
++      src/keymap/keyboard-force-release.sh
++
++udevkeymapdir = $(libexecdir)/udev/keymaps
++dist_udevkeymap_DATA = \
++      src/keymap/keymaps/acer \
++      src/keymap/keymaps/acer-aspire_5720 \
++      src/keymap/keymaps/acer-aspire_8930 \
++      src/keymap/keymaps/acer-aspire_5920g \
++      src/keymap/keymaps/acer-aspire_6920 \
++      src/keymap/keymaps/acer-travelmate_c300 \
++      src/keymap/keymaps/asus \
++      src/keymap/keymaps/compaq-e_evo \
++      src/keymap/keymaps/dell \
++      src/keymap/keymaps/dell-latitude-xt2 \
++      src/keymap/keymaps/everex-xt5000 \
++      src/keymap/keymaps/fujitsu-amilo_li_2732 \
++      src/keymap/keymaps/fujitsu-amilo_pa_2548 \
++      src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 \
++      src/keymap/keymaps/fujitsu-amilo_pro_v3205 \
++      src/keymap/keymaps/fujitsu-amilo_si_1520 \
++      src/keymap/keymaps/fujitsu-esprimo_mobile_v5 \
++      src/keymap/keymaps/fujitsu-esprimo_mobile_v6 \
++      src/keymap/keymaps/genius-slimstar-320 \
++      src/keymap/keymaps/hewlett-packard \
++      src/keymap/keymaps/hewlett-packard-2510p_2530p \
++      src/keymap/keymaps/hewlett-packard-compaq_elitebook \
++      src/keymap/keymaps/hewlett-packard-pavilion \
++      src/keymap/keymaps/hewlett-packard-presario-2100 \
++      src/keymap/keymaps/hewlett-packard-tablet \
++      src/keymap/keymaps/hewlett-packard-tx2 \
++      src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
++      src/keymap/keymaps/inventec-symphony_6.0_7.0 \
++      src/keymap/keymaps/lenovo-3000 \
++      src/keymap/keymaps/lenovo-ideapad \
++      src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \
++      src/keymap/keymaps/lenovo-thinkpad_x6_tablet \
++      src/keymap/keymaps/lenovo-thinkpad_x200_tablet \
++      src/keymap/keymaps/lg-x110 \
++      src/keymap/keymaps/logitech-wave \
++      src/keymap/keymaps/logitech-wave-cordless \
++      src/keymap/keymaps/logitech-wave-pro-cordless \
++      src/keymap/keymaps/maxdata-pro_7000 \
++      src/keymap/keymaps/medion-fid2060 \
++      src/keymap/keymaps/medionnb-a555 \
++      src/keymap/keymaps/micro-star \
++      src/keymap/keymaps/module-asus-w3j \
++      src/keymap/keymaps/module-ibm \
++      src/keymap/keymaps/module-lenovo \
++      src/keymap/keymaps/module-sony \
++      src/keymap/keymaps/module-sony-old \
++      src/keymap/keymaps/module-sony-vgn \
++      src/keymap/keymaps/olpc-xo \
++      src/keymap/keymaps/onkyo \
++      src/keymap/keymaps/oqo-model2 \
++      src/keymap/keymaps/samsung-other \
++      src/keymap/keymaps/samsung-90x3a \
++      src/keymap/keymaps/samsung-sq1us \
++      src/keymap/keymaps/samsung-sx20s \
++      src/keymap/keymaps/toshiba-satellite_a100 \
++      src/keymap/keymaps/toshiba-satellite_a110 \
++      src/keymap/keymaps/toshiba-satellite_m30x \
++      src/keymap/keymaps/zepto-znote
++
++udevkeymapforcereldir = $(libexecdir)/udev/keymaps/force-release
++dist_udevkeymapforcerel_DATA = \
++      src/keymap/force-release-maps/dell-touchpad \
++      src/keymap/force-release-maps/hp-other \
++      src/keymap/force-release-maps/samsung-other \
++      src/keymap/force-release-maps/samsung-90x3a \
++      src/keymap/force-release-maps/common-volume-keys
++
++src/keymap/keys.txt: $(INCLUDE_PREFIX)/linux/input.h
++      $(AM_V_at)mkdir -p src/keymap
++      $(AM_V_GEN)$(AWK) '/^#define.*KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' < $< | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
++
++src/keymap/keys-from-name.gperf: src/keymap/keys.txt
++      $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@
++
++src/keymap/keys-from-name.h: src/keymap/keys-from-name.gperf Makefile
++      $(AM_V_GEN)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@
++
++src/keymap/keys-to-name.h: src/keymap/keys.txt Makefile
++      $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
++
++keymaps-distcheck-hook: src/keymap/keys.txt
++      $(top_srcdir)/src/keymap/check-keymaps.sh $(top_srcdir) $^
++DISTCHECK_HOOKS += keymaps-distcheck-hook
++endif
++
++if ENABLE_MTD_PROBE
++# ------------------------------------------------------------------------------
++mtd_probe_SOURCES =  \
++      src/mtd_probe/mtd_probe.c \
++      src/mtd_probe/mtd_probe.h \
++      src/mtd_probe/probe_smartmedia.c
++mtd_probe_CPPFLAGS = $(AM_CPPFLAGS)
++dist_udevrules_DATA += src/mtd_probe/75-probe_mtd.rules
++pkglibexec_PROGRAMS += mtd_probe
++endif
++
++# ------------------------------------------------------------------------------
++if ENABLE_RULE_GENERATOR
++dist_udevhome_SCRIPTS += \
++      src/rule_generator/write_cd_rules \
++      src/rule_generator/write_net_rules
++
++dist_udevhome_DATA += \
++      src/rule_generator/rule_generator.functions
++
++dist_udevrules_DATA += \
++      src/rule_generator/75-cd-aliases-generator.rules \
++      src/rule_generator/75-persistent-net-generator.rules
++endif
++
++# ------------------------------------------------------------------------------
++if ENABLE_FLOPPY
++create_floppy_devices_SOURCES = src/floppy/create_floppy_devices.c
++create_floppy_devices_LDADD = libudev-private.la
++pkglibexec_PROGRAMS += create_floppy_devices
++dist_udevrules_DATA += src/floppy/60-floppy.rules
++endif
++
++# ------------------------------------------------------------------------------
++clean-local:
++      rm -rf udev-test-install
++
++distclean-local:
++      rm -rf autom4te.cache
++
++EXTRA_DIST += \
++      $(TESTS) \
++      test/rule-syntax-check.py
++
++CLEANFILES += \
++      $(BUILT_SOURCES)
++
++install-exec-hook: $(INSTALL_EXEC_HOOKS)
++
++install-data-hook: $(INSTALL_DATA_HOOKS)
++
++uninstall-hook: $(UNINSTALL_EXEC_HOOKS)
++
++distcheck-hook: $(DISTCHECK_HOOKS)
++
++distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
++
++# ------------------------------------------------------------------------------
++PREVIOUS_VERSION = `expr $(VERSION) - 1`
++changelog:
++      @ head -1 ChangeLog | grep -q "to v$(PREVIOUS_VERSION)"
++      @ mv ChangeLog ChangeLog.tmp
++      @ echo "Summary of changes from v$(PREVIOUS_VERSION) to v$(VERSION)" >> ChangeLog
++      @ echo "============================================" >> ChangeLog
++      @ echo >> ChangeLog
++      @ git log --pretty=short $(PREVIOUS_VERSION)..HEAD | git shortlog  >> ChangeLog
++      @ echo >> ChangeLog
++      @ cat ChangeLog
++      @ cat ChangeLog.tmp >> ChangeLog
++      @ rm ChangeLog.tmp
++
++test-install:
++      rm -rf $(PWD)/udev-test-install/
++      make DESTDIR=$(PWD)/udev-test-install install
++      tree $(PWD)/udev-test-install/
++
++git-release:
++      head -1 ChangeLog | grep -q "to v$(VERSION)"
++      head -1 NEWS | grep -q "udev $(VERSION)"
++      git commit -a -m "release $(VERSION)"
++      git tag -m "udev $(VERSION)" -s $(VERSION)
++      git gc --prune=0
++
++git-sync:
++      git push
++      git push --tags
++
++tar-sync:
++      rm -f udev-$(VERSION).tar.sign
++      xz -d -c udev-$(VERSION).tar.xz | gpg --armor --detach-sign --output udev-$(VERSION).tar.sign
++      kup put udev-$(VERSION).tar.xz  udev-$(VERSION).tar.sign /pub/linux/utils/kernel/hotplug/
++
++doc-sync:
++      for i in src/*.html; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done
++      for i in src/*.html; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/udev/; done
++      for i in src/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done
++      for i in src/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/libudev/; done
++      for i in src/gudev/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done
++      for i in src/gudev/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/gudev/; done
diff --cc src/udev/NEWS
index 0000000,0000000..f4f6f4e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1735 @@@
++udev 182
++========
++Rules files in /etc/udev/rules.s/ with the same name as rules files in
++/run/udev/rules.d/ now always have precedence. The stack of files is now:
++/usr/lib (package), /run (runtime, auto-generated), /etc (admin), while
++the later ones override the earlier ones. In other words: the admin has
++always the last say.
++
++USB auto-suspend is now enabled by default for some built-in USB HID
++devices.
++
++/dev/disk/by-path/ links are no longer created for ATA devices behind
++an 'ATA transport class', the logic to extract predictable numbers does
++not exist in the kernel at this moment.
++
++/dev/disk/by-id/scsi-* compatibility links are no longer created for
++ATA devices, they have their own ata-* prefix.
++
++The s390 rule to set mode == 0666 for /dev/z90crypt is is removed from
++the udev tree and will be part of s390utils (or alternatively could be
++done by the kernel driver itself).
++
++The udev-acl tool is no longer provided, it will be part of a future
++ConsoleKit release. On systemd systems, advanced ConsoleKit and udev-acl
++functionality are provided by systemd.
++
++udev 181
++========
++Require kmod version 5.
++
++Provide /dev/cdrom symlink for /dev/sr0.
++
++udev 180
++========
++Fix for ID_PART_ENTRY_* property names, added by the blkid built-in. The
++fix is needed for udisk2 to operate properly.
++
++Fix for skipped rule execution when the kernel has removed the device
++node in /dev again, before the event was even started. The fix is needed
++to run device-mapper/LVM events properly.
++
++Fix for the man page installation, which was skipped when xsltproc was not
++installed.
++
++udev 179
++========
++Bugfix for $name resolution, which broke at least some keymap handling.
++
++udev 178
++========
++Bugfix for the firmware loading behavior with kernel modules which
++try to load firmware in the module_init() path. The blocked event
++runs into a timout now, which should allow the firmware to be loaded.
++
++Bugfix for a wrong DEVNAME= export, which breaks at least the udev-acl
++tool.
++
++Bugfix for missing ID_ properties for GPT partitions.
++
++The RUN+="socket:.." option is deprecated and should not be used. A warning
++during rules parsing is printed now. Services which listen to udev events,
++need to subscribe to the netlink messages with libudev and not let udev block
++in the rules execution until the message is delivered.
++
++udev 177
++========
++Bugfix for rule_generator instalation.
++
++udev 176
++========
++The 'devtmpfs' filesystem is required now, udev will not create or delete
++device nodes anymore, it only adjusts permissions and ownership of device
++nodes and maintains additional symlinks.
++
++A writable /run directory (ususally tmpfs) is required now for a fully
++functional udev, there is no longer a fallback to /dev/.udev.
++
++The default 'configure' install locations have changed. Packages for systems
++with the historic / vs. /usr split need to be adapted, otherwise udev will
++be installed in /usr and not work properly. Example configuration options
++to install things the traditional way are in INSTALL.
++
++The default install location of the 'udevadm' tool moved from 'sbin'
++to /usr/bin. Some tools expect udevadm in 'sbin', a symlink to udevadm
++needs to be manually created if needed, or --bindir=/sbin be specified.
++
++The expected value of '--libexecdir=' has changed and must no longer contain
++the 'udev' directory.
++
++Kernel modules are now loaded directly by linking udev to 'libkmod'. The
++'modprobe' tool is no longer executed by udev.
++
++The 'blkid' tool is no longer executed from udev rules. Udev links
++directly to libblkid now.
++
++Firmware is loaded natively by udev now, the external 'firmware' binary
++is no longer used.
++
++All built-in tools can be listed and tested with 'udevadm test-builtin'.
++
++The 'udevadm control --reload-rules' option has been renamed to '--reload'.
++It now also reloads the kernel module configuration.
++
++The systemd socket files use PassCredentials=yes, which is available in
++systemd version 38.
++
++The udev build system only creates a .xz tarball now.
++
++All tabs in the source code used for indentation are replaced by spaces now. :)
++
++udev 175
++========
++Bugfixes.
++
++udev 174
++========
++Bugfixes.
++
++The udev daemon moved to /lib/udev/udevd. Non-systemd init systems
++and non-dracut initramfs image generators need to change the init
++scripts. Alternatively the udev build needs to move udevd back to
++/sbin or create a symlink in /sbin, which is not done by default.
++
++The path_id, usb_id, input_id tools are built-in commands now and
++the stand-alone tools do not exist anymore. Static lists of file in
++initramfs generators need to be updated. For testing, the commands
++can still be executed standalone with 'udevadm test-builtin <cmd>'.
++
++The fusectl filesystem is no longer mounted directly from udev.
++Systemd systems will take care of mounting fusectl and configfs
++now. Non-systemd systems need to ship their own rule if they
++need these filesystems auto-mounted.
++
++The long deprecated keys: SYSFS=, ID=, BUS= have been removed.
++
++The support for 'udevadm trigger --type=failed, and the
++RUN{fail_event_on_error} attribute was removed.
++
++The udev control socket is now created in /run/udev/control
++and no longer as an abstract namespace one.
++
++The rules to create persistent network interface and cdrom link
++rules automatically in /etc/udev/rules.d/ have been disabled by
++default. Explicit configuration will be required for these use
++cases, udev will no longer try to write any persistent system
++configuration from a device hotplug path.
++
++udev 173
++========
++Bugfixes.
++
++The udev-acl extra is no longer enabled by default now. To enable it,
++--enable-udev_acl needs to be given at ./configure time. On systemd
++systems, the udev-acl rules prevent it from running as the functionality
++has moved to systemd.
++
++udev 172
++========
++Bugfixes.
++
++Udev now enables kernel media-presence polling if available. Part
++of udisks optical drive tray-handling moved to cdrom_id: The tray
++is locked as soon as a media is detected to enable the receiving
++of media-eject-request events. Media-eject-request events will
++eject the media.
++
++Libudev enumerate is now able to enumerate a subtree of a given
++device.
++
++The mobile-action-modeswitch modeswitch tool was deleted. The
++functionality is provided by usb_modeswitch now.
++
++udev 171
++========
++Bugfixes.
++
++The systemd service files require systemd version 28. The systemd
++socket activation make it possible now to start 'udevd' and 'udevadm
++trigger' in parallel.
++
++udev 170
++========
++Fix bug in control message handling, which can lead to a failing
++udevadm control --exit. Thanks to Jürg Billeter for help tracking
++it down.
++
++udev 169
++========
++Bugfixes.
++
++We require at least Linux kernel 2.6.32 now. Some platforms might
++require a later kernel that supports accept4() and similar, or
++need to backport the trivial syscall wiring to the older kernels.
++
++The hid2hci tool moved to the bluez package and was removed.
++
++Many of the extras can be --enable/--disabled at ./configure
++time. The --disable-extras option was removed. Some extras have
++been disabled by default. The current options and their defaults
++can be checked with './configure --help'.
++
++udev 168
++========
++Bugfixes.
++
++Udev logs a warning now if /run is not writable at udevd
++startup. It will still fall back to /dev/.udev, but this is
++now considered a bug.
++
++The running udev daemon can now cleanly shut down with:
++  udevadm control --exit
++
++Udev in initramfs should clean the state of the udev database
++with: udevadm info --cleanup-db which will remove all state left
++behind from events/rules in initramfs. If initramfs uses
++--cleanup-db and device-mapper/LVM, the rules in initramfs need
++to add OPTIONS+="db_persist" for all dm devices. This will
++prevent removal of the udev database for these devices.
++
++Spawned programs by PROGRAM/IMPORT/RUN now have a hard timeout of
++120 seconds per process. If that timeout is reached the spawned
++process will be killed. The event timeout can be overwritten with
++udev rules.
++
++If systemd is used, udev gets now activated by netlink data.
++Systemd will bind the netlink socket which will buffer all data.
++If needed, such setup allows a seemless update of the udev daemon,
++where no event can be lost during a udevd update/restart.
++Packages need to make sure to: systemctl stop udev.socket udev.service
++or 'mask' udev.service during the upgrade to prevent any unwanted
++auto-spawning of udevd.
++This version of udev conflicts with systemd version below 25. The
++unchanged service files will not wirk correctly.
++
++udev 167
++========
++Bugfixes.
++
++The udev runtime data moved from /dev/.udev/ to /run/udev/. The
++/run mountpoint is supposed to be a tmpfs mounted during early boot,
++available and writable to for all tools at any time during bootup,
++it replaces /var/run/, which should become a symlink some day.
++
++If /run does not exist, or is not writable, udev will fall back using
++/dev/.udev/.
++
++On systemd systems with initramfs and LVM used, packagers must
++make sure, that the systemd and initramfs versions match. The initramfs
++needs to create the /run mountpoint for udev to store the data, and
++mount this tmpfs to /run in the rootfs, so the that the udev database
++is preserved for the udev version started in the rootfs.
++
++The command 'udevadm info --convert-db' is gone. The udev daemon
++itself, at startup, converts any old database version if necessary.
++
++The systemd services files have been reorganized. The udev control
++socket is bound by systemd and passed to the started udev daemon.
++The udev-settle.service is no longer active by default. Services which
++can not handle hotplug setups properly need to actively pull it in, to
++act like a barrier. Alternatively the settle service can be unconditionally
++'systemctl'enabled, and act like a barrier for basic.target.
++
++The fstab_import callout is no longer built or installed. Udev
++should not be used to mount, does not watch changes to fstab, and
++should not mirror fstab values in the udev database.
++
++udev 166
++========
++Bugfixes.
++
++New and updated keymaps.
++
++udev 165
++========
++Bugfixes.
++
++The udev database has changed, After installation of a new udev
++version, 'udevadm info --convert-db' should be called, to let the new
++udev/libudev version read the already stored data.
++
++udevadm now supports quoting of property values, and prefixing of
++key names:
++  $ udevadm info --export --export-prefix=MY_ --query=property -n sda
++  MY_MAJOR='259'
++  MY_MINOR='0'
++  MY_DEVNAME='/dev/sda'
++  MY_DEVTYPE='disk'
++  ...
++
++libudev now supports:
++  udev_device_get_is_initialized()
++  udev_enumerate_add_match_is_initialized()
++to be able to skip devices the kernel has created , but udev has
++not already handled.
++
++libudev now supports:
++  udev_device_get_usec_since_initialized()
++to retrieve the "age" of a udev device record.
++
++GUdev supports a more generic GUdevEnumerator class, udev TAG
++handling, device initialization and timestamp now.
++
++The counterpart of /sys/dev/{char,block}/$major:$minor,
++/dev/{char,block}/$major:$minor symlinks are now unconditionally
++created, even when no rule files exist.
++
++New and updated keymaps.
++
++udev 164
++========
++Bugfixes.
++
++GUdev moved from /usr to /.
++
++udev 163
++========
++Bugfixes.
++
++udev 162
++========
++Bugfixes.
++
++Persistent network naming rules are disabled inside of Qemu/KVM now.
++
++New and updated keymaps.
++
++Udev gets unconditionally enabled on systemd installations now. There
++is no longer the need to to run 'systemctl enable udev.service'.
++
++udev 161
++========
++Bugfixes.
++
++udev 160
++========
++Bugfixes.
++
++udev 159
++========
++Bugfixes.
++
++New and fixed keymaps.
++
++Install systemd service files if applicable.
++
++udev 158
++========
++Bugfixes.
++
++All distribution specific rules are removed from the udev source tree,
++most of them are no longer needed. The Gentoo rules which allow to support
++older kernel versions, which are not covered by the default rules anymore
++has moved to rules/misc/30-kernel-compat.rules.
++
++udev 157
++========
++Bugfixes.
++
++The option --debug-trace and the environemnt variable UDEVD_MAX_CHILDS=
++was removed from udevd.
++
++Udevd now checks the kernel commandline for the following variables:
++  udev.log-priority=<syslog priority>
++  udev.children-max=<maximum number of workers>
++  udev.exec-delay=<seconds to delay the execution of RUN=>
++to help debuging coldplug setups where the loading of a kernel
++module crashes the system.
++
++The subdirectory in the source tree rules/packages has been renamed to
++rules/arch, anc contains only architecture specific rules now.
++
++udev 156
++========
++Bugfixes.
++
++udev 155
++========
++Bugfixes.
++
++Now the udev daemon itself, does on startup:
++  - copy the content of /lib/udev/devices to /dev
++  - create the standard symlinks like /dev/std{in,out,err},
++    /dev/core, /dev/fd, ...
++  - use static node information provided by kernel modules
++    and creates these nodes to allow module on-demand loading
++  - possibly apply permissions to all ststic nodes from udev
++    rules which are annotated to match a static node
++
++The default mode for a device node is 0600 now to match the kernel
++created devtmpfs defaults. If GROUP= is specified and no MODE= is
++given the default will be 0660.
++
++udev 154
++========
++Bugfixes.
++
++Udev now gradually starts to pass control over the primary device nodes
++and their names to the kernel, and will in the end only manage the
++permissions of the node, and possibly create additional symlinks.
++As a first step NAME="" will be ignored, and NAME= setings with names
++other than the kernel provided name will result in a logged warning.
++Kernels that don't provide device names, or devtmpfs is not used, will
++still work as they did before, but it is strongly recommended to use
++only the same names for the primary device node as the recent kernel
++provides for all devices.
++
++udev 153
++========
++Fix broken firmware loader search path.
++
++udev 152
++========
++Bugfixes.
++
++"udevadm trigger" defaults to "change" events now instead of "add"
++events. The "udev boot script" might need to add "--action=add" to
++the trigger command if not already there, in case the initial coldplug
++events are expected as "add" events.
++
++The option "all_partitons" was removed from udev. This should not be
++needed for usual hardware. Udev can not safely make assumptions
++about non-existing partition major/minor numbers, and therefore no
++longer provide this unreliable and unsafe option.
++
++The option "ignore_remove" was removed from udev. With devtmpfs
++udev passed control over device nodes to the kernel. This option
++should not be needed, or can not work as advertised. Neither
++udev nor the kernel will remove device nodes which are copied from
++the /lib/udev/devices/ directory.
++
++All "add|change" matches are replaced by "!remove" in the rules and
++in the udev logic. All types of events will update possible symlinks
++and permissions, only "remove" is handled special now.
++
++The modem modeswitch extra was removed and the external usb_modeswitch
++program should be used instead.
++
++New and fixed keymaps.
++
++udev 151
++========
++Bugfixes.
++
++udev 150
++========
++Bugfixes.
++
++Kernels with SYSFS_DEPRECATED=y are not supported since a while. Many users
++depend on the current sysfs layout and the information not available in the
++deprecated layout. All remaining support for the deprecated sysfs layout is
++removed now.
++
++udev 149
++========
++Fix for a possible endless loop in the new input_id program.
++
++udev 148
++========
++Bugfixes.
++
++The option "ignore_device" does no longer exist. There is no way to
++ignore an event, as libudev events can not be suppressed by rules.
++It only prevented RUN keys from being executed, which results in an
++inconsistent behavior in current setups.
++
++BUS=, SYSFS{}=, ID= are long deprecated and should be SUBSYSTEM(S)=,
++ATTR(S){}=, KERNEL(S)=. It will cause a warning once for every rule
++file from now on.
++
++The support for the deprecated IDE devices has been removed from the
++default set of rules. Distros who still care about non-libata drivers
++need to add the rules to the compat rules file.
++
++The ID_CLASS property on input devices has been replaced by the more accurate
++set of flags ID_INPUT_{KEYBOARD,KEY,MOUSE,TOUCHPAD,TABLET,JOYSTICK}. These are
++determined by the new "input_id" prober now. Some devices, such as touchpads,
++can have several classes. So if you previously had custom udev rules which e. g.
++checked for ENV{ID_CLASS}=="kbd", you need to replace this with
++ENV{ID_INPUT_KEYBOARD}=="?*".
++
++udev 147
++========
++Bugfixes.
++
++To support DEVPATH strings larger than the maximum file name length, the
++private udev database format has changed. If some software still reads the
++private files in /dev/.udev/, which it shouldn't, now it's time to fix it.
++Please do not port anything to the new format again, everything in /dev/.udev
++is and always was private to udev, and may and will change any time without
++prior notice.
++
++Multiple devices claiming the same names in /dev are limited to symlinks
++only now. Mixing identical symlink names and node names is not supported.
++This reduces the amount of data in the database significantly.
++
++NAME="%k" causes a warning now. It's is and always was completely superfluous.
++It will break kernel supplied DEVNAMEs and therefore it needs to be removed
++from all rules.
++
++Most NAME= instructions got removed. Kernel 2.6.31 supplies the needed names
++if they are not the default. To support older kernels, the NAME= rules need to
++be added to the compat rules file.
++
++Symlinks to udevadm with the old command names are no longer resolved to
++the udevadm commands.
++
++The udev-acl tool got adopted to changes in ConsoleKit. Version 0.4.1 is
++required now.
++
++The option "last_rule" does no longer exist. Its use breaks too many
++things which expect to be run from independent later rules, and is an idication
++that something needs to be fixed properly instead.
++
++The gudev API is no longer marked as experimental,
++G_UDEV_API_IS_SUBJECT_TO_CHANGE is no longer needed. The gudev introspection
++is enabled by default now. Various projects already depend on introspection
++information to bind dynamic languages to the gudev interfaces.
++
++udev 146
++========
++Bugfixes.
++
++The udevadm trigger "--retry-failed" option, which is replaced since quite
++a while by "--type=failed" is removed.
++
++The failed tracking was not working at all for a few releases. The RUN
++option "ignore_error" is replaced by a "fail_event_on_error" option, and the
++default is not to track any failing RUN executions.
++
++New keymaps, new modem, hid2hci updated.
++
++udev 145
++========
++Fix possible crash in udevd when worker processes are busy, rules are
++changed at the same time, and workers get killed to reload the rules.
++
++udev 144
++========
++Bugfixes.
++
++Properties set with ENV{.FOO}="bar" are marked private by starting the
++name with a '.'. They will not be stored in the database, and not be
++exported with the event.
++
++Firmware files are looked up in:
++  /lib/firmware/updates/$(uname -r)
++  /lib/firmware/updates
++  /lib/firmware/$(uname -r)
++  /lib/firmware"
++now.
++
++ATA devices switched the property from ID_BUS=scsi to ID_BUS=ata.
++ata_id, instead of scsi_id, is the default tool now for ATA devices.
++
++udev 143
++========
++Bugfixes.
++
++The configure options have changed because another library needs to be
++installed in a different location. Instead of exec_prefix and udev_prefix,
++libdir, rootlibdir and libexecdir are used. The Details are explained in
++the README file.
++
++Event processes now get re-used after they handled an event. This reduces
++the number of forks and the pressure on the CPU significantly, because
++cloned event processes no longer cause page faults in the main daemon.
++After the events have settled, a few worker processes stay around for
++future events, all others get cleaned up.
++
++To be able to use signalfd(), udev depends on kernel version 2.6.25 now.
++Also inotify support is mandatory now to run udev.
++
++The format of the queue exported by the udev damon has changed. There is
++no longer a /dev/.udev/queue/ directory. The current event queue can be
++accessed with udevadm settle and libudedv.
++
++Libudev does not have the unstable API header anymore. From now on,
++incompatible changes will be handled by bumping the library major version.
++
++To build udev from the git tree gtk-doc is needed now. The tarballs will
++build without it and contain the pre-built documentation. An online copy
++is available here:
++  http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/
++
++The tools from the udev-extras repository have been merged into the main
++udev repository. Some of the extras have larger external dependencies, and
++they can be disabled with the configure switch --disable-extras.
++
++udev 142
++========
++Bugfixes.
++
++The program vol_id and the library libvolume_id are removed from the
++repository. Libvolume_id is merged with libblkid from the util-linux-ng
++package. Persistent disk links for label and uuid depend on the
++util-linux-ng version (2.15) of blkid now. Older versions of blkid
++can not be used with udev.
++
++Libudev allows to subscribe to udev events. To prevent unwanted messages
++to be delivered, and waking up the subscribing process, a filter can be
++installed, to drop messages inside a kernel socket filter. The filters
++match on the <subsytem>:<devtype> properties of the device.
++    This is part of the ongoing effort to replace HAL, and switch current
++users over to directly use libudev.
++    Libudev is still marked as experimental, and its interface might
++eventually change if needed, but no major changes of the currently exported
++interface are expected anymore, and a first stable release should happen
++soon.
++
++A too old kernel (2.6.21) or a kernel with CONFIG_SYSFS_DEPRECATED
++is not supported since while and udevd will log an error message at
++startup. It should still be able to boot-up, but advanced rules and system
++services which depend on the information not available in the old sysfs
++format will fail to work correctly.
++
++DVB device naming is supplied by the kernel now. In case older kernels
++need to be supported, the old shell script should be added to a compat
++rules file.
++
++udev 141
++========
++Bugfixes.
++
++The processed udev events get send back to the netlink socket. Libudev
++provides access to these events. This is work-in-progress, to replace
++the DeviceKit daemon functionality directly with libudev. There are
++upcoming kernel changes to allow non-root users to subcribe to these
++events.
++
++udev 140
++========
++Bugfixes.
++
++"udevadm settle" now optionally accepts a range of events to wait for,
++instead of waiting for "all" events.
++
++udev 139
++========
++Bugfixes.
++
++The installed watch for block device metadata changes is now removed
++during event hadling, because some (broken) tools may be called from udev
++rules and (wrongly) open the device with write access. After the finished
++event handling the watch is restored.
++
++udev 138
++========
++Bugfixes.
++
++Device nodes can be watched for changes with inotify with OPTIONS="watch".
++If closed after being opened for writing, a "change" uevent will occur.
++/dev/disk/by-{label,uuid}/* symlinks will be automatically updated.
++
++udev 137
++========
++Bugfixes.
++
++The udevadm test command has no longer a --force option, nodes and symlinks
++are always updated with a test run now.
++
++The udevd daemon can be started with --resolve-names=never to avoid all user
++and group lookups (e.g. in cut-down systems) or --resolve-names=late to
++lookup user and groups every time events are handled.
++
++udev 136
++========
++Bugfixes.
++
++We are currently merging the Ubuntu rules in the udev default rules,
++and get one step closer to provide a common Linux /dev setup, regarding
++device names, symlinks, and default device permissions. On udev startup,
++we now expect the following groups to be resolvable to their ids with
++glibc's getgrnam():
++  disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, kmem.
++LDAP setups need to make sure, that these groups are always resolvable at
++bootup, with only the rootfs mounted, and without network access available.
++
++Some systems may need to add some new, currently not used groups, or need
++to add some users to new groups, but the cost of this change is minimal,
++compared to the pain the current, rather random, differences between the
++various distributions cause for upstream projects and third-party vendors.
++
++In general, "normal" users who log into a machine should never be a member
++of any such group, but the device-access should be managed by dynamic ACLs,
++which get added and removed for the specific users on login/logout and
++session activity/inactivity. These groups are only provided for custom setups,
++and mainly system services, to allow proper privilege separation.
++A video-streaming daemon uid would be a member of "audio" and "video", to get
++access to the sound and video devices, but no "normal" user should ever belong
++to the "audio" group, because he could listen to the built-in microphone with
++any ssh-session established from the other side of the world.
++
++/dev/serial/by-{id,path}/ now contains links for ttyUSB devices,
++which do not depend on the kernel device name. As usual, unique
++devices - only a single one per product connected, or a real
++USB serial number in the device - are always found with the same
++name in the by-id/ directory.
++Completely identical devices may overwrite their names in by-id/
++and can only be found reliably in the by-path/ directory. Devices
++specified by by-path/ must not change their connection, like the
++USB port number they are plugged in, to keep their name.
++
++To support some advanced features, Linux 2.6.22 is the oldest supported
++version now. The kernel config with enabled SYSFS_DEPRECATED is no longer
++supported. Older kernels should still work, and devices nodes should be
++reliably created, but some rules and libudev will not work correctly because
++the old kernels do not provide the expected information or interfaces.
++
++udev 135
++========
++Bugfixes.
++
++Fix for a possible segfault while swapping network interface names in udev
++versions 131-134.
++
++udev 134
++========
++Bugfixes.
++
++The group "video" is part of the default rules now.
++
++udev 133
++========
++Bugfix for kernels using SYSFS_DEPRECATED* option and finding parent
++block devices in some cases. No common distro uses this option anymore,
++and we do not get enough testing for this and recent udev versions. If
++this option is not needed to run some old distro with a new kernel,
++it should be disabled in the kernel config.
++
++Bugfix for the $links substitution variable, which may crash if no links
++are created. This should not happen in usual setups because we always
++create /dev/{block,char}/ links.
++
++The strings of the parsed rules, which are kept in memory, no longer
++contain duplicate entries, or duplicate tails of strings. This, and the
++new rules parsing/matching code reduces the total in-memory size of
++a huge distro rule sets to 0.08 MB, compared to the 1.2MB of udev
++version 130.
++
++The export of DEVTYPE=disk/partition got removed from the default
++rules. This value is available from the kernel. The pnp shell script
++modprobe hack is removed from the default rules. ACPI devices have _proper_
++modalias support and take care of the same functionality.
++Installations which support old kernels, but install current default
++udev rules may want to add that to the compat rules file.
++
++Libvolume_id now always probes for all known filesystems, and does not
++stop at the first match. Some filesystems are marked as "exclusive probe",
++and if any other filesytem type matches at the same time, libvolume_id
++will, by default, not return any probing result. This is intended to prevent
++mis-detection with conflicting left-over signatures found from earlier
++file system formats. That way, we no longer depend on the probe-order
++in case of multiple competing signatures. In some setups the kernel allows
++to mount a volume with just the old filesystem signature still in place.
++This may damage the new filesystem and cause data-loss, just by mounting
++it. Because volume_id can not decide which one the correct signature is,
++the wrong signatures need to be removed manually from the volume, or the
++volume needs to be reformatted, to enable filesystem detection and possible
++auto-mounting.
++
++udev 132
++========
++Fix segfault if compiled without optimization and dbg() does not get
++compiled out and uses variables which are not available.
++
++udev 131
++========
++Bugfixes. (And maybe new bugs. :))
++
++The rule matching engine got converted from a rule list to a token
++array which reduced the in-memory rules representation of a full
++featured distros with thousends of udev rules from 1.2MB to 0.12 MB.
++Limits like 5 ENV and ATTR matches, and one single instance for most
++other keys per rule are gone.
++
++The NAME assignment is no longer special cased. If later rules assign
++a NAME value again, the former value will be overwritten. As usual
++for most other keys, the NAME value can be protected by doing a final
++assignment with NAME:="<value>".
++
++All udev code now uses libudev, which is also exported. The library
++is still under development, marked as experimental, and its interface
++may change as long as the DeviceKit integration is not finished.
++
++Many thanks to Alan Jenkins for his continuous help, and finding and
++optimizing some of the computing expensive parts.
++
++udev 130
++========
++Bugfixes.
++
++Kernel devices and device nodes are connected now by reverse indizes in
++/sys and /dev. A device number retrieved by a stat() or similar, the
++kernel device directory can be found by looking up:
++  /sys/dev/{block,char}/<maj>:<min>
++and the device node of the same device by looking up:
++  /dev/{block,char}/<maj>:<min>
++
++udev 129
++========
++Fix recently introduced bug, which caused a compilation without large
++file support, where vol_id does not recognize raid signatures at the end
++of a volume.
++
++Firewire disks now create both, by-id/scsi-* and by-id/ieee-* links.
++Seems some kernel versions prevent the creation of the ieee-* links,
++so people used the scsi-* link which disappeared now.
++
++More libudev work. Almost all udevadm functionality comes from libudev
++now.
++
++udevadm trigger has a new option --type, which allows to trigger events
++for "devices", for "subsystems", or "failed" devices. The old option
++--retry-failed" still works, but is no longer mentioned in the man page.
++
++udev 128
++========
++Bugfixes.
++
++The udevadm info --device-id-of-file= output has changed to use
++the obvious format. Possible current users should use the --export
++option which is not affected.
++
++The old udev commands symlinks to udevadm are not installed, if
++these symlinks are used, a warning is printed.
++
++udev 127
++========
++Bugfixes.
++
++Optical drive's media is no longer probed for raid signatures,
++reading the end of the device causes some devices to malfunction.
++Also the offset of the last session found is used now to probe
++for the filesystem.
++
++The volume_id library got a major version number update to 1,
++some deprecated functions are removed.
++
++A shared library "libudev" gets installed now to provide access
++to udev device information. DeviceKit, the successor of HAL, will
++need this library to access the udev database and search sysfs for
++devices.
++The library is currently in an experimental state, also the API is
++expected to change, as long as the DeviceKit integration is not
++finished.
++
++udev 126
++========
++We use ./configure now. See INSTALL for details. Current
++options are:
++    --prefix=
++        "/usr" - prefix for man pages, include files
++    --exec-prefix=
++        "" - the root filesystem, prefix for libs and binaries
++    --sysconfdir=
++        "/etc"
++    --with-libdir-name=
++        "lib" - directory name for libraries, not a path name
++        multilib 64bit systems may use "lib64" instead of "lib"
++    --enable-debug
++        compile-in verbose debug messages
++    --disable-logging
++        disable all logging and compile-out all log strings
++    --with-selinux
++        link against SELInux libraries, to set the expected context
++        for created files
++
++In the default rules, the group "disk" gets permissions 0660 instead
++of 0640. One small step closer to unify distro rules. Some day, all
++distros hopefully end up with the same set of rules.
++
++No symlinks to udevadm are installed anymore, if they are still needed,
++they should be provided by the package.
++
++udev 125
++========
++Bugfixes.
++
++Default udev rules, which are not supposed to be edited by the user, should
++be placed in /lib/udev/rules.d/ now, to make it clear that they are private to
++the udev package and will be replaced with an update. Udev will pick up rule
++files from:
++  /lib/udev/rules.d/  - default installed rules
++  /etc/udev/rules.d/  - user rules + on-the-fly generated rules
++  /dev/.udev/rules.d/ - temporary non-persistent rules created after bootup
++It does not matter in which directory a rule file lives, all files are sorted
++in lexical order.
++
++To help creating /dev/root, we have now:
++  $ udevadm info --export --export-prefix="ROOT_" --device-id-of-file=/
++  ROOT_MAJOR=8
++  ROOT_MINOR=5
++In case the current --device-id-of-file is already used, please switch to
++the --export format version, it saves the output parsing and the old
++format will be changed to use ':' as a separator, like the format in the
++sysfs 'dev' file.
++
++udev 124
++========
++Fix cdrom_id to properly recognize blank media.
++
++udev 123
++========
++Bugfixes.
++
++Tape drive id-data is queried from /dev/bsg/* instead of the tape
++nodes. This avoids rewinding tapes on open().
++
++udev 122
++========
++Bugfixes.
++
++The symlinks udevcontrol and udevtrigger are no longer installed by
++the Makefile.
++
++The scsi_id program does not depend on sysfs anymore. It can speak
++SGv4 now, so /dev/bsg/* device nodes can be used, to query SCSI device
++data, which should solve some old problems with tape devices, where
++we better do not open all tape device nodes to identify the device.
++
++udev 121
++========
++Many bugfixes.
++
++The cdrom_id program is replaced by an advanced version, which can
++detect most common device types, and also properties of the inserted
++media. This is part of moving some basic functionality from HAL into
++udev (and the kernel).
++
++udev 120
++========
++Bugfixes.
++
++The last WAIT_FOR_SYSFS rule is removed from the default rules.
++
++The symlinks to udevadm for the debugging tools: udevmonitor and
++udevtest are no longer created.
++
++The symlinks to the udevadm man page for the old tool names are
++no longer created.
++
++Abstract namespace sockets paths in RUN+="socket:@<path>" rules,
++should be prefixed with '@' to indicate that the path is not a
++real file.
++
++udev 119
++========
++Bugfixes.
++
++udev 118
++========
++Bugfixes.
++
++Udevstart is removed from the tree, it did not get installed for
++a long time now, and is long replaced by trigger and settle.
++
++udev 117
++========
++Bugfixes.
++
++All udev tools are merged into a single binary called udevadm.
++The old names of the tools are built-in commands in udevadm now.
++Symlinks to udevadm, with the names of the old tools, provide
++the same functionality as the standalone tools. There is also
++only a single udevadm.8 man page left for all tools.
++
++Tools like mkinitramfs should be checked, if they need to include
++udevadm in the list of files.
++
++udev 116
++========
++Bugfixes.
++
++udev 115
++========
++Bugfixes.
++
++The etc/udev/rules.d/ directory now contains a default set of basic
++udev rules. This initial version is the result of a rules file merge
++of Fedora and openSUSE. For these both distros only a few specific
++rules are left in their own file, named after the distro. Rules which
++are optionally installed, because they are only valid for a specific
++architecture, or rules for subsystems which are not always used are
++in etc/udev/packages/.
++
++udev 114
++========
++Bugfixes.
++
++Dynamic rules can be created in /dev/.udev/rules.d/ to trigger
++actions by dynamically created rules.
++
++SYMLINK=="<value>" matches agains the entries in the list of
++currently defined symlinks. The links are not created in the
++filesystem at that point in time, but the values can be matched.
++
++RUN{ignore_error}+="<program>" will ignore any exit code from the
++program and not record as a failed event.
++
++udev 113
++========
++Bugfixes.
++
++Final merge of patches/features from the Ubuntu package.
++
++udev 112
++========
++Bugfixes.
++
++Control characters in filesystem label strings are no longer silenty
++removed, but hex-encoded, to be able to uniquely identify the device
++by its symlink in /dev/disk/by-label/.
++If libvolume_id is used by mount(8), LABEL= will work as expected,
++if slashes or other characters are used in the label string.
++
++To test the existence of a file, TEST=="<file>" and TEST!="<file>"
++can be specified now. The TEST key accepts an optional mode mask
++TEST{0100}=="<is executable file>".
++
++Scsi_id now supports a mode without expecting scsi-specific sysfs
++entries to allow the extraction of cciss-device persistent properties.
++
++udev 111
++========
++Bugfixes.
++
++In the future, we may see uuid's which are just simple character
++strings (see the DDF Raid Specification). For that reason vol_id now
++exports ID_FS_UUID_SAFE, just like ID_FS_LABEL_SAFE. For things like
++the creation of symlinks, the *_SAFE values ensure, that no control
++or whitespace characters are used in the filename.
++
++Possible users of libvolume_id, please use the volume_id_get_* functions.
++The public struct will go away in a future release of the library.
++
++udev 110
++========
++Bugfixes.
++
++Removal of useless extras/eventrecorder.sh.
++
++udev 109
++========
++Bugfixes.
++
++udev 108
++========
++Bugfixes.
++
++The directory multiplexer for dev.d/ and hotplug.d are finally removed
++from the udev package.
++
++udev 107
++========
++Bugfixes.
++
++Symlinks can have priorities now, the priority is assigned to the device
++and specified with OPTIONS="link_priority=100". Devices with higher
++priorities overwrite the symlinks of devices with lower priorities.
++If the device that currently owns the link, goes away, the symlink
++will be removed, and recreated, pointing to the next device with the
++highest actual priority. This should make /dev/disk/by-{label,uuid,id}
++more reliable, if multiple devices contain the same metadata and overwrite
++these symlinks.
++
++The dasd_id program is removed from the udev tree, and dasdinfo, with the
++needed rules, are part of the s390-tools now.
++
++Please add KERNEL=="[0-9]*:[0-9]*" to the scsi wait-for-sysfs rule,
++we may get the scsi sysfs mess fixed some day, and this will only catch
++the devices we are looking for.
++
++USB serial numbers for storage devices have the target:lun now appended,
++to make it possibble to distinguish broken multi-lun devices with all
++the same SCSI identifiers.
++
++Note: The extra "run_directory" which searches and executes stuff in
++/etc/hotplug.d/ and /etc/dev.d/ is long deprecated, and will be removed
++with the next release. Make sure, that you don't use it anymore, or
++provides your own implementation of that inefficient stuff.
++We are tired of reports about a "slow udev", because these directories
++contain stuff, that runs with _every_ event, instead of using rules,
++that run programs only for the matching events.
++
++udev 106
++========
++Bugfixes.
++
++udev 105
++========
++Bugfixes.
++
++DRIVER== will match only for devices that actually have a real
++driver. DRIVERS== must be used, if parent devices should be
++included in the match.
++
++Libvolume_id's "linux_raid" detection needed another fix.
++
++udev 104
++========
++Bugfixes.
++
++udev 103
++========
++Add additional check to volume_id detection of via_raid, cause
++some company decided to put a matching pattern all over the empty
++storage area of their music players.
++
++udev 102
++========
++Fix path_id for SAS devices.
++
++udev 101
++========
++The udev daemon can be started with --debug-trace now, which will
++execute all events serialized to get a chance to catch a possible
++action that crashes the box.
++
++A warning is logged, if PHYSDEV* keys, the "device" link, or a parent
++device attribute like $attr{../file} is used, only WAIT_FOR_SYSFS rules
++are excluded from the warning. Referencing parent attributes directly
++may break when something in the kernel driver model changes. Udev will
++just find the attribute by walking up the parent chain.
++
++Udevtrigger now sorts the list of devices depending on the device
++dependency, so a "usb" device is triggered after the parent "pci"
++device.
++
++udev 100
++========
++Revert persistent-storage ata-serial '_' '-' replacement.
++
++udev 099
++========
++Bugfixes.
++
++Udevtrigger can now filter the list of devices to be triggered. Matches
++for subsystems or sysfs attributes can be specified.
++
++The entries in /dev/.udev/queue and /dev/.udev/failed have changed to
++zero-sized files to avoid pointing to /sys and confuse broken tools which
++scan the /dev directory. To retry failed events, udevtrigger --retry-failed
++should be used now.
++
++The rules and scripts to create udev rules for persistent network
++devices and optical drives are in the extras/rules_generator directory
++now. If you use something similar, please consider replacing your own
++version with this, to share the support effort. The rule_generator
++installs its own rules into /etc/udev/rules.d.
++
++The cdrom_id tool installs its own rule now in /etc/udev/rules.d, cause
++the rule_generator depends on cdrom_id to be called in an earlier rule.
++
++udev 098
++========
++Bugfixes.
++
++Renaming of some key names (the old names still work):
++BUS -> SUBSYSTEMS, ID -> KERNELS, SYSFS -> ATTRS, DRIVER -> DRIVERS.
++(The behavior of the key DRIVER will change soon in one of the next
++releases, to match only the event device, please switch to DRIVERS
++instead. If DRIVER is used, it will behave like DRIVERS, but an error
++is logged.
++With the new key names, we have a more consistent and simpler scheme.
++We can match the properties of the event device only, with: KERNEL,
++SUBSYSTEM, ATTR, DRIVER. Or include all the parent devices in the match,
++with: KERNELS, SUBSYSTEMS, ATTRS, DRIVERS. ID, BUS, SYSFS, DRIVER are no
++longer mentioned in the man page and should be switched in the rule
++files.
++
++ATTR{file}="value" can be used now, to write to a sysfs file of the
++event device. Instead of:
++  ..., SYSFS{type}=="0|7|14", RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'"
++we now can do:
++  ..., ATTR{type}=="0|7|14", ATTR{timeout}="60"
++
++All the PHYSDEV* keys are deprecated and will be removed from a
++future kernel:
++  PHYDEVPATH -    is the path of a parent device and should not be
++                  needed at all.
++  PHYSDEVBUS -    is just a SUBSYSTEM value of a parent, and can be
++                  matched with SUBSYSTEMS==
++  PHYSDEVDRIVER - for bus devices it is available as ENV{DRIVER}.
++                  Newer kernels will have DRIVER in the environment,
++                  for older kernels udev puts in. Class device will
++                  no longer carry this property of a parent and
++                  DRIVERS== can be used to match such a parent value.
++Note that ENV{DRIVER} is only available for a few bus devices, where
++the driver is already bound at device event time. On coldplug, the
++events for a lot devices are already bound to a driver, and they will have
++that value set. But on hotplug, at the time the kernel creates the device,
++it can't know what driver may claim the device after that, therefore
++in most cases it will be empty.
++
++Failed events should now be re-triggered with:
++   udevtrigger --retry-failed.
++Please switch to this command, so we keep the details of the /dev/.udev/failed/
++files private to the udev tools. We may need to switch the current symlink
++target, cause some obviously broken tools try to scan all files in /dev
++including /dev/.udev/, find the links to /sys and end up stat()'ing sysfs files
++million times. This takes ages on slow boxes.
++
++The udevinfo attribute walk (-a) now works with giving a device node
++name (-n) instead of a devpath (-p). The query now always works, also when
++no database file was created by udev.
++
++The built-in /etc/passwd /etc/group parser is removed, we always depend on
++getpwnam() and getgrnam() now. One of the next releases will depend on
++fnmatch() and may use getopt_long().
++
++udev 097
++========
++Bugfixes and small improvements.
++
++udev 096
++========
++Fix path_id for recent kernels.
++
++udev 095
++========
++%e is finally gone.
++
++Added support for swapping network interface names, by temporarily
++renaming the device and wait for the target name to become free.
++
++udev 094
++========
++The built-in MODALIAS key and substitution is removed.
++
++udev 093
++========
++The binary firmware helper is replaced by the usual simple
++shell script. Udevsend is removed from the tree.
++
++udev 092
++========
++Bugfix release.
++
++udev 091
++========
++Some more keys require the correct use of '==' and '=' depending
++on the kind of operation beeing an assignment or a match. Rules
++with invalid operations are skipped and logged to syslog. Please
++test with udevtest if the parsing of your rules throws errors and
++fix possibly broken rules.
++
++udev 090
++========
++Provide "udevsettle" to wait for all current udev events to finish.
++It also watches the current kernel netlink queue by comparing the
++even sequence number to make sure that there are no current pending
++events that have not already arrived in the daemon.
++
++udev 089
++========
++Fix rule to skip persistent rules for removable IDE devices, which
++also skipped optical IDE drives.
++
++All *_id program are installed in /lib/udev/ by default now.
++
++No binary is stripped anymore as this should be done in the
++packaging process and not at build time.
++
++libvolume_id is provided as a shared library now and vol_id is
++linked against it. Also one of the next HAL versions will require
++this library, and the HAL build process will also require the
++header file to be installed. The copy of the same code in HAL will
++be removed to have only a single copy left on the system.
++
++udev 088
++========
++Add persistent links for SCSI tapes. The rules file is renamed
++to 60-persistent-storage.rules.
++
++Create persistent path for usb devices. Can be used for all sorts
++of devices that can't be distinguished by other properties like
++multiple identical keyboards and mice connected to the same box.
++
++Provide "udevtrigger" program to request events on coldplug. The
++shell script is much too slow with thousends of devices.
++
++udev 087
++========
++Fix persistent disk rules to exclude removable IDE drives.
++
++Warn if %e, $modalias or MODALIAS is used.
++
++udev 086
++========
++Fix queue export, which wasn't correct for subsequent add/remove
++events for the same device.
++
++udev 085
++========
++Fix cramfs detection on big endian.
++
++Make WAIT_FOR_SYSFS usable in "normal" rules and silent if the whole
++device goes away.
++
++udev 084
++========
++If BUS== and SYSFS{}== have been used in the same rule, the sysfs
++attributes were only checked at the parent device that matched the
++by BUS requested subsystem. Fix it to also look at the device we
++received the event for.
++
++Build variable CROSS has changed to CROSS_COMPILE to match the kernel
++build name.
++
++udev 083
++========
++Fix a bug where NAME="" would prevent RUN from beeing executed.
++
++RUN="/bin/program" does not longer automatically add the subsystem
++as the first parameter. This is from the days of /sbin/hotplug
++which is dead now and it's just confusing to need to add a space at
++the end of the program name to prevent this.
++If you use rules that need the subsystem as the first parameter,
++like the old "udev_run_hotlugd" and "udev_run_devd", add the subsystem
++to the key like RUN+="/bin/program $env{SUBSYSTEM}".
++
++udev 082
++========
++The udev man page has moved to udev(7) as it does not describe a command
++anymore. The programs udev, udevstart and udevsend are no longer installed
++by default and must be copied manually, if they should be installed or
++included in a package.
++
++Fix a bug where "ignore_device" could run earlier collected RUN keys before
++the ignore rule was applied.
++
++More preparation for future sysfs changes. usb_id and scsi_id no longer
++depend on a magic order of devices in the /devices chain. Specific devices
++should be requested by their subsytem.
++
++This will always find the scsi parent device without depending on a specific
++path position:
++  dev = sysfs_device_get(devpath);
++  dev_usb = sysfs_device_get_parent_with_subsystem(dev, "scsi");
++
++The "device" link in the current sysfs layout will be automatically
++_resolved_ as a parent and in the new sysfs layout it will just _be_ the
++parent in the devpath. If a device is requested by it's symlink, like all
++class devices in the new sysfs layout will look like, it gets automatically
++resolved and substituted with the real devpath and not the symlink path.
++
++Note:
++A similar logic must be applied to _all_ sysfs users, including
++scripts, that search along parent devices in sysfs. The explicit use of
++the "device" link must be avoided. With the future sysfs layout all
++DEVPATH's will start with /devices/ and have a "subsystem" symlink poiting
++back to the "class" or the "bus". The layout of the parent devices in
++/devices is not necessarily expected to be stable across kernel releases and
++searching for parents by their subsystem should make sysfs users tolerant
++for changed parent chains.
++
++udev 081
++========
++Prepare udev to work with the experimental kernel patch, that moves
++/sys/class devices to /sys/devices and /sys/block to /sys/class/block.
++
++Clarify BUS, ID, $id usage and fix $id behavior. This prepares for
++moving the class devices to /sys/devices.
++
++Thanks again to Marco for help finding a hopefully nice compromise
++to make %b simpler and working again.
++
++udev 080
++========
++Complete removal of libsysfs, replaced by simple helper functions
++which are much simpler and a bit faster. The udev daemon operatesentirely
++on event parameters and does not use sysfs for simple rules anymore.
++Please report any new bugs/problems, that may be caused by this big
++change. They will be fixed immediately.
++
++The enumeration format character '%e' is deprecated and will be
++removed sometimes from a future udev version. It never worked correctly
++outside of udevstart, so we can't use it with the new parallel
++coldplug. A simple enumeration is as useless as the devfs naming
++scheme, just get rid of both if you still use it.
++
++MODALIAS and $modalias is not needed and will be removed from one of
++the next udev versions, replace it in all rules with ENV{MODALIAS} or
++the sysfs "modalias" value.
++
++Thanks a lot to Marco for all his help on finding and fixing bugs.
++
++udev 079
++========
++Let scsi_id request libata drive serial numbers from page 0x80.
++
++Renamed etc/udev/persistent.rules to persistent-disk.rules and
++added /dev/disk/by-name/* for device mapper device names.
++
++Removed %e from the man page. It never worked reliably outside
++of udevstart and udevstart is no longer recommended to use.
++
++udev 078
++========
++Symlinks are now exported to the event environment. Hopefully it's no
++longer needed to run udevinfo from an event process, like it was
++mentioned on the hotplug list:
++  UDEV  [1134776873.702967] add@/block/sdb
++  ...
++  DEVNAME=/dev/sdb
++  DEVLINKS=/dev/disk/by-id/usb-IBM_Memory_Key_0218B301030027E8 /dev/disk/by-path/usb-0218B301030027E8:0:0:0
++
++udev 077
++========
++Fix a problem if udevsend is used as the hotplug handler and tries to use
++syslog, which causes a "vc" event loop. 2.6.15 will make udevsend obsolete
++and this kind of problems will hopefully go away soon.
++
++udev 076
++========
++All built-in logic to work around bad sysfs timing is removed with this
++version. The need to wait for sysfs files is almost fixed with a kernel
++version that doesn't work with this udev version anyway. Until we fix
++the timing of the "bus" link creation, the former integrated logic should
++be emulated by a rule placed before all other rules:
++  ACTION=="add", DEVPATH=="/devices/*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
++
++The option "udev_db" does no longer exist. All udev state will be in
++/$udev_root/.udev/ now, there is no longer an option to set this
++to anything else.
++If the init script or something else used this value, just depend on
++this hardcoded path. But remember _all_content_ of this directory is
++still private to udev and can change at any time.
++
++Default location for rule sripts and helper programs is now: /lib/udev/.
++Everything that is not useful on the commandline should go into this
++directory. Some of the helpers in the extras folder are installed there
++now. The rules need to be changed, to find the helpers there.
++
++Also /lib/udev/devices is recommended as a directory where packages or
++the user can place real device nodes, which get copied over to /dev at
++every boot. This should replace the various solutions with custom config
++files.
++
++Udevsend does no longer start the udev daemon. This must be done with
++the init script that prepares /dev on tmpfs and creates the initial nodes,
++before starting the daemon.
++
++udev 075
++========
++Silent a too verbose error logging for the old hotplug.d/ dev.d/
++emulation.
++
++The copy of klibc is removed. A systemwide installed version of klibc
++should be used to build a klibc udev now.
++
++udev 074
++========
++NAME="" will not create any nodes, but execute RUN keys. To completely
++ignore an event the OPTION "ignore_device" should be used.
++
++After removal of the reorder queue, events with a TIMEOUT can be executed
++without any queuing now.
++
++udev 073
++========
++Fixed bug in udevd, if inotify is not available. We depend on netlink
++uevents now, kernels without that event source will not work with that
++version of udev anymore.
++
++udev 072
++========
++The rule parsing happens now in the daemon once at startup, all udev
++event processes inherit the already parsed rules from the daemon.
++It is shipped with SUSE10.0 and reduces heavily the system load at
++startup. The option to save precompiled rules and let the udev process
++pick the them up is removed, as it's no longer needed.
++
++Kernel 2.6.15 will have symlinks at /class/input pointing to the real
++device. Libsysfs is changed to "translate" the requested link into the
++real device path, as it would happen with the hotplug event. Otherwise
++device removal and the udev database will not work.
++
++Using 'make STRIPCMD=' will leave the binaries unstripped for debugging
++and packaging.
++
++A few improvements for vol_id, the filesytem probing code.
++
++udev 071
++========
++Fix a stupid typo in extras/run_directory for "make install".
++
++scsi_id creates the temporary devnode now in /dev for usage with a
++non-writable /tmp directory.
++
++The uevent kernel socket buffer can carry app. 50.000 events now,
++let's see who can break this again. :)
++
++The upcoming kernel will have a new input driver core integration.
++Some class devices are now symlinks to the real device. libsysfs
++needs a fix for this to work correctly. Udevstart of older udev
++versions will _not_ create these devices!
++
++udev 070
++========
++Fix a 'install' target in the Makefile, that prevents EXTRAS from
++beeing installed.
++
++udev 069
++========
++A bunch of mostly trivial bugfixes. From now on no node name or
++symlink name can contain any character than plain whitelisted ascii
++characters or validated utf8 byte-streams. This is needed for the
++/dev/disk/by-label/* links, because we import untrusted data and
++export it to the filesystem.
++
++udev 068
++========
++More bugfixes. If udevd was started from the kernel, we don't
++have stdin/stdout/stderr, which broke the forked tools in some
++situations.
++
++udev 067
++========
++Bugfix. udevstart event ordering was broken for a long time.
++The new run_program() uncovered it, because /dev/null was not
++available while we try to run external programs.
++Now udevstart should create it before we run anything.
++
++udev 066
++========
++Minor bugfixes and some distro rules updates. If you don't have the
++persistent disk rules in /dev/disk/by-*/* on your distro, just
++grab it from here. :)
++
++udev 065
++========
++We can use socket communication now to pass events from udev to
++other programs:
++  RUN+="socket:/org/freedesktop/hal/udev_event"
++will pass the whole udev event to the HAL daemon without the need
++for a forked helper. (See ChangeLog for udevmonitor, as an example)
++
++udev 064
++========
++Mostly bugfixes and see ChangeLog.
++
++The test for the existence of an environment value should be
++switched from:
++  ENV{KEY}=="*" to ENV{KEY}=="?*"
++because "*" will not fail anymore, if the key does not exist or
++is empty.
++
++udev 063
++========
++Bugfixes and a few tweaks described in the ChangeLog.
++
++udev 062
++========
++Mostly a Bugfix release.
++
++Added WAIT_FOR_SYSFS="<attribute>" to be able to fight against the sysfs
++timing with custom rules.
++
++udev 061
++========
++We changed the  internal rule storage format. Our large rule files took
++2 MB of RAM, with the change we are down to 99kB.
++
++If the device-node has been created with default name and no symlink or
++options are to remenber, it is not longer stored in the udevdb. HAL will
++need to be updated to work correctly with that change.
++
++To overrride optimization flags, OPTFLAGS may be used now.
++
++udev 060
++========
++Bugfix release.
++
++udev 059
++========
++Major changes happened with this release. The goal is to take over the
++complete kernel-event handling and provide a more efficient way to dispatch
++kernel events. Replacing most of the current shell script logic and the
++kernel forked helper with a netlink-daemon and a rule-based event handling.
++
++o udevd listens to netlink events now. The first valid netlink event
++  will make udevd ignore any message from udevsend that contains a
++  SEQNUM, to avoid duplicate events. The forked events can be disabled
++  with:
++    echo "" > /proc/sys/kernel/hotplug
++  For full support, the broken input-subsytem needs to be fixed, not to
++  bypass the driver core.
++
++o /etc/dev.d/ + /etc/hotplug.d/ directory multiplexing is completely
++  removed from udev itself and must be emulated by calling small
++  helper binaries provided in the extras folder:
++    make EXTRAS=extras/run_directory/
++  will build udev_run_devd and udev_run_hotplugd, which can be called
++  from a rule if needed:
++    RUN+="/sbin/udev_run_hotplugd"
++  The recommended way to handle this is to convert all the calls from
++  the directories to explicit udev rules and get completely rid of the
++  multiplexing. (To catch a ttyUSB event, you now no longer need to
++  fork and exit 300 tty script instances you are not interested in, it
++  is just one rule that matches exactly the device.)
++
++o udev handles now _all_ events not just events for class and block
++  devices, this way it is possible to control the complete event
++  behavior with udev rules. Especially useful for rules like:
++    ACTION="add", DEVPATH="/devices/*", MODALIAS=="?*", RUN+="/sbin/modprobe $modalias"
++
++o As used in the modalias rule, udev supports now textual
++  substitution placeholder along with the usual format chars. This
++  needs to be documented, for now it's only visible in udev_rules_parse.c.
++
++o The rule keys support now more operations. This is documented in the
++  man page. It is possible to add values to list-keys like the SYMLINK
++  and RUN list with KEY+="value" and to clear the list by assigning KEY="".
++  Also "final"-assignments are supported by using KEY:="value", which will
++  prevent changing the key by any later rule.
++
++o kernel 2.6.12 has the "detached_state" attribute removed from
++  sysfs, which was used to recognize sysfs population. We switched that
++  to wait for the "bus" link, which is only available in kernels after 2.6.11.
++  Running this udev version on older kernels may cause a short delay for
++  some events.
++
++o To provide infrastructure for persistent device naming, the id programs:
++  scsi_id, vol_id (former udev_volume_id), and ata_id (new) are able now
++  to export the probed data in environment key format:
++    pim:~ # /sbin/ata_id --export /dev/hda
++    ID_MODEL=HTS726060M9AT00
++    ID_SERIAL=MRH401M4G6UM9B
++    ID_REVISION=MH4OA6BA
++
++  The following rules:
++    KERNEL="hd*[!0-9]", IMPORT="/sbin/ata_id --export $tempnode"
++    KERNEL="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_MODEL}_$env{ID_SERIAL}"
++
++  Will create:
++    kay@pim:~> tree /dev/disk
++    /dev/disk
++    |-- by-id
++    |   |-- HTS726060M9AT00_MRH401M4G6UM9B -> ../../hda
++    |   `-- IBM-Memory_Key -> ../../sda
++    |-- by-label
++    |   |-- swap -> ../../hda1
++    |   |-- date -> ../../sda1
++    |   `-- home -> ../../hda3
++    `-- by-uuid
++        |-- 2E08712B0870F2E7 -> ../../hda3
++        |-- 9352cfef-7687-47bc-a2a3-34cf136f72e1 -> ../../hda1
++        |-- E845-7A89 -> ../../sda1
++        `-- b2a61681-3812-4f13-a4ff-920d70604299 -> ../../hda2
++
++  The IMPORT= operation will import these keys in the environment and make
++  it available for later PROGRAM= and RUN= executed programs. The keys are
++  also stored in the udevdb and can be queried from there with one of the
++  next udev versions.
++
++o A few binaries are silently added to the repository, which can be used
++  to replay kernel events from initramfs instead of using coldplug. udevd
++  can be instructed now to queue-up events while the stored events from
++  initramfs are filled into the udevd-queue. This code is still under
++  development and there is no documentation now besides the code itself.
++  The additional binaries get compiled, but are not installed by default.
++
++o There is also a temporary fix for a performance problem where too many
++  events happen in parallel and every event needs to parse the rules.
++  udev can now read precompiled rules stored on disk. This is likely to be
++  replaced by a more elegant solution in a future udev version.
++
++udev 058
++========
++With kernel version 2.6.12, the sysfs file "detached_state" was removed.
++Fix for libsysfs not to expect this file was added.
++
++udev 057
++========
++All rules are applied now, but only the first matching rule with a NAME-key
++will be applied. All later rules with NAME-key are completely ignored. This
++way system supplied symlinks or permissions gets applied to user-defined
++naming rules.
++
++Note:
++Please check your rules setup, if you may need to add OPTIONS="last_rule"
++to some rules, to keep the old behavior.
++
++The rules are read on "remove"-events too. That makes is possible to match
++with keys that are available on remove (KERNEL, SUBSYSTEM, ID, ENV, ...) to
++instruct udev to ignore an event (OPTIONS="ignore_device").
++The new ACTION-key may be used to let a rule act only at a "remove"-event.
++
++The new RUN-key supports rule-based execution of programs after device-node
++handling. This is meant as a general replacement for the dev.d/-directories
++to give fine grained control over the execution of programs.
++
++The %s{}-sysfs format char replacement values are searched at any of the
++devices in the device chain now, not only at the class-device.
++
++We support log priority levels now. The value udev_log in udev.conf is used
++to determine what is printed to syslog. This makes it possible to
++run a version with compiled-in debug messages in a production environment
++which is sometimes needed to find a bug.
++It is still possible to supress the inclusion of _any_ syslog usage with
++USE_LOG=false to create the smallest possible binaries if needed.
++The configured udev_log value can be overridden with the environment variable
++UDEV_LOG.
++
++udev 056
++========
++Possible use of a system-wide klibc:
++  make USE_KLIBC=true KLCC=/usr/bin/klcc all
++will link against an external klibc and our own version will be ignored.
++
++udev 055
++========
++We support an unlimited count of symlinks now.
++
++If USE_STATIC=true is passed to a glibc build, we link statically and use
++a built-in userdb parser to resolve user and group names.
++
++The PLACE= key is gone. It can be replaced by an ID= for a long time, because
++we walk up the chain of physical devices to find a match.
++
++The KEY="<value>" format supports '=', '==', '!=,' , '+=' now. This makes it
++easy to skip certain attribute matches without composing rules with weird
++character class negations like:
++  KERNEL="[!s][!c][!d]*"
++this can now be replaced with:
++  KERNEL!="scd*"
++The current simple '=' is still supported, and should work as it does today,
++but existing rules should be converted if possible, to be better readable.
++
++We have new ENV{}== key now, to match against a maximum of 5 environment
++variables.
++
++udevstart is its own binary again, because we don't need co carry this araound
++with every forked event.
diff --cc src/udev/README
index 0000000,0000000..38459c6
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,101 @@@
++udev - Linux userspace device management
++
++Integrating udev in the system has complex dependencies and may differ from
++distribution to distribution. A system may not be able to boot up or work
++reliably without a properly installed udev version. The upstream udev project
++does not recommend replacing a distro's udev installation with the upstream
++version.
++
++The upstream udev project's set of default rules may require a most recent
++kernel release to work properly.
++
++Tools and rules shipped by udev are not public API and may change at any time.
++Never call any private tool in /usr/lib/udev from any external application; it
++might just go away in the next release. Access to udev information is only offered
++by udevadm and libudev. Tools and rules in /usr/lib/udev and the entire contents
++of the /run/udev directory are private to udev and do change whenever needed.
++
++Requirements:
++  - Version 2.6.34 of the Linux kernel with sysfs, procfs, signalfd, inotify,
++    unix domain sockets, networking and hotplug enabled
++
++  - Some architectures might need a later kernel, that supports accept4(),
++    or need to backport the accept4() syscall wiring in the kernel.
++
++  - These options are required:
++      CONFIG_DEVTMPFS=y
++      CONFIG_HOTPLUG=y
++      CONFIG_INOTIFY_USER=y
++      CONFIG_NET=y
++      CONFIG_PROC_FS=y
++      CONFIG_SIGNALFD=y
++      CONFIG_SYSFS=y
++      CONFIG_SYSFS_DEPRECATED*=n
++      CONFIG_UEVENT_HELPER_PATH=""
++
++  - These options might be needed:
++      CONFIG_BLK_DEV_BSG=y (SCSI devices)
++      CONFIG_TMPFS_POSIX_ACL=y (user ACLs for device nodes)
++
++  - The /dev directory needs the 'devtmpfs' filesystem mounted.
++    Udev only manages the permissions and ownership of the
++    kernel-provided device nodes, and possibly creates additional symlinks.
++
++  - Udev requires /run to be writable, which is usually done by mounting a
++    'tmpfs' filesystem.
++
++  - This version of udev does not work properly with the CONFIG_SYSFS_DEPRECATED*
++    option enabled.
++
++  - The deprecated hotplug helper /sbin/hotplug should be disabled in the
++    kernel configuration, it is not needed today, and may render the system
++    unusable because the kernel may create too many processes in parallel
++    so that the system runs out-of-memory.
++
++  - The proc filesystem must be mounted on /proc, and the sysfs filesystem must
++    be mounted at /sys. No other locations are supported by a standard
++    udev installation.
++
++  - The default rule sset requires the following group names resolvable at udev startup:
++      disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, and kmem.
++    Especially in LDAP setups, it is required that getgrnam() be able to resolve
++    these group names with only the rootfs mounted and while no network is
++    available.
++
++  - Some udev extras have external dependencies like:
++      libglib2, usbutils, pciutils, and gperf.
++    All these extras can be disabled with configure options.
++
++Setup:
++  - The udev daemon should be started to handle device events sent by the kernel.
++    During bootup, the events for already existing devices can be replayed, so
++    that they are configured by udev. The systemd service files contain the
++    needed commands to start the udev daemon and the coldplug sequence.
++
++  - Restarting the daemon never applies any rules to existing devices.
++
++  - New/changed rule files are picked up automatically; there is usually no
++    daemon restart or signal needed.
++
++Operation:
++  - Based on events the kernel sends out on device creation/removal, udev
++    creates/removes device nodes and symlinks in the /dev directory.
++
++  - All kernel events are matched against a set of specified rules, which
++    possibly hook into the event processing and load required kernel
++    modules to set up devices. For all devices, the kernel exports a major/minor
++    number; if needed, udev creates a device node with the default kernel
++    device name. If specified, udev applies permissions/ownership to the device
++    node, creates additional symlinks pointing to the node, and executes
++    programs to handle the device.
++
++  - The events udev handles, and the information udev merges into its device
++    database, can be accessed with libudev:
++      http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/
++      http://www.kernel.org/pub/linux/utils/kernel/hotplug/gudev/
++
++For more details about udev and udev rules, see the udev man pages:
++      http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/
++
++Please direct any comment/question to the linux-hotplug mailing list at:
++  linux-hotplug@vger.kernel.org
diff --cc src/udev/TODO
index 0000000,0000000..8b8b9c8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,22 @@@
++ - find a way to tell udev to not cancel firmware
++   requests in initramfs
++
++ - scsi_id -> sg3_utils?
++
++ - make gtk-doc optional like kmod
++
++ - move /usr/lib/udev/devices/ to tmpfiles
++
++ - trigger --subsystem-match=usb/usb_device
++
++ - kill rules_generator
++
++ - have a $attrs{} ?
++
++ - remove RUN+="socket:"
++
++ - libudev.so.1
++     - symbol versioning
++     - return object with *_unref()
++     - udev_monitor_from_socket()
++     - udev_queue_get_failed_list_entry()
index 0000000,0000000..55ee03a
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,44 @@@
++#!/bin/sh -e
++
++if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
++        cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \
++        chmod +x .git/hooks/pre-commit && \
++        echo "Activated pre-commit hook."
++fi
++
++gtkdocize
++autoreconf --install --symlink
++
++libdir() {
++        echo $(cd $1/$(gcc -print-multi-os-directory); pwd)
++}
++
++args="$args \
++--prefix=/usr \
++--sysconfdir=/etc \
++--libdir=$(libdir /usr/lib) \
++--with-selinux \
++--enable-gtk-doc"
++
++if [ -L /bin ]; then
++args="$args \
++--libexecdir=/usr/lib \
++--with-systemdsystemunitdir=/usr/lib/systemd/system \
++"
++else
++args="$args \
++--with-rootprefix= \
++---with-rootlibdir=$(libdir /lib) \
++--bindir=/sbin \
++--libexecdir=/lib \
++--with-systemdsystemunitdir=/lib/systemd/system \
++"
++fi
++
++echo
++echo "----------------------------------------------------------------"
++echo "Initialized build system. For a common configuration please run:"
++echo "----------------------------------------------------------------"
++echo
++echo "./configure CFLAGS='-g -O1' $args"
++echo
index 0000000,0000000..b31b62f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,242 @@@
++AC_PREREQ(2.60)
++AC_INIT([udev],
++       [182],
++       [linux-hotplug@vger.kernel.org],
++       [udev],
++       [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html])
++AC_CONFIG_SRCDIR([src/udevd.c])
++AC_CONFIG_AUX_DIR([build-aux])
++AM_INIT_AUTOMAKE([check-news foreign 1.11 -Wall -Wno-portability silent-rules tar-pax no-dist-gzip dist-xz subdir-objects])
++AC_USE_SYSTEM_EXTENSIONS
++AC_SYS_LARGEFILE
++AC_CONFIG_MACRO_DIR([m4])
++AM_SILENT_RULES([yes])
++LT_INIT([disable-static])
++AC_PROG_AWK
++AC_PROG_SED
++AC_PROG_MKDIR_P
++GTK_DOC_CHECK(1.10)
++AC_PREFIX_DEFAULT([/usr])
++
++AC_PATH_PROG([XSLTPROC], [xsltproc])
++AM_CONDITIONAL(HAVE_XSLTPROC, test x"$XSLTPROC" != x)
++
++AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([POSIX RT library not found])])
++
++PKG_CHECK_MODULES(BLKID, blkid >= 2.20)
++
++PKG_CHECK_MODULES(KMOD, libkmod >= 5)
++
++AC_ARG_WITH([rootprefix],
++       AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]),
++       [], [with_rootprefix=${ac_default_prefix}])
++AC_SUBST([rootprefix], [$with_rootprefix])
++
++AC_ARG_WITH([rootlibdir],
++       AS_HELP_STRING([--with-rootlibdir=DIR], [rootfs directory to install shared libraries]),
++       [], [with_rootlibdir=$libdir])
++AC_SUBST([rootlib_execdir], [$with_rootlibdir])
++
++AC_ARG_WITH([selinux],
++       AS_HELP_STRING([--with-selinux], [enable SELinux support]),
++       [], [with_selinux=no])
++AS_IF([test "x$with_selinux" = "xyes"], [
++       LIBS_save=$LIBS
++       AC_CHECK_LIB(selinux, getprevcon,
++              [],
++              AC_MSG_ERROR([SELinux selected but libselinux not found]))
++       LIBS=$LIBS_save
++       SELINUX_LIBS="-lselinux -lsepol"
++       AC_DEFINE(WITH_SELINUX, [1] ,[SELinux support.])
++])
++AC_SUBST([SELINUX_LIBS])
++AM_CONDITIONAL(WITH_SELINUX, [test "x$with_selinux" = "xyes"])
++
++AC_ARG_ENABLE([debug],
++       AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
++       [], [enable_debug=no])
++AS_IF([test "x$enable_debug" = "xyes"], [ AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.]) ])
++
++AC_ARG_ENABLE([logging],
++       AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]),
++       [], enable_logging=yes)
++AS_IF([test "x$enable_logging" = "xyes"], [ AC_DEFINE(ENABLE_LOGGING, [1], [System logging.]) ])
++
++AC_ARG_ENABLE([manpages],
++        AS_HELP_STRING([--disable-manpages], [disable man pages @<:@default=enabled@:>@]),
++        [], enable_manpages=yes)
++AM_CONDITIONAL([ENABLE_MANPAGES], [test "x$enable_manpages" = "xyes"])
++
++if test "x$cross_compiling" = "xno" ; then
++       AC_CHECK_FILES([/usr/share/pci.ids], [pciids=/usr/share/pci.ids])
++       AC_CHECK_FILES([/usr/share/hwdata/pci.ids], [pciids=/usr/share/hwdata/pci.ids])
++       AC_CHECK_FILES([/usr/share/misc/pci.ids], [pciids=/usr/share/misc/pci.ids])
++fi
++
++AC_ARG_WITH(usb-ids-path,
++       [AS_HELP_STRING([--with-usb-ids-path=DIR], [Path to usb.ids file])],
++       [USB_DATABASE=${withval}],
++       [if test -n "$usbids" ; then
++              USB_DATABASE="$usbids"
++       else
++              PKG_CHECK_MODULES(USBUTILS, usbutils >= 0.82)
++              AC_SUBST([USB_DATABASE], [$($PKG_CONFIG --variable=usbids usbutils)])
++       fi])
++AC_MSG_CHECKING([for USB database location])
++AC_MSG_RESULT([$USB_DATABASE])
++AC_SUBST(USB_DATABASE)
++
++AC_ARG_WITH(pci-ids-path,
++       [AS_HELP_STRING([--with-pci-ids-path=DIR], [Path to pci.ids file])],
++       [PCI_DATABASE=${withval}],
++       [if test -n "$pciids" ; then
++              PCI_DATABASE="$pciids"
++       else
++              AC_MSG_ERROR([pci.ids not found, try --with-pci-ids-path=])
++       fi])
++AC_MSG_CHECKING([for PCI database location])
++AC_MSG_RESULT([$PCI_DATABASE])
++AC_SUBST(PCI_DATABASE)
++
++AC_ARG_WITH(firmware-path,
++       AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]],
++          [Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware)]),
++       [], [with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware"])
++OLD_IFS=$IFS
++IFS=:
++for i in $with_firmware_path; do
++       if test "x${FIRMWARE_PATH}" = "x"; then
++              FIRMWARE_PATH="\\\"${i}/\\\""
++       else
++              FIRMWARE_PATH="${FIRMWARE_PATH}, \\\"${i}/\\\""
++       fi
++done
++IFS=$OLD_IFS
++AC_SUBST([FIRMWARE_PATH], [$FIRMWARE_PATH])
++
++AC_ARG_WITH([systemdsystemunitdir],
++       AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
++       [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
++AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) ])
++AM_CONDITIONAL(WITH_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != "xno" ])
++
++# ------------------------------------------------------------------------------
++# GUdev - libudev gobject interface
++# ------------------------------------------------------------------------------
++AC_ARG_ENABLE([gudev],
++       AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]),
++       [], [enable_gudev=yes])
++AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0]) ])
++
++AC_ARG_ENABLE([introspection],
++       AS_HELP_STRING([--disable-introspection], [disable GObject introspection @<:@default=enabled@:>@]),
++       [], [enable_introspection=yes])
++AS_IF([test "x$enable_introspection" = "xyes"], [
++       PKG_CHECK_MODULES([INTROSPECTION], [gobject-introspection-1.0 >= 0.6.2])
++       AC_DEFINE([ENABLE_INTROSPECTION], [1], [enable GObject introspection support])
++       AC_SUBST([G_IR_SCANNER], [$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0)])
++       AC_SUBST([G_IR_COMPILER], [$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0)])
++       AC_SUBST([G_IR_GENERATE], [$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0)])
++       AC_SUBST([GIRDIR], [$($PKG_CONFIG --define-variable=datadir=${datadir} --variable=girdir gobject-introspection-1.0)])
++       AC_SUBST([GIRTYPELIBDIR], [$($PKG_CONFIG --define-variable=libdir=${libdir} --variable=typelibdir gobject-introspection-1.0)])
++])
++AM_CONDITIONAL([ENABLE_INTROSPECTION], [test "x$enable_introspection" = "xyes"])
++AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"])
++
++# ------------------------------------------------------------------------------
++# keymap - map custom hardware's multimedia keys
++# ------------------------------------------------------------------------------
++AC_ARG_ENABLE([keymap],
++       AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]),
++       [], [enable_keymap=yes])
++AS_IF([test "x$enable_keymap" = "xyes"], [
++       AC_PATH_PROG([GPERF], [gperf])
++       if test -z "$GPERF"; then
++              AC_MSG_ERROR([gperf is needed])
++       fi
++
++       AC_CHECK_HEADER([linux/input.h], [:], AC_MSG_ERROR([kernel headers not found]))
++       AC_SUBST([INCLUDE_PREFIX], [$(echo '#include <linux/input.h>' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')])
++])
++AM_CONDITIONAL([ENABLE_KEYMAP], [test "x$enable_keymap" = "xyes"])
++
++# ------------------------------------------------------------------------------
++# mtd_probe - autoloads FTL module for mtd devices
++# ------------------------------------------------------------------------------
++AC_ARG_ENABLE([mtd_probe],
++       AS_HELP_STRING([--disable-mtd_probe], [disable MTD support @<:@default=enabled@:>@]),
++       [], [enable_mtd_probe=yes])
++AM_CONDITIONAL([ENABLE_MTD_PROBE], [test "x$enable_mtd_probe" = "xyes"])
++
++# ------------------------------------------------------------------------------
++# rule_generator - persistent network and optical device rule generator
++# ------------------------------------------------------------------------------
++AC_ARG_ENABLE([rule_generator],
++       AS_HELP_STRING([--enable-rule_generator], [enable persistent network + cdrom links support @<:@default=disabled@:>@]),
++       [], [enable_rule_generator=no])
++AM_CONDITIONAL([ENABLE_RULE_GENERATOR], [test "x$enable_rule_generator" = "xyes"])
++
++# ------------------------------------------------------------------------------
++# create_floppy_devices - historical floppy kernel device nodes (/dev/fd0h1440, ...)
++# ------------------------------------------------------------------------------
++AC_ARG_ENABLE([floppy],
++       AS_HELP_STRING([--enable-floppy], [enable legacy floppy support @<:@default=disabled@:>@]),
++       [], [enable_floppy=no])
++AM_CONDITIONAL([ENABLE_FLOPPY], [test "x$enable_floppy" = "xyes"])
++
++my_CFLAGS="-Wall \
++-Wmissing-declarations -Wmissing-prototypes \
++-Wnested-externs -Wpointer-arith \
++-Wpointer-arith -Wsign-compare -Wchar-subscripts \
++-Wstrict-prototypes -Wshadow \
++-Wformat-security -Wtype-limits"
++AC_SUBST([my_CFLAGS])
++
++AC_CONFIG_HEADERS(config.h)
++AC_CONFIG_FILES([
++       Makefile
++       src/docs/Makefile
++       src/docs/version.xml
++       src/gudev/docs/Makefile
++       src/gudev/docs/version.xml
++])
++
++AC_OUTPUT
++AC_MSG_RESULT([
++        $PACKAGE $VERSION
++        ========
++
++        prefix:                  ${prefix}
++        rootprefix:              ${rootprefix}
++        sysconfdir:              ${sysconfdir}
++        bindir:                  ${bindir}
++        libdir:                  ${libdir}
++        rootlibdir:              ${rootlib_execdir}
++        libexecdir:              ${libexecdir}
++        datarootdir:             ${datarootdir}
++        mandir:                  ${mandir}
++        includedir:              ${includedir}
++        include_prefix:          ${INCLUDE_PREFIX}
++        systemdsystemunitdir:    ${systemdsystemunitdir}
++        firmware path:           ${FIRMWARE_PATH}
++        usb.ids:                 ${USB_DATABASE}
++        pci.ids:                 ${PCI_DATABASE}
++
++        compiler:                ${CC}
++        cflags:                  ${CFLAGS}
++        ldflags:                 ${LDFLAGS}
++        xsltproc:                ${XSLTPROC}
++        gperf:                   ${GPERF}
++
++        logging:                 ${enable_logging}
++        debug:                   ${enable_debug}
++        selinux:                 ${with_selinux}
++
++        man pages                ${enable_manpages}
++        gudev:                   ${enable_gudev}
++        gintrospection:          ${enable_introspection}
++        keymap:                  ${enable_keymap}
++        mtd_probe:               ${enable_mtd_probe}
++        rule_generator:          ${enable_rule_generator}
++        floppy:                  ${enable_floppy}
++])
index 0000000,0000000..0ca2c03
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++libtool.m4
++lt*m4
++gtk-doc.m4
++
index 0000000,d5d5897..d5d5897
mode 000000,100644..100644
--- /dev/null
index 0000000,5ad787f..5ad787f
mode 000000,100644..100644
--- /dev/null
index 0000000,8154e2d..8154e2d
mode 000000,100644..100644
--- /dev/null
index 0000000,ce57d48..ce57d48
mode 000000,100644..100644
--- /dev/null
index 0000000,2e63e14..2e63e14
mode 000000,100644..100644
--- /dev/null
index 0000000,e564441..e564441
mode 000000,100644..100644
--- /dev/null
index 0000000,38ebfeb..38ebfeb
mode 000000,100644..100644
--- /dev/null
index 0000000,eca0faa..eca0faa
mode 000000,100644..100644
--- /dev/null
index 0000000,0000000..beb8604
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++*.[78]
++*.html
++udev.pc
++libudev.pc
++udev*.service
index 0000000,d2e3127..d2e3127
mode 000000,100644..100644
--- /dev/null
index 0000000,846a73b..846a73b
mode 000000,100644..100644
--- /dev/null
index 0000000,6eaf76a..6eaf76a
mode 000000,100644..100644
--- /dev/null
index 0000000,f90d52e..f90d52e
mode 000000,100644..100644
--- /dev/null
index 0000000,076fe47..076fe47
mode 000000,100644..100644
--- /dev/null
index 0000000,dca700a..dca700a
mode 000000,100644..100644
--- /dev/null
index 0000000,07d06eb..07d06eb
mode 000000,100644..100644
--- /dev/null
index 0000000,b7feb45..b7feb45
mode 000000,100644..100644
--- /dev/null
index 0000000,15c3e93..15c3e93
mode 000000,100644..100644
--- /dev/null
index 0000000,e69de29..e69de29
mode 000000,100644..100644
--- /dev/null
index 0000000,d78bda9..d78bda9
mode 000000,100644..100644
--- /dev/null
index 0000000,53e4a9e..53e4a9e
mode 000000,100644..100644
--- /dev/null
index 0000000,d20fa52..d20fa52
mode 000000,100644..100644
--- /dev/null
index 0000000,da97db2..da97db2
mode 000000,100644..100644
--- /dev/null
index 0000000,8eada6d..8eada6d
mode 000000,100644..100644
--- /dev/null
index 0000000,cfe696c..cfe696c
mode 000000,100644..100644
--- /dev/null
index 0000000,f876c3b..f876c3b
mode 000000,100644..100644
--- /dev/null
index 0000000,a89857a..a89857a
mode 000000,100644..100644
--- /dev/null
index 0000000,d78bda9..d78bda9
mode 000000,100644..100644
--- /dev/null
index 0000000,5586fd6..5586fd6
mode 000000,100755..100755
--- /dev/null
index 0000000,058262d..058262d
mode 000000,100644..100644
--- /dev/null
index 0000000,a313460..a313460
mode 000000,100644..100644
--- /dev/null
index 0000000,2b94102..2b94102
mode 000000,100644..100644
--- /dev/null
index 0000000,b425d03..b425d03
mode 000000,100644..100644
--- /dev/null
index 0000000,62a26f9..62a26f9
mode 000000,100644..100644
--- /dev/null
index 0000000,d4873ba..d4873ba
mode 000000,100644..100644
--- /dev/null
index 0000000,db09074..db09074
mode 000000,100644..100644
--- /dev/null
index 0000000,3fddccf..3fddccf
mode 000000,100644..100644
--- /dev/null
index 0000000,c3a0aa8..c3a0aa8
mode 000000,100644..100644
--- /dev/null
index 0000000,7e66599..7e66599
mode 000000,100644..100644
--- /dev/null
index 0000000,8866f52..8866f52
mode 000000,100644..100644
--- /dev/null
index 0000000,8884827..8884827
mode 000000,100644..100644
--- /dev/null
index 0000000,66206ad..66206ad
mode 000000,100755..100755
--- /dev/null
index 0000000,e2ac324..e2ac324
mode 000000,100755..100755
--- /dev/null
index 0000000,4567584..4567584
mode 000000,100644..100644
--- /dev/null
index 0000000,bbf311a..bbf311a
mode 000000,100644..100644
--- /dev/null
index 0000000,52d50ed..52d50ed
mode 000000,100644..100644
--- /dev/null
index 0000000,405168c..405168c
mode 000000,100755..100755
--- /dev/null
index 0000000,9ce2742..9ce2742
mode 000000,100755..100755
--- /dev/null
index 0000000,92ec67b..92ec67b
mode 000000,100644..100644
--- /dev/null
index 0000000,4e7c297..4e7c297
mode 000000,100644..100644
--- /dev/null
index 0000000,2a5995f..2a5995f
mode 000000,100644..100644
--- /dev/null
index 0000000,4f907b3..4f907b3
mode 000000,100644..100644
--- /dev/null
index 0000000,5bd1656..5bd1656
mode 000000,100644..100644
--- /dev/null
index 0000000,ba08cba..ba08cba
mode 000000,100644..100644
--- /dev/null
index 0000000,4a43869..4a43869
mode 000000,100644..100644
--- /dev/null
index 0000000,a92dfa2..a92dfa2
mode 000000,100644..100644
--- /dev/null
index 0000000,7c00013..7c00013
mode 000000,100644..100644
--- /dev/null
index 0000000,34434a1..34434a1
mode 000000,100644..100644
--- /dev/null
index 0000000,ee864ad..ee864ad
mode 000000,100644..100644
--- /dev/null
index 0000000,b7f4851..b7f4851
mode 000000,100644..100644
--- /dev/null
index 0000000,cf72fda..cf72fda
mode 000000,100644..100644
--- /dev/null
index 0000000,13fdb8e..13fdb8e
mode 000000,100644..100644
--- /dev/null
index 0000000,10f28b8..10f28b8
mode 000000,100644..100644
--- /dev/null
index 0000000,034d96f..034d96f
mode 000000,100644..100644
--- /dev/null
index 0000000,4bdef35..4bdef35
mode 000000,100644..100644
--- /dev/null
index 0000000,77dc555..77dc555
mode 000000,100644..100644
--- /dev/null
index 0000000,5f5c64a..5f5c64a
mode 000000,100644..100644
--- /dev/null
index 0000000,7177195..7177195
mode 000000,100644..100644
--- /dev/null
index 0000000,0e82cb6..0e82cb6
mode 000000,100644..100644
--- /dev/null
index 0000000,0f2a617..0f2a617
mode 000000,100644..100644
--- /dev/null
index 0000000,08f0ba2..08f0ba2
mode 000000,100644..100644
--- /dev/null
index 0000000,7e345f0..7e345f0
mode 000000,100644..100644
--- /dev/null
index 0000000,d954dae..d954dae
mode 000000,100644..100644
--- /dev/null
index 0000000,10e098d..10e098d
mode 000000,100644..100644
--- /dev/null
index 0000000,c9a47fc..c9a47fc
mode 000000,100644..100644
--- /dev/null
index 0000000,1aa08d3..1aa08d3
mode 000000,100644..100644
--- /dev/null
index 0000000,2a37ede..2a37ede
mode 000000,100644..100644
--- /dev/null
index 0000000,6aebddd..6aebddd
mode 000000,100644..100644
--- /dev/null
index 0000000,9cfe739..9cfe739
mode 000000,100644..100644
--- /dev/null
index 0000000,c423cac..c423cac
mode 000000,100644..100644
--- /dev/null
index 0000000,0d4dba9..0d4dba9
mode 000000,100644..100644
--- /dev/null
index 0000000,9bb0d7f..9bb0d7f
mode 000000,100644..100644
--- /dev/null
index 0000000,828a983..828a983
mode 000000,100644..100644
--- /dev/null
index 0000000,f1d63f4..f1d63f4
mode 000000,100644..100644
--- /dev/null
index 0000000,0000000..763e079
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,530 @@@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++  Copyright 2010 Lennart Poettering
++
++  Permission is hereby granted, free of charge, to any person
++  obtaining a copy of this software and associated documentation files
++  (the "Software"), to deal in the Software without restriction,
++  including without limitation the rights to use, copy, modify, merge,
++  publish, distribute, sublicense, and/or sell copies of the Software,
++  and to permit persons to whom the Software is furnished to do so,
++  subject to the following conditions:
++
++  The above copyright notice and this permission notice shall be
++  included in all copies or substantial portions of the Software.
++
++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
++  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
++  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++  SOFTWARE.
++***/
++
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++#ifdef __BIONIC__
++#include <linux/fcntl.h>
++#else
++#include <sys/fcntl.h>
++#endif
++#include <netinet/in.h>
++#include <stdlib.h>
++#include <errno.h>
++#include <unistd.h>
++#include <string.h>
++#include <stdarg.h>
++#include <stdio.h>
++#include <stddef.h>
++#include <limits.h>
++
++#if defined(__linux__)
++#include <mqueue.h>
++#endif
++
++#include "sd-daemon.h"
++
++#if (__GNUC__ >= 4)
++#ifdef SD_EXPORT_SYMBOLS
++/* Export symbols */
++#define _sd_export_ __attribute__ ((visibility("default")))
++#else
++/* Don't export the symbols */
++#define _sd_export_ __attribute__ ((visibility("hidden")))
++#endif
++#else
++#define _sd_export_
++#endif
++
++_sd_export_ int sd_listen_fds(int unset_environment) {
++
++#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
++        return 0;
++#else
++        int r, fd;
++        const char *e;
++        char *p = NULL;
++        unsigned long l;
++
++        if (!(e = getenv("LISTEN_PID"))) {
++                r = 0;
++                goto finish;
++        }
++
++        errno = 0;
++        l = strtoul(e, &p, 10);
++
++        if (errno != 0) {
++                r = -errno;
++                goto finish;
++        }
++
++        if (!p || *p || l <= 0) {
++                r = -EINVAL;
++                goto finish;
++        }
++
++        /* Is this for us? */
++        if (getpid() != (pid_t) l) {
++                r = 0;
++                goto finish;
++        }
++
++        if (!(e = getenv("LISTEN_FDS"))) {
++                r = 0;
++                goto finish;
++        }
++
++        errno = 0;
++        l = strtoul(e, &p, 10);
++
++        if (errno != 0) {
++                r = -errno;
++                goto finish;
++        }
++
++        if (!p || *p) {
++                r = -EINVAL;
++                goto finish;
++        }
++
++        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
++                int flags;
++
++                if ((flags = fcntl(fd, F_GETFD)) < 0) {
++                        r = -errno;
++                        goto finish;
++                }
++
++                if (flags & FD_CLOEXEC)
++                        continue;
++
++                if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
++                        r = -errno;
++                        goto finish;
++                }
++        }
++
++        r = (int) l;
++
++finish:
++        if (unset_environment) {
++                unsetenv("LISTEN_PID");
++                unsetenv("LISTEN_FDS");
++        }
++
++        return r;
++#endif
++}
++
++_sd_export_ int sd_is_fifo(int fd, const char *path) {
++        struct stat st_fd;
++
++        if (fd < 0)
++                return -EINVAL;
++
++        memset(&st_fd, 0, sizeof(st_fd));
++        if (fstat(fd, &st_fd) < 0)
++                return -errno;
++
++        if (!S_ISFIFO(st_fd.st_mode))
++                return 0;
++
++        if (path) {
++                struct stat st_path;
++
++                memset(&st_path, 0, sizeof(st_path));
++                if (stat(path, &st_path) < 0) {
++
++                        if (errno == ENOENT || errno == ENOTDIR)
++                                return 0;
++
++                        return -errno;
++                }
++
++                return
++                        st_path.st_dev == st_fd.st_dev &&
++                        st_path.st_ino == st_fd.st_ino;
++        }
++
++        return 1;
++}
++
++_sd_export_ int sd_is_special(int fd, const char *path) {
++        struct stat st_fd;
++
++        if (fd < 0)
++                return -EINVAL;
++
++        if (fstat(fd, &st_fd) < 0)
++                return -errno;
++
++        if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
++                return 0;
++
++        if (path) {
++                struct stat st_path;
++
++                if (stat(path, &st_path) < 0) {
++
++                        if (errno == ENOENT || errno == ENOTDIR)
++                                return 0;
++
++                        return -errno;
++                }
++
++                if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
++                        return
++                                st_path.st_dev == st_fd.st_dev &&
++                                st_path.st_ino == st_fd.st_ino;
++                else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
++                        return st_path.st_rdev == st_fd.st_rdev;
++                else
++                        return 0;
++        }
++
++        return 1;
++}
++
++static int sd_is_socket_internal(int fd, int type, int listening) {
++        struct stat st_fd;
++
++        if (fd < 0 || type < 0)
++                return -EINVAL;
++
++        if (fstat(fd, &st_fd) < 0)
++                return -errno;
++
++        if (!S_ISSOCK(st_fd.st_mode))
++                return 0;
++
++        if (type != 0) {
++                int other_type = 0;
++                socklen_t l = sizeof(other_type);
++
++                if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
++                        return -errno;
++
++                if (l != sizeof(other_type))
++                        return -EINVAL;
++
++                if (other_type != type)
++                        return 0;
++        }
++
++        if (listening >= 0) {
++                int accepting = 0;
++                socklen_t l = sizeof(accepting);
++
++                if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
++                        return -errno;
++
++                if (l != sizeof(accepting))
++                        return -EINVAL;
++
++                if (!accepting != !listening)
++                        return 0;
++        }
++
++        return 1;
++}
++
++union sockaddr_union {
++        struct sockaddr sa;
++        struct sockaddr_in in4;
++        struct sockaddr_in6 in6;
++        struct sockaddr_un un;
++        struct sockaddr_storage storage;
++};
++
++_sd_export_ int sd_is_socket(int fd, int family, int type, int listening) {
++        int r;
++
++        if (family < 0)
++                return -EINVAL;
++
++        if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++                return r;
++
++        if (family > 0) {
++                union sockaddr_union sockaddr;
++                socklen_t l;
++
++                memset(&sockaddr, 0, sizeof(sockaddr));
++                l = sizeof(sockaddr);
++
++                if (getsockname(fd, &sockaddr.sa, &l) < 0)
++                        return -errno;
++
++                if (l < sizeof(sa_family_t))
++                        return -EINVAL;
++
++                return sockaddr.sa.sa_family == family;
++        }
++
++        return 1;
++}
++
++_sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
++        union sockaddr_union sockaddr;
++        socklen_t l;
++        int r;
++
++        if (family != 0 && family != AF_INET && family != AF_INET6)
++                return -EINVAL;
++
++        if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++                return r;
++
++        memset(&sockaddr, 0, sizeof(sockaddr));
++        l = sizeof(sockaddr);
++
++        if (getsockname(fd, &sockaddr.sa, &l) < 0)
++                return -errno;
++
++        if (l < sizeof(sa_family_t))
++                return -EINVAL;
++
++        if (sockaddr.sa.sa_family != AF_INET &&
++            sockaddr.sa.sa_family != AF_INET6)
++                return 0;
++
++        if (family > 0)
++                if (sockaddr.sa.sa_family != family)
++                        return 0;
++
++        if (port > 0) {
++                if (sockaddr.sa.sa_family == AF_INET) {
++                        if (l < sizeof(struct sockaddr_in))
++                                return -EINVAL;
++
++                        return htons(port) == sockaddr.in4.sin_port;
++                } else {
++                        if (l < sizeof(struct sockaddr_in6))
++                                return -EINVAL;
++
++                        return htons(port) == sockaddr.in6.sin6_port;
++                }
++        }
++
++        return 1;
++}
++
++_sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
++        union sockaddr_union sockaddr;
++        socklen_t l;
++        int r;
++
++        if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++                return r;
++
++        memset(&sockaddr, 0, sizeof(sockaddr));
++        l = sizeof(sockaddr);
++
++        if (getsockname(fd, &sockaddr.sa, &l) < 0)
++                return -errno;
++
++        if (l < sizeof(sa_family_t))
++                return -EINVAL;
++
++        if (sockaddr.sa.sa_family != AF_UNIX)
++                return 0;
++
++        if (path) {
++                if (length <= 0)
++                        length = strlen(path);
++
++                if (length <= 0)
++                        /* Unnamed socket */
++                        return l == offsetof(struct sockaddr_un, sun_path);
++
++                if (path[0])
++                        /* Normal path socket */
++                        return
++                                (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
++                                memcmp(path, sockaddr.un.sun_path, length+1) == 0;
++                else
++                        /* Abstract namespace socket */
++                        return
++                                (l == offsetof(struct sockaddr_un, sun_path) + length) &&
++                                memcmp(path, sockaddr.un.sun_path, length) == 0;
++        }
++
++        return 1;
++}
++
++_sd_export_ int sd_is_mq(int fd, const char *path) {
++#if !defined(__linux__)
++        return 0;
++#else
++        struct mq_attr attr;
++
++        if (fd < 0)
++                return -EINVAL;
++
++        if (mq_getattr(fd, &attr) < 0)
++                return -errno;
++
++        if (path) {
++                char fpath[PATH_MAX];
++                struct stat a, b;
++
++                if (path[0] != '/')
++                        return -EINVAL;
++
++                if (fstat(fd, &a) < 0)
++                        return -errno;
++
++                strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
++                fpath[sizeof(fpath)-1] = 0;
++
++                if (stat(fpath, &b) < 0)
++                        return -errno;
++
++                if (a.st_dev != b.st_dev ||
++                    a.st_ino != b.st_ino)
++                        return 0;
++        }
++
++        return 1;
++#endif
++}
++
++_sd_export_ int sd_notify(int unset_environment, const char *state) {
++#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC)
++        return 0;
++#else
++        int fd = -1, r;
++        struct msghdr msghdr;
++        struct iovec iovec;
++        union sockaddr_union sockaddr;
++        const char *e;
++
++        if (!state) {
++                r = -EINVAL;
++                goto finish;
++        }
++
++        if (!(e = getenv("NOTIFY_SOCKET")))
++                return 0;
++
++        /* Must be an abstract socket, or an absolute path */
++        if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
++                r = -EINVAL;
++                goto finish;
++        }
++
++        if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) {
++                r = -errno;
++                goto finish;
++        }
++
++        memset(&sockaddr, 0, sizeof(sockaddr));
++        sockaddr.sa.sa_family = AF_UNIX;
++        strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
++
++        if (sockaddr.un.sun_path[0] == '@')
++                sockaddr.un.sun_path[0] = 0;
++
++        memset(&iovec, 0, sizeof(iovec));
++        iovec.iov_base = (char*) state;
++        iovec.iov_len = strlen(state);
++
++        memset(&msghdr, 0, sizeof(msghdr));
++        msghdr.msg_name = &sockaddr;
++        msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
++
++        if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
++                msghdr.msg_namelen = sizeof(struct sockaddr_un);
++
++        msghdr.msg_iov = &iovec;
++        msghdr.msg_iovlen = 1;
++
++        if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
++                r = -errno;
++                goto finish;
++        }
++
++        r = 1;
++
++finish:
++        if (unset_environment)
++                unsetenv("NOTIFY_SOCKET");
++
++        if (fd >= 0)
++                close(fd);
++
++        return r;
++#endif
++}
++
++_sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) {
++#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
++        return 0;
++#else
++        va_list ap;
++        char *p = NULL;
++        int r;
++
++        va_start(ap, format);
++        r = vasprintf(&p, format, ap);
++        va_end(ap);
++
++        if (r < 0 || !p)
++                return -ENOMEM;
++
++        r = sd_notify(unset_environment, p);
++        free(p);
++
++        return r;
++#endif
++}
++
++_sd_export_ int sd_booted(void) {
++#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
++        return 0;
++#else
++
++        struct stat a, b;
++
++        /* We simply test whether the systemd cgroup hierarchy is
++         * mounted */
++
++        if (lstat("/sys/fs/cgroup", &a) < 0)
++                return 0;
++
++        if (lstat("/sys/fs/cgroup/systemd", &b) < 0)
++                return 0;
++
++        return a.st_dev != b.st_dev;
++#endif
++}
index 0000000,0000000..fe51159
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,282 @@@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++#ifndef foosddaemonhfoo
++#define foosddaemonhfoo
++
++/***
++  Copyright 2010 Lennart Poettering
++
++  Permission is hereby granted, free of charge, to any person
++  obtaining a copy of this software and associated documentation files
++  (the "Software"), to deal in the Software without restriction,
++  including without limitation the rights to use, copy, modify, merge,
++  publish, distribute, sublicense, and/or sell copies of the Software,
++  and to permit persons to whom the Software is furnished to do so,
++  subject to the following conditions:
++
++  The above copyright notice and this permission notice shall be
++  included in all copies or substantial portions of the Software.
++
++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
++  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
++  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++  SOFTWARE.
++***/
++
++#include <sys/types.h>
++#include <inttypes.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++  Reference implementation of a few systemd related interfaces for
++  writing daemons. These interfaces are trivial to implement. To
++  simplify porting we provide this reference implementation.
++  Applications are welcome to reimplement the algorithms described
++  here if they do not want to include these two source files.
++
++  The following functionality is provided:
++
++  - Support for logging with log levels on stderr
++  - File descriptor passing for socket-based activation
++  - Daemon startup and status notification
++  - Detection of systemd boots
++
++  You may compile this with -DDISABLE_SYSTEMD to disable systemd
++  support. This makes all those calls NOPs that are directly related to
++  systemd (i.e. only sd_is_xxx() will stay useful).
++
++  Since this is drop-in code we don't want any of our symbols to be
++  exported in any case. Hence we declare hidden visibility for all of
++  them.
++
++  You may find an up-to-date version of these source files online:
++
++  http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h
++  http://cgit.freedesktop.org/systemd/systemd/plain/src/sd-daemon.c
++
++  This should compile on non-Linux systems, too, but with the
++  exception of the sd_is_xxx() calls all functions will become NOPs.
++
++  See sd-daemon(7) for more information.
++*/
++
++#ifndef _sd_printf_attr_
++#if __GNUC__ >= 4
++#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
++#else
++#define _sd_printf_attr_(a,b)
++#endif
++#endif
++
++/*
++  Log levels for usage on stderr:
++
++          fprintf(stderr, SD_NOTICE "Hello World!\n");
++
++  This is similar to printk() usage in the kernel.
++*/
++#define SD_EMERG   "<0>"  /* system is unusable */
++#define SD_ALERT   "<1>"  /* action must be taken immediately */
++#define SD_CRIT    "<2>"  /* critical conditions */
++#define SD_ERR     "<3>"  /* error conditions */
++#define SD_WARNING "<4>"  /* warning conditions */
++#define SD_NOTICE  "<5>"  /* normal but significant condition */
++#define SD_INFO    "<6>"  /* informational */
++#define SD_DEBUG   "<7>"  /* debug-level messages */
++
++/* The first passed file descriptor is fd 3 */
++#define SD_LISTEN_FDS_START 3
++
++/*
++  Returns how many file descriptors have been passed, or a negative
++  errno code on failure. Optionally, removes the $LISTEN_FDS and
++  $LISTEN_PID file descriptors from the environment (recommended, but
++  problematic in threaded environments). If r is the return value of
++  this function you'll find the file descriptors passed as fds
++  SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative
++  errno style error code on failure. This function call ensures that
++  the FD_CLOEXEC flag is set for the passed file descriptors, to make
++  sure they are not passed on to child processes. If FD_CLOEXEC shall
++  not be set, the caller needs to unset it after this call for all file
++  descriptors that are used.
++
++  See sd_listen_fds(3) for more information.
++*/
++int sd_listen_fds(int unset_environment);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is a FIFO in the file system stored under the
++  specified path, 0 otherwise. If path is NULL a path name check will
++  not be done and the call only verifies if the file descriptor
++  refers to a FIFO. Returns a negative errno style error code on
++  failure.
++
++  See sd_is_fifo(3) for more information.
++*/
++int sd_is_fifo(int fd, const char *path);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is a special character device on the file
++  system stored under the specified path, 0 otherwise.
++  If path is NULL a path name check will not be done and the call
++  only verifies if the file descriptor refers to a special character.
++  Returns a negative errno style error code on failure.
++
++  See sd_is_special(3) for more information.
++*/
++int sd_is_special(int fd, const char *path);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is a socket of the specified family (AF_INET,
++  ...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If
++  family is 0 a socket family check will not be done. If type is 0 a
++  socket type check will not be done and the call only verifies if
++  the file descriptor refers to a socket. If listening is > 0 it is
++  verified that the socket is in listening mode. (i.e. listen() has
++  been called) If listening is == 0 it is verified that the socket is
++  not in listening mode. If listening is < 0 no listening mode check
++  is done. Returns a negative errno style error code on failure.
++
++  See sd_is_socket(3) for more information.
++*/
++int sd_is_socket(int fd, int family, int type, int listening);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is an Internet socket, of the specified family
++  (either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM,
++  SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version
++  check is not done. If type is 0 a socket type check will not be
++  done. If port is 0 a socket port check will not be done. The
++  listening flag is used the same way as in sd_is_socket(). Returns a
++  negative errno style error code on failure.
++
++  See sd_is_socket_inet(3) for more information.
++*/
++int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is an AF_UNIX socket of the specified type
++  (SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0
++  a socket type check will not be done. If path is NULL a socket path
++  check will not be done. For normal AF_UNIX sockets set length to
++  0. For abstract namespace sockets set length to the length of the
++  socket name (including the initial 0 byte), and pass the full
++  socket path in path (including the initial 0 byte). The listening
++  flag is used the same way as in sd_is_socket(). Returns a negative
++  errno style error code on failure.
++
++  See sd_is_socket_unix(3) for more information.
++*/
++int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length);
++
++/*
++  Helper call for identifying a passed file descriptor. Returns 1 if
++  the file descriptor is a POSIX Message Queue of the specified name,
++  0 otherwise. If path is NULL a message queue name check is not
++  done. Returns a negative errno style error code on failure.
++*/
++int sd_is_mq(int fd, const char *path);
++
++/*
++  Informs systemd about changed daemon state. This takes a number of
++  newline separated environment-style variable assignments in a
++  string. The following variables are known:
++
++     READY=1      Tells systemd that daemon startup is finished (only
++                  relevant for services of Type=notify). The passed
++                  argument is a boolean "1" or "0". Since there is
++                  little value in signaling non-readiness the only
++                  value daemons should send is "READY=1".
++
++     STATUS=...   Passes a single-line status string back to systemd
++                  that describes the daemon state. This is free-from
++                  and can be used for various purposes: general state
++                  feedback, fsck-like programs could pass completion
++                  percentages and failing programs could pass a human
++                  readable error message. Example: "STATUS=Completed
++                  66% of file system check..."
++
++     ERRNO=...    If a daemon fails, the errno-style error code,
++                  formatted as string. Example: "ERRNO=2" for ENOENT.
++
++     BUSERROR=... If a daemon fails, the D-Bus error-style error
++                  code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut"
++
++     MAINPID=...  The main pid of a daemon, in case systemd did not
++                  fork off the process itself. Example: "MAINPID=4711"
++
++     WATCHDOG=1   Tells systemd to update the watchdog timestamp.
++                  Services using this feature should do this in
++                  regular intervals. A watchdog framework can use the
++                  timestamps to detect failed services.
++
++  Daemons can choose to send additional variables. However, it is
++  recommended to prefix variable names not listed above with X_.
++
++  Returns a negative errno-style error code on failure. Returns > 0
++  if systemd could be notified, 0 if it couldn't possibly because
++  systemd is not running.
++
++  Example: When a daemon finished starting up, it could issue this
++  call to notify systemd about it:
++
++     sd_notify(0, "READY=1");
++
++  See sd_notifyf() for more complete examples.
++
++  See sd_notify(3) for more information.
++*/
++int sd_notify(int unset_environment, const char *state);
++
++/*
++  Similar to sd_notify() but takes a format string.
++
++  Example 1: A daemon could send the following after initialization:
++
++     sd_notifyf(0, "READY=1\n"
++                   "STATUS=Processing requests...\n"
++                   "MAINPID=%lu",
++                   (unsigned long) getpid());
++
++  Example 2: A daemon could send the following shortly before
++  exiting, on failure:
++
++     sd_notifyf(0, "STATUS=Failed to start up: %s\n"
++                   "ERRNO=%i",
++                   strerror(errno),
++                   errno);
++
++  See sd_notifyf(3) for more information.
++*/
++int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3);
++
++/*
++  Returns > 0 if the system was booted with systemd. Returns < 0 on
++  error. Returns 0 if the system was not booted with systemd. Note
++  that all of the functions above handle non-systemd boots just
++  fine. You should NOT protect them with a call to this function. Also
++  note that this function checks whether the system, not the user
++  session is controlled by systemd. However the functions above work
++  for both user and system services.
++
++  See sd_booted(3) for more information.
++*/
++int sd_booted(void);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
index 0000000,6161fb3..6161fb3
mode 000000,100644..100644
--- /dev/null
index 0000000,c9712e9..c9712e9
mode 000000,100644..100644
--- /dev/null
index 0000000,e57f03e..e57f03e
mode 000000,100644..100644
--- /dev/null
index 0000000,d212c64..d212c64
mode 000000,100644..100644
--- /dev/null
index 0000000,aa996f3..aa996f3
mode 000000,100644..100644
--- /dev/null
index 0000000,a062ef7..a062ef7
mode 000000,100644..100644
--- /dev/null
index 0000000,57e813f..57e813f
mode 000000,100644..100644
--- /dev/null
index 0000000,a8559d2..a8559d2
mode 000000,100644..100644
--- /dev/null
index 0000000,85828e3..85828e3
mode 000000,100644..100644
--- /dev/null
index 0000000,5bc5fa6..5bc5fa6
mode 000000,100644..100644
--- /dev/null
index 0000000,f80f774..f80f774
mode 000000,100644..100644
--- /dev/null
index 0000000,5556f1a..5556f1a
mode 000000,100644..100644
--- /dev/null
index 0000000,45dd77b..45dd77b
mode 000000,100644..100644
--- /dev/null
index 0000000,23fa9d5..23fa9d5
mode 000000,100644..100644
--- /dev/null
index 0000000,7a01a47..7a01a47
mode 000000,100644..100644
--- /dev/null
index 0000000,8a85eae..8a85eae
mode 000000,100644..100644
--- /dev/null
index 0000000,b0a4964..b0a4964
mode 000000,100644..100644
--- /dev/null
index 0000000,cd81945..cd81945
mode 000000,100644..100644
--- /dev/null
index 0000000,228d18f..228d18f
mode 000000,100644..100644
--- /dev/null
index 0000000,f39253e..f39253e
mode 000000,100644..100644
--- /dev/null
index 0000000,bc051c9..bc051c9
mode 000000,100644..100644
--- /dev/null
index 0000000,0b04c02..0b04c02
mode 000000,100644..100644
--- /dev/null
index 0000000,c27eb1b..c27eb1b
mode 000000,100644..100644
--- /dev/null
index 0000000,8eb583a..8eb583a
mode 000000,100644..100644
--- /dev/null
index 0000000,cafa214..cafa214
mode 000000,100644..100644
--- /dev/null
index 0000000,ee9b59f..ee9b59f
mode 000000,100644..100644
--- /dev/null
index 0000000,5997dd8..5997dd8
mode 000000,100644..100644
--- /dev/null
index 0000000,b168def..b168def
mode 000000,100644..100644
--- /dev/null
index 0000000,3a49f7c..3a49f7c
mode 000000,100644..100644
--- /dev/null
index 0000000,6275cff..6275cff
mode 000000,100644..100644
--- /dev/null
index 0000000,3cce23d..3cce23d
mode 000000,100644..100644
--- /dev/null
index 0000000,224ece0..224ece0
mode 000000,100644..100644
--- /dev/null
index 0000000,455ce80..455ce80
mode 000000,100644..100644
--- /dev/null
index 0000000,1702217..1702217
mode 000000,100644..100644
--- /dev/null
index 0000000,c516eb9..c516eb9
mode 000000,100644..100644
--- /dev/null
index 0000000,a2a80b5..a2a80b5
mode 000000,100644..100644
--- /dev/null
index 0000000,98fa886..98fa886
mode 000000,100644..100644
--- /dev/null
index 0000000,ff1b63d..ff1b63d
mode 000000,100755..100755
--- /dev/null
index 0000000,1e224ff..1e224ff
mode 000000,100755..100755
--- /dev/null
index 0000000,49ee802..49ee802
mode 000000,100644..100644
Binary files differ
index 0000000,0b379b0..0b379b0
mode 000000,100755..100755
--- /dev/null