./PaxHeaders.12492/udev-1820000644000521600052160000000013211731430511013437 xustar000000000000000030 mtime=1332097353.856438939 30 atime=1332097354.343438951 30 ctime=1332097353.856438939 udev-182/0000775000521600052160000000000011731430511011763 5ustar00kaykay00000000000000udev-182/PaxHeaders.12492/config.h.in0000644000521600052160000000007311731430313015406 xustar000000000000000029 atime=1332097295.13843754 30 ctime=1332097352.829438915 udev-182/config.h.in0000664000521600052160000000612311731430313014010 0ustar00kaykay00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Debug messages. */ #undef ENABLE_DEBUG /* enable GObject introspection support */ #undef ENABLE_INTROSPECTION /* System logging. */ #undef ENABLE_LOGGING /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `selinux' library (-lselinux). */ #undef HAVE_LIBSELINUX /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the file `/usr/share/hwdata/pci.ids'. */ #undef HAVE__USR_SHARE_HWDATA_PCI_IDS /* Define to 1 if you have the file `/usr/share/misc/pci.ids'. */ #undef HAVE__USR_SHARE_MISC_PCI_IDS /* Define to 1 if you have the file `/usr/share/pci.ids'. */ #undef HAVE__USR_SHARE_PCI_IDS /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* SELinux support. */ #undef WITH_SELINUX /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE udev-182/PaxHeaders.12492/configure.ac0000644000521600052160000000013111731415303015646 xustar000000000000000029 mtime=1332091587.30130153 30 atime=1332091588.788301566 30 ctime=1332097352.023438897 udev-182/configure.ac0000664000521600052160000002442511731415303014262 0ustar00kaykay00000000000000AC_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 ' | 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} ]) udev-182/PaxHeaders.12492/rules0000644000521600052160000000013211731430510014433 xustar000000000000000030 mtime=1332097352.604438909 30 atime=1332097354.343438951 30 ctime=1332097352.604438909 udev-182/rules/0000775000521600052160000000000011731430510013114 5ustar00kaykay00000000000000udev-182/rules/PaxHeaders.12492/60-persistent-serial.rules0000644000521600052160000000013111616610347021475 xustar000000000000000030 mtime=1312493799.028370195 29 atime=1332083869.26111762 30 ctime=1332097352.530438909 udev-182/rules/60-persistent-serial.rules0000664000521600052160000000166311616610347020110 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_serial_end" SUBSYSTEM!="tty", GOTO="persistent_serial_end" KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="persistent_serial_end" SUBSYSTEMS=="usb-serial", ENV{.ID_PORT}="$attr{port_number}" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}" ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{.ID_PORT}" IMPORT{builtin}="usb_id" ENV{ID_SERIAL}=="", GOTO="persistent_serial_end" SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}" ENV{ID_USB_INTERFACE_NUM}=="", GOTO="persistent_serial_end" ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}" ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}-port$env{.ID_PORT}" LABEL="persistent_serial_end" udev-182/rules/PaxHeaders.12492/60-persistent-alsa.rules0000644000521600052160000000013011616610262021131 xustar000000000000000029 mtime=1312493746.13266623 29 atime=1332083869.28011762 30 ctime=1332097352.549438909 udev-182/rules/60-persistent-alsa.rules0000664000521600052160000000115011616610262017534 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_alsa_end" SUBSYSTEM!="sound", GOTO="persistent_alsa_end" KERNEL!="controlC[0-9]*", GOTO="persistent_alsa_end" SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", SYMLINK+="snd/by-path/$env{ID_PATH}" LABEL="persistent_alsa_end" udev-182/rules/PaxHeaders.12492/60-persistent-input.rules0000644000521600052160000000013111616610313021346 xustar000000000000000030 mtime=1312493771.020526943 29 atime=1332083869.27111762 30 ctime=1332097352.539438909 udev-182/rules/60-persistent-input.rules0000664000521600052160000000454011616610313017756 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_input_end" SUBSYSTEM!="input", GOTO="persistent_input_end" SUBSYSTEMS=="bluetooth", GOTO="persistent_input_end" SUBSYSTEMS=="usb", ENV{ID_BUS}=="", IMPORT{builtin}="usb_id" # determine class name for persistent symlinks ENV{ID_INPUT_KEYBOARD}=="?*", ENV{.INPUT_CLASS}="kbd" ENV{ID_INPUT_MOUSE}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_TOUCHPAD}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_TABLET}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_JOYSTICK}=="?*", ENV{.INPUT_CLASS}="joystick" DRIVERS=="pcspkr", ENV{.INPUT_CLASS}="spkr" ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{.INPUT_CLASS}="ir" # fill empty serial number ENV{.INPUT_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial" # by-id links KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{.INPUT_CLASS}" KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-$env{.INPUT_CLASS}" KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{.INPUT_CLASS}" KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-event-$env{.INPUT_CLASS}" # allow empty class for USB devices, by appending the interface number SUBSYSTEMS=="usb", ENV{ID_BUS}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ATTRS{bInterfaceNumber}=="?*", \ SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-if$attr{bInterfaceNumber}" # by-path SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", KERNEL=="mouse*|js*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{.INPUT_CLASS}" ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{.INPUT_CLASS}" # allow empty class for platform and usb devices; platform supports only a single interface that way SUBSYSTEMS=="usb|platform", ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", \ SYMLINK+="input/by-path/$env{ID_PATH}-event" LABEL="persistent_input_end" udev-182/rules/PaxHeaders.12492/42-usb-hid-pm.rules0000644000521600052160000000013011727466530017772 xustar000000000000000028 mtime=1331588440.5695341 30 atime=1332083869.226117619 30 ctime=1332097352.489438907 udev-182/rules/42-usb-hid-pm.rules0000664000521600052160000000525411727466530016406 0ustar00kaykay00000000000000# # Enable autosuspend for qemu emulated usb hid devices. # # Note that there are buggy qemu versions which advertise remote # wakeup support but don't actually implement it correctly. This # is the reason why we need a match for the serial number here. # The serial number "42" is used to tag the implementations where # remote wakeup is working. # ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Mouse", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Tablet", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Keyboard", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" # # Enable autosuspend for KVM and iLO usb hid devices. These are # effectively self-powered (despite what some claim in their USB # profiles) and so it's safe to do so. # # AMI 046b:ff10 ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046b", ATTR{idProduct}=="ff10", TEST=="power/control", ATTR{power/control}="auto" # # Catch-all for Avocent HID devices. Keyed off interface in order to only # trigger on HID class devices. # ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0624", ATTR{bInterfaceClass}=="03", TEST=="../power/control", ATTR{../power/control}="auto" # Dell DRAC 4 ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="413c", ATTR{idProduct}=="2500", TEST=="power/control", ATTR{power/control}="auto" # Dell DRAC 5 ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="413c", ATTR{idProduct}=="0000", TEST=="power/control", ATTR{power/control}="auto" # Hewlett Packard iLO ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="7029", TEST=="power/control", ATTR{power/control}="auto" ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="1027", TEST=="power/control", ATTR{power/control}="auto" # IBM remote access ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04b3", ATTR{idProduct}=="4001", TEST=="power/control", ATTR{power/control}="auto" ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04b3", ATTR{idProduct}=="4002", TEST=="power/control", ATTR{power/control}="auto" ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="04b3", ATTR{idProduct}=="4012", TEST=="power/control", ATTR{power/control}="auto" # Raritan Computer, Inc KVM. ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="14dd", ATTR{idProduct}="0002", TEST=="power/control", ATTR{power/control}="auto" # USB HID devices that are internal to the machine should also be safe to autosuspend ACTION=="add", SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", ATTRS{removable}=="fixed", TEST=="../power/control", ATTR{../power/control}="auto" udev-182/rules/PaxHeaders.12492/95-udev-late.rules0000644000521600052160000000007411305731317017720 xustar000000000000000030 atime=1332083869.349117622 30 ctime=1332097352.604438909 udev-182/rules/95-udev-late.rules0000644000521600052160000000023311305731317016313 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update # run a command on remove events ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}" udev-182/rules/PaxHeaders.12492/78-sound-card.rules0000644000521600052160000000013211711107130020054 xustar000000000000000030 mtime=1327795800.545394797 30 atime=1332083869.326117621 30 ctime=1332097352.589438909 udev-182/rules/78-sound-card.rules0000664000521600052160000001011611711107130016457 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update SUBSYSTEM!="sound", GOTO="sound_end" ACTION=="add|change", KERNEL=="controlC*", ATTR{../uevent}="change" ACTION!="change", GOTO="sound_end" # Ok, we probably need a little explanation here for what the two lines above # are good for. # # The story goes like this: when ALSA registers a new sound card it emits a # series of 'add' events to userspace, for the main card device and for all the # child device nodes that belong to it. udev relays those to applications, # however only maintains the order between father and child, but not between # the siblings. The control device node creation can be used as synchronization # point. All other devices that belong to a card are created in the kernel # before it. However unfortunately due to the fact that siblings are forwarded # out of order by udev this fact is lost to applications. # # OTOH before an application can open a device it needs to make sure that all # its device nodes are completely created and set up. # # As a workaround for this issue we have added the udev rule above which will # generate a 'change' event on the main card device from the 'add' event of the # card's control device. Due to the ordering semantics of udev this event will # only be relayed after all child devices have finished processing properly. # When an application needs to listen for appearing devices it can hence look # for 'change' events only, and ignore the actual 'add' events. # # When the application is initialized at the same time as a device is plugged # in it may need to figure out if the 'change' event has already been triggered # or not for a card. To find that out we store the flag environment variable # SOUND_INITIALIZED on the device which simply tells us if the card 'change' # event has already been processed. KERNEL!="card*", GOTO="sound_end" ENV{SOUND_INITIALIZED}="1" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" SUBSYSTEMS=="usb", GOTO="skip_pci" SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" LABEL="skip_pci" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}-$attr{id}" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$attr{id}" IMPORT{builtin}="path_id" # The values used here for $SOUND_FORM_FACTOR and $SOUND_CLASS should be kept # in sync with those defined for PulseAudio's src/pulse/proplist.h # PA_PROP_DEVICE_FORM_FACTOR, PA_PROP_DEVICE_CLASS properties. # If the first PCM device of this card has the pcm class 'modem', then the card is a modem ATTR{pcmC%nD0p/pcm_class}=="modem", ENV{SOUND_CLASS}="modem", GOTO="sound_end" # Identify cards on the internal PCI bus as internal SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:??.?/sound/*", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end" # Devices that also support Image/Video interfaces are most likely webcams SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACES}=="*:0e????:*", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end" # Matching on the model strings is a bit ugly, I admit ENV{ID_MODEL}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" LABEL="sound_end" udev-182/rules/PaxHeaders.12492/60-persistent-storage.rules0000644000521600052160000000013211721455230021656 xustar000000000000000030 mtime=1330010776.412136132 30 atime=1332083869.291117621 30 ctime=1332097352.559438909 udev-182/rules/60-persistent-storage.rules0000664000521600052160000001276611721455230020276 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update # persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path} # scheme based on "Linux persistent device names", 2004, Hannes Reinecke # forward scsi device event to corresponding block device ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" ACTION=="remove", GOTO="persistent_storage_end" # enable in-kernel media-presence polling ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000" SUBSYSTEM!="block", GOTO="persistent_storage_end" # skip rules for inappropriate block devices KERNEL=="fd*|mtd*|nbd*|gnbd*|btibm*|dm-*|md*", GOTO="persistent_storage_end" # ignore partitions that span the entire disk TEST=="whole_disk", GOTO="persistent_storage_end" # for partitions import parent information ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" # virtio-blk KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}" KERNEL=="vd*[0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}-part%n" # ATA devices with their own "ata" kernel subsystem KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="ata", IMPORT{program}="ata_id --export $devnode" # ATA devices using the "scsi" subsystem KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", IMPORT{program}="ata_id --export $devnode" # ATA/ATAPI devices (SPC-3 or later) using the "scsi" subsystem KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{type}=="5", ATTRS{scsi_level}=="[6-9]*", IMPORT{program}="ata_id --export $devnode" # Run ata_id on non-removable USB Mass Storage (SATA/PATA disks in enclosures) KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", ATTR{removable}=="0", SUBSYSTEMS=="usb", IMPORT{program}="ata_id --export $devnode" # Otherwise fall back to using usb_id for USB devices KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" # scsi devices KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi" KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="cciss" KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}" KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n" # firewire KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}" KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n" KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}" KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n" KERNEL=="mspblk[0-9]", SUBSYSTEMS=="memstick", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}" KERNEL=="mspblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}-part%n" # by-path (parent device path) ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" # skip unpartitioned removable media devices from drivers which do not send "change" events ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end" # probe filesystem metadata of optical drives which have a media inserted KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \ IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}" # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \ IMPORT{builtin}="blkid --noraid" # probe filesystem metadata of disks KERNEL!="sr*", IMPORT{builtin}="blkid" # watch metadata changes by tools closing the device after writing KERNEL!="sr*", OPTIONS+="watch" # by-label/by-uuid links (filesystem metadata) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" # by-id (World Wide Name) ENV{DEVTYPE}=="disk", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}" ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}-part%n" # by-partlabel/by-partuuid links (partition metadata) ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}" LABEL="persistent_storage_end" udev-182/rules/PaxHeaders.12492/75-tty-description.rules0000644000521600052160000000013211711107130021153 xustar000000000000000030 mtime=1327795800.545394797 30 atime=1332083869.320117621 30 ctime=1332097352.579438909 udev-182/rules/75-tty-description.rules0000664000521600052160000000107211711107130017557 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="tty_end" SUBSYSTEM!="tty", GOTO="tty_end" SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" SUBSYSTEMS=="usb", ATTRS{idVendor}!="", ATTRS{idProduct}!="", ENV{ID_VENDOR_ID}="$attr{idVendor}", ENV{ID_MODEL_ID}="$attr{idProduct}" SUBSYSTEMS=="usb", GOTO="tty_end" SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" LABEL="tty_end" udev-182/rules/PaxHeaders.12492/80-drivers.rules0000644000521600052160000000013211711107130017464 xustar000000000000000030 mtime=1327795800.545394797 30 atime=1332083869.341117622 30 ctime=1332097352.599438909 udev-182/rules/80-drivers.rules0000664000521600052160000000106511711107130016072 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="drivers_end" DRIVER!="?*", ENV{MODALIAS}=="?*", IMPORT{builtin}="kmod load $env{MODALIAS}" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", IMPORT{builtin}="kmod load tifm_sd" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", IMPORT{builtin}="kmod load tifm_ms" SUBSYSTEM=="memstick", IMPORT{builtin}="kmod load ms_block mspro_block" SUBSYSTEM=="i2o", IMPORT{builtin}="kmod load i2o_block" SUBSYSTEM=="module", KERNEL=="parport_pc", IMPORT{builtin}="kmod load ppdev" LABEL="drivers_end" udev-182/rules/PaxHeaders.12492/75-net-description.rules0000644000521600052160000000013211711107130021121 xustar000000000000000030 mtime=1327795800.545394797 30 atime=1332083869.305117621 30 ctime=1332097352.569438909 udev-182/rules/75-net-description.rules0000664000521600052160000000107211711107130017525 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="net_end" SUBSYSTEM!="net", GOTO="net_end" SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" SUBSYSTEMS=="usb", ATTRS{idVendor}!="", ATTRS{idProduct}!="", ENV{ID_VENDOR_ID}="$attr{idVendor}", ENV{ID_MODEL_ID}="$attr{idProduct}" SUBSYSTEMS=="usb", GOTO="net_end" SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" LABEL="net_end" udev-182/rules/PaxHeaders.12492/50-udev-default.rules0000644000521600052160000000013111711107662020401 xustar000000000000000029 mtime=1327796146.94882703 30 atime=1332083869.241117619 30 ctime=1332097352.503438907 udev-182/rules/50-udev-default.rules0000664000521600052160000000710411711107662017010 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" KERNEL=="ptmx", GROUP="tty", MODE="0666" KERNEL=="tty", GROUP="tty", MODE="0666" KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620" KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty" # serial KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" KERNEL=="mwave", GROUP="dialout" KERNEL=="hvc*|hvsi*", GROUP="dialout" # virtio serial / console ports KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}" # mem KERNEL=="null|zero|full|random|urandom", MODE="0666" KERNEL=="mem|kmem|port|nvram", GROUP="kmem", MODE="0640" # input SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id" KERNEL=="mouse*|mice|event*", MODE="0640" KERNEL=="ts[0-9]*|uinput", MODE="0640" KERNEL=="js[0-9]*", MODE="0644" # video4linux SUBSYSTEM=="video4linux", GROUP="video" KERNEL=="vttuner*", GROUP="video" KERNEL=="vtx*|vbi*", GROUP="video" KERNEL=="winradio*", GROUP="video" # graphics KERNEL=="agpgart", GROUP="video" KERNEL=="pmu", GROUP="video" KERNEL=="nvidia*|nvidiactl*", GROUP="video" SUBSYSTEM=="graphics", GROUP="video" SUBSYSTEM=="drm", GROUP="video" # sound SUBSYSTEM=="sound", GROUP="audio", \ OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer" # DVB (video) SUBSYSTEM=="dvb", GROUP="video" # FireWire (firewire-core driver: IIDC devices, AV/C devices) SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", GROUP="video" SUBSYSTEM=="firewire", ATTR{units}=="*0x00b09d:0x00010*", GROUP="video" SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", GROUP="video" SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x014001*", GROUP="video" # 'libusb' device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id" # printer KERNEL=="parport[0-9]*", GROUP="lp" SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp" SUBSYSTEM=="ppdev", GROUP="lp" KERNEL=="lp[0-9]*", GROUP="lp" KERNEL=="irlpt[0-9]*", GROUP="lp" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp" # block SUBSYSTEM=="block", GROUP="disk" # floppy SUBSYSTEM=="block", KERNEL=="fd[0-9]", GROUP="floppy" # cdrom SUBSYSTEM=="block", KERNEL=="sr[0-9]*", GROUP="cdrom" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom" KERNEL=="pktcdvd[0-9]*", GROUP="cdrom" KERNEL=="pktcdvd", GROUP="cdrom" # tape KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="tape" KERNEL=="pt[0-9]*|npt[0-9]*|pht[0-9]*", GROUP="tape" SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape" # block-related KERNEL=="sch[0-9]*", GROUP="disk" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk" KERNEL=="pg[0-9]*", GROUP="disk" KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk" KERNEL=="rawctl", GROUP="disk" SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk" SUBSYSTEM=="aoe", GROUP="disk", MODE="0220" SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" # network KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun" KERNEL=="rfkill", MODE="0644" # CPU KERNEL=="cpu[0-9]*", MODE="0444" KERNEL=="fuse", ACTION=="add", MODE="0666", OPTIONS+="static_node=fuse" SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" KERNEL=="mmtimer", MODE="0644" KERNEL=="rflash[0-9]*", MODE="0400" KERNEL=="rrom[0-9]*", MODE="0400" SUBSYSTEM=="firmware", ACTION=="add", IMPORT{builtin}="firmware" udev-182/rules/PaxHeaders.12492/60-persistent-storage-tape.rules0000644000521600052160000000013111711107662022606 xustar000000000000000030 mtime=1327796146.949827028 29 atime=1332083869.24911762 30 ctime=1332097352.518438907 udev-182/rules/60-persistent-storage-tape.rules0000664000521600052160000000261411711107662021216 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update # persistent storage links: /dev/tape/{by-id,by-path} ACTION=="remove", GOTO="persistent_storage_tape_end" # type 8 devices are "Medium Changers" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}" SUBSYSTEM!="scsi_tape", GOTO="persistent_storage_tape_end" KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi" KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" # by-path (parent device path) KERNEL=="st*[0-9]|nst*[0-9]", IMPORT{builtin}="path_id" KERNEL=="st*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}" KERNEL=="nst*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}-nst" LABEL="persistent_storage_tape_end" udev-182/PaxHeaders.12492/m40000644000521600052160000000013211731430510013621 xustar000000000000000030 mtime=1332097352.018438895 30 atime=1332097354.344438951 30 ctime=1332097352.018438895 udev-182/m4/0000775000521600052160000000000011731430510012302 5ustar00kaykay00000000000000udev-182/m4/PaxHeaders.12492/libtool.m40000644000521600052160000000007411701240101015601 xustar000000000000000030 atime=1332082762.805091255 30 ctime=1332097352.000438895 udev-182/m4/libtool.m40000644000521600052160000105743211701240101014212 0ustar00kaykay00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS udev-182/m4/PaxHeaders.12492/ltoptions.m40000644000521600052160000000007411701240101016170 xustar000000000000000030 atime=1332082762.780091254 30 ctime=1332097352.005438895 udev-182/m4/ltoptions.m40000644000521600052160000003007311701240101014570 0ustar00kaykay00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) udev-182/m4/PaxHeaders.12492/ltsugar.m40000644000521600052160000000007411701240101015616 xustar000000000000000030 atime=1332082762.779091254 30 ctime=1332097352.009438895 udev-182/m4/ltsugar.m40000644000521600052160000001042411701240101014214 0ustar00kaykay00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) udev-182/m4/PaxHeaders.12492/ltversion.m40000644000521600052160000000007411701240101016162 xustar000000000000000030 atime=1332082762.777091254 30 ctime=1332097352.014438895 udev-182/m4/ltversion.m40000644000521600052160000000126211701240101014560 0ustar00kaykay00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) udev-182/m4/PaxHeaders.12492/gtk-doc.m40000644000521600052160000000007411632166062015505 xustar000000000000000030 atime=1332082762.641091251 30 ctime=1332097351.993438895 udev-182/m4/gtk-doc.m40000644000521600052160000000461111632166062014104 0ustar00kaykay00000000000000dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first dnl check for tools we added during development AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) if test x$enable_gtk_doc = xyes; then ifelse([$1],[], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,) fi fi AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) udev-182/m4/PaxHeaders.12492/lt~obsolete.m40000644000521600052160000000007411701240101016507 xustar000000000000000030 atime=1332082762.775091254 30 ctime=1332097352.018438895 udev-182/m4/lt~obsolete.m40000644000521600052160000001375611701240101015120 0ustar00kaykay00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) udev-182/PaxHeaders.12492/README0000644000521600052160000000013211711107130014233 xustar000000000000000030 mtime=1327795800.544394799 30 atime=1332083868.647117605 30 ctime=1332097351.989438895 udev-182/README0000664000521600052160000001070111711107130012636 0ustar00kaykay00000000000000udev - 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 udev-182/PaxHeaders.12492/Makefile.am0000644000521600052160000000013211731377416015431 xustar000000000000000030 mtime=1332084494.529132521 30 atime=1332084498.095132604 30 ctime=1332097352.810438915 udev-182/Makefile.am0000664000521600052160000005233111731377416014041 0ustar00kaykay00000000000000# Copyright (C) 2008-2012 Kay Sievers # Copyright (C) 2009 Diego Elio 'Flameeyes' Pettenò SUBDIRS = . ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} AM_MAKEFLAGS = --no-print-directory LIBUDEV_CURRENT=13 LIBUDEV_REVISION=1 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-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/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 udev-182/PaxHeaders.12492/INSTALL0000644000521600052160000000013211711107662014416 xustar000000000000000030 mtime=1327796146.945827033 30 atime=1332083869.640117629 30 ctime=1332097352.855438915 udev-182/INSTALL0000664000521600052160000000261111711107662013022 0ustar00kaykay00000000000000The options used usually look like: %configure \ --prefix=/usr \ --sysconfdir=/etc \ --bindir=/usr/bin \ --libdir=/usr/lib64 \ --libexecdir=/usr/lib \ --with-systemdsystemunitdir=/usr/lib/systemd/system \ --with-selinux The options used in a RPM spec file look like: %configure \ --prefix=%{_prefix} \ --sysconfdir=%{_sysconfdir} \ --bindir=%{_bindir} \ --libdir=%{_libdir} \ --libexecdir=%{_prefix}/lib \ --with-systemdsystemunitdir=%{_prefix}/lib/systemd/system \ --with-selinux The options to install udev in the rootfs instead of /usr, and udevadm in /sbin: --prefix=%{_prefix} \ --with-rootprefix= \ --sysconfdir=%{_sysconfdir} \ --bindir=/sbin \ --libdir=%{_libdir} \ --with-rootlibdir=/lib64 \ --libexecdir=/lib \ --with-systemdsystemunitdir=/lib/systemd/system \ --with-selinux Some tools expect udevadm in 'sbin'. A symlink to udevadm in 'bin' needs to be manually created if needed. The defined location for scripts and binaries which are called from rules is (/usr)/lib/udev/ on all systems and architectures. Any other location will break other packages, who rightfully expect the (/usr)/lib/udev/ directory, to install their rule helper and udev rule files. Default udev rules and persistent device naming rules may be required by other software that depends on the data udev collects from the devices. udev-182/PaxHeaders.12492/ChangeLog0000644000521600052160000000013211731415321015133 xustar000000000000000030 mtime=1332091601.794301876 30 atime=1332091607.685302016 30 ctime=1332097352.847438915 udev-182/ChangeLog0000664000521600052160000067544611731415321013565 0ustar00kaykay00000000000000Summary of changes from v181 to v182 ============================================ Kay Sievers (22): build-sys: unpack test sysfs only for 'make check' build-sys: add --disable-manpages update sd-daemon files test: remove outdated key attributes update TOO builtin: path_id - remove dead cciss code rules: do not create by-id/scsi-* links for ATA devices remove udev-acl udev.conf - do not set any value by default move src/extras subdirectories to src/ rules: delete outdated 30-kernel-compat.rules rules: move 42-qemu-usb.rules to rules/ dir remove edd_id extra build-sys: remove empty directory rules: delete s390 rules, they will move to s390utils update TODO rules: move all rules to top level rules/ dir extras: path_id - skip ATA transport class devices extras: path_id - add comment about readdir() rebase logic extras: ata_id - do not log error if HDIO_GET_IDENTITY fails rules sort order: /lib, /run, /etc build-sys: place build binaries in the root Matthew Garrett (1): rules: Enable USB autosuspend on more USB HID devices Summary of changes from v180 to v181 ============================================ Andreas Schwab (1): ata_id: fix identify string fixup Bruno Redondi (1): keymap: Add Fujitsu Siemens Amilo Li 2732 James M. Leddy (1): keymap: Fix touchpad toggle button on Lenovo Ideapad Kay Sievers (4): configure: show ROOTPREFIX in firmware path option help text extras: cdrom_id - create /dev/cdrom and conditionally /dev/dvd for sr0 extras: cdrom_id - create only /dev/cdrom ata_id: whitespace fixes Lucas De Marchi (1): builtin: kmod - depend on libkmod >= 5 Summary of changes from v179 to v180 ============================================ Kay Sievers (4): Makefile: update kernel.org hooks build-sys: we need to install shipped man pages without xsltproc installed builtin: blkid - add missing ID_ prefix for PART_ENTRY_* keys do not stop rule processing when device node is no longer around Summary of changes from v178 to v179 ============================================ Kay Sievers (8): fix some fallout from tab removal use devnode() for $name not sysname(), device nodes might be in a subdirectory print warning when rules try to rename kernel device nodes move variable inside condition update TODO build-sys: enable everything for 'make distcheck' use sysname() for devices without a device node fix path to extras Summary of changes from v177 to v178 ============================================ Evan Nemerson (1): gudev: several minor introspection fixes Kay Sievers (7): Makefile: update kernel.org doc hooks for kup builtin: blkid - add missing ID_ prefix udevd: kill hanging event processes after 30 seconds Makefile: switch from .asc to .sign rules: rtc - point /dev/rtc symlink to 'hctosys' device warn about deprecated RUN+="socket:" use libudev: do not set DEVNAME= twice Martin Pitt (4): keymap: Fix rfkill button on Hewlett-Packard HP ProBook keymap: Fix eject button on Samsung 700Z series keymap: Fix keyboard brightness keys on Samsung 700Z series keymap: Add Alienware M14xR1 Summary of changes from v176 to v177 ============================================ Kay Sievers (3): Makefile: update kernel.org sign and upload hook rule_generator: fix to install rules in rules.d/ rule_generator: use += for dist_udevhome_DATA Summary of changes from v175 to v176 ============================================ Alan Stern (1): [PATCH[ udev: ata_id: Fix length of INQUIRY command Kay Sievers (61): libudev: print log_fn address instead of ctx when setting logging function do not ship autogen.sh in the tarball man: clarify 'config file stack' rename 'init' directory to 'systemd' systemd: use PassCred=yes use libexecdir, bindir, sbindir, switch to /usr/lib/udev in documentation configure: fix typo make: do not (mis-)use the config file generator, create .xz tarball prepare builtins for blkid and kmod add builtin load/unload initializers build argv[] for builtin commands update blkid builtin rules: switch to built-in blkid rules: do not preprocess 60-persistent-storage.rules buildsys: disable tar.gz builtin: blkid - add missing newline builtin: blkid - add missing ID_FS_USAGE builtin: kmod - switch modprobe to builtin rules: do not preprocess 80-drivers.rules + 75-probe_mtd.rules builtin: apply format string remove last sbindir use update NEWS autogen.sh: moce CFLAGS from to configure.ac; print common ./configure options builtin: kmod - link against libkmod add copyright builtin: kmod - reload index when rules are reloaded builtin: rename load()/unload() to init()/exit() invalidate rules and kmod index with 'udevadm control --reload' update NEWS builtin: firmware - move 'firmware' tool to builtins builtin: firmware - add missing file builtin: kmod - hook up udev main logging to libkmod make: introduce --with-rootprefix= update NEWS move rules dirs to udev context; replace inotify with time-controlled stat() udevd: always create runtime dir builtin: move usb-db, pci-db to builtins builtin: kmod - switch to kmod_module_probe_insert_module() udevd: remove TIMEOUT= handling update README systemd: rename PassCred= to PsssCredentials= remove mknod() logic and rely on 'devtmpfs' builtin: kmod - hook up kmod_validate_resources() build-sys: use use ${ac_default_prefix} require kmod >= 3 build-sys: use --libexecdir=/usr/lib instead of /usr/lib/udev autogen.sh: enable git pre-commit merge udev/, libudev/, systemd/ files in src/; move extras/ to src/ replace unpacked sysfs test tree 'test/sys/' with packed tarball rules: delete arch specific rules doc: fix out of tree build (copy from libkmod) autogen.sh: add CFLAGS and print entire line, so that mouse copy/paste works build-sys: try to build without installed xsltproc add test/src to .gitignore tabs are as useful as a hole in the head autogen.sh: makedev() misteriously breaks with -O0 here, use -O1 for now fix debug message add .vimrc cdrom_id: int -> bool fix compiler warning man: mention that no daemons should be started by udev Lucas De Marchi (1): builtin: kmod - log if modules are blacklisted Luis Felipe Strano Moraes (1): Switch spawn_read to void and remove useless stores there. Martin Pitt (1): 75-persistent-net-generator.rules: Add Xen Mike Frysinger (1): hwdb: drop useless line freeing Sjoerd Simons (1): keymap: Add Lenovo Thinkpad X220 Tablet Ville Skyttä (1): man: spelling fix Summary of changes from v174 to v175 ============================================ David Zeuthen (2): gudev: Use strtoul to parse unsigned 64-bit integers gudev: Use g_ascii_strtoull() instead of strtoul() Harald Hoyer (1): extras/keymap/findkeyboards: beautify shell code and get rid of grep Jerone Young (1): keymap: Fix micmute remap for Lenovo Thinkpads Kay Sievers (7): make: add gpg signing bits ignore entire rules line if unknown keys are used do not skip /dev/{disk,char}/M:m removal when the device node is already gone replace AC_DISABLE_STATIC with LT_INIT([disable-static]) make: tweak some autofoo according to Flameeyes' recommendations for libabc rules: restore rule to set cdrom group for optical drives rules: fix typo Martin Pitt (8): check-keymaps.sh: Allow running separately extras/keymap/findkeyboards: Filter out non-event devices findkeyboards: Consistently use spaces instead of tabs keymap: Fix stuck keys on GIGABYTE i1520M keymap: More Asus module variants keymap: Fix "internet" key on HP G62 keymap: Fix bluetooth key on Acer TravelMate 7720 keymap: Fix stuck keys on BenQ nScreen Summary of changes from v173 to v174 ============================================ David Zeuthen (1): ata_id: Check for Compact Flash card Jerone Young (1): Add mic mute keycode support for Lenovo Thinkpad USB keyboard Kay Sievers (34): gtk-doc: delete empty files libudev: list - use binary search for list lookup rules: move input_id to default rules implement path_id, usb_id, input_id as built-in command do not remove static nodes on module unload rules: remove legacy rules for cdrom and usb printer update TODO preserve 'sticky bit' on 'add/change' events libudev: util_get_sys_(subsystem,driver}() -> util_get_sys_core_link_value() export USEC_INITIALIZED= and take timestamp on message receive time libudev: udev_device_get_sysattr_value() return syspath of custom links libudev: list - properly sort linked list not only the index mknod: do not complain about existing node update README libudev: fix typo in documentation rules: fuse: do not mount fusectl from udev rules keymap: add genius keymap to Makefile update NEWS usb_id: can't use global variables when used as built-in remove 'udevadm trigger --type=failed' and SYSFS, ID, BUS keys libudev: export udev_util_encode_string() update TODO systemd: no not start udev in a container systemd: no not start udev in a container delete left-over files in extras/ systemd: update drop-in sd-daemon files udevadm: control - use /run/udev/control socket instead of abstract namespace one udevd: control - no not delete socket file when --daemon is used udev_ctrl_cleanup()- accept NULL as argument update NEWS udevd: install into /lib/udev instead of /sbin udevd: add missing braces systemd: use ConditionCapability=CAP_MKNOD instead of ConditionVirtualization=!container rules: do not load sg module Kir Kolyshkin (1): keymap: add Genius SlimStar 320 Martin Pitt (1): keymap: Update Acer Aspire 5920g Matthias Clasen (1): make: allow to pass ${ACLOCAL_FLAGS} Paul Fox (1): keymap: update the OLPC keymap for correct function key behavior Petr Uzel (1): udevadm: settle - return failure if unknown option is given Steve Langasek (1): udevd: exit - process events before signals in worker Thomas Hood (2): keymap: Support keymap overrides in /etc/udev/keymaps keymap: Support for microphone mute button on ThinkPad X220 et al Summary of changes from v172 to v173 ============================================ Allin Cottrell (1): configure: allow to disable mtd_probe Kay Sievers (15): make: fix 'make tar-sync' udevd: use 'uptime' in debug timestamp udevd: fix (recently) broken static node permission setting rules: mount fuse filesystem only 'add' udevadm: move udevadm command descriptions into their files udev-acl: skip ACLs when systemd is running, disable by default do not delete database when renaming netif, the db name does not change anymore do not allow kernel properties to be set by udev rules configure: reorder options rules: input - do not create (broken) links for bluetooth devices rules: serial - do not export ID_PORT, use ID_USB_INTERFACE_NUM rules: sound - instead of ID_IFACE use standard ID_USB_INTERFACE_NUM keymap: do not run usb_id for bluetooth devices udevadm: trigger --type=failed - log deprecation warning udevd: debug - put timestamp in [] Martin Pitt (4): gudev: Ship JavaScript examples scsi_id: Ship README Remove obsolete extras/scsi_id/scsi_id.config keymap: Only run on key devices Summary of changes from v171 to v172 ============================================ Bastien Nocera (3): accelerometer: add orientation property udev-acl: fix memleak accelerometer: add documentation Harald Hoyer (2): udevadm-*.c: return != 0, if unknown option given udev/udevadm-monitor.c: fixed misplaced brace Kay Sievers (33): rules: apply 'audio' group of the static snd/{seq,timer} nodes Makefile: add tar-sync rules: static_node - use 0660 if group is given to get the cigar rule-syntax-check.py: use print() make: use 'git tag' rules: run input_id for main input devices too update TODO configure: add AC_CONFIG_AUX_DIR, AC_CONFIG_SRCDIR cdrom_id: add tray lock and eject handling rules: enable in-kernel media-presence polling update TODO delete mobile-action-modeswitch which has moved to usb_modeswitch libudev: enumerate - scan /sys/module rules: move polling rule above 'block' match libudev: monitor - update doc rules: set polling value only if it is disabled libudev: device - fix udev_device_get_tags_list_entry() to always load database rules: remove redundant MODE="0664" from lp rules rules: fix wrong wildcard match, we always need a ':*' at the end libudev: device - export udev_device_has_tag() path_id: add missing '-' to tape suffix path_id: add ID_PATH_TAG= to be used in udev tags enforce valid TAG+= names update TODO libudev: device - add udev_device_has_tag() to libudev.h and gtk-doc libudev: enumerate - add udev_enumerate_add_match_parent() libudev: enumerate - include parent device itself with match_parent() libudev: enumerate - clarify documentation path_id: recognize ACPI parent devices rules: input - call path_id for ACPI devices udevadm: monitor - use uptime to match the kernel's timestamp libudev: ctrl - move code to udev directory update sd-daemon.[ch] Keshav P.R (1): rules: support for gpt partition uuid/label Lee, Chun-Yi (1): Support more MSI notebook by using asterisk on dmi vendor name Marco d'Itri (1): Add missing commas to 95-keymap.rules Martin Pitt (3): keymap: Add Microsoft Natural Keyboard keymap: Add force-release quirk for Hannspree SN10. keymap: Add slight name variations of Toshiba Satellites Peter Jones (1): ata_id: show the error message when HDIO_GET_IDENTITY fails Summary of changes from v170 to v171 ============================================ Kay Sievers (17): libudev: export symbols explicitely and individually from C code not from separate file or prefix match libudev: device - make a bunch of symbols static systemd: Replace Requires= with Wants=, run trigger in parallel systemd: sort trigger after socket systemd: trigger - run after udev.service (for now) systemd: set socket buffer size to 128 MB like udev has update TODO update TODO libudev: monitor - use SOCK_NONBLOCK systemd: split socket file systemd: add missing socket files rules: fix whitespace rules: implement TAGS== match libudev: enumerate - do not ignore other matches when add_match_tag() is used rules: support substitutions in TAG= path_id: allow to be asked about usb_devices not only usb_interfaces systemd: run udev.service and udev-trigger.service in parallel Scott James Remnant (1): configure: allow usb.ids location to be specified Summary of changes from v169 to v170 ============================================ Kay Sievers (1): libudev: ctrl - properly wait for incoming message after connect Michal Soltys (1): configure.ac: fixes for rule_generator and modeswitch Summary of changes from v168 to v169 ============================================ Kay Sievers (26): simplify rules file overwrite logic libudev: list - use bit flags for 'sort' and 'unique' libudev: queue - _unref() should return the object remove dead fstab_import files hid2hci: prepare move to bluez package set event timeout to 60 sec and settle timeout to 120 udevd: improve error message in case exec() fails configure: allow to enable/disable extras individually delete hid2hci which moved to the bluez tree update TODO/NEWS bump requirement to Linux kernel 2.6.32 and ARM 2.6.36 libudev: ctrl - log accept4() errors update NEWS update INSTALL, NEWS, configure comment, queue doc update TODO udevd: create queue file before daemonizing to reliably block 'settle' udevd: remove left-over SIGALRM gudev: silent gtk-doc warnings cdrom_id: remove unused --export switch to silent gcc libudev: queue - always rebuild queue file when nothing is queued anymore libudev: device - use DEVMODE from kernel as the default mode update TODO Merge branch 'docs/udev.xml' of git://github.com/mfwitten/udev udate TODO, NEWS, INSTALL build: use --gc-sections, -fvisibility=hidden udevadm: settle: wake up more often if --seq-start= or --exit-if-exists= is used Koen Kooi (1): configure: reintroduce introspection flags to fix crosscompilation Michael Witten (36): Docs: udev.xml: Offset daemon name with commas Docs: udev.xml: Remove commas (and unnecessary repetition) Docs: udev.xml: `are' -> `is'; the subject is `Access' Docs: udev.xml: Use present tense Docs: udev.xml: Clarification through proper wording Docs: udev.xml: `,' -> `;' Docs: udev.xml: `key value' -> `key-value' Docs: udev.xml: `,' -> `:' Docs: udev.xml: Use `assignment' consistently Docs: udev.xml: `comma-separated' is a better description Docs: udev.xml: Remove unnecessary repitition Docs: udev.xml: Add a few more words for context Docs: udev.xml: Use `unless' for clarity Docs: udev.xml: Clarify PROGRAM key Docs: udev.xml: `a shell style' -> `shell-style' Docs: udev.xml: Clean `*' description Docs: udev.xml: Clean character range description Docs: udev.xml: Clean up description of NAME assignment key Docs: udev.xml: Clean up description of SYMLINK assignment key Docs: udev.xml: Clean up description of ENV assignment key Docs: udev.xml: Clean up description of RUN assignment key Docs: udev.xml: Clean up description of LABEL assignment key Docs: udev.xml: Add missing `.' Docs: udev.xml: `which' -> `content of which' Docs: udev.xml: `commandline' -> `command line' Docs: udev.xml: Clean up WAIT_FOR description Docs: udev.xml: `a' -> `the' Docs: udev.xml: Clean up introduction to substitutions. Docs: udev.xml: Use normal sentence structure Docs: udev.xml: Actually make a separate paragraph Docs: udev.xml: Add comma Docs: udev.xml: `char' -> `character' Docs: udev.xml: `comma-separated' is a better description Docs: udev.xml: Clarify through a change in word ordering Docs: udev.xml: Improved word order Docs: udev.xml: Fix dangling modifier Nix (1): libudev: queue - accept NULL passed into udev_queue_export_cleanup() Summary of changes from v167 to v168 ============================================ David Zeuthen (1): Run ata_id on non-removable USB devices Harald Hoyer (1): udevd: clarify worker exit status Kay Sievers (35): version bump systemd: let settle depend on trigger, do not block basic with trigger selinux: do not label files in runtime dir selinux: firmware - do not label files in runtime dir udevadm: control - add --exit trivial cleanups udevd: log warning if /run is not writable libudev: ctrl - fix refcounting in connection handling udevadm: settle - watch queue file libudev: bump revision udevadm: info --cleanup-db udevd: do not nice processes "db_persist=" -> "db_persist" udevd: move OOM disable into --daemon option systemd: add OOMScoreAdjust=-1000 require explicit "db_persist" to exclude device info from --db-cleanup udevd: get netlink socket from systemd fix more warnings libudev: ctrl, monitor - use SOCK_NONBLOCK systemd: socket -> sockets udevadm: monitor - use epoll libudev: test - use epoll udevadm: test - use printf() instead of info() for non-debug output use 'else if' in epoll event array loop libudev: run_program() - select() -> epoll udevd: ppoll() -> epoll + signalfd Merge branch 'docs/README' of git://github.com/mfwitten/udev timeout handling without alarm() udevadm: settle - kill alarm() udevd: netif rename - use ifindex for temporary name udevd: always use udevd[] log prefix udevd: rules files - accept empty or /dev/null links udevd: log signal number when spawned processes fail systemd: Reqires= -> Wants=udev.socket udevd, udev-event: sync waitpid() error handling Lee, Chun-Yi (1): Add rule for Acer Aspire One ZG8 to use acer-aspire_5720 keymap Leonid Antonenkov (1): rule-generator: net - ignore Hyper-V virtual interfaces Martin Pitt (3): Revert "Do not build extras with --disable-extras" Avoid spinning up CD on pressing eject button keymap: Another ID for Logitech Wave keyboard Michael Reed (1): path_id: rework SAS device handling Michael Witten (12): Docs: README: `to replace' -> `replacing' Docs: README: `,' -> `;' Docs: README: Clean up a sentence Docs: README: Use present tense Docs: README: Add missing `and' Docs: README: Remove commas and use subjective mood Docs: README: Clean up `udev extras' requirements Docs: README: Clarify configuration of existing devices Docs: README: `does never apply' -> `never applies' Docs: README: Flip sentence structure to improve wording Docs: README: `set up' is the verb; `setup' is a noun Docs: README: Add a comma to offset the modifier Seth Forshee (1): keymap: Support Dell Latitude XT2 tablet-mode navigation keys Thomas Egerer (1): udevd: add 'N:' to optstring in getopt_long Summary of changes from v166 to v167 ============================================ Andrey Borzenkov (1): udev-acl: add /dev/sgX nodes for CD-ROM David Zeuthen (1): cdrom_id: Don't ignore profiles when there is no media available Harald Hoyer (2): cdrom_id: cd_media_toc() extend toc size to 65536 udev-acl/70-acl.rules: tag ID_REMOTE_CONTROL with acl Kay Sievers (29): version bump Merge branch 'master' of git+ssh://master.kernel.org/pub/scm/linux/hotplug/udev v4l_id: kill the v4l1 ioctl v4l_id: remove left-over variable update some comments test-libudev: add short options libudev: udev_device_get_sysattr_list_entry() update libudev: resolve ifindex in udev_device_new_from_id_filename() libudev: bump minor version udev-acl: move sg rule to optical drive rule move /dev/.udev/ to /dev/.run/udev/ and convert old udev database at udevd startup NEWS: clarify /dev/.run/ requirements input_id: silent gcc warnings fstab_import: disable build systemd: remove deprecated udev-retry.service fstab_import: remove from configure update sd-daemon.[ch] udevd: use facility == LOG_DAEMON when writing to /dev/kmsg udevd: initialize fds, for proper close() on exit use /run/udev/ if possible and fall back to /dev/.udev/ rules: run ata_id only on SPC-3 or later optical drives systemd: bind udev control socket in systemd and split udev.service systemd: use sockets.target not socket.target man: remove trigger --type=failed handling libudev: export udev_get_run_path() libudev: docs - add udev_get_run_path() libudev: make valgrind happy systemd: do not enable udev-settle.service by default systemd: udev.socket - disable implicit dependencies Kei Tokunaga (1): udevadm: enumerate - update prev pointer properly Lee, Chun-Yi (2): Remap Acer WMI touchpad toggle key to F21 used by X Remap MSI Laptop touchpad on/off key to F22 and F23 Martin Pitt (12): 60-persistent-input.rules: Support multiple interfaces Only build v4l_id if V4L1 header file is available 60-persistent-input.rules: Do not create duplicate links Fix building with --disable-extras Do not build extras with --disable-extras v4l_id: Drop videodev.h check again keymap: Fix Acer Aspire 5920G media key input_id: Consistently use tabs for indentation input_id: Add some debugging output input_id: Avoid memory overflow with too long capability masks input_id: Cover key devices which only have KEY_* > 255 input_id: Rewrite debug logging to use standard udev info() Seth Forshee (1): keymap: continue reading keymap after invalid scancodes Thomas Egerer (3): libudev: allow to get list of all available sysfs attrs for a device libudev: use sysfs attr ilist interface for attribute walk udevadm: info - make attribute array static and const Summary of changes from v165 to v166 ============================================ Chris Bagwell (1): Remap Eee PC touchpad toggle key to F21 used by X Gerd Hoffmann (1): extras: add rules for qemu guests Jürgen Kaiser (1): keymap: Add Acer Aspire 8930 Kay Sievers (7): version bump man: generate html pages for www.kernel.org man: fix typo make: fix qemu rules file name extras: qemu - fix typo ata_id: do not print empty serial numbers to avoid unwanted trailing '_' update gitignore Martin Pitt (6): keymap: Add Acer TravelMate C310 keymap: Update README.keymap.txt keymap: Add Lenovo ThinkPad X201 tablet keymap: Move reading of event in separate function keymap: More robust state machine keymap: Explain how to end the program Matthew Garrett (1): keymap: Remove wlan from Dell Summary of changes from v164 to v165 ============================================ Andy Whitcroft (1): keymap: Add release quirks for two Zepto Znote models and AMILO Xi 2428 Bastien Nocera (2): keymap: Add force release for HP touchpad off extras/keymap: Make touchpad buttons consistent David Henningsson (1): Add ACLs for FFADO supported sound cards David Zeuthen (6): ata_id: Support SG_IO version 4 interface Run scsi_id and ata_id on the scsi_device object Use ata_id, not scsi_id, on ATAPI devices Add GUdevEnumerator type and Device.get_tags() method Add g_udev_device_get_is_initialized() method gudev: Add Device.get_usec_since_initialized Harald Hoyer (2): udev-rules.c: change import property buffer to 16384 bytes 70-acl.rules: add ACLs for ID_PDA devices Jakub Wilk (1): man: udev - workaraound -> workaround Jan Drzewiecki (1): cdrom_id: Fix media state for unreadable DVDs Kay Sievers (19): version bump rules: 78-sound-card - remove specific hardware matches, they do not belong here rules: drop OSS audio rule rules: drop alsa jack-plug input devices rules: revert bsg use until the event ordering problem is sorted out libudev: do not overwrite path with readlink() call udevadm: info - honor --export and --export-prefix for property query udevadm: info - honor --export, --export-prefix= udevd: use dev_t or netif ifindex as database key udevd: always create /dev/{char,block}/$major:$minor udevd: simplify udev database and fix DEVNAME handling udevd: switch to common id_filename functions udevd: write full database file for (unsupported) renamed device nodes check ifindex > 0 instead of subsystem == "net" libudev: enumerate - allow to filter-out not-already-initialized devices libudev: fix renamed device nodes detection logic libudev: record and export "age" of device record gudev: bump minor version update NEWS Martin Pitt (5): keymap: Add Sony Vaio VGN71 keymap: Add some more Sony Vaio VGN-* models Add ACL for media player USB devices keymap: Fix struck Touchpad key on Dell Latitude E series keymap: Fix struck Touchpad key on Dell Precision M series Michal Soltys (1): udevd: create static nodes before /dev/null is needed Summary of changes from v163 to v164 ============================================ David Zeuthen (1): Install libgudev-1.0.so in prefix / instead of prefix /usr Harald Hoyer (1): cdrom_id: request the drive profile features with a dynamic length Kay Sievers (4): version bump udevd: do not wrongly delay events for devices with swapped names return proper error code in rename_netif() libudev: return kernel provided devnode when asked before we handled any rules Martin Pitt (2): keymap: Apply force-release rules to all Samsung models. keymap: Add Toshiba Satellite U500 Summary of changes from v162 to v163 ============================================ David Zeuthen (2): gudev: Deliver ::uevent signal in the thread-default main loop Bump required GLib version to 2.22 Hannes Reinecke (1): scsi_id: export target port group Kay Sievers (5): version bump scsi_id: fix compiler warnings systemd: hook into basic.target instead of sysinit.target systemd: sort before basic.target udevd: add sd-daemon.c Lee, Chun-Yi (1): keymap: Add alternate MSI vendor name Martin Pitt (8): keymap: Add Lenovo Y550 Clarify WAIT_FOR documentation fix various syntax errors in rules Add automatic rules syntax check cdrom_id: Try reading the medium if all MMC commands fail Revert "cdrom_id: Try reading the medium if all MMC commands fail" cdrom_id: Fall back to CDROM_DRIVE_STATUS if all MMC commands fail cdrom_id: Don't read beyond "last track" in TOC Torsten Schoenfeld (1): gudev: add a few annotations that newer gobject-introspection versions demand Summary of changes from v161 to v162 ============================================ David Woodhouse (1): Add keymap for Lenovo IdeaPad S10-3 Jan Drzewiecki (2): cdrom_id: Drop MEDIA_SESSION_NEXT for DVD-RW-RO cdrom_id: Fix DVD blank detection for sloppy firmware Kay Sievers (10): init: update systemd service files init: update systemd service files init: add 'udev -' to description in systemd service files udevd: add pid to kmsg logs init: edit systemd service descriptions version bump udevd: remove unneeded credential passing from init_notify() set SELinux context on 'add' but not on 'change' events systemd: enable all udev services unconditionally Revert "Add alternative KVM MAC address blacklist" Luca Tettamanti (1): Add support for oom_score_adj Marco d'Itri (2): udev-acl: do not mistake all SCSI "processor" devices for scanner do not create persistent name rules for KVM network interfaces Martin Pitt (12): cdrom_id: Add media status debugging udev(7): Point out required extension, and remove some confusion keymap: Add Onkyo PC keymap: Add HP G60 keymap: Fix Sony VAIO VGN-SZ2HP/B udev(7) manpage: Fix description of $attr gudev: fix crash if netlink is not available keymap: Fix Acer TravelMate 4720 cdrom_id: Fix DVD-RW media detection Fix KVM MAC address range do not create persistent name rules for VMWare network interfaces Add alternative KVM MAC address blacklist Michael Forney (1): Don't install systemd scripts with --without-systemdsystemunitdir Michal Soltys (1): ChangeLog fix Summary of changes from v160 to v161 ============================================ Fortunato Ventre (1): keymap: Add force-release quirks for a lot more Samsung models Harald Hoyer (3): udev-event.c: rename interface to -, if taken rule_generator/write_net_rules: prevent interface to be named "eth" cdrom_id: READ TOC before READ DISC INFORMATION fixes qemu Jan Drzewiecki (5): cdrom_id: Fix detection of reblanked DVD+RW and DVD-RAM cdrom_id: Handle pre-MMC2 drives cdrom_id: Also apply format check to DVD-RW cdrom_id: No "next session" for "other" media state cdrom_id: Fix state for fresh DVD-RW Jerone Young (1): Fix volume keys not releasing on Mivvy G310 Kay Sievers (12): version bump rules: remove firewire rules for deprecated drivers udev-acl: update firewire matches to recent rule changes libudev: bump minor so version after adding symbols call util_delete_path() only when we actually deleted stuff udev-acl: properly handle CK change events for root user udev-acl: remove specific device matches from the rules file fix broken "compile warning fix" always log error when renaming a network interface fails do not rename the database on device rename cdrom_id: whitespace fix cdrom_id: do not bail out when we can not read the TOC like for empty CDRW Marco d'Itri (3): hid2hci: fix Logitech diNovo, MX5500 and other keyboards log an error when a message from the wrong version of udevadm is ignored hid2hci: fix for Logitech diNovo Edge keyboard Martin Pitt (1): keymap: Generalize Samsung keymaps Michal Schmidt (1): udev-acl: really fix ACL assignment in CK events Richard Hughes (1): udev-acl: add DDC_DEVICE to the types that are managed Stefan Richter (1): rules: add more FireWire IDs: Point Grey IIDC; AV/C + vendor unique Yin Kangkai (7): udevadm: fix short options in getopt() udevd: fix some memory leaks in error path malloc()+memset() -> calloc() udevd: fix short options in getopt() udevd: fix unref'ing of device in error path udevd: create static device links only when the target exists udev: fix compile warning Summary of changes from v159 to v160 ============================================ Harald Hoyer (2): 60-persistent-storage-tape: s/path_id.sh/path_id/ 60-persistent-storage-tape.rules: make own by-path symlink for nst tapes Kay Sievers (4): version bump rules: tape - remove WAIT_FOR instruction and don't export BSG_DEV allow final assignment for OPTIONS:="nowatch" udevd: init_notify() fix abstract namespace name handling Lennart Poettering (1): systemd: make service files readable by GKeyFile Martin Pitt (2): keymap: Find alternate Lenovo module keymap: Add Lenovo ThinkPad SL Series extra buttons Summary of changes from v158 to v159 ============================================ Jerone Young (1): Fix stuck volume key presses for Toshiba Satellite U300 & U305models Kay Sievers (5): version bump add systemd service files make: pre-process and install systemd service files when needed make: fix 'make distcheck' switch a few left-over from GPLv2 to GPLv2 or later Lennart Poettering (1): systemd: update service files for newly introduced DefaultDependencies= option Martin Pitt (1): keymap: Add Logitech Cordless Wave Pro Matthew Garrett (1): keymap: Add support for IBM-branded USB devices Michael Meeks (1): gudev: respect possibly given LD_LIBRARY_PATH Ryan Harper (2): Add virtio-blk support to path_id Add virtio-blk by-id rules based on 'serial' attribute Summary of changes from v157 to v158 ============================================ Harald Hoyer (1): extras/keymap: add Samsung N210 to keymap rules Kay Sievers (7): version bump libudev: fix fd leak in udev_enumerate_scan_devices() when tags are searched udevd: in case we don't daemonize, send READY message to /sbin/init delete last distro specific rules remove a few comments in file headers mtd_probe: add needed include, modprobe blacklist flag, and change some whitespace rules: remove unused subdir Martin Pitt (4): Fix hid2hci rules harder add Vala vapi for gudev-1.0 Revert "add Vala vapi for gudev-1.0" Fix usb printer rule for multiple USB interfaces Maxim Levitsky (1): mtd_probe: add autodetection for xD cards Paul Bender (1): configure.ac: fix cross compilation Summary of changes from v156 to v157 ============================================ Harald Hoyer (1): 40-redhat.rules: removed file Jerone Young (3): Fix wlan key on Inspirion 1210 Fix wlan key on Inspiron 910 Fix wlan key on Inspiron 1010 & 1110 Kay Sievers (25): configure.ac: version bump Makefile.am: silent build mkdir rules: mount fuse control filesystem fix compilation with --enable-debug while (1) -> for (;;) childs -> children udevd: replace --debug-trace with --children-max udevd: fix comments rules: add -v to modprobe calls to be able see what will be loaded udevd: read debug settings from kernel commandline update NEWS rules: delete pilot rules and remove redhat directory man: add static device nodes and udevd debug options man: add kernel command line parameters man: udevd - update intro rules: rename packages -> arch rules: SUSE - move last distro rule to package rules: add misc/30-kernel-compat.rules make: mkdir /lib/udev/devices/ make: fix rules/ subdir names udevd: set umask before creating files/directories add IMPORT{cmdline} IMPORT{cmdline}: start at first char after '=' libudev: doc - fix typo update NEWS Summary of changes from v155 to v156 ============================================ Bryan Kadzban (1): udevd: fix typo /proc/fd -> /proc/self/fd Kay Sievers (4): configure.ac: version bump cdrom_id: do not export ID_CDROM_MEDIA_SESSION_LAST_OFFSET= for single session media rules: optical drives - use ID_CDROM_MEDIA_TRACK_COUNT_DATA libudev: fix udev_queue_get_seqnum_sequence_is_finished() with empty queue file Summary of changes from v154 to v155 ============================================ Kay Sievers (11): reset process priority before executing RUN+= configure.ac: version bump rules: SUSE - delete device-mapper rules libudev: add O_CLOEXEC use default mode of 0600 for nodes if gid == 0 udevd: create standard symlinks and handle /lib/udev/devices update NEWS README fix tests and allow MODE=000 create static nodes provided by kernel modules to allow module autoloading update NEWS man: directly use 'refentry' Summary of changes from v153 to v154 ============================================ Harald Hoyer (2): Makefile.am: add LGPL COPYING file to EXTRA_DIST cdrom_id: only mark sr[0-9]* as ID_CDROM Jerone Young (1): Fix volume keys not releasing for Pegatron platform Kay Sievers (23): configure.ac: version bump more readlink buffer size handling remove left-over from ignore_remove and all_partitions fix previous commit udevadm: info --export-db -- remove watch handle export add TAG= to improve event filtering and device enumeration all to match against a given TAG== udev-acl: use a tag instead of a property to mark devices fix logic on-demand loading logic for db and uevent use the usual TAG+=, TAG= logic delete old tags when configuration changes libudev: accept NULL in udev_device_get_tags_list_entry() export tag functions export udev_device_get_tags_list_entry() udevd: always try to find an idle worker instead of forking a new one remove unused parameter from udev_node_mknod() remove debug output during rules parsing warn when renaming kernel-provided nodes instead of adding symlinks man: udevadm trigger - the default is "change" not "add" update README regarding kernel version and default rules add info message when empty NAME is given libudev: add documentation for recently added functions udevd: reload config only for *.rules files Martin Pitt (1): keymap: Fix Bluetooth key on Acer TravelMate 4720 Mathias Nyman (1): remove buffer-overrun risk in readlink call Matthias Schwarzott (1): rules: Gentoo - remove old devfs compat rules Michael Thayer (1): fix device node deletion Robby Workman (1): configure.ac: move firmware-path setting out of extras section Yin Kangkai (2): keymap: Add keymap and force-release quirk for Samsung N128 keymap: Add keymap quirk of WebCam key for MSI netbooks. Summary of changes from v152 to v153 ============================================ Kay Sievers (1): configure.ac: version bump Robby Workman (1): configure.ac: fix broken firmware search path in configure.ac Summary of changes from v151 to v152 ============================================ Adrian Bunk (1): udev needs automake 1.10 Amit Shah (2): Fix virtio-ports rule to use $attr instead of $ATTR rules: virtio - fix is to check if the 'name' attribute is present Andy Whitcroft (2): keymap: Add Samsung Q210/P210 force-release quirk keymap: Add Fujitsu Amilo 1848+u force-release quirk Dan Williams (1): modeswitch: morph into tool that only switches Mobile Action cables David Zeuthen (3): Decrease buffer size when advancing past NUL byte Use UTIL_LINE_SIZE, not UTIL_PATH_SIZE to truncate properties Increase UTIL_LINE_SIZE from 2048 to 16384 Harald Hoyer (1): cdrom_id: remove debugging code Jerone Young (6): Force key release for volume keys on Dell Studio 1557 Fix Keymapping for upcoming Dell Laptops Add new Dell touchpad keycode Revert special casing 0xD8 to latitude XT only Fix Dell Studio 1558 volume keys not releasing Add support for another Dell touchpad toggle key Kamal Mostafa (3): keymap: Unite laptop models needing common volume-key release quirk keymap: Add force-release quirk for Coolbox QBook 270-02 keymap: Add force-release quirk for Mitac 8050QDA Kay Sievers (43): libudev: bump minor version udevadm: fix untested and broken commit to set buffer size configure.ac: version bump udev-acl: no not encourage use of ACL_MANAGE outside of rules file replace utimes() with utimensat() libbudev-private: rename udev_list_entry_get_flag() udevadm: monitor - use / as separator in --subsystem-match=subsystem[/devtype] use major:minor as entries in symlink stack instead of devpath use major:minor as entries in watch directory libudev: docs - .gitignore backup files firmware: fix possible segfault when firmware device goes away while loading do not reset SELinux context when the node was not touched libudev: add udev_device_new_from_environment() add LGPL COPYING to libudev and GUdev cdrom_id: open non-mounted optical media with O_EXCL libudev: update documentation extras: mobile-action-modeswitch - update gitignore scsi_id: add rand() in retry loop cdrom_id: retry to open the device, if EBUSY cdrom_id: check mount state in retry loop cdrom_id: always set ID_CDROM regardless if we can run cdrom_id rules: delete outdated packagees rules rules: we do not have static devices which are renamed unify/cleanup event handling allow IMPORT{db}="KEY" usb-db: remove double '/' replace "add|change" with "!remove" update NEWS log info only if we actually delete the node udevadm: trigger - switch default action from "add" to "change" remove "all_partitions" option rules: call modprobe on all events but "remove" remove "ignore_remove" option update NEWS cdrom_id: rework feature/profiles buffer parsing cdrom_id: print more debug messages cdrom_id: debug - print feature values in hex cdrom_id: debug - print feature values in hex cdrom_id: set ID_CDROM_MEDIA=1 only for known media Revert "Fix switching Logitech bluetooth adapters into hci mode." add O_NOFOLLOW when creating files in link stack delete only device nodes, not symlinks when deleting a devtmpfs node doc: add section about how *not* to rename device nodes Marco d'Itri (3): rules: input - create by-path/ links for pci devices Fix switching Logitech bluetooth adapters into hci mode. doc: document the WAIT_FOR timeout Martin Pitt (12): keymap: Add Dell Inspiron 1011 (Mini 10) Fix brightness keys on MSI Wind U-100 keymap: Fix LG X110 keymap: Add Toshiba Satellite M30X udev-acl: Correctly handle ENV{ACL_MANAGE}==0 input_id: Fix linking keymap: Add Acer TravelMate 6593G and Acer Aspire 1640 keymap: Fix another key for Acer TravelMate 6593 cdrom_id: Fix uninitialized variables cdrom_id: Fix uninitialized buffers cdrom_id: Do not ignore errors from scsi_cmd_run() cdrom_id: Swap media state and TOC info probing Mike Brudevold (1): cdrom_id: add missing profiles to feature_profiles Robert Hooker (1): keymap: Add support for Gateway AOA110/AOA150 clones. Scott James Remnant (2): libudev: export udev_monitor_set_receive_buffer_size() udevadm monitor: increase netlink buffer size Thomas Bächler (1): firmware: fix error reporting on missing firmware files Yury G. Kudryashov (3): configure.ac - fix typo in --with-pci-ids-path option hid2hci: include linux/types.h for __u32 configure.ac: ddd --with-firmware-path option Summary of changes from v150 to v151 ============================================ Amit Shah (1): rules: Add symlink rule for virtio ports Bryan Kadzban (1): Fix reverted floppy-device permissions Egbert Eich (1): rulews: suse - add do-not-load-KMS-modules rules Frederic Crozat (1): rules: acl - add COLOR_MEASUREMENT_DEVICE match Kay Sievers (11): configure.ac: version bump udevd: inotify - do not parse rules at create but at close do not remove device nodes of active kernel devices libudev: device - create db file atomically clarify message about not removed device node input_id: include limits.h keymap: include linux/limits.h keymap: linux/input.h - get absolute include path from gcc delete outdated and unmaintained writing_udev_rules update README and NEWS update tests Marco d'Itri (2): writing_udev_rules: update rules files names keymap: support for the Samsung N140 keyboard Martin Pitt (4): add ACL rule for Garmin GPSMap 60 keymap: move force-release directory extras/keymap/check-keymaps.sh: Ignore comment-only lines keymap: Fix invalid map line Summary of changes from v149 to v150 ============================================ Clemens Buchacher (2): add Samsung R70/R71 keymap keymap: Samsung R70/R71 force-release quirk Daniel Drake (2): keymap: Add OLPC XO key mappings keymap: Fix typo in compal rules Daniel Elstner (1): libudev: wrap in extern "C" block for C++ David Zeuthen (1): Export ID_WWN_VENDOR_EXTENSION and ID_WWN_WITH_EXTENSION Jerone Young (1): keymap: Lenovo Thinkpad USB Keyboard with Tracepoint Johannes Stezenbach (2): keymap: add Samsung N130 keymap: handle atkbd force_release quirk Kay Sievers (15): util_unlink_secure(): chmod() before chown() floppy: fix rule to create additional floppy device nodes configure.ac: version bump remove remaining support for CONFIG_SYSFS_DEPRECATED cdrom_id: remove deprecated device matches rules: add "block" match to floppy rule update mtime of nodes and links when we re-use them udevadm: info - fix info --root --query=name --path= for device without a device node remove remaining support for CONFIG_SYSFS_DEPRECATED fix typo in log message priority handling remove UDEV_RUN environment variable udevadm: logging - copy va_list and do not use it twice libudev: doc - add symbols to sections.txt work around gtk-doc which breaks distcheck gobject-introspection: use $datadir instead of $prefix Marco d'Itri (2): build: keymap - create subdir rules: udev-acl - add firewire video devices Martin Pitt (12): keymap: Add Acer Aspire 1810T 95-keymap.rules: Run on change events, too keymap: fix findkeyboards Speed up udev_enumerate_scan_* keymap: Add hotkey quirk for Acer Aspire One (AO531h/AO751h) Clarify RUN/IMPORT documentation keymap: Add Logitech S510 USB keyboard keymap: add Acer TravelMate 8471 keymap: Add Acer Aspire 1810TZ keymap: Add LG X110 keymap: Add Fujitsu Amilo Li 1718 keymap: Document force-release Piter PUNK (1): firmware: convert shell script to C Scott James Remnant (1): 70-acl.rules: ACL manage Android G1 dev phones Thomas de Grenier de Latour (1): libudev: enumerate - fix move_later logic Summary of changes from v148 to v149 ============================================ Daniel Elstner (1): really fix both in-tree and out-of-tree builds Dmitry Torokhov (1): input-id: identify touchscreens Kay Sievers (4): libudev: doc - use #NULL configure.ac: version bump really really fix both in-tree and out-of-tree builds fix both in-tree and out-of-tree builds Martin Pitt (6): input_id: Fix endless loop for non-input devices input_id: Do not tag non-input devices with ID_INPUT input_id: small optimization input_id: check event mask input_id: Check mouse button for ID_INPUT_MOUSE udev_device_get_parent_with_subsystem_devtype(): Clarify documentation Summary of changes from v147 to v148 ============================================ Dan Williams (3): Revert "modem-modeswitch: add a device" Revert "extras/modem-modeswitch: Add Huawei E1550 GSM modem" modem-modeswitch: 61-option-modem-modeswitch.rules is only for Option NV devices Daniel Mierswa (1): Fix typo in NEWS, ConsoleKit-0.4.11 -> 0.4.1 David Zeuthen (4): cdrom_id: Still check profiles even if there is no media scsi_id: Export WWN and Unit Serial Number Create /dev/disk/by-id/wwn-0x... symlinks Also create /dev/disk/by-id/wwn-0x..-part%n symlinks for partitions Dmitry Torokhov (1): extras/input_id: Correctly identify touchpads Harald Hoyer (1): modem-modeswitch: add a device Kay Sievers (8): rules: set mode of floppy device nodes to 0660 remove "ignore_device" print warning for BUS=, SYSFS{}=, ID= test-udev: remove "ignore_device" code udev-test.pl: catch-up with recent changes rules: remove support for IDE (hd*) devices ata_id: skip ATA commands if we find an optical drive Revert "Fix out-of-tree builds" Martin Pitt (5): README.keymap.txt: small clarification extras: Add input_id 70-acl.rules: Use new-style input properties input: Deprecate ENV{ID_CLASS} input_id: code cleanup Scott James Remnant (1): Fix out-of-tree builds Summary of changes from v146 to v147 ============================================ Alan Jenkins (1): udevd: queue-export - remove retry loop Andrew Church (1): fix wrong parameter size on ioctl FIONREAD Daniel Mierswa (2): don't compare a non-existing function with NULL use nanosleep() instead of usleep() David Zeuthen (4): gudev: remove G_UDEV_API_IS_SUBJECT_TO_CHANGE since API is now stable ata_id: export more advanced ATA features gudev: Fix up GUdevDeviceNumber gudev: Remove LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE from priv header Florian Zumbiehl (10): util_delete_path(): use util_strscpy() util_lookup_group(): fix memory leak if realloc() fails util_delete_path(): handle multiple leading slashes util_create_path(): fix possible out of bounds array access ude_rules.c: fix possible NULL pointer dereference in get_key() util_resolve_sys_link(): fix possible buffer overflow udev_util_encode_string(): fix possible buffer overflow udev-rules.c: parse_file() - fix possible buffer overflow udev_queue_get_seqnum_sequence_is_finished(): fix possible file handle leak util_run_program(): fix possible buffer overflow #2 Harald Hoyer (2): scsi_id: prevent buffer overflow in check_fill_0x83_prespc3() rename interfaces to _rename if rename fails Jeremy Kerr (1): util_run_program: restore signal mask before executing event RUN commands Kay Sievers (45): make: sort Makefile.am per target/extra configure.ac: version bump udev-acl: allow to skip ACL handling rules: rfkill has no group, so use 0644 rule_generator: net - fix MATCHDEVID make: add comment update NEWS print warning for NAME="%k" - it breaks the kernel supplied DEVNAME warn about non-readable or empty rules file change database file names assign errno for getgrnam_r()/getpwnam_r() doc: udevadm test *does* create nodes and links these days util_unlink_secure(): chmod() before chown() util_create_path(): fix errno usage inotify_add_watch(): do not store watch, if it failed update TODO update README rules: suse - use NAME for mapper/control libudev-util.c: get_sys_link() - return error for empty link target udev-rules.c: remove 'first_token' variable Revert "udev-rules.c: remove 'first_token' variable" test: catch possible bug in GOTO resolving udevadm: remove symlink support for old commands util_run_program(): skip multiple spaces in argv creation fix whitespace require 2.6.27 for proper signalfd handling fix randonm findings from llvm-clang-analyzer simplify "symlink name stack" reorder create_path() and node/link creation to be called in a direct sequence put util_create_path() and file creastion in a retry loop udevadm: control - remove compat code scsi_id: delete copy of bsg.h fix SYMLINK{} option parsing rules: remove remaining NAME="%k" rules: drop almost all NAME= keys update TODO, NEWS udevd: serialize events for with the same major/minor break loops if util_create_path() returns error remove "last_rule" option use CLOEXEC flags instead of fcntl() unblock signals we might want to handle udevd: create /dev/.udev/rules.d/ before watching it wit inotify gudev: fix pkg-config call to work with "make distcheck" update NEWS Revert "gudev: fix out-of-tree build" Lennart Poettering (5): pci-db: make sure we actually read the pci.ids file instead of usb.ids sound: recognize saa7134 TV card sound devices as TV cards sound: include ALSA sound card id in ID_ID property sound: include ALSA sound card id in /dev/snd/by-id/ links Revert "sound: include ALSA sound card id in /dev/snd/by-id/ links" Marco d'Itri (6): doc: writing_udev_rules updated for the new command names rules: sound - do not use /usr/bin/env udevadm: print all messages to stderr with priority higher or equal than LOG_ERR udevadmi: control = exit with rc=2 if there is some system error gudev: gir-scanner workaround for out of tree builds gudev: fix out-of-tree build Mario Limonciello (1): hid2hci: remove superfluous bmAttributes match Martin Pitt (24): extras/keymap: Add Acer Aspire 6920 extras/modem-modeswitch: eject ZTE MF6xx fake CD-ROMs extras/keymap: Fix hold key on Acer Aspire 6920 extras/keymap: Fix case matching for Micro-Star Revert "extras/keymap: Fix case matching for Micro-Star" make raw USB printer devices accessible for lp modem-modeswitch rules: Match more devices extras/keymap: fix hash table collisions extras/keymap: Rename KEY_COFFEE to KEY_SCREENLOCK fix single-session CD detection fix previous commit for CD detection make raw USB printer devices world-readable again 50-udev-default.rules: fix printer MODE keymap: Add Logitech Wave USB keymap: add missing map file keymap: fix usb_id invocation keymap: make USB keyboards really work keymap: Add Logitech Wave cordless keymap: add HP Pavillion dv6315ea keymap: add HP 2230s Makefile.am: fix build with mawk extras/keymap/README.keymap.txt: Fix bug report link fix major fd leak in link handling modem-modeswitch: fix ZTE MF6xx rule Matthias Schwarzott (2): rules: Gentoo update rules: Gentoo update Maxim Levitsky (1): keymap for Acer Aspire 5720 Peter Rajnoha (1): libudev: allow to store negative values in the udev database Scott James Remnant (1): util_run_program: *really* restore signal mask before executing event RUN commands William Jon McCann (1): udev-acl: catch up with ConsoleKit 0.4.1 Summary of changes from v145 to v146 ============================================ Alan Jenkins (3): man: fix unused, inaccurate metadata man: SYMLINK can be matched as well as assigned fix spelling Anssi Hannula (2): rules: exclude digitizers from joystick class udev-acl: add joystick devices Diego Elio 'Flameeyes' Pettenò (21): Merge libudev, udev, and the unconditional extras in a single Makefile.am. Replace the custom test-run target with the standard make check. Also merge into the top-level Makefile.am the simpler extras. Change hook handling to be more portable. Merge keymap building in the top-level Makefile.am. Make keymap generation rules be silent (backward-compatible). Move pkg-config docs and man pages before conditionals. Finally, also merge gudev into the top-level Makefile.am. Make sure to clean up all the built sources. Make sure to use dependency/target variables. Add silent-rule support for the gudev rules. Fix building of introspection library on top-level Makefile.am. Fix another relative path for the new working directory. Include the correct directory for out-of-source builds. Add tests to the distribution; this fixes "make distcheck". Ask gperf to use ANSI-C for generation. Merge in Makefile.am.inc into Makefile.am Use the keymap check during “make distcheck†rather than “checkâ€. Fix building of documentation when doing out-of-source builds. Fix “make distcheck†run outside of the source directory. Use LT_INIT to explicit that udev needs libtool series 2. Eric W. Biederman (1): fix util_lookup_group to handle large groups Erik Forsberg (1): extras/modem-modeswitch: Add Huawei E1550 GSM modem Kay Sievers (18): udevd: add timestamp to --debug output v4l_id: exit with 0 when --help is given configure.ac: version bump hid2hci: remove hid structures and include kernel header path_id: make global variable static udevadm: trigger - add --sysname-match= rules: serial - fix path_id call path_id: fix typo in comment format names are not case insensitive hid2hci: rewrite (and break) rules and device handling make: build internal tools against libudev-private.la update a few years of copyright libudev: silent gcc warning: may be used uninitialized in this function make: suppress enter/leaving directory messages re-enable failed event tracking "record_failed" -> "fail_event_on_error" udevd: block for 15 seconds after error when too old kernel is detected make: fix issues from non-recursive conversion Lennart Poettering (1): enumeration: move ALSA control devices to the end of the enumerated devices of each card Mario Limonciello (2): hid2hci: support to hid2hci for recovering Dell BT devices after S3 hid2hci: install re-trigger for hid device when recovering from S3 Martin Pitt (17): add keymap for Clevo D410J laptop extras/keymap: add Zepto ZNote extras/keymap: add Everex Stepnote XT5000T extras/keymap: add Compal Hel80i keymap tool: improve help keymap tool: support scancode/keycode pair arguments keymap: inline one-line key maps extras/keymap: fix check-keymaps.sh for inline mappings extras/keymap: add recently added keymap files to Makefile.am extras/keymap: Add HP Presario 2100 extras/keymap: cover more Compaq Evo models extras/keymap: Add Fujitsu Amilo M extras/keymap: teach findkeyboards about USB keyboards extras/keymap: Add Samsung SX22S extras/keymap: Fix crash for unknown keys extras/keymap: Add Samsung NC20 extras/keymap: Fix Bluetooth key on Acer Aspire 6920 Summary of changes from v144 to v145 ============================================ Ian Campbell (1): scsi_id: correct error handling in prepend_vendor_model Kay Sievers (10): README: add CONFIG_BLK_DEV_BSG use MIN() MAX() from param.h configure.ac: version bump libudev: device - free values before updating them libudev: enumerate - sort with qsort() udevd: detach event from worker if we kill a worker udevadm: info - add space after R:, A:, W: on database export udevd: make sure a worker finishes event handling before exiting udevd: handle SIGCHLD before the worker event message udevd: use bool Summary of changes from v143 to v144 ============================================ Jon Masters (1): firmware: search for third party or sysadmin supplied firmware updates Kay Sievers (19): configure.ac: add AM_SILENT_RULES configure.ac: version bump TODO: add cleanup of ATA_COMPAT libudev: queue - add comments for queue format udev/.gitignore: add udev.pc configure.ac: version bump do not exports properties starting with a '.' scsi_id: --reformat_serial - use udev_util_replace_whitespace() ata_id: sync ID_SERIAL(_SHORT) with other *_id tools rules: make ata_id properties the default for all ATA block devices scsi_id: delete no longer needed config file update NEWS man: udev - add private properties like ENV{.FOO}="bar" Merge branch 'firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/jcm/udev-jcm udevadm: test - print list of properties build: do not delete .la files libudev: monitor - handle kernel supplied DEVNAME properly update NEWS build: add *exec* to the internal rootlibdir name Martin Pitt (2): hid2hci: narrow matches to real HCI devices extras/udev-acl: add smartcard readers Stefan Richter (1): rules: set group ownership of new firewire driver device files Summary of changes from v142 to v143 ============================================ Alan Jenkins (5): udevadm: settle - fix timeout udevd: remove tiny bit of dead code udevd: implement a more efficient queue file format udev-selinux.c: remove libudev header udevd: queue-export - fix crash Benjamin Gilbert (1): test: check string substitutions in OWNER and GROUP Dan Williams (2): rules: tty/net - move from udev-extras extras/modem-modeswitch: move from udev-extras David Zeuthen (1): gudev: move from udev-extras Kay Sievers (95): version bump rules: v4l do not mix vbi and video nodes fix possible endless loop for GOTO to non-existent LABEL Revert "rules: v4l do not mix vbi and video nodes" rule-generator: cd - skip by-path links if we create by-id links remove format char string truncation syntax use more efficient string copying edd_id: use openat() use openat(), unlinkat(), fstatat() update TODO remove unused GL_FORMAT from rules parser require key names in uppercase keep the ifdef'd udevd testing/profiling hack fix location of database files udevadm: settle - make --timeout=0 working update NEWS rules: add SUBSYSTEM match to scsi rules cdrom_id: suppress ID_CDROM_MEDIA_STATE=blank for plain non-writable CDROM media udevadm: control - add comment to man page about --reload-rules cdrom_id: add error message if open() fails udevadm: settle - add --exit-if-exists= udevd: remove check for dev_t, DEVPATH_OLD takes care of that str[sp]cpyl: add __attribute__ ((sentinel)) udevd: convert to event worker processes udevd: close netlink socket in worker and set cloexec rules: do not call path_id for virtual devices udevd: use enum instead of char in struct declaration allow format substitution in path of ATTR{}=="" cleanup $attr{} substitution path_id: implement in C using libudev path_id: update SCSI handling path_id: add comments fix signed/unsigned warning libudev: enumerate - allow multiple keys with the same name udevadm: trigger - add --property-match=: udevadm: info - accept --query without a value and print properties udevadm: control - --env -> --property udevadm: monitor --environment -> --property path_id: handle fibre channel path_id: add iscsi support path_id: delete old shell script udevd: print error if worker dies unexpectedly path_id: rename scsi sub-fuctions libudev: add comments to libudev.h libudev: move to top-level directory fix libudev include in Makefile.am.in libudev: device_new() -> udev_device_new() udevd: log info for created/killed workers libudev: call log functions conditionally move syslog wrapper to libudev move common stuff from udev/ to private parts of libudev/ libudev: rename private files to *-private.c rules: remove scsi ch module loading rule update NEWS udevadm: info -revert "accept --query without argument" README: add kernel options README: add INOTIFY and SIGNALFD USE_LOG -> ENABLE_LOGGING, DEBUG -> ENABLE_DEBUG, USE_SELINUX -> WITH_SELINUX libudev: add gtk-doc libudev: update documentation libudev: doc - add section headers libudev: doc - add enumerate libudev: doc - add queue update TODO libudev: doc - add namespace for index libudev: move .so version to libudev Makefile autogen.sh: simplify TODO: update libudev: remove prefix from .so version variables libudev: doc - add empty libudev.types udev-acl: move from udev-extras INSTALL: add --enable-extras udev-acl: handle missing action when called in CK mode v4l_id: move from udev-extras libudev: doc - libudev-docs.sgml -> libudev-doc.xml gudev: fix typo in configure option v4l_id: 70-v4l.rules -> 60-persistent-v4l.rules configure: enable all extras by default, provide --disable-extras autogen.sh: make "CFLAGS=-O0 ./autogen.sh" working NEWS: add --disable-extras cleanup ./configure installation directory options rules: remove MMC rule, 2.6.30 has the modalias configure.ac: print error if gperf is missing libudev: install in $libdir and move later to $rootlibdir extras/keymap: use LIBEXECDIR instead /lib/udev README: add /lib/udev/ is private rules: do not install usb-id/pci-id rules when --disable-extras is used extras: delete man pages for private udev tools README: update extras/keymap: install findkeyboards in /lib/udev INSTALL: use /sbin instead of %{sbindir} NEWS: update udev.pc: add Merge branch 'master' of git+ssh://master.kernel.org/pub/scm/linux/hotplug/udev docs: install writing_udev_rules Lennart Poettering (2): rules: sound - move from udev-extra usb-db: move from udev-extras Marcel Holtmann (1): rules: make RFKILL control device world readable Mario Limonciello (1): hid2hci: move from udev-extras Martin Pitt (5): keymap: move from udev-extras extras/keymap: Fix WLAN button on ThinkPads keymap: Update findkeyboard path in docs udev-acl: Manage hplip device permissions extras/keymap: Update findkeyboards location Matthias Schwarzott (3): rules: Gentoo update rules: Gentoo update rules: Gentoo update Scott James Remnant (1): OWNER/GROUP: fix if logic Summary of changes from v141 to v142 ============================================ Andre Przywara (1): rules: create /dev/cpu//cpuid world readable Ian Campbell (1): path_id: support identification of Xen virtual block devices John Wright (1): edd_id: add cciss devices Kay Sievers (46): version bump libudev: path_encode - always return 0 if encoded string does not fit into size libudev: monitor - clarify socket handling documentation udevd: log error for too old kernels or CONFIG_SYSFS_DEPRECATED rules: remove DVB shell script update NEWS cdrom_id: add Xen cdrom support test-libudev: update monitor source TODO: add packet filter update NEWS cdrom_id: add and use ID_CDROM_MEDIA to decide if we run vol_id libudev: monitor - add client socket filter for subsystem value udevadm: monitor - print error if we can not bind to socket update TODO udevadm monitor - add --subsystem-match= libudev: monitor - use simpler hash libudev: monitor - switch to filter_add_match_subsystem_devtype() libudev: monitor - do not filter messages with wrong magic udevadm: monitor - add : support libudev: monitor - add udev_monitor_filter_remove libudev: queue - fix get_seqnum_is_finished() cdrom_id: skip media tests if CDROM_DRIVE_STATUS != CDS_DISC_OK libudev: queue - clarify comments libudev: monitor - export filter_update() update NEWS drop "extern" keyword from non-static function rule_generator: net - fix usb comment generation rules: input - add links for USB/platform non-kbd/mouse devices rules: input - fix comments rules: add rfcomm* to group dialout accept DEVNAME from the kernel as a hint for the node name update TODO build: use AC_MSG_RESULT rules: add "event*" match udevd: revert initial device node creation rules: remove initramfs comment handle devtmpfs nodes oops, removed ppp entry from rules got committed remove all PHYSDEVPATH handling and warning about remove asmlinkage rules: fix ieee1394 rules add "static" back to the inline functions update TODO delete vol_id and require util-linux-ng's blkid delete libvolume_id Lubomir Rintel (1): rule-generator: net - whitelist NICs that violate MAC local scheme Summary of changes from v140 to v141 ============================================ Adam Buchbinder (4): usb_id: add manpage cdrom_id: update manpage create_floppy_devices: expand manpage vol_id: fix language in manpage Alan Jenkins (1): avoid leaking netlink socket fd to external programs Borislav Petkov (1): rules: rename ide-floppy to ide-gd David Brownell (1): rules: exclude mtd* from persistent disk links Kay Sievers (15): rules: fix extra quote in 50-udev-default.rules version bump udevadm: test - handling trailing '/' in devpath udevadm: monitor - clarify printed header rules: remove ram* from persisten disk links blacklist rules: serial - support ttyACM devices rules: replace IDE driver with media match usb_id: add ID_VENDOR_ID, ID_MODEL_ID, ID_USB_INTERFACE_NUM, ID_USB_DRIVER libudev: GPL -> LGPL usb_id: remove unused variable send monitor events back to netlink socket "UDEV_MONITOR_KERNEL/UDEV" -> "kernel/udev" IMPORT: 2048 -> 4096 bytes buffer path_encode: fix max length calculation libudev: monitor - unify socket message handling Michal Soltys (1): rules: md-raid.rules fix Robby Workman (1): udevadm: trigger - add "--action" to --help Scott James Remnant (1): libudev: monitor - ignore messages from unusual sources Summary of changes from v139 to v140 ============================================ Harald Hoyer (1): libvolume_id: bump age Kay Sievers (12): version bump update TODO volume_id: ntfs - fix uuid setting update TODO rules: Fedora update libudev: queue - use lstat() to check existence of symlink udevadm: settle - add --seq-start= --seq-end= udevd: switch watch symlinks to devpath udevadm: add text for new options to command and man page update TODO libudev: ctrl - return error after sending ctrl message udevadm: settle - use timeout signal, instead of loop counter Michael Prokop (1): fix compile error in debug mode Scott James Remnant (1): udevadm: settle - synchronise with the udev daemon Summary of changes from v138 to v139 ============================================ Kay Sievers (11): version bump remove static local variable use the event udev_device to disable the watch on "remove" add "nowatch" to disable a default installed watch with a later rule add m4/ subdir use AC_USE_SYSTEM_EXTENSIONS instead of AC_GNU_SOURCE usb_id: add ID_USB_INTERFACES=:0e0100:0e0200:010100:010200: usb_id: return values if called directly for an usb_device usb_id: fix NULL string usage usb_id: fix comment udevadm: info - export all devices with --export-db Scott James Remnant (10): Don't add inotify watch until RUN rules processed. Clear existing inotify watch before processing. Cleanup a little. Allow watch handle to be stored in the udevdb. Store watch handle in db. Use the udevdb to speed up watch clearing. Put a log message in a more sensible place. Output watch handle in udevadm info. lookup the old watch handle; reload only if has a path Look at more inotify events in the buffer than just the first. Summary of changes from v137 to v138 ============================================ David Zeuthen (1): *_id: add model/vendor enc strings Karel Zak (2): vol_id: fix ddf version string vol_id: add missing id->type to swap0 Kay Sievers (13): man: fix grammar version bump fix NAME="" logic rules: dm - add escape for uuid links with whitespace test: add test for empty and non-existent ATTR rules: fix md "change"/"remove" handling autogen.sh: add more warnings fix NAME= and OPTION+="string_escape=..." logic rules: move OPTIONS to separate rule use global "reload_config" flag rules: add "watch" option to dm and md rules rules: include loop block devices in persistent links release 138 Matthias Schwarzott (1): rules: Gentoo update Miklos Vajna (1): doc: writing udev rules - refer to 'udevadm info' instead of 'udevinfo' Scott James Remnant (2): udevd: optionally watch device nodes with inotify rules: update persistent storage rules to use inotify watches Summary of changes from v136 to v137 ============================================ Alan Jenkins (2): man: typo fixes remove stray initializer Kay Sievers (17): version bump rules: fix typo in ide cd rule libudev: use 4096 bytes buffer for attribute reading rules: add drm devices to group "video" do not complain about a missing /etc/udev/rules.d/ udevadm: test - remove --force option update NEWS remove name from index if the node name has changed cleanup old names before creating the new names open-code pollfd setup increase netif renaming timeout from 30 to 90 seconds Merge commit '5f03ed8a56d308af72db8a48ab66ed68667af2c6' Merge commit '9032f119f07ad3b5116b3d4858816d851d4127de' split up long line udevd: add back SA_RESTART usb_id: handle ATAPI devices like SCSI devices udevadm: settle - fix typo Lennart Poettering (1): fix naming for tape nst devices in /dev/tape/by-path/ Olaf Kirch (2): udevd: use ppoll instead of signal pipes reap children faster Scott James Remnant (2): Allow user and group lookup to be disabled. Expose delayed name resolution Sven Jost (1): volume_id: support via raid version 2 Summary of changes from v135 to v136 ============================================ Adam Buchbinder (1): extras: fix mis-spelling of "environment" Harald Hoyer (1): rule_generator: fix enumeration for write_cd_rules Jeremy Higdon (1): path_id: rework SAS persistent names Karel Zak (1): volume_id: HPFS code clean up Kay Sievers (54): rules: ATA_COMPAT do not try to match on sr*, it will never have vendor ATA scsi_id: do not fail if no serial is found like for optical drives update configure and NEWS rules: fix isdn rules rules: add persistent /dev/serial/{by-id,by-path} rules make: install serial rules file make: do not delete autotools generated file with distclean udevadm: settle - allow --timeout=0 and --quiet rules: move aoe rules to default rules file volume_id: btrfs - update format rules: add "do not edit header" volume_id: support sub-uuid's and plug in btrfs device uuid libudev: include build: add -lsepol build: just use autoreconf -i rules: remove ide-scsi rules: first simple step merging with Ubuntu rules "'/sbin/modprobe abnormal' exit" - also print program options rules: more changes toward Ubuntu rules merge rules: more changes toward Ubuntu rules merge rules: remove /dev/raw/raxctl symlink, it's a devfs leftover rules: rtc - create rtc compat link only for cmos type rtc rules: remove legacy symlinks rules: do not put raw1394 in "video" group rules: second round merging with Ubuntu rules rules: remove /dev/dsp /dev/audio rules: put alsa in group "audio" rules: isdn - remove /dev/isdn/capi20 symlink rules: provide /dev/raw/rawctl if needed, store database entries also for devices which do not have a device node build: use autoreconf --symlink usb_id: add "image" class require non-SYSFS_DEPRECATED 2.6.20+ kernel build: default to --prefix=/usr --exec-prefix="" libudev: enumerate - add lookup by property rules: input - make sure needed variables are set libudev: device - read "uevent" only if info is not already loaded libudev: subsytem -> subsystem libudev: bump revision usb_id: use devtype lookup require 2.6.22+ kernel rules: Ubuntu merge - use group "cdrom" rules: Ubuntu merge - use group "tape" rules: replace DVB shell script rule rules: Ubuntu merge - s/uucp/dialout/ update NEWS update NEWS enable skipping of "naming-only" rules usb_id: s/image/media/ udevadm: s/udevinfo/udevadm info/ rules: reorder block rules rules: zaptel - add "dialout" group libudev: device - add udev_device_get_property_value() libudev: test - add udev_device_get_property_value() Marcel Holtmann (3): libudev: device - add devtype support libudev: device - lookup subsystem and devtype together libudev: device - remove udev_device_get_parent_with_subsystem Michal Soltys (1): man: udev - update NAME assignment Ryan Thomas (1): rules: add rules for AoE devices Summary of changes from v134 to v135 ============================================ Kay Sievers (6): usb_id: add "break" to currently unused case labels rules: fix cciss disk/by-id/ links rules: add infiniband rules rules: infiniband.rules -> 40-infiniband.rules fix network interface name swapping update configure and NEWS Marcel Holtmann (1): usb_id: fix switch statement for video type Piter PUNK (2): rules: /dev/null -> X0R rules: add usb device nodes Summary of changes from v133 to v134 ============================================ Gabor Z. Papp (1): include errno.h in sysdeps.h Harald Hoyer (1): rules: add persistent rules for memory stick block devices Kay Sievers (19): autogen.sh: fix -print-multi-os-directory usage volume_id: update btrfs magic bump version rules: merge group "video" into default rules rules: v4l - add by-id/ links for USB devices libudev: accept NULL whitelist in util_replace_chars() usb_id: replace chars in returned strings ata_id: make sure, we do not have slashes in values scsi_id: make sure, we do not have slashes in values volume_id: remove unused usage types vol_id: if regular files are probed, use stat() for the size value volume_id: update btrfs volume_id: clear probing result before probing and do not probe a second time, if not needed path_id: fix fibre channel handling update NEWS TODO floppy: use ARRAY_SIZE() fix handling of swapping node name with symlink name silence PHYSDEV* warning for WAIT_FOR* rules rules: exclude "btibm" devices from vol_id calls Matthias Schwarzott (1): rules: Gentoo update Peter Breitenlohner (2): man: fix typos floppy: fix array bounds check and minor calculation Summary of changes from v132 to v133 ============================================ Alan Jenkins (2): udevd: de-duplicate strings in rules scsi_id: we don't use DEVPATH env var anymore, update man page Karel Zak (1): volume_id: fat - move check for msdos signature (0x55 0xaa) Kay Sievers (22): silence "comparison between signed and unsigned" string index - split nodes and childs to allow and unlimited number of childs reserve child slot 0 merge trie nodes, childs and root into a single array set errno = ENOSYS in inotify stub udevadm: info - unify -V and --version rules: remove DEVTYPE disk/partition rules: remove pnp shell script, acpi loads these modules properly update NEWS configure: add linux-hotplug mail address remove len == 0 check, the index root is always '\0' volume_id: bump revision volume_id: always check for all filesystem types and skip conflicting results volume_id: fat - accept empty FAT32 fsinfo signature fix spelling in comment volume_id: ntfs - mark as no other fs must match vol_id: clarify error message libudev: device - handle disk "device" link for partitions in deprecated sysfs layout limit $attr() magic to well-known links only udevd: fix cleanup of /dev/.udev/uevent_seqnum fix $links substitution for devices without any link update NEWS Sergey Vlasov (1): udevadm: fix option parsing breakage with klibc Summary of changes from v131 to v132 ============================================ Kay Sievers (2): fix size_t compiler warning on 32 bit platforms convert debug string arrays to functions Summary of changes from v130 to v131 ============================================ Alan Jenkins (17): libudev: fix sysnum logic for digit-only device names udevd: avoid overhead of calling rmdir on non-empty directories use more appropriate alternatives to malloc() libudev: util - optimize path_encode() libudev: allocate udev_device->envp[] dynamically replace strncpy() with strlcpy() use re-entrant variants of getpwnam and getgrnam udevd: fix memory leak udevd: fix WAIT_FOR_SYSFS execution order fix handling of string_escape option udevd: use a tighter loop for compare_devpath() udevd: avoid implicit memset in match_attr() kerneldoc comment fixes udevd: simplify rules execution loop udevd: fix termination of rule execution udevd: be more careful when matching against parents udevd: shrink struct token to 12 bytes Kay Sievers (113): remove outdated docs/README-gcov_for_udev libudev: device - add device lookup by subsystem:sysname libudev: also prefix non-exported functions with udev_* libudev: add udev_monitor_send_device() libudev: list - add flag libudev: device - generate DEVNAME and DEVLINKS properties vol_id: update README libudev: handle ! in sysname, add sysnum, return allocated list_entry on add delete simple-build-check.sh test: move global ENV{ENV_KEY_TEST}="test" to local rule libudev: monitor - fix send_device() property copying libudev: device - add get_envp() to construct envp from property list libudev: do not include ctrl in libudev.so libudev: monitor - do not mangle DEVLINKS property libudev: update DEVLINKS property when properties are read libudev: device - lookup "subsystem" and "driver" only once libudev: device - export properties when values are set libudev: list - handle update of key with NULL value libudev: ctrl - fix typo in set_env() libudev: add global property list libudev: device - copy global properties, unset empty properties volume_id: btrfs - update magic to latest disk format udevd: use libudev move udev_device_db to libudev rename udev source files libudev: always add UDEV_LOG libudev: monitor - export MAJOR/MINOR only if available udev-node: name_list -> udev_list udev-rules-parse: name_list -> udev_list delete name_list, move common file functions fix sorting of rules files run_program: prevent empty last argv entry update IMPORT= file/stdout property parsing update rules file parsing delete udev-util-file.c libudev: list - prepend udev_* to all functions libudev: add sysnum to test program test: fix a few unintentially wrongly written rules which cause parse errors libudev: monitor - add set_receive_buffer_size() libudev: ctrl - change magic to integer libudev: make list_node functions available udevd: use udev_list_node collect: use udev_list delete list.h merge udev-rules.c and udev-rules-parse.c make struct udev_rules opaque move run_program to util udev_event_run() -> udev_event_execute_rules() udev_rules_run() -> udev_event_execute_run(); move udev_rules_apply_format() to udev-event.c udev_list_cleanup() -> udev_list_cleanup_entries() selinux_init(udev) -> udev_selinux_init(udev) prefix udev-util.c functions with util_* pass make distcheck libudev: device - get_attr_value() -> get_sysattr_value() cdrom_id: remove ARRAY_SIZE() declaration replace missing get_attr_value() -> get_sysattr_value() add "root" == 0 shortcuts to lookup_user/group() do not use the new work-in-progress parser rule matcher libudev: device - 128 -> ENVP_SIZE add util_resolve_subsys_kernel() handle numerical owner/group string in lookup_user/group() replace in-memory rules array with match/action token list do not create temporary node ($tempnode) if node already exists shrink struct udev_event shrink struct udev_event rule_generator: fix netif NAME= value extraction regex skip SYMLINK rules for devices without a device node rules: let empty strings added to buffer always return offset 0 fix uninitialized variable warnings cache uid/gid during rule parsing distinguish "match" from "assign" by (op < OP_MATCH_MAX) determine at rule parse time if we need to call fnmatch() special-case "?*" match to skip fnmatch() libudev: monitor - replace far too expensive snprintf() with strlcpy() libudev: monitor - cache result of monitor send buffer fix "unused" warnings remove debug printf match KEY="A|B" without temporary string copy match_attr() - copy attr value only when needed do not init string arrays, just clear first byte fix $attr{[/]} substitution libudev: device - fill envp array while composing monitor buffer test: add RUN+="socket: ..." to a test to run monitor code libudev: device - allocate envp array only once update NEWS udevd: merge exec and run queue to minimize devpath string compares ATTR{}== always fails if the attribute does not exist rules: remove SCSI timeouts rules: remove "add" match from usb device node rule edd_id: add "change" event match fstab_import: add "change" event match write trace log to stderr log rules file and line number when NAME, SYMLINK, OWNER, GROUP, MODE, RUN is applied skip entire rule containing device naming keys, if no device can be named fix udev_node_update_old_links() logic move some info() to dbg() add "devel" and "install" switches to autogen.sh move debugging strings inside #ifdef DEBUG firmware.sh: record missing files in /dev/.udev/firmware-missing/ fix list handling in enumerate and rules file sorting volume_id: btrfs update info() PROGRAM and IMPORT execution fix $links substitution fix cleanup of possible left-over symlinks do not import the "uevent" file when we only read the db to get old symlinks usb_id: MassStorage SubClass 6 is "scsi" not "disk" unify string replacement $links should be relative fix indentation rules: md - add mdadm 3 device naming cleanup /dev/.udev/queue on startup and exit udevadm: settle - exit if udevd exits Matthias Koenig (1): volume_id: swap - larger PAGE_SIZE support Steven Whitehouse (1): volume_id: support for GFS2 UUIDs Summary of changes from v129 to v130 ============================================ Kay Sievers (26): fix compile error with --disable-logging libudev: enumerate - add_device() -> add_syspath() volume_id: hpfs - read label and uuid use no_argument, required_argument, optional_argument in longopts libudev: get rid of selinux libudev: device - add get_parent_with_subsystem() usb_id: use libudev udevadm: info - fix --query=all for devices without a device node vol_id: add size= option move selinux noops to udev.h volume_id: add dbg() as noop to check for compile errors vol_id: fix logging glue vol_id: always use the safe string versions for unencoded label and uuid volume_id: better DDF raid detection volume_id: add btrfs volume_id: use PRIu64i, PRIx64 macros udevd: clarify deprecated sysfs layout warning libudev: fix --enable-debug don not print error if GOTO jumps just to next rule volume_id: add more vfat debugging information libudev: libudev.pc remove selinux store node name and symlinks into db symlink target if they are small enough volume_id: more fat debugging libudev: fix typo in "multiple entries in symlink" handling connect /sys and /dev with /sys/dev/{block,char}/: and /dev/{block,char}/: replace spaces in dm and md name symlinks Summary of changes from v128 to v129 ============================================ Alan Jenkins (7): udev-test.pl: set non-zero exitcode if tests fail scsi_id: compiler warning on 32-bit trivial cleanup in udev_rules_iter avoid repeated scans for goto targets (udev_iter_find_label) replace strerror() usage with threadsafe "%m" format string fix messages (inc. debug compile failure) introduced when optimizing "goto" allow compiler to check dbg() arguments on non-debug builds Kay Sievers (46): libudev: switch to "udev_device_get_parent" libudev: udev_device - add attribute cache libudev: handle "device" link as parent, handle "class" "block" as "subsystem" udevadm: info - fix lookup-by-name libudev: switch API from devpath to syspath libudev: rename ctrl_msg to ctrl_msg_wire vol_id: fix lib logging glue fix broken symlink resolving fix udevadm trigger libudev: pass udev_device in enumerate libudev: fix "subsystem" value always include config.h from Makefile libudev: udev_device_get_devname -> udev_device_get_devnode libudev: add udev_device_new_from_devnum() libudev: also import "uevent" file when reading udev database libudev: add userdata pointer libudev: replace awkward callback list interfaces with list iterators libudev: get devnum from uevent file libudev: enumerate_get_devices_list -> enumerate_get_list libudev: initialize selinux only when needed libudev: device - read database only when needed libudev: rework list handling libudev: more list rework lubudev: accept more sys directories as devices, and parent devices libudev: enumerate - accept list of subsystems to scan, or skip libudev: enumerate "subsystem" libudev: enumerate - scan /sys/block/ if needed libudev: enumerate - split new() and scan() test: replace ancient sysfs tree with recent one test: add missing pci directory because of .gitignore *.7 gitignore: move *.8 to subdirs test: replace last reference of "/class/*" devpath fix dbg() callers libudev: enumerate - scan devices and subsystems, add subsystem and attribute filter udevadm: trigger: use libudev fix segfault caused by wrong pointer used in dbg() libudev: device_init() -> device_new() udevadm: trigger fix long option --type= libudev: add queue interface udevadm: settle - use libudev queue libudev: device - handle /sys/block// libudev: enumerate - ignore regular files while scanning udevadm: trigger --type=failed - use libudev queue rules: ieee1394 - create both, by-id/scsi-* and by-id/ieee-* links build: include Makefile.am.inc in all Makefile.am udevd: print warning if CONFIG_SYSFS_DEPRECATED is used Summary of changes from v127 to v128 ============================================ Alan Jenkins (8): fix uninitialized name_list error::ignore_error do not needlessly declare some local variables in udev_rules_parse.c as static remove deprecated envp[] in main() fix name compare bug name_list_key_add() remove redundant string copy in udev_rules_apply_format() remove redundant "remove trailing newlines" in udevadm info threadsafe rules iteration fix off-by-one in pass_env_to_socket() Kay Sievers (53): libudev: add monitor documentation libudev: fix --disable-log autogen.sh: add --with-selinux volume_id: hfs - calculate proper uuid fix dangling pointer returned by attr_get_by_subsys_id() udev-test.pl: add --valgrind option libudev: libudev.pc add Libs.private volume_id: fail on undefined __BYTE_ORDER remove FAQ libudev: fix monitor documentation libudev: add udev_device_get_syspath() udev_device_init() remove statically allocated device support udevadm: info - fix broken --device-id-of-file= udevadm: control - use getopt_long() udevadm: print warning to stderr if udevadm is called by symlink udev-test.pl: remove left-over comment from --valgrind option udevadm: rename source files udevadm: rename internal functions to udevadm_* udevadm: split out control functions udevadm: move init from commands to udevadm autogen.sh: add debug use libudev code, unify logging, pass udev context around everywhere volume_id: linux_raid - fix logic for volumes with size == 0 vol_id: add --debug option udevadm: add --version --help options to man page, hide them as commands move udev_ctrl to libudev-private udev-test.pl: set udev_log="err" test-udev: cleanup libudev context and overridden rules file string test-udev: remove unused var add a bunch of private device properties to udev_device udevadm: monitor - use libudev for udev monitor libudev: monitor - add event properties to udev_device udevadm: log message if udevadm link is used udevd: remove max_childs_running logic libudev: monitor- add netlink uevent support udevadm: monitor - use libudev code to retrieve device data libudev: udev_device - read "driver" value libudev: rename enumerate function libudev: add selinux libudev: initialize selinux after logging volume_id: merge util.h in libvolume_id-private.h update file headers libudev: udev_device - add more properties libudev: do not use udev_db.c libudev: get rid of udev_sysfs.c libudev: get rid of udev_utils.c libudev: rename libudev-utils.c libudev-util.c libudev: do not use any udev source file extras: use libudev code convert to libudev and delete udev_utils_string.c get rid of udev_sysdeps.c use size definitions from libudev udevadm: info - use "udev_device" Summary of changes from v126 to v127 ============================================ Karel Zak (2): build-sys: don't duplicate file names build-sys: remove non-POSIX variable names Kay Sievers (26): add inotify dummy definitions if inotify is not available build: remove autopoint check udevadm: trigger - add missing attr filter to synthesized "subsystem" register events ignore duplicated rules file names fix .gitignore rules: delete all distro rules which do not use default rules rules: add nvram rules: add isdn rules rules: Gentoo update add missing includes add some warnings update .gitignore add missing 'v' for "make changelog" build: fix "make dist" vol_id: make the --offset= argument optional rules: optical drives - probe at last session offset, do not probe for raid libudev: add library to access udev information libudev: split source files update INSTALL libudev: add udev event monitor API volume_id: remove deprecated functions and bump major version volume_id: remove left-over fd close() split udev_device.c to leave out rules handling from libudev libudev: link against selinux if needed firmware.sh: lookup lookup kernel provided firmware directory libudev: require LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE Michal Soltys (1): rules: fix md rules for partitioned devices Summary of changes from v125 to v126 ============================================ Kay Sievers (9): delete all Makefiles and move udev source to udev/ use autotools rules: mode 0660 for group "disk" rules: update Fedora rules update ChangeLog INSTALL: --enable-selinux not --with-selinux volume_id: move static lib to $prefix volume_id: create relative links rules: run vol_id on opticals only if media is found Marco d'Itri (1): rules: Debian update Thomas Koeller (1): use proper directory lib/lib64 for libvolume_id Summary of changes from v124 to v125 ============================================ John Huttley (1): rules: tape rules - add nst to usb and 1394 links Karl O. Pinc (1): man: clarify $attr{} parent searching Kay Sievers (14): collect: fix size_t printf path_id: suppress trailing '-' like 'ID_PATH=pci-0000:05:01.0-' rules: add v4l persistent links docs: update some docs and delete outdated stuff scsi_id: fix fallback to sg v3 for sg nodes rules: fix cciss rules for partition numbers > 9 udev.conf: udevcontrol -> udevadm control rules: use consistently OPTIONS+= scsi_id: the fallback fix broke error handling man: rebuild from xml do not touch node ownership and permissions, if already correct rules: tape rules - add nst to by-path/ links udevadm: info - add --export format to --device-id-of-file= move default rules from /etc/udev/rules.d/ to /lib/udev/rules.d/ Marco d'Itri (7): rules_generator: net rules - do not print error if file is missing and ignore commented rules man: add link_priority default value scsi_id: man page fix udevadm: settle - add verbose output when running into timeout rules: Debian update rules: Debian update ignore rule with GOTO to a non-existent label Thomas Koeller (1): scsi_id: include sys/stat.h Tobias Klauser (1): collect: check realloc return value Summary of changes from v123 to v124 ============================================ Kay Sievers (1): cdrom_id: fix recognition of blank media Summary of changes from v122 to v123 ============================================ Erik van Konijnenburg (3): add substitution in MODE= field Makefile: use udevdir in "make install" volume_id: support for oracleasm Harald Hoyer (1): scsi_id: retry open() on -EBUSY Karel Zak (2): volume_id: remove unnecessary global variable volume_id: enable GFS probing code, add LABEL support Kay Sievers (5): edd_id: call it only for sd* and hd* rename WAIT_FOR_SYSFS to WAIT_FOR and accept an absolute path rules: tape rules - use bsg device nodes for SG_IO rules: persistent net - handle "locally administered" ibmveth MAC addresses cdrom_id: export ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=, ID_CDROM_MEDIA_TRACK_COUNT_DATA= Michal Soltys (1): man: add NAME== match entry Xinwei Hu (2): collect: realloc buffer, if needed udevd: export .udev/queue/$seqnum before .udev/uevent_seqnum Summary of changes from v121 to v122 ============================================ Hannes Reinecke (2): scsi_id: remove all sysfs dependencies scsi_id: add SGv4 support Karel Zak (1): volume_id: clean up linux_raid code Kay Sievers (8): scsi_id: update man page scsi_id: remove bus_id option scsi_id: add --sg-version= option rules: adapt to new scsi_id rules: adapt tape rules to new scsi_id scsi_id: add bsg.h volume_id: bump version Makefile: do not create udevcontrol, udevtrigger symlinks MUNEDA Takahiro (2): man: udevd- fix udev(8) reference man: scsi_id Matthias Schwarzott (1): cdrom_id: fix segfault Summary of changes from v120 to v121 ============================================ Damjan Georgievski (1): libvolume_id: recognize swap partitions with a tuxonice hibernate image Daniel Drake (1): writing udev rules: fix rule typos David Woodhouse (1): rules_generator: net rules - add "dev_id" value to generated rules Harald Hoyer (1): selinux: more context settings Kay Sievers (21): udevinfo: do not replace chars when printing ATTR== matches vol_id: add --offset option cdrom_id: replace with version which also exports media properties udevd: at startup write message including version number to kernel log rules_generator: net rules - always add KERNEL== match to generated rules selinux: fix missing includes allow setting of MODE="0000" path_id: remove subsystem whitelist logging: add trailing newline to all strings scsi_id: initialize serial strings persistent device naming: also read unpartitioned media cdrom_id: add more help text add $links substitution fstab_import: add program to IMPORT matching fstab entry add OPTIONS+="event_timeout=" write "event_timeout" to db udevadm: trigger - add --env= option udevadm: control - fix --env key to accept --env== udevadm: info - do not print ATTR{dev}== persistent device naming: update tape rules rules: update md rules Summary of changes from v119 to v120 ============================================ Kay Sievers (9): test: remove duplicated EXTRA entry rules: remove last WAIT_FOR_SYSFS, load ppdev, switch scsi_device udevadm: trigger - option to synthesize events and pass them to a socket udevadm: info - resolve devpath if symlink is given udevadm: remove old man page links and compat links for debugging tools udevadm: trigger - fix broken socket option check udevadm: trigger - fix --socket== + --verbose also accept real socket files for RUN+="socket:" persistent device naming: cleanup storage rules Michael Kralka (1): udevd: serialize events if they refer to the same major:minor number Summary of changes from v118 to v119 ============================================ Anthony L. Awtrey (1): do not skip RUN execution if device node removal fails Harald Hoyer (2): rules: Fedora update rules: do not set GROUP="disk" for scanners Jiri Slaby (1): rules_generator: add missing write_net_rules unlock Karel Zak (2): volume_id: fix UUID raw buffer usage volume_id: fix typo in function documentation Kay Sievers (10): switch mailing lists to linux-hotplug@vger.kernel.org rules: remove tty rule which can never run because of an earlier "last_rule" volume_id: update ext detection selinux: set context for real file name not the temp name hack to allow ATTR{block/*/uevent}="change" rules_generator: add KERNEL=="*" to generated rules persistent device naming: also run on "change" event test: add "subsystem" links to all devices sysfs: depend on "subsystem" link extend hack to allow TEST=="*/start" Matthias Schwarzott (1): volume_id: respect LDFLAGS Neil Williams (1): volume_id: add prefix=, exec_prefix= Roy Marples (1): Makefile: do not require GNU install Summary of changes from v117 to v118 ============================================ Daniel Drake (1): doc: update "writing udev rules" Hannes Reinecke (1): volume_id: LVM - add uuid Kay Sievers (9): remove udevstart rules_generator: do not create rules with insufficient matches man: udevadm settle - mention 180 seconds default timeout libvolume_id: squashfs - add endianess support for LZMA compression rules: add AOE rule volume_id: md - add metadata minor version volume_id: run only once into a timeout for unreadable devices create_floppy_devices: fix logic for more than one floppy device volume_id: also add readable check to probe_all() Matthias Schwarzott (1): rules: Gentoo update Michael Prokop (1): libvolume_id: squashfs+LZMA compression detection Summary of changes from v116 to v117 ============================================ Dan Nicholson (2): extras: ignore built and generated files volume_id: create relative symlink when $(libdir) = $(usrlibdir) Kay Sievers (15): usb_id: fail if vendor/product can not be retrieved rules: SUSE update firmware: do not print error if logger is missing volume_id: vfat - allow all possible sector sizes volume_id: LUKS - export version volume_id: ntfs - rely on valid master file table volume_id: bump version udevinfo: exclude "uevent" file from --attribute-walk udevadm: merge all udev tools into a single binary udevadm: accept command as option, like --help, --version udevadm: add info option --device-id-of-file= Makefile: fix bogus version number than got committed udevadm: also return major==0 results for --device-id-of-file man: udevd.8 - remove udevcontrol section udevadm: control - allow command to be passed as option MUNEDA Takahiro (1): man: fix udevadm.8 typo Matthias Schwarzott (2): firmware: remove hardcoded path to logger rules: Gentoo update VMiklos (1): rules: Frugalware update Summary of changes from v115 to v116 ============================================ Bryan Kadzban (1): rules: fix typos Harald Hoyer (3): check line length after comment check and whitespace strip only install *.rules remove extra space from udevinfo symlink output Kay Sievers (29): rules: fix two trivial typos rules: random and urandom are 0666 rules: add REMOVE_CMD rule track "move" events to rename database and failed files rules: Gentoo update rules: add i2o driver rule man: recreate man pages volume_id: fix linux_raid metadata version 1.0 detection add $name substitution do not delete the device node with ignore_remove, but handle the event print warning for invalid TEST operations rules: do not delete /lib/udev/devices/ nodes on "remove" rules: remove broken nvram group assignment without any permission add /dev/rtc symlink if new rtc drivers are used increase WAIT_FOR_SYSFS timeout to 10 seconds rules: put bsd nodes in /dev/bsd/ directory path_id: fix for stacked class devices ignore device node names while restoring symlinks from the stack use SEQNUM in /dev/.udev/queue/ instead of devpath rules: add memstick module loading udevinfo: simplify symlink printing logic prevent wrong symlink creation if database disagress with current rules fix wrong variable used in logged string update README rule_generator: move all policy from write_net_rules to the rules file rules: call usb_id only for SUBSYSTEMS=="usb" rules: split out and fix persistent tape rules fix debug output string rule_generator: always match netif type in generated rule Matthias Schwarzott (3): rules: Gentoo update rules: Gentoo update rules: Gentoo update Michael Morony (1): set buffer size if strlcpy/strlcat indicate truncation maximilian attems (1): correct includes in udev_selinux.c Summary of changes from v114 to v115 ============================================ Harald Hoyer (1): rules: fix typo in 80-drivers.rules Kay Sievers (15): rules: add default rules rules: update SUSE rules rules: add packages rules rules: add ia64 rules rules: move md-raid rules to packages dir rules: run vol_id only for partitions rules: update Fedora rules edd_id: move persistent rules to its own file accept relative path for TEST rules: add iowarrior rule volume_id: fix sqashfs detection do not ignore dynamic rule if it is the last one in the list rule_generator: fix wrong DRIVERS!= logic rules: update Fedora Makefile: install default rules Marco d'Itri (3): rules_generator: remove policy from write_cd_rules rules_generator: fix write_cd_rules when similar names exist in the root directory rules: Debian update Summary of changes from v113 to v114 ============================================ Hannes Reinecke (3): collect: extra to synchronize actions across events add $driver subtitution rules_generator: add S/390 persistent network support Kay Sievers (24): rules_generator: remove executable flag from include file always unlink temporary file before creating new one rules: SUSE update volume_id: ext4 detection udevtrigger: allow to specify action string add option to RUN key to ignore the return value of the program use global udev_log variable instead of parameter in run_program add udev_rules_run() to handle RUN list move udev_utils_run.c into udev_rules.c rules: SUSE update name_list: rename loop_name -> name_loop handle dynamic rules created in /dev/.udev/rules.d/ allow SYMLINK== match libvolume_id: use /usr/$libdir in pc file Makefile: add --as-needed flag to ld restore behavior of NAME== rules_generator: remove "installation" function udevtrigger: trigger "driver" events rules: update SUSE rules: Fedora update rules: add "do not edit" comment rules: Fedora update rules_generator: skip random MAC addresses write changed network interface names to the kernel log Matthias Schwarzott (3): rules: Gentoo update fix inotify to work not only once rules: Gentoo update Richard Hughes (1): Makefile: add "make dist" for nightly snapshots Summary of changes from v112 to v113 ============================================ David Zeuthen (1): vol_id: do not fail if unable to drop privileges Kay Sievers (12): add missing ChangeLog make ATTR{[$SUBSYSTEM/$KERNEL]}="" working rules: recognize partitions and disk devices properly rules: SUSE update atomically replace existing nodes and symlinks do not try to create existing file info() for ignore_remove rules: SUSE update Makefile: check for missing ChangeLog or RELEASE-NOTES at release allow to disable the replacement of unusual characters no newline in log messages udevd: do not use syslog if --verbose (debugging) is used Tobias Klauser (1): fix typo in udev_utils_run.c Summary of changes from v111 to v112 ============================================ Fabio Massimo Di Nitto (1): rules: ignore partitons that span the entire disk Hannes Reinecke (1): cciss device support Kay Sievers (34): udevd: close /proc/meminfo after reading create_floppy_devices: remove dead "unlink" code volume_id: add function documentation udev_db: escape path names with \x00 instead of %00 udevsettle: use long options replace_chars: replace spaces in node name volume_id: add and export string encoding function vol_id: export encoded strings rules: use encoded strings instead of skipping characters udevtest: print message before log output volume_id: escape % character replace_chars: replace % character IMPORT: do not mangle whitespace scsi_id: do not install symlink in /sbin rules: SUSE update volume_id: terminate overlong label strings scsi_id: add long options rules: use long options for scsi_id path_id: skip subsystem directory rules: fix cciss rule rules: SUSE update scsi_id: fix typo in help text fix "do not access parent" warning for ATTR{} sysfs: add device lookup by $SUBSYSYTEM:$KERNEL events for "bus" and "class" registration must be matched as "subsystem" udevtest: add --subsystem option sysfs: change order of subsystem lookup add $sys substitution add TEST=="" key add "[$SUBSYSTEM/$KERNEL]" lookup sysfs: handle bus/class top-level directories sysfs: skip unknown sysfs directories rules: SUSE update release 112 Miklos Vajna (2): create_floppy_devices: add man page path_id: remove on make uninstall Ryan Lortie (1): volume_id: support for long-filename based labels Scott James Remnant (2): replace_untrusted_chars: replace all whitespace with space run_program: log "info" not "error" if program is missing Summary of changes from v110 to v111 ============================================ Kay Sievers (19): rules: SUSE update rules: Fedora update volume_id: use md native uuid format vol_id: use long options volume_id: add volume_id_get_* functions vol_id: use volume_id_get_* udevd: use fgets() to read /proc files volume_id: add internal UUID_STRING volume_id: add DDF support vol_id: README update volume_id: rename UUID_64BIT_LE/BE vol_id: add ID_FS_UUID_SAFE rules: use ID_FS_UUID_SAFE rules: SUSE update volume_id: give access to list of all available probers vol_id: use libvolume_id prober list for --probe-all volume_id: add remaining names for prober lookup by type rules: SUSE update volume_id: vol_id depends on libvolume_id Matthias Schwarzott (2): volume_id: fix Makefile for parallel make rules: Gentoo update Summary of changes from v109 to v110 ============================================ Harald Hoyer (1): udevcontrol: allow to set global variables in udevd Kay Sievers (13): remove eventrecorder.sh update SUSE rules volume_id: add md metadata 1.0, 1.1, 1.2 support unset variable with ENV{VAR}="" delete copies of default rules in SUSE rules volume_id: ext - fix endianess in version number rules: Fedora update volume_id: old md metadata has only 32 bit for the uuid volume_id: minix version 3 support don't create $tempnode for devices without major usb_id: add to help text ata_id: use getopt_long() rules: SUSE update Matthias Schwarzott (3): Makefile: respect CFLAGS/LDFLAGS rules: Gentoo update ata_id: don't log error for libata devices on older kernels Summary of changes from v108 to v109 ============================================ Harald Hoyer (1): create_floppy_devices: create nodes with correct selinux context Kay Sievers (11): udevtest: export ACTION string if given as option update SUSE rules make ACTION!="add|change" working udevtest: import uevent variables if possible udevinfo: export all information stored in database default rules: add libata compat links create_path: don't fail if something else created the directory udevd: fix serialization of events path_id: remove broken example libvolume_id: do not install static library update SUSE rules Matthias Schwarzott (2): update Gentoo rules persistent device naming: add joystick links VMiklos (1): path_id: add man page Summary of changes from v107 to v108 ============================================ Kay Sievers (3): udevinfo: relax check for the correct device if looked up by name don't write to sysfs files during test run finally remove the directory event-multiplexer crap Matthias Schwarzott (2): write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices update Gentoo rules Pozsar Balazs (1): udevsettle: read udev not kernel seqnum first Summary of changes from v106 to v107 ============================================ Jean Tourrilhes (1): udevtest: export UDEV_LOG if we changed it Kay Sievers (33): man: add missing options to various man pages man: fix typo create_floppy_devices: apply specified mode without umask man: spelling fixes udevmonitor: add switch for kernel and udev events default rules: wait for 0:0:0:0 scsi devices only update Fedora rules delete dasd_id, it moved to s390-tools update Gentoo rules encode db-file names, instead of just replacing '/' update internal variables if we see $DEVPATH during IMPORT increase /proc/stat buffer maintain index over device-names to devpath relation restore overwritten symlinks when the device goes away store devpath with the usual leading slash add link_priority to rule options, and store it in database pick actual valid device in udev_db_lookup_name cleanup already existing db-entries and db-index on device update selinux: move selinux_exit() to the main programs remove old error message read list of devices from index, make index private to database priority based symlink handling volume_id: get rid of compiler warning udevinfo: remove -d option update %n on netif name change if a node goes away, possibly restore a waiting symlink update TODO man: add "link_priority" option update SUSE rules udevtest: add --force mode udevinfo: print link priority usb_id: append target:lun to storage device serial run_directory: add final warning before removal Marco d'Itri (1): update Debian rules Matthias Schwarzott (2): udevd: cleanup std{in,our,err} on startup udevmonitor: fix swapped event switch descriptions Summary of changes from v105 to v106 ============================================ A. Costa (1): man: fix typos in scsi_id and udevd Andrey Borzenkov (2): vol_id: add -L to print raw partition label vol_id: document -L Jamie Wellnitz (1): persistent device naming: tape devices and medium changers Kay Sievers (15): exclude parent devices from DRIVER== match volume_id: really fix endianess bug in linux_raid detection release 105 man: correct udevinfo --export-db path_id: append LUN to iSCSI path create_floppy_devices: add option for owner/group update example rules apply format chars to ATTR before writing to sysfs add (subsystem) to udevmonitor output update DRIVER== changes remove --version from the udevinfo man page add test for an attribute which contains an operator char man: add note about parent matching behavior scsi_id: accept tabs in /etc/scsi_id.conf remove dead rule in persistent tape rules Matthias Schwarzott (4): correct typo in extras/scsi_id/scsi_id.conf fix retry-loop in netif-rename code add option --version to udevd rule_generator: fix for creating rules on read-only filesystem Peter Breitenlohner (1): fix INSTALL_PROGRAM vs. INSTALL_SCRIPT Sergey Vlasov (3): udevd: init signal pipe before daemonizing unlink old database file before creating a new one fix %c $string substitution Theodoros V. Kalamatianos (1): fix udev attribute names with a colon Summary of changes from v104 to v105 ============================================ A. Costa (1): man: fix typos in scsi_id and udevd Andrey Borzenkov (2): vol_id: add -L to print raw partition label vol_id: document -L Kay Sievers (2): exclude parent devices from DRIVER== match volume_id: really fix endianess bug in linux_raid detection Matthias Schwarzott (2): correct typo in extras/scsi_id/scsi_id.conf fix retry-loop in netif-rename code Peter Breitenlohner (1): fix INSTALL_PROGRAM vs. INSTALL_SCRIPT Sergey Vlasov (3): udevd: init signal pipe before daemonizing unlink old database file before creating a new one fix %c $string substitution Summary of changes from v103 to v104 ============================================ Kay Sievers (12): update Fedora rules update example rules update SUSE rules update SUSE rules volume_id: fix endianess bug in linux_raid detection man: fix udevmonitor text man: recreate from xml rename config "filename" to "dir" remove outdated documentation rename "udev.c" to "test-udev.c" - it is only for testing update Fedora rules use git-archive instead of git-tar-tree Kazuhiro Inaoka (1): inotify syscall definitions for M32R Marco d'Itri (2): write_cd_rules: identity-based persistence scsi_id: remove trailing garbage from ID_SERIAL_SHORT Russell Coker (1): SELinux: label created symlink instead of node Summary of changes from v102 to v103 ============================================ Kay Sievers: persistent storage rules: skip gnbd devices volume_id: add checksum check to via_raid volume_id: add comment about hfs uuid conversion update SUSE rules update Fedora rules Summary of changes from v101 to v102 ============================================ Daniel Drake: writing_udev_rules: fix typo in example rule Kay Sievers: create missing ChangeLog for version 101 update SUSE rules update default rules first try "subsystem" link at a parent device, before guessing if /sys/subsystem exists, skip class, bus, block scanning scsi_id: export ID_SERIAL_SHORT without vendor/product update SUSE rules MUNEDA Takahiro: path_id: fix SAS disk handling Summary of changes from v100 to v101 ============================================ Arjan Opmeer: fix udevinfo help text typo Bryan Kadzban: cleanup default rules add IMPORT operations to the udev man page Kay Sievers: remove Makefile magic for leading '0' in version udevd: use getopt_long() udevd: add --verbose option to log also to stdout udevd: add --debug-trace option rule_generator: improve net rule comment generation volume_id: correct iso9660 high sierra header warn if a PHYSEDV* key, the "device" link, or a parent attribute is used don't print PHYSDEV* warnings for old WAIT_FOR_SYSFS rules udevinfo: print error in --attribute-walk udev_sysfs: unify symlink resolving udevtrigger: trigger devices sorted by their dependency fix spelling in deprecation warning release 101 MichaÅ‚ Bartoszkiewicz: udevtrigger: fix typo that prevents partition events Miles Lane: clarify "specified user/group unknown" error Piter PUNK: update slackware rules VMiklos: update Frugalware rules Summary of changes from v099 to v100 ============================================ Kay Sievers: update SUSE rules fix messed up ChangeLog from release 099 man: add $attr{} section about symlinks revert persistent-storage ata-serial '_' '-' replacement Summary of changes from v098 to v099 ============================================ Greg KH: update Gentoo rules Kay Sievers: udev_db.c: include use fnmatch() instead of our own pattern match code rename major/minor variable to maj/min to avoid warning update source file headers udevtest: print header that ENV{} can't work update TODO udevtrigger: options to filter by subsystem and sysfs attribute udevtrigger: remove unused longindex udevinfo: use long options udevd: use files instead of symlinks for /dev/.udev/queue,failed udevtrigger: fix pattern match reorder options in udevinfo man page udevinfo: fix SUBSYTEMS spelling error fix ENV{TEST}="Test: $env{TEST}" let $attr{symlink} return the last element of the path cdrom_id: add rules file to call cdrom_id udevinfo: do not show symlinks as attributes in --attribute-walk remove broken name_cdrom.pl Marco d'Itri: update Debian rules run_program: close pipe fd's which are connected to child process add persistent rules generator for net devices and optical drives MUNEDA Takahiro: changes rules for ata disk from '_' to '-' Sergey Vlasov: make struct option arrays static const fix "subsytem" typo Summary of changes from v097 to v098 ============================================ Alex Merry: udevtest: allow /sys in the devpath paramter Harald Hoyer: selinux: init once in the daemon, not in every event process Kay Sievers: udevd: remove huge socket buffer on the control socket man page: fix typo rename udev_libc_wrapper -> udev_sysdeps db: store devpath - node relationship for all devices udevinfo: allow -a -n udevinfo, udevtest: simplify '/sys' stripping from devpath argument lookup_user, lookup_group: report "unknown user" and "lookup failed" consistent key naming to match only the event device or include all parent devices skip rule, if too may keys of the same type are used introduce ATTR{file}="value" to set sysfs attributes update SUSE rules update default rules export DRIVER for older kernels as a replacement for PHYSDEVDRIVER fix typo in SUBSYSTEMS key parsing udevtrigger: add --retry-failed volume_id: add suspend partition detection vol_id: use primary group of 'nobody' instead of 'nogroup' remove built-in /etc/passwd /etc/group parser always expect KEY{value} on ATTR, ATTRS, ENV keys use new key names in test programs cleanup commandline argument handling db: don't create a db file for only a node name to store man: add ATTR{file}="value" assignment Lennart Poettering: volume_id: fix fat32 cluster chain traversal Marco d'Itri: fix 'unknow user' error from getpwnam/getgrnam fix rc when using udev --daemon update Debian rules MichaÅ‚ Bartoszkiewicz: man pages: fix typos Summary of changes from v096 to v097 ============================================ Anssi Hannula: add joystick support to persistent input rules Kay Sievers: firmware.sh: remove needless '/' vol_id: add --skip-raid and --probe-all option switch uevent netlink socket to group 1 only increase /proc/stat read buffer use "change" instead of "online" events remove 'static' from local variable libvolume_id: add parameter 'size' to all probe functions man pages: replace 'device-path' by 'devpath' man pages: work around xmlto which tries to be smart refresh vol_id man page udevinfo: add DRIVER== Makefile: fix dependency libvolume_id: read ufs2 label switch ifdef __KLIBC__ to ifndef __GLIBC__ report failing getpwnam/getgrnam as error rename udevcontrol message types and variables initialize unused sockets to -1 udevd: remove useless udevinitsend parameter update README udevd: autotune max_childs/max_childs_running update frugalware rules update SUSE rules move default rules to etc/udev/rules.d/ add 'crypto' devices to persistent storage rules add late.rules to default rules update Fedora rules don't report an error on overlong comment lines update SUSE rules udevd: read DRIVER from the environment Marco d'Itri: make rename_netif() error messages useful path_id: fix an harmless syntax error Piter PUNK: update slackware rules Richard Purdie: Fix inotify syscalls on ARM Summary of changes from v095 to v096 ============================================ Kay Sievers: Makefiles: fix .PHONY for man page target allow longer devpath values path_id: prepare for new sysfs layout Summary of changes from v094 to v095 ============================================ Kay Sievers: update SUSE rules don't remove symlinks if they are already there allow "online" events to create/update symlinks udevinfo: clarify parent device attribute use update SUSE rules netif rename: optimistic loop for the name to become free remove broken %e enumeration Tobias Klauser: print usage of udevcontrol when no or invalid command is given Summary of changes from v093 to v094 ============================================ Daniel Drake: update "writing udev rules" Kay Sievers: libvolume_id: gfs + gfs2 support remove MODALIAS key and substitution add persistent-input.rules Marco d'Itri: update Debian rules Summary of changes from v092 to v093 ============================================ Hannes Reinecke: path_id: add support for iSCSI devices Kay Sievers: libvolume_id: fat - check for signature at end of sector libvolume_id: add more software raid signatures update Fedora rules path_id: prevent endless loop for SAS devices on older kernels remove udevsend replace binary firmware helper with shell script skip device mapper devices for persistent links Summary of changes from v091 to v092 ============================================ Kay Sievers: don't include stropts.h, some libc's don't like it udevd: create leading directories for /dev/.udev/uevent_seqnum vol_id: fix logging from libvolume_id's log function update SUSE rules update SUSE rules add more warnings for invalid key operations fix offsetof() build issue with recent glibc selinux: fix typo in block device node selection vol_id: add NetWare volume detection edd_id: fix "(null)" output if "mbr_signature" does not exist update Fedora rules libvolume_id: nss - use different uuid Libor Klepac: path_id: add platform and serio support Marco d'Itri: update Debian rules path_id: fix bashism Summary of changes from v090 to v091 ============================================ Hannes Reinecke: path_id: fix SAS device path generation Kay Sievers: udevtest: don't try to delete symlinks persistent rules: fix typo in dm rule allow NAME=="value" to check for already assigned value udevd: export initial sequence number on startup Summary of changes from v089 to v090 ============================================ Kay Sievers: udevd: export current seqnum and add udevsettle volume_id: fix endianess conversion typo for FAT32 merge device event handling and make database content available on "remove" set default udevsettle timeout to 3 minutes export INTERFACE_OLD if we renamed a netif let udevmonitor show the possibly renamed devpath volume_id: move some debug to info level udevtrigger: fix event order usb_id: remove uneeded code remove old symlinks before creating current ones path_id: fix loop for SAS devices apply format char to variables exported by ENV Marco d'Itri: add inotify support for hppa and MIPS and log if inotify is not available Matt Kraai: fix typo in error message Summary of changes from v088 to v089 ============================================ Hannes Reinecke: path_id: add bus to USB path Kay Sievers: change rule to skip removable IDE devices don't create uuid/label links for raid members volume_id: provide library fix rule order for persistent tape links update man page volume_id: provide a custom debug function volume_id: rename subdirectory volume_id: use shared library by default because is better than cause volume_id: remove some global symbols volume_id: define exported symbols remove all stripping code man pages: mention udev(7) not udev(8) update Debian rules move all *_id programs to /lib/udev/ update Red Hat rules update SUSE rules pass CROSS_COMPILE to AR and RANLIB down to extras/ volume_id: update README volume_id: generate man page from xml source update README fix symlink targets in Makefiles Summary of changes from v087 to v088 ============================================ Hannes Reinecke: persistent links: add scsi tape links and usb path support Kay Sievers: volume_id: add squashfs detection reset signal handler in event process correct use of fcntl() add udevtrigger to request events for coldplug add ',' to trusted chars volume_id: remove partition table parsing code volume_id: remove all partition table support fix spelling error in debug string rename "persistent disk" to "persistent storage" fix output for USB path Summary of changes from v086 to v087 ============================================ Hannes Reinecke: path_id: support SAS devices Kay Sievers: fix persistent disk rules to exclude removable IDE drives warn about %e, MODALIAS, $modalias remove devfs rules and scripts Masatake YAMATO: typo in debug text in udev_run_hotplugd.c Summary of changes from v085 to v086 ============================================ Kay Sievers: volume_id: replace __packed__ by PACKED macro volume_id: split raid and filesystem detection volume_id: add missing return udevd: fix queue export for multiple events for the same device Kyle McMartin: workaround missing kernel headers for some architectures Nix: update to udev-084/doc/writing_udev_rules Summary of changes from v084 to v085 ============================================ Andrey Borzenkov: Fix trivial spelling errors in RELEASE-NOTES Jeroen Roovers: fix typo in parisc support to path_id Kay Sievers: make WAIT_FOR_SYSFS usable in non "wait-only" rules fix typo in man page include sys/socket.h for klibc build cramfs detection for bigendian exit WAIT_FOR_SYSFS if the whole device goes away update SUSE rules update Red Hat rules update Gentoo rules include errno.h in udev_libc_wrapper.c Summary of changes from v083 to v084 ============================================ Kay Sievers: update SUSE rules switch CROSS to CROSS_COMPILE replace fancy silent build program by simple kernel build like logic move manpages to top level remove UDEVD_UEVENT_INITSEND whitespace fixes scsi_id: remove dead files optimize sysfs device and attribute cache let SYSFS{} look at the device, not only the parent device add debug output to sysfs operations Summary of changes from v082 to v083 ============================================ Andrey Borzenkov: man page: document when substitutions are applied for RUN and other keys check for ignore_device in loop looks redundant Kay Sievers: udevstart: fix NAME="" which prevents RUN from being executed find programs in /lib/udev for IMPORT if {program} is not given don't add $SUBSYSTEM automatically as $1 to programs remove redundant substitution of RUN key Summary of changes from v081 to v082 ============================================ Andrey Borzenkov: substitute format chars in RUN after rule matching Kay Sievers: scsi_id, usb_id: request device parent by subsystem path_id: work with "all devices in /sys/devices" ignore all messages with missing devpath or action Makefile: remove dynamic config file generation path_id: handle fiber channel (Hannes Reinecke ) usb_id: don't fail on other subsytems than "scsi" don't do RUN if "ignore_device" is given increase kernel uevent buffer size move udev(8) manpage to udev(7) recreate man pages from xml source remove udev, udevstart, udevsend from the default installation update SUSE rules rename apply_format() cause it is public now udevtest: add udev_rules_apply_format() to RUN keys let "ignore_device" always return the event successfully Olivier Blin: fixes udev build with -fpie Summary of changes from v080 to v081 ============================================ Kay Sievers: add DEVLINKS to "remove" event better log text and comments vol_id: probe volume as user nobody fix BUS, ID, $id usage prepare moving of /sys/class devices to /sys/devices Summary of changes from v079 to v080 ============================================ Brent Cook: fix dependency for make -j2 coly: fix man page typos Kay Sievers: update RELEASE-NOTES + TODO fix typo in man page update TODO update SUSE rules path_id: fix invalid character class replace libsysfs Marco d'Itri: udev_selinux.c: include udev.h Summary of changes from v078 to v079 ============================================ Kay Sievers: don't log error if database does not exist use udev_root instead of "/dev"in selinux matchpathcon_init_prefix() scsi_id: read page 0x80 with libata drives update SUSE rules remove %e from man page Summary of changes from v077 to v078 ============================================ Greg Kroah-Hartman: Update Gentoo udev main rule file. add parisc support to path_id Hannes Reinecke: scsi_id: -u fold multiple consecutive whitespace chars into single '_' Harald Hoyer: optimize SELinux path match Kay Sievers: update README allow C99 statements fix segfaulting create_floppy_devices update SUSE rules remove unused variables remove default settings in udev.conf clearenv() is now part of klibc add DEVLINKS to the event environment Kurt Garloff: scsi_id: support pre-SPC3 page 83 format Summary of changes from v076 to v077 ============================================ Kay Sievers: merge two consecutive static strlcat's don't return an error, if "ignore_device" is used remove outdated and misleading stuff move SEQNUM event skipping to udevsend update RELEASE-NOTES update SUSE rules allow programs in /lib/udev called without the path update SUSE rules add target to to generate ChangeLog section update Red Hat rules Marco d'Itri: allow to overwrite the configured udev_root by exporting UDEV_ROOT let udevsend ignore events with SEQNUM set update Debian rules Summary of changes from v75 to v076 ============================================ Kay Sievers: fix typo in eventrecorder volume_id: include stddef.h header remove misleading install instructions remove all built-in wait_for_sysfs logic add linux/types.h back, old glibc-kernel-headers want it volume_id: use glibc's byteswap udevd: ignore all messages without DEVPATH udevd: track exit status of event process udevd: export event queue and event state remove "udev_db" option from config file Makefile: remove exec_prefix and srcdir update README and RELEASE-NOTES udevd: track killed event processes as failed update README don't start udevd from udevsend udevd: add a missing return libvolume_id: fix weird fat volume recognition move some helpers from extras to /lib/udev Scott James Remnant: move delete_path() to utils clean-up empty queue directories Makefile: fail, if submake fails Summary of changes from v74 to v075 ============================================ Greg Kroah-Hartman: Make run_directory.c stat the place it is going to try to run. Kay Sievers: forgot the ChangeLog for 074 volume_id: provide libvolume_id.a file remove our own copy of klibc remove outdated HOWTO update TODO update SUSE rules remove completely useless start script fix tests and remove no longer useful stuff replace udeveventrecorder by a shell script Summary of changes from v73 to v074 ============================================ Kay Sievers: never queue events with TIMEOUT set let NAME="" supress node creation, but do RUN keys remove udevinitsend update .gitignore Marco d'Itri: add strerror() to error logs move some logging from dbg() to info() Summary of changes from v72 to v073 ============================================ Kay Sievers: udevd: depend on netlink and remove all sequence reorder logic print useconds in udevmonitor add RELEASE-NOTES, update TODO Summary of changes from v71 to v072 ============================================ Ananth N Mavinakayanahalli: libsysfs: translate devpath of the symlinked class devices to its real path Jan Luebbe: add man pages for *_id programs Kay Sievers: volume_id: add OCFS Version 1 volume_id: add Veritas fs volume_id: check ext fs for valid blocksize, cause magic is only 2 bytes volume_id: move blocksize validation to fix jbd recognition volume_id: fix typo in ocfs volume_id: add vxfs include volume_id: make FAT32 recognition more robust volume_id: Version 051 volume_id: fix typo in ext blocksize check volume_id: Version 052 FAQ: remove confusing statement about module loading cleanup compiler/linker flags use DESTDIR on uninstall, no need to pass prefix to submake allow to pass STRIPCMD, to skip stripping of binaries cleanup make release fix the new warnings I asked for move rules parsing into daemon "make STRIPCMD=" will disable the stripping of binaries remove no longer working udevd-test program "STRIPCMD=" for the EXTRAS add dummy inotify syscalls on unsupported architecture remove no longer needed waiting for "dev" file revert the "read symlink as device patch" use libsysfs to translate the class linke to the device path libsysfs: remove brute-force "bus", "driver" searching for old kernels test: add "driver" and "bus" links to test sysfs tree update RELEASE-NOTES udevd: don't daemonize before initialization log to console if syslog is not available udevd: disable OOM remove precompiled rules option export DEVNAME on "remove" only if we really got a node to remove fix typo in umask() Summary of changes from v70 to v071 ============================================ Greg Kroah-Hartman: Remove the udev.spec file as no one uses it anymore John Hull: edd_id: check that EDD id is unique Kay Sievers: ata_id: open volume O_NONBLOCK add "Persistent Device Naming" rules file for disks scsi_id: switch temporary node creation to /dev volume_id: set reiser instead of reiserfs for filesystem type update devfs rules header update Debian rules update Fedora rules update Debian rules remove no longer needed includes switch tools and volume_id from LGPL to GPLv2 add edd-*-part%n to the persistent.rules update Debian persistent rules clarify README udevd: fix initial timeout handling force event socket buffer size to 16MB udevd: move logging from err to info for non-hotplug uevent fix selinux compilation libsysfs: accept sysmlinks to directories instead of real directories Marco d'Itri: run_directory: fix typo in "make install" Summary of changes from v069 to v070 ============================================ Amir Shalem: udevd: fix udevd read() calls to leave room for null byte Edward Goggin: scsi_id: derive a UID for a SCSI-2 not compliant with the page 83 Greg Kroah-Hartman: fix nbd error messages with a gentoo rule hack fix scsi_id rule in gentoo config file Jürg Billeter: EXTRAS/Makefile: fix install targets to match main Makefile Kay Sievers: volume_id: fix error handling with failing read() EXTRAS: cleanup and sync all Makefiles add install test to 'make buildtest' update RELEASE-NOTES Olivier Blin: fix a debug text typo in udev_rules.c Summary of changes from v068 to v069 ============================================ Amir Shalem: fix typo in firmware_helper Duncan Sands: firmware_helper: fix write count Kay Sievers: *_id: fix zero length in set_str() add program name to logged error fix exit code of udevinitsend and udevmonitor udevd: keep the right order for messages without SEQNUM volume_id: don't probe for mac_partition_maps udevmonitor: cleanup on exit path_id: remove SUSE specific PATH update SUSE rules add pci_express to bus list update SUSE rules store ENV{key}="value" exported keys in the database fix lookup for name in the udevdb, it should return the devpath prepare for new HAL udevdb dump print persistent data with "udevinfo -q all" change parameter order of udev_db_search_name() add and use name_list_cleanup() for cleaning up the string lists don't store devpath in udevdb, we don't need it add uft8 validation for safe volume label exporting start to enforce plain ascii or valid utf8 use WRITE_END/READ_END for the pipe index remove not needed sig_flag for state of signal_pipe don't reenter get_udevd_msg() if message is ignored rename ...trailing_char() to ...trailing_chars() vol_id: ID_LABEL_SAFE will no longer contain fancy characters udevd: move some logging to "info" and "err" remove special TIMEOUT handling from incoming queue udev_test.pl: we replace untrusted chars with '_' check the udevdb before assigning a new %e update RELEASE-NOTES udevinfo: add database export write man page masters in DocBook XML udevinfo: rename dump() to export() test the automatic man page rebuild and checkin Makefile: remove all the duplicated rules all man pages rewritten to use DocBook XML add missing udevsend man page also forgot udevmonitor.8 udevinfo: restore -d option scsi_id: rename SYSFS to LIBSYSFS add edd_id tool to match BIOS EDD disk information move and update libsysfs.txt klibc: update to version 1.1.1 delete cdromsymlinks* - obsoleted by cdrom_id and IMPORT rules delete docs/persistent_naming - obsoleted by persistent disk names delete old Fedora html page add "totally outdated" header to docs/overview :) update SUSE rules fix useless but funny name_cdrom.pl script to work again update TODO Makefile: fix prerequisits for $(PROGRAMS) Makefile: cleanup install targets remove chassis_id program fic gcov use and move it into the Makefile FAQ: update things that have changed Thierry Vignaud: switch to '==' in raid-devfs.sh Summary of changes from v067 to v068 ============================================ Greg Kroah-Hartman: add EXTRAS documentation to the README file. Always open the cdrom drive in non-blocking mode in cdrom_id cdrom_id: change err() to info() to help with debugging problems Kay Sievers: cleanup some debug output and move to info level + unify select() loops move udevmonitor to /usr/sbin ENV{TEST}=="1" compares and ENV{TEST}="1" sets the environment vol_id: fix sloppy error handling fix typo in cdrom_id syslog bring std(in|out|err) fd's in a sane state fix printed udevmonitor header Summary of changes from v066 to v067 ============================================ Greg Kroah-Hartman: added the cdrom.h #defines directly into the cdrom_id.c file Kay Sievers: update SUSE rules fix make install, as we don't provide a default rule set anymore fix more compiler warnings ... fix udevstart event ordering, we want /dev/null very early don't fail too bad, if /dev/null does not exist Summary of changes from v065 to v066 ============================================ Greg Kroah-Hartman: update gentoo rule file. Created cdrom_id program to make it easier to determine cdrom types added cdrom_id to the build check updated gentoo rule file to handle removable ide devices. changed cdrom_id exports to be easier to understand and consistant with other _id programs. fix klibc build issue in cdrom_id.c Change the gentoo rules to use cdrom_id instead of cdsymlink.sh changed location of gentoo helper apps to be /sbin instead of in scripts dir tweak the gentoo rules some more. Kay Sievers: add NETLINK define for the lazy distros read sysfs attribute also from parent class device switch some strlcpy's to memcpy allow clean shutdown of udevd add flag for reading of precompiled rules update distro rules files add SUSE rules update SUSE rules add firmware_helper to load firmware more distro rules updates update README remove example rules and put the dev.d stuff into the run_directory folder trivial text cleanups update SUSE rules split udev_util in several files update SUSE rules allow logging of all output from executed tools add Usage: to udevmonitor and udevcontrol move some logging to the info level Thierry Vignaud: fix udevinfo output Summary of changes from v064 to v065 ============================================ Greg Kroah-Hartman: Added persistent name rules for block devices to gentoo rule file. Added horrible (but fun) path_id script to extras. Update gentoo rules file. Kay Sievers: update release notes for next version add udevmonitor, to debug netlink+udev events at the same time allow RUN to send the environment to a local socket fix GGC signed pointer warnings and switch volume_id to stdint Summary of changes from v063 to v064 ============================================ Andre Masella: volume_id: add OCFS (Oracle Cluster File System) support Hannes Reinecke: usb_id: fix typo add ID_BUS to *_id programs create_floppy_devices: add tool to create floppy nodes based on sysfs info Kay Sievers: move code to its own files make SYSFS{} usable for all devices add padding to rules structure allow rules to have labels and skip to next label thread unknown ENV{key} match as empty value Summary of changes from v062 to v063 ============================================ Anton Farygin: fix typo in GROUP value application Greg Kroah-Hartman: add 'make tests' as I'm always typing that one wrong... Really commit the udev_run_devd changes... Fixed udev_run_devd to run the /etc/dev.d/DEVNAME/ files too fix position of raw rules in gentoo config file Hannes Reinecke: dasd_id: add s390 disk-label prober fix usb_id and let scsi_id ignore "illegal request" Kay Sievers: volume_id: remove s390 dasd handling, it is dasd_id now trivial fixes for *_id programs IMPORT: add {parent} to import the persistent data of the parent device allow multiple values to be matched with KEY=="value1|value2" udevd: set incoming socket buffer SO_RCVBUF to maximum remember mapped rules state ata_id: check for empty serial number compile dasd only on s390 Ville Skyttä: correct default mode documentation in udev Summary of changes from v061 to v062 ============================================ Kay Sievers: fix symlink values separated by multiple spaces update RELEASE-NOTES fix typo in group assignment fix default-name handling and NAME="" rules add WAIT_FOR_SYSFS key to loop until a file in sysfs arrives fix unquoted strings in udevinitsend Summary of changes from v060 to v061 ============================================ Greg Kroah-Hartman: Sync up the Debian rules files fix cdrom symlink problem in gentoo rules Fix ChangeLog titles Kay Sievers: update RELEASE-NOTES we want to provide OPTFLAGS rename ALARM_TIMEOUT to UDEV_ALARM_TIMEOUT udevd: optimize env-key parsing don't resolve OWNER, GROUP on precompile if string contains %, $ set default device node to /dev create udevdb files only if somehting interesting happened pack parsed rules list replace useless defines by inline text move rule matches to function add usb_id program to generate usb-storage device identifiers add IEEE1394 rules to the gentoo rule file fake also kernel-name if we renamed a netif allow OPTIONS to be recognized for /sys/modules /sys/devices events switch gentoo rules to new operators Summary of changes from v059 to v060 ============================================ Greg Kroah-Hartman: Fix the gentoo udev rules to allow the box to boot properly Gustavo Zacarias: Udev doesn't properly build with $CROSS Kay Sievers: Keep udevstart from skipping devices without a 'dev' file Marco d'Itri: #define NETLINK_KOBJECT_UEVENT Summary of changes from v058 to v059 ============================================ Greg Kroah-Hartman: Update the gentoo rule file Fix udevinfo for empty sysfs directories Fix makefile to allow 'make release' to work with git Hannes Reinecke: udev: fix netdev RUN handling udevcontrol: fix exit code Kay Sievers: prepare RELEASE-NOTES add ID_TYPE to the id probers add -x to scsi_id to export the queried values in env format store the imported device information in the udevdb rename udev_volume_id to vol_id and add --export option add ata_id to read serial numbers from ATA drives IMPORT allow to import program returned keys into the env unify execute_command() and execute_program() IMPORT= allow to import a shell-var style config-file allow rules to be compiled to one binary file fix the fix and change the file to wait for to the "bus" link fix udevstart and let all events trvel trough udev prepare for module loading rules and add MODALIAS key remove device node, when type block/char has changed Makefile: remove dev.d/ hotplug.d/ from install target udevcontrol: add max_childs command udevd: control log-priority of the running daemon with udevcontrol udeveventrecorder: add small program that writes an event to disk klibc: add missing files udevinitsend: handle replay messages correctly udev man page: add operators udevd: allow starting of udevd with stopped exec-queue klibc: version 1.0.14 udev: handle all events - not only class and block devices volume_id: use udev-provided log-level udev: clear lists if a new value is assigned udev: move dev.d/ handling to external helper udev: allow final assignments := udevd: improve timeout handling Makefile: fix DESTDIR udevd: add initsend udevd: add udevcontrol udevd: listen for netlink events Stefan Schweizer: Dialout group fix for capi devices in the gentoo rules file Summary of changes from v057 to v058 ============================================ Daniel Drake: o Writing udev rules docs update Darren Salt: o update cdsymlinks to latest version Greg Kroah-Hartman: o remove detach_state files from the sysfs test tree o Update permissions on test scripts so they will run properly now o hopefully fix up the symlinks in the test directory o Removed klibc/klibc.spec as it is autogenerated o Added symlinks thanks to Kay's script and git hacking o add Red Hat/Fedora html documenation o Update Red Hat default udev rules Kay Sievers: o selinux: fix handling during creation of symlinks o Fedora udev.rules update o libsysfs: version 2.0 o klibc: version 1.0.7 Masanao Igarashi: o Fix libsysfs issue with relying on the detach_state file to be Summary of changes from v056 to v057 ============================================ : o fix stupid all_partitions bug Kay Sievers: o add test for make -j4 to build-check o klibc: version 1.0.6 o update Debian rules o apply default permissions only for devices that will need it o adapt RELEASE-NOTES o udev_volume_id: fix endianess macros o udev-test.pl: add test for DEVNAME export to RUN environment o update the man page to reflect the recent changes o export DEVNAME to RUN-key executed programs o fix make -j4 and the local klibc-install o update RELEASE-NOTES o add RUN key to be able to run rule based notification o fix udevtest to print the error if logging is disabled o move execute_program to utils + add action to init_device o correct correction for error path for PROGRAM execution o correct error path for PROGRAM execution o klibc: version 1.0.5 o check for strlen()==0 before accessing strlen()-1 o allow to match against empty key values o read %s{}-sysfs values at any device in the chain o udev_rules.c: don't change sysfs_device while walking up the device chain o klibc: strlcpy/strlcat - don't alter destination if size == 0 o fix klibc's broken strlcpy/strlcat o udevinfo: print SYSFS attribute the same way we match it o remove untrusted chars read from sysfs-values or returned by PROGRAM o udevinfo: print errors to stderr instead of stdout o klibc: version 1.0.4 o support log-priority levels in udev.conf o test-suite: remove UDEV_TEST, it's not needed anymore o libsysfs: remove trailing slash on SYSFS_PATH override Summary of changes from v055 to v056 ============================================ : o fix header paths in udev_libc_wrapper.c Kay Sievers: o udev-test.pl: use more common user/group names o klibc: remove SCCS directories from the temporary klibc install o udev-test.pl: add a test where the group cannot be found in /etc/passwd o udev-test.pl: add check for textual uid/gid o fix bad typo that prevents the GROUP to be applied o udevd: don't delay events with TIMEOUT in the environment o klibc: use klcc wrapper instead of our own Makefile o change call_foreach_file to return a list Summary of changes from v054 to v055 ============================================ : o This patch causes the remove handler to check that each symlink actually points to the correct devnode and skip it if it does not. : o udev selinux fix : o The following patch fixes some warnings when compiling volume_id from udev with the -Wall compiler flag. Define _GNU_SOURCE for strnlen() and correct the path to logging.h o The following patch fixes a warning when compiling chassis_id from udev with the -Wall compiler flag. There are too much conversions in the format string of sscanf(). One %d can be dropped. Greg Kroah-Hartman: o fix raid rules o added frugalware udev ruleset o merge selinux and Kay's symlink fixes together Hannes Reinecke: o volume_id: Fix label/uuid reading for reiserfs Kay Sievers: o add udevstart to the RELEASE-NOTES o volume_id: version 43 o clarify the shortcomings of %e o correct rule match for devices without a physical device o remove unneeded code, libsysfs does this for us o add final release note o add ENV{} key to match agains environment variables o simplify sysfs_pair handling o add a test and simplify debug statement o support =, ==, !=, += for the key match and assignment o add OPTION="last_rule" to skip any later rule o rename namedev_dev to udev_rule o correct enum device_type o remove udevstart on make clean o volume_id: version 42 o volume_id: version 41 o remove unneeded include o The path to dlist.h is not correct o udevinfo -d: use '=' as separator, cause ':' may be a part of the devpath o klibc: version 1.0.3 o add RELEASE-NOTES file o test suite: move "driver" link to physical device o remove PLACE key match o don't lookup "root" in the userdb o fix ia64 compile o fix segfaulting udev while DRIVER matching o cleanup list.h o klibc: version 0.214 o rename device_list->list to device_list->node o replace strncpy()/strncat() by strlcpy()/strlcat() o split udev and udevstart o udev_volume_id: version 39 o rename LOG to USE_LOG in all places o remove Makefile magic for klibc integration o klibc_fixups: remove no longer needed stuff o udev_volume_id: volume_id v38 o use numeric owner/group as default values to avoid parsing userdb o fix up segfaulting binaries with new klibc o udevinfo -d: speed-up device dump o klibc: version 0.211 o klibc_fixups: remove unneeded stuff o replace weird defines by real code o udev-test.pl: remove useless tests o allow unlimitied count of symlinks o unmap db-file after use o remove typedef for call_foreach_file() handler function o correct udev_init_device o rename attributes to options o kill stupid gcc4 warning o trivial clenaup of namedev code o klibc: check for gcc4 o klibc: update v0.205 Thierry Vignaud: o gentoo rule update for raid devices Summary of changes from v053 to v054 ============================================ : o udev_volume_id: add Reiser4 support Kay Sievers: o namedev: skip backslashes only if followed by newline o wait_for_sysfs: add joydev o udevinfo: print devpath -> node relationship for all devices o trivial rename of some variables o klibc v0.199 o big libsysfs diet (pre 2.0 version) o udev_volume_id: volume_id v35 o add "serio" to bus list o determine device type in udev_init_device() o move kernel name/number evaluation into udev_init_device() o detect NAME="" as ignore_device rule o trivial namedev cleanup o cleanup db functions o clean up match_place() o switch device type to enum o switch major/minor to dev_t o remove the device node only if the major/minor number matches o libsysfs: work around a klibc bug o introduce OPTIONS=ignore_device, ignore_remove, all_partitions" key o namedev: execute PROGRAM only once and not possibly for every physical device Patrick Mansfield: o update scsi_id to work with libsysfs changes Summary of changes from v052 to v053 ============================================ Greg Kroah-Hartman: o fix gentoo fb permission issue o allow simple-build-check.sh to go faster if MAKEOPTS is set o make the release tarballs have writable files in them o remove gentoo permission file as it's not valid anymore Kay Sievers: o fix special file mode mask for temporary device node o udevstart: simplify "dev" file searching o udev_volume_id: remove temporary node creation and parent handling o add %P modifier to query the node name of the parent device o udev_volume_id: remove __packed__ from dasd structure as it does not work o create /block/*/range count of partitons for all_partitions Patrick Mansfield: o scsi_id changes for use with udev %N and %p Summary of changes from v051 to v052 ============================================ : o debian: update rules files o raid-devfs.sh: devfs names for hardware RAID controllers o scsi_id: when udevstart is started, /tmp is not writeable o cdsymlinks.sh: trivial fix, the variable is initialized to '', not 0 : o gentoo/udev.rules: add default permissions for sound devices Greg Kroah-Hartman: o fix example comment in ide-devfs.sh o Add infiniband to gentoo rules o Another gentoo fix, adding dvb support o Fix gentoo bug #76056 (fb device group permissions.) o Fix gentoo bug #81102, device nodes for the pktcdvd device Kay Sievers: o provide temporary device node for callouts to access the device o udev_volume_id: fix dasd disklabel reading with -l option o udev_volume_id: volume_id version 034 o udev_volume_id: rename probe_ibm into probe_dasd o udev_volume_id: volume_id version 032 o Makefile: add some more warnings and prepare for clean gcc4 compile o Makefile: cleanup conditional config option sections o fix -Wsign-compare warnings o chassis_id: clean compilation and fix bad function parameter passing o simple_build_check: make it possible to pass KERNEL_DIR o selinux: cleanup udev integration Michael Buesch: o trivial: remove _all_ trailing slashes with no_trailing_slash() o trivial: fix signedness o namdev: allow symlink-only rules to specify node permissions o udevd: fix valgrind warning Summary of changes from v050 to v051 ============================================ : o This fixes a silly mistake in how udevinfo prints the major and minor numbers (right now it prints the minor next to "MAJOR" and the major next to "MINOR" ;) : o I tried to compile udev 050plus with the GCC 4.0 snapshot 200412119 and got two errors about possibly uninitialized structs, so I fixed this. Christian Bornträger: o udev_volume_id: fix -d option Greg Kroah-Hartman: o gentoo fb permission fix o fix gcc 2.96 issue in libsysfs o remove the lfs startup script on request of the author o clean up the aoe char device rules, and delete the block one as it's not needed o add aoe block and char device rules to the gentoo rule file o fix udev_volume_id build error Hannes Reinecke: o rearrange link order in Makefile Kay Sievers: o udev_volume_id: new version of volume_id o klibc: update to version 0.198 o udev_volume_id: fix FAT label reading o klibc: update to version 0.196 o udevd: throttle the forking of processes o udevd: add possible initialization of expected_seqnum o udevd: it's obviously not the brightest idea to exit a device node manager if it doesn't find /dev/null o udevd: separate socket handling to prepare for other event sources o udevd: support -d switch to become a daemon o udev_volume_id: version 27 o udevd: split up message receiving an queueing o remove useless warning if udev.conf contains keys not read by udev itself o improve event sequence serialization o remove udevsend syslog noise on udevd startup o limit the initial timeout of the udevd event handling o correct detection of hotplug.d/ udevsend loop o correct log statement o remove default_* permissions from udev.conf file o update Fedora config files and add some more tests o allow permissions only rules o add SUBSYSTEM rule to catch all block devices and apply the disk permissions o update Fedora config files o handle renamed network interfaces properly if we manage hotplug.d/ o allow multiline rules by backslash at the end of the line o add OnStream tape drive rules o simplify rules file by setting default mode to 0660 o simplify permission application o I broke the extras/ again. Add simple build test script now o Merge vrfy.org:/home/kay/src/udev into vrfy.org:/home/kay/src/udev.kay o initial merge of fedora udev.permissions into udev.rules o remove permissions file mentioning from the udev man page o fix some typos in gentoo's udev.rules introduced by the merge Michael Buesch: o The attached patch fixes the code path if namedev_name_device() fails Summary of changes from v049 to v050 ============================================ : o selinux patch : o I made some more changes to the manpage of udev including Kay Sievers: o update libsysfs to CVS version and fix segfaulting attribute reading o klibc supports LOG_PID now, so remove our own implementation o avoid building klibc test programs and pass SUBDIRS= to klibc clean Summary of changes from v048 to v049 ============================================ Greg Kroah-Hartman: o fix 'make clean' error in klibc Kay Sievers: o update klibc to 0.194 o export DEVNAME regardless of the state of udev_dev_d o add class specific files for class/spi_transport and class/spi_host o udevd-test.pl: remove wrong date calculation o check earlier if we should run as udevstart o remove double initialization o include missing header to udevtest.c o add -V option to udev to print the version number o prevent udev node creatinon for "class" registration o udevd: serialization of the event sequence of a chain of devices o add a class/fc_host file to the list of what to wait for o udev_volume_id: links sysfs.a instead of all objects Martin Schlemmer: o remove leftover from udevinfo's -d option Summary of changes from v047 to v048 ============================================ Greg Kroah-Hartman: o fix udev_volume_id so it will now build properly o fix scsi_id build errors due to changes in the main udev makefile Summary of changes from v046 to v047 ============================================ : o Various typos and other litte errors in udev.8.in : o DEVNAME on device removal : o Allow GROUP to have modifiers in it Greg Kroah-Hartman: o add more debian rules files o move distro specific config files into their own directories o update debian rules files o added asterix rules to the gentoo file o use udevstart for udev.init.* files o delete a bunch of files no longer needed o fix gentoo scsi cdrom rule o Fix the multithreaded build again o merge o comment out ability to run udev-test.pl with valgrind o fix spurious valgrind warning in udev o fix udevinfo '-q path' option as it was not working o merge o fix parallel build error Kay Sievers: o update Fedora dev.d/ example and remove unused conf.d/ directory o don't install distribution specific init script on "make install" o restore OWNER/GROUP assignment in rule coming from RESULT o make gcov compile scripts working with recent gcc o fix udev-test/udev-test.pl to work with again o add net/atml and class/ppdev to the wait_for_sysfs exception list o add net/nlv* devices to the exception list o add "pcmcia" and "fc_transport" to the wait_for_sysfs lists o remove unused timestamp field o simplify permission handling o handle /etc/hotplug.d/ only if the event comes from udevd o trivial cleanups and change some comments o remove unused variables o udevsend/udevd handle events without a subsystem o use blacklist on device "remove" and remove dev.d/ call code duplication o update the man pages and correct Usage: hints o don't call the hotplug scripts with a test run o don't call dev.d/ scripts twice, if directory = subsystem o remove archive file if we changed something o link archive insted of objects o rename udev_lib to udev_utils and dev_d to udev_multiplex o handle whole hotplug event with udevd/udev o integrate wait_for_sysfs in udev o make the searched multiplex directories conditionally o add MANAGED_EVENT to the forked udev environment o export DEVNAME on remove event o export udev_log flag to the environment o remove my test code o add support for /devices-devices without any file to wait for o Patch from Alex Riesen o add a bunch of busses to the list of what to wait for o close connection to syslog in forked udevd child o udevd exit path cleanup o fix network device naming bug Summary of changes from v045 to v046 ============================================ Greg Kroah-Hartman: o make spotless for releases Kay Sievers: o Don't try to print major/minor for devices without a dev file o remove get_device_type and merge that into udev_set_values() o prevent udevd crash if DEVPATH is not set o add ippp and bcrypt to the exception lists of wait_for_sysfs o let klibc add the trailing newline to syslog conditionally o disable logging for udevstart o add NAME{ignore_remove} attribute o remove historical SYSFS_attr="value" format o don't wait for sysfs if the kernel(2.6.10-rc2) tells us what not to expect o change key names in udevinfo sysfs walk to match the kernel o support DRIVER as a rule key o support SUBSYSTEM as a rule key o rename udevdb* to udev_db* o Make dev.d/ handling a separate processing stage o make the udev object available to more processing stages o remove udev_lib dependency from udevsend, which makes it smaller o add ACTION to udev object to expose it to the whole process o make udevinfo's -r option also workimg for symlink queries o let udev act as udevstart if argv[1] == "udevstart" o improve udevinfo sysfs info walk o add sysfs info walk to udevinfo o pass the whole event environment to udevd o replace tdb database by simple lockless file database Summary of changes from v044 to v045 ============================================ Martin Schlemmer: o Some updates for Gentoo's udev rules Summary of changes from v043 to v044 ============================================ Greg Kroah-Hartman: o add cdsymlinks.sh support to gentoo rules file o fix gentoo legacy tty rule o remove 'sudo' usage from the Makefile o make udev-test.pl test for root permissions before running Kay Sievers: o reduce syslog noise of udevsend if multiple instances try to start udevd o add i2c-dev to the list of devices without a bus Summary of changes from v042 to v043 ============================================ Greg Kroah-Hartman: o add test target to makefile o add dumb script to show all sysfs devices in the system Kay Sievers: o Shut up wait_for_sysfs class/net failure messages, as it's not possible to get that right for all net devices. Kernels later than 2.6.10-rc1 will handle that by carrying the neccessary information in the hotplug event. o wait() for specific pid to return from fork() o Don't use any syslog() in signal handler, cause it may deadlock o Add support for highpoint ataraid to volume_id to suppress label reading on raid set members. o Add a bunch of devices without "device" symlinks o Exit, if udevtest cannot open the device (segfault) o Patches from Harald Hoyer o Apply the default permissions even if we found a entry in the permissions file. Correct one test, as the default is applied correctly now and the mode will no longer be 0000. o add test for format chars in multiple symlinks to replace o Add net/vmnet and class/zaptel to the list of devices without physical device Summary of changes from v040 to v042 ============================================ Greg Kroah-Hartman: o add inotify to the rules for gentoo Kay Sievers: o skip waiting for device if we get a bad event for class creation and not for a device underneath it o add net/pan and net/bnep handling o switch wait for bus_file to stat() instead of open() add net/tun device handling add ieee1394 device handling o Remove the last klibc specific line from the main udev code Move _KLIBC_HAS_ARCH_SIG_ATOMIC_T to the fixup file which is automatically included by the Makefile is we build with klibc o ignore *.rej files from failed patches o update to libsysfs 1.2.0 and add some stuff klib_fixup Now we have only the sysfs.h file different from the upstream version to map our dbg() macro. o improve klibc fixup integration o cleanup udevd/udevstart o expose sysfs functions for sharing it Summary of changes from v039 to v040 ============================================ : o wait_for_sysfs update for dm devices Greg Kroah-Hartman: o sparse cleanups on the tree o fix stupid cut-and-paste error for msr devices on gentoo boxes o add *~ to bk ignore list o delete udevruler.c as per Kay's request o fix up the wait_for_sysfs_test script a bit Kay Sievers: o fix debug in volume id / fix clashing global var name o volume_id fix o $local user o cleanup netif handling and netif-dev.d/ events o big cleanup of internal udev api o don't wait for dummy devices o close the syslog o Fix ppp net devices in wait_for_sysfs o Fix wait_for_sysfs messages (more debugging info) Summary of changes from v038 to v039 ============================================ Greg Kroah-Hartman: o Hopefully fix the vcs issue in wait_for_sysfs o take out & from wait_for_sysfs_test that I previously missed o add very nice cdsymlinks scripts o add some helper scripts for dvb and input devices o add debian config files o let the extras/ programs build "pretty" also o tweak the ccdv program to handle files in subdirectories being built o crap, I messed up the 'sed' instances pretty badly, this fixes the config and man page mess o fix broken 'make -j5' functionality Kay Sievers: o swich attribute open() to simple stat() o wait_for_sysfs update for /class/firmware and /class/net/irda devices o fix unusual sysfs behavior for pcmcia_socket o remove sleeps from udev as it is external now o delete udevruler? o Makefile fix Patrick Mansfield: o update udev to scsi_id 0.7 o pass SYSFS setting down for extras builds o move assignments past local variables Summary of changes from v037 to v038 ============================================ : o Re: Problem parsing %s in udev rules Greg Kroah-Hartman: o fix up error in building extras and libsysfs Summary of changes from v036 to v037 ============================================ : o small udev patch Greg Kroah-Hartman: o fix compilation warning in tdb log message o Fix build error with klibc due to recent changes o merge o add wait_for_sysfs test script to the tarball to help people debug their boxes o add ipsec to wait_for_sysfs ignore list o added ccdv to bk ignore list o a few more Makefile tweaks for the quiet feature o Make the build silent, thanks to a helper program from ncftp o rename files to have '_' instead of '-' in them o change max time to wait in wait_for_sysfs to 10 seconds to hopefully handle some slow machines o add support for class/raw/ to wait_for_sysfs o fix up Makefile for wait_for_sysfs udev_version.h dependancy o remove the debian specific file, as they don't want to share with the rest of the world :( Kay Sievers: o prevent deadlocks on an corrupt udev database o wait_for_sysfs_update Michael Buesch: o fix asmlinkage o fix incompatible pointer type warning Summary of changes from v035 to v036 ============================================ Greg Kroah-Hartman: o add the error number to the error message in wait_for_sysfs to help out in debugging problems Summary of changes from v034 to v035 ============================================ Greg Kroah-Hartman: o added ieee1394 support to wait_for_sysfs o update wait_for_sysfs with a bunch more devices thanks to user reports Summary of changes from v033 to v034 ============================================ Kay Sievers: o wait_for_sysfs bluetooth class update Greg Kroah-Hartman: o add comment in wait_for_sysfs to explain the structure better o Revert previous dev_d.c change, it's not what is causing HAL problems o hm, somethings odd with DEVPATH, see if this fixes it o 33_bk mark for the makefile o wait_for_sysfs: clean up the logic for the list of devices that we do not expect device symlinks for o get rid of annoying extra lines in the syslog for some libsysfs debug messages o added support for i2c devices in wait_for_sysfs.c o add support for i2c-adapter devices to wait_for_sysfs.c Summary of changes from v032 to v033 ============================================ : o udev close on exec o some cleanups and security fixes o some cleanups and security fixes o selinux for udev o cleanup PATCH for extras/chassis_id/Makefile : o respect prefix= setting in built udev.conf (updated) Greg Kroah-Hartman: o add support for usb interfaces to wait_for_sysfs to keep it quiet o enable native tdb spinlocks on i386 platforms o delete extras/multipath-tools as per the author's request o be paranoid in dev_d.c o add USE_SELINUX to README documentation so people have a chance to see what is going on o update the selinux.h file to start to look sane o update bk ignore list for the wait_for_sysfs binary o kdetv wants to see device nodes in /dev o update comments in scsi-devfs.sh o fix up Makefiles to get the klibc build working properly o update bk ignore list for new klibc generated files o oops forgot to add the new klibc/include directory o update klibc to version 0.181 Kay Sievers: o fix problems with dev.d and udevstart o wait_for_sysfs debug cleanup o fix problems using scsi_id with udevstart o update volume_id o finally solve the bad sysfs-timing for all of us o volume-id build fix and update o switch udev's seqnum to u64 o add enum tests o fix udev segfaults with bad permissions file Patrick Mansfield: o update udev to include scsi_id 0.6 Summary of changes from v031 to v032 ============================================ : o udev parse bug Kay Sievers: o handle only block and class devices o fix udevstart badly broken in udev 031 Summary of changes from v030 to v031 ============================================ : o udev - read long lines from config files overflow fix : o Update the FAQ with info about hardlink security : o compatibility symlinks for udev David Weinehall: o Minor POSIX-fixes for udev Greg Kroah-Hartman: o add symlink for video rule o add a "first" list to udevstart and make it contain the class/mem/ devices o fix compiler warning in udevtest.c o Fix old-style pty breakage in rules file for tty device o add rules for i386 cpu devices o add permission for legotower usb devices Kay Sievers: o Fix naming ethernet devices in udevstart o update udev_volume_id o let /sbin/hotplug execute udev earlier o pass SEQNUM trough udevd o fix manpages based on esr's spambot Martin Schlemmer: o add microcode rule to permissions.gentoo file Michael Buesch: o Try to provide a bit of security for hardlinks to /dev entries Olaf Hering: o udevsend depends on udev_lib.o Tom Rini: o fix UDEV_NO_SLEEP o clean up start_udev a bit o Make udev/udevstart be one binary o Add 'asmlinkage' to udev-030 Summary of changes from v029 to v030 ============================================ Greg Kroah-Hartman: o fix stupid off-by-one bug that caused udevstart to die on x86-64 boxes Summary of changes from v028 to v029 ============================================ Greg Kroah-Hartman: o add permission rule for jogdial device o fix dumb bug I added to udevstart o make a "last list" of devices for udevstart to operate on last o fix permission problem with input event and ts nodes for gentoo o change default perms of misc/rtc to be readable by anyone Olaf Hering: o allow NAME_SIZE > SYSFS_PATH_MAX Summary of changes from v027 to v028 ============================================ : o Patch for chassis_id exras module Daniel Drake: o Writing udev rules doc update Greg Kroah-Hartman: o clean up block whitelist search logic a bit o reverse order of scanning of udevstart to look at class before block Kay Sievers: o update udev_volume_id Leann Ogasawara: o udevstart performance increase Patrick Mansfield: o update udev scsi_id to scsi_id 0.5 Summary of changes from v026 to v027 ============================================ : o fix handle leak in udev_lib.c Greg Kroah-Hartman: o tweak the gentoo default permission rules as they are wrong for tty and misc devices Summary of changes from v025 to v026 ============================================ Arnd Bergmann: o udev rpm fix Greg Kroah-Hartman: o add test for ! in partition name o 025_bk mark o Update to version 117 of klibc (from version 108) o add volume_id ignore rule for bk o add volume_id support to the udev.spec file o remove dbus and selinux stuff from the udev.spec file o delete udev_selinux as it doesn't work properly and is the wrong way to do it o Deleted the udev_dbus extra as it didn't really work properly and HAL has a real solution now o add udev.permissions.slackware file o udevstart: close open directories Kay Sievers: o fix udevd zombies o catchup with recent klibc o Re: udevsend fallback o udev_volume_id update o udev callout for reading filesystem labels o udev callout for reading filesystem labels o udev default config layout changes Leann Ogasawara: o evaluate getenv() return value for udev_config.c Summary of changes from v024 to v025 ============================================ : o devfs.sh-ide-floppy : o DEVNODE -> DEVNAME transition fixes Daniel Drake: o Update writing udev rules docs Greg Kroah-Hartman: o make dev.d call each directory in the directory chain of the device name, instead of just the whole name o add devd_test script o add more permissions based on SuSE's recommendations o added rules for tun and raw devices o add udev conf.d file o Switch the default config to point to a directory for the rules and permission files o update the Red Hat .dev files to work on other distros o add dbus.dev, pam_console.dev and selinux.dev files for /etc/dev.d/default/ usage o add hints for red hat users from Leann Ogasawara o add scripts to run gcov for udev from Leann Ogasawara o change permissions on udevd test scripts o Fix build process for users who have LC_ALL set to a non-english language o Added expanded tests to the test framework from Leann Ogasawara o added execelent "writing udev rules" document from Daniel Drake o added rule to put USB printers in their proper places o added rules for CAPI devices o added a dev.d alsa script to help people out Kay Sievers: o fix test regressions o udev_selinux changes o udevd test script o udev_dbus changes o fix devpath for netdev Leann Ogasawara: o gcov for udev Summary of changes from v023 to v024 ============================================ : o Add README for chassis_id o Add chassis_id program to extras directory : o udevd race conditions and performance, assorted cleanups : o fix SEGV in libsysfs/dlist.c : o add OSDL documentation for persistent naming : o small ide-devfs.sh fix Greg Kroah-Hartman: o remove compiler warning from udevd.c o only generate udev.8 on the fly, not all other man pages o update bk ignore list some more o update bk ignore list o switch to generate the man pages during the normal build, not during the install o convert udev.8.in to use @udevdir@ macro for make install o first step of making man pages dynamically generated o add install and uninstall the etc/dev.d/net/hotplug.dev file to the Makefile o tweak net_test a bit o fix some segfaults when running udevtest for network devices o make a net_test test script using udevtest o handle the subsytem if provided in udevtest o add hotplug.dev script to handle renamed network devices o add a bunch of network class devices to the test sysfs tree o add udevruler to the bk ignore list o update RFC-dev.d docs due to DEVNODE to DEVNAME change o clean up chassis_id coding style o clean up the OSDL document formatting a bit o add netlink rules to devfs and gentoo rules files o added USB device rules to rules files o clean up the gentoo rules file a bit more, adding dri rules o fix up udev.rules to handle oss rules better o 023_bk mark o fix udev.spec file for where udevtest should be placed Kay Sievers: o tweak node unlink handling o switch udevd's msg_dump() to #define o handle netdev in udevruler o man page cleanup o put config info in db for netdev o increase udevd event timeout o udevstart fix o put netdev handling and dev.d/ in manpages o DEVPATH for netdev o netdev - udevdb+dev.d changes o udevd race conditions and performance, assorted cleanups - take 2 o udevinfo patch o dev_d.c file sorting and cleanup o apply all_partitions rule to main block device only Summary of changes from v022 to v023 ============================================ Kay Sievers: o hmm, handle net devices with udev? o correct apply_format() for symlink only rules o don't init namedev on remove o first stupid try for a rule compose gui o replace fgets() with mmap() and introduce udev_lib.[hc] o make udevtest a real program :) Daniel E. F. Stekloff: o udevinfo patch Greg Kroah-Hartman: o create the /etc/dev.d/ directories in 'make install' o actually have udev run files ending in .dev in the /etc/dev.d/ directory as documented o added RFC-dev.d document detailing how /etc/dev.d/ works o fixed up udev.spec to handle selinux stuff properly now o remove USE_DBUS and USE_SELINUX flags from the README as they are no longer present o remove selinux stuff from the main Makefile o move udev_selinux into extras/selinux o fix dbus build in the udev.spec file o remove dbus stuff from main Makefile o move udev_dbus to extras/dbus o udev_dbus can now compile properly, but linnking is another story o remove udev_dbus.h from Makefile o first cut at standalone udev_selinux program o remove selinux support from udev core as it's no longer needed o first cut at standalone udev_dbus program o add get_devnode() helper to udev_lib for udev_dbus program o remove dbus code from core udev code as it's no longer needed to be there o add /etc/dev.d/ support for udev add and remove events o fix build error in namedev.c caused by previous patch o 022_bk tag o fix 'make spotless' to really do that in klibc o add a question/answer about automounting usb devices to the FAQ o mark scsi-devfs.sh as executable o Increase the name size as requested by Richard Gooch o fix udevtest to build properly after the big udev_lib change Olaf Hering: o uninitialized variable for mknod and friend Richard Gooch: o SCSI logical and physical names for udev Theodore Y. T'so: o Trivial man page typo fixes to udev Summary of changes from v021 to v022 ============================================ : o more Libsysfs updates o Libsysfs updates : o fix HOWTO-udev_for_dev for udevdir Kay Sievers: o udev-test.pl cleanup o add dev node test to udev-test.pl o add permission tests o "symlink only" test o callout part selector tweak o cleanup callout fork o allow to specify node permissions in the rule o man page beauty o put symlink only rules to the man page o rename strn*() macros to strmax o conditional remove of trailing sysfs whitespace o clarify udevinfo text o better fix for NAME="foo-%c{N}" gets a truncated name o overall trivial trivial cleanup o fix NAME="foo-%c{N}" gets a truncated name o cleanup mult field string handling : o fix a type in docs/libsysfs.txt o Added line to udev.permissions.redhat o Include more examples in the docs area for gentoo and redhat : o udevstart fixes Greg Kroah-Hartman: o add big major tests to udev-test.pl o add a test for a minor over 255 o udev-test.pl: print out major:minor and perm test "ok" if is ok o make perm and major:minor test errors be reported properly o remove extra ; in namedev_parse.c o Added multipath-tools 0.1.1 release o deleted current extras/multipath directory o 021_bk mark o fix the build for older versions of gcc Hanna V. Linder: o Small fix to remove extra "will" in man page Olaf Hering: o make spotless o udev* segfaults with new klibc Patrick Mansfield: o add tests for NAME="foo-%c{N}" Summary of changes from v020 to v021 ============================================ Kay Sievers: o install udevinfo in /usr/bin o blacklist pcmcia_socket Greg Kroah-Hartman: o fix udev.spec to find udevinfo now that it has moved to /usr/bin o Fix another problem with Makefile installing initscript o fix the Makefile to install the init script into the proper directory o make spec file turn off selinux support by default Summary of changes from v019 to v020 ============================================ : o multipath update Kay Sievers: o man page udevstart o cleanup udevstart o bugfix for local user o unlink bugfix o TODO update o clarify udevinfo device walk o udevinfo symlink reverse query o fix stroul endptr use o add $local user spport for permissions o udev - man page update o udev - fix debug info for multiple rule file config o udev - kill udevd on install o udev - activate formt length attribute o udev - safer sprintf() use : o no error on enoent o escape dashes in man pages o remove usage of expr in ide-devfs.sh : o automatically install correct initscript o update documetation for $local Andrey Borzenkov: o Add symlink only rules support Greg Kroah-Hartman: o update the TODO list as we already have a devfs config file o make start_udev use udevstart binary o install udevstart o Remove Debian permission files as the Debian maintainer doesn't seem to want to share :( o update the Gentoo rules files o Add Red Hat rules and permissions files o add udevstart to the ignore list o add udevstart program based on a old patch from Harald Hoyer o unlink the file before we try to create it o Merge greg@bucket:/home/greg/src/udev into kroah.com:/home/greg/src/udev Summary of changes from v018 to v019 ============================================ Kay Sievers: o TODO update o udev - correct relative symlink o udev - safer string handling - part four o udev - safer string handling - part three o udev - safer string handling - part two o udev - man page update o udev - safer string handling all over the place o manpage update o udev - allow all files in a directory as the config o udev - simple klibc textual uid/gid handling Andrey Borzenkov: o do not remove real .udev.tdb during RPM build Greg Kroah-Hartman: o add new TODO item about local user permissions o Add initial SELinux support for udev o fix build for very old versions of make o remove limit of the number of args passed to PROGRAM o force udev to include the internal version of libsysfs and never the external one o fix up libsysfs header file usage to fix bug reports from users that have sysfsutils installed already o remove udevtest on 'make clean' o remove udevd priority TODO item, as it's not needed at all Patrick Mansfield: o update udev scsi_id to scsi_id 0.4 Summary of changes from v017 to v018 ============================================ : o [PATCH] symlink dm-[0-9]* rule o update extras/multipath : o init.d debian patch Kay Sievers: o udev - TODO update o udev - add %s{filename} to man page o udev - udevd/udevsend man page o udev - switch callout part selector to {attribute} o udev - switch SYSFS_file to SYSFS{file} o udev - create all partitions of blockdevice o allow SYSFS{file} o Adding '%s' format specifier to NAME and SYMLINK Greg Kroah-Hartman: o added some scsi_id files to the bk ignore file o added scsi_id and some more documentation to the udev.spec file o update udev.rules.gentoo with new config file format o Update the Gentoo udev.rules and udev.permissions files o Create a udev.rules.examples file to hold odd udev.rules o add udevd priority issue to the TODO list o more HOWTO cleanups o add HOWTO detailing how to use udev to manage /dev o mv libsysfs/libsysfs.h to libsysfs/sysfs/libsysfs.h to make it easier to use o add start_udev init script o add support for UDEV_NO_SLEEP env variable so Gentoo people will be happy o start up udevd ourselves in the init script to give it some good priorities o update the red hat init script to handle nodes that are not present o add a "old style" SYSFS_attribute test to udev-test.pl o Have udevsend report more info in debug mode o Have udevd report it's version in debug mode o fix up bug created for udevtest in previous partition creation patch o update the udev.spec to add udevtest and make some more Red Hat suggested changes o add ability to install udevtest to Makefile o 017_bk mark o Add another test to udev-test.pl and fix a bug when only running 1 test o Fix bug where we did not use the "converted" kernel name if we had no rule Patrick Mansfield: o udev use new libsysfs header file location o udev add some ID tests Summary of changes from v016 to v017 ============================================ : o make logging a config option : o more udev-016/extras/multipath o more udev-016/extras/multipath o update extras/multipath Kay Sievers: o udev - keep private data out of the database? o better credential patch o udevd - client access authorization o compile udevd with klibc o udev - fix "ignore method" o udev - fix cdrom symlink rule o convert udevsend/udevd to DGRAM and single-threaded o udevd - kill the lockfile o udevd - fix socket path length o udevd - switch socket path to abstract namespace o udevd - allow to bypass sequence number o include used function Greg Kroah-Hartman: o add udev_log to the documentation o fix offsetof() define in klibc o add some .spec file changes from Red Hat o update the init.d udev script based on a patch from Red Hat o remove the .udev.tdb when installing or uninstalling to be safe o remove the database at startup o fix bug in permission handling o update klibc to version .107 o update the bitkeeper ignore file list o add udevtest program to build o fix problem where usb devices can be either the main device or the interface o more logging.h cleanups to be a bit more flexible o stop using mode_t as different libcs define it in different ways :( o remove some more KLIBC fixups that are no longer needed o let udev-test.pl run an individual test if you ask it to o Handle the '!' character that some block devices have o add a block device with a ! in the name, and a test for this o fix up 'make release' to use bk to build the export tree o fix log option code so that it actually works for all udev programs o finish syncing up with klibc o sync with latest version of klibc (0.107) o fix up Makefile dependancies for udev_version.h Patrick Mansfield: o udev add wild card compare for ID o udev kill extra bus_id compares in match_id Summary of changes from v015 to v016 ============================================ : o get_dev_number() in extras/ide-devfs.sh : o FAQ udev.rules.devfs Greg Kroah-Hartman: o add udevd and udevsend to the spec file o make /etc/hotplug.d/default/udev.hotplug symlink point to udevsend now o add KERNEL_DIR option so that the distros will be happy o make udevsend binary even smaller o udevsend now almost compiles with klibc, struct sockaddr_un is only problem now o fix up logging code so that it can be built without it being enabled o rework the logging code so that each program logs with the proper name in the syslog o remove logging.c as it's no longer needed o kill the last examples that contained the %D option o remove a __KLIBC__ tests in libsysfs, as klibc now supports getpagesize() o udevd - remove stupid locking error I wrote o update to klibc version 0.101, fixing the stdin bug o fix Makefile typo for USE_LSB install o allow dbus code to actually build again Kay Sievers: o let udevsend build with klibc o udevd - config cleanup o udevd - cleanup and better timeout handling o fix possible buffer overflow o udevd - next round of fixes o udevinfo - missing options for man page o udev - trivial style cleanup Summary of changes from v014 to v015 ============================================ : o LFS init script update Greg Kroah-Hartman: o update klibc to version 0.98 o clean up udevinfo on 'make clean' o add udevinfo man page to spec file o remove command line documentation from udev man page o create initial version of udevinfo man page o added URL to spec file o add udevinfo to udev.spec file o add udevinfo to install target of Makefile o rip out command line code from udev, now that we have udevinfo o udevinfo doesn't need to declare main_envp o move get_pair to udev_config.c because udevinfo doesn't need all of namedev.o o more makefile cleanups o move udevinfo into the main build and clean up the main Makefile a bit o clean up compiler warnings if building using klibc o make udevd only have one instance running at a time o new testd.block script for debugging o udevsnd : clean up message creation logic a bit o make bk ignore udevd and udevsend binaries o whitespace cleanups o remove TODO item about BUS value, as it is now done o add support for figuring out which device on the sysfs "chain" the rule applies to Kay Sievers: o udevinfo - now a real program :) o udevd - cleanup and better timeout handling o udev - next round of udev event order daemon o fix udevd exec o udev - udevinfo with device chain walk o spilt udev into pieces Summary of changes from v013 to v014 ============================================ : o libsysfs update for refresh + namedev.c changes : o udev-013/extras/multipath update : o minor patch for devfs rules Kay Sievers: o udev - program to query all device attributes to build a rule o set default owner/group in db - update o udev - reverse user query options o udev - kill %D from udev-test.pl o add udev logging to info log o udev - mention format string escape char in man page Greg Kroah-Hartman: o misc code cleanups o fixup logging.h to handle different logging options properly o clean up the logging patch a bit to make the option more like the other options o remove the %D modifier as it is not longer needed o remove unneeded keyboard rule o add usb_host and pci_bus to the class blacklist o added input device rules to udev.rules and udev.rules.devfs o 013_bk mark Hanna V. Linder: o set default owner/group in db o small cut n paste error fix Patrick Mansfield: o update udev scsi_id to scsi_id 0.3 Summary of changes from v012 to v013 ============================================ : o LSB init script and other stuff : o fix udev directory for Debian init script : o udev 012 old gcc fixup Christophe Saout: o add IGNORE rule type o small cleanup Greg Kroah-Hartman: o update TODO with some new, small items o Cset exclude: greg@kroah.com|ChangeSet|20040113010256|48515 o update the README in a few places o fix -d typo in the manpage update o Fix stupid gcc "optimization" of 1 character printk() calls.... Ick o oops, forgot to fix up the PROGRAM result from ID to RESULT in the config files o Add alsa device rules and a few other devfs rules o fix a few stale comments in namedev.c o convert the default rules files to the new format o convert the test shell scripts to the config file format o add bus test for usb-serial bus o Add some helpful messages if the user uses the older config file format o added dri rule to the default config file o added init.d udev script for debian o add a script that tests the IGNORE rule o add silly script that names cdrom drives based on the cd in them o add cdrom rule for ide cdrom o replace list_for_each with list_for_each_entry, saving a few lines of code o add a blacklist of class devices we do not want to look at Kay Sievers: o fix klibc with printf() and gcc o udev - small script optimization o udev - introduce format escape char o udev - more CALLOUT is PROGRAM now o udev - CALLOUT is PROGRAM now o update documentation for new config file format o more advanced user query options o udev - simple debug tweak o udev - drop all methods :) o udev - advanced user query options o udev - Makefile error o udev - make exec_callout() reusable o udev - exec status fix for klibc o fix Silly udev script Summary of changes from v011 to v012 ============================================ : o make symlink work properly if there is already a file in its place o Fix udev gcc-2.95.4 compat : o extras multipath update o extras multipath update Kay Sievers: o mention user callable udev + options in man page o make udev user callable to query the database o depend on all .h files o cleanup namedev_parse debug text o extend exec_program[] o ide-devfs.sh update o fix for apply_format() o check for empty symlink string o 'ide' missing in bus_files[] o small trivial cleanup of latest changes : o introduce signal handler : o udev spec file update Greg Kroah-Hartman: o minor grammer fixes for the udev_vs_devfs document o move the dbus config file to etc/dbus-1/system.d/ o move the config files to etc/udev to clean up main directory a bit o add Gentoo versions of the rules and permissions files o if using glibc, link dynamically, as no one like 500Kb udev binaries o minor change to udev_vs_devfs document o added udev vs devfs supid document to the tree o move the signal handling registration to after we have initialized enough stuff o make ide-devfs.sh executable in the tree o udev.permissions.debian - forgot the dm nodes o update the udev.permissions.debian file with new entries o added udev.init script for the Linux From Scratch project Summary of changes from v010 to v011 ============================================ : o proper cleanup on udevdb_init() failure : o patch udev 009-010 rpm spec file : o fix udev sed Makefile usage Greg Kroah-Hartman: o add documentation about the BUS key being optional for the LABEL rule o add tests for LABEL rule with a device that has no bus o Don't require the BUS value for the LABEL rule o If a LABEL rule has a BUS id, then we must check to see if the device is on a bus o add documentation about the BUS key being optional for the CALLOUT rule o If a CALLOUT rule has a BUS id, then we must check to see if the device is on a bus o Don't require the BUS value for the CALLOUT rule o add test for callout rule with a device that has no bus o 010_bk stamp o added different build options to the rpm udev.spec file o add pci to the bus_files list o check for empty line a bit better in the parser o more init script cleanups, the stop target now calls udev to cleanup instead of just removing the whole /udev directory o make udev init script run udev in the background to let startup go much faster o fix long delay for all devices in namedev Summary of changes from v009 to v010 ============================================ : o change pgsize : o extras multipath update o extras multipath update o extras multipath update o extras multipath update Kay Sievers: o fix udev-test.pl o small cleanup udev-remove.c o experimental CALLOUT script for devfs ide node creation with cd, disc, part o add any valid device o introduce format char 'k' for kernel-name o trivial make fixes o don't overwrite old config on install o udev-remove.c cleanups o bug in udev-remove.c o trivial cleanup parser changes : o fix comment and whitespace handling in config files Adam Kropelin: o Allow build with empty EXTRAS Daniel E. F. Stekloff: o libsysfs 0.4.0 patch o fix scsi_id segfault with udev-009 o add libsysfs docs David T. Hollis: o mark config files as such in the rpm spec file Greg Kroah-Hartman: o fix complier warning in namedev.c o add documentation for the new '%k' modifier (kernel name replacement) o add documentation about the multiple sysfs values that are now allowed for the LABEL rule o add tests for multi-file LABEL rules o add ability to have up to 5 SYSFS_ file/value pairs for the LABEL rule o Just live with a sleep(1) in namedev for now until libsysfs is fixed up o try to wait until the proper device file shows up in sysfs o remove unneeded TODO and FIXME entry o clean up the stand-alone tests to work properly on other people's machines o add tests to catch whitespace and comment config file parsing errors Summary of changes from v008 to v009 ============================================ : o more extras/multipath changes o and more extras/multipath updates o more extras/multipath updates o yet more extras/multipath o more extras/multipath updates o extras/multipath update : o D-BUS patch for udev-008 : o add init.d/udev to "make install" o add init.d/udev to the spec file Kay Sievers: o don't rely on field order in namedev_parse o get part of callout return string o remove '\n' from end of callout return o man-page mention multiple symlinks o allow multiple symlinks o cleanup man & remove symlink comment o experimental (very simple) SYMLINK creation o man page beauty o pattern match for label method o a bug in linefeed removal : o remove udev from runlevels on uninstall o install initscript in udev rpm Daniel E. F. Stekloff: o pre-libsysfs-0.4.0 patch Greg Kroah-Hartman: o signal fixes due to klibc update o sync klibc with release 0.95 o add mol permissions to the debian permissions file o update the FAQ with info about bad modprobe events from the devfs scheme o some cleanups due to the need for LABEL rules to use "SYSFS_" now o Add restart target to the etc/init.d/udev script o tweak the config file generation portion of the Makefile a bit o change devfs disk name rule from 'disk' to 'disc' o add vc support to udev.rules.devfs o added a devfs udev config file from Marco d'Itri o set default mode to 0600 to be safer o Makefile tweaks for the DBUS build o update the FAQ due to the latest devfs mess on lkml and also due to symlinks now working o document the different Makefile config options that we have o change USE_DBUS to DBUS in Makefile, and disable it by default as it's still to hard to build on all systems o fix formatting of udev_dbus.c to use tabs. Also get it to build properly now o move all of the DBUS logic into one file and remove all of the #ifdef crud from the main code Olaf Hering: o dump latest klibc into the udev build tree o use udevdir in udev.conf Patrick Mansfield: o better allow builds of extras programs under udev o update udev extras/scsi_id to version 0.2 Summary of changes from v007 to v008 ============================================ : o more config file parsing robustness : o udev-007/extras/multipath update Arnd Bergmann: o Build failure - missing linux/limits.h include? o Add format modifier for devfs like naming o klibc makefile fixes Daniel E. F. Stekloff: o another patch for path problem o quick fix for libsysfs bus o libsysfs changes for sysfsutils 0.3.0 Greg Kroah-Hartman: o fix up some duplicated function compiler warnings in libsysfs o fix some compiler warnings in the tdb code o Added Kay's name to the man page o update the wildcard documentation in the man page to show the new styles supported o fix permission handling logic o enable default_mode ability to actually build o add support for the default_mode variable, as it is documented o show permissions and groups in the label_test o remove some items off of the TODO list, as they are now done o fix up the tests to work without all of the environ variables o get rid of the majority of the debug environment variables o Update the man page to show the new config file, it's format, and how to use it o fix up the tests to support the rules file name change o add support for a main udev config file, udev.conf o turn debugging messages off by default o split out the namedev config parsing logic to namedev_parse.c o rename namedev's get_attr() to be main namedev_name_device() as that's what it really is o add devfs like tty rules as an example in the default config file o operate on the rules in the order they are in the config file (within the rule type) instead of operating on them backwards. o Cset exclude: dsteklof@us.ibm.com|ChangeSet|20031126173159|56255 o add test for checking the BUS value o fix problem where we were not looking at the BUS value o add scsi and pci bus links in the test sysfs tree o add test and documentation for new %D devfs format modifier o changed the default location of the database to /udev/.udev.tdb to be LSB compliant o get rid of functions in klibc_fixups that are now in klibc o sync up with the 0.84 version of klibc o fix udev init.d script to handle all class devices in sysfs o fix the test.block and test.tty scripts due to their moveing. Also add a test.all script o 007_bk version change to Makefile Kay Sievers: o pattern matching for namedev o catch replace device by wildcard o udev.8 tweak numeric id text o udev-test.pl add subdir test o namedev.c strcat tweak o overall whitespace + debug text conditioning o udev-test.pl - tweaks Martin Hicks: o Add -nodefaultlibs while compiling against klibc Olaf Hering: o ARCH detection for ppc Patrick Mansfield: o fix udev parallel builds with klibc Summary of changes from v006 to v007 ============================================ : o fix segfault in parsing bad udev.permissions file Greg Kroah-Hartman: o update default config file with a CALLOUT rule, and more documentation o updated the man page with the latest format specifier changes o added ability to put format specifiers in the CALLOUT program string o tweak udev-test.pl to report '0' errors if that's what happened o only build klibc_fixups.c if we are actually using klibc o add support for string group and string user names in udev.permissions o add getgrnam and getpwnam to klibc_fixups files o remove Makefile.klibc o add udev-test perl script from Kay Sievers which blows away my puny shell scripts o added debian's version of udev.permissions o change to 006_bk version Kay Sievers: o format char for CALLOUT output o more namedev whitespace cleanups o support arguments in callout exec o namedev.c - change order of fields in CALLOUT o namedev.c whitespace + debug text cleanup o man page with udev.permissions wildcard Olaf Hering: o static klibc udev does not link against crt0.o Summary of changes from v005 to v006 ============================================ : o faster test scripts Arnd Bergmann: o more robust config file parsing in namedev.c o add bus id modifier Daniel E. F. Stekloff: o patch for libsysfs sysfs directory handling Greg Kroah-Hartman: o add another line to udev.permissions in the proper format o tweak replace_test o fix permissions to work properly now o add real udev.permissions file to test directory o fix namedev.c to build with older version of gcc o add dumb test for all of the different modifiers o update the TODO list with more items that people can easily do o move the test.block and test.tty scripts to the test/ directory o add remove actions to the test scripts o turn DEBUG_PARSER off by default o add some documentation for the %b modifier to the default config file o fix make install rule for when the udev symlink is already there o change release target in makefile o change debug level on printf values for now o updated demo config file o add some documentation of the modifiers to the default config file o add demo config file o updated bk ignore list for klibc generated files o add printf option to label test to verify it works o fix up printf-like functionality due to previous changes o get the major/minor number before we name the device o add scsi_id "extra" program from Patrick Mansfield o Add multipath "extra" program from Christophe Varoqui, o trailing whitespace cleanups o splig LABEL and NUMBER into separate functions o add TOPO regression test o move TOPOLOGY rule to it's own function o fix bug where NUMBER and TOPOLOGY would not work for partitions o clean up the way we find the sysdevice for a block device for namedev o updated label test script (tests for partitions now.) o split REPLACE and CALLOUT into separate functions o add debug line for REPLACE call o add replace test o add more sysfs test tree files o change UDEV_SYSFS_PATH environment variable due to libsysfs change o fix bug in klibc's isspace function o fix udev-add.c to build properly with older versions of gcc o add prototype for ftruncate to klibc o Remove a few items from the TODO list that are already done o version number to 005_bk o pull some klibc stuff into the make Makefile to try to stay in sync o klibc build fixes Kay Sievers: o apply permissions.conf support for wildcard and default name o man page with included placeholder list o implement printf-like placeholder support for NAME o more manpage tweaks o add support for subdirs o add uid/gid to nodes Olaf Hering: o DESTDIR for udev Paul Mundt: o Fixup path for kernel includes when building with klibc Robert Love: o udev init script Summary of changes from v004 to v005 ============================================ : o namedev.c comments + debug patch o man page update Greg Kroah-Hartman: o ignore the klibc/linux symlink o add klibc linux symlink info to the README o get 'make release' to work properly again o added README info for how to build using klibc o turn off debugging if we are building with klibc o turn off debugging in namedev o added vsyslog support to klibc o add ftruncate to klibc o klibc specific tweaks o libsysfs does not need mntent.h in it's header file o udev build tweaks to tdb's spinlock code o klibc makefile changes o build tdb and libsysfs from the same makefile as udev o udev-add build cleanups for other libc versions o tweak tdb to build within udev better o make libsysfs spit debug messages to the same place as the rest of udev o make libsysfs build cleanly o updated bk ignore list o added klibc version 0.82 (cvs tree) to the udev tree o makefile fix for now o Merge greg@bucket:/home/greg/src/udev into kroah.com:/home/greg/src/udev o hm, makefile bug with so many files... will fix later o regression tests starting to be added o fix LABEL bug for device files (not class files.) o more warning flags to the build o got rid of struct device_attr o rename namedev.permissions and namedev.config to udev.permissions and udev.config o fix dbg line in namedev.c o more overrides of config info with env variables if in test mode o Fix bug causing udev to sleep forever waiting for dev file to show up o change version to 004_bk o make config files, sysfs root, and udev root configurable from config variables Robert Love: o udev: sleep_for_dev() bits o udev: another canidate for static Summary of changes from v003 to v004 ============================================ Daniel E. F. Stekloff: o new version of libsysfs patch Greg Kroah-Hartman: o 004 release o major database cleanups o Changed test.block and test.tty to take ACTION from the command line o don't sleep if 'dev' file is already present on device add o fix comment about how the "dev" file is made up o more database work. Now we only store the info we really need right now o add BUS= bug to TODO list so it will not get forgotten o spec file changes o test.block changes o ok, rpm likes the "_" character instead of "-" better o change the version to 003-bk to keep things sane with people using the bk tree o got "remove of named devices" working o fix segfaults when dealing with partitions Kay Sievers: o man file update o man page update Robert Love: o udev: mode should be mode_t o udev: trivial trivialities o udev: cool test scripts again o udev spec file symlink support o udev: cool test scripts o udev spec file bits Summary of changes from v0.2 to v003 ============================================ Daniel E. F. Stekloff: o udevdb patch o udevdb prototype Greg Kroah-Hartman: o update the spec file for the new version and install process o fix makefile release rule to not drop tdb.h file o Add FAQ for udev o removed AUTHORS and INSTALL files as they were pretty pointless o copyright updates o Add AUTHORS and INSTALL files o TODO updates o Updatd the README o updated the TODO list o add udev man page (basically just a place holder for now.) o added uninstall support o added install target for makefile so people don't have to do it by hand anymore o add version to debug log on startup o tell the user what mknod() we are trying to do o add dbg_parse() to cut down on parse file debugging statements o put config files and database in /etc/udev by default o add ols 2003 udev paper to docs/ o clean up some debugging stuff in namedev.c o do not build the tdb binary programs, only the objects o merge tdb into the build process o Added tdb code from latest cvs version in the samba tree o added my name to the .spec file o minor cleanups o cleanup the mknod code a bit o remove mknod callout o handle new major:minor format of dev files that showed up in 2.6.0-test2-bk3 or so o oops, everything was getting created as 000 mode, try to fix this up, but fail... o more test stuff Olaf Hering: o print udev pid Patrick Mansfield: o add callout config type to udev Paul Mundt: o Fix TDB cross compilation o udev spec file o udev/libsysfs cross compile fixes Summary of changes from v0.1 to v0.2 ============================================ Greg Kroah-Hartman: o more test stuff o removed unneeded stuff from udev.h o added 0.2 change log info o start working on label support, and fix some segfaults for block devices o test config file changes o add NUMBER support (basically same logic as TOPOLOGY, perhaps we should merge this...) o added topology support o got REPLACE to work properly o make struct config_device contain a struct device_attr instead of duplicating the mess o block test o split the tests up into different files o split udev main logic into udev-add and udev-remove o Clean up the namedev interface a bit, making the code smaller o bk: update ignore list o update the tests to handle block devices too o add initial libsysfs support o added libsysfs to the build o added libsysfs code from sysutils-0.1.1-071803 release o namedev config files are fully parsed o more permission tests o make log_message spit out warnings so I don't have to spend forever chasing down stupid bugs that aren't there... o added klibc makefile o Initial namedev parsing of config files o sleep for 2 seconds to give the kernel a chance to actually create the files we need o pick a better default UDEV_ROOT o fix up the test to actually work o added more documentation in README and TODO files Summary of changes up to v0.1 ============================================ Greg Kroah-Hartman: o added more documentation in README and TODO files o updated the documentation o cleaned up the makefile a bit o remove now works! o restructure code to be able to actually get remove_node() to work o Creating nodes actually works o added stupid test script for debugging o added initial documentation and gpl license o enabled debugging o updated ignore list o added initial files o fixed up config o Initial repository create o BitKeeper file /home/greg/src/udev/udev/ChangeSet udev-182/PaxHeaders.12492/NEWS0000644000521600052160000000013111731430122014053 xustar000000000000000030 mtime=1332097106.376433043 29 atime=1332097107.51643307 30 ctime=1332097352.869438917 udev-182/NEWS0000664000521600052160000017355611731430122012501 0ustar00kaykay00000000000000udev 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 '. 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= udev.children-max= udev.exec-delay= 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 : 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:="". 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}/: and the device node of the same device by looking up: /dev/{block,char}/: 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:@" 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=="" 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}+="" 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=="" and TEST!="" can be specified now. The TEST key accepts an optional mode mask TEST{0100}=="". 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="" 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="" 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. udev-182/PaxHeaders.12492/build-aux0000644000521600052160000000013211731430510015173 xustar000000000000000030 mtime=1332097352.940438918 30 atime=1332097354.344438951 30 ctime=1332097352.940438918 udev-182/build-aux/0000775000521600052160000000000011731430510013654 5ustar00kaykay00000000000000udev-182/build-aux/PaxHeaders.12492/config.guess0000644000521600052160000000007411712737342017606 xustar000000000000000030 atime=1332082779.336091649 30 ctime=1332097352.889438917 udev-182/build-aux/config.guess0000755000521600052160000012716111712737342016216 0ustar00kaykay00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: udev-182/build-aux/PaxHeaders.12492/missing0000644000521600052160000000007411712737342016665 xustar000000000000000030 atime=1332082776.994091593 30 ctime=1332097352.940438918 udev-182/build-aux/missing0000755000521600052160000002415211712737342015271 0ustar00kaykay00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: udev-182/build-aux/PaxHeaders.12492/ltmain.sh0000644000521600052160000000007411701240101017065 xustar000000000000000030 atime=1332082784.468091771 30 ctime=1332097352.931438918 udev-182/build-aux/ltmain.sh0000644000521600052160000105152211701240101015470 0ustar00kaykay00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 udev-182/build-aux/PaxHeaders.12492/depcomp0000644000521600052160000000007411712737342016643 xustar000000000000000030 atime=1332082777.784091612 30 ctime=1332097352.910438917 udev-182/build-aux/depcomp0000755000521600052160000004755611712737342015264 0ustar00kaykay00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: udev-182/build-aux/PaxHeaders.12492/config.sub0000644000521600052160000000007411712737342017251 xustar000000000000000030 atime=1332082779.303091648 30 ctime=1332097352.899438917 udev-182/build-aux/config.sub0000755000521600052160000010471611712737342015662 0ustar00kaykay00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-01-01' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: udev-182/build-aux/PaxHeaders.12492/install-sh0000644000521600052160000000007311712737342017271 xustar000000000000000029 atime=1332083869.70111763 30 ctime=1332097352.919438917 udev-182/build-aux/install-sh0000755000521600052160000003325611712737342015703 0ustar00kaykay00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: udev-182/PaxHeaders.12492/TODO0000644000521600052160000000013211725711214014054 xustar000000000000000030 mtime=1331139212.725230018 30 atime=1332082486.396084668 30 ctime=1332097352.878438915 udev-182/TODO0000664000521600052160000000070511725711214012462 0ustar00kaykay00000000000000 - 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() udev-182/PaxHeaders.12492/test0000644000521600052160000000013211731430511014261 xustar000000000000000030 mtime=1332097353.661438935 30 atime=1332097354.344438951 30 ctime=1332097353.661438935 udev-182/test/0000775000521600052160000000000011731430511012742 5ustar00kaykay00000000000000udev-182/test/PaxHeaders.12492/rules-test.sh0000644000521600052160000000013211711107662017007 xustar000000000000000030 mtime=1327796146.964827003 30 atime=1332083870.501117649 30 ctime=1332097353.656438935 udev-182/test/rules-test.sh0000775000521600052160000000064111711107662015417 0ustar00kaykay00000000000000#!/bin/sh # Call the udev rule syntax checker on all rules that we ship # # (C) 2010 Canonical Ltd. # Author: Martin Pitt [ -n "$srcdir" ] || srcdir=`dirname $0`/.. # skip if we don't have python type python >/dev/null 2>&1 || { echo "$0: No python installed, skipping udev rule syntax check" exit 0 } $srcdir/test/rule-syntax-check.py `find $srcdir/rules -name '*.rules'` udev-182/test/PaxHeaders.12492/sys.tar.xz0000644000521600052160000000013211711107662016332 xustar000000000000000030 mtime=1327796146.964827003 30 atime=1332083870.351117646 30 ctime=1332097353.560438933 udev-182/test/sys.tar.xz0000664000521600052160000050237411711107662014751 0ustar00kaykay00000000000000ý7zXZæÖ´F!t/å£ÿÿ§„?]9žJ©Q¥Q}çŸf§ŸÆ¦çM!S4;@‡ý3nˆŠ7oéÕþ }Iq‘§ôǦÉB_ƒôÖe´;ô·ÉñÐ ¸øT‘áºÓ²á<Õ]®È!®Ù¸Òþ‚´ëL`”ÇLØéÚ·#†÷Uê#£ Iý=x9r;ê–½»¿tòƶ9Od[ZÛ;ç/‘•MeÂ1 øT¾AGU¶ž%7ÅiË'È®*¡Ëó ýÚr~ sŽênÞ éXÚ+`8’åQ”û7ö©ÅÎÆESF„h§¢AâÊ™/Ÿ:^˜ò…†MÆVc”Ò°x”’,÷—Õþ ²êò€_Üv)r&™¼†ÿu-Á%äÁNœ¦vë–(qD´Î$æv|™â‡ !Ž?7ÇN&œ9üTÖìwŸ®3!YÊ[¼Ö¬&V5öŠP?+g¨qñ°¿·G¦JÁùbkÄkÝnÎëQ]Á¥Q×ïmg¹—V¾%ŸÀnÀÖp¦C_œäCé?Ñ …¤»V*\Èš¬§'ØátC¹Þ Çë¿D´S¯fÝsåX!J•L-"7Á]n›rrÄúÍ™„S8=0(²'(û壨1xme»<Ä—`¢ÏÍÚžjãñõn¹ï4ɗ–ŽØ{ö.VÂ.øm‰K@c+%TCÛÞù-ÎÙjom±èù%)Áj—#›Cô=ÐïŸÎ£RN¬¾V,ÄɯÙg°{­¾¯øñøéd^@Ãæ³[Z7t`Å(ŠÒ¸11kÊ¡Â ²ºHÆÉkà‰Vís)ÐF·mE’ÜJõ¾˜ìu±7NdxUíãÌÊC&šØÀ5O ¯e3 ¤&<ü–¬ÚgÖÀíÛHVÓÄãV?Õ°QÕýØV΢gJæšWʤ–”Æ|²eë ¹“9*\3Áœ‹e/,K&Ø‹‡ÆU¶›Ñ]ãQ9'ÖT窴]Š!³þÔ]Ç™hjŠ„ ËIË…D?Z*,hâ!S£:~"~έž}JW «Õ1Nò'‚hB“Ú^¬Dá5t¡YƇÔWD>4ÞÛÚ ÄÒ•~>Iaˆ‚Ü»G=Øüõ†Z`-3ZhòÐl‘ÔaúAÞŠƒ„·ÕdIá1J~roòxÁµU)Æ( /°<#Æh&H‚TB/oæ”)ÈJ¦b¾áÈϯáRæðî­¯+wxÖ[g,98á)“Ô;›ÌÔ¥IOUßÜh¢µnEÈ€½v ÐÏ ^8Â=û"ûM!ñßÉšˆ_Pþ“¼¬­nEÀ6kŒ­Î1žúõ’×:„†6Nº)wŽmZ‚hdL«—˶XûS Í¢ów¿ÀÈžn²JÕ!Ú±ò!oœ‚iå ~¨ïo…^¥Ìý”Ì´êéÇ»­÷Hš,¯ðmÁ¹Çud/zpKc’³°ðpçÊ.qTïÄ‘pª~%fK𯘄îqöŠ~Ñë…Ü&먣\·C&)ÃFrÒ›€œÎ«Ÿ¡ù K'@1×Üjf–“d\µ¶ò¹_=àe>DÝPóh"Íi<)ðn‰Bh]x„$¾à‘ýµ’kçgO4aÚFª§I§2Úlqæ‘™‚F×íØå9_K“{~!Þ$â¤GXjNrS-Á‰YÁ ³lÕNmΣÑerä/ça¾}1zY¼iy> ±þSFÖFPÄéBvÉ0Eð0 º¯w­ƒ`X8Ê;`7ŽW—Ï1ô6èž »¼êk%,ù9ybpáž’”ÉUæ—"ƒ›µ9G $¦SMWèùËž¨†ÂfZ…Ô Y1è¿S‹ˆ#2[¥ 6–ÄÒ0<‡îc•bT‹„LVqNE‘¢+2r_Ã[Ž"½Hx‹Ceo h1—¹€ñ¼Ä’™Q}:•xL ü‚çíïôÚ¼žõ–wªg–íç¹çÕD´ Û‰O°íåûF¤ì$¤!Ô80NšP!}P£B‰Èmê×/O§+)@‰9=U{>Er¨Ó%Ð>jý(ŠœWxƒ?¢H¼54­í@Ì@ÅfÐhh":Áç 0Ù;È _ã4ݺb*ˆÕ¾á¤.ì;À`Ÿæ@ÝZ»üxY³–›]É‚ÅÜœÒs,Èò`!·?ÊÿI=°>í ºÀÂY4Ý}È6Q ¶ÛŒCˆÃmëuÛ‰ üišt£!HÁÛìNr\ÓQæåg ÉÀ’±ÆÒì©2¦˜$Ô¢‡F=G†uËäõs&F©3òØ6ǽoÝ&‘Ž‰w:pëtÿ9âíÁÞq0gßEJÞâ&±1딎/°êmðÅ缌3FÑcäGA‰s‚™ cëN2‚³8[½õ‰;;ŒßÞÎ>(aÁ’CUŒÌ¥Økœ±”!$[Bg¶h!Žïzµ Õv¦»|2 ‹š^ŽÃ3³JL9¨}Ô mMÜÙ2@Ê°…§G.5ŸI˦6Ô¶õ×!¸uªÍ_‰|U¼îÖó5ÀéEx`@_$ðÞ¥£uB–"~g®¥—@è¡«÷üî©ÓdÓ,„çUìèF™IÜ—¥Flá\âãNŸJ É·ånOc Ž“è)ªHÙ[u]‡ÍZ~ß© ÏÐaC¿]žåƒz7A„GΠKe!jÑõçZ¾„Åý¾†óÃ)W–DWªsXfŽhHRƆVÄ8}NZ8{þ#fRµv“S«Ò~!Rêÿk5¶‘ <ÉÜ‹I£»›çºÍ¯¤©qŒ.ή7“P6×d(0waƒÏñ‚%µ¤=\YÐÏy¦WfמŽîŽXNê.‡×ë/¤[/;0«˜kÕÂ`·=íLnî‹û ãóVtR¼#[:0{ÖÀŸzU™ Úî—²˜­Ð¹úÍ@ÛÕ&Eï]·÷ÄeâICèýfwËG7&`b–ê U¤ÈëœÔÆz3Å£•‹Eßsâ›SRH–ƒYÿÀž„LW/,øy[c`-(‘o‡ìrÒ˜Û®'OÇÒ¯'Î|5&-µp rkÕ÷}ÉÁ‰· ã£(ÒšOÎpŸäÛ™ÒÂÚÁdqŒw"Ÿ„Kë퀑r€uÕÇ1$c†n$É-†P¾Z¢O<Å xѸñÃå<Ãl5 -®u=`0ZÄ¿“IKô.oŸR ¶»M ë±ÀuåP)|½úê‘üéVRguô·Ô“cŠ‰¨U™‘ì²BeN¬²Þ¾¾8ò+_4>&3zZ†7JX5иQ†ÁcÛ׈7‡ ž.’»EÓD¯w&뉲 ànIɤb—¿öªw¢n„!ápòûÜœû(Á{ëÃMìªz(~uúJ^DÑÕªc¾z܃$”cK :¡Ïé1%È4wÒ¦˜üàšîÜPùBèà8(ÌœÏô;š¶غŽi…àÛ®°G£y)S×Ç%ßÉîd˜j¼RöÀ’£ÂF%a‚+ßòNŒ3(¼R•*ž” ­B8Üù”{œ~Ðç×2 ðÛ©™nh'±ŠE©i¨£}so³WÖ®ºèr¦¡“p?«ô)Ó< «ÿ¬¨-¸ª—ø/©‚ßy³æK®«—NÙžèCæ ÿùö² Uô:¼ñº0Ì2=…Ñ—gôàÔcîQºŒw@ƒé¥9XÜR2£–ûTäÍåHX´á`г™Iµ=‡åÒ1@£<í–$“2 Nº @µíq\_¦ÈeHœùþ½QA•Ñ9†¤·”Ý »R_ÒÒŸÔîéÜr‰£nU|ï;-dNéøR¤kkÞ¸œ¿WqŒ™e$Ã3í6d®¹Û[ü÷Z>MnU!ÊÜv#{Ý㟥_NÕÿ‰Ð¢ÿ¶°²Ì9èz§)T•3r<£‚®KwÐìœ3›˜–1õp) ÊÜÉ&VMâuç˜Q¨R„QÁ~qµ.7ÎAŸa†nâ«c¯iS^@>‹¶–BÜhÁx\' fÂ(SªÌÁ-ŠÚ_V¢Ä›eÃö!HuåŽÍ)g<-[W³úÌ3’X³§ GJã÷vŽ›¬ù•cífÖôÂà]Þžp~c+Zhý˜›ÂÉÛ§Çj‡Ò0C„⟪–al’Je´Ýˆ. $ÈI§’È/‚¦' _Ô¿vo—Leà •0šV'“Œ…Ÿ?BBabCÓØH‚@lÊDÆV`}’[d¹ô mRUpµF›Îµçž)ð¿¢£òçæBüg¾5 #²z(÷iT]Š°O‘¨#ñX½oÌùHÓ³zdÚ{g±_=š¿Ÿdwà4ÒÉÈžš¦®Úét'ÃRƒ,AÓ9úÆö*çPÊ-’¥sƽMMÆÖQJæfsmò´Þp§¥kòwÞoå´YsÜö­¶ðï$·”OŠëÛ)a‚”=§“Á%Ú?voó IÔ‡õ¦RkáÌê]›Ä`XPèßDØ%¦Zm(+nʦ”¡=Ћ$!±:Ä#rtù›¤¬ñZ §!n3ÇŸ×Þ_iŸ¦ÛÑw¹KQd¢Æ¹œ»4u†T1æëIR§­%Î¥»`µVž˜4uVµ½ªµï— }T9PQDv|£;´öÐ\Ê;n8i¾‡5ÅáuÖTgü[:”W0eùa… l8Äõ1 é.¤e£B |ïæ\*‘—p8µú ‘9J¼é7y>P½ᇂû*G+¸:hìõ­jŸÿ…‡£ÊºGm-pcV‰ÖÖ2•U*·òv –ØoE’ zÐÄ¡®}@§Î®àû¬ò½ö~Vò{¾²Q³¢ý·ßZ…´.àEè 9,ÏV7Æs‹Qd¤…iÍ&K¼j!0½JÕ¾êY–Â"Ã¥ 0N]íß6çÑ ˜WÍ®¦gØcÀU„ð¥f‹½•ÀÚê›êO)£SS¨óîЄéŒbÃ)»ÃÀÞ·Œ+9>ž( 8êç“âµhÒöbÌhs›`Bp”„ÎäƒzíLå #N|xþÅš$Ìù|´8?øþ"À,P;BÊ 9L¶ß°+˜Pã2hXÈy7i¸8F+ÀDVÉI8VÖ+kÕ"7 vK‡¢‚qwQS;X¿rœ$}ÄkF°R“߼<ú`ˆ.¸BëVóàr±˜5%þÃ.ÅB æ{§Ås’:Å)í%S‡KÜD<Ú§ò¿¥Vd®ŽÒ…“CÀ¢•¤Iô$"¡4"¹€gn‹¹k ÞËWeexH¾EŒÕÓíÖ?t…Ð?쇚Ž¦Ð¾ÖûÞ¡RfD¿Åµ¦'©2ÒâŽ~¬}+‘¢v&Bò·ˆžm’n¬G€v…,}šŠô¶ù°Zû/ù£§K õ % áÉÏñ\ÉŠ>—cxžL?ŒèâŸð€>Õk Òã†'váAU°—ºGE‘Õg]n¶A oWôiý ÊP4@ÖçÇtHN õ¼Ün G4$ ƹ'oÜí›ã¯Íçí nß\1 ”á$JÍÔ­¼|gïë;ea/© õ×N?fÝNiþ'y2,Ÿ¸žˆ¶®å­ ·þ.ËT µqïp˜Ó2¿a†ûèk" ‡nxÚ-K˜ˆ‘oœë÷§løƒhrXý¦ïomP’Άõ0·©”V.= a§ç›.ž¢ B¥ßì\ RT#-4ÃKí “xw?m¿&.mbT–aæÿLà|lçMh=Ÿ€K¸ py; ¿W~PèÍ:VÏùï:J–)!Žf³ŽéÃ¥£9ææë;·Š~¾?œ$`÷ Á(•¢…•ç@×Ðî[èÓûëhà”Š‘ÎËßç¶b Ưg %6-t§Æš•9 ¼+*ìßñZ—Å ™&âìL¦§V³E·X~`H˜PWGGÐðáRUð·&=p{íñxŽ(ø½0þ©K)š9Øc>¡,ûw»ñ8@à3G)Ïÿ7}ꎋH|éÒ0ºîòŽs¢•Cñ¼ ¯r#™I-Ñ}"Ê9ÿzîsö¶¬?Êñ¶ûÊÇà ÜÎgÐG½*ÉVnÜl#¢iõhùgLš‹–Ç‹=2°¯Ö8ÞÜ ¼Ž¾aä­tíî5ºŸ|KžcÖVj¥JœÐÖ}|VåäÌܽp7ÙßÍ,’àãT¥—u.Lkb'°¶Dî:©)Pýï,c™5¨ž)fÉ-pÍÎ ‡²ö9Oé/Ñ® ô½åLAèMðŠ—]+'Vú–=ÃÑþıÆíÑŽËjh+î:þ …ƘÍ')»«cƒxUÁèÿÂáMõ­V[Uó䧌u‹âÏõ¹l¹2Øxà±¥Íã½`L>-À¡ÁySó¦¶eKtyöèà ÂЊPçL+ߌmÍ <Æ»™ wZ8)æ­Tµuëyß}Iîr1úñ¼,ÏHÊëæ)E¸8þ9úË€ílòˆßËOí&²|Z³‰¸èá$›¼àµÌTåÕùñîH§~ qWœÿ2¥á˜-ü0ÝOQâêÞB½·öáSE/8VV®î ¼Ãx_C .ŒRà?:úpÿ¹ùÇZ”ÕÔ%m#“Kå4Æ£ªˆ‹d**Ô릚÷¢ò¡×3œ÷ ‰ŸóA—Ê[½ó±‘ÿ —˜e®£2î\kò­”¥‘ĵ' ko«âþ*³ÖÙKnl Û},Ê©3ïët›ae8Æ69âQfÁciˆ0²–Ž<5 Pò榞Ė>w`{›1óY&\7ú¦I­Éð‡Æ¢O¯sk*ƒŽR† ãt«¢sK¦™N9ôË}í÷hAÉò`Oª=©no8E›¦ƒ,¢8,'PK^@­âçÿ\F@Ñ2ášf]¨RÉÏ™1hê†Ûa“¡”Éc58û6ï`yÿD2¤.D‘~ëC–Dœœ„uS~ÞN¼Eò†Í^Ì­%÷FÁºph6Å^„—µì‰‘¤öÉC Ä(ì¿õQد MeO ””ñš|ZD†T; ½È4mdqø!‰²ŸÁÃîØ  ÒC8¸v©ˆ-„/ë MÉu»:¯µMè³¼WÚ+!0úý>ešC• LñiÆ(­ŸhýŠÏ &È“¢±Ä¦0oÝÚ3]4 Žh >fòñ¹¬nŒÇ·»Ý ®‚8Pï'(`Ö¬ª»¿HM•I*”ïoÝ¢Ú¦éH÷ÎLÖt4¨òÂ@Ç6ùz7øq ó°HÖ ? ™û¶õÎ#q~¬p<Ê“ G™ÏF”œÏlbàì·@gq´ŒÍ/×>ÙZ_Û£Ïç¼W` ¯7ÉnÞãخֆtjïiºKÊíKú,H”ëÐzÜTžî–j I㣻Ѥ=.•Ô`˜ªŸƒ™6 °ÝÄųhh8F87cfÍsõ$Ü…u­=uàb© XÕïV}@¿ÇF1ç*ö2DÇØtÛË3^£wé3Â54ÚMx'CÍ;I4^ןÃÂBìSiáüBΤŽã\¼ÕsS.0tþ‡s”ƒ<ÀŸ­ÚhlŽQvmóXüÏ6aìŒg>‡f§FZ«@“ç#h᧯^ir;WÙž©ÌK XU‰ö级_‰Y‹!à6È?éWî$Dè¡-Dó‹öÛ2ûkr…÷‰ØçdáþÒ#ÓÔs5®ªøëåOKÜÛ:9÷Oi3k‰ÏZ>-´³ÀR“){¥ÆÆ£Ðõžþ#ç¬{L?ÆWPO¬Äg šì Êž ¶å–RÛ ØÆ?@ûIZ"½‡= ãª™µŽ9uÅžðïçuN࣋—€hCK¸NI3†±uýPUã™!ˆÍŒÝOs­Nûg‘5÷OÉ¿örRç<kÌjoEë—£ûJÅ£±zW}!ò_—ûš0m0$7D ëëDb·RY{Ô*Cη`]Z8Ê}Ï& lœfW]ô©•‘ ™é]‘)Ï€>à_`ïŽ!;p}±~1 CA17S6ÜNŸÄr&1ÁŠÞÜú(íF‘uðRb£Þhgw•ÂA›ÖéÀ»ŒTcÖ…v%Mïo[…ÿ‹}ö`‰”Ÿü+ˆ²æøB‘z˜uð-Íp…E¥­€‰‘ª÷Ü2(yÐ4#©\GÕ¡p òCÃç{§ÇúrNËÕX±6Epô¿… øÖÉo»Š Jy¹”§Ò™WPÆT+Ö—äÿH:;7¬ê3û¤°‘¡ápCÓûɲ¦*äp°ƒs•ZFÏQ¾Ÿ`œ¤$ ,Õ3«Pk³Ü?dlá—‰ØØM 7NS ¾ø‘ :VÓYøtiÍWˆÄ×à°6;í9øHH'ö¹tNƒ¾¢ß“¢ï¬_;ÊŠäe€ÌOO°œ›_edZÙB;šwgz ¯Ì›}ËQ!˜Íl¢þiUöœ@–>k§ê„.0Ž?ݘ´Ò·õîÓYyÃmÑXF~õƒÃ*Ô pf¦âaäépèÙäz+è¥2ôÔ8=½À*E ›+üÊ —€ý=Ëã±á¤³Ó)U­\&uO™|}yKœ˜=´Úy¶4 ú˜ÅóÉsÄ>þ×™cB½}Õ&ö%µÀubê#R.Whðg†ÞSÙ~ŽKxpgN¡¼> ¶YœU4¤SÀ½@Ú#¥A]ÁW¦‘Åi2 ,H;G{÷5®ë5[—&wL„Jc ¾ím•¸é·äÿðOÈ7ì]-¿›l‹ È W•;¿N&oíÈÎCNžUúÏ ¥·Dð^!Óî$¬§„f³= :`¬&Éà£ãç<4ÄéX€Ö8ÖÒ§°¾92NIÂÅàZ“³º=לçtWò‚hƒû$C,=—cEJ¿fŸºƒnöGvP&b´¹F5¹&J¯0À´šF›‡4IÔÆ Ýý©¨·K¨|­=®wnÁëSÇJ{Ègã¾²+’óL•{zy)KpSDxú»"/NO‡Ø @êÂYâÛ¤ó0?$æXA9ÏÄ2Ï–e’¡€šv[,hÈmô34ÃiN`šͤeêà3I˜¶ðÜx>Õöw¤+Îööǧ`*cÑ -À¾BÏí6Àÿ¶ãéT‹!9¾z¸Cºû1‡ºñ½O«XòX¤îN«5VLÛ¢ £èÓš±Ÿ¼—˜ï½Y%Öì¼"ÞßáÍð†!°q‚¢G“‰ÿ÷1þSmjòÎm½£fÁÃ1à&Ån}ŒmÛÇD²q­ù7‰rÌ?Ô9ä7G ¾Àc÷l|ê0ˆwYN4ÑÂ,˜µ XYÜpŒâÌ#í5ZÚY÷%ÁÜ®yás¸–3cúÝÆÐUm+æ1ŽÀ¸¾1¡é³_›‚™Ñ‘'“þ‚O¥sz™ŠýAe‰ a‡^­nÉ| V BuFH5q³¼ÿoš¹ç2pò4žQ8Ÿ„å®ÊrJñ»Ä’9Cm^‰-þWÖì,áT”›×w„¼ÝÊ·..GôÜw½ì²8KS’“T ¹"_1àFîm$ΧêBÄƺh*>RûÜÄŒd¶#ÅÎq‡G\Ÿš, ã”å—qÒD€>tÂìO"&ŸË®ê0Yg3Aøgt‹ãYEDÓÒÌWUäÜc›¼ÛUqS¬ÓÖÝñ¬Üb+=‚w/¿‹ûò¬täí€×N´ëÃ&úغDÀ»5‚cO´ˆžÆ¾Æv•RŸh‡€ùÁè‹ì™è‰‘êÙ¸q¸ÿj(áÂL™Î>#lùí¯ðAþZüTþqQ“OËx §®@[ý°>Ö¬!³9š‰ñ-æ°’v‹gˆaOä^ ±/žÓšÍ¡­dQ>1éMŠž@ëÓ×°oœî}êF',øˆZðTñÕ¥Í!Ü^æB¨µZNßPŸipúTðtM2ø^ÞGiíè8(;ähùã¹ Iç§Òœèº§8’ØU µ1×òÜJÀÚ’‰ÊoWVRÐs5|-+Ñ}'l2¥´þFúœ\¹µ¤&f•÷ʘá‹é!õÅ„8Fó¸1™´@!EJ€n©®¿Ì†ôjÔ%Rņá{Î:8 À¡Šzs5¤ÐE.åAž'²Ø:üõå%ÏÏ…q¿¤’ªÎDƒ.ïÑp˜Býˆ˧ð˾·ñ–Ûà§c{É»jï2r›ÁËA׳!¬¨`^õô|\5¼–¯.äL %~6k)§àéNé^¡Û —ò0ûÓ·zk)²+`·•P7(9±Û»"$…ßó¬/ô>ÀOv²Ùö·{ö#•”žr+‚÷6){“#tRkêT™Mg‚*x3\ÝíͪVp“ÜØ ÿfÍU¡ÕºÚ…©¹½ÄÙ_V/Ca)G[©• ¤ÉÓe5!4¯á;®+P&q¤3±­™í#S¿|ùªjØÚŒ'OPb3?‹<9j¬}hC5\,Àãdaó†z$±ÁI#&û‰·æŠ¥NjxÚ5ó^æ*Œè'ie€zRà¦ÍZ\‹;1rªTëká»Û¸PŸ¦p¿cìÛ 2a%;l^^ŽŒCÄd@úþÊuna¸¡¨é7 ò/ïßܾ¦%=YµYK÷ º¨ñ~’”Ír©ÉqGpzYJß{/NJHN¥ð¼Z@<ΰ8˜ ÛÛ¬=DQârZÕ@ƒù \„k‹õÕ 75+ àÖ1< +Wã\ZÚ=` l4©ø‘NØò@¼zT›©<ŠZÁ¶þîl„ˆ:ºöìªIU¢„ê¼+ÁØš6ÂôúÀ*€ ^H"Ü&€‚(TZùbkò(·½¡Bˆ4ààË‘žå¤¾|ÌàÁM.ÿ‚U:»Î3^3NOÿÆ ÏÀ–ù>E‡ú¡üõ]°©ÑœW±qkd(DÐê9n·Zþù<3z%|2«ƒÚµÇV¤‡¹h°Äþüç=ù‘HP¸U+³´h{[­¸3`û˜ÜöíöƒC ŒEß•s`Z\f3 ÑÞpobZr@î» [=0Zó|C´Ù߈ʾ‰ Gì”~â_¥ãì|u?†%R”UAÃŒS46CCÿ¼”|µ&¥3ž–6[í·ì‚¢£ªu£àÖTk~ìµkPÛ‹j~Ý”`nÆǾïàpàˆÔ+Ž²Vf^xƒ.i“PÂÿèøµnŒ©û«Åa5c©{缫ŸÔžë £_-®º~eqàÐxÅ UÞcim4ù07àIÜuš$îöÂj ;Õ>ý3w3Âúk’m§©Ö•uõWˆ¬,vЮpd×ò[µ{øíÏêàÁ±ú ‚¢½#ÉÉݟο é^Dÿ¼˜=©¸+С]>€G¤nç÷z^8lä,¼|go’ÿýcê±óú—™@•ÕêÒìºæô#-ðå–¸ª¤[ÉSØoiF[5ýõ~g¥ìeª…°Ô[Ð)$’Xh0µåhϦ)x¦'ñöÒÔ6Ö´“4­ ãAÂHÛw»Á‚ŸSm½jì$s–ó^³Îäû,58=Žòª_ôÉø¬ê//åÅLµss Iþ®ÂÝ@AY ‚ƒÈ6$ GÁf°Bo°PB#]:ì6æ>=Ë„t¤½ÎÕ–ºî ¡}*v9Ž¦™–ÖÀAB,$ƒ·×NûBO)”ù¯Ym^µh2DºÆÚvØå`E!Ç.Èj—^’Y­@ƒ†°´ ¿½P÷ã$|VSȆ,S䜴ÆSÆ?îM÷|¯ üÞµã{{I[¨o:eäeXuDÔþP½É™$ºŠr‰þ?ÏIß1*rë‚É ¦›¤Uô2É¥ÙFCrÌ¡ò=éx.eœ|Ntƒfæ<½>~.uI>YôÑäzè4›¥’U‹ü qõž¯Õ/¹¨K àuF¹±`ù ºTÇe\T逌›jÀúœðÎÁS £!(SG~g¼“~ܨ‡«0ecµ¦U¸Æª»æßÒE|&„&/±:˜¸¯Y#å¢B7;ñŠì~x›Ë«Cºÿz8%™-S…½·ñ£ÝæÖ ½³‹vÂßU« [Šå:"ìíFJdç§}Àwÿ­_çK€€+ /étxåï8ŽÐ’–˜¿f+μbC¶Èöø,€à†¢oLæE¿rÄŽ£åÖô„Öig4‚…¥Ð$o™öÈÛ¹Ž8BÃë9ÆIP4 úÁ ¯Ê1.lT@xÅ”eK‹øe󃟪”«š0ºÖwm¶¡æz\þÞƒñT(ìk¾¡mß*Îßo&ñ˜ŸÞ=e+€ˆÎω(Ï¿VÛƒf>°Èƒ?yA%ƒžûgøk¯KžJY‹ŒÊ-&£1ã‹ ÒäMFŽ)¡ðG²áÇ«/~3noL)c˜ót€]ÐÕå-[ù5Á5 ~Œä/ ‹Kaèr$>HáÞ­N.Yýå€Eª,q‘ô§» œåăˆ¹ÛÊ5o[á‡Ô·ê0ÍðlJµ5€ÿK‰û5SÈ„Õc«1\C(mzÅÎX@o±×ï0_ϲ^c¯WùsÛÑËÌòÎý7‰Ùþð÷¸»£¿ä¹M—¤ ;,Ì˨ØÎm ­ÅbEyd0½6n–œÓ._í“ ÂB_: 4ŸK¬!Bð"Dß=MÏÂJ>ŽÓ+êc°©yÎ{-6S0› ƒO¡åYŸýÕ^uq9œf|x%*‡éˆúê525Óùd¤ã8Âôùz*°“URxëBC©o×R^ù`°ÓséqßC'3_¥Ù<äZàž\§¤Š,%eÉR¥º(¡Ó½7¿$Øû•ûæ Õ&Þ_OÕÔ“Íh:qrÁòà¹(¶ ‹Λ¬ÿbñYØôûpžêkl¸}ô³¼µcœ'kw(U¢hnùPݦì'j䶭1BE)e~W³ŽøÖrB-lÆŠ° ÙïëT_£¨€mEG‡Qk : ¾‡ÂóFÏÐ@»¼ÿÚ@²äµë“&¤nõÏÔq½ê¹Ëš¡„Ÿ½À¿z2D›œHwÏIéƒÚgcQQÞÒhG3š¯jF Ù]0–'u½¨ÕcrÕ?S¯¨ÀÜí#‹wp%sZêÒ" ƒâè2w߃¥Í´è²ÔhÇäK¶¢jcL“ÞÐœØ"q)%”R æ“e„£AÇ iËGÕø›t†K©õ0ûµÌß +\ˆVZ˜è”†4ìÓºJ¡ô¬Ãžù&Q…ÁÝ÷*:æÁh¸Ÿ(Ì¿‹tàH»R ¯¨†Ã¥H(ñ@ÒHÜÀ¾<Í~U³ ¾elË\me"“+çÔˆ^ mY±ë1ˆ—¯UðhPh±éX~ªÜ²Å竱9ñË—í>ŒC°[2rµÃ‡YåigÆA¨“ñeó<çC/ŽiÇK»M7y´¿”ë׳ýpîÜä õAO`¦t‘;gÿF3‡™´bw‹É·—^IÊϱ…ý9te·x bŠ•eµ‰_ •4Ìf_´tìy$ÿÕ¬»‘Jíý‰Êª*l‡5½DïŽ4=Sö ªÞ®Wåš#6“$dÇû´•ôQ.¹qÔŠ„‹"ö|ðQQ¾«5º°½)Ùp ¥ð϶ˆüÄ=œB ðŸ¨Ýó¨epAó°„5^e«ûÅBO¿ŒŽŒêþx0Ìþ©sl ŠeÐ8†µ9]j)̳I<3P;äÜ¿+2”æ°†ZO2ߧúþâ?x¬¤:Û`­Üâ$ö›nŠÀ˜Š2ªùàÉ$\œ ¥”œÒç5VEðA-ç׬ÞÔÎÑ‘l$,ë'sÜØ£á]X—ŸðÛàhÃú%L<a#|"°·,OD¼hVAGmÇÄ©¡_Äf·êD]vÜyâB=ÃÃ&¦ÛQˆJ—ÅC°`1— Û¸DMM¼ Ø׳Iû£ßßy5áÉ‘u§ä 'ÜŠ»ðM‘ù°ó§«f@x)Î*ôò+ŽûG©çîÔ»¨|$vsfÿ…\Ú’ôÚ“ BOA¾M#í\°ÖiPéô}÷â ÿÕ¯>ä‘]OˆmT"ŽÃ6MiŒIš.‹Ç’üKêW<û[תõ•ŠÞø»-ô숰¨4ÛÅ b%Ú<›øébMâOœñ½tê÷«°š]º>—!žp©U¦*A-¢dy³Ü4ÜOÉ=²±q¬BÿM©mÀ/ÌÃ\QoFúÚ_¨#?7á0=³ÛZ¦ƒ¹ÿ~“&q#ožK3Ü5¨ÖT6tòÊDCþžÄ© ã„å_šãv&"°šyêÓ#ßüu\GºÔ-}EQÕ‘ÕÕyèÕ€ÎÕ¦5)kØìr†ö V>Ü7hø¡V¡¡ssû=£—X’—ë¼Á ­9„‡ ¬¼œ/æê¾yJz•uîGK §ä{,~¢&Ü÷JÁ’ÇE|ÀÖ@¹( ®ãÞ1î'%”ŸØo¬2Æ"ÍH¸!Hÿ}ò"Ìé2TZ¸ÖÔUÅI:q¬ §ë›“™šý’nÐbViËÌZE™%k3˜eýÚÐ ØÒ†×ÀüÝô¯ûG6ù¤·º¬‹u@á0…./´ó  ÖjvaòòÝÛ±¸†§às›ñZÃ3ÿ|JŸ³âÜ„ß&Bª©, u.üUS6I³<>Lb¨KïЦ$HùážH„ttnÄý«³¼c>åÉš. à6‹½£Ñ_*óDR9p“Z©*Í‘cÊHÂ&±½ÔTàÁnìe8ÈpÈýžÉ†X÷gzfÑ‹L&!Ñ®,-Š½Ú2&ÂCA ÿÕÅh `Xöÿr-ÖÜëXëY¢_ȱÀR´/ê3—ö€ŸëÌ®‚f}ZpS~eÀ×ÝkÝ—YÆLîí’ŒÉB x)ì2Ý?>ž ê✠õñ7n. ö&Þ @§#Ö/%ïñg¾•ø8ÌX¯"*Äí8¦ÝÇuÈXcçtÔ­Ó¯Ùâ_Ïéx± N9†¥¨Þ„œX4›/9òB‘–ÎÔ-£)øtÞ(VåY»t-Ñ# 5zZäÝ@HòZ4<¡W”NÅU_ÇÌc¥•@Þ`Y]´ú)£¶0üÙˆ‚Ì%bÅäôbŸ ÑÐó5 û€q×<«q$ÀÜ‚¬ køL}i®«ÿgf`}µ²r,b`‹©„ñ*Ä»»¶¦.WRÛ¿›‰ë[µ_¡nñfŒTɵPòNú)c᫧0Ó:‡—î—Ã$O²?¨ü ‡9Ÿ£–ü ƒþ*Í€²,%z‰ …¼¦4³UZ¡É™Ç} Ο1VÂË-Í e&ÀÆì%Z€L‰ZÆE¶ªü+ ¶¤Ìé¶Ã“’€©ë5éØý¶TjyÒÒƒê@ m5º›ÛDt57=¯Ó™ÂX.§’í¢Å&Q"rýmƒ}]~Íl"æí¡r‘L}àØ qÇ° ÙŒ~Ø¢Å$AàuWÓÖí þðõÝ®ë«c=<àá fç=M>yJCAºé˜lÍFª„L?;7·/ºjŸ&*BtÄÄ™€JDª©:m6MÑv[cþ]×6.¸˜+-ÖŠÍ«–Ãg8€IT/tӚ¡5䞎!–—ªXµ 'Ķ抬yaŠW[‡ÝNÍçWÛ<᭦ݸ±16õ¡fY/ø¿ŠKï™9î—¥ƉYîP³äF_rá³þÃä4='÷æÒŒ ~FBNšsÈ}’"»"Ž÷7¹î1 ÛÓ"ëIöCJeÌÍ#²²»d•øFÞË.«á1'‰j× ÿJVæNC0bbÑà˜"(ÕãÿPÁ4ê:YG°…äÂêë˜=Ì\6xº½ž[JojïÛÝk©2° ñ$üñER5âfö¶o«‚"¾x}ל³„!~Œäf~NWZ®gÆ!Ít-—[Y¯{ÓÓâE˱¬ÖFdk¶ƒRZœ ¼‰™ùf[Œ@öf e°“k/¥&ÅÑ!¶+?W‚ÚºÎyÐ:m÷¶‡|^#lý˜xz'íþSÇõÎ;Ï¥7ù™52 g‰{µ™JíªPÞ 1ñùõÒLIÞ÷&cŸ>nýBô—DÂŒIP m…d‹ÕuZfó¿—w`c­²×á>%&¼7(¨¡XÑï ¹9Cèì+!qæÒf§9Î ¸ —ÆžžË¢hu¢ÂK§àϸ–b®|q!IÆ@ŸgoC§Ä}†à^(§‚ú‚™«^wQχ‚Þ¦Ê=²¤¡©ö^Ø \Ùô À·¶àkÛ/äwsUÁnrßi/A•1W¹0Çj"eôÊ®^O?I0»¦r1~ù¨Án£^#¥PJK¸Ñ¤ÐÓZ\pü.¬šµ=žà-'HÚeÃPZ ®ÌÛñáî²è>IÜoÚ»m¼b-P°'¦¶†ëN^Ïò0M tÌ€!¯oÞe(ù L„©• Þg¹k¸_ò4ïž=Ìï˜sï2÷Ås¯k¹¸†‘{øÀ)—À;J¦ Þ±CñÜî9—€—¦›Ô8\úL:ù7Œ!ÒE’ëRæ…my'³7‡÷½)Åæ³àý‡ï9CÉlŠš3&gc^ź+J ïK9Ò§õú¬6”'?ô9©DŸ²/Œ»ûéÔrR–]vA@ÏJ+m•d–™ÓÈfÝm…ÐÑÚ>òNdÃ6B›¿\Õ¥# -wn…PkÞ¦jN‘Ù:Ôí‡ãÂPÅ!–‚5¨À8‡[vòn.ýþƒùûÁ/~™âäO¨*!Ñ*9ÔxÍKpóÄ ŒÛó5aÄZã‚ïnÆœuŠ1ìWæÃv›8¥Ò£¯\€¹d>ô¾u[_râocåd”ûŠ^Ÿ_rÙ•€Â¤ ƒŽy,•×P9ý'ž£²[€-iëú³gK!mðoœÌ XvN›pàš_]áYÑ‘Ž¯ûñV- AŸ‚]ó®èâÁ‡ˆ×ÕÒ!ÒOëŸYkÉ©ÌPšdS¼ …?Ôõðp•nHbç²3¾1-F!¡zø}¬z75»pn´Y ®m/BzÀ:3뢅¡b÷áìøÄñ)±ì‹'W%DàS¯_N§µåo& 62ߎÅ{Çh»WC…íA:šïD=¡ ¤ü òcÂÈD=ë¹k^yA^¦h=Ò_©;r\ë‹,2àÞ³"äCJA¾»TŠ °(ðt‹ƒñª²Ý…Ø {˜tåøLv‹c€6F2©N$#º_òБÙNo=»u@A†D^Ç—B€ Oþ’ ê?ô ž¤u‘îU>li);g&«¶ 7ŽI·Ý\ ƒ?‰O††N•*¸ßÂ#W˜½xå+©å"þ ªyYa¨E€–ªþ’¨&“Ð6Ø,cÉ푽¨hÛï”=Òß®V@ñîcmY,†~p÷íR ¢+Çž¹)¬÷ ×¼–%锼ni¶f%5ÿsV]í“e)C\âT8:2ÒÄÖƒ™Ú»Ïî[`Ô!´KÀ¶¬æ”ƃìöº¼•Œ*ó‹Amq­Xó˜ÇGò¢B…¥8·Ãš5™åµEé‹=g¸Û+T7µÄ›0û"7Œ½„:ÄcyIïÂRœ"1þ/‡;¨•ß¶Çµvû­á ”U E? ˆtXŒÏñaý_'&Mk¡b™½=1t‰§‹áOO/«çz  Ç)ÀÜû}^€ªkëÜù¬bÿ¼d ­âÃÚ¬õ£ÏHO«Šˆ+‡Ú&À{GkC,èE{” Â>×å8þ‡Ê”aTLm,g^i-ÚÃ[aônàÇ)WàâèM*?LŸïì]»X:÷ÁT¿))Ù­ÜÊë† 1>Ô¶žl¶Ä«¿Â$¤Ä óN4á¯t\JýÑñÝÖ˜gŸ8œê|Æ&›œßA¨ã5/í“BÇ+`:OÄð¼¨^”æS|xW쀾ûr¥)9ƒY/—ÞîÁ š8I¸°5#³ØëÊE›p/P>Ø\Lò#6=Îô…ÄL‰ÍâÛÈ:ÌŠ_ð¨ñûå\ªÝG‹X*ë¹Óc|çär¼6;n¶©–¥@T嵸Yqä¤+‡*bUnW¢·ƒlÔ£_j‚©ñ„̯y‰ÂÚYÅu¤%m䮯ÁvcdµœÈë-nÜ!ü ÇÙKbü9Lsƒ‡ÈWúfßsÃ@|ÞH++XBs눖K.ÏñÉþTôá2ê€oiÐvAŠòWÿxFd³¸ù›Íz÷˜G —QjF›²ö¨esßPŽMF¦è†³W×zÃ=ÕZj¨¢“¿ôVïÖŒ“Ä)ºÑì|¼ärtæþ]ócz«í&\©£ 'ÔJÔ(‡ý·ÖùO®Uttdï Q³3±í^ÿ˜0C"'~»Ú™+Ý0D—@´ ÕmNŸ¶Bté˜N¡ôoÃk`Ðw˜¢SƒBÁ¨|¤Ž ÉR6o¤L“@ƒ^$V$ú®t¢š§l‚¼&wŽ%¾öù¿b9Uñ¿¦J¸?CȵúÚÍV)*–zÖTO@Ð0§2QV­‹aЄñß’I(÷¥ïE_aa©ü‰ÒDˆ{ƒÿ2¾2›º³7CÚ£êÁ÷ƒŒ.WÖö¶PÝMÆ 6®®g¥G¨õ±~Þ Q.1ë,H“ = ë®H)*cÚܾÄß³Fü¶tYÌ%3 Ê#J.wýîêî}Ê„‹³nãW¾Ý:ݘõâvÙ¨0¾a]cൖšÂòd̈Z”ßñšãWš$Á;L¥€ê'@÷»£–õÝ´)Oš—NÀxNIì²ÏÙ‹¢…×’Ì·‘"¢Fîp“*ŸZ°ÄÈÿEŽ]VUà< >áMfP’ªqe-¦ó*¦VI8(¸î½N³6y*#NÅ-#†-µùWw!"”Ç¡ÑýàiQþ[µœWæôÆM†"«Å³ÈD Ï`˜0È;sÍz Ž$¹ÈÕgiõ²Ëie=5þG×2ê²|ÐDÃóå G}Ajñç¿›ÚbD|¸¶ÂBp•1µÇyq¥»’iû“Òœœ´çEŸ“Ùõ µiÝÛ½eÍ©"×dE™´U?7ôœuNfX×%¥xËx½cÐP=¥ÄTºfp£PGæÐúÆ •ow¥ #kƒ rT ã¦,·?} öCæÀ×Þ…}óèK1ý¹/ÐTß’è¶{ëÛሠÇ!ª×Ahµ'Ò(;­—×Ä­ïÊkå6ÄiáÖ9Qè_}‹Gnõâßò§œCé#!ey(ºeBóuÒ.1RYv³âñÞ­8øy‡ƒ–Ñ ÕIÖhÃÆQ J.uðoSzô‡äÓ¾æ´Ö‘"8„óñIZ"=„®±&ç¹­A&bÜ ¡ê”*d»Žbí ˆÌž3›@ÚÖñÝ_ŒaàõÁûY<0ËöŒy,ˆ®€¡þ†ÛÑC^ü“hC<ï+—Æ÷M~;‚7#U{0X+ž‡LDT…´¤]î:ʺèË\kÀt¤øVe‹=ÐOœöP¸®g} d;íÄ9lÄ"FurÚn.î/ãê%åíË‘ªÌ1©!l—¥ÌüJSM%ûò 17á8s±lÓ±,—‘%ªŒN ×coÐJÓëûÁ¯¤¤? ®ÈöÈ#æ)•³ð}C°’l¹·÷eàY ÷ó˜lûÕXÖXYBè0ÊÞPŽÇiLÊï(ê]onËÏöÛvï`¬o=0¼fªõß㨼šU5 >HäI!Èbq¨6,Ž‹Î1H¦Í{XäšÜø4/H—éÌÃfæ.ž¹´:»ývD…’ªüüóÆ#k+ùÆÏÛ‚ÕcÉ~ÿøTR2»ÿàµY¹E,ýJé+ù´Áý{ÏÆ@e÷ÔOH¡‚©ÍšÍ,¶ç,mcæiÚÄ™-_ÂkTžîŒ–ô3/Ë6?vƒò´÷W;¢í-¡Ä„z‘¥G…=ÄFL ³ÐbáÖê¥Oˆ;‚ˆ ø é ¶‚ÉœõE°#†ÑèDŒõ­º“l®X.†€ ÃÉÿãÑÞ­U¶S€¯ZŸ7º(/pN¿`Ùú=«+v>vVîÔfBõ(f¤{Tš!dŒšn÷Ó˜tR΀Iž,|Jàñ¨Üu;˜ Ô²~ÏvÙ—6ßF0ÞˆgÉž]zÝ“á¸Uí M€7×ÔÉôÔ¬n Puù~>}BV² zÛˆ|:þÑù€Œí… eë(7Š¿â8ø¤SQDÔOÔ£Z|§OÄ‘doæWMþ>êØwŒ¦+h8ÇOkw ñ¶‘)úý¼m4J£ÈÚEC; ýö=gÂHM„I­<ç9;ù„·¨Á±@K(Õ‚îHäºïÏ¥Ç.»fBöc Ž°Fh§M€A.u El-Ô³¾ý¼ç)édÆîSœ8¾az”è=‡¦ã$Ûb/l+ésRØÓ>ÉüúHÎe³{¹÷Ãðùê,­%r3Çl f¸ã§ˆuål‰ ^¹NÎ0ùPÚë_Aƒ5ZØsó»&ÝX2=T”‡>6ƒ”Õ¨üÑf¾1é:Ô‡ô=¬3h­²EöçáÒ¨á®fKú‡L~a¦““³õ±Þ¾Ö«½üï5ÄŠ>÷%x‰1 {Qön#4q¸ú‰ÍGš“¤²{w‰ç@Ò;&R^ïùmö[Ìè<;%÷ŽkÊ܉‘.ßÖ²ðfʵ€“Cî65#^|ÀÔúË‹ cÈãùw!÷ôç=Z“˜ Ò¿O²göpQ˜õÿãò䨫·šÑ¶—Œ¾¡”’á+ìȺ ' <®%ßG;dݼ³¼ŒC"ut9Àó.“®]p±“u-¬ÈÆ… €dk¸mØ’Q$‰ ¥ð}l:sb¬4å³}h±¾â\›…¶¸]ƒoÛ‘ÿ˜±ÁÙä} uI´2©ÂÔ¡ô°§«|¯xR Ñ+Çëå›6Xr‘Vn3–ùÞ”@/€,üÿ'UÄ¿´yƒÙÓ7þ+ø"RÄ£?§O†½N—6è¾z´C¾ô­ýF¡¿X`ÂÍ.á‹ÂMæÜ÷å`nc!òze﫷ܳE¬ý¯ù£yRZ×wĺ¦AkóØDû ,¨jn;úúºÏ ÷„NÿŽß#‰Ñml ì±. úw‰IÇèȬË所e¸JÓu÷VO§(<,j$—‚ñ× iºÛ•ï…*§wà]ÑÉ Þa}ÝÙqìΙ/Á¶‹ö¼AäÏ1¼ûÐähÞã@f–rò6äÓÔ¬qUUêÓ|‘UÕ»º_ŬR™»¯a…Œ‡™ óòƒ˜w-¼’#ÓlÆèpôÙ?Ø^Ô÷{Ó/œûûæ9Þ¹4šruS½Rè2zôéRdâQÊjúý·N)*XºR{8ìv{ÁéaK/„Ú-bŠÅ¯Î§¶pg^›µàTC˸4ÖŠh÷*w–¿ßtÚ;êƒúá£|ôÄ£9ȳ›“wš˜u:Jm»ýýÊoÔª²!½O¨Æ=~5\Sÿ3b9Q†Ùá%~¸sxÔO³º\ѳ&ª6èÈ÷b"n¸FLRTeni$¹MmÖ/þE-±8 ÿ¦MÖ¨ûnôè"¹=)Íí6É ¹ÄÍ)>€††•ÙÖü˜•@jÿû£/V3ɤ‡|=¥ï96EÆOƺ–Ü?îFÐÑÄÛ$BXpKÅÓ5— ÚA¦Ï3:hüט`yõÖìí¡À4™Å.tE/àLD‡ùkS•û¨%bUN #­í7´qZ#¢ƒ0¿ô¥=,ðSËì™Þ êâ¹f•ü¡]ŸÅŸE™¨¬[Fó |i:ÝÈ2`ÀR×2:©÷vD  ¯\—?×3Ÿ€ÙTrxw¼–jð¹ôK)¢. OXô¨ V\ûk-‘‰6Qö½ÜßVúf/@=c1ðÔX'[Q©Nµ·•iSÚc9ú´«¶Û¨Ó'(ùK †Ùe"bôñ"y—p9¬ÛƒSš­cTƒž?sÛUØöà`—ÞÔ.påx µ …B"Fâ⣱N\è‘%!釿F<â‰N3çn+é„y¸Û1{ö⩪§TGê]~’¯ÿDŒ!ü´*Ϋ¶è;ÒÇ!L3Ø¡ýˆn›ÚrÜÖ¢œU\ä³Cÿ@´K}ÐQÊ‘ATééhE7­Ñ´Eà(Wf¦zñH»½=y¹Ðfa"•879aÔ{€˜6ú¾{ÒšHw*#Ü¢]?r"E\YÊ Ó¢§“´=µOrL¼6˜fÌY–¼@Œظ¸ä‡ù{eXt*¨f¿/‹‹”;axÔ¥2YÏTÁÉ,½Þ©Pš³a:6x'9.J.2@)M‘¿4hSúâÒWv‰:hƒ“û˜®¶¦”t·uW!éžc÷ßlˆ H#_þ‹ÉÀ¡m6ª³ó;ÅæÎÊ)ÙtæAðaÔ¤ÔRX迨¸x0‘<9ˆü!­)J?k§Æõ€Å ²jD$6Û©å¼YØã‰c=ìQ·Ýƒ&º)JþËÉÃö•:r5ǧڽJýö·yÜEïÝxè¡Ñè˜DK瘉.ùÛ¯‡]x1ÖKrVê'^ù„{v -ùÁįk÷’Y݆ÕÔk ã}òÍq¸‘ñŠàÿª®CpÛ"ž6´ˆvïY¯Y§zöŒâÖ#SÚª Ä— Ûkõ¶u/wr' x?Í[ôÀÞÉpŸ%ü ¬ª.3ãØ4”;5íÌ­'X–pøâøa@¦ýÕ±Š¢t|ü‚y‘ÿ Y†šáƒf°Z}>KêëgÚÖ(žêCO´ùƒkNüì–+9öþú—Û7ö¯>vÕ@OS]«niëHo~L$}åMR‰¿¬ÎÖovfãr4ûKG!¿‹X‘m§vvAä¡ž0²¦&"|ØäÕ³$œæ ú¦–{átà£~‹o8m+wŒVEGWé^•¦Ìå÷ § \͸ÈDŸÛÄ}7õ¦¤œ®\÷ŽÚ{V/oÏ6 ÓYVÃ2:¶ùçeÁY±æéZõú)^ p;W]žn)ú1…)óÑM[/óx °LûA,AB&DD ?g?”ºóoÑiÜ.Ä-µóœKý¨é>6ø¼Ÿ!¿.² ¾ò3AJ¤ù¼Ñû ló°9Ûæȸ^šEÜV5:{#\=”Þ¥)+NÆ à©WÜW-ï†b‡›³,fÐOwGRt]?j›˜A»(& ÊÓ@ I‹;…PÊ€"%wÈÚ3̲ÖÀg{J÷ûÔÕÃûÆ]|WÁ¢Þ¤Põ¤1r;l¯RN1á_1EÃ/í|l« ¥öˆ£ôÊ墪©þb·+é¨kD“œž³âcÑæó5Ô—‹t©3í /.°‘‚-• Ã÷ÚÛ™1ùô3êY/RW¼×ÚnO­ÁÒ#pâÐÑPö·º×pV sÿBÚ î¯oôª[!VÔy2ddÖ “ RÄ”XáÓÜ‘~p‰ˆäë’ñ™ª ²AÝT)õi7¦ïSÃg%¶æÌÒ Éýa¡ ót¬LnþÉd÷÷½# sÏî/Þùu×ÁûÉ ÐØ\ËÇwyf, ^Xràuõc” ®Œ#—‘J12aUéœÏSí\ #¸8öSÙ)` Êr¢…ø\‰V5RË~z0„¬ü'1¨ƒšæ$)©S!Pƒ†ÿF‰î[57?ìQªÓÍï©+Ä!Š°ý‡/xÊDªö1Aí×*=(x‚»oT`9yѵÞýÉí€GqØŽÿyµ¾Â5OP¸G‰Lƒ{|*wÉ$ïF`EÒ í‡Yü¹fZèâ²  Øûñ¾V€³ËÕj|%›Mý&q}˜)áØ’g+?C¿FÍë0±22ÅÊ—?T¡Fj<.ˆ–EôF‡<åø3ü‚¨”òìSƒyZ X"Õ‡ˆ=¥’Ø¡~QcÓ>?;–O_]¬Ÿ PØÍnÕÞš9$Š¼ÿY¯Yµ"må€êšÏ{WBó­Wä:IXfѼÎÑ‹7® ù°»¿˪YƧp#-VÛ…E`"?IóR1êŽ9ØìW¬Ãn²\ž\´vtè‰^ÓÁ|¬ÙlÞDþ°`.Ç¡Ášg²”?mß!h§ÂÆÓ¿4ú×-``±«å6nâäÒã#3=Sõ‹¾<'ÿXŒ¤»@銘öôdc”{z›o6éÓ=úÞg©¼Ç©ûëñç„ú:E•ÙÀF€µ¦qXÎLÝØO`8D‰~‹¿À£DNµ›¯jÎÁ;¥ƒy$Ä8ΕñÓ2£R˜ïžnH6ÒÒ­÷¸¤©tx·™{³™&ß&Ýxãßeñ߇ö„R"kdrïË¥ðåÆ7ï8Ÿ½ûZ†ø£p¥‰k9§‡„ 1æЬŽ2O¸O·Fƒ±XŠ|U€ŒMsbõ@Ó뚨°™›j”×é"Q’ó#Ž"8ÙzR¡G“§3 Óé}ã‚\©íËsÔùDoŒœT™ÃnÕˆõóãÑDƒwç×h}‹#¸÷ >©—`­®÷ä8éwäü½4OL ¢ÛGõœÉÿXlBl§\x\„µà{Niÿ¢û…Q/Âv9ˆà¤d[äÖ0²o(&–Bž¦IʨZ $´mórè(Eñ9E”F»n¯Ch=‚ÕD´N«BQÒV„:®QspùŒ†4Å·þõyÒÔk*sð­Êû§{HÆ¿>Š-IÖÄŠ›×Ï8U¢¥ÜÖYC»#ñó¨æŸšËæÈå.¼ï+aÁ^º¢YÉUM);dÂuØ>¥ºBR*È7pÉ„å‘A£=ǾÌÕ8)8Æ/Ó»–ýÎ~¾óù8P; -¾¶uVHÔªíª.=&Ðo» IlLט½‰:ùF&þóÃ×£nžæ@wI¨·©±Ù»_7«dê+b€Ãôó’a‰r·º\bÚö¡«¯AÂ…£ÿæ Ü%/‰>xõ H*%‘ðzí*­ð(† ÔCé­(2aƒj[îF”Õ†öýeÓßäK2yŸÛÇûHýB àÞdéõô®±UÍD}gáPúv: ED¨[ñµÜPOz)ch'r W#ÚOí/g+àÑ û–:Áùi0ç›ÊÚ/ìkñ¶E˜9”ZÅ0‘Ùƒ_ ¶UHœì‡«Ð Àó4]{x‘ý§1tKªvLxlÊùš_m¡¿º3ûúÿ°œTˆQ’$)èƒrkdñù‡Ò.¹ *å°Š[ÊŸ2È 2 Ú°¿¤¹ÑDÓs“vb”N<⟾‰K\®r”»:ÕÁÍÛ¯'»Þ9†”¸æŒ÷&—=‘æH£ ß Ü÷ãðh"{§.Jè|nw Y&Ë»×èÔóR…“)âÈyyVôVÙe8W­ðQ Ph*qw¦þ–q,¿Óøií7¸¯Ê½OJ'pÒq$Í—vúCÃid0=Ú«d Ø×ÖÎm!ÅtcZM¤»¤ÃUsQaëXÑ& ˜ôȹÍ7],:95.V8ȽŠèäÛmþ>íÓ&ðc ©˜DÝxm0õŸÑvÚN¿I¯”~°¹Oôæoö>G5‹4-P±wö°qÊ> ­ê}ª¡Oh`iMâúîÒ&6õµu±[ŠGöJïh‘±¶LI3`ËàN)wÜ<€¿z$DMR?°iøè0ãd õ¨!x.‘ŒGý ÑÇéÇPŽ˜ÍUÓu8¡*C!ïÍƳ¬æŸ_7Æ)¥Çgº˜ÆuÛüH¯`Ì ÷[”,œïŸIîI±·‚IfwZMq”‰Š i²Æjy´Ñ¬Mf óI!ECOj-Ó‹¡ì—¹ªCWMd{yKz¸ß^n„Ï­§›Ù·í¬POçù¢ Ø=y^µ]œ:ê»ÈÙ)"_cSíÕX×˵£ÿ‡®{Ø~#—Çÿ6¨Xü?Ü{ Ác„˜‚õ-3ê•‚d¡.Ë2t…¯€cìoÞUg†Zî@-.‘¿ˆ¦{ébÖöüEypJ”éqG¹–ϧ)É»nü“–,sç™vgÅõ …VÃ’²’cO%c„ê$&›øQ2ÛónwŠ;kGª¾qéëY`9‚ýÏ@JKé­PzT(è”]º.øI.tÇû0ZónR‘"(£FæàÎv„KÝÄïZ)\´lÃ(}–÷a¥µd£Õí!Ÿë¯2FcÊ8!÷=02ÅòñÀ¢÷ & ÿ­<=SE½ÏäCwòÙ6ïÙ~9¬k[sÎ¥ ÍÖu…9a xY.yhð€ŸB±7›Sµ¤vš±SZ{¶6½Ô[Ý!6È]¢ŒƒÚR¨¤±ô½G‰°Œ8quÝãmÖÍÊ9ÔÖs8ÊN;Ù'ä´pÃd„7e,úll7í¯ûPZ±•á7ù%Ð\~•bl´mçæž dšN[å4;jH¿]ƒ?|·µ6$ÃÖ$ýu-šØ¯îŸU竲”}Eãœd@ûÆ;§¿Cb<È3ŽL(| X·°hy¶´®ÜÏËXÏŒCèßÈÞKmSóXÅ.$cõ‹•Qô^(b—‹RÐGËŽC &r÷UG ’~‚œàtváàŒ \P_,VøEp¯B•¡e÷}5{o$°$8¥’L 7©5S$åLgo634hèV)* 5LH«8]êúÉEþA¡®Ïf€¢!µPv'²L¿¾$EÀ¬(Rï:„onO…2k,èËÒy_e]2ÿ¨dÅJÁ-üứ W[ Ž5„ VŽB1o»u_*n˜>nËÚjÉ?ŒàSjý>å!… ½OK ¦ï*Œ.PG`ù “Mê£ò‹(¿†<Ù5bº¢Hû³èÏÀwK õ‡1b-0$“íýRF-Ž)ŸŸç½·èèY‰D6¨¡~ñ~&FÏ$hŠ¯Ñ’ìÞ›¸ ×³àªÄ6û-d`Æ¢Ñøb¡™-_qOIR“HÜŠeÀC¯¬TšÏ2ûüˆ«ùϳ¥}ã´hcKC+ë‡2{û}²[ÝT•£ðÑD‹Sý&ŒšßýúËbYïÓ¶Ñ&À L+û5}c`IëB„Sž?ÿ«Ø{Q—!gÐqn%kX@ÞȦ‘ 31 ˜©³|C‰?´ØÅP~¯QoSàÌ~°7¡¡Þ“·[òÕæ¼9z_Y¸ÏÉÜøö ;UÍY”ö½£lx…&•EÆ—öÄ}'ÃP²³mjžÌ4¹Y ý!~uN$ûÕëTs4wÄ(:eõòáU†ÓgÈ‚¿zt¬ö]tì`’å6a4‚„ÏOÃÛ³­þA¹1†fvÉ$êÓj‘SŸš2¤²¼Ènà™µwÅÕ%ò_a1<§#p!áå;R¿qx&W+w×`b|©ªñ‡õª5ÍŠ÷Ÿè;X‡1—nÓã7ÆŠÂ=‹{Ga]÷x<µ½ÝŸ‚s~öÍ2ÓÔhúÌVdöVœÌéË õøa½œÛK8d9­v5úv-àœº´·†áÞëu$l[¯³ŽÁ!ã÷^c×R|¼È4'·;eP&ìÇÚF•¾uÿt¿ÔvÊÎ&6ë<{îÙœÄÊr@¡nÂUù¸)6™]z§ün Ñ`GÌþÜÆ¡mø)&DÉWURßÂXsyX™ <‚<\ÌÜá Ç n½ûáÀóÛOVh0Ç;ãÓÙK99,28g‚œÌò-ÿŸf;$á/³ša0ªsÏÌ{‡!“äsE€ìŽ24pqŽGû nZži*dL^>¥úM"èÌý+½ˆèQò[ÇHR>µùœ0ÍÎ,—Ø:ûÆ›ûü É¸‚¦62ïŒÑè^)·øê¸/­¥ŠL2 Öo´¡ž˜ëG»þ;F=#Yù¥ô}p‡Wõ Tb¤*5¢G #h.$ƒ†î}»ûhöÀOwþÉÉ’'[&U¸¦e¿ç¯n6Ö“"*)žðŒ¢­‘ªºWZ=.Lò´L¢ÊYðÔÕsgÍMwFè÷¨àYŠ¼¢ø”èèï}ÀO'ĸáçƒ-;yš‡Ÿ€ì ^/¹†Ômÿ$\ ø;pÚàèÂ* bû8.'Ó± M¬©_—jâ0j!t;V¿­˜Qò=Uˆ!mÞ¬Ó¦#G°_‹·ÝcRŸJ\ N†ó@°M¬­´ÝÈGÈ áÚïóë_ÞYa$.òç°›¸t¶ûJëª,ºro Dï0is>ÜiÊM‚?š9´¸7vSý0¶ô'}SÚ5úÖïºã>{Y%<‡‚Ôù$J .Þaóe—ÀK¶uüæ–JÕøÇÊ­ž#È8àÍ£ÉÇ×ÈS¦žÔyj4IÇÔ%º²æ´^F£k„ÇÚÃ~|¹eßPÍw|–™ãßG¥~¡~‚ñ²6', òÁÿ\u †¯\"õìKÕ\óÉ«õ¸*VwËb¡€ÿG'ã¹ý„reÏÇ8op±ØÑÍ]Û´mòzº$[ñ¹µJkŸoñq.»MèU5Ïɉ€ l‘þ]iðÊDNMš?þ:&éí%ž_ÊÊqÊ8#ÊÒPRŸ÷›S…Vª¨Ò,Ãetrà8y[åÓÚÆ«tÕ­ëØÄUËzÅ~¥»v]:a÷Éö•WÕ‰Ó°û—L¿´Á·¾Ð}™š–Ë“0¯¡f eR¹a´û¬Aâù_D_ü%X6¢„ôþ ž(˜kXöú~üS‘¨m^P¼DÔËæ'oÔdÅáõQåi‚η(¢Êiµxb ˆõÞË¥àèj"ÑÓIÿñìÁÑ¿NA!b$Š¦¢:(n!“Äó§m÷‰Ô^¡,xH!òˆU'Èy¶xÉuò3Éy…ÄIæáÚó}7Šl`ÈD£ {ò˜&¹,ÑÉjDÚôÙ¨EÆ&t1@~Úv–c‡ARÍ.åË©1iR9ðÐO…S‡›ì£P§ °Ó¼ŒF7CõÈŠ¾¦)ŠËÜZÊø–×x¿›!®3Üõ'¶U¬ïOÓuSHÝšáÇ•ÇnÄÐüoÓöó¸†äøßÉˆÏ æ¬çr²7ÑdÕØd°k µIYá}éi3Ķ°uÚ@oP‚ï™ÄÙÆ<<‚ãëúh×Ú’›»Û W͆fsUâ<ç-]:é~/MõZ“,Y ¤óÆ.Ö@=ÃýºEïKâÓ‚½Hq"4-;ÏhŠL*„c°ôPªŒ?‡³Ë/™/¥ÒNþS€êBõ¥î_ÂáGýëà æù²û‰þñ`IËB˜ŠÆOÌî&Q»t‘:*brçãªQ´Â+þ^÷¯zP #`Yµþ«ë¯w½3¾‹Æ …ã¤zè§%ÆÕ¢kw7i÷<ÄеSöHo7v9„]òÉ-’T‹µ˜¥S?Ž¡ÛŸ“õ´ßKÞƒèói صïÿ QîD„OÚžÚè¤V¨1‡ÊF•`±³îñ4xÈ–¦S¯všã2ÃeËM¶Ÿ×r wõATØÞû©¯rf±ã£ðûá”EÝŸ³•›¬aþ²2 Åëýž»x¸L3´í L¸Õtµkå.õ'Ó»%_˜1çm& eºG³8‚aã þÊC¹o|ð­GmHfÀRVÜ"ó«ôd•¿ÔÐG^=©ôsÐzïn%’'ÍùØŽŠäU ¦ûDÌíجCÊ&£:„3ç][¯‰cK÷È›Ì ˆo ±Ÿ? å`Ì™k<7Ò‘Û8ZÉ37jÖ’v >Û‡ QSz™!Ì÷È~ŠЃ±Ã!'=ǽÛòy­Ü?³°í*åœúˆ½.ÎÝ™Ä&NÚÈA zxÏÑ&˜¸îºF#Å‘]9ë\F67‡9ãÎÖøPyòªXto,ùÑäÙ–ªà™õ%Ž Í4ÀNg´xÚá¹?H_0 „ÇowFa¦Á7XÂà]x¥¶@7Q|æ"ÐëÙµUß7NþHÏ]]òóÐFLlöЖ-“I:ðcM1 OdìNgŸÕÌòøt½Æ±×P´œüç;õ·ByFª_ïïü4PÙ¼€G˜ú)ÀÓÁ(Òl3²¬+¯¡~œr3˜6ó¢ñužåßëÇ̺;®I[Úk%Î} 6úãÓ¡lÕè˜Àä7b„ð¤$s3s³rÈJ ™Ü7”qÚÒx¹@r’˜‡ºÊ¤L”$NµNƒ\*/…¿›õ’ýœ KùW¤Šóó(ü÷0ãÕ}ª’£K‡{7Ió| ›:)ÜYÖ¤¤MÖY‘Š¦UÛ:1‘*¯ã^3ÝÀÀÞñZ½#~@%¸†S½ L|MÖWjJv¯µÂ5q‚ö9<Ùƒï6B‘¯y Eñm®_“¶à´o…YiÄÙ_AÊ,ÿÁä§}…GCÕÆ«û90G/ciwr$ÕÀ¶¹¼Ùzœð—Ÿ™}DEÜ¥}³V0ó®3ö£¢ÔW©¢ÌB‚4pa\"‰ïƒ „½`•ºcÎ0¢“°ò½ 9£!²H²¶ÃRÄ$“@Ï4ð2bµâ:áíCdýð€è¨{@ôÂà©â„pYÒúqw0Ne€ãDg¬æŸ@Zý°þ,·©Ó^Ö9.QÀ9¢—ŒZwÃ|6{¬êXïpñw©­ªìتæó-<‰{TdÅ–G°ËyŽ°Ž×BX;HZÔsš)êƒêÞ±ÊÖÕ5•Ž]{il@¬ LÓÝüƒVk¹V”æ÷¡ó4*v¿/H Í<Ÿ:V½È*ãùÓ „À/Àö/n=W‹HÌ!AA7¹Ó:•Þ©8*1cõÀ|\NpEô_Ð?øãþnëQ?&·j¸ë*it°öñžr©ÅñÅØ Y)¸÷o2¹_4cÒ›‡GAt·òÃ!t4îÉï5^«Gï:K›X Ö!hBzA_IŠ;6Âý ¡òLðïÎmQrÐô¦Â¤¾à÷äIÕ²¢DBCxò4ëá¾wùí†7@ŽÜVÖÀKŽÏâxÇVžöéY臑1håwŸ2ʧç;XRSkÔ¯3õ5>ùVΨ䘽»i«±'ß—÷kvà•·<µû´‘‹·“˜n-.cj‚y W´÷¢+£Àn¢|ŽŽšÇ••ÿüsÙäÕÛ²²|Ë~ R¢^®,ÐNÂÔyÉÐk'Îjt[ EÎ×zæf…ÄÝÒXÛÛ˜ ¹è³ ËJÍ«¨fdùe báë9­‡Üî8ï×Ö³sw¯Shh)Ó µˆE¦ F0y‹Eòܪæ›çif³÷gðI]Õ ¥‘°ñÃ5üï~®"°9Ý36VEé[H¶¾ªuCç÷ Öå¾j>oúÖH©òôÒ°RõÙD›CšL5žJÉ잨­¡Ñò…«åQ¿¯¤F~ÀÚª’R­ÿµÏ(¬´BSºÿ•}¨—8¸}ß.D½ÿ±´•ͽÊâó–žú YšŠ\‚¡!|]ýoX®@ÅojT…:t •«äeK¯Ž!ƒÖ3’ßFmÕn—UôÞÚu„õ‚?5t,b/[«d §æoôÖd¨"x ¡Ž¦ˆŽg_ kýJRTÏ µ½ÛEþ.(c\¢÷-®qZkU –ÃŒÀ,h ,oˆÛÚòœ8ÔÄYnSò¯¸e0ÁP(i ŒÌ€N #\§á‚>`¤´Iº:›¬;Ä%þ‚%Ì«·J4¤CÛY— "~nF/ˆ¾¼Zý7jZ{”ŸBk‹®ž[4D/(‘þz(„*œ7&XÆÜ#vfé‚Õ©$œ:¿‡nŠwº,é«ç›iXn“èômÄÕ´žÍ7–Ý*ãÜpEÖú?ˆ“#'FH£ ½öˆE‚{µsÓSÉ1>Ì3þŒ >¬¢Þ±¾9 0‹[ŽŒ³ü9e‡Õºöù¼]aJëXÓU@ñŠ_!}¼OñwŽ¬›É•s„{yªÃ” ¨ì|¯$ß:^CNüᣜn¶v¼U9nÏØXi@·F 1Í6«÷˜"g[¸örã®×>ómùÃ~Hä´—‘Ün ”6A²ØæèÂL&Vª%°‰½é¤¸ƒTQLg!š~$Ó™/‘r²ÃBÆŒ_åæôAÈóÕá"?'R¡Aääàôç˜ÇÌgÛËØ¥Û]ÚÁvTý |°°8äQÖ@ Ýo®ãõp‚ÛœþOʇdsý‡–U†EÕƒÂ3S+‹¡€!f¸g JxÒ‚â¤[þE—F© FƬ,;åÍœäá#W“î&ßù-·ì ÷08–WÂÀ«çˆs3DÖ²‡›9uÅ/Frw¢—´'Îv_{>ÔH 4—Ï°sA]Ô³%j%Ž#N¸ ú·ë”Áµ¾ÏC¢'}•œ“+¬KŠsÈ>m ך¹N0zUoe?Δb[JKpmâî(Ú&}öÂ~-2mË_æ÷LãjK(Tá¼OÏØ”&‹EI™Ç äÄÄÏBuKØÊ $Çðꌤ@RlE€¦eд6N_,¾QœzTkh^?°Ó_•þɉ?òmF½í+`79ˆÊ–Ó<žþ%s@©B,¬Ôãf”7Ô.:grH\p^=ÚrèEbƒÉ2ÈÀ_$Nd6¦yÓÍ!dbÉ 9ÚðíWã ÛvYqñËäz¸‰|Ln¬ÒÒÂEÿìMˆ×¦MÚD~Êã&kî~˜´Ð©‹àBæÄzÊN‚œæó¥ðÃç)?)’IçJUKÏ*TŒ!T²®nîÄT}mÁpEº< ¤ÂX>žŽéÏ3B¿Kikº^¤œSÄT†ŽÖV”¨ëZÍ)}j‡ê1 bZÒèì5Ÿ¥–pÀšÿo_Sé¥zÙÒâ“žUãtu"ìÞÑÇâ{¹=qÂ6xÌìÁpœñ'j¦´Ò¦~Ñ3RÀ[ Ÿˆ2_×K­¯Û›®ƒêõSÔ)¶I¼i¾ä;ëÙÙ(ÙŽ'«Ôtbj²3"ûÀä|ªeÃ1pjÌ|Ë´‘þ×.Ì… 1üo8sE³cv[èNvjÙ«¡³Fm$Õ(u·Ñ‹ÂîÁÿÑÔ7QDðzY!W ÿ `o6€ºŠÆ¢^t”†\é !µnxÂÝäþ,J8“£_ÛÈ9Õ«¯¯Ñ˜Y؛勱‰ÿù®‹ÔGgSb2€$ø—Iv7aËË“ü^Ö…L}{ð>6‰£¤Ýkñy0j“>æÎ)¥mìË‹ óªDFNQÕ‹Üpòò¾¬µ3 >\ µRú]&aˆëz€±-xˆ+ùh­’_@RA…J–Ý –……€;Oœ&b”o6‹}Qüâû~†ž<Tüxb*†O²½¾~]¥UöŸn!9`0Êðeii «%û'¬§¨AL.V°Rn[7ÞÓ~§@òe­±²Ä#¬Ãº×ê ¶ßräïK!ªÃ½$õzvL¤üò«s#ì¬Ú/fXÖ `,žU\_#ÕZÿá¤ù9ðøòRBÑÐ'̬ï' #NGó³b^ªàyl¿Q.ç'<]‡8~Ðë½}Ãüwzþ¯&JŒnS¶ù]f©0ÐàĸO,jÑè¬Ó»hÂЬ£g?OåÕ2nA²ß_»öýñSbàà#_Íû¼h‚«#»R>óCÅMœ¥"\ø3”öðRM9F5IÂGoU£çø@¤m칊Öø[žÈ–Pâ0¼=Ðí4“nð¯o}ø‚%ˆ¯´A™9ô„­ä[Y\îŠO·z‹æQ>c†¯`gl‘?µ28²úÄŒÉ'” Lq*ûþ슒-ðI&‹O¦­`>G÷(Ð-Ùè’3‚ÍZ>('ëǺpK™Kù—«‰Öš$nnˆg,>°Ãr;©œKÉQaÞ¬C ‚bJqh®Æ‰û^)d«‰ïv» …p”æ4BÑ¡2…¤0½ã¥ vÀ÷[„²ÎÔz]T˜š`ᇼ՛©m|‘ú³úP­=P|áÙµeBO 2àï1”Ög>—ùøóŸ4bÛ?†>µHêòÄÕ:ë0‹‡Øì-ö #k'P&(Í\þ©H‹ÜaR B÷Ô¥$•EÃãD` 5Å”qHè8†ì­ûþp@“ùŸ{dÃæçp°!{aÍ+BésñNäé0T°Í· †/qÂ<Ô†Fgír,ï›×pêÜζ»Wãw•ƒp œÄâ—ïqO[ö6y¨4`ŠÜuY9AiiöˆÃ30޴Ƴö)Ÿ»­DTÊzAuÁþã×ÜU¨¬ùedzá/¾žäo™ÉR‘›”°¢P!\îäD|.vvtpœi=Â¥ôLLá¥ëõÜ|‹‘½dx\µó‰NãTqºmK$¡{ ;}wJä­ÞvE(%Õé²åÛÛKi9N1}Žø€@‡(æ› Ã]o—êA×8¤8j9‰‰*g!býŽJ÷EÐfË莿œ—Ÿ¢+Š”1ŽŽû™÷<Õä{ +×{¾Ã…RŸï®½)õ¶Ný­fivôåÆÙH×C{šœm·ÒK×OÐηÔaÀZŠ±—Rà»WW4ŠÐ¢³$[Þd›*µ9ûؽ=[wÎàÖ†U¡Õgé4BšnPÈÙ""é¼ÄòµÓ­ Ç•­wßÁ9¬Hù˱‘µ8Ïj=¶9«W V*¢$6z‹0ß Ðæ¸Ë½Y² È ØfGï.õ¨NCÔ¢9ñ‰Bçõˆ_Ÿ|NüNÒ v÷ÍÄŠ0»iÕbë¹½½÷…»öè lÛs/[l ÎÕ%H¤0ç©sR £ƒ¸ND¿ ù^0ï[”·¤¶û(XBüô>è¯û6¨8Ò#¶`õýÞô”ØèÌ“û ¸cø‡Öá Éõ. 7|¥ù|†¹9gøD0RßÐQÿ"ìM‹™5™…1ÞÌtçèÖ²–裻ٙ><ÍhÚ !*1«y¦Öø$@_+Š¤O®‹ô‡\‘ïn|¡UN”Ø\‰™ Pc¡{L)!iT?9û-¦ÄYÔ…§2 ›^ú›ÃÊiáX?ùÚ7žNÑôe)µÆž¯í 1ª+1§€¼ 1œ‘Ý‘î¼S÷0½Úý`KRž^þ°~çnR;(`ì`@)~\‡ž‘LàÕÌS1”²EŽ¹²žäÅ- *2ár+z‰ðúH[½è= Á\Ä;}s}Í(q Kªß=àöZLlëE+ ˜…DÁe»Ðf*3>µ¨A•.ÖJ¸èˆ‚·ìÆZL™{ 5šŠ,™Švͧk‡[ÑÖ7 Vì§ï} ÓX³XWžrj ‚ak(]¨ÑÆHLæZ¶0aFî_Š£*+hŽÞèÖÏ’ó·Ží8JâÕ±{¾¹8ØêÍBÚ¨ÊNÌ»VºäÕ§ñŒL[zëU†ãxÕ(ýÌ!y°#‡ª¡Vô6úf!;&S $"ªÿ,«ñù²Ý"b Þ’- ÄÞ¸¿ÁIÏqwØ=;ªjû¨O0¸Úôü625{É ~Øä¡£€Éx¶É3×?-ô<&Z=!V£+£àiäv×¼eè¹c[¿ønLN_jéÞãR³ì€f%gY"Ó²ÂqÀ˜Ï&O¥Î•X´¿Î3硇ðß\'šê D›ò'XÛ0®x鱃J‘B8c,é-6®RR&››\U’Py÷îxúnôÉgû´îìC|sóIÛÁJÇ‘›Ež L„¡´1&ø.†yÚNŠ¶GhÃg¼UedtmÁ ý²µåÌûV¢ láæ%A)E¢%vÙh_!€ÚpF•£‘»aUCâE§ºŠd•4S 0OLPyÒ—ðx„Dz¦„ÆTòO'.‰|¹âCÆ-»Ý…‰o2ÆkSèã×?ÐäþåÔ)³!FÓwÜ8‹xZ$g®~¯ CÆv=˜bØf€ s ‹‹ŒñÄî`3g?FÆö Ž0w«‹à‚Š}êz#_δ ü¥›~½ &²ЇÌxJ^^Oç¶N5[(Èp=ªªÿ/#}Ô I“â@c[|£·Ÿ±`ù!M hânj+YGìÆGؼâKhß_þÍ“S6rµ‚‘ƒ¨o ^«swó $½Ë¶\a'½&ìd&¼÷óû‰_£ù›Ž‚¶àÎöqýÓ\kB|øÐö¥†X8øŠhv3œÑÖJAFuš˜ç2o°kÎOeN¬­@=9ÚâƵÍç™cÆc0Ž-¯ÕÉzYáÛåŠLÎü,«$ñç™í—©ñß* êTrëí±éy5öÈ ÍñÖ4¯x1V¼¡åñKâ×€Z¼é¹dý¶–®èÉ× ºf^$t[`SAáKLÜ6´ÇÞBL”¥Ž¬ò¦¸õN•Á§'á÷WôÏÛ¶”Iâ¹ç› ²©#Ã8¶F'ñ^µz:[q‰Ï&å=©Õ§:ý5%ÂÁ¯zŠ¿Øù»éÈV 6#¹ÀM»RM›‰(VfhÈqlຠP=jè®ê@qdÐâÐ@¢P —ßoå äžÀŠ<ð7X«ø§âWÙdº{GñçZ¤ÏÞ³FwÚ†=ª›±KŠëþ9e ¥œJ8"Ó Oxán݇8ù…H~¹­•9Ej¾Î+sY¸—`ØmåøoÒ ¹ïÄÒ¿ÏðŠô¤sõ9¤ã€ÉŽa Ýái&‰ÙXÏQ+QjƒÇ€åó™,rˆ°?Ü•§©+9`dÖ!9µÈé<ævåB}éžÿ<'©©ï,É„–y÷ Í 49¤eÁNÿÔ/Eô (5Ç·2¼Qg&Æ÷3éÛwÑJG:ƒHÖ]ë®ìfèø¾2C¿6~kè«PÚSÔãã $Ǿ!¯:@9*½^M,Á¡ît¨Øú¾rÀÕJ]áR Ã=¬bIUCO*ì\è/©ˆNÓ&û<±Ãwdz×8!æ‹çÖbbÜjIÖe®Ö'ÄéS8⃟d£Úþ€4Í9š ü‚]DDp9mkh8¦ /Å(ÿP"@ÒÇÇ]©Ô¤%¦6?§/„ò£ésY{Ýз&<<ΪóîoûÙMbˆ $<š”6mÀB #¬<4$Ô‹ÛÀåÙ¤Vj/øBßãG]N_­Ç, «É¡¤mSyæöÂøý:ad µEá{í·ÿþeÙM¯üð½;À ¡yòƒå6¬þÃ%Z39]èOT(BD¼ÚŒ¸ìïP€æRë`ÈJW&vò™¼˜ …¤DÕ;JúVWÞ³Ñ'#–{H1‰µ=èsó Ï’,uïD7\jÊÞ°Si…‘‚cŒ–Z%uòñðÞþ~¬l¥ÀßDšÉ¤ŽF7ŸãU‹§áæ’Âýý-ƒ3i{ÓôÖcɧUÿ§7Tçã½­8ÛÝ^0ØOéùó`ÎA_g¹¦˜Jk¥€//â_}ZƒA |Â3„—ÈE“pï¾D’ËÛ‚úÖë`0»ê§A”f3Û¦LK¹™³ý˜ñ]<,éì°!ðjݱÃÜßSëŠÜB¥3eZþ?ø‡éQ]™ i=@Ÿ†^<\†Ò7‚Ž‰Q([-‰ëë#=Ú–¯C-HÍmè XËÒ6N±À­{6$ÜË«¾E.@G<(žUMÊ€¤)[œ hI»e(D£ Ô’-­ ˜ï7®l/ÃüR*‚ëT%VIõUÓUõÁ'peï}Kcº2·Ž-(^V¼¹,V:Šé¶ÿÔ,ÛNž#p—Šcû†p{Lr í]¥É µÞF®^Va>­¨`ôÒÍÿ€°§½Î²S—“u¢¨T e”XTö!ºHŒö䈖°‚ ŠëW×¡ðŽ…œü\ûÀžXÌãý÷½÷ÊmÍ7ä}È_ç«|Ô\}çk²ØÙZ*ê—„Í¡ÎzÕóœv‰ìŠy;¼j²N°ãŒnHy‚Ãü_¿Iw 0†_þ˜:ò~’ˆ{IeíTÐàZµý¾fúÝGöŒõŽ˜òð¸2³CYUy§Ø`{kÈñ Ì”€UºZºîô'Nˆ™ü5O R eaU‘ŠüµšÐ—L¦6Hz¦òQžöË’‡'áž3ž£›kÚu=óìÿÝüÔ›:¥Í¡C÷Šp²Óü.ÚüíÀ?|œ’鈤µñiãöøþÝNݬ"ªøÁ\N–Š­wW£Ó›7`!õ¡³îõôaÞVaŒ9å^Deõ]ÒõFP‹/Gî‡üµ‹þ퀟Ô‘h£682óœìNøïηyý ·ÆäJÊ~Eƒö€ñ¢ë’¡?˜S#K©k;¾oÛmÈ­G[sBPà_Mh$Uîî7ظÂR0Å©~røc° Ù .áE«š[Þvš}þ`àxhå!á8ì¼ }ó§ÓãJHô&à SýÍ•¡oøëµmü&šRÃŒ…•­ÆÁÅÂ_)»˜—°¶ÑU­ãÿé| Äd°†„ênN(ËH¶ã&¦F*ûØ8D¬¹Mƒìæã—æTë(ý¨ÿ§Þh[1ž°%ÆD’Ϧօµåø ¹ÖÝHrÐ^[dw†ZsÎp,F¢ÑûÆ1ÖÃlùbüO‡9¤mq‰›P@W^©ÃÁÏgw³[óáÙ@ëY—è)6j?maB[´OSšÂ$ï¿GäA‡AøÞäa5uµÕxèª2(m ùþÆg|sàlÕFÊ­¾ä œž ÐHËù^gÌŽÆ¥®–B™}á5¬és*& z ^PíÐ(ù¿B¾±Æö mµ¨\®_ßs2KLÚá{®†³òÔËÉ'Æ„h ô,bã®»1¼§ «.zdtÑu‹|»8C\óO¸¾‘ æÑñWâ-H“>åfîJ³£üƒÃËßÓö6¦¿”ÉW—²Ña“ú¢>-ÁIÄÊ÷Y\b*˧—bNÿ5áÚ‘"¸qûóDšöÒwýãô(²áŒY¼>vOC:mÔÊ/¡V·Çÿµö£Ömík£¹Ía@,ö]†¬©Q&îé.¯ «a†T!s“ülô³þvPØUÓ¤\¹þéÓ,û:þÈU.“)µê÷ÇïÕ÷ÄŸË…¾„?Dò\Çkþ`UâÖAï¿SË$ÂF‘P6CûoªÕ>WW¤Dߧ"b…÷ϼÌÜsr…¼¯ÆïkÏþ÷“ y†wÂ÷`À€JYj*èO‘à”ðÓ‰eœ#JÁÏOFy•kv‰ùFH‘‡ÁJ1%®•<àöelcѪUµpñ(*<½"›-Yªâ³Yõ¼ý†v;ˆ[O ‘ƒ_X 2ŽæâEGë „­;Чn`ÏcÍ%Gq<ãýú˜ª3æÌB—9µuV»’VX®2Ÿ¨%×ún! ¾Ã‰­ƒtJÏC4ß4âpµ{©â‹Ñä¦ÙÊ«z«Qæû#!d4,ûäWªÇµ³Î/èx?®²ÌêÏÉ昋ªÄŠí;´ö$6û……F‹ÃÍ©Ü:ãSOoîÉ--ŒË!ŸÚµùœu‘ð•ð×nbwÛtïÑÍõ X*2#÷=Ö— ü6®„¥SBà^)]Ú×jM=b¿„AD= –6í/ý‡(Zï¶ oÓLC7¢Íjz #Á¨°ÿËH8ŸƒX²"òuœN$ Ïýd@›q1¹ä2¡R¥€4Ì'}3À_jgï)Ö¤æÉŽ8Gñv+˜y ð‘TxR‘_ÛºX×ucdÏ}ljä mxÑ¥iUÃŒrÝ%*ž6¤d} ð;Y)๟7Ñ”"ûÙ? û3è¡XÎK$u8zìq£“é וä¥AnŸðœ*¦J<æéÔ¤ÆOÂó qæGSU¶Oü«©¾æÎÝùÊPÿŽ…¤A舺+ëHp:Ã7žoÑbÑfuG8çzšaë}ýWÀ¡QˆódWîSböl”×3~f™ ̹çgåÛhÝk¢„G=! ÓlW·Ô\"Íg œâÊIyšÎ–%½T·b¢xöÓ Þ¾`íwÙf}‰îd¨Âç—L×qL¤G_ý^6½Ÿv´Ãî;šm8T~o&J 4øˆBê~ѨXý5"c¢Ü©5ÈÁKžC†¡¸¡?šb ³éõCÉ· ©užKÖo毸ï¨ÂÞvª?¥°¯“ªK˜¹ü  ½Î"}g¦Q¯‰"ç÷1UDå N³…')š`×H„àßAPVX P…R¤«°kÒCÕï€+V ÄB„à^*?íçuµCÍÌq¡éÙ¯CUÎ×S¥Å ×À×KÍøAÚ>ê°SsÔ²ÁfY,Sôð‰EÀþ²°håœDôø ‡¬´ê4’8¯ŽV"î8L-˜¹V«[²ìSèFAਠ˜JCG)ÐIɨ§FF½—ñ‡ÂÍÐZ‘®«”­)ùØ®¤žrî3QeóÐa“\Hä-ôÆô¼oBÀDç×VUGAWç`öò‰¯ßØC·Úáè°; Èf–ئ lÈ„òqÐ}7Æm~¯#òÂóÇDM®ÈxM²¯"Ü!¶±N•ûú•óÅ}|‡51ò–…sIk€‡×Ð@Tô>Ü”íí¼v§ép<øñŸ>_ ËL¾fÑëw9*â^”IH)´ÕíÛ÷tk}K &½Fi‘°ýŒ®Úàk®[Eš8'¸Ç¦Ü¢grÛÆßÝe5W—H÷q­,#Œ½RCçŒãXöŽn š‘n“2S U± 7iÓ‰틞غÙy ª1zaJl3ÆlsîéjÛEþ±cYŽíuv7åGtõÆÙ;û ²I¹R¶IãÚ¸O¤7à tï4Œýû@»hNÙ–ñ*ÌÖG¦Ã<Ã]Ò²f˜w!¬³óíÅ(ü4¢\èpvÍ-”Ù7Ĺ䶣Lû NPaòÍ“S`Õ^¦Á4´2ÇcŸHFL9yä(3º+Ìžt¡å‡Q~ùŠU¯&w“—¸d&Â{´Î´»#­O‘=Qïj9büVyö ' 2]–Mü ºaíYÍ™)#HìGÐÄ3¨-ýÝ[ññºTFYkæçwÙÚƒniº&›k0ù­ì„xûo´wywǺt$%Š6»¨³øË^è||?.ð«gõRˆ3Pö»¶²L0Q#ŸÒ|`<çþåˆÎb/r$†¢èepç×O]á‚Œ'SébjÝ"ù3ÿ:w§…¡V9ÜÔЉ2¦÷%Ö?ƒ|…‰.îïGÞ‡ƒ˜{¶Qn i(ø+m‹’º1Û^ðdÜö[¤œŠÝå·nu’ï›Px0ÈŽäw0®­ 2vq»‘ÉŒ¹KÓpí TI}Ž}q6 [-RA·þ˜? ¹ îÃmÁžÅ@P(ÿè¢6ïÑ¿ql¹‘'ó;ѤS zl|t⢦¦NÜ"L=9AâÝ|…#…é˜3 v¹=­_jYRN'&¬Ò;°²ùW©U†,™š~×1 ‹YÓég–ía ™T¾ÒU‘ ÒÉç9£U‡Æ˜÷ æײÛ–³…\±Ê=ÕE®ì¾ÙÏ(bPôöÄ—ìmÁ›6^Á”u‰^ðÄÇm»q+ˆÍ?š P.¨¬¿Ç>¥pøÿlPôÛ]F'xMŠ è‘/=‚(ÿßÄ\‡¾ägÛ¿¯|? ñÏÙkX-ѵªrÝ(`ŽøáýÜ(]#æâÞD!\ÿ$ñ¥4·z‹ÂidQN– 0JwoòDaÌÎ!ADïzK¤–CíL²NÉ[d:„”Š¡Ì'EÛ©‰é÷˜äЗE<«n#¯/ŒP,¶%nA§ÎN´:~ì>û0hQ×þÈ©¨ã”.ûÈ’ÄÕŨ> kð1 ›"Áø;дþYíò1¦º¾7×ø²—˜Yk[†â¸wdñ¯ˆ6.ok¼Å=Ö¹C+Ÿ…<¤”×ÓêÅ®A8¸ËœÜædýÖ£¬}zp…άCt¢XOäúœ£N K)¯zÀÑQè&N}à*ÊTbJçØÌÿ&ŒÛ]¦¦^…)ýß^2äÀàå%)åíÇå&™‡èC¸«iy2–AñREg•£TÈ•Ûî°'–§Ó¹º2"¨êŽ^4‹ö:¤„4bF»@XFÙÝèÍj´Z8F%…›`þ¼µÔ·­µ¦k¾¹Hpúx Œpš˜Æ‰9Çü—T“Ì}€¢ì/é<ñU2a&ÿ{œD TËŽ˜Ll¶f?ˆœžÇºø«0ÆË"6†c`Ôúé~Ç«¢éŸëî1óé‘t J:§ò±N¢¥ÉöÑk¢X ÅN4=Ÿe®=ðÆ%ƒ'&„h!)9 Nùý79Œäò¤w& b¨ÀŽŸX[vf!f$k«ç¥i/¥¹–cF/•ê(½{¦.|I÷TÄai1|0v-Dà @.ªP|‹9KžÐæ:HŠÎÛÕGÝÏf•ï4µÀd ö0öµU®¼=p8í—m ˆ s_Ùç2&“}´"£kö¦Ö„dà/9íWWW¥ƒæÏߔ̌TFK*cóÊ:s×9Æ'Ã? #ºìIôý9ÂëY ã cªT;E†4ÄT4 Š'âL–"èž—Ð×bJvÛ·oÞà2;ñó7°ºë‘i˜yáÜ˽óA‹|V_…þ‹†l_$¿~iÑ{Г†`S€¬Õ;ñ‹ÎjNÆZí4©ÉxmM+~Í< !:³«.ºáQ¦Ê";Bj& ŽÂì—ó5FÆ|µÆ¨·Î hý:­%/ïôµñÞ–TÈEÙ©7£¹`[âÑ ¬êâF\7Šäçv*]•\5 ç¦)È/h9AÊȶG¡ïvïN<ŒX4ëkõl>Q^Zº6ëÀ‚}ÖÓ•µ®À!4§þ.Uɲ ea AñÃk¥Tín‰~ÒX¡IÇP㤼 ¢Y­ºŽŠ‰×"«´žv C|âJ„‹BO¿%Z«iò ;gV+Obi–²Ô`[Æh?‹?êeKͳø‹°äJ dz¥×’luœ_¨Ýœz|ZTØ5®tnT{úöóiÃ&ÑUOÒ•; –EO_Tê!y.7ˆ¬ª7þ>ÿ”žoUv{8Õ}™w|H )|ZVh™æXºa|áÞ=¹VÁ°écÔ¬¤ %ØDm;¢·k$¿¦ë{]ûõrôõWDÉ¡Ë•½@½í²àvMów)†vŒ¢48­hàŠ¡ü¥½‚Õ Ù{qnT‰nŒÅ²l©sJ¸‚ó±¸}a»SÌ}0¼Z 6><÷Ï]³ª&¬udûÜuX½{rHßKØn±ƒU;-X0ºÄˆl è,µ£”9ãOíÏúFúŠÍ{ÚIØáÉ#Ÿ·xN5QPM ï¨Ww—j²Zzž/) À –;áydàÐ)Q¤Ýº›Cv¡+í‚S=;‚Âè¿ÞÕ»ü‹ìžÈÐØ®0æ²£l'ƒ‰0 ‹Ö‚³”Þ/Æ–Ö¢S=Pû¡vLgŽ,Gr°3W¿Ï ÄP[©œ0FOz‘.$ìzÜ6h&/z„°CùC©äÓ1Q€CKòY—FöËLM*Ÿboÿe±ÝÛ°2€T/-›M€ñ@•É™rWàGNAPÊ.`5Q@ëcq:R¼¬Dã¨Ì/ æ{iH•(+ƒzó a8’=§Ap+±Ã*×W˜ñðD¢”õÝÛÕ-ÙÙ¢ŽdHN.ÂüE`§áhD”¹ìëm ß% Ä;´™K„2¥Ž­P¢ÉOS‚¿» OäŽ%3ìÈã$ìÕhRÅFº4ýÎH†W "R¿³fbö‘åƼ_"ä_ ;~µXr£ßÝôe;Ê/¿ vÖŽÑÁÇ‚èÔ´Ï ‰ˆÍògô Œ¹%’„üœÓEA¢C¿âÚþv·bCøðreû>“£t¶_1DzuÇ‹(ÕQù‚ëâ(ý4sµÐ˜âÀšØsH–sÄî29•= ˆnìòþÌæ§ó9ðæ|iWÎוÝïÖ5ÁÓ®ºØ@T悽ÜŒ÷É&á¨CƉ±nQP ÿ\¶×I(^â²i]OrÕøD 6x},¨ÞH:Hsµ]ƒÝÛ ­°k N[ð‹oÊÂK Ú=O_qšw]µÅØõ;Gæ—Jy^Qh s.q’™Ø_g´1D~Ǹ˫Z±=){¶ƒ]ùÜç!±Ýù¯ WøÊm°æ¶pbÿ§3y`ÌkßRý¢Õ²!…øèàQvÇúK™þ¸Ï¦sú%µ¡‹âëär$i‰-–7ÐIì®Ï!7™Fr©tÛg’ÿ±duÎS‘%\@¡^¦­¸Ø9dÒQ´˜‰j—ƒ\7¡ÝJÓ»j3ßÅKinßÄE$‡Í5³†Ð¹ey»”˜,›ˆö`\reÆ®j×z¦f5Ù5¿s$ש2£=½¡“‹_¼Ä`jE²rþðiä÷^@:^Žp ÕÕqOxÐ}êoë'à‹¹±„ °§ÅÃfë'M É›œ-Û9Wr+ò™>ÈÎmïcŠwµÝ¤Ûj¨Ía®M™œ¹vx¹¾]ƒ9‚‹Ø‘àÝä |·=ú3%p3 $­#› •V@Lé"ú߉„àŽƒ Ø>`Hh ¤aµ¶ýß¹ð<O’$r²býQ¥µ¥,)+g»5ÙÍOž‹H^ÈBÖƒ€~1|§>ýÖQ8©6[ãõ7€ûRi¾fz†Î³ïÆè·ÒZ¯V˜ÈžJÌ b HÍÑ5êV‹óך‡UžKØNw@* Œì#5˜rü¯.d_òó¶¶g¥™ô_Ü^ƒ‘ñ²£^U#b9ùÂB¡ø"ñÉ#$º»Aú] É؇uÇ ô•¢f¬WX*zUÁÀÙoSDì-Wu$ïa{»ÒBª½©’hš§—ÈÚ¬ØKxv}t …zð˜ÌÙ}cIË´Û=¤W;XIïnÿÊ\åÒ3ÏUf'Ó¹U[E"eÜûp¼ ÕnË*AØÑŠ 2g¿çSÑ Aˆ=/2òXÕI×·,Š`ÙÿÄÁŒi°dܺÄb>½Æˆ®I|øÕ¼çÔ“nqÊêø±øQ’äòÙìàÈa(˪‡ÛÀ´6móyt.§x¾¾~ep|?:ˆq³…ž×æ—!ä[ûß;¶›Ø¥úhž|w ãuÓÏwÒ;(ƒC¬|IøÓX,YÛ­MœoFW§àíë«Á¾¸8“’€áð¾ÓË'L»Ô|÷Œ!8’€“3ØÛÍ·‘]O¾xrIK¤dKeq¦ÎZ_}RB*CW:WÍ^Û‰r¡}fûèê4êßâ¥ËÆ¥ýÏ/}xB~ ‰åOj¤}&Qò‡Å¥Š£þ0Ç0¦Ù±iy]˜)ÓŸ/þ_¨çl7â²M†¼Lüà?M[°'R—µ~yU„בӂHª|~Qm­ÃA;òÓøjgqpåû l³ªìt¦;Z—ø¢€ô×S÷æ3ιç¤e§nÛæ>XèÝkWÕž›û :s®"œQµ”Óµ…B›^R§§Z )íaO… ½’hœ5“á Ëxùé ¸ØêU¶§A‡Ûé ƒKÉM'»¬5~-½G\ñh›„…ñØ!Š‹c<>ƒ÷Çb¯nPò¥2Ø[‚|d¬â6ó9Oeªy‹7OD©æ“$S{|]À´œ¢QS>+/^D­I—ó±) iôZZü¶-àý¤}"Èi"‹¸~¥î-Æxz! ¾O”“º¹á“ ”H4í.V½tû³úuÍ-¤©:¾`RA„+`+e¹8ëð„qî“ÃH̦kiÊ5" %^h¦¤ßQaí¤d>YÇùà‡b•¾nYë)3¶ö=,Ñ\®´£-x36ÕRŽ¶‚ê™Ê¬¸Ô¦ZUx‹/fÎŽöÒXæ* N_è8)õ’»äg±Ä(SqXQüü‚ØIT2:à-o$C=ƒeòpÓ§0î­T¸“™`Sc ÛI5êdýAtåÇ3°’`(<Ö`öù<ÁrPBq¾Dƒ.̘{âÄ@äïú‚ÙÔ@µ,½ÍÔn£ø½œXÿŠSV†I¬¹1j&ãÿäojì™T·˜ÊM`Š+]ßsÙ¨áÈŠœÓrÁ‰Ë ä]W[›JÝxÎJ}à r»Ìd›‘èZÖúw¼J £ë’Õ}oxLJØ/gÖ³u\³Fâ9jö²íóŠØo™c¯B&¾n³ØtЋ «©¹:Œa8dI-e°œ¨è¼” ¬ {^$U+äuY_ìÖ&¸^K@Ò2õ!“-ÍðUðÎe,«C‘)÷²§€ú»Bæ”úyBœâAFkæ7cKËäõºê_¢‰¨‰<`Wòã6B›€ZGél·RX”#äRË:n§C±±ó#¿µÑ),ã£?ðl¦Ìþ77%äqa&ëªÿŠÅ­Ó7ÄÙVºèX/W¸Ñ»Zrãã ±'xz›ì™.C Ë÷Úd\ÀVy4•Ë ˸6®·5"Acâa ÔQ@;®ç`óck?AðÔ(ý®Â]Ù‚‘œø¨ÉŲ›ù)G°¥”®4,ŽÿA„Jì_§Õ#,‚_{x˜Ü‹^‘s£pýŠnÀ*k=.ÐÏè;ˆ¥EF½Þñš³Â½¶Ü½¯ÃÁQD†¶¤}WßµD"½[£z‘­ü^!9J›P]ËÐÿX~g<ÈA^CËý¼÷M‰ú²‰Ìh»Ð–U¸höSøA¸÷aь鯵̖KÓyŠŠªxèuKמ44©EÜܯA¾IF‹Ðï„7íDíxÝà~Sꥣ×þãqåG[ rßÄ0¹ò¿Ei¼æ?,Ý´°ŠÇ“½ÿ“¹.çŒÎE·© ê"ÞazËuÞ1 ŒÝüxò¥aÕƒÅ)pXÁ …ï ñõc¸‰çûþNñ¶•@ÚÛß-) î}ÿ+)–C½Pívó“åÛæû ›æSdÁõèßÿ·I:$]3p›üq¿0‚ŠbG7Ö^úÂi$ZÕ:‡û¤£âN/ßw4ÇN²¼VâÛü¸{sÎâNÄ×R¶h:­Ý„¤¯yVBDhã@{]¿Gºç%ËÔä%/mpÎ …&êü=Z‰ß?¥ã®RŽ}aƒOpVDSq^ ™™×SÅ\¤¦VÓðR6Xñè!þmòñ2†…¥M¤í8‚)~p%™FüÃŽqz@wXŽ|Á·ŽûmÐA/p¹žñ_Òļß9>’s¸hÄ"4ŸÏhÔÐ>)!ÿsã’Æ—÷Ë}Ûæ´Jµš”ö²S4üþ ÖúO¿†„› ¨ËGÜ_7mÃúãW<™ß[ǽ‡‰/·bôëÕgC[Ç¢'b¦©¬ ”* £=E•Lè|ËÕôsD¦M¡ÜßÎ&ü¨§ëÆBÙN8øÑ¢x†¤áoC¯§D£Ã±½*”Ô#¢¶ï´ÉŒÇókÜ,&\‡ ÌV46àÓ;ÜRÄ~%½ãÿðë@ñ*cO£ Äɘ^¾¡o{è€Àowa·æX_ÏX@ÃCq»}; _ª±|Û?긨#€£eä¹Ï¼ŸÐÑÜ„¤;b#±àØ«ý'¥ÇÄöJy`8rrÌ3ªåÎL$ië:$©y¢ÔÁSÃѺËìôŸr;3°šÌkþ7ß®M.¬) †;S›ÛÁä`oŽKÇ@8 þ>ܸ}–¡ ™dfÿU1¨ Bxé ¬WÚÖí%Îæuyßy‰IÝFq4¾ “aM%¯  ŒaÌse—“Ÿm²zC U~9Ö°Ò½ØsJL«÷ö>¡Ž©G¥ ¿úG”(¸ocZÕþbFF^ªÎ§Go(e¢~þd4ê|¡_{Œg]#we¯Ãµ z»/ÜÃ={põ±s2¶wÓ¡ñ©'Rh2U%Pâ:€±ôzü7;«ym…x\Å…üS­¬ïÕÐ+f Ë&ÍÏœÁhÿ:lrZÝäSqïKLÈH\ò|6΂•šÌ—ýæ´äˆ8t»T!G<Ás)äúIKilulýkïq¯Ó÷ÂzÏ(âyRà†h¿ÕQ@ù§‘9Зøz-±©ßl¯¾hu`€•íÛù>ÿT bÁÇÔV„/§M¾îô·à³Î=¿ú“•Îž8bF\Zy¾ô;Dj²KF«VX)®BŠœí9ïòÅÊÚ\k訞G!gea¯â¼R¨‚tm({dº¤•ø‹yÍ—LÐ¥Ð3º‘¢ _¿mJâìÓo~~=R‚lNUW¼ECI¾¯fó¸ô.c˜(¡Õ×|Ü#…QDhbmQƒå”s«çÍà¿À¿!Î^\IK·Uu±½KmÎÇ"í˪b‡Iå‡uØÞE<ìñÓÅRHW)cŽÚš+ nsrŠ"º’x=¥x³$txÍï‘3¶báíÀÉjl&#ã– ŽsxÙàÙFôŒý ¨Î¶:K”ˆOs³ÉhÓal?öíÛ½ÿ'¹½:ù}½ÉùŸð–Ë:HHþÏ÷&˜bÖŽ2Hµ³šò³ÀT…é!FŸªàn½_Âq›<ª:ŠŽÇa‚ù“€Ì!Ä4û(éTÍ&¢w‘Y±içw\†Ã¢sPògC¡M†{§¦Ø€ ´a$¾ÍRòØœöÒ†¨O\õ"Îè:¬Ê㣲Qÿ ×á¼ w ;{¸ïxá ‚$ý¼a}E3•O«ðAɵ!y@9<Or{±î5ý¢ ºüáµ W£¹ðBæŽÈãùàPÇ jÇm‚eP#Êdš¯úá †—Oq¿žáÀ¾ÄÜ©nƒL.rðˆ=hNøc^¢ÍWä³o6ZÙ±¼Ð%É;wYËp ö‹K¥)þ¢b„Ö «p½“&W½dã…®½wë{õ‘¦„Ï}×}€Lj¯YY|U®eo×7ï+ü9(Ü ÂŽ§…¬ï‹r¸ô–ç!í²Û€}Y/¡ÊMsD´2DD{"O9!Ãz­'uÖŠJZý ô­ÍI ®Ë×±L:÷4ÓÐÂeÙ0â.¿¯f65; Ò0ÙTÈY°ÿ–k[4#–VCšð),Ëä_~]·ìï\¼8;ô œœc¢ƒ=©Cئ!Þ‰„Œêút*˜ TD¹¯Ю k=Ñu,©@Ï“yIÔi¶I´-šx¾ƒ m+œ¸Š°cácW˜bSƒÍñ¶9ê_´/Þ!Ä|;Á›Ï¯-k7¾{â²¹}uØ ¬"Ÿï1ÐçšÅ ¥Åñk–ï=Ic¶TÚ=hî$3´í›ÖŒK„Á§Í:éÖ|í4Ô°X ®'Ì)æî{:ÇƳ_ˆrn(ß ”W{95¾;è=“j{T[‡DÐ6[*ˆI¿ >¬­ô§fhü£¤‘%Ù– UñøE¤†¯A™ ˆ† :™ú—Ó’ädÉ×ÝÙ!¬´ …¿²\t,?Õwtú;¹ÒBýâ‚8‹fô·=bYSÎ3îzŠÒ†*ÇJo¯ËÊ×·íN¡·ìpÔû˜–ÕœEID × ŒrKñÛî³`fÛŒå¥L´øN˹ˡ+Ï`MˆMá/¥Ð¥ÇÄç²ãÓZ–ðe:"ÉdSåXI¼•í9f’Ù”›DËó>jKÐNÿDS--´w#ÆÑç$ðJ f`ïãbú=´µD.Q[•¦òm´üœ„žháŠÔS÷%c¤‡'{¼©Õ i†ÑOt._nà ¨~á쳺Æݶ¤ašß 4¥ní“+Pø¡²'Þ,¢b?‡ÑpÎÏA‰X6nß6Îlè_ËÌ÷W8„°Ë–±|H­ÿ~'Z ¯Ê-þçGMIhÈC‚ú˜&¬p›ÒÁt“;ïÒÌHn§ôœH¹›8ô×Ч*d®aþÑ”áì5Ìþ~mÂébÙS4œ;~ǠΥ5Js°ûš+4º `ÌîÅ!‚¥øù–4Œ)j·åm@ß™ñÇÁ…ì Jï 8€jê¤nÿRhK É,&³q8ÒÑV·ùwvr¡‘"k§¦à*MAö»pvÁ5©7ù€`am1ÍÁTo /ŸdWãmWš—(”1û#‰Lð¨ ZÃÉéç‘·ÜäŠäÉ^ê™ú-ˆÃâŽCüŒüÖW·l¨áÃä5ÞW;ú.Hâ! ïü¢Í?i½¹ “:W©úT¹íÆâ“"KC<½£´}Á]0È ërXä¨Yá©ß ëB§î6@ÿ°ªê~ÓÖ… ¡¬¿…ðKO`n`re¼ ÂýÛÈæ‰õßw…3Ì´XyK`dJ·‘E€F`ª˜Û­2Q’ öY`ój¥>7CE„y'›[oeÖïÛJ°M:F‰/ €èönëNýÛ§ A }…ôïpÕŽ+(÷”œa.|¶_Ýì‰Å䤖=›ó6 @.à Ö·±‚ýΛ~‘¼)Q¶@2¯1/Ã;ínTÝýRù{“¶KœB—£h1&×»¨±ØËÀ]œŒ¿ßMŶ¢B&Ìiç®Uq‚z$¥ÌmsÝaãÇltØ5èjVA½¶ÕÎŒKn°˜ „þYìCÀàN€6ÚW©ùínþ#«RîFš€¹Ôþ0¤gDe&`DpÝ«ŠÍb&j&?tw(·E×ú9©¡f<áÛpLcŒ˜þf5QOþâªUxÂø¥VÙcÙ¨\½¥ ÍÚD’?†Ü\ãx³µÄée7ÛP-ºg¦iš üš9oÜÙk«>&3Î~”/ü½rÖ^9 †Q…[6×ÁŸ°»îe˜dÆáž½L¬Ù[€ºR(}â–›°^…Æ*x6Xçñ3/\sÅz~I-m Å8*BVEbÞç5°¯DÔßÉn…×}˜¯ÄÈT8 _wÉVÄ¥Õwó5D aáæ‘\ª½`3nK[ZÇ#OÑ8 ±‚íãÙ¡Rƒy.t‘7Ví@=!½X_ò¢Jy,ðŒQÒT'£,×ò‰=’ð´*ú¼Ò‰³A÷æ‹æ”ÕGž†vù'R>YA*Ì!gJp\Äv®Òi$Iu‚Ù¥Oªd’#íi+Z,"zRÌõu_˜óÊQÄ/«LŽNåÌé*zJמ5ÿýP³ºðbûºÄìÀ&wqGîD#¦‚¼4FÙ½â:Ël·DœyãÈ(¬(Ïêm6ž[O3c·‡qyÂr;.]c5yúð ø/7Š´Éo³òò–¿HϹÑ~ÈtÓ@†…AÛ7šL$äP]®‡æS¥^©ýÍßj ù¾ßgNEšNB ·ö»B€Ø·ð“P>JPÉ9 …#Ÿ5Ûd‚¢Ú,¸Åò‘£\ÚcîBøÞæ-³zQK¼“®¿\\ŸúÕ¦[XM …3LM÷2NÚÌQ „ÉÔ@²²_&në590?2GV:?k›5Û} *Á0=Ä3³xЫ ™¦b„2ÿ2NÒÚJ ±·m«ÆE'ãþ¡‰ã½_‰²'ªÛ/—Šw—“ÃÙ;gþ­Dpé‚W{¨mf¢FšR)màïoû8¸f5§gi˜Âô†rZT(&¶”Œjݹ5£;ç–Zªy^åà„‰Jƒ‚š†ýI*D„ ‡3þß@À>’èSÅì\5“1ŠÒÉÏnjh’š¡b\1+˜}–¤'m×^œ׸±£=¢^hhcQQ¦×ÎD0}WÒࣣSåF¹üDOö¥¡_ˬ3ú‚ÁŠ“>3Èõ¬{>3$,¼j¤»z\å_ ¼ÔK#ó^ec^À£ŽiŽ¦ÎÒá¿¥&vÓäþVŸ¶ »¤á|‹Š}„8—‰¨"kì?hN׸oõR1}TW¨æ†Ó±¬ØmPäãúÃxR)Ënp! æ¥!;¸¦á —IÈí`&Ò]‘jOâî*ñSTøÖIε£­&†X̙ͳÑqKxˆí¡Wi¤™Ÿ~CèEîyœõ¶ØÖW‡V<ÃÁåò;vçÐx¾ÓP…Ö"UÒ°>2äx®×r{¾MI4ÁiNp £ƒ?5;É-/Ÿ´>;ÕSY£ö¹bò¼_/AnYw»®ky‚y&ViA*-pN+YdÇ ˜ãú† ôl3ÔfÆÒí6a÷ÓÄc—–ÖsßýWñz‘øp÷¼\nÖÎg”b Ìoþ)}òO¤²Ã'NØ}õR-â Ðl㵿%°#^éðÓËÌæŸ.‘5Ðbà›¿s¶%®Ü Ä£ó« ÿ‡¥·Ë¯=|¯€ …_õZ¶¯É P/ù…鰤ǗÕH¨áOIÃùÉTÔ|.xˆ´³éºæýŸ‹ZÅ£ž6Îôç{,\WX¿L:ª©FúTxäH—Æ6 lzSyUˆ‘xf‹/ª:^èª×…k‡îÓ;»t/]ù£Ä}·MÃà¢ùŽ_ì0Db‚Bv'_æØ™ 8:Ñ-‘æ­4‡[€CçÓFÿ”ŸçòpgºØÉv~¾1íQààGï A•9kXôñ‘àøú½a{‰ûY0óe5mÉ°HMâ»  HŠZ¨¼?æfI[ÍøígË5ðõ¡ %šÑ©Êó “v–ñE£àãZ*´!5碽”²”[¿û ¿§âÞÁ~/†Hƒtn^„$Tü=ðKHQ|ñÄñj zßb´_‰aLâå­ pÇx8ŽÀªFé9ÂÍë³W  s ôaÔ£>ü%ETÛË.¯eùÇHÛ_ýÚO ŽJSv·éð¤·1}Soš77dKa–¥“ñ„Y€HŽì#Ér =ÜÁ«É*J݃·ÛMÍŽgÜøc sñfL Z{»›EI¾êЪjq®†³sˆå`¾ŽY¿b,jByp¥h6õÏá7g©¡$$,ЈäP.Èz¿™øwx÷4<·±BÕWÐòâžìc`è&oaÍ-˜3¸µÕ$–X À*d*›T”´:¢ÔKü0‹6Á ¬NŠ½gòI§ý²^uáñ¯(ÍÂîÝWÛÁ´–öÞ°LñuÅdK^ˆhp¹‡$õ2K÷fœ|.Ô'¿ñ+š,CÞ~-:0Æ–êndbŠët ÞĨ÷¡NŠìjêKú(¯>#‹PaÒUoqÄRú“Ð`ÿš9ÓÚ7nœKÕ!ãuIf½ Õ€ §–ÅâZèö0¾¦·/V©6Ÿ7¢_þ+W¹èy‰6_Ç&á=’ܘ{µJá ­0¶;¤ %õ{@ÄXˆ}‹Ã^äZ«hÆÊ—ˆoaí8Úr΋êMæMˆû4gÌÎÌkm,9PÓ?ÊÛ©«†‡ˆõósc|Žv÷Ì‚£à% ÿ7ÊC—!^†×>3/FFH)tò¤„{7Ùt“ÀËQЯ.’kÜÝ’ÒaöJ´§sÖ±7¦)Þ Rõ>7VC¸úåÍrõ¶êÿu´§ui±­«"†þàta‰sb.ß/À'<&‚È¡²rŠ8q©¾%/*~ØZ´ZË?ÐÏv–ø{³\ËB¦ FÍm}T¿¸¡=2_—Ð^¢‰bÔÄ]³ÒÔ3o’9ç s¤Ã Mx>¬^3%å¯jÞ$¼Ì²˜Å·üìë衧JÇô7X0qm×ð $p 5eªtÍD ÷r.=~á]×w?­d};õPÔ{ÁºûÃOã}¶ìð{^ÐEʳc!ÛÄ û RÉqâ ¡m –f¿0­º°4G êËsÍc2.>• ÅBƒ†)]3H£†(èúô… ð=á—‡˜™ªä†°hû4«yÒ1ÕgüL)¨Û³U"œí‚AVÜ®/oHéuÕúFI?lA¤òÅnž­]õä †ìZuBh ]ßþ1Ü´Äð±p åPšÔeü~Ùûåš2Æ–œÜ™jqZ}åÀÆrØ©^t Nj^ÓÝDÞÙZH›·{ +ðpȼO†ø°¡Ê› K£ˆ‘ȱqrh #lÇO’ mä Ç/¨½®¼«W«ˆÊ£,êâjPÁž^l!]º ’Å;EìGwò‡Aô‘…[w» âëOZ ª(ÞÞ7b­dQ-¡ Ë®äᜫ(·xƒµ ç«Ä„7Àª§I¯sö»UQlèùV#ÑVöZ›0à+&uÝ:ê\îQŒ”Èg *yP½¨\ ÝÓFç U’0ek"EÝ.J+=úàÊGS>¬—šÂ²ƒ ¦)ÿoèáÎÁÆk¢ÌÌodèÅê.;il!±£üQ7*±Ê”Ùok>ûÅè×ÉŽ±%Tâú¤¤ü¶63Óœo­ýòиó3c&ð:M8õœï§2Öî$— èM8¤É ¾ îÖýˆæê½q6ðTE §¯,î£ÕÅðÕ„œ‘dsùÈjAZIbyíŠü¨Þ¿·ö91¨JôsM€‰«þCÂåY@Ãn5#ž^±¼Ö ƒ³9ú4æAÛ-µš£8y’“9µdáSï2½G ”ùZ9ÚAvcw+¶äE®­ƒm7ªèM쩺ƒÝº•ÒÊÛótü.‰/L°,Å8ùÿ#Ô ªâ` sÅ Ò‰ÔI¥ÄÇ ÓÖe5ƒ¯Ëuÿ,þÇŒRµS_Ê6)¦ø–Èúáyÿ åùí†þ‰7­ -`ᤰA˹T©™¿«Çšæ˜ý©¹àlx•©$7oávpöî>^¡ÎhÔꋯMGm“Kª¨æÖêâ–ý}¸qYŠ‹ÑGaM@m>lö˜bæ÷©ïq@dÜŒ]5w€Ûø(iqçk´Âè'–Ø#Èô³=& U8eÙdHªr³‹W¤zÁWšæÇÈÐ&Í}üb ë6Iyö@šHhL†º«]Cìâ8„8Tøü“‡Ñ•rM¤F¦æÓÇÏX!¸Ù³âáa9>öMÉ¥^L¿É5VóŒO¬h‡$øÐTAýš,(ŠÞ=—v ÌU(Û½'%mÏ¥ƒfm!Ë­#¤“•.Ð9”DŽ<ïg²8ˆ¼_¹°ù€ÊðO•-·¤(¶è¢í.©#ÿÍvÜáÌøÜAâDBRл»–túS9ŠKΑK>»ò_•I„JÛ<°%˯ßiÃŽAÆÔ$г¬³8jE¥÷Ûø „µp²“5¸"àÑ·ò=ïM]‡„háNCÓöpÄìå.Ÿ¦Õ»à¯úú­™ÿ< c]0û÷OçV.'þ‹£ßÀD Lå‘\“]G­ŸÉýœOº+bÜ_´µª³¨=<{yÕ¾ãD cší¤R5Zã,=HnšÎ4Ñõü]FöÉìš•ÞÇR¨,Ýœ²BµvPÑ…[‹´ò´ÙíEÇšnÅqoR=ò¯*†nörÀÙâ2Ël÷+€ü°¬ù„œÇµœ’ê î(H(Aì!…=Va«ˆÑ—o.ž™a@9Æ!Ȉtк(Mô²Á6mR%:Œ¿¡¡VýKoãªO I^<ÈD¨t0+1wÕ͹þS\”÷äÜÎñ§á²…jG·ýÒ‰þ’ÝÿFÁ/9».\ XÕ>é¶Ïö»Ð–0`†\§þ¹’|²‚pˆ>ÎE@¦4ÕC/+ ‹êÄç—†ò±«¤Åêwb˜Á[ž¨ˆÒ²òB~Tý„»å4ȪBIJLÖ‰!/ûÉ#.ÜÌž»8å–Bø¾ö¾„’Býú¡c¨ÂÕJw[‚]õ‹&ýÿl`Ê tV ö­ÃïÎá2çZ/“ˆd4NÝWE¥Œè‰D1(krdf{Ñ<èP˜ ‡é¶üy¯iî™’tóÃ}Ю"ÄOyÎôÈj–%npŸ©raŽ¬•¦}Ö¢€áiÍìë Ó]¿ñšª;*L“Ãï”!‹$~C-Ù»Í: ¢?8È5K§ÉŒhò¹ƒ+Kœû-ƒT6α ·DF/NŠÁOÒ 6¦*p±þ ü+ï2Ûœ<¡¼ËµóÂï®ü.„î4ÉŒü»ãù©áÞ)±VrÄ«úE˜fß.QæÈëÃâÅ®&7æÈ ××Ñ-z×Ö³<¯£ÄÐh©G»|îâNG¡šÈ<ì"ñ–­r¢ T7˱$öËT°~m¯é‰ûg•[¨yÌÂCÐÏäd¡o†‡Ý[~O0º½{+L)ÉtšX‹µÀÙ¥§TŒdŸ Â᎜nwÖˬ0#áƒø®}·oØê\‡ÓY )èi©´•f Ërå\¿×¬y˜Úrš~kÒ/^÷:*ýÄã½Åãùˆ+U1ÖY2Z?*°R]R1¥pFÏ'žÖfMË|¬ã³W·'EòÊAD·Å_~; òŠÚÖ€a°Ûá…‚w‡ú/qŒ} ã#í£’of¢çÞ§oV™'ã=Õ“œÑP2í+Ðèãœp¦¨è·jÿ9ƒÞЃêÌÉÚ=l]K‰i( ×–Â…­Žö³ÜݳìèV&e϶’v\æ+¢"&ˆ((¬@üYŸ¤÷NÒªësŸ sœ» »‹µÄìémÀUÒ2÷eÉ-›9RfòZ†…u“â³êÞë<’I,ÏVìLDÏoŠÓ˜Y˜—l ¤ ©í†â‡ÆR‰ÐÇ´ÀH¿“Ãy»ø»ŸR¤¾xÏqݯ±ÂÝ6Ý·ü°ÃéŒåPöuapNƒnàÑßl~'­4 à}Rr¶¢7:D æYS±(Íï`ó`”ï‡$Ï‘Nê58'®rýïsKS<Šîbƒêßñ}÷êôƒZ·Õ×·<ü‘±®Vø½&jÛçX'/‘LS7íJÆšÉö ß„ ÅzѾT¬žnM~±‡ÖÌœÜÃä£ðF]S¡ÇÙê_%$t+}4ZÓ-EÕ ![+A’Ò»ò>â7KÈÆʽ´õ$¦{ÌEèëa†dȽáè#½zJ8¾ávý0RµÏ•b(SP“XSþLöÅiyЧ)cynõnîJîÌ:+ŽéQ´v6S^¯VÞe2Gcê-^'›Þ\0ĉž-YÏ©g¹v™‘Y#ˆ¶ßc|/ <|©ñ&äŽ ,•sk«„[Ï@É †8íiU¥u÷_qÿX ZGù%©bú€écë© ‘¥v®u»PÑT÷é *I•‚ µSL»By)سj`º ºm9w'÷ÞA¹¦Y”¶Å®ê?]÷sÙ~q8´YrÙvnÍ‹Yüœëf€t|ó“6Íßøgg/º÷ÈEµÓ7÷[L«Œ¨o,=­îJ­âÊ1L˜©Ýöé¯a°ä ³†éö¬¡l–U‚ß×(¹Ü–~4ÃÆ1ÿ¼þæ·ïbE®5 RÌÃDTL»'+ú€y ‚X•§ƒ„ƒ³°†݆§][yhÆ[{ëu>N®ðïؘ~‘”â§Fíh²zþWÁ?m9sDº^D•†û…ìÃFDr%1f ²:EéòÁ½âBÕ †á\n«é³W Ùե̛·…fYì æTk)^#20È'ð5Ó›J@H$÷I9 ò•ÿ­Z$ð¥øÐë`l¯SÒ¯í!JsKô5Rb‘ }¶ÀGÎ`nt¾€mˆ¸ e0·¾HÖóâXY£ý6Ñ~ÇF¤&«‰¶Üð±7QöU>póž{¿ê±‹ŠÔ÷d¶_Byãª<¦k1Œóüè2®Î¯¾Ÿñż(h|þ¥)jÎÐü8©!°õ©(v…=Ó`±­ßÉä¤@ÂÙÀûÕÏùu@k´C_Èõ°‡$r¾eÔ‚ÐúbS¥¼,ŸYéq+ k1¢Ó8ÚH°Eøg í:hÖ˜¡ŸûÑ•ç$‰?•ðµ+åq“ñ—E]{Ÿ¦=Æ€{»EÌ»îímó%Ÿ¹½–åªäÍÝTþÕ5àt†£©°™{âØç% vÀâIaE\›¬Ð¥Á³ÚRl.ÙÔ$-jî("ì8š Û©½Š c ’ó9s»öƒZˆÑ¯} ÅÉY!0ʲ߯NîÁXš¨‡(­3¿‰ÊÏH9þ$ðqOHºWŠo|Ò‡5AÇÑvu®¬8hÍ&Ü÷©,ð®2›ãùc¶›€+:†ËPÊÕ<í°ÄÝR$}›§èÏј½èI>ÝüŽñé.½÷]~BåDnü”‚nùþ˜ª¾µã±=t®øýÊœ™R ¹<6Žó;mst'Aé ΕHïἇ¶wžÑÎq¹œ\*·dåßümýÐ æ%¡‡ž×Û/imÆå˜n”ÛÈ2Á›6Ñ O…ÿHÊ„}6sÑdš#}ðé6¶)®¼/ÊçÝü%•:®Á ¸ÊÁÉÑXæÊ'( KWòæ÷,ï|Û]@lðùå¡<˜ÍfíÉ‚µ&"1tD°¡ÕCü?ûžaÓæÎy¨™וžo³ª›ÆÖ–jwjp[„“®Ã©Uo6P1¤ã_œ¬L±î4{ñ}q0¼¦¸sa÷ؼ F‘Ž„XT6G2ÖJÕïáÙ[¬ÍIEk±8åÃXÏù—–±-ç5ŠS7ßfµÄÅhF5tÒnÒl‘4³ÈVlÒ‰¶³$hH±dÐråRò uPD¬¾§V…y"Ýs °”óqÔ‡çÐtŒDF×]¥ðÊÝDÞظxXPi-Q àj™îðVh¾Xæ°íf‡ˆâÉäL(ºÆ‹„àNú% 6¨víéðò\²šùŒ§î¹¥ééYøÇ¢Å&Ýæâ²1’ÿœ…v3”Áª¤P¥wœ°Y¾³O¦´v)¹Mx¦B飆Hõ¶žD†ðûêHÐÞ¤ ¼šöF+¦C ‹Ýé0HÜ ¸ÓÀžAŒýX½‰{´#B¯)]^µ´$ÙW ¿Oàù d3„ãÓdÊĽÖ`-†³ñ79¡X³]Ã^Ìêþ½QrÆw^îPw×ñ¤©åa¤­ÿÂÍI§™¹Ï®ìCݵAEÌ\k¸L)°äõ”‹SbsUzŸJX-¯R6Õ8ŸLú.ݾÂØÀošÕ¯ÍÞ(RhžÁ™2êsјÁ6Ž½vJZûÔñ²½ #¿^÷͹<ÝÒÁòoQ%.ó1• â)`ˆ&Ul¤àј•'XÛlÖ™ðA)µ ÕÕûä·µi2Œ›˜i]ôêh"§× ¸ÏxmJ^¹‹ÄØ›vqC™-¤“céAîf¶Í„€¸7´~¶ñE½x¾ëðáúà‚tÓ™ M ³JþSh-JîA©Ä@xçSŒëÅô Üãhš½=¡–pO[&´„7=Q“`4PRÙì“Z›¸Â&Û;,(í÷ÕrâøîDë9E#?è®Î²‘8›Ü¢F‘q¾æCØg‹*ý Oüìã×7'ÀÝ[3…“‚¹ø>ÞÝõôC>Áì<êp¹Sá ¦ÚEÜ)®k—¨E¨\š kˆÈÈüÅÌ[º6¬/b8Ž—frPGƒW¨4ο5ÖM'[oÇ _¿& ÈmW®ø0zôdÏ=ó¨ìvQ~Ô à°`{›EÞÛäûÔsðaYHƒÍ1Át‡áa1i‹ã¶ÐÏh'[¸2ü¬˜>•3z¿Óˆ±µh’FõþŸÙVTHÅWf¾Ç£0jäôÌçE“«µHÁñl¯Òi ms”/%Yæ²òF!íŠ$E«ÅïioDèê“xúE±Æyí_Ji5 E4Ç뿵Ë+Û,zÞJëhYSúN[êüb;%Ðu¸ø‰s^R20qwçªñÇø ¸¾p¤]üìRÁ@§ù¦²‹HTvmV<òü¡;-Q‘oa@c\‹“Ì.‚e£$ÓçÞâÏvnð–ãƒyÇœ?¦Ïg %R$èfø«ÛnÚ¸£az©äCtIÙëÈ;-Nc>{Õž…xÔO.Äæü¹ï/ŒÈ(“]<åwqä$ž ðBB]Àç1»ôÌ'ÓÀ­¯u|Zø"Û¥é5Ü,Ü›_Qv UG…؇ ctž=ŒrÞ=á:u©†;2–øƒéªÔøBmìåNP0„õIzi .©Œ)´èêǶخàd›^p¨× .Ul8Ld“HÙ¡Põgô—o¥†Ô)©&¦7 HŒg)yÛýtíZÉÌÌꈦڽ=kTô Åïÿ”²M2Ò`²>‡a0ú¤[¦èTµôÇ—£†Sœ†ðt7ÃwÌô<ÑaÍRÛûdaqÅ’ø £žœ!Ì3“JšlßGÀý‡¢Ôï`Ë'0ˆ 6ß¾6Ò)›]«™¾ rnç÷þäÝ“/Éøù„yx¬zQᮀ ü'ù%b‡Þ ÷”xq8Æl 8b«‘oÝÊu@ÿ|8÷ÒòZV×É £Ê¨RæqeÐZ¾8̤ɽOk[•Ó𕬓–¤]˜Úi¢0ØWBÇi³FSOåx¾QÓElfØ‹Åd Ùbl~Æ©•”«ÈnÜ^¡:çÎKrj¬ÉËÃÊ¥  20B·8á§s‹LøH’zÐÓ­kôêà“`K«ŸýGÝs£ bÕ.ù@‚è>^Û&rU­ãßë¾'ë:ý3l¡è¼§8&N¢& ‹™ô|ê¿‚y=™Ã¥ÁcReÖ0ˆËF)Ö9ÙÓîå©xÞYšÝÚ²çôeL¿m3Oüz: ?ù–$úAW[*3²ÚIΚu "Ù"ÏdçÜ Ï€ô€)‘pkU¬ÌÒr;þêÍÕ†ö)K<ùüç<Ũã;²j=cñϪ{_%*Š©'þÏ(‹pŠ‘ïX‡ÞeÞ=v°Kb‰æc0±À{[£ù\ݦ»JvBqy3ì¹9zYkÞë]ˇϕÒí><úê„Ÿ82Õ] “øà9ºÎ-÷Ä S‘cÈŠ#'­Ô,¼FWݽá¸ëïU]{K혶vPJß™zíá3öj.œôÞ:ºzPÂ<)ÿ…?µÊ‚—YÒ3=vK³5V÷`@@[Y@P‹å>ÜLˆ¢0Éæ5Œ–²Yù ø؈˜”¼^«<–æH!°ƒâßÁåV¼ :ÆáÀò\Ÿ¸%í~¹:½«]§ià tLûeO_yíÚ6­zÙPÂbÌóÁ´{¬•ÿ‘f°rõÁ ¸sÚ×D–ú¶À M-â€Çº><…µVÑUýÎÐZ÷ ú–tÒHâE­TŸ™Èšúê?·î‰EàºPW~nàžu efÚÔ,7dÐy¯&'éh@hˆQ Åx–^ǾֵÛù½“…ˆ&ª¡œHÖ3ÎîFOØæ¦ÀûÑbn _ú½õk’ŒýVT¬ZžÐÖFÕä܇ê„ègöZµë§–ùß &8ÕdÍýO’¸!K^éÅÝŠ,ÔÑß 8¹ÍwuÏ †DHFs‰¢X¢‡=±- AÊ Ëê2™mX둸 FQ·(GDU·ÖUoë2›Ã¾â.ªõŠ^¨sXzÿeBJ­Ë(R§Q¼úÓøÓrÜcý iNåå2"æ@n-±´†™€¥Új–ºßëâKŠÇb‡æ-y–Ãð^ÖYp`X.¶¦Ökœþw8ÉRö0¦;¢ÀºÓs¡';›óšä_OC33„9Ñ;‹gn‹SÒQ|Æ@­¦_h°½âuí¯N-ëïCÎìÏ9Œp >v¼Æ3›o2?¬h.-ºW¥É£›>63XXÿHUhhôXH fÍ…BÅ+êMA¯ a ÇÕDúòç¿QDF~S„Ò´›üúš¶ÒGpã?¨ ²+Û¢¯¥Â–àB‡®­f…­–:€8+ú} ;¬hÅ ·~"e?P.ûåAÇûdSÁ ˜Ö¼ ¾pˆðn,Ø¡ f×n²Î”«’·Æ € pñš\ßjWÂkqבáÆ4…!Œ´¿4”$†GëqkçU»^°÷fø#A꥘Ž¦'‡½ìÚ¨ ˜V¸Ê—FœåˆBÖ—ëOžJƒä|YÊßÒ^›¥¤vªå…¼á4©©Ô£×ßVÆIþW¿ÈË õ8˜`uKpŠª«ÀMÇŽÓègJqƒšvø¤ÙÁʶ¨š­mL›ù[^£ŠqìXOjѳAYp`usž.|èknS:R?Ï÷¹kuB²¥ršÕ¯÷qôQèëÂ+üp§æ6€áðåyi_8¶Æ[üÁR·©ÓœŸ§ÄžøÊÀîÝãd²@ ­!7µ«ogjÀ”@3Âf:žÈã‘^¾4«Ûw”ÁZ—–U´T(à}ÞÁ7Õ7„ÍÄ1ÇÁ.€ÎiÊçÍèËÛöåL[ÆÌæaoËÚä \á¢0Ó•…uŽÇ⳩ ~t¯jP@jÜ_ûa˜Í¸£¹‚É!†)Û’ÓäêÆ›?v@<µ㚌ÅÂ|0crnêþw§œ ° šûa¹ŠÄè…1 Ss¾«7— rï‘Þ|ê,^4H|­êZtŒPdÙ¿®òéÏ·¼¹vc®Âöôá$wǦ·þ¨üß VŸjztÊJà¢Sp‹Õ,gkUÚ$Tɳ’•£míóNz¢ ¨Ä: _»û»‘P’‹M±ÆYÙòvˆ—82JÌEÇÞX\÷!ÖÑf&Jgmr`Á ¯€Ü+`ùp¤P»ï] ;`ì‡TBm×Û.7¼ º4ó_nºô¡äMÐ÷8ãœ6cú÷¥"u½Ä[·øYIÑÍü¹ªk’>ä6­7øõ]MáåPÞSV6<±TÃfå܆Šîj²•ÀŸùR"tP<ðGwGzf6q#ÊÒ‘:’ðŸeˆ¹ÃБ膩a“ T&1W,ôJû¨…Ÿ[Ñ2>IoK¨ô!Ž©’²ùDQuÿ ]ˆalÓT³_zª ø±Ý@´Pµ†iÝoRÍ„¡ Òñö¦9.©06ÃÈ—X.ÿt»SUzXÓ¬µÔ¾‰0pA>æÃI|Û»ÏÑDkš_V$Cá¹ø$dn¾½ ù ¬!³¸ÁN7õê8H(¸h›ÈãØ’™Õ×¥|q ‡Ïä!¦ƃ}h'™5„ôJÊû‘ð²Ih·äÙÖ\Z¢vÚŸczRúWV)ä%B…>Fc³¨maJAÛËr»mäKèÀúDàáSðß ©³,e]ÿÚžè› !÷-Åt*ßÃÉEg†?¥ü…eV |uæ9ó¿Àƒ° X[÷òoÒYX½7ÊàY1ÂCÑé€üQF³ÚëïU3E·ë¢¤4“„Vg€X¿)˜`ù§.„Ž2|;LQ•eœ„ö±a>2>b¤H„jŽóå§b¾·÷ÜÙ˃䣪=3vY«$C­Ó$@:~ O•¼óòjú²…)…NyÞµewñ¾éÔ%¨h—@ÙØÆ¡üÞ©*¶t³ˆ5'œÃ%$^<Óoùîß™ •{NXŠ1kç7(¡šêü0 t!½f 19èö4p Á¤¬Ä·ö*²#‰#ÈT<á'ùÆ`MËåý90ãõ—ºHXcïºý+¦3\¨uK$bïêG0…*Ìâ¢sÕ²›³à‡åF#÷i%³G MbVçU¡Ç£b[òعŸ¸ÒŠ_¡™r<¿°œuð §ZÇüRF2…¥>mp5¸˜^𯰩f¥.2¬Ë<xÞ¬'Dg~ǹ #V4-z¯þˆA%˹€{Tbçé n\PÖÿÛ}õî,ëR–ØM†PŒ£Ïü ÐÛ4tÎ#/|4›0žªåkôQyí@†—É`-m 5o¢9tïIdLÈk á‰vË'ÚKâZéCšQX&­«ìñq#òsÍYŠ¨”zeg.:hép¤Íúgh()¯ä*úmIdªYˆÖ®æ{²ñEF:ÇT ‹àp˜‰ºî-N ãþx%HÎ.`ɪ \­ÜyÿSf% dÍÍ¿¡bðé‡7r"1ý%ƒY²¥TŠ…Iì­žBkMgÁ=wO§ÅIJ¦œgáŽQ”¸q&ïÕFÙ³Š[ÌÐç[sö.4Kùµ‚Æ&Dh“jcQ3EqmWz•ü( Sy®á㙾è‹Ê6ÚC·Lx/f‘0l—ŸùÏ\͈gçþ²ü^ñÇ“O#4‚§Âó|~`®(òå<Õ8’J™g–ÊØ@([9ùûEŸèczש/ã—Ù“Ögü :Âvî˼œ·H©ø¾dfš¸¢´#ï´`[‰‹HÞKºÍ¬âûÜÓÖ \&éGé#ÂùëPe=.Šÿ?ƒb×Sêîfº’>òîl¬Ê‘{m¦,h6žÎT÷›ò: {G|AK“Ót-qˆMþ.{øœ0eØw!ZöÓ»o,‹7tŠ=rôÿëÝ$! O[¨<´NŠ¡˜ ªë¡ÐYQ>l&ãºlàÚ¸Ò-¬u’fRAŠ]tóÄv½'›Vñ0c®…ÊØ”Z©aN§i–©«!C3V¸ßÆÉ<[­d„ð\;ÁNÇ®©´h€«ÆÆ76Ž©4–]öG³¤ôh¾ â%Kn2pO ÎÎŽ}ü”§1Ü03™6Óºv݈´ÚAY²æòÈ:e“Ú÷Jr¬Éc}ô$Ý’¤¦zñÃ]`@ž_RÙOýn•½Pá}”¸ÝC4“©~µÎC¡¢_Á‡½‚w#æ3Ï©iëàDèìážEƒ²Èt”Ùʧi®¦_>ÖÈ& ¾êë¬E™É^¹´š·…4#ô?ÂÆG"²+‹w0Aï ©ËÛÜJþO£WÔ)oØ…>•9- A©îÒV~W,Çô¢"®b!®-´–Z«Ä‡w,Tv[UÒ4ŒáÕA8^R4ÍLŒ¹Ÿ DÞ§È1ÖˆÕ¦DF(”Ý;L _Þ Oûž1 Ë™âIöbò´¼åݸ÷vy|‰Ó3½Õõ!iÿh{ÍOk–Îh]°aË; ¼•—QóÓZ&M1­œø9t’<'þèþº;ÃGJ®âÝ”fv¶F2±òÔn Óë͞? òɶ}â±ü krcÊîš-õo^Ù2c°%|ÖNºÄè¯>ßây]M/5ï13ðÜ ¾‰š–$ åQA׶‹†*´;žáGéJÖÍ÷¢Á=C$ät¡aæ0Æ6áh7Û=Wä'"vÚªâýЛ܌¥ö–'æÄ€WHáÒ°>B8õA*@® +ˆÃз ±—ܲ½Ã‹À¼«ä>EŠÕ̃šþºÄäIòœ›ì=V“’4Äuâ_‰-†A*ºõÖÌ'¡›x³þš u=ÈÄ+uH  sé%yJ4ìãNؾ§$îG „Çìÿ ™I\S¡¶Ëb ~ÌÛÏÓTæ{°E‰ÈNâkžN‰ö¡xÛJL‡Nb¹ÿ(¹0hš ¯Ò9Lð½|jçòB|ÊïDl–Ç¢Á~éhø Ó™Fí¶ÍSf/E_¡¼HeOÓ¢áïJKŒœ’òQ[)pÛ¾ýøà~$)G{hóRš•xm}é³@&)“W¡î‹áu~¿£<¦·¶Ú›­OÉ…“›Þ ä:}»é²à—¶h7ûÚפEÿ=ð‡\Ÿ©É9ø9_åFGƒÌÿ¼K¯;Ńù1®“ü_}cÜÂûŽW’³ECöMó×*qý¿sÓçÂHBÀ‡P˜©XÄ°r™×Úç!®GÙ™›,¶í}¹0Äü>°¤é‰ÝÝf…¶áòÎNÚÀª)*Iƒ™C )Z¤ªÔÙ ¢€"ud³zÏ^Ì£Ë|^J™hV²?yüë)Í6!•‹ØýÕ—phŸˆ{Hø qÞˆ…nñ‚îYžƒ‹òZ‡üœ£gl•ì*ø›Ë²CSˆ« _ض>Bp0ŽiàW“¢[¬H@]Þt*VûÜG#61üºyûSV†L^Š»ïš55Eݳ¹ÅÒ5¹êÄ=Û tÉ$×V–£*0)ï¢ô~ (¹Í§Î»À âÝÛÝ4¸9¹Œ ¼+Z5IöËì+ÈcåEòU¯½‚_fføQù߇ ²mùÕ.èa‚ ­Êö–¼Aÿ¼-Pî¼}d»ó”uÓ@Nme÷ø[=仑/!ÓÖµAÒ%XÔÃ3ÕýZÁÿÂNágÑazŠA¨; JpX»Z ˜¾ãûZÚi×fóï¹·”iQ@I»¿ñîz“yy:aq}ZµÏŠu¯EtuEû¥Á_!ŒŒDvWô8{…þÌ' òBï^f||§¢¡†$. špòžÓ?—CtÇØ€_(™³™$‰ÂøM÷õ;úK˜í¢µÙ ;ìÇðÒ é63¾Ä¹Éª {9¶CµN©]d{÷¥OZÎC¼ eá—¶/¶•ß‘µˆ¸Â%7÷|¢oP°Šcá¡'CÁ¦ÙIg £òÄr-5vLâÜ L5—A®¿ ëæSòUÑL ‘­Óðf:P?ê–Ì+K¿ü0\•Ii–Ë5m;Gï¨5¹šø™ä6¡y2añ‘­…Ö£é4E沿r8&§0;þb¤Ô™ªEmlÿ°…^[VÂÕ|6ÁÉæV¬ÛMøùïH*wC“4~²–Êó™RöXX¯÷(€ì¬Òæ¯0‹rl„Íì‰õöô9[ë1ÿ]×—úáDß²äAcʆêy´¡¸ Њ“†óçZQüÚÊÕOåþ—Ÿä HÉ·2íŒ7ªŸê@RסԎ2á?yÍèmƒos­pL–m8±¿ïIŠG©e®¦euAK%®M´ÅÔÇç¬HúDpí[/ÌE*…Ù¼WÜvîz‚wÃÃÛ¯ÿ{÷]—aYuÂÙŸ8gZ³ ÌÛ ±ZE‹ ¦¶¹%?KðM.s¯9†•J*_bž—ƒdvX“¨upÛYÕÉüù=Fk;Â.¡²?V°ù”ÔHh©!0ÐJN=P¼¯¨8/Î×,¾Mj•h 4ä%£ X…Òkáý¶§Æ"0ž·5¦>aÅÂغÜU:2ž%{Ý*Lü^»ãúůyÿàÝ–[’/ñùN¤s~õ8[|`žà÷6,ˆÈÒŠH‰)goE¿6-pwJ2ZZ­ÖÍ&@P©šGä5šî‰g™(é°™Ò›I£j+Œþû"t“QGAÀμ ÙØ+Ú˜M!æšïÒ¦šã#×} 2L1>zÎO2d€7¶Ô ùo(oŽ6’X³W K›ä ¢j=0j8Øvë«ä#ùÚ˜G¿p¦†=ÿ‹ã ‰ÚÒ7.i„7CÖ3\Èß‘¸èû*Ål&èRð¹·µäA«ß€ÿß7Ÿilœ!tíh%Dî2971OõØTü2[~1_’·¶=âl*ª|4 9”3·WüÛÇ€Ñ}¢tì?!y.Çj*Ž'¶ãÎÕéüð½ï‰¢o”îÉjÌ(¸/Ÿùú³ÖŠnÁ«gW¡\˜u·WÚg¢ªš¢×Œ;®ò³‹jZV^¨ÁC†l×sðÊ0ʯÔËEl)CÝ‚Àšk–'£¤kJÌì ^@¢¸îë46£²º«bW3±#8œ 5ë\dË?ȸP‡)è­Ó’öøiåÄ4FÚ-ûB… ?ö1)üxÞVh5Dþƒ%HH±q%ËN OÁupHD˜¿ßí']ºN'<ÙÐ"'v}Bh Ï*Yàœ€­Ñü¹šëV_Há,Q±†“BÂBßfðò‡…7^†Ü#(]·ËkâÑ¢Û •Bµû¨®·wQËZ ¯hª ß,¤k+Îã»)Hm¤/ª_¤1Æ PùÁ­õŠÐðÁ Ejçþ´ùÎŒ;*B¯þÖÄC Åí£#½æ’„'Þ–îP¦6ßro|èUÇÛk]ìŽ×ƾ¨@ÊkA@åRsöØ¡&¾p t¡/)SÜ=)݉MÝyIª¼dyôOÈ^eÂ<\ã/—ÌÉ3³?t¤Xž)Oˆ„´¨í»Â¬«Op²Aq<« O «ÛB›:ö|0Œ%*¡c>úšìß<߯눶6É“;;Gk¹¯Å”p>8Dßï¯{¹ [¿û+ïGÎÒQvœ4V‘£R!uj¡Ÿ€) xš u ìp4Èãÿ9®YB—z¡šºpêÙÁîšíAd¤ Z'À>íIe|§  §¥C‰¢½÷kÎ@B_¨ˆ¥“-JÇ’¸i, ”KšXŸ›¯«Ž…mœÇ…=7Y\ת]§AŽ³”~e«‰#†ÑµþwPSÕß‘=d8•Gé'W›3Ôê*Ÿéè*ÀâAü 1ŸË /ʆÓbl ƒø|“Ï«ú‘\.ÐK?A' gRC2Ú¼LÆ zaHË)áøå¿Ã³Ѿ¾‰\‡dJA+ˆ%Çõ;ßÙ7 ‚†[ûÎÌâÑ7¶{YB•¡›™:–rD€ª1gùP×kø˜6˜‚Hrθ"Ù-üõ&Æ,0º‰E¡äýb¢xwئÞ^Y¤(v/Hº pYÈPsk=sˆ˜¹kuŽ•s +ˆÐ3Š˜Núx‹Ø`™½q‹¼pj  çw¨ûA¬‚¸ lý¶þ÷öLOpZªÀ¶þ"·$ïa~'›´rdÇ<ù¦hU—è\ÍTí1pœ×ˆÔ#³§\?ënN«A­æ«ƒ-ËkÛÑfÈüpA^,?’æC]Dp èÉÿcŠæ=´ºÀ4µ²´þc(d _ÇÎ2ɱö‰ªV^ —ËM1gà $ú ÛZýHV}^þÇ;5ÍÜMNQ¶¾-”KëŸÎ ¿¡­i²ÔÈ3ãâ™Ü0´¥3Ù‘ u~¡í¦–Âuë-ñã¬EZ]B6É;æ.ô¼¤s­MmŸ4àCÈlÊ_˜V»äc¬2ŸåH¿_©:,m‘ôäã>P>>¥.ý7Ë…¾ÒWëQ*‹±–dfÚ­ÿB¬EHõ€TC_¡›Kø 3€,Yh<ÖfWÖšËÌù“í­Ê²¬=Jµ]y8¤ =œ«’F€¤3~ ‡Qªq-I¯MÒЊjrci»N6ƒ4Yšh˜\Y“9„"¿S—›—OZ¾ªVŸÿ tµ ñ1È ð²è>ŽÌ‚‚ÊÁežŒÆ&’±­cõähC*º|¤#BA t¬Is5S,E^ñ¨º Ô¨=¢—Q"Žƒ÷o?u_u bÙ¶Gv:/ƒhNÔZyäyQj%æËκíNT©R_wcLéH6ÚQ8qÙG®ƒœífšá¼k¾*ô¾q϶ÐõoÑoØÜ(á³È»¦h*üT‚ÿjP‡Ï–3‹¯ {Y€ÎÜF7¿°ÞºL;;Ù˜™ˆÎUéØŒ¦·½€Îh·4·æɽ½Wµ×oQŸ–øT²T¦Ò¡ I²nr$±;IM@h̶ÁeqxÈR~›ö–ùôèþJ0èEAÔeYeç~FØXXÞcKM‘åÁ£•ð®ÑkÏ’ ØsÇævÍ®`êºK dù»:í<Ñ]˜'œwíÈ4`š'ƘÂÂG;’¿º°õRVØ¿VÄ7 þtJûÑ5IÑ)H{Ñuú¯;CÔìÓ4®ÏÓÚ®üi¢Qß•rìßl?›™ç¯°*™ö»”Èœx;¡ž}þ(­€ÔOüÌ3£b9«”[Æ•å)jÒS-jt¾©_¸’#1ñY(l"²CÉ@›>w͇òGñS_ÝüsmÕNÝ`gž~‡XZ7§R ¿ÛGTO?Æ¥ëšyÞüÒøŸ‘#dŠ<°•‰DM¬w¨,y‹z¶–õÇóOŠÏàa—™é膺Ú²·5ÕL¦*’)à cÍ!4A²» KI§;Ôír˜b:U1¿HÝ’ˆ¹q æ/\…Pú\)s¢"ò<§S2¬Ü6oýÓq –0Ṳ̀Rœ µð¿6øe`Ì ^É »Þ€Ãu.úÄ–&>ö*Œ9ù‰p"¼Õ”W\ÄÙ'Ñ jÂÄÿ£lšý…HJ:Œ€ÔÏ€÷ðú0ŸZœFAïâ¶áå_ìäðÒ¿A_˦ìœ,g]† òù3'…ê0‹‚:È|”ß~Af˜ÉcÅÈ—yëŠpÙªPò" 0“ÖÿB([Á«>Ý9ÂÞ­˜ÁÃ/å†Ü9l‹²ú£Üz˜¼µ¡öôkÑtúL†"2>Ð/£mknQÎæ×á9ÝÙ¹²R~ÌóÒ‰…æ‘>´Á3T¥£ µëoí±±QGéœ2™Š]̓:%~~Q˜œ¨ÉÊeò@ü vžîæþŸJy4“•—Ð&`‚o! „e`P”jCÀº+»–ÅÂèÒþhI>o kH6V÷ÌÖ€Ÿò·Lóƒv—^ƬPÃÁL¾¸Om^ìEdL8›ôSüž‹Â`· @£Œ ÊÆžº¾åÍÿ=z¸±O€2Ø5½i³WäÜ×½ÐÓ¥º¶šdÜ<Ó0ø•´ÞèíÛúQ3X(ªÕ¤?²âG·Þ4T`<À«(¯¨&èjAc§¼P—”eY7³|Ͻý¬´Ó(åÜfv µPE­5®oã*9¿ðÙŠ‚ê«Ð2}S÷.Áy Û}ûvDóêÛZ½Yÿcd˜©Ïá”{:÷ÏEÀð ¹~\ %s+GüQ)òHZ˜F0i¡!nMÇk™Kt2>œN£Ž}ºeE²$ó‰ýÀ›XÚá]ü•ÉmUnÄn¤\—†¦õW/ÀŸd¹bPú7ïC*¶ÕY;c&ŠqKh1^ ·ù ëøÑ9=e)Æò7¥NÌ uÞ0˜#úú=¬Eˆ+׆O„“Æó¼v´Ƀ„„v‰i…ßAY!ü÷¥¬(¶á»ÃÏï,=fµc°þv¯²1•Rv^ˆÔ²Üó]ÓB6×!$Ëž®¢Ž„É48BBB.‡Ùù—pÕ™÷=¸¡%P»³äãô\¢ïݱªL«¹ÿ…)¹ÏEq´[X¸]--›ã|©à¦ŽP Ó4õ(âÈ«"ˆéLÛÒŽ>¼jb1zþÌL§Ð2„¹‹Tˌ׮ƒ,Ü„}¹S†é.ÿ˜µàÛo³¸þM2þWUë™wŽLˆºÔ3Ôo ÒSÇ#¿ü/'”,èìA&úö]¬ìhp@Ö¨ŽH Ο¥þ‰îÔ)Aœiô³%•Ðüÿ–ºÇØ]¡©‰°34° ßõ(›íš©%Â@Xª\‰;Üô?b*1í¨w:á½?ŠÚu¦IŠ@ ³÷Ÿ-¢®‹–õêã@¡òL¡!!´ @§öÞ/Ø#²ðàÝ=ß’§5™Í¶¨…ö¿[×øódò6çφð®á‘ä•XÑ2x`ïŽ1˜î’cÄ}‹ê¦$çÖkéͱkˆa8Í’vþ6sDž–\AÌŸÕ3A`Cýÿ®Eøë^ãé21×gW\ØQ­šý»YWkbÕVúK½ý§´6óħýNä£öå_ªŽBCÒV{OàèQî Á¤“7K•¼©@¾… ¾u$ÿ-ÚÎø_˜E‹Ê©48_,ŠKr¢+‹mgºLkº7 óg•2XñU=²Œj×ujæóG^ßx£–h¦Kê8}¹=œpçS§R_¤¤v¢‚q‘LŒ <Ö ¼|¨[Áj²7÷^¡2}%*‘sCH öù)‘¨±‘E9*êß;ªÂ:NÆâdz¢ÌvøKvüX¥yO½žŸ¹¬sîÄA€ªâG6Ü‘œ-;§Î6B1ˆÛ=ýîH&&mw5J<ÏðÜYõ!‰µ”T™nd26‡AûI$Bï¥ÎÅ`“îržѵ°ËžbÅœõ¢òJj¶àB-ÍÌÚ×6¤°È júµª¶|ŠÚXUÜxÊŽôVeº®'xŠOÖN+£õzØ* “í½#Ž½BG~W¼.»àªÈð™@' ïMsèaø´W0eûc’ ¶ÙuARüQŒvó÷uCZñŽ]Lp :åôv"½µ3Obx ±…"¬fY?Ö¯þ‡ÑPýÚÊBvŸ(=4~çÍ|­GÄgË¢D!nÇû*›eRÊ´[þ)·/ì'¹Šü½5ûùûùÃ:¡ÈõI ð“–`ਆ5ßp+·ýd…E`Ü5â©Sz½ûgKŒÈgêj] ™†»|5ÁÙz™z†.Tç‹`ž'< 1Ñ¡'û‰RhàTPè›Gu>#½„0—„ʄЛìÿf´™Šä˜“‘w³Õ&:¨xsŽNp½:³@ˆÿTÏ“Ùëz‹O*;w«RÜØàa\ ±å\ü^œBÑäQeâGi÷ìKlIºÞé÷õÅïn.}ïÀŒ¦¨ÜéKƺŸòR…¤Š,6:MßY#¸ Çsõ‚x!7MÐç±Ð¯ýU¦jòÛ–ˆˆ•ñAÌ `0 €kl;‹}L]ÀÆOp 6JÀ•©$ìKíx´rß=ÔóÄv|Acu<¶ú›¯› ‰k ðÿM´ P&·ƒÕЦÁpÄf­â(ªl #3Õ Ý‚|®á¶,Þa„û¦FßqÝ@k6' ø²†w†ÄdÈ3›uÉÄSl°H°Ú¨ò_V+ªüËÙ ¬—gÜï“Ï•u¤ÖøÒU±„œÙ)<ºíEŽ‡ããŒfÇÈaËM>WG{}¥f+Ù¦Š²$Ox„u¬TXôÍ!4¬R‰#~çå×£Nj%]“ª´j¡à–êëôq {‘éµâ´W‰#Ù1ˆèbP;ªFÈ[T•3°W ±Þ¨_ + ½“ÃÐ`ÓXàÕNg‹ÀŸëÈ*­ß}“dû@–XïdZ–•A©ïa#…øçvöoþàöqwuÐçA}˜hX–ä-Éž:’‚‰4%³œÊ¿½«-Ožàí`ž0ç({½ÅAˆ,¾—Uà”k,ì#úôêPˆž$½75ËîÃÙ©]A`Ki¢´í•`  ¾õ@Op™ÉòÍU¯ð`’Kl_½Š?§¿«7{.:Ú´³ÀêyêPÏø‰15kK,X¡^@׫Ï!3n7°€q$En@ðF( ݦ+_3^ñ§ ¦X œ×çãË)ƒP|IÚ£ä㛟éØDÀ 9¢¬|wM—äºeå4`*VÍéY -Àóþ¶¿Ð2ñJO-Tª+Te¾ô²ëd\_ܺbt+ ZJ;À²ê 7¯GÔÌõÅ*å&‰”zÁ$p  UÇK˘`áI;ÑÐü†‰Eøe#§Ë!ˆÀŽ¯¢oÆb‰›ÂWÜìˆ)¾Á؆åXN\à\vQ,é©ö0¹Wºè219Îì¿‚Îö·^G0g_ãßêͤ"uËÖ\šûøŒ+c\›OI4E™•gzÒCXïHCåɉÛñ­Mma¨æo~!K zkIJ‹7G+ÛÀ:HK~LhÚÁîìã bã=¶ÛzÍ–jaÞÒF½ 9, C…Þ [Í)W—(ø•T ³-ð->=Þiž‚źŖPxé¯"að™mÞp” š£Î›×-·;c l;<”RSI¡ãhj „ôÆ×óe«éÕ”JcìW¼ª!a`:ŽNZqhþ)¡Ô$>—þ%xáîØ^ÀSŠŒHw8Ê$}<5•~Ã/®Ó†i•$Qj)VŽaªÆâ6û$Ò·ÇG¥<Œ ¦ÉИ³Øö¸Zð,•î£šÒe\ ±fÃÖ¼pêˆòÑNÈÊõ%Tåªa^`)øÝÑÿ©\6æwŠ',zâó*ËDäº?Û·‡„ƒ)C9cOwÎBÞÜ °S?¥xè:·s€®ù-Y,y¸†sêñw?¯RØïOmÓgC©˜dÑt±vÆ:¼ìÍÀ3”Dí%¢9¶ÐÈAᕶ´B{åUþ#¡hs«ÈkÑq7ög)²ö÷«êžé]Ô|ð•Õë“phÊZG䥗·*1RU$Ï·ïü•xmn’~M#7é"t¾9ÎfÛj€ üúûèq‘¯,BO¿Ï °ÒB Œ·B×fµŽ5L…ñÚx7Øa¡G'”×n+OŽC¹ç!º „’ù¦shŠª‘CÃã TBeé¹ô¿È1´YÖ½Bç„ßÿ3v&õìæ¨9¡:«ÑVuÓ4Öx3ЉҖ¶‘æWºéöòeä-y è—TK'‘»êï•ÊºM#¶7;«©a¼ÿß½Ö•¶Þ-ù>ûü7©@~PS„ðܦó¬å"‡;J°/çtëFwÇÉžÆzk·bÕž~Ÿs^ˆra×®»wsq}ê© Ø_ÓIFŸ0Эª)ó!UÝqÆp|GÞêbG$¶”Ï•sÝñÅð7;OÖKƒ9=ø|óÿ;ƒ²¿B*nîç•leœ|Š¸s(¿R1ÚÊzj•Üæ;âHh–j 0¾@ÃHoú!šô;}A÷ÂÛ}àVø)1-Ô¾uœØëâOŸi\Ò-Ã@'Pn¾ŸdÒZ¤Ì6÷Å¿óH´:6¿ëh©-;±R~w?Ù¯øþ=˜X€Y¿ ý–Ä_]¬s+§ås‚KŸVÜ ã…6o…}ö9‚`†`9’•0ÈÉAÇÏœ-s0üˆ³ÿ”Sì7N/×îu{ÓJŠ P¯“Û0Ù‚zîbÖLèþ6—jßNfÔ|Ç>`é|¥fër¬Úi1‚²‰‡4oæ ‰ÖŠ:CÖ.ÇÌrOf`1bòÎ9 ¯M³MÌ[y(•”Ñ ºã/<.Ë0O un„ÉÛ 6¬t ºhqÔ€$hîû`Í¥éÈ”5!‰ÍÓÈ:ÂæQ€»šGdLñÖn Ÿ|뜔ÿÛ[øÒró²…ü®÷{ÓùóŽÑx×¾£Øó§m\Š~©ì¥£R[ÆÞ¸VÛS´?¦‘¯}È«p¹O 1w;´8©qÍ]ë] $µÝl8ã!Ƭ Ay¿œd ?ã£T^wk(R»dÒuî–l¹«÷^Ê-BÏl¼_Æ4j\ÂÒz„ýoò+äøLHØÞ}Ï‹ï›.¡%»àU€V&“_rîQmÐÝŒß6¼®óƉêR kÓ²þõ]wHØ|ZSbÅ9!©àÛÂXJ,þTòzA<|уE“ )м µò÷Ù׉ó<±ëˆ›é28˜åE59¯mϬG—ìH*z«®C}¥[TWodíã ʳũT-œî:Ð~¥ølo7‚çfºR¹¼ÕB-„WZ´Òq<]s×Nñ„TA!²n!鶜[xoƒõøøñ¶$€‚~Èáçy©èц6¸›™­r¾"«_odE?ÃÇOTýâñ”K»Å>² µS³¦JPq—˸˳~ævÕø“â«ë­úÔoËŽŇú+HYÂd–îE p=Ÿ· ö‚Îô1–“å¸U°ë:©é³ñ<º“QåØ8<Ƶ °@&ˆAU–Ž3€ý`9‘‰…™5’/¦6¶´7¤'o ²â(#!êüNi ÿ»ÇŠéCf¸SœñüÏãËù4‡¿ÙX}ÿPåv>z\ÄXŒ_Â¥=¬Éo:Rßxpj®Vñ×ïJ¡µ @ò]@!ÔØÇòºòTÂN«&JÑ-wª}³`LV?ê—-óR¼4GÎjÔåþi±µ•äµ%¸ñf[q«òöGŽ?›ûYhû̹ŽÑuMÒR.MÀ@s˜Á‹©uy—žœ;y›T‘¸’·V÷¿«ò üú 0µæý6Ž² ­Ó|Ñ„oZ=s@ÙÄ•ÂÌ|”¡ú© 0f¼ÄëàiæÀ¿a$¡ïM‡¬©5þaÅãrÈ2E®â/t,î½ yeÈz¤~êm:.õù·ë/~¦P™fKèâëךa‰­q Ãr1b“ïû #Gˬóý¯[1ÖfÎÐp¼âÌ:Ç>§ÄZUÒt|@$`â-PE¾ë©[–ÿ ç'ç >T¶_웧û)Ä–EzÀ©ôÚÆEžôW+9)®ç•ôiÈ?g–ï‚šÈféêh z"³bªÚ?fÂ$­|7f(€Ò«¸nŽy}>ÀK‹èy¹õX½ý|k·½x@ëÃá2Õ9Ô‘(»ÜÇ/ÀI¶EÑrúO˜„Üõÿ>7˜Š·x”H1›„s>?|—^8N,óç UT.Œ$¢RœWß]%ͱa9p¬Yá±õ”s•ÛѸ¢ÃΔ¨v-ñÎäÁýÈWTM¥hàM´Õ¯¾:É‘gðAÀ+ƒ[©g”Kí)ã¿@‚(аPÓççzvDÌT?Ì(%H5ƒ¥t³p-í•YÅ]ø‘”n?Ám6Ä[ʃ"k'1Ѿ®®«xwË!®¥xVÞ´ Ö÷¬zÕìGudaw,?6»FÄ.ï^ìÊÔ/s7åB¬fÇŒÝTxµHœ€~x Û¨»¸hÝ1%–‹ÐÀmË÷|þ+•ïiC™flúXÈ^”˜ÉâÂG1÷Le+Ò:Ú‹”ØÖ‡‘k¿Þ¦µï×1)ì“ËÎsgZD$[pE˜+À¬T·¯„¡’­„ñÕÒº¼ûž9wI 3ÒuÃd\¾e/€Ü;ägÄP E@Ø&¶£&u”½·â‘£šÒKþ31¹€œxÂW€?ëtYM¥Î;øúiá#£"nzÕ¼vPF‰Ñ¡”l°ªu=Aa¸¶ŽæëÂ=Äí¹¸£Æ?Èça¿ï4‡ûêùÓu¤ù(!à;QUÝl±hÆd/s©Ü“²gPK$£´5M™ª`aBÞ†¹µ#5'ÇÀkr­@.pÕVâ '¡SëÅíç…vÌžEuôÛIÄ|LjWs¶sÞ2iÀ;eAºÎ#´Nh:®¥²/èú¤aêÄ\ÞD*ÑE(7RÓ4ÙõOî0dŒWu pØrnDè—Ï;ÉeY|ÔWsÀåà ­1´šyÁî·xrP­â¤ßöå›Ù«K¸tû_P^P4˜k´­=¯ £´Òl3Žª«èéõÉ+Âu¬Ûξ”3Á`“UbJ˜ ’‚N“ãa׆ܢ9›¶•›Ç!ï,ÛO-Ø0§Ì ‡œ ÛÉâž®ªR]o³îapÕ´×.:ÛK`GdÒOniH"gÂ9ÉžÁ;H @CnŠ ˆ©ÿ‚²Ý=-³ýøY¥~%sÞìþì\æ¹ïˆ£JäõyÚ#!—§üb­}‡¿:¤÷b±NVgÁ2¿ÒÊÅ hmÒÎ[ú4e@t¬«ûdñü?ìϨTöá.j˜>a±g|§m50©ü6÷©V"e‘ó{ À¤$ó™«„02çP\QêüDXL!Ò\ ¸gûȶ#»$3z÷L#o?Í- üårµ/Ã)…ë°[$pé¾À]ìAÅǘWNÛÿ{'¸pw”åm‰‚Oº0*/¸(€¤O Ð*«Êú³`…F`Ó;;*ýÿY1j ê‹G‰¢N¦q;>8IC§aõ·ìˆïò À/’5xy¹­ZcÈ·k‹÷ â^%ÛçËr,g=ˆ·ÅˆÐ×v‡çEYé;kÆá‚…€A¦+uJ5hh+E ¤#òr\¼Q:« dKÍ©&È*ó!±ôh$_˜Y}Ó.ˆ°>ƒâ+ÍØCÊ>©Ò )#e'"|£O…ËÚdeϵþýE§bÀBP°Ë‹¢šÈPÔ’ÌÏÙyÜþ¿"›A¶áO ämc`ZîðK pp$Ž‡ysiÂÂÝ-¦j°óc  Š`¿ei,¿#a<äU*|YþqbÇ¡PW 1#}®uþ¢S ?”°¿;Ä;g“ÓxþüÕtu~Ôffš¥Ñ¬›ÒÔ Â"ÎÑ2[ÈLÍŠ¹¦NÙäÛ.·„¯pý‹¢Ý·ÏK]—Óa¹/½µ'v †wÖ#[š¦¶a@F/"=`ëŽ7¡«ãç†òKn/†_øþïFóÊÙ…«Â#ãC&Ø1â|¥<½ð¢ÈïTŸ]ˆ€è LRNðÙcÓ>»0‘œÜ‘àM)OEµûs“*j†°Ëƒ¾‰B6ù¦·m¶ä¥›>×ûAïãYb“oøÆhNý66KõÞŸ•>bCÓìRAIDOTJh5\ºJê‘Žœ›X™(cÿæ¾/ªuÐ(àÛF!áõizûW, ¦#É”¥}…‚Gly|Ñ¥Êe_\£¢LÄí½P¤‘9–%Pxmž¨=~¢Ö€ 8ÛpOP‡ü éÄ>伎¹RQ¿ýt-bÒˆ¸}ùUŒ]˜ÂXu£ê›™i'{møÐmaV8Úk×Hþœ{£u¸ÍÅE†ÅUËÊyUõ"/a—ê²T¿¤ìæövãŒíìŽMëz'b2¥t£ö,+pºÿ<ÅÝâ¯ïô§k”»=¶$G­<†ar¯Š»õvCáJ“yðBMÖÝ›té²Åýl©FÙÀ¨[X$9·íŠI¢:ÑýŸŠÚ~™í]Õ=Ï'Z¹/J¹ Z2UDEΰÊîE=Çe'½-¼gt×¹ç´Å¹4‡ zå™GîF~–+K_%Yñ,øZ6k0h© á;)mµH±öñ)"…‡Å}(ÒtR*- p´[€×ÜD0ÎïÞ¨Þ ¿Êp âÝ?,“rš«·»Ð‡‹+»¾­à“mØ]”œa2"âÈ€$£$µj}oRL|ïpðX¸špªp:AD˜iíÖhã@Ýe)ÿ2à<þkÜIúüvŠ#›ik¤šÖ%˜è°^ÐoVYöu²vB{ê‡ï©óõ,sÜÏ…¤âK0P˜BÅÒý /IåÔù‹;l BLeAûžÐMlìÑÏtU€@º&9¢.ç@„ߟ  ® ÂàT¹ùŽŒH§5.UóŽÝýŽ`j™iÿMѼ‘mm“Äá–wæI·‚\ôÎűûú•¯ii=éÎUغÈÑœ!:tTSGI®¬|[å¯.ÓL?h‡éÿðqø!uü×›È]=‡¨¤bÊ眽êR.¿±6Á Θ¶šàÆ 0vë- "GfþçídŠ¿¦^¾@v¾ CÐ\ç4û°Se°8Rü«„Û aÑ Èp~¹Û 5+Ty“œü9¢1x”&H<˜Žæ_Ê^×€ã{»ð© õËN줘O7=›&5|Ñú]öºÒqžxÉ¿fSÖ!eãY™ß¶%'ò­5¯Ä æä=‰÷ÅCß%|‡yXöÍëݵà/O/UÍl!8:Çâé긖ú´SQµœq’@b. Š^Hÿ„WŸ,ΫxQ®c&eØeØ8cÞÿ· ‡BH¼oùgË_|ɇI}2ƒ$¹¬ƒäËvÓ‚9ƒŒPÞ¸xoÙo´+^ù;Óë h½ØTÜýåå³q\fÕ#x6l4n«BÎÑêvòâ\Û`ÎA¯ßðó…ˆÜp&æù h}Ò®ç‡gþ1«ešŸ7½(AfÑ¢wìš‚­Ôæ?¤Si|Ì_ƒ ½’Ã×SöÛCþÀékb4Ÿtàù W„ pŒ.¸`3Íf¤!Uçš/ {i&[è#¸9\Þä` 'Nßëu‘{ÿyöksðÃ(•û†‚Â]ÿˆ"3Ï›ÄÒ¼”gßA.kˆr~0å8þG§®Ù§S> .LkÛKìÑQ™}Šñî(2QÌñƒàG¾&ÊF³³Ê"…ù÷FãԲ߇Ëpºxìý·3a;YùëO^Z Îf– >°›ºÃw@d°gE$²¤€(Õ ¿›€5oîå+GÖ¼²9”|î5*Ëó·ÂÈ ¾£nÏoa ’| zJ2¡ 3cqõ6²6Ÿâ wN‚*šZ*JEº›j¢ˆÏÀ“N@îB ô¥œ]ds=S”aBPë, ¨)âò'r_)¥ZÍ`ŸKù'ãÞÆâwŽÅ˜J»¶ðÿï÷ëakŸ /)Ño5ùkéy2i¹Äi€ÌjÀEŒL¶{þ Ì aÅPÍ=ÐCšˆ½÷í1·Ò]yÑkëHTÏäU¹³ýaJBðîT•©DÍ´ž|nô²ñô©°lÕM‘2l›6‡ñoiü—Çß4{Š3ú¨X„d&í›ÊýìÙZWe™ÏÌ’ìeß/<’ŵ]í¤Çïœ1‹²Û“>#) ì ÇÜþÓwãž×wæ"‡ãiÚ_scî´/ÞS;.P ©B¢ÐñJ_'Óã^Kq†ÀÔÉ¥“a)-àcÐsU„•FÞò¿;@$©¿Òz °;é÷ ÓÜq,²x½ÐÙ“‚ª¶$¯²ôÞ—7žÖlR4¡# ¢Ã—žÎÈdi˵û0 89TÝ/ÓµÀ ‰ßØ:ˆ¶v5„m±ø­•‹Â+0¡"R©xX'NsvÜ«§¯þžAÙÿqRËáp¸.UP ûWJ霵ãv§o²¢Þ–®Ræ¥Ý­ÐÊNl8ZƒÉ­l߯ÑB„•oØ¢Ér=X…KçŸ ëÁ •Sö!n-Ql¨¯îT©hâ4I[°ç¯B”ÄZ|&w$.f!ò¹ÂU&h£ÈߊՇ@ÕÒ½hQšk´Yøv]å清µSëרøìÞû®©ÿ­EqZÃOòû8ÕSZ¬Î¢f×fÔ¨ŽíPÆ{¹ï·õ9%n>ªJk˜ ú•níþý£RJÉ#÷%êxgé‚¢40GƒC•Qþa@é»â3§ú+õ¾f5Þb×ݯ´”›v¾ ›ÏÓÕØ;êûÄ{wóBî)\ŒCz[Ã×Ú9°bÜzU÷Ãá¸åÿ‚‰µá#Ó„ó¬H"ʸÔÆsmà=†­ÉQ¤ýÐOD¼úܧô7Ê *;o};½á©»ù7ÂçÒR²$Àƒ¾ÍSÂîÜlψšC›ã¡JFZjb…v¿¼_“˜—¿ãµ"•ÄSé ×^£m¸´kØ‚ÀE„ï²ó•¦ƒ "®Ëïÿå_žö(·[B¸Þü!mɦëWàG•£í¼íÓäÚ¥„XËÐÜ”Š(ñL4Æ8Ú¾ ™aãNØ*ÜÏèé‹—F š­†çò´!ˆþ[Šà–†ö…š¼©ŽwÖÉÿvÐR0ª1“n0*Ž¶"è5ù¥ùÍ4Q¼W’ü½ÇœÂÅ=îFD“Š¤Äqß?ê~áDÇG­Õš¤È5(hÔhŠÏ b_(ÍRí®IŠ9)ÙVûÁ´ÂQ˜m5²ARsËÃ,µoØI6‰uH‘A…vJŒ”D_Jo<篟‚è Jp¹ã×Ï; 0?{Gìû?KE²¸Âê¿„Û¼2yô)Øþ7“î<ç²Yt|R¾ ãòu8ݸÚ`…Úuìo |¬ Õ©1™©Iì'ý³ëņç:EÙ/Z¸ÐЄ¾ù~¿ËëÍ—³TS(͘إÍnp¥V§JÀ2W% ÄsjQ}zÁXâ9*×tasÌIÕZW…T$Ç—DÜÆs á!êY®k‚_­Û¸Cû.–Šd×êH¶óµn¦Üo+\z±úÇ"®Zø œ¥`=újñNÎ`~B_·ßý:þ;µ¤/}´ùsœ×¬÷K“µÎ šüV?yüŒ´)rûëZÆŸÐ߉3´tÇðºÞ ƒ­ÜW¯’µ2‚ç(U×°:ÈY Í9ž#ƒ%Xâ¢NJN}þÖâ&ÆrûÞ y„‘e[ÍTþhÆCÌò¬¨›¤Ä™¥¸÷Ç/Ù“ãJö iøCì<ƒÆè†Æ…pÑÞ1ßÙËó!Põ¿òßË ‚Ä6^8oJn™µ(PÄ„˜Ä/œZ¾]¤3A*y#ï™S2è™ÈÒà}ü"¹…¸x5-²TC »–_¾_Çbã8:•êw|À³ð(-ýðF¢,VZ§C=…XœKÖ«ý—×»Û^Ï]T"Ãæ*UJD½ZmÒnV`·_¯uJØ;R‚ÐÒ7ÖC utxK¢zøþJ‰Â±ëJåªøáDâ¹vlÖêä™jíÁ<4*Éaô"Ëää:‘²´- S¶‰¸OôO+x–ãí÷YmWLUúqC…‡K^¼ —ãæPÁÁwëïL=ÊY¯+ŠÚàÞDn"Òé¾Ç<†–…;þ‚uúKÅóµ˜ÉÌ]:ÇæÊæÜ°Ü3 _ã«™-Í®œ1Is'×ßSLnäN…TÐôÌhm‰®M„ ©$^]‚Œë‹Ð:Ái××Ô]x#ö)}úÆõÉSí·ÙUí1Ÿ“…þmè­Ëë’¸­T®hëÿàßÜ‹åÐCþ'nØ-ßëÝ„ÆþfMÝt¾¢¡`%>AïzNø 4n5BbäŒØj(xò “Q² À­O¸këÙ(’|gN³IÁ}/tîÐy“ä?*i”ÓQƒ…}Qo•U§7`ðÿ).÷%ZpÔ”ͧ™ðzC¡ ÅàÞ/ÄG6=9 @ÔÞÖPÜöSëHPn®=iøÜVA†…ª{žEΧGëjtÖçÞÒ{¯±ä@D¢O>Phòªˆ|ö¾á‚'5q2 ü¬B—ÛdoáøÌi‘ Èm(KÜþg:¦º‹vª”'¨ñýG˵ƒà‹GêuYþUZ”ʪRÔÅG7w›©ê·>iWÐŽ¸ßF0A¶ï®3Ú[Žå:úÑf¢Yz€Ý–µ âÈž|N!ÙìdÐysuÖÃò È`û‰òÄeÃqô{VÒ·…S_¹è<ð%»Ù¦1éøi—ÙžÃzÌá[˜Wjö\÷MЉša|7,í½ôÁ sÒ©'¸K7F±"Ã3Œ¢u¶»»šn¿Æùv†^9þ¼\»8§”6#>ek¨d©3]ü”ÝÍðx-b£dåõæ!³ƒÅ¦qEŽ{¨~‹§1ýX”˜®¬NÃy‹ßoéåäv»¹à}õ™ÁMømqø2p,·Kõwk¯ ³¥¥#TµéhÙZ E#&Ð"óâ 3`#܇í59êû åï¡ŒuÈ¡”Ï,@FL¡i_ÅÚÊZ+>a¢¤U*þî´ø»>-ýue¹¢Ú;çaM.§ÞënÿÎj' úU|ŸÎñ|Tq{ã2ÏRöá Í5›Üì,— Ɔ½¾mº'§8!z«Áׇ3ë~qLŸR%B¿U&¼2D!4[ÕæÛ©êœ 6)†²DÇU&Ó2h[žÝša m@@éL¿|*ÃE3E·eÁ=äSVs>yÀò¦¥Œêû…¦f…”qH6¥„¡ÑØæTQ,^¨Uú‚æ/6$8ô…­‘)fÔJ1@}'ÎŽAMô,Ð$(Ø÷¿uÓHâQ’•´¯(Ш;:”Æ5`ð´Tj<ú2¢‹º5;©%¢?ãׄ]ŒãçÈæ"zŸ±se@ÑŒÌ EU·¾¼‹¦x÷å]=A‘º•G‹r4°”×m¦3ÄÝ®Bu¹‡8îã5Gj×+ﳿï‚}^t†Ú¶/÷ˆúM©ˆ‚×k. ~`«\žÓ“z¹¼ßÙ×™úvRÂOÜs±¬5vˆõ†Œ žº¡õ¢Q›mĉú‡'He…bJãׄ2"/"ËmfŬ(mÔ“KäûÓƒï”]ñÿ`OßE{~55ÃÆN|ÒÊÀ&\66|ÅM‡¤n¤øßIÏß¿‘*[¿U@+¯b “ð‘g60ã7ÅÙÂäÁ3c|\jýÚð— $Õ…½'¨kª–¯!#}§B*‰ÁË«(ïf6üj  Qœuò­‰&‹nHzhð"HUœ èh|Ab¡hR‡7gód%‰lxè)tWh»øHÕXNVŽ;¾ß—³¦zFàpv½¨É|dcÔB|†û®Ïá³°WIjy0RqF’Þ4ŠˆÐFµòªO^¥Èd2J0”Î`þ'n`{U!QU<ÿ¨þUï•î%z~oêEöå‘/2ÇÞõ”óÒÅèðÁhbr®Ì”âÒŸ!Ø Öz¾Ñ#|zIpe—“KŽõ*­ØvpºGM/Ý §ªQÊìD!¢þëDŽ½|½™œ¨Ü*r'ã²KÐÜê\–<€D]×VGÞ÷Xoë E* ß@Nðʆ_¿Z$k—|@úÿ篑êŸ5êu¿kúë\ sÒ†MV®Ðaäú;CYøûõZžŠUëíä øšÍCp“ùZð°5ÊHqDQ©õ³£ÊÊ•À– úŠ¤Èc$ECúI„O»Þ~Ž1̘ؒìè—×ecÞ/S—/çô‚×°·³õQt–@'À²U—ÛC´Õ•Á´ž<IfÎ%ú¢/².fEtkµ wÄš·눧ñ?ü”¾â"\º4—iÍ~€f%)pVgæ”…þÚŒ.^çA¹2<ëSú˜÷‹ÑɽT0ÆIÝå®ìƹͨœœ6uœ¾M8e"S¾{ý¦;hjÐë"Ð\ÑdFhA,}ÇÖ˜¼¥Ï;!Qú:Çö…æéÇüŠz4žíÏ· ©±F˜<9ÉûîNÝQkMGv‰*u™mH~vSN>ÎÖ&p±íº»ÖOõ$ÆÙS|ÈþãtmeA© ;ÿ7£ôñZGÐÂHëÜ…{­Î“pÐòQNó9Lq¾±lÿ‹$לb ¯GJôCACx°ï^.ä *>º_¥ÞPî+tö§¿Ë›ppÕwÒŸVªÇ†åçYÚ‘ýÏyšÁ· ¼h$€•ÆOð¯>‡LDlU$½,uŠ ®÷·xçå)… ]¼'7åØ6­PòGb”<ÖÊ*¢AP¦ÿg”}#)æTL¾Ë«åªDl¬’:±œ¾ä"lfÊl%ÃX.-lx6E¦%”X œ_1q‹|¢¥4 ŒT„ÆÎYó¹rÍBß ßInˆ¤û—R¨íZdö#`¢:4›{N`;N߈“Ç?/á.¾É&kÉyÚZ¨ÿ%µYÚ/Ý<”Ä=R)q~¦†0ÞŽT”Èì&Ù” êÏsæ­i‰ º„ˆÃ‚LE,psQj `LN-qŽÂŒ:È£¬ÍAŒ&(¥0}fy}Ú&t‰r¸"]W¹/î:5'„iBF›ýGØž6z » ÒXM{½'pärœ»¥µ¾r¬üé×ÿTeM$úW‹Î0–[l(¨'XŽ¯’ÿû’.L%þØX4½!ùJ®ê0J §Û¬q¦ŒêMÁп62¨â7€jbFÁ䧺pà‡7[w‰UÌÁoŽª›ˆÐ€bkñÙWÓ†{¼†ílë ˆOë@¤%´1[w°pN%Jxî* dÛ¡Qv÷äm`øq׌•!¢’$¯~ƒÌÍuM+Ò½×ÄzÕ»˜\ìH#à`岩€êq0:’[zçŽÇrîKŸÜ6(ÿ-÷ëàéM:Œbœ$ÔXôÿÀ™Æ‘Ì?‘rîS>µvNþtFà“t)!ÌØ ‚sËœ'¬é­ÛWGMóoå Òäë* ûô;ŸÃÑÑsÝ8n’w’¯’æLOË}.™Ä6Ǥ¡Î­Jë¨'»ÀA!•€6¡6”÷¹«…¨æß1‘Ÿì Ög™… ½#¼ð÷–ùÃÄg׿\oµÎ˱ôqŒÛMW3ªë¬ÂGP9ÍîfQŠªwƒpWÆ9+7›¡ù6ˆþz!ô\+é%ƒº˜ Ò¦'‚ó5·*–l¯ý”h$‡z¬m±­ƒžP`ì¶D l j£3ñnÆøõ‰-9/Ãb %Zoì‡Cø+‰¦¬ßl5ï Þ v Ψ,ñn7ª{ûCÒn!ö¼$)¥„uœG3•g.QŒË‰I-¼ŸÇØ·÷ŸØ)M€‡—3Jàìô¯Õ¯ÁÀ}Õú6³ûÑËWÙÛJt/sK™M–áå‘Ó߇9™9Ñ:i—#ôi¼’p¼ ¢þìeúR€IÏXÅÃê`Y™ÊX£ Np|„¬ Í6“Ø%mœñvxŸŸÀâ 7H/g¤3‹+Óµ¦JEU<Ì?§ø]Gm /OàÖ]ÏÒ3ö!@]ÀrT‚2é½ïˆ"O€VΩ¡’mÈmîƒUiP6˜¦%ǶKwvF[›>m~W"Ó§Ô‚\ÊíK+³–o¾‰–8ÝC¶Òi³À¿ ¡ÈèvÜo«Å'è&Œ›øÕï˜(Ó{ÃïÀ#¿Ùž[ÐÏmbópC_µˆdðó™ûx«ÆUÖ¶1ªR©°©Úh>(f´j]¿˜¯ö´ÊZƒG^(^™$5IÄÖžPçËÏ´¨Y×:v3mçÇH°)c¬Ól>iOL½”³eëÝçåmì™I2û!S°Ü{‡]÷yœÑ:?­«ÄÖ:ǃoÄ¢›hI·ŽÜÆââèJP¿¤Á +¡R6ŒA[ä®8t…bÁ}¸†rHƒ´ßqÚVg!ÿuÔh²Ã6 II>ÍKÊ›bÄC•©BQñÍÕÈ ®kPw³˜‡ùå<Ö¾y«tMóŒU??û#ÿ4©D@„P‰ƒB‰è^ÀŽ3¶;³˜ä¢©—7rù‹üßž¨)È F*)Èb¤1‰7RÑ9#“m•U2_è&ŽÛ"|æêüà×Ç:¸eLo×£ŽæìØ׫0í¶¹”vj‡Š­ !ͦÞ±¶èZf%]¸ÖYgD–Œ ü‹okd”ÜZúç- „¢Þi…ÙHú(| £¢nž­¤ë ð8²k¶`m•Ù3¶':GP¤ÿÈrˤ€„¸ßOIîk]U^”§ü¯ÎÂÈ{Ÿ›¤i¤€PPÁFkB·ÝGÎæð™nBOײž±À¢Êât†ƒÂäÑQ¿]!ÞÙ!QQŠ—ÒWXê2’w c/õô{K?IÕbjŽào5:G(W·4VÔ ÊíÄ¿1pT™à¤ËÄ1Œ Ȳ屠”²’¸Î~ë( Ø’P•Ç(û·ßìí' ÷â{ørÞ™p1µ!A¬Ý´»ð·êUF ß°4z;WG2+W¶€Óií#¡ü×[¹cY¤iMí=]‡þÄT‘Îkì„=7Y©m„ÜÐ%ã3Œrvãæ9  ã5ñO(Ð]ølH”ó‘µR—Íþ*¡—$*cš¯ÞŸŽ Ê™°UÅw?0Ÿ­ÜƒðC–X_›)ßaGîÉù;!TjÂyËd# ñÝÈ1ƒŠ,tÛ®I¶ZîGÙÕ÷.ÞÅ.øš„7ôºÔ?àK5ÇózÎ,Å5‰èYŒ¾3lííëih|¸%:T´©}ö“fÐ/œƒ¿âö«½%oŠU €Áw?^àÙêi¶¸q¿:t>cQƒõm‰ñr[lëÚá7îÒJ/-‰qØÙÈÛ\uQ¯<Ï©´L¹ ^âÑÙÈ&­ËÎù wCuùXaÂ'1ïnU·S’Jº=‰íΨ8ð gصؑúÑS<‚ƒ Þí®ÎG.êp7XC) ½EÜÊkW9f â—+;lšiM¦/Xuñ×;ü¦ëª6A¹ÈéÕT!Ì·]P3ŠÅëC²?dŽÝßÇÎ{×ut Ç`fR×iXŠ’3UZê…Uª«±=5/šøœæ¤ä¯":QuùÜ2¦Më²%xŸŽz7ŸE NÙŸDü«-Ž£D÷(•”ËõÝçÀ.Û›Ö_gC»mb ¯a-¾Ïëñ^•èi‰£ôíã˜H‡-q¾‘_[{O7A¢ýê½Þâ¬Ì2Ö¬RtvŒSbþC¢»Ù¡ããI¢7hö‘ù«õ’[`¬žêLQ­’VÜÔÜ­úàöLòð•òËÛ9’\ÎÖÑfK ¶ë¿Š­'ð(Sª[léºfê˜Ü”™>Z0ß,X·¾ÿôVp[d£¦é~Ò+~õAVOŽ‹©â¦yvQÖäebRâ (¾•h®æT0ïóPñC:0@0x2ŒHUD܃%ìeÌFŠài< œÍ¿Ã–¸<ÉÚSÍ‹ÎvMfa²©ä…TÆU[P‚R iZË°o°#Ålþw áB8ˆiù¡Úº¡=v@G´ækl„UÇ"†¢Äÿւ׋op^|äõùÈ›,eð$Ç ²+9Ž$7-ÍDG9‡"°y<‰Ýw2©ØMD7'Ęq–˜ø§é€ÔÅ60Öìãy£šÀ¾uºãyhxÝä$p6ï ßÜ!¹Q+ù@¶HŸÈa¡O°ùõ)HPÈ®ä‘3àwÎ+Ëõ%ܸ*œAáEfÊÌ!´XNxgVä*©€£¡­f]°øoç> ÍèS%wß™•µ9ÍN¼òcvô­• –¶CÛX&`Š€(ý›Cá ³CŒî1]EîÏ a0‘Ìï§ì½¬ô;òßxH7)"ºV„ÎsböHØ´{kP2RÌÌøÕKiH§+‡…¡åñ?ã“¿~àŠ•­ÔæÖ¨Ý @Ìah?$‹œŸÓ@¼³/²š"n ¿..O-5]”õ_­ÔùBÖw¬·ç½^W3ôÓt1t×™§8)Eˆº @USò¼ÿ£MLépAºë— Â…4tÅ;vÑÚür;jY)Êâ¦÷ó»d£åQp½áHg à7.m­­ø»È°/¡yOiîh„+¹HÉf ðwÓ°"鳸†¥dT®u÷¥SÔE@+¶ðgððËĦ»]<‰©P7ŽIæ’I»k¹ïh‹¬™úÖîX‹Öò.+*[WAôTœ”¾¥,É;WbLtÈd/µˆÐ™›+ÿpf†¸$åP|r~¶Œˆ—k¼š¼mK¦«ÊS2 I•X·Xp¡8bp'|£eÛõ Ÿ”‘ǹ¤IÝê2ùÂDu˜¦SÙÆBOKÈ‚CYOØlãê]õÔŸtÇ׫ÂêO Ù‚±a:t ôI¥VþñqÖÞ;Pñö-–{ÐS.© ƒ ˜ ë ż`z§òu,4'<{÷žÒQkÒ¡ñŠyÛ¡Æ|lÜ^ 4··|Ñ•_¦,Qƒ2ðBÆÃüë¯ú‹AÉ.ñþ°K× sý^1ã£×:<ÃMÊ»vOp3-noÓlÕJîu²KÌhé– ˜{ Ûå^ª·-Ù±FÊ]ù£Åº²˜Â 'Jå4A!°aE lã=¥52S;^~–yb5håÏe¯¨Ž~«Š5#C_rky7”Sôº¨—Ú¸W‘§^#z£;!Z½U\mù•ü#IÕ¸ÃÀ5”Ñi<_dþ¬ò—+?Å© @f ÔÎ%agG3Ú™_]´xˆºuÕ6â@»ÇK ÅM¼zSL_ µãÏv¤%,š¾±Þìýœë¨ $oQ N¡ÊO ªo%l›Ãp½ƒç½íÒ،ÖöbϹ×4kó"8°ÃPð”Uj=Õ8¤Æµ¾/F‘Ï72ˆ ûxZü»¬tæ|—•º£áànt²Å¼PøP'?ü«—rû£J4ã‹..‡ÿwHÐ9çîQý3åÝu0ÇžÓ…¿4xðXÄພrºú‚M?ð‚Ë‹Ù÷ NiJÐñ‰gZd”' ~¦îuL©—R?~t™ ÇO)‘ÄÚ¿h{å.žÚÉ"¶o9Tc9ìf0E³d¾ã¬kÆGsd>–=ôòMp»…v[r×ÚጊñøQÅ„qç܃"D™Ž×ëW¶šÈ‹´í ‹lÊÒ;ÖøH~ ZŸýÎƬŸ¦¹ÅVTZþådO0°gÜü­³Ÿ—«•«sÈ‚/eôêgniìòCÖ¯cg—ó^Ö K·þ«2R«„£p–=Ê€ë)o0Ú½Û@e)PPOŠ›Ë!ÙÚyn"­Qàe0¶—€ÁÅTw€—ø/KÌVÒOŸ²¤[²ÑeĞРGÖcž"Þ¢ÒêcGEö*ÛÍ…NŽ {Ú¨ÕÒ×ËÇ8ÂyÓ'¡gìãÈõTŠVžåÖ2°m•Tq䙲ˆ„dÜšPÈÿ9dSþà~_˜Ü•bÿ,mˆ±hÝóÏU[œYteÄKB*Á'ïðrkC!SÆŽRRF>ߎ,ùð}*øòéü\;žÐ˜D{Õ¦s’Ô =(s=ĦìaÏÕ !ÇÒKæÿ ‘Yf8ãyØÇ̶ÌLƆ´rò{êÃ9«‚ï¤Ïè’ÇØW,õÚ‘lîûº%ƒƒ1Š $?°O6ÕôÊË›…aÿ¡7¢£¸7½Új3ElÁÛP×èü祿ã^Ъªp.Ÿ —)~ž}<Û¶E¾£O‘áHQ)DÐR†Ðƒ2ïÄ”>âOëF D09ÈáÍÈÒ:Eõí™Ó¬râ=«Ö¸À)÷ž°¤¥6&äLüIVUŒàV¬ Ðô{©áƒTàWnßÀ°á¦y&ö†Mr4¤ëFfRÙ%3ÜxÖÉèF‰Æ§_ø`šYËãAìEOØI¡ÁT4dVµ« ø[wWñl«tT€ºñc`:gD<Ç°âgÅ«O`“ÛLè”ÍÆÍ—ÚM>lŽs5ë$xoc,Ü’m\yi¤Õ‚›¨|à"ò½ûÅ¿¾8tÎ탖'0m(Ãa¢~ Ž­~i°žÍó,&Aâ~A*­P¿´ãÔ!lŒzL ñc%ú¥~R·šqßYå.…‰fEæ•ë’ÍF¹¡÷¤ÃʬžYT*˜ùí˜!y˜\i®Pã@[I¢â ²¦ªûßì×,jnKAãÐ0¬M+ÜEÅt:I6ÉsOcç­v“È„‚Z?n”¤ÝP7ÖåÉ¢,5 U¢˜Ã ·³˜U‹2j{0Ül€äà <´&£õ ÅΈw =ñen‰tÇŒT¶›ËàÇ.l8eÓa^Ôøå¯%"áļ¡îô:Êà-“#ßè Nèà)™–å$Î5B“¨VOÑ­$r]mɈçÐIaaÏðÌ}²° 锘Dkjö”--2ïG9B×fD_üÂç\®MÞZ…n=£½© _"”íý=ÝMØÖ¥â3Ô»—ò\øÂ]Ô©Ì{á–ئ0JïH~@«0[z'Aï³wÎÇ”Ñ_áÔ6;Z‘ô©ýG/׃Ì6k ×ðþLε“±uqƒX"2ö‚ ´Œ“tíl1Î*)9yx ÕÎ} c²#êwC¤é¥LƒoQŽŽ/RŠ¡gÇv¥“m‚ ÖúÕœµÇt•ý•àº!dàþ½ñ=Ü͈øWFÉшÚÞñ–8cMÐ]§0³€ì1gp‹ZU7¥°q°Oìi:D¡âm»Hʊ׬"BýŒÙÉ®ÆÃÕfBQ÷%K8x; MÃnnºøÓzò½Þº@ºØùHàNƒà~#RàÖ¶Ðû ¯oØôK¥ [M«œh[³ðŽxp‘’HnÆ››K VJôû1؆÷$*z̾Û&¢%ËbÑÕé ¶ç<®øz1QWß|;5”ß(%0XÔ¨ÉÖ¸ÐuQàA„ ȧ!XU³ÛI·Ç¬ N;X5ö_̾NG1U’Œ¤ª)¦?èæã/DÎÛÜfa,\øš\ÕÖþêl:ÚD½§•¯pÒšu…Ï>v¦Yð{Üáš}ìÌÙ).‹”˜Rœ”û´–ªZ»¡ÚM%‚€¯.òXIk¸!$ïyÏÚ ïXöÚì’PÞ×öœ1§o¬PŒÝï“ûSxЃÌ8‰8`6^ÖoQ»¯D¡|îU¡ò)ÝI,žGȃg°²ß›„5óÚu¯_›;à«Ár£“H °PÞ)€£Ò=tÿDà„×¾«¦×lö‡HºÈUv6ý‘þÚ \ÜH´à±£ŒÍ}˜4³€c¦ŸöG±Ta=pVê±rYš~í©4ùŸšþ›šÉ{BâBL+ÙvÝî^V CìïƒßH/ä ån±Ä²E}íÑ à• ý‹®®Á¡\·óq#yê'g¥6mV!# …¨¹QõÃ^iÑLexèÿX2õY?¿ =`/ÅôíMìW5÷S?Æ>ÉEPaÏ¡·³<ªÍTƒŠ±ò?a—DϦ¾Ž½QšCY6l²ïáK ‚õ¹M<õË¢gÝ-ŸK)ûÿÔ?ÙÏáPoÝ@}“˜¥½Ú+"P…ãl7½u:èê§ÝÌÂê©ïØ.™-!ÅõèwaånâçíŸmBŒ§ÕW‡^e„ƒßÎAvÚu†øogènWb0&5y¦4›ð´‡± ‰ÇöêÍ£‰5 ëwÅR¦«mmÔ)A¨Ï6IOhULy0Wãâìs!‰‰ŠYë`n:#c]J}çômÇ÷ãï­{eßÓ®D9ìƒêgyAN3çi13êþ’?ÅùõÞí˜ ¹és¿!}ýǪâGå’¤Zó*`¤ £†–$Ex\í¢‡P5¨Âjͺ™—¾ªä¾¦>ûÔ}£l ÏÞõ7‡}}YqÑæ»á×6ÏW7:ëÑÆ?ªqTöQ¨?0#Œ’˦9¥€AY˜õÂ>±ñµeA@_U7JTµ:rÀÛ:ó*™À®øSîáá!ÁYN4÷FòΑ½ZÀ»QV¿Ïe°¨/¨jÖIÿ&¹=ô7ýøÐcµ äÎC¸’Ö}ɪPÀ‰â¤éWRÀ(΃wÐÍ÷³±©RÞF8çä7Í5>æ7¤<ƒº, ú²Ò Ðr8[C]œÈhÛng}HÉÎcÓ\­ ÖàµeG½~ÆZð3øºâFšo¶ Á9¾M½HþÀ?øCI‚l0VþC}R2¿ä×f~žZb5‚âX1ÅvfX’%K“ÙË>ZA†W¾»7êê÷AûYT˜8‰[­wRjç¼Djì‚ùã5ÁŽäH~¿÷„r¬@NÄ—(F¶råQþ`ƒVÛËNÓ] c@&$³8ŠRxT•u˜àœ± y€w«ËÍÚQן×Éó²…pŸÎN3¤n‹P‰Qló(¶xMãÒ%¡‡Ò<°œ¸‰Ý?ëÀñÞÜMýóbÿ2ÁK„,Ì—­dŸ_Ö{-fGÌq0QÔ•z¨oûHÂgË„ë|1;5è!“²^c²tÚˆï˲l_sÔÇ_á쎻¢6hÜEj®±“[‰Ã‚óÏ8€1°{ʈ2œ®š—Ñ34'i )^N{\ 2!xš3æŽõŒlN:ÔàT€’_žlwŽ3”ƒ(‰b¡‘eŽ8{“ËûÃسGóõ ¿ßºJ#ÁTŅŃó Q’‚܉Äk°±“|öÊ•è«ÖK ¡({ä‡Â6,½)Çð†•ÿ Ÿw wNžoßOõé$›(ˆ;”׃ÉÒEÒ¤-àHÓˆÝx4Þtè8Æg)¡ëP)žø¥ÿA1‡¾’íÏã.)óÎ]΀ÿFªU ln}åLMÝÚ9Ò]§Â?”Ù*Ë›Yò¥Œ+âßa-&®E²dw½âÒ0·”OA—é7)!CCäÈ»]Â6c˜{g“${ µˆLâÁÚ‰  7; bQ2—ÙÇßÏzÙÝn6J$B\RmX]vZ£ü UμÔqÁŽï›æsyzéÄ×- ø ¡.Y¡úé2 Á8´ !ø[Gø’ÝÙýÆé#e¾õ~å¦CZÙàòAÚ¬y5ÙÔ*‘‡Ž ÉÈ'±¾¶šEUï(_éÂ&:lüà äÆ"¹ì™7ßER⸥ç²ë3†Áð“·$̆Þrd¹¹™YË®Ã<`XÅ[WƒÏxs;)±zðe±¸¡i®¥ƒáì$—è…‘})aËŠáY݆“þPíE“ð³ª~ÕŠöˆš:}0>¨›ø/KÜáM0›@_yÍf„î+ÿ–Í×-Ñ$„5lŽZbW¡‡¾\3¥nQ#•Í¨d6ý´U<$4ä 2V&S‹>´SZFV¡'“Eb úZ ÐAÇVFç¡).žyÞÑ1#ªu::ZÒ9EÅànï¤*‹‘YøÆèÚóŽ‚ÁCƒÚ¢Ú® þ¾hðrR„ÖDÍÇDb6°Ú‰nuðþ¹ÇÅëEC‡.s±*Dq]ôJOÂNLnL)Í{3‡­@ƒûùsVÅ Œùÿ&R ­»ÐðÂÀÚÈ dÌ:j"ø=m@Z‰-£®e)±øãíEJ¡Øþ@°Îz'Í‹¨F«v#VªƒrŽ¿ŒÇ ú,^0‿nÛeiiJ|Ñ3Up ®{æR }Ä#‹fS¶o3Sq&ª)¡¶>Y cÍ?{Žóôen“ï‘8_yÎèÌ\·Ú-7…ô§i©„jW[B.ë–æ' 0 ÅI½£¢ýóüÁÈwÔ»1å­T3‰õ°4'©*µ²€fÞ[6‡MÊûYy‰k®Ai­S>N²V`^I约܃UàÈé0çýÌ3·¡ÄMmÕ§,ᯟIq49ŠÞ|`!ôLcÜŠ‡[lüÎfô߸/à âì‡ë­Ûê¤/x¾qNc¦‹Å\ñà*6KrÏPã°J›ÓÅ©q ¸”VŸÿ˜¡²y.ê3ìL^œ•Pºªš¢|¶ 5£ilné ö¢*y›äAÚ$ô5yòÊž++¹§+Éĉ…Ë°Õ»HeMCæfr¼õ„B0â N·¢ðƒªSÁ i+–ŸI/W¦x‘¯—Pt72„ýÁü¬Ë3ÉŽ]˜`Ù*ià’|¢Ú¸süð öU £dŠµ)²Â‹„6½Lû–E{ó¢Á‹aý XÔ¶P½~Ù ÷¼[š™@ß“P L8\˜®” Û{”{ëÖtý'H¦ìÂÊoÌ‚®.Æ,{, (²£gFÿêS©È+÷«ÄCO>6tÅvu>™ç‘(ºnÕÑwå ¯z ÌÜÍׇK“fZ¢‚6„¬ëî?J’½Bܽ­;EïRF/.ÝÚ|Ø­µAVïM{$õE«ã+OH«GTž[¢ì'V…†Þ´ÞuŸ÷¿Íúÿ{¸ÞŽÈ6øo´Â¡ŠT´<ãßßKÀñI´Ò¯OÙõIÅÑÂ1Ø’Öõ\ß{§30ããùCì:Û·æçæ!öÏ©ðädzÉõ-¦í0Þµ X+gX×iÜíqå×™»´ß+šDBû =“«F´chLƒt²¢pp@wô½Õ×å»['{n˜0R{#1H3¿ yÙQtîÛªznŽÊõ`Ži®€tO/0*˜»kä¦÷h ÕÞ·tܾȎ¾®ßˆ) wAEµøi'ê¯äeü.ÔA=<?„fö¢=€kÚ+nÐ~¨Ý€åTҶ˗ñdР´LÝo>Oý8Ü›Ú5áuéaiÛ熿×ÌèÀ1Peé¥ó2[_·;³!.ŸÏe(@&„ö=|Š48/°å Ì÷ö÷zÕäcøú,q§ªPw©nìÛÅ‚»ªg‚4€ûqèû^jÔc£«Î„|qݱўæ‰1½ƒÓyKÄ;ᅅǹ'ká.Œ“€×lD“2“½Ü³†P홲«¦cnìóÝQz7ͽàú„“ôrRl-:Íà¢=á½»Qò:áÃU ³#ç–Ùy_KVΗ«ÍhE”ÞCóyU·ÿ?›:«´çúsÑ¥­‹Ïʦ‘W””€‰˜=µ7^‘ªÿ±ecôžÀ¦’4úàŒ,Üæ1ÃÆíŒIM×þœô“eß.¥Ö£ïH‚Ã,òûÚss\Þƒx(,ÿ ¯¸<"š·–»¦VëjËâä_†éb`–—ë?P¶3¾;à/‘ÞȽMÒ›'‚=–;‡:jý³a¦Î^z,©ÒA¶ûÞtKÌoœ3kÃ$"jÝŠ¥Ò³‡ ±Ç²4ƒ+T‚j¼‚Ón\ü'ù™Õì5ïúÞ‰!\ûÁæårˆ¥Ýg·ýýZ”ég‚êþÊ`òó¥£ÀJî ­lT&RéDå›XRS·LU·Øx“es±îé&-9sù*Û|¡]΋N¾¦Û…7–H?¡šÈB‡Rø“i¦ÿ-$ÿãy[NÄœ`Ïiëì§ éÆT4 ±ÈîiÏ´²òìÒ"°Üæc)ûBÂh¶ ä—³I¨SÐúßq°Ý7†¬t…Ý,3¼Úç6öÝßÇ,e´èâXÎÀ2¥M~$¯,Ó¦Í` +HXoØLó‹Ý H7ö d×9ãõ*=!Ü“:¦Ïãâ"Ÿ˜ƒÄÖ‰³(ì4À.ïp²M/F—¯$˼_lÅãÞÆŸ²OtÁtZ§S9ˆýà’©÷€è ÅfoÂn,¼c|­‘;¤–øÓó9NiéiëúÀtÿDÏÅuß3l‚†jIth·I2¡féÏ!ö¦Î„£yR[2?T ¦¦6ðwäž¹Ç÷ ÌnˆÆxwò$‚ Ðû˜F»>ÿ•]BfÎÉ;T*N§˜éç ù‘]ê<9ã‘þJg"µ‹ (Ï’NïF[‹9û†}]ä^`¶ÃOÆbEbIÀ÷š@GÀ(ÜpX~I<¨¥W÷+ˆÛO_á ãYÅ1LŒû`_á†;̦Gž!ÁL—`^:w‰‘xd;JG),›ñåf ™Í*·3[˜qÚÀoFžb¾sÇîVÀ¼ÿôaÆjð>v«w„áFl¿¥>qC $å5‹²ÊßÝ%7Ã鑘“ßí¨[mc¥Ö° Ò‹‡qϪ ¸)Âί¨¡Ì¢Æ·åÂm6Û.2ÊuZëó\m©pºd¥ë›»dMEiXR“‹Év¼6Ãö'uæ),žÌ&{^!tRvý)ôQ"õV•ÉøGâÑÖ†ˆ¨ÔÛ~+~>ž9fd‰ë;7FÂU'Â/#]¾«!‘©¶ÕtMEEù1 š 5ÙBÝ>öõž pD´·ÇsP®ã¶úðﳎ%Ëþ!Œžåô0ž†ðí uûGž7Àûj©bf)MSÔÃIoZ;ÒÐdS%ׇØúnQhOîŠP†èz²žû…ö;›f|£FåçwN„èëGíÍlÕÃMt¡„M$øw²ÑÁ¯2.t·Ø¾c«‘š©˜ÝÄ®wGŽq}r( F²v ¡}›|¯\ ,À±ËódXÂñ úÅÌL‡'Èæqþ0©ñ\ª™ µV·>ÕC¹îKáÅ,´¬>ɬð_ñk+å¡ãxØìR@¢¬Æ‚ºm…›µ)ÿu¹Ð¯O[èҢʿŠ‚õ¥ItF9—×TL{ܵ"T4ûˆCìoîlÏœ°NõËî ¨íx“92¾JaVû+è&5zH›Uh‘õÃÀ¿Ì±t¯é¨8v@¨ â°X‚ËF:†\W©Ì…ë¿ ~–Ÿ…ã ÓЕ(ræC¸i²{¾£.I$íÙ‚°”‚Žï«;BgâV´ˆÌß>©ÄuN›Q#ò mÉÝQ´Äzwº$£>'SŒÚÏ>u¡”HÆé4¸ i½Æ¢îäŽ0ªïÖêüc{«0/ªŠ€ÁTâìÎö{Åk‰UŒ·,&²F{VJm®Þ_îÙ#öÂRðˆÊ£_m„b#ÍŽÚÎVP"t<å;;cR½‹h a•ÖÌþ¶ŽÜq“:w~Tú- £w2võbÝÞ…R1›¡ìüž° <©901ú4èÞ™ívO§ë•Ð%n±_ò¾$ìÈÖI1{Ç>ÞTTPJˆù'ßH$qöI=O³è©;ÝR10¾0@$‰›âÿ6EDŘ…£õ”Zû+râ‘ò@ ¬ˆuN›#&ê3ˆû2ù†uÛ HžWna *ù;ô/)ï-ªnQlè)}2øO;dMÄWs´óý䡾šØêA;5Ú ;@(¹efS\³Çuø¾¯ë+nëDïCÞõl„*ÝG„v/ox‰-Nä[¼sË»·<@”Üá O© Œ&)˜‡Jl~‘­ëä7¿Ñ–qŒÊ@ÿz_F¥)¢‰|™ðö#A²¡§ýž¡Ä[XÈ—´Agxãhæf\4¤L¤ê‚´“í<ãìøLéµ?ÚJ9‡¨S8$FèEE8ãñà9Öö&7SÚ[>’"Ÿ0ƒÎÿ-í~tôxpä¤{|[· Só0ƒ¹ Û¿¦^3äwÝø Z‡Ùt)­ 4Ü@ÞÀS‘û¨W 5È~·fÇþ/Göq¹‡”°KþL_5Žœ»!ón“ wdÝ[Ú¥B†>Ñm~ ¡s^~Ñj ÷FTÿý~dV ŽúcéÿQ™1mÅg<8®…Bw©m~xM€´*?Ë ‰ GGÌäN z¥È„N¬ªÞ­;Å­¦æš*“’ë1ˆ`ðjú@÷ÞÈfxñmN‚§õ©PDÞ ÓBÙ•ã & á¿-zeR·ò¿UfU &U@Äuf 7QäÌôOòEÂf!aX—©áXYe•5Ë+üõV-8H‡Š¼Ü“ù¨¯oT§e©Ðß½§n°Ò¥˜Šû\Ql윔Üzs™>IÉϧß"Í–Ž¡~hú =] +,zÿ颱ÆÏó*ìMØ´¤Š°2KyMç‚Έ·õ:£ ¡Ý* Ô…ć&„ÑæKçˆe”$e¬ÆÖ¢$˜=¶£"þ€%bÈ÷¸ìœæ=Ëâ(_xÉyfömn‹u6^æöOl!'â8$®eÝèx#9•OÕ¶ü 5yåWpb¡Â §”ikzºÁ#n!y› ã ÝÐÙw€|ô*rxrˆù»pD­¶„Ä°ÃváPÿÙ¤BguþÜV¢G‘þŒKdQ=¾éNµ"DV9…Gÿvtkçèg êE]a)Å¿ü34f‰yÓDÙáøŠŸ*&í·™[Eøµ›_UàBŸe(ëî“c´i ÖgòDÂXq Ò(}÷Z3w¿â þCòf>B‰Ë¯î†=:@k'ùw¶æÙÕ•íhÞ§Ãp±éÿX½µüº˜„º£„õÃeñ_EÀà$T½&aðü¨Úmçq_nÜÀ<-ã¼q ·°Z†•ÊsôÝ1 Ôú;°¡‘ÛF“ &/~Kñ¼*Ïa‹ªsJjÝZz0h®­ bÚµséä1#ld“ˆƒíí­„Þò<Ê…Ð6 ZfL¤±Ú¥H‰ù VÔÂñ»ÚÊð5ÈñMduY³½¤BØÒc‘ˆµ±‚ç2XPYõ…KX'xq¨&³ÆÎ9HW»håÿh-©¤:믋œ€+˜‚aNðC¶&ân:xBÑ^}Ci ÏÜ6D'ÈÙNØì9¸ÜUýϾÉ*Œ½åIï5ôìŽ,Kuþþò) Ò‚t,qçʔ᭚¼‡Á¤'½ÂÇÓ3lo'Ðm‡và~ú\e_w÷œ"§.µD!¥›û§aþ+· šdvGÇ¥„âôˆ2]Ä6]ù_ø%®/³Wô”O½q§çív¨yuù]­6ÿhŽÖžc'v6²¤¨; àåùyýmE0ºðP­PóyìºBÃ<7Ý´¹N¦kñåBÖípá6¹Ë½½¢ÈùNÆ”½2¸q¥tÝz'ŒD¨µ´ýIÄC]®{†>ê¯-ç2cÐz¥¹ú£n ËyM›ºÕÇC³ ±ÙiƒÈN WGR—Öð8åi&_p´IõV¬>—ì˜iŸMÕ…ÍÓ‚ØÅsÅæ¿,Z¼(s¥y¨ãâ{“¹T‡®RcW”J +¹\¥Ñ‡G)j´ú ç– Üc‡‚ WNKà "J6ëZòÆHÄ£.òͧ¼)~„Øf#(?¾À¯ú®’y³åÓqOƒ>Vø¨Æ jWcOßB§A€‡·›¤IçÑCï®Wáj@G¤Ù§â–÷_óD[§ÂWÙ¨õ¸k²µ§e[‚ÛIÎ E¯·[¸Ö´åL}”fAR²‡.v±/Uˆ\Úó³ùÍËlb‰¨'¦%UqàD[¢±WMjFÅg¨ÑÎ<‚/ÌÝ `ï jmwÊi»\¡Üè¢;£"_ÉÕR•L­Ü‡þ|‰±ˆ/€ñ4טSé¼ß1= ž«jŒË±Š¹Ò|ð.É °]ãSÀ0Ð“`ÀKæì•"~–ùV7ÁŸ”؉ø?~r‰V0)[ÿ|ÝȦUÜØ©,ßL6«bÌ8MKG”´ˆ0XÊ€…çMFú}p\mŒ¹úUûT¬ÔàX±š¹²Ê»7$¼ûÒ†&òMF<ÎŒÐh2:Ü¡Qe•è»½ƒ |å JùG`Y­¼uì(LnÁÐÔ}箯§}!÷ŠÓô]êç"ªF(ö “Újá±ó& Ø€k&ùÌ©Ü&wè½'¤îE4 glh™`÷ÿä ‹PB³lE7¿Á­ ¶^/eÐ×ú~‡'3UÂN3shƒýn æñ1ª¾“¬ÉùÀBq;@ºø,‡‹G´ê£†*N1ã7™8ßš]@ÃéKšã«RíRŒƒm¨„0˜ÀDÑqâRÁGCCeMþ~M¯þ müoÌdzƒ5hB;’ ¡`Sáa ‰øoeõ§KmŽÄûƒ`ÙVL²¯“¶»ßÛ™s&WU_š[O¯Jn„è'7Ã_æ“ 7â°é8šN×'”Gœ»SǬ¸ÔPugÓ§Ó¯èÔ퇯ÐE•y6©cå0›ñz¢s³š‰0^Ä•õ›F٬婿RùÒïÍža#†$,û‚·üßj‡q!¯BˆŠš[}*SiA v¼Tþ§¸íqä6õ&½Ÿÿl³F¦Û0L›Ô›v’0[°ÿªD<$¿3VØ%—óÞÛu¢IÉnߧËVÌ´ÿý*VÇcfo‘0U±A©bÿp›r-eâã+ö©ûëµWÝÕͳýKîT}Ù)'’½J½£ã;âå h*Üt°kÚßB26>ìv¹s« PA8àÿSè fƒL¾‘Ç©KûÙK#–Ô* êŽä3 ‹äî¨è^[œüX0ÔžÌk¯@EçÅB›~ä]û·U¦ÑVvuàê²ØƒOe“Âû‡²ÁM}ÁØ]5Ÿ…;(ŸjëéV™U£kpåÇSclª‰Ë䇠›TÍÌS„°£ù÷×½ÏuÝèi}‰Ô¥q•öSxž«~”=ü» ÀÒuÇ^ô+f¤gò–®|æ°®¬uÕVÍ‘Vàe˜5 c@Œ7`ï4/Ÿ@Ãv0Ñ Ôžæ›CjÏ ¿9ãa‹~ãÒ–Ô`o<òࠛРÊ[ õßc-º?C S$陋yËîÕnƒ½|KÈsöÈlý;'t7àCi´QºyÀR$ >_³lÄáñ1ÊÂÏjð^¹zþš8iÜTƒõOÎéšE•3ëÜ8ºVL8ú£Òúà{vwË«Iä¼Z/½Í¨ §áV6Ýâ´VV6ËYnHPÓÃOèÄèœY·x†ù(óÎD¼¶2ƒ~îaËðÍ€f:?>¬ãÇ­zÞ8· 匿s²¯J[ÅEÁÏõ§EÂÛ˜a°È £®6çˆeàt­:œDGœãR,'ol+É« ]`DL2v¨eæa4ö¸q‘Ý4F”¸»ž·0¡Ÿ Õ,ÔÝUDsà~X‡„­9©.´C; úq$I>Ú[ÉëS„Þ4êà'&GOy|U/•îÒ¥ŸÅ8?éè•åê ½Î4&~J¦u„Üræõi}ËùN÷"mIYÕÑ`´âªâZWH¶2X¾ðl³­un0kZ{r˜¶Ê?Þ×£‹\ºúYvÞ²hÝ4îÍ°K&ÂÝ1ÚO‘Ù…,]u —.‘ó¥Dº©$æmUä۽ЀoîûQÖlrÑ­7Æ<€š!.¸'FÖṡòáL"Ð’ÔWuñ¡Qƒ@†ÙêKµ-$Ï›\n?òôr. ÞâÎ?ƪyìFÐA¿^7·ƒQ7 Œ³1O·…ºÛ"I?¹“ßε°¼ì¬5(ÝðßùÓUÁ0xËfˆÜïbd ܦ©S;È%jªú*0uSžèXÛðc,¨ø~¯Â-Lƒ£;N6öA>2$˜oaX±Sþ\dòmø·¤pÞ?^ÙÖ@=Õ®ôíÀã+ëv ½áêLë´â¢ÍŠ¨µç‘‹—!ô’ÌYëP}Z#ų¹äx¥òæ‹ÃÔ-¸ÙTµ×¥‹£üM=h´2¤F 'ryÄ…F¿à/Á9&y¨N‹À°×ek-Üc`Õ¸’Êüë`·#Èd™ ûbWPu‰¸ŒÇÓ†![`Y=D&YåUøvosTxrÌ oD)í×É3’.*cV“|­Öb¨JÉŒÖõØév•Oì*%«4„Ô¼q«EtåRøTÞZf³”öÕ׿h8%îÌj„v@¸êuÆb/W%¶)xgû³K‡T,ú8qÜ÷Kî@¶š Õø•%úƒ·…Üj™]míÓ/ú:‹qáv̽8DòÈþʬqkÈEå‡Ñ÷Ï …iM ?!nOÿäk¸›'ÿµö =ÐjE>‡†ô&}2×µH¡æmm\Á×¤Ö ìärÜcßêM°‡V¶¡VFäxˆFÑø—´ÁÛ±â8Áïœéæ¹OA»¾zìÒiª¨HÓpœnž™¥H:ôוּŸç2—)2—1pp+è·Ä®x~ kêrñA2±§m÷rÒ/;³DŒË!P®K' È*Ûèu/ü1ô9ÊÓQóéúT[Ÿƒß‘$$øÍTeƒød)×BÌBRˆÐè’•ÖÍ9Ò÷g(-‡ÍϧId[Ø'ñÑÀf•_´às.Íír¢Bñå}õ;&¨.ûp®ÀLDöÁÃF]ß.â¾Ö§Ch%öhÜ‘Ñ,ű·ˆTôñÝ*Ù¾À?ŽÙaÊÔtúÄ b^¢ÐYó¡ö©0TYðQ:Ñí|^0<óG<Ê»eš)6eée7r’(ð|&&8Q°’Np=ý‚uìøáÈIµqILu„ w‚oÁÌD>úê ·Cúy›ù_ŒBq°¼,Õ:P·#°± Äl‰7c¾oçôÿÕ"õb³tÌ×6û²’ @©†ˆoA­}¥©ð‡šX ²á"zå}2j Y£<’ìx y1&Pñ†á¥“þô}ʶ/¼}œuï“ïBß8@ÃîËþú1»b<=q’è¼Úx§R×ÂxQ#åáwlV éÀœ}÷‘ï?ÅTN©Ôtzÿc_h>¿8Szt6Òצp<|Š¤JüY¾¥i|^ ý¥+HcŸäÉàM—çÐéØÏ…¨’eŠï>"@ *Ð:•h<±Í„¡Z†–±ñk“Á^g6é´Ÿ LZwN­=É>‰»žÔF‹ê}aÙ”2‰>¦Ï‚E{ôßÞASʧKÎrc›Œ!tÇö¸É-tW¤jè¬×žzü×Ê8SʦÓÖO <ú) ÓÜ3öÀë][á‹Çxv|BÑE§혭šÑ5Ñp˜z)+šj‰ «Ó#ÊçªàLúq ¿ÿL[ð‚$b²£/oÜ| ¬ƒ°ëºG×÷ðëÙ6ê>²%nJ3y Þ'.À /(µ°ðXO—ñ bŸvœ¸gm^“ê¤lúîâè°1mÏÞÍz½¼\I.Ø¢C9<ÝIiOÑeÂÝćw ¸‚‹¯þ^9oõSS¢6Q`­³‹xž˜kÉ„œ¢>¤›:ñ*Icvû.ÞçA„îmS$M)Å}º0Ø×%öæ îØnPD}hò„wˆïµ@Ðpê§H-nBh'g¥ˆvsÔ:ïÊÂüð-YÀ!¨ñß÷ql„‚ÏǾ|üêd(T šoÅÈO™¾5Š^Ùx v²6î½Oè±”»'§–£Ž'öÓzn©H"­¯ß¶œXÊA#Â:¸ÀíÛbDÛ#8ãù<Œ‘ṯÙÏüVø+ŠœÀÜ\-ùõå}ÆizciY,»-ŠÅ`‡Á[R)GVþ÷í¼ß(ĸ쭦»bTŸÙlÁ‚¾ÑgêR…XÕ/˜%y'’ ÀÎ….ŠÙ7†¿LÕÚïbaÇ>l:eÙpÐç’0ñ(߬*eˆÇˆ<è¿—…°Ÿu†"Ù“tŽÉµºÂ¸Ÿ˜¥­‘mS}å°r6,¾²•²||Œ7Rt§ýò> ½q”w,µùH*ìÎÄŽD©tEYˆ¼çR’+IžZŽŒ®° â±ÿË#ð]öþÜc¿Ro‹s¼KÉ»¦ú}|ƒÿ¢Gy£_QRgÜ€)´ù)?µÐÑ5µÑS{e¢«Ž¢ ÚÜy"òširvÂ*Š{ Žúå3˘¥ï;ŠÚm•Ž‹4¶0­(aíMû¼Cg@7ý>äSô–k}ëd#ú _e÷Ãq;hÆŠG ¼•º»ÖÞßÒ47qCcì|cÆû¡íÆÛ¢v9±tº ë¸Ý5m˜+œlŒ|õ >â,§L]²Ðê6RPúÄ„Mç×t_ÇÛðQ¥¡8P°ßwü  tò´aö8U›¦ ùMáZ2"Á­±4:zÛ„ÈwµcA¨©αq &(Ì^§R­²ó®Ð»®»Â÷–»«Ùín‘ºTìy¸7.RŸŠ)[ãÇŠðCw§릢³´¸ Ž¯*uëcE9^‘Ôíp Ô,OBæ„¡ñ7î*o¾×-†^‘: Ì&=š)a#ê¡Æ¢~úø+L+vl£øQ®||'ö5I”'ªÜ¼G 4e­iO’Ao+¹»€ÊË9#zUÈûˆ+Z]qQ°* kªÚ²Öæå2üFšÐ ƒ\Õr¤×…˜³a¦‚¦ø¸yïPˆ£êQ!¦Dí”ÈÜ¡à¹ÂÎÉÐñ OímôAßKz¨ 4gI5d¨]æ¯ô0RÏÜÿ ù€ø½ã!¸!–ô”uf-¹„vÑh­rŽmeKîr }FÈìsÚ"æRù¨-ÿ"ù¨ ¡j£ÆâBUï:æDÝi]º5S0;ÎðIÈ^•a«/_Ov¹°±c7Ö¸é9z)ÁQ;‹;r* BÆBshÏì»yèþܱD9G’¥é–¤Øh,…h ð\¡ƒ&Dx¿"¢öšúGýlH°Å‘=Þx#µ "ÞÞiš€aã)N£­0>Ò^ìE‡›¹¯î§™ *Tïƒ ‘x¬Ý—ãdK(5&·ðÈœ’Ú¡/BÄ%k¬Ž3– ÙKEº“›x¾¹I†NÇ¿ca…#DÙz6ö?ÆŒ½©ØVq5çö9!v—4Ï®˜?é0È\)°¢®Óµ¤„á(•”/°òÍdô~K‡ðÿSî¯q›&ÏdBa‰mtDÅcC}±é‹‘wb³ÆEÆÀuHwéB9!MÅàQrA¶‡.«ÎÇn#÷ÑNbvÚÑ´ˆ0y©go{º]ø«Ë3$%$ì-—¢*¤>á«ww¨ASð/_èçÕ1ë1wóÖÂznï¿qÝä$\v\cbuS®‚7·9Ý?ca¦l¼:ØŸx‡l´½­B­ô¥à½ß^1_çžÞEþ”å¤\¬0ëBªô9±A;Z—{ô>–Î^NA%&…KÝÓ}Á¡Ÿ·lÀ†¯Çä„W ˜tû#ÏNGK€Ù(eÆ/g–Á¾ï“j…pé˜Lú—áEmCñmJÑ#<û0Úµeä²6ijæwóÂï™éEë­¨M*Øp0?+Öû°}`O„’“ ×i)ðX‹dŸ.LœË›Z€UÃÇŠã]q³x_ä•¢€ôõÄ}ÿ<]ò®7—üH³‹ìî¢;ó®øê`¾îåœÃÇÂþH–j#ÿÊw)LÜÒAáç09:­ à»ˆýAÉráxñIºžˆTXá»"dGçC]•-؈ä˜éìò{­F]¢,3Þ‚£¸ù†mØ7K¦ŸŠÕZ†|¯cOá‰^V¥ˆ¹XÈÏ®‡•^ˆ€÷®–òd¼Å]Û×d5jo«)Ç“®&µ ¼œ¹v:Êìa©3åbjCÐlHŠÓÍ2v½È×*gûI’&i) F·rƒZSOª„­ºz˜3T4¡»åbrM ë¬0„ÿ¥´yä=ñ(b߸¹„‰“˜º©<Ϧ@¹[bJãžTðq9ë¯?HnÛv—î׺®šj’uT½±Í¿`‰—oåI94G=jý'¬8VÝž¬OU4ÀS{WïÞi¿Å錃.¾&É!/Å´>lˆ‹fžeA ,Oï# ƒUŠÂ^'ÀæKŒõ0ÝYò×(># °‘ºQ‡½GsÊ2ˆ¿üŠ¹ç³/)íäf'rì(‚ïj H-Ìü´;ä>Çaç‘ÒÞ³çI®÷ÀúˆUkeü®ÁõÑæzÀÊp[Ã[ÂÉiY~Ç"¹RÑ Ú-ÝÑTk´%z+õJÏããO©–‘Ž&µJª¯™S¡Lª™jU>@öÓ"›-{AÌL¦¿•‘~E²T*H7ÞgŸ”9–4…Ú ÁË—0£]:dX+à À™Ëúˆ±ir4£à˜¸æÞòŠpƒg06AÙ³“ƒ—HB¦©g¹u¾,™*ûç‚-‹;SúK›úó¹0¥økÎp„$¹Z¡½|ç“*Ü”5ÇgD˜Ñó4ƒÍ6bÍr÷ΓEís˜ŠØ‚ÿÅåõו*Èþ4ÙŽ¦»^nWVÞ£N§B$`—­9‡3CÅÈVšQÝ¡ZLà(èm.)Ohœ¾Œ¨–,DT"S3UgrÊû9ç v^rÅŒ*‡¨Z«¨]¼‚K~284í<»]®À²“K™Ô:A‰l}þ%¸nøAÒXÇ4ÝKù=‹¼Ë»ÝµQ½á+òߧS÷SÖÒi—B Þ›k¶jMJ høÿ¶bÍñºçrÛ"FꛉCù†~„[šhÝa¡Tסéß>y‘VkQÜTÄDe™‡³dÒ1zåo¯}:«öÂXñmýˆÌYO»åG½wë¹}¾½DI§¦ìT¢¿¿L“¶qo¸*ÄiÝp•bÁֶد¼*@Ñ»ÒsQ©pÝ5:±&3 wAz©v8õ>R–²7%†œ„žüOwî+lr<Ø]ÛÍC_¶âÏKÆiZ-ÒÓ•Ý''e0 îM¿a¿‚ ØrÔ" 16Ïe‘ $I™š÷m,EJÈü :ÓË&»ó¿×cæg2£F:djéÕ«¬Jtzâï†G® `ä7ù#"w`øÈŠEÎøî3€u^±å@¹ÔWlCRûïï"WbÄòåÐQÊÉYΧùžü>Eó² R`Üâ¢Ü¡“ÃBÄ­'h¨™¨Ià1ï¢Í»»3ª2á!ÅÆ(1^/µÙÑm¾:J#æÑÂÍ;œGÇÌè(r€ /`—Ì{Û¿ªÎÓuÙ^´þËyàð|ßY@ÜãöÐLsa‘ ÑKAþ[ÕKó%jôùÙÌÄÜ8†2ð²ÿ©e0¿øm Öˆ´õéÚð4ªèÐ9[{7àvºwe‰ Mâå¯ú(át[>B(‚þ¬Û´±¬äŒð5*6]œ9ï„3>_Qín7ƒ ¬×­ˆ©ë8<›]°¬k¡wV~û2!4j’$†¹Úš$ãK·×wu#Lyø—œÏ×9ïÉ)î-{m%^}ÜòEA½þFæÀ‚D(žö<åj2ö¸ÿ†¥äÿ{Ñ£ÀÒÚ~Jà r‚¯Yb<«Ií8¿’ÿ¯!6z+‚´J»øŠÀ²”.ñ?ð" çIr¬“íÏfkä(4.:$GßÚ|x–vŠîµÛ…ñô؎цž}:Y,Æ[nÝUÄ`Ø1ŽÝI:¢¾·¤ <ž PÁö’Vâ»”z+Ï¢P£ö’ªËLhæκøìBFÙ•Ñjlm¼‘w‡òK~d˛Р a5"´£Ú?„Sâ>O`åDK]8Ýž){×Y€Â®-)„ÝRÍx‰ƒÒ šCÑ©¤œ¦QÀã—g(§•ËéŠfNëKC¥B™À‘¿G<>á¼àZ ³[?ìŽàe:êÉpjò‹ë>u1È܇æsÕA…Š½á.ºÄ¹—î $2ÕÝB&žˆ"ÜXl¨1 î‘l¨Ò&Ì0a±¹r¦ü.½˜þ4ÌÀ)„+iqÿx`B·¨9š½½;QâÇCv ææ^X~:!0¡‹„üß8é ©ç±º¢ÅaÖÞ3›2¹ùÔTÞá.€» :œÙ`åMž˜iDƒ÷ZRåbLð&8d]W°ñÓè›.ê5¥™¸ËKÚ:Up ¥¯lê‰ú¥ôM¾ï·¶¡³XKé=ÝúÂi'j7yC×iè‚°DH4È´¬Ýµ{¥/;µ±÷Ϫ›±¬7žË9¢žúâ³dÐÀ{g§G$6 _Þ~¶úcbü¿÷3€ À;?‡yòož§6hFCo¶Ä8JÚìŠÑe]ŒÍ˜u¡¼Ú¢Õ*ÐïÁoÜ~=îjš`×Ï#ÓŠ†l•m{`K]p›yaMcôŸT·~ä¶Ï» ô.;$l&-¨Vqô q7Ý1?ê›yx~(¹ñ_3€¤!1Ó&wVPªpóÎ+ìÁ­Ô8¼£Žäþ.uN=žðî}ý¨‡TO Ço¯ú4©rÝÖvDQ\gjeÆc_;˜Ì@¥Ô‘ÜlQ¨ñG À~ ñÅ Õþ÷Ì'äæo&0ª@áãÚìF;¥ð†â"ïvA¢.DáH‡©‘+†>tdTx-œ!ÓáqiÄT7¨°Úä,¶ïYø¥>F_=fC“*;Xë ¸Fç9¦ûõ¦ çúÒ–/Ëͳ$ŒÞË6ø£ÕÑ rí‚0ˆ®ø©(#Æ´5<šv¸Q‡5|¨UQ‚¨ÜÕ™bõR0IRéèa‚¯Ïe'ªììÏGƒ~C¨R殑+6ë‹ÖÃÎÊ w>Xçú…:ÇpÞÃe "QÀ U!*‰ã b/9|h^hi¶–)ûÇ#.cQ¼”ç¬MHê‘:…$8G|bk7Â÷qÛ!!îò#¦ûA£¶hµ¶t&%.Äo§àµEºfß+ &QŠ\†êwk‹ã·J<”±ÐgÑé†Y¯Ôg؃±.© –ÌKá!)ç±`ôQ1Ÿ>¥lÒÐr‚{|U~UÛ¼±ÉÑ×t¼Ž÷iv®W•s>-ÿÇKÌfšL'úç$Ÿl×NAöù¬jÁUBÕR0áÍ¿Eh´Ÿ£’Ç@ÝÇ<sPùÿÓ@û‚O5vÑeI¢Ï±ÌbÃÐÝlÚEKÿS¡1Y`0ðÁRùåŸ,dÚ+hùIãG’yìAÛÇm ¯¦jWÌ`áP €Ä‡pÆ£è¤@,&G¤‰LÄ¡Ôëó/(Ö2ŒUípÈyc£:#r¥ráŸiðñ{ §3$põ‹ù“FÚGÍÈõ#Çû(ȹø¿·X4†ti•AìÎøE÷aˆ@Yle<UÄÞÓÌFpŠ…_~¾ž:À iyvÈAkàëͪ¶­Á~«[’!zb |@êˆã}Ùyô'Ø=‡ñiòâð¤!"έò±™™Æ›¯*«7ut´mñoÌ[:^Éó°J[Æø_°2žËsba¢ürcÝç'ÿ§ÖvÊ‘q¥9ËääÈ•¦ 6OWx€Q mH’<%G(û «-<SÈ”¤´HLmøŽ‰uÕÕ¨Oý™ÐòüôãI¡_”ÙÞÄébíoßÒ•è\ñ8JˆzîJG.Ø:ÜGq{UõV¡üÄr%)˜(‘*“û“š¾ü>__àЩ""e;Ëu´sE„ÆŠ-™ÿ{@„D¡±%/ ôpÔžM@˜œ YÐhhÿ¬ãK›DµÙ'ÊŸ >Û6*#´•_æç‹6ýÐLk ’ñw?¿0é ZËÕÚª¨>Ò¿¡ }Õƒ{À<ïÈOaKðó¾úÀ¿&:1!íë9V[eY£éÍ$鶋{ @^ºÎëJ3³p.®]'¯Y¤=ËÄì÷’&Tøè*·˜’·m¢G(Í›6Wþø"ÈP•"æ_©§éqø…3¡©kšõl[Czr 2 ÞÔ6v4éb¿ÂN  Ž¾.êIf*M<ùê/˜ÈŽF¢Š32‡Œyæ€í½ 8 Õå÷Ì\@c”‡£›ÛBHe‚¯þöÑ·˜ØçIŠIûtûñðd\šg e­›3ÌLÑgù.Hp±q›„Þ±+²Q—r@á[aOlµòLw6x ÃÜî× þ­Ñp€7ÀçtìHt»úóîF¡¤,%Zέßo«÷Ù¸dD4Ÿ^5×›±Çí^)jÏÄÈ'¼–AÏ“Æݾ¿ë¹J Oj_j&žòÜøUù>³5†ƒâ”ÿŒå†ÑKoWg4¦ýÇ“Á·k›ºôö¬4e˜ËÊåéºnLÐþäV#8¡½7¶YÍ»ô›¦6{%ìi.Úžó7Âe%ÃÅúŸBÉÞ_ôs |iªÃ[#(;¼ýã•ÉþRí–Ý@Þÿÿ»¾K <©©>Ù¡øž†ánF;ˆ"å%èÚÍõã÷' UkVÞâ1çT.¼|y(…9Ø< ñ´<Np±ÆT´ ¬ÿ8Bµ^Fî €'[qyGƒîUííÒ¦³\vdu…ýŒVGt0¯'mZyÞÑ¿æƒPÔrÅ2òZ°ãß½6naÈ¢ˆpì¸ÆÇz^|¦EM9¹õñoöðæ¿·* ×lÝÈÞ¿vUKþ²õ³ÂüŸKÎðy»KàBÉ~N‘‘‹5}Šª»|æÿ(äSÝЈέUWPŒXRw•ìuô‹Øë¿|µÇ®<®ãg²Ñhÿ›Ù ÃIÊe‰ö¹¼¬9A!:Ýâ”Q@Z’èÝågžð’×Òñ¸'n0äL–džŠ¶x'»LâG`JB °à{ÒÛ”g®Üå¼ûwäR¿rhßErÊb]m`QétŨc«š3ˆQ–UMâÈÕ¾r‘*ÛÞirdbÜR˜è.o¼õËÓx1O„ ᲞGû:™[ì—|/ÑávKÔ GUgBûúÁqæ¦ß%ïê/j0e,~ ™gGâl9`fL<µyÃ-] ü5øNÏ(¡›©“ÿ‹ë4dÁ49³Ðö)ÍMw¼]wÝÙMík§?›)\¹œ¼ˆ°cþ9ájÔšbÅFD~úN_÷¹ \­ÿ„ÆK=q~wfSüƒá˜Ÿ©™À<šÕ35ùÑœB%é&ø9'g¦Æf®%ßþBI¶1j™ .VÃóªÛË~øþj\tK¿œtŸªD̳êk 3÷Jj‹b5¿µ öU` fY±ÝÌë ²™a¡<šFs’9Z~ÑÏWW Ë鸈[ôÀ—‡’ô’È%vos–åü"œ §KÒñlæFÖ#´{QŽíx*P¥´é-äé>ÿ^6$¥À Â&tö£yç“ÇqUg'9…•[ fñþtöSj}u@}÷Ä:fÇÙ¨Ä#ãëLZJzÖ1—›íŽ#ÑâkßÏ$šFUB±ÎÜ›„½ì<¶Ï ZÐp)4+Ûã‰AðH åýòXHçì6çž ™Lˆ[n/dzawáz8ÎãbúFÓÎœßÉÎÞu‘–ÊÍõ8¬œlRÿNgInùHŸ1 ø9•±vþv6›ýÐÚçOåüëÐÁw§H2‰D%cpS· Xgÿ¥ÌL}Ë™O²P­3¤îæ»…ü°â ÇB÷» Òkôç¼ä†3+þI¾á¬ú$1öTÐ'i²¶½¬ž[~$>LoÁóçâ9¦X²ïÉæ™D|•(‰•6ZݶKRç<ÑËçòbR±Ï_K(ƒ]YbÐRä±—aßI,—V ÓŽ•ÑKûQ£ËcFNfÚ¯‡Ï%Câ/U"€äD‚''F¥%.——ÕJ$w,€ÿI?©ö~?ñ”ÚÑWÒu@%“CÓÉuÅBhw!P*ÏgŒ"~ñ­ŒŸ1)œ4‹h}àpì]XÌâƒñFê)ó)ˆÀž«˜I¯k¶z]6Sëß»Gb4ÎýD ZΩ¨ ç…æIÌ,ü<~xÍ.©SeQæ‘‚‰Mö)ø`*¤ÕÈØbpi%Q/¸õêÛŠ K¶‚—Úõ%MU~e’_ÐÑú%Í«a±œ×L§fBPS|Üú÷Æ2Sº¾fûÛ??Å’ðµ#Ú’¦Æèüi,ß|T¢ø\:ƒ`uh.å«/çíµÎåskTCt˜o×ÕìÌ9¾_úôŠó„mÒ_¥¤ rÊý‰ï,ÓÛAȽÁ_D¨©.'»ˆÝ³¨F6`%¤¾nâZú¤xmêšÛ€"î0~;ÑE¤¾‡ÒyÝî¾ÒôgU2¬´&O„qÁš5ó…LdÎMÍßRR†p1OZVÑlÞ«´Rê¹xŧ9ãÞz‡q't¥”XïÑž IÃq]æ6Gy:¨è1¤« 1î˜"öñ†HÑÜ÷Õ;'UزÕ$µò¦rÏuëChËÂ5Î#ø^Å þ? OÊ·ïNø>ušUË|3PöÐ~fõ DáL«Žª•_]ôšîõw›ó„E@®él²Ü2'¼K/ØÏ5Œ9>ÞTÈA}Ö´WƳWKÈf˜Æ09ÖI~šÿ¾èÎë/xácmÓê¿xºá‹&˜WB(J¯"ʇ8Ón:¥ ,5ð;´Oï+}´ôflsÍœñNÏXVç?ôÕ±üP}Ô÷xÝþÓ=¸ bG¹˜|%Y­~KR =.£½Ñ?ß8Óq¹óÛ,¦ê& }¨@U™‘#Z¡OñÈ+©ŽÛ³Ü¹`7ò¸»DtŽúrŒA&xºjo¥Ej´‰~6†`a’žÔôÏ=,gxzÛ:±ihÜÊ©]dð1¼ÒQP”Ó’tµv U"ý•Ï·Åöôl¿jd;Ïäµ?8&°^<Ô d~Fww6~ët7]ˆ,†Ž?mÒ­@yô(y×üA‘9Ö @ê¬ÅÝ ÌpíÚ^ÚQ1G{ツ»¢vCã³´Ó«²_»fV*hÀv©Ë¯ÝØŠyÛÁGû7V®2nÉQŸ²©˜¨àHÀñº|4‚5~C!3™‚7Œr5ùíø&©¹‰ù¼¡y/¢ë÷LjˆNëég“¥1RÕ½[ÇË1¾Ì7jö'UÈçñ\„Ò ÃG sê"ˆíѤÌ|Îå+Ž¶[zguaxœÿ_3È$”Ê„L0PÎ:ŒI…MÂ' _Z)~H…8yNb™º-~,s&`Æ7rBÕµS‰Fà• áÌ[SÍã¨X»ûV³ibÈÉïêrµèk-4ÎR}EÓ‚Ñ\à…ÏM óŸ·ýóp&0=AX‰=zü8ÐOGþr}º”_®~_ÅCù+CtÚ×´}ü€É{çcYçÜ3NMÓçc¶N9ïK(0<âÚTØÀ µw)­Úýy m´}(i(­¾vÉ3Ÿm˜œ^ó=Uª—Ú¾õ­…ü(WŒ±õemü )ÐC4´ ›áK&ÿV‚$½“Ù„!zÓ¹¼ú'É–WöUˆZB6#•Vž4רO3¬(´—3>âFOÑŠ·=]ƨög¶†vyöD¾í;Bƒ‡¨IýÆÑj?ŸðB¿,rvì¡Cp îbùÂH—GdŒŒ0s­cv<º}.ý›:£)ÔÂ=¦;†’ÈŽFôrº—lA}ádªï(=í¿=DÿÒ©‡…¤3ך"ÃÌ7´(.#Wª }wCìœîAÄ5—7¯$‹\àõ(l^œ?.q™®o“ ¢cWMí/ˆ{âÚuù ún‹¢_q~ò < —3ÕiF+H¶á &´¸Sø²¾„™8u‹6–…Íã{Z5g¤ ¯Ò„q4WhmWÕG@åRî8ÁÙŒ ÷@{*_y±”úv÷ü'fnÎë×É)ÑL&ÚîÑ&8E–<¾q>ÑÜší±$Õ’XQbñŠ ¿IGºÑòC¼è¸…qÃÜÍcÖs%_¢íU—È¿q’CÝÛÞ×¹ÉÃò·‹JÖ}0Gl^§¼7‘—蛚V ÝÖÌáȤŠ„+ÂNl‹Æ(è¯Õᜡ›#+üO…ƒ+¾AÐÅVÉ`ѨÛ¢dž­že¿÷iûÅ–q& á„ÐÁ¹µoIYd„fý@H té7f9åàwJ‚¶·ºKX÷Q•ø¯íc½"–cÌ% Ô[>þ¢)Døi’*”I‚\xìå3Õ²°F®»8õŒÁöÒÇ=òrª+çnÝ)É=Å„îhþÐ ûx¾I§’ sŽÊÍé¡giN8|¡¼ýý LJÊñÖmÐÃjÄ¿‰ÏÜà„*²/$´õ§Nf0&DB”ÿ5b…¤Öeö4ÙóÓøzwïÂB"a Bû$gËVADžò5pÃ@)Rex^Äý®žµ—6ª ø@^@«ÞC/ÉËpsűu…¾$ƞş­×ã#¢8K‰2ØÞÃ7ÐÊ{VFU ¤à«ô/W+û¹*PÛPd:ØmX¦àl¦ìèàulùUëlç<¾ÅK c‡åTx ÞC5A ²ßúä£ÑŠ†™àðŠµ7‰[©ÖÀvÛØr•4¶IVÄÑÎf‡BÔËç+™JÝd´«yYÃ×6›Yv Ð_‰‡kÀ¦QyT¶ð²gɺšC§ôˆDÖ}²¤êcZ¼ªÑk±Ç*!$Ù…K¥íËã6hJþçx>|æt-‚èAI §ü8ºž«¯Ÿ¥’ãþxbðƘ‡k?Rî(´VN €³šw£¾=êßä†ÂEË)ž£€Ø>E¢ê˜"iº`n£ß&¹úNèŠ2ÓaË%uÖÐ ò™^¦éÀ,^¬¦­¿ìv¦š–¥f‡žjéSþ?•+ŒœùñàŸc8œY®;+Ì]IØ¢@:ùqó›ZïðUîc¸¯L‹à'ÔE„$À–hþ0„ O»†=²x5÷å_bŠÔ”fËñxÊp6ƒØà FÀšŒ8ü‰_{„òMÀ‡˜¶—±©ŒŠw;®¶ BÚÌ3Ù|>&Œîûi£þwÕk­ªd‰j¯–GÛ*}æœd¼¡ñ‘À˜~ëM!å™vŠÏnpS+l³ËŸÐvÿ-c<¸¤È¢`™iïõ·‡ìÎèÏärÆÛÑa ›á/K÷„x“6ÉÖ Â*ÿägãÿ°>D ¡Ãð`µ•@»ù\¦Fg±×¾xDö¯½8]` A$Rlè… b©Wßæ°ÁÍ8~Ëζ”/vñ⃩7jT#L©”#2Qh˜Güè».í—Ew³ý[€Ê÷Š*v‚–(kµ•‹¾½ Ž€2/@øºøȵÐQöׇ:\HÝ(‰Ú.¶ƒ X³¾D;yey”étcÜÍ =lu]P.U"ì¸ö­³°Ëó¿+“ñFå»Ã–¨‡ÖèÿæÐÜ£\|¾D8jüôQªž§Fø¶$ò@ýi ¹»ýÖNJ óóª­4Q$¿–Èhyê ÈÔro­§ZŽÀëYuñæö,æ˜þãZØI\Ô.@]W—(vÖN[þ&Á‰‰¸ÃÉ* ¹©u‰QðØda(×c&¶­œC¡˜P«i²Þ¯YN¤ÎÝÕ/àÄûúd㼺élf$æK¾gçòü2zç9a­è(jécžOÿÓœ|–…Yu©ê¸ø³±½ØÐÚ8“{ÑCÌ!v€Þ м|f%¬–0ÈÕ÷’Í8ˆlá×¢%) ¦ …mL¡ k€Ô$âW‹Ê„‚9Œåç#°Ùž‘ÂFo!é†õg(‰Ïh¥ã@‰þT׆h[´7cí($Oß²Ôë§Ç&ó°û6ªÐ”¬º”òD«Y»÷5ˆiåß¾C#›Ù/Œn¡û<-÷0ù%dCå1ì+fèMqä˘(›^‚Y¢ É êÝq,<­ÈQ¦óÑ—ÐÖýüXuدÂÍê|× ¯,*ǃôn‰¬<¿P‚ ÆLð!NL1—–É„¦ûÕÒ£QÙ€ZékEtؘî?<=?¡lKUôQ.{Óï‘Iñ±íaG°cÊÍßz_–H¿•{òAºH™î(Èåà9ß™ï0¼ÏS0®Ý>ôïÅ8³ÔªùÐîV„] À[˜Š¤moL=F°ØÑåq ‚8yCëÚãƒüLkªdýÎ|âÕØh—fÛeÿÔ] ‡CÇcEÒxʱ :OûÖçNb¶K'ü„=¾¼7W >p!HàÕµÝÎ#Àá‘ŽV³ÑÝZ¼¯õלÍI%¢€^óq‘­ur“³„|g ä‡àèµ?˜)û{ƒ`«WhÊ`€ VØb%Ú+Îè*u×Bóü€îêHPªƒÛtìêÓ“ ÕÓÁ¦ÊÌŒCâOkbwé ÔAQïÿL> Tþ€¢xü똹/…… QMÂÏâü:Çùöîdh"vñ´{¡kÚ «¬¯c©«’Pˆ«€Ý`øÍixW›ž/ç„ÆôŠY~0:üÉ’Ò”©¡éãˆìÕ9j!þ®H”Þ”]-è¸i×Iõ'ö¥ë—Ђ²ß®cæßÀrf³ìCãù=°¿JЋ¿-­È/`a®ŒÁŽ>¿ß¤|$ÂKJ‰»¸èPL=mï.‚ rº¶ž³ÃÊS4ë‹|™ͨÂ]d´Ž-£)i°HŸc¹™¥È¬VIq¦b*§X+9'Æ7Ãë ¬{?³Z2¦ã(¤£­I)^r#OQ4_bÆ¡áu€‚öÉëöÉCî1l¯ÔÐåŽ3Qù‡«@²ÁþŠsMj!¤ÑO›úû³`—ÊPay̼CKa ÕJ3uu)R€ZνÞwy)Dwráy;ÊPjûýµ8ºh"G(Ã'e›«¤W··ª o«6¿³7ú®;•S›‘õ€¦{‰óÉ}ðrQ†µºäÇâñUP³¡‘§n}l4gîißOÙe¤Êà¡Æv—ý9î¿??Sä ÿ:6èçÇÝó™–Ðp|‚ðåjª˨t´Ž¼øyÏ¥¿ÿ34µÕ%ˆ g õµðÈ‹ˆ-ß“¢lñÙ±·P’j®m{2zRKÞÓþíðe\d&¥Ô. õÍ ƒ%¿ÙãÄ´Â$íÐx/E„.-«zv6 Ñ81G¢KúuæGtè×@ p¤Âfæ¦Éñ¼–/¼_í˜Ð×­&š¾Z)Ñ6šá´ÕÀãÁ?œ Ê¥<ƒöT‡¿ú­¢¸Æ—/ÃäÕJ›ú‚-0®òÃk³ã˜"óîF£TÝüƱƒß”áZØ à üÖU<%7Ó¤RlO,á2Í¡ŽÝµ%`Y•©›Âë¢&Ú‹ V°ðôh&ÿ‘ƒÿ—Êl'’sêÎH}8ÒÕiMü÷¯ eTß +'Æ%î^-ê6þ€@¨àeuW×Ù´òm.Œ—C"û(½¡£–:ÛLÙAnÒzDoñ<¥q¨YÖÛî~ó/&ží·T,&šil©Òάób˜3ò"‘Zga¿›ô:ϸ¤šòkªb³÷Òau½<3¨›oú ¯IM,+×Ê.C“Öù¡®#œ˜¦¹¹ÇJ‡³½9TzZdþèŸ_¶¾ýæU8•Ïœ&t+¡T²| :¸S‹‡kÕPEE@µq!ö’DÐà•^îA|ù¬jñP1ÏxV\î+ú”´6à&g’ùIü¶…z˜A:iÏÆUwñËgLÆZÝ¿„[œ_ˆ0¬OX…=žÍý["ÌÊz¶=ý]ÒQ”ë;8ƒ úè²Òä™×qe7ã/ˆ¢ZD¹É“٧ǢNÈ2œ8£·L¾› RÛGr?b8,JsonP#©ÑÍ”¦ùÍ°&jyM^4úZ#PáKoY÷¬¶(TP¦°=ˆ\ ²×h9æD`λ/+ôG#0êÛûŒÐZÀÉ­5K[Bg@&ü@^”€UeV“¢Š'IêºÇ³¤†·\ÜõEY`€×€wlHÖj¾óe!h†”ÿ£`&é²#3pÕÛó†ÝÇ1ÇK,,¯”´çµ­–¦aK Wî!oÅèß9º‹ qG{ã]ŒH5Š5mèw9Ød#™¤gJÜhÝRdƒÞ¬"¶Ûš©á±Ô£ÊËLDõ‹£m-ûAÜ;¤Ò vaH†±mÑèåºÌ ?˜¯yë±4ÝÝ—X6Qù«-žeq•ÒŒöì8ó»^¼L…¿i]—$™çîFí–(ÄÿßçgÀX£ÖàiR •gsá0(®MÏ o³òW$¤T‹û-çßq3WáÕc%Â}æõa¤NÍðSà’uÊS'LTXÅRôò¼% Rzy­i-¦ÉcZ\7ۀǞšDƒ°üÄY™‡jÆÍG^›üê¹–áÚÒ˜¯¿Þ*mò]Ÿ_õD |dô’n2 ŒòXðÖäʺ7Ü´·(yµ91NFiΚ:xÀrÅÒ("„©÷ëïå©‹)DO„(h"ºaDËV”ë3´ ZÌVT»c´U¾jÕçg<Û-.×ÜÝc¦F>ŽÀ ¹ª/ª^噘‚¶\] {¨5Ä6§å?>ò¨M_ßH7ÿ%÷þaŸ¨:4`2íÏáÈK©ý²«Ws™ûu0¢žÙèáÜ·‡î(1T‹ÑN,ôNHˆˆ Z[Á´ýŒ'°Ô®ª¼rNBñÛMû2ý@¿‘½‹`Ê-H*õõÍ´G#s)Ul /¥-0·V=±dæžÏRtlgÀÿ+‡Ï;z(–˜éœ>B;¡¯Ê&á%ßÜ@§xŒ´¾pÒªªŽÃ©ãõ¦zRôxC“Í0tÝsä˜rêÀ[— QŠîé‚)]Ö*d£ÆŠ ºM¿Ü(¥ $†|H‰³…;Aj»B^­¨@`Âü¶) dêËÃuG¼øVøhÅÖ%¹¶Òn¤+æíêµíf ^< ìÙ©¦Ró(ØlÒ8±Û¤@ƒb£ ³Zž’j}Ämƒ]ÏËå9É]4wÕ{¡¹Èƒýð×`€7 v-C›ÝSÃãç#K(²¥Â3j –Á¸_Ñÿ "¿.× róFVË2]Äžì€ÀÈί¬G¶a>A> øåD ¦w±ö£ì‰úhÁá_|x\ÂO˜,ªˆkö”x_mT%€äéži⊊LûÛzÙÉ¢¡ƒH4³£$…ًߌ֤S˜ø`žp“Dà6ï.©2ð²ë±‚_î7’ܽ6oiÉõ¦©|g™~~€_);×°'cYA7÷YKîlBo<œ>à€1’¨ š-b¯E=µvÎq’ÄrJQ÷{ò'õµI`Ä4YIØ ™è% ¬è»œ^s§}ŽõÆ]”•Ä5‘q‘[ýÅɧ²2Óõb~2÷¹åÒ)É0§¶7¦lÕè¾^A!„|i^j·â:ÑQÝtÎR}Ø…š1Њ@\Z7V AaØÿ¸ñIKç"ƒ>„LÐ8k66Gór¦H`ƒ† RFrÉ}ˆeTZôß‘4¥8 !£`¡2B®jƘçab/Ëxbµês"‚?lÏÞìy’Ï‘ûÎ+ç™ý=q6ÎYÿ¾ùØuö%KoKi0-)Ó«c½½÷3q›^M¨–:dO”*P¶ƒê^EU¶ X@Qc.nùy´UÕÛÁÂK­q98ŠQNæ{¹“Å QXÔÑ}ýbYNhÌ^S*kŒÈo ápx™Ddz–ÊUÚäÒ`x®1Ì…ö{RüZ‘à Iú ¦?Œó­jÓy5s“`oÐ+ßú¸§ìþaÕrc­ˆÆq±¥\ *Ú"ñl¯#0mIιÄ@? Û\»l¹JáÊš58~(v jjŒqê$ÌéÖÄ%ç–(O²?!C©íi|+äÓ¡½Ã±.>Ü̈L-žXý•Þ|]Þ¶‘I.=ʱŸ×µ *¬Âšk(¸4%ãŠwÜ„kíã›õ•Aúþ¥ý§¶Ι(0äºQä¦Î¬A¥¿‹ ¶`ž$ªRë;‡tÀõgóa¯O«l´¦ýxßñ +4‘¯áNq›ГBü¯„õ`nc%øe ãm'êµ=I³°mæ÷k²eš–‚Øß=#ÎS‘o:Ë1d·x®ý<žÌ"ä€a1œòÓÏ鮞]ã!«žÆw" žzq¯SJmQ…Ñ­:üÍðX9ïPû&Ò+ AQ¸GTêN“ÐãÇ¢ªD&\ :»ÅQQZè¹Ñ~fmŠFkš¼T²FäîØn×’eeŸL¿øýŠÒ«dKNΛÏO ö¸•¨Ø£çÁFîcu>Õ†J‚ð×8DA¯:! h§9è¸*nrwGd@ë½sµ‡‘_PZrVÉX5Ò„Yñôâ`³|±…cxqY[Ä(nea'wmñ'Ì%+ ’‘¯’<òäDIŽlîÉÅà•õy°b£#©öƒÙÃ^<ˆÔCí•Ãµû[r6©)JšùB#l4b豪ÁÏdºwÓ0d~I‹“g>‚)W¸€xþq¾¢»>í]u †EÁÓ«i'/™4ˆ‹¢*P· ¤¸‘Rsrtx¸P¼!«Ûá6Ÿ; dŠ D©¼î-×w J× ](¨EIÒ†Èæ\¤`!ÂG°64®10.•ß-µgê«þ´´ƒ%.›ÿþ×·Qïeîš\ÚÙßðª!9,MéF&•ãb›cá{RZ<÷3Ù'¬ÁÕ œcW_ úx–]ÿ횸5Û(!¯ma|¬XÏÊ;_úSËyÒ¥ž%ÂO kGó9FG¦ÒV°•-™É$ª­wŠ:+‘îç¬[LyÀ°¹RºöÜLoŒñ°4åZœ6ÂůoÚâ• JNä4 Fuò[ž7­/4Üj¢¢YQª¸G§Rñ­ú¨ú)ÓÒúο!KøR®x@6—|x[1·—áq^Ìžd&9ñq^’áUªª<"‡`ÕÏHYÓ×Èæ˜Ù]»q®”F©µA•s’Õ™à•è×ALÜW;dQ=ªÊ‚«>ÆN:p‹õÍ¢õ;¸â¾ZÉNÀñcyùŠF?5ºýX¿–ˆšÌáv×Ù6³ˆ”0îñ®bæïÊz—h\üûÓ.–Ž‰Uj©Bµç éT.¬«Ðt l¸W6>ö5lŸ‘ùIr¨-D:æ%ï>9Ã:9Ù@Š÷ „·ÑjÛ ˆ^sš6SǤ{–pÙ­nÔôÊ© ™ÌSAô;l–1øÖVGÊr͆VÇÅÍee$îNšf®³S±q‹Gù÷F¹Ó—léjm#ñ`7¯"Æ©—V!© 5íoÔ¾z}HáU(bŠâF Ž·AŠL܉ÄN­Šæ*_ëgÓ„]°H.IàfɲNî€0n:Üé ^{¶}Ù‹j‘Ö;Š< EÕÝàw°âÛ­&’7‘ù´^Žh:6”ò­)Ã;†|Ü{]LÀ^‘™uARå2a¤óîq˜B¸ÚpÍzT_¶mW“20˜#ìF’b£‹R²ì³™f( ÷`cHI¦Ps,|tìXdÀ š¬öÁJHÏ€Ý~B‹¶¤Â:‰aº§¨îà©ž®âLo‰¶åƒWÅ2U:˜#…Öèo'*-…®¾EjÞËeëtP‘íÓrîÐ …‚_Áœk|²9tÀ±õ GYt‡gÈ !ÓiÍèîVÙÄ‘™öüNxìõÁR´}³mÊþxO½içéþm'£_Ò?Áш V«Nêql(ÕÏ00˜SÌŒ³‹õ©„MŽMnñ¦N¯rÊ=Gÿئé[½ä z•-Bød;^c^RÀ%Ø¿.]¿`£esÊ’#Ø46v× 1dÞIK±nðÍ0EYŒýyÄl”ø)D›wˆÉ˯²ü=’³_Ôܪ8ÙÊýÿÃŽ'-¡9KÑÄ?!Í̓çZµã½9Y¯ý“6™1»–Üí+úHé4Õuq%‡ çfî¾!çfgmå¹nþ Ù }aG¦OïjV‡Ž\>ÕUˆ‹/ì5Áß:¦447ÌFµX½º@ì³gžÅl–û•˜5æBîÒ¿,™Õ28îðDåÉéŒ~Èöb< »o$ëü^Hˆ‘ž°¹n]ñ^ÎÒçcÊ¥=ô¢¦‚]ƒ”ÁEcˆ›GNqy#Îr™ðãj«Vûµ*ƒ8ô†aû%¥sÊPþDw¤ÆÁUè´ƒ.'ïU˜0ì|!kÍGêP¼9Ej–×I=ᥢnµé^ Q9¶á79‹š·àT#ŒÖÏ.Aò·þ¨õgLÄÕ§Á3¡õ$™Èøá…þ®ü‚™ÒòVc2VÌãP˜Ã_0õyAņB8‘5A !ºÊK½¥–Á:›º™_–¾î±Ÿ¯LaÊ;Ž]ƒñ îõ´„âH`»„bYFÀmïü„j’tÄ"9„ÕðhàcLá µoÒÞ&=‰„ë£reö7ì@Våˆýqôµ•1ÃGêâÔÛWVízz¬½ôˆÝÇálߊ¡«jvàýPþ ¨ù1¦ÿEv~”–q›„Jßɺû;ì ,¨T°&3÷[ÜÀvš`…ü¡–S°C¯¸-ÄVÇctH$£œÍ³çâÆ:Ð>ƒ¾³oÃñx䢅â[Q)y’½Cï¬ûÒ¿S~}jWŸ‰‰á\gmüĤ8½ñ_öÖèЧZ—ªS®æ›—wL²Êzþ]¸Ê A26ÝUþŸM©ö/©C¼û5!õ´0—v”øÍXìxÔÉ€€¦afyÖ¼\Üá3®­}]Ô±) A=‹£û%Sç) Z'pmA Zxœs¡áž×ˆŒÈÞ@é 9_z!7dÙÔG¸=`eÂØ”ü[‚s$Êô=ÅÊ€âw?õ‹i°ªF,Åyc‹¤Ñ‰õyè}a>ù¶®6Ü„‡¸Yÿ@ÄSŸÚË%õ2uC6à‡â’ŸÚÖï?*²K¬ €#7H““CkÀ_˜ï7í:;âÑ„KMfãb¼–:O,GÜ’JÊÎn‘¼Ã„,ÐÑÏqee>4žf·lÄ;â)*2Œê­­Ç9Bptzleó¨v»ª}•Ðª–HÐ qÎÒñ®ž \å•Î⢦™¯D,{f6 N®i¨r©Å‘.›ÍVœZA)Ê¥‚¬¡£žÛe¿žnÞÁg°ž•N .·T>Xnêa{”^Ô»‰-‘ßbÍRï·wuþ Òp›ÙlP²|7Ÿd€ðMã÷Écp¨¤ßuøb–¤H_#˜k-¹6yT'Ý'ø¤Ëц§ü²<óß;$‰ Ó&µµ(6u2BÏ~ÞkØ“È‚ÝN¤'bEèBÛýþgSqê”w‚£°Õ…ºÒE^wk—ÍW„î>yû·§1áõý(š‡RåŠ+d{Ó9Óqæ]‰:³ˆß‘™Z!kpÏáèÿ€ˆé6?ÍP=\úx—¼'M­3›IEeó³˜R˜=ÄƹÏ÷˜iª<à OäB?ŠàÇCZ¦=y†Ææ7œ\øl?êœ\qf¯°þŸ ˜b9zÛ®; 5é«QcÌ+  V:Dšß €L¸L¡pM;_:˜,àÙ‡gŽ¡[£½]Ë6þ”R’›:,”“äÎV[4ÄXάwW¯ž v¢PBʧÇa‹3Ä™p©‡8KŸ ¸7nàÃDZ ž‡|Ü»°ýØ’3ø÷EÅ;AP8Q¼Ëóvpýû4¹ÜrIŠvÌ€¤Ÿu_ÃùëãI™Ïò^1%žNê9÷Á'Æ ÒOÚ.?ò¼ŠKįÇ+„â¬= ‰¯™*¸Æ ¢ÏL/a——nMŠïQ@gÈâqæøâË’<>žubÓõwìŽ= ׄq#铇>a º3°ø„ú4€­¾®; Æs˜¡Gä}¬[ý½_;ðÚI t¼¤Ü…þ4¡ù†Û.œO‹ôx­ì®AW»ö)VÌC¼ \šËV3Ö‘îEÐ3'n¶ ÷ÈõUã`ò)ˆ~aµ®-u-{RMErD• ÖYÈß’±âIšWâðí^s ôQØÂÕ ÀU¶°åw«®ûŠƒÈj *‚{Ø'ã?G&ÞÖB­^}À÷@knÔ>ÿ;OKÀÆQé†È,0—Æ7Oƒ[O1¿r,|ŸŒÞ qh¿H|× n üíU>q€ím wÁ]^ÅPœ‰û»¸vdG)àÐ&å;ZXé¹L²X(¹ŠtEõÆÀvb6V–(yyA†8Ü™+qÜü;êKöòEwG&;!YñPÑU£ÉÔÊòH]2T²£ƒd·Âùà“MTÓ²¤«%ÛŸanp À/u« î<Á9;X(20r²jíØ2“-ˆÓ!¢Wò9ØeQ§:4I¸*ÂË3û=e2 ¬s‘?‹v2 ÞÝÑKÛܦ_¬SAûåVÝ®Î,"Œ“\Ûjq†ÉÜÕ²£°ôhQÌÒ&2²7èZ€òœõ¨i¤\ä Èc_.»ïP,,%¥ “oÍ.Y`õzÒ÷îmæÆ_ç^)é…M“f±Ù ³ 3IìÚðâ ŽÍgÓßý™,YñËîƒð £ð¦üÞbí_ÉL›Wë.4A[©Í—Ü÷ŒƒU:ž¬,ÂýO6®$šPy¢¡L©$}² kX¾”ÉÕߣ¿Ä\rJ."R÷HèP"–¡0?´jžFûŠKèàeÀm €¡†ß‘r×CùΗò;ÿ¿s¿Yn»&·‹'3#©cŠ¯¼ç“/º{b4uAòÌN´ŠYŸÁ±~ï~m¡v, "äÀAà&îÃ&ù­\ƒÜ›ZN‡D!íò'Ôòâ54YÀº¥á¡§ÙݽØÖJ.³ð¶váÃňhÄB3¨" =ó"œôkúßJÍ ù»m£mohÌ‹ðaÅw €°ÌN§ì†°–œ,X`Ú¤og{AÒ¨8h¼`l?²£*»µfÕÜãñŒ²‹“ãËlì~ ~¦0üµ}üŽ}¹bv½Œ½ËkÂö*ûE¸_ùÖ_ÏTk¬¦šôc¿'+2(ïv¬îì=ɼnÊ:7éÞHÐÈI®á'¤¿# T§9«âlçÁõcöú¢œY~6ò”ÈZy§ÙÊâŽ;åö°1öI§r½ôxÞÈ•fHÌ UsƒÃ=¬&J¾Á1ÚÕ/Ü'ôØhñ½î¹÷„FLéO{§²e;´Õ '¿»{è5Y‚ÔöI•³ÌÁ?ÖÌɆ¾^dº½$ë¢ 0£2‹©c;&†Pá}t kã¢eÿØ%Ñæê-ÞØ¡•²x§“‚³Q ˜á£Èöx ¤Þmï½s÷‹÷‡kƒžÍ26ôÜ¢ýDÈÃÙ QlšŠ º/øÍ'ÅF ËUí²‰‰lOdÍ.8¶Ò¤•ý©?)7VÙ¡bK‰<É eU 7jÉ&Ðu²G pãWªEóߧÏô¦€5‰ýÐVmõƒ’:ûà[Ñ”»=#ç´Rúå³I íWq|}ß6ZÝ?îúº’½2 Þ´£õÞ+“¹áŸ´âú6e"’Ì®ÔtÓ<#„p¥¢·©yJ¯5 !%÷7¤t3ŒõIßžé³ÀhcÁ¸I)qMÏ jiñ²fKe%µÐÑÏÑ@>Nºï¨ÖBÕñ–´Yäsj*çl«—T€8ú4y‡¬«ñ"Û´ÐvP±ÕíÅ]ÔšÃ>J;Hg¾j }ØP|+Ç1uøCkéW{ƒ—'sïÈšì(ÚÕŽéA„QÒÌK<9Õ’Ô§¾«‘ûfFñÝ˃̀ä@˜ÿAÒ;£¶Í3¼Ê)eòÌËOŸ'‡™z Ò3‚„ð¥ Ö»»žÆ»ÕwD°/r‚Zpƒ|<ä\úxÇ̃å™ãÀžÜz‚77ŸÍíÝ ÛëØÚJÔ0f}pKWuU-ašÜ„6WÏ7H{÷£âo`Â[•#AŒ«,esÔ¶/b…ìóÁ♆ߢ’Cv, 3ÕÑïv瑬>%]#@ëkO« þñ[ÄrCB·-O,™x‰æ';h½Gl1h ir˜$lîo¸”·—¼3“õb¨v1¢žèàSÅQª©Y¨¬fUС 'ÝÌ,¬sOêDöù®ÂS[ê±-r°Xe맥OÑjJ@o˜Puj5 ¬l2_å9@ÊÅBЄ’¨ã{6ßh*©ïEC©lǻؚ´áÁØ€ßÀ»eÄ bCXÖÔïm½Ì¯Éür‘&Ñl ¤¬~Eë~ñÁ§ó*gUT“|æí Ýäjà†Q–«HÀ`Û1ëÑër8Öæ¬%oJlºÐÐô kz_åeµ¨ÚÈ$Éõ‚‘0Å­§ª~¨z»¿Fb4pfÆFÉ)XÕËB<ÚƒÁb–j®&×èÝ¡¯l$þwåÚ`aSøŽOˆ;YüGÔÚå¹Âä0®›kiêðŠ ŸÕØ÷¸Ûˆ ˜N;•ú|1ædQŽ¿­h¦É HÄû…"•‚*i)-ÑçÂðÜ혇¯¢†ëĬ0ô…Lp·9 ¡ôgnMF®ÜÌwØu„ˆëó³JÁaù¸Ùg“ï*ž4[p¿WbéÚWv>Ã8›44ð½kãäû(ž&á <ü—•'¹a²oâ°¯¹ –¤ gåŸfAp™Ÿð²”‚ç –×ŸØsR¡èªEo>0ü¶À'÷’%•C³±¾²Rì|£¤rsÛðäzSgehìšÿTýó¶Y.}[Þ2ækþ9;V)q}èÕ~Ðl(õ ¨Hà—a—™e N¹m³Å•¸‘ç#àZmO~æ¿76i²þúBƒÊg,2@¸Ô칧f¸¾"L¾ØrÑõl”Ÿ5w'»>#rïí…‹åÛjáSöùG›Š‚|û¤Î÷¶¦Zl  m‹•Ú¼i_&"a·ˆ.*$rÿ¹9#×Ì¢@ΦJà(F5ƒ‰®w¶<òä“0ìu3#P·>Ø †‰·;2ô陂œ¨+­\j<’†nô9©Â?ØÜ/½ ƒJ——Ü“óe¶™a:4Y·7ÎW}9{Ýœ{à·Šª<îêÐ𘅳=‚>ÃÌ4Mƒæ·GŹ6Î*–>¡;QNö’ŒÄ„sëÍ RKèäE8*†€Ù8IlÃãÜl¤¼tMÜN×YŒLö˜€¶l>^ˆæª&jËŸG® Ö‹ª cqù"ÃCAôZnÖÙåñ„‘S¼Ø'Åö&S;ÄUZ6-o8…©s¹)pÈL]bý¤ÔÎ…ÄÀÍ;¶Q‘´‘ ¹ãþ`0ƒ0KyyhÇï€Úlª}¼ç`‡qûæ‰_¥\™ Uú°9Ãd¨VekÓC‹§8?Ð|fCä—r!%‰¼vüöÞðJ ;jݨ­Œª4jÌ!†yš¸,A=í†Ìøý 9´Z`#zùe)²c¯*NNSã.´þ¥O­–áFBýëÑñ!þ£M¼aü˜­žÏ‹ªŸÂ§Ï0$ …á)VLI.±ô‡Å¤{çþ]EèñÖNœÊZJ"ÿØ¡}ƒTxƒ£ít­tQ[IH¥åï’¾3E L‡àÍ´F\9¹ÝÚi—³Æ°$ù^Çؾa<¹3¦ ª{òÙ¼AîD`ä 8üÀÓRÁî\÷9vA§•g„Ž x‡iDò‡Êöó,j ìÒ 8倡W ¡Püº s`©·ó£€ëw«`§JE@I; $|ˆ¿ëêô< â&°ÑPnµX4éŶ¥H|þµ“4ñ=tEÄ'm¸Ï÷WAOõ²ÉŒ‰`mꩯfb×ÐÊYÔ×'²íA èùͯÆöró©_9gE]Æ|°å6@^°Vz}^^§|cFè\† ·:‰“Mø˜UºÏ@Nys]ùi )iÞؼ^ûíP•fÞ,ÊÞVÄ×ÎG YÓ¡»Uó6ŠK!Ì ¦?æ´”mM#è‹0ŽMŸsñè3Ê(¥عÓ‚dvĽè’ðcߊ¨ÇùÇé8œç`Y9Ò$Õåm)ò8ÁVËÉxBÓ6¹Ë!É|’a¯žf˜]Èh&ÌI8öiÄ…ù+Εþêªøžþ4~“,2 öN€:âK;U1]!‘äçÿ_ƒº˜ÈS딀Ì'¯¸`ˆ-F]7C»–B<ØÃma‡É?²ŒUÅC”ž”õØ’„2Ä=9{á‰õ*$}½¬zµ@é‹y&…,ÝfÍrÙ!ë¸OL ¾'›yŠ Ñk*vÊ|\‰W@¡åË7¢aQåœ6‹‡ƒl;yĆ³œ ‡bÚ ¦T˜QÁ’níÙ]~å†Asù|_éä…î'EqfÔRUSˆCãÐw¿äÕÙ^ObËTàl(ý–‰0¯ÇBoôlq_òDnlðBþq{œ£³é¦‹NB1 ImÿâÇKðœp&y4ñ•Œz˵ 1.uzE!~n0¦VÕnÈo3œ~ŽÂùŸ B$Ø01& ©l®@ Œè->òíïb¹7_¤i4pKÀ‹<®¡¤ÙˆO¢àÇM¸‚øÙ ™œ?ÿHžbB ª ëþNÏeÁû~¹Î¬ª#˜ÍâóÙ'ttçÞ“Åê:³ý—ÇÞ Åôª6Ànu~¶ÖýÉðÏ9ù¹èŠÇ òòµët´Yþýu#ÛKUËšëìüAü7!¾Vâžû½HµKO¹f,§ ”u®®ôXx3–ÓEp¼¨—¼›tË%³QŽ%ýõéñ”s÷W“ÐY¾UY ׄŠfÑf[£­˜éc/~»˜œå” Nô¹©³‘©˜YXïâbR+ÄT0ª÷h)4?0Ú%m”ï°WwMÎÔ®= þøYçœËM]s‰éM–!ç’ÄÀÔòÅô™vÎ2‰6r¯k:–ЮU|ê6°Ë]ÞÀr^œÉÞÞyGfg©'¨aÁÞÅ ÐàvÌ軵„2r´ZݺM‚º|“ÒëL콡D)†°#Ê9U…sY“Ø«5çw«)?°ðÖ)ê±±N¿@ØO;˜@¨ým'„:Ò>øi±ÛDꜢÄÉmñ¯•±š4¿˜÷(Hö.´{â$«»eÆFÑ„|S'¹=¼g—ö‘éøi.„ã3€ ã8ØÎ Âsâþ0j2Íq¦bÇMT‘°­wɸæ#ú»U¥¬À¢Háä°VúíB&“*àŠ8ž˜±Šob„š†:ùCªl°”K¦,ctûýü##Òå;AÛ4ÖæW„prûš‚S6JJ àÍɸ)·…)êݯ_˜\JkJîúu‚‰ÜûÄY-x&ê¥O,þí!:<>¿1;´ô饙.†XÕ„1ú}XÏç­OQ–Ø|xò·9µØ8Ý78ë·yq5Ê“škáÕTÐfK™5è-³1Mܨxå[@éAôé{w}…ÛC(°YaF ò»F7Næ©dèäÒ7!Ô[ð缓cšÀÇF%`½ÍÁ²é¬—„êÑ{m7Œàêã¸ú„®xl?qäÙ4Å£9åªiÏ…šÆ›õFV­ÃहkH5`»¢9¢Tè·ÖV±îV¦9 2clxªÏ˹"tÇ÷8‚S×òtµÆÅüÖ<±¢4šâ¤Eö›™à§ ü³µ¡ €"ÎUTeŠ†i3›Q%ù”14øô#ÿ!Fpû’‘2w㢠$ù§i½¾&sµµtÛKWöï®ù¬?=Ü]í E8$áð¦,ÈÅŒçtÙs«›½¼Ë6Ø’²Ò«iŸa0éªÊÏç—š³¢TWìAÐÐËù¼ÓJ:÷–Ê×µÏÄßÿžÏ[ž<¿Rˆ`WŸ‡Jþömã¨1ötò¨'}ÁÿÁ^ÌÒ&XL¬`Îø‰UæÖ®O×”nP²8~ztkz÷¡î\åïkàا€þU¸x­Gå¡ •W˜„“ËõûØÐLH½5É©àÎtˆ¯³¿q.¥ëm2Ee»n¨¼1ŸCµÔ{ÿXû)eŽª~fêëµE×›}2¨]θrƒ£»ø8Ý„¾0zà’Å!÷6âð~[tD{pϯèmÍhö4þà½kÊ i`ŒƒŠ¹] ú©§}>ƒYÑà &i… ïp-qN‰G¬ô:݆2r:i‚³KZî Ny>ìdÑ1]!qVžéŠêéh…6Îêæ:C{Œ“¥P÷Ù@ý ³Ý#­·0ÀÓc›\Ùzó¡lúé+*mœðAyZ\0¬ÆŒ­ë¶é¨zr©»ÑËŽça,í¿|Ìl¥#3S9VD×{ÒExzÞœŒËˆÛfãByªXøpN ΀ìì3p üÄ+,‚jIÞ«zúªžüÛøq6¦9ˆGœ½é{ý¶Ãå%5‘æ(E¥`ë¦ó;|Ô9.Õói_…ÇY6lþå¡:¨ÁÄfÎ}ûö¨çbolÓDMÔ,êUwåªútJÕD)Í®ãÁG,m¤µŸ¿ïf™Dˆ† CkEIÑm‘‡õÙ‡µ†µ”Ocw¥è\ÝFÀpBx’Fî›<„$gašÁ`~î"–|Øf<$>q8ÅMÐ×O>ù´¹'ÆF³ˆj¶ÀtvÅœ#ž«¹sEÃÇFƒ¾»7:‚Ô}x/ΨO6ÇÅÜãÁ–Ç«UXqŸa}æ wíæARÜëz¿¿ROCë´ ?W ‹üI‚ m_ ‡|µR¯ì„$ïÛÉÇ!}]›ñD_SëÖWÍxUýªàgeZú‰QÛ´‘XÌŸ˜ø^ò²¦Ù|å©89ÒUŽVìõÄÙ”Ï÷Bð7…èg{Šê‰o0&€¼Ø_Hpeí¼[òÇ<Ø]D¦âøºrÐ*̳‡?Pe Á15±Q‰MJâ_þµy¤Ôƒ»ÜŽ6$M7N«@Ö×’$‰`nrü¼]i8f·ÙÒl‡b…åò›P¸•çüKS<¹êBâ‰nò½}1É&ݽ{ÏÑÕ0ýˆ|ŸÀÛ?ïä`R‚'“ëmЩEDŒiŒ½[AD*Z 1Þï¼æ߶^„z^Ú`• è­ m•.¬1æ—Æ`ºcQ»P+í¯Þˆ lTùUží:§e“­@õÒȦðÀ½í YIÑû Q^ÕêqÅæzb‰Ý?µ¿=æªø/Z°¢SAz‡4Ô?·ÒºdY3Àô ì'(³¢™ÊM"‡ÒV²ÑD™舎ÌÂM5w%;”ÚBh3I\ÓX‰§®ñ_©u®ýGR˜I¯ÑÏ%¥‹…Ú¥˜öh&o&x€á»A*I'¬& àø¢ ’þ]àÔú¤û2¬ôs ¬âŸuZóu->|éäZÛë:ÿ»}#>j`tŽ skø¤!Ä4\Ôý­OO_¸)uܧ ÈÀ‘'Õnh€ÞâPÄ{p-£bt=†œ4=â½ÆÚ·s7›¬È(ÆÜeZ™$ó¶{/ÿYr+®k¼õ8hŠó/Â:¦Ú9þWÙO‚ ’Æo9:Þ6°*ï á^?Ø4+qxüx…±³J^&X·iðgb²À¦¿@yÁaâóå7æûMÖœ¤ öF%ÒÜk®¯ÄÑ >NÈžˆw%úÈŸ£%ä¡FëkøǽŽPÞШwO®í£¨}ÝV$°V0X^<˜@•xÖ\À;—FÒAÊlÅm÷6?20mâqŠ~Êhq®"ØßbP˳®ùBkc–ò ÷ÛœN`çtþuõ×>TŶ™§€¬ÒÉL »=ªújä7öæ#Ay3þc¬ÝêéSEèÁÑì9þ†…\MJe}¦h¡äº³­ò¯‡eE½Á¡?„X:/Oª:×}¥[FÂV7¥#ú>–70D‡ÑoeþJ‰µÉlÜ?°ÔÈ—–ײҚiYïyð˜£ãEÅѼ°Z=›~ Š {Þ¡³Ür,A½1œ˜)æ®%ŠNÙêð_ÿÜH‡8-B‘_¯ÀPn|þ{ÓçP*’ú‚ÇVÍë¯øÏÜÄÄÇZ(´v°‘Ø€& ß„h¯Z3ªe]VöÉ„ûs°©W™þ…©KRú3饴ÄÈÈ;‡xbÄ1C”GogÞòéä6ÆX“!z5½FTBq,]“~¬e´”yDõ ZQ`2#ÕhjK«XªEI÷ bìy?À†H¿c'ÑOr2çHã+1OGëfîÆ“ 6¯Õ ÑÎáù&ÓŠÛÕ2¼QËRŸîÅvDnæš=Œ·‚õýñQX…Эàž#–êPºBå·Cà ”{K}]{8gÍÝ•×æƒò;B@bð=Dù{w R×4Ä¥ŸÛ0¸'ß³Í÷Vg„--úØÔÙ• ôEB7 Igè=ŽÓöêü¹P co w®gV3=m‚Eær"‹"Wø?ÿxÌf¥}òÙ[XÉ{‘‹YgEˆŽ€¬ú’75P½~] ¨”$ÚSëÉPÊ­ä^ºõòéU,¿Ÿzø·¤mÖq‹-ÉvTÞèXa›NáêÂeçBEŠr «úÜjBÇšGü;¶÷¨û#B™y;éD”sÝ@ŠÞ8L£'míú gÈmÙx”YÂyó´µÝ¢ªwÞ¾fuTé¿âöp¤ELö/ìµµw£q<íݳWÞBh Ü£k pj«}rO…jmï¿DTðà ŠŸƒþcè·a¯P¨xâËé]ü÷pÌb@äs!ECe³¹ÓG­ýM?—ñé⡺EjrNÂ?Z9ñ{ö!°%غ³˜PUò¼9-¼kpoñ>£ýd¡Q[ùÌWÈÙ°n:|ÛCDá¦[ùÕ7£> Öãæ5BdSÜðÈ"Hs(f×ß÷~S?SsÞ,Ô)Jg4àmã槪ïÉ Ð=m4žîã?o£¼QÌ¡"NÖC‘ PJ¼í¡ÈÍMGÃä%“܈¥õ‹PŸ°°ð‘ÍúŽ%hº"ÉJ•§ÿ5,(¡õsPxuõU‰9Çváð*fÇV“Ç´óŸ;:Ž®êí@wY'UŠ9yFª¥,¹‡¦Ò”–3^Ñ]怬{¶ãĶŽú7²*Ü(â¸Ù•S礮_@¥Ùf¬âïwJþ^ªk>bCI;y²“Íîdc•×Ñ'f<0 ®yíL<”^®³Vô(Ó·!‰àˆJ:ºU&¬Ci;6…5¸–ç4KøÜN˜€+~_òIÔÿyæÝó‚3õõÏ|”LÔ¦\ÙµDWJB/ù¼µ™,tÏ8Ƚq\Äù&øsj5ˆ£pÂ.xƒKÜ B;¶Ì¸Ù€%ºÌeѲði' Ó?1ÁY˜X!ÏÊÍÏšh:Ái³>=%7‚|ø1!äiþ*ó/lHøäiï=´4°Û7”qa…ñŠÄÄZ¬¬†gÆÆs½~¦ì·]‡øãV¥ë;£µqWKϲFLèL’´•[~Ûb**?º ßñ#nyç‚nÚWÞŽ1À¯vXÔu%Ïéë3긖­ GŒ+y³wL§Šµªí¿ç“‰tò%ç/y.Ȫé ̣•œW°3 s°N}ʃûÚÙšlqr‹è³á£v¹í¤âC•*×<¥$IŠâðy÷|òÊxõÖªæôˆs¹rDdÕ}‡ž?‰iQ²Z" ¯ÁQ–þ n ð2X6t-ÝZyvĉ/DÞ~m·62/þ-‹äZ‘uŽoé¦Da²YèäeØaœ„Oч©ÝËûi ­‡8¹ºmŸ3-ˆsä¶QÅsX×: ψÀ¶}p³†¤ÙX_d}võM+4HÐ髃cÜ*£AôñJî}Qµäñ¸•¶ixÖº<‰dª²Æ-«£ò"zlY;õGÙ5 oŒvgkðþhøÖÞžš°ÌYu&³þ=a6ä‘;ÅÑz˜ %r:/–ýÃñ³‚ÎaØ(÷D±‡V €O>ï¯ÝJä¦Òƒ^'þaFjwÐõ_w/jŸ×ô‰Z; )•“^ý3£¾ö]Âbܘ¢hõû«ËÊ“rî˜⶯×A\„ÿn˜}=¤’i/ ¯Þàƒ6݇Êüw4ý` R­B!Ï’}›·l+½n½€S:pàÝ°´o±VË=ä]¬…ŸCe˜S`õu›éi²•¥vÒÙàý¢œãÝêMpV¯•£­òŸqº›Žx‘/°-/Þ¸5lI¯禦  Æàa‹f@µ×“0Ö¨˜ž»:sAøÕ^¢§Â™.ìÁrÙ*ÙH6árn¸`v÷¦cá¥r$Ð%t‘"gê0o1Qµš¯Q‘ù>gOÜW´òÍ’=jExÐ×®Ò$Ý7ÊÑÜÊ1ð¹ ª<1R l?žè¤`Ü„Ä%¨¼è´z­ŒOPDŠJUv“ÜèD>JQNåæ*Q¬oÿ[í³óǨv‘ÝÿLï÷„Ÿx.‰ßÔ Ý|ñN6ô¼ïrø{“ÈÜK,¤DFø•{l´S„{"©PT§–nÕS`-3å0ã±þ®oÃUR5\eóíyë{³ è‰EÐÂ9Å¢?Þ£Š³ß›£WˆöþÒg4€·xÇøéÐr‡æ±%Škƒ/()a̓5Ÿ‹¬å?ãÅÛ¨=ÅIzðùÃÎ8C¬˜­åˆ¥².ÀgºMS*‡Á ®âä,û‘\1É•{øq¥ÀŬ¯–k§.”ojÒkÎR‡˜®2'ÒP ñ©¤ê-óÞ,‡/ ϦÉÅä!˜‹+DÐ\`ÏY |aXi8!0ùGgŒ®Åz O4z´JÝF6õtø%,«:bªpÍ\¹3¤«ó}л¾gîŃ'Ï1xo§“ 7[ýeê«LïˆÅD"gãÜt¸û·±`û¼¿Þ{•%ݺ½¯ãÙNB\%—jQ™½ñ‡¡Áyéhá«ûí@‰Þ–!¨%äüÄÒPú"ãò›·W#«ÉiàYa®EÃ&J^¦Rä=÷Åù¥“;í~[fªÁ%ÍŸ = +( ­ƒãS]>µfk@Ìñ5-ç?Í&«9} €b©CcWp Á¨Ê×å@1¾­ÁPŽÍ쨜ÀP·®0›PL‰¹ŸF bÙ’~ª ?C'FwŽCÞêEz8Å=•N´ÞòÕ×>GýjrÛ˜†>r(å/pƒ+†ŽLˬꤜy˜FNŸº1 .•V7€ƒXFI™ˆÏoy IÕà9´=È´ ¢,Bh®s‹·ðËõµÀ9´ÖÇ8ŸCÉœ€6þ)ÉcC{¡dëà©„œ’Yc,Ò—ùmUÌݶ©¼“=4äj©)6yµ¹˜9xÙM!`H™8.4¥”gG°’‰;$ZK Gá4Ñ—VÑ4¬üàŸü2-#HÓ¥?sÈ¿Z§(£HÀAtI}u…‚™c/"x> ³v½ ¦JÞ!Þ.݇¥¾ ôPÍàmø7uEÿÊ"ÆõÚoai_;1Ù§Œœ£t‡Sú`ÿÛ7ŠŽÌ{,GùÍr7kìô 9Ù}ªT‘Á»©ã­ßr;ßÝïï·¨P7ñ`ê=u¼ˆÔTd6(’E;ÓË<™¼FýDÆÿ?R JáÝ´ö„cÒ¾5c`û%}³Q3º«¶2JÉ#ÔôÝr à [g§¾ý«Æè”÷¦¼Û¨Õ™™e¸ï8Ü.I(¦ˆ VôùÐsIQÆ3ùœDDféMbó²¥Y/5 6¤$ÿšlqšƒº®5Œ Ç™·¸?潩˲Æ R·…¯mR†VºK¨/©k«ðªF{´=¨ì€ãŒ ËéPIc…âöH/‘¶&'{ëêÀº`tÄš 'êì6*NŸFؼ2'œ@â=¿ö ¨zx‰m¹d¡ouÅ¡NªYådrÐò¹åï‚àq ÿ{?ZD«§_‡wv'ìfô±`¥ÍŽ¾ÿ©ÂB!‰>íAT_ó´Œúí‘…«%ì/Õ 2OT…õãVþ«Š±¬?4dú°­¦D˜ÎªÂW7MûcÁ.ÛmE>é-ÚMd1<Ê2&þÿŸ) O–ꢖÐÁƒ:‚¯VZCYß‘P´|ùòRàŠ3ýTÈ«m…š¶¿2ö½™Ë:o²KãÓ¾Ójß¾í¾QVˆ-…ÑXD}e™‡¹/Ø'CZ€J“d°øã[gw-¹?¶-2„Þñ²Æ ¹ *„3’‘þ PºP gŸûÅ‹ò}ÆP± ,àhÀÝ"é†e¿Í”®ŽÉ‡T„*ßF·ß¹“®›åw#hý]@©&*þà›@{l aâ´ ‘µÙü½}ƒ¨Q)úwÍ»müB_\TfZ~õN¡°À5™,ßTa¯Ã>.òµE)—w¸n†7*«ÙHÊ,ŒØÖ¨g7B[þÁ;S¥ f€[M|»}k˜õi$ýŽX9“ăê‘vŒÎ.û¶‰ö¬¾¶ß"§û½5IRj0}C¸¼vŠ6ÒÆæÇsôc5ßV½Óe 7¨êBkÑŠí‡øúímrå\3#m'iãÿp~yWèçKçÔû;—×60r: h`*_&‡Y|'pMÈÌ.IÅdb_"rÁŒñ4AWŒúˆ6F:é[§/W‰›Èéx$AP1CÐS¦“µyäÒæ;[èðøìÛÍή|*vÆ!NvÿçLÎñðÒ°ðža†ü’)„OÖ©Äß Â9ÃÊåÖ¼†ía®¡âÓ™ˆË)òdPH[1‚²„/'øuWs…ϧŒÝ¾ì*Oxƒ7úü`jûjò“M¾’ö < †‹~‘Âó?ðÔúYÈГf¶K!猞NìØÀóîÎ(¶ÉŲ]R4»,1-œ§h0ŠpÙJP¥^¡å$Ï V¯¶õ89Gï õÖ-”~EKÆÛQÖêåÚœºŒW‰~ƒðhU3;òÂgltÉâ÷ ` ¶êïÏCÜ+…ÌØ®%­òØ §I¿žsnh"¦¬·Ò%U‡â(œï‰ÿtñ@ÙŸBÓÄ6ŒùýÕ²&ÄîbFêCÀÃÉY‚w¦hfÅÿ5¢ñË/ƒÈJÇõií“êFŸ‰i}Ñ°^Õ`5H«÷wŒ&hÿåHù‡¤šÓ’ÁU†ÉÓBЛä=¿¾¤&Lq”o]ñeó–Ùæ–Eð¯}Üþ£¤ëÀ{1CçwX¨bß.wù[búZÌ—´Ä˜O¡Z>ÂËÄWN*½A’±ö»)àf72Á‚MÏr2¤,'6S²š9`#VÅl,nVbÛ‚äÂÜz‰˜¤ šƒàäd¬Æ6r[AbžÒóÔ°8s«¬å:ŒóäQÚÍ+£ï›*.Ãpãëܾ9Ÿ'ôvîJ¥¨ Z =!?飯¬&€Îï9:Ü€ 'Hh? Ó€YLÖ·,‹ÕaŽ -âÚ5Œ-—Æþí°Ê/߶ȉ¡¥îÁ¤§QÁl‡Ú­—ª•eˆH×Oõ(…®ÌÌ•›=¦n¿¿Eg¹ÓåYZZÎ9׃®<šú¿{5bCמs,:ü85” ‡ŠNèå‰ÖÎsàÿüSýâäCJ:,ݷЪ7m¥—ÓZ4Yüy&ôDËàB>¢  À{HJ4£r“s¨s¢åË æîŒÌû»2fFÇŠX/ÀB~»(AÌ0ôDž±°R[Zñ!ƒ Â收±Á­l~ZWÕ02ñЮ¥‰Ÿ}›9r¿Œ£BEÇn‡ =¡V gŒU]ƒOŒÌÄ+—‰šT}™€ôsœçI \*}¥Ïô©¹çKäjs&±¬Ê·Æ0Ü$}ñå$\q-~ìadÓk3{ͽáéD÷NÈôøÈÈ©½…ÖGž–_YÛä›ü—\Q„$ˆõRð!7§´Ã€»˜V”(ûÞ‹¥lë… -é°éA|È`ŠTö¯vl²ú•3 ÿË¿´YgBh*ïïGòjÌîÀÿ#—•}ÑNî1Ãtoéo$*©‘Üø›n+ÂÀ4æ‘…&ài°O¯ê´ÆÂ- 8÷W¯3-c¼¿=©M­)£!æ%‘x^sdé¹PóPU/äÊ1G {nª”x?#W\c‘ƒC¶'©ƒ•½TN(58ŽHAµ1K1Ýr )|r·ÝQ—<Àè&ÿ"ä¬rÔ–zP×=¢¤P-¤fT?¾ÏX²0P^à¢x\‰ÜÏ(zﵟ†/ZX;€XG¢„ voPÜ[ ¡íé´Aþ³¨æH_A»rð¨‡MeD3Íñ­ñÚ€x0&qEÄÏ,JR·%­5@+0¸èZõ ‰K2[äÔÓÉ|5ôó«Ä=<•Åöš<þÚŸ –?ZÏÕ úÏöi+ÓM• ÝñW5ž÷ËéP3Nt0ÛäÇÎ6/$såD¥º‰j³èÇd ´”^Dÿü–No8–Ij ˆåÙkMÕ8%ÜlÚ8;®ü6Í3x[ò¤ö®Ž¬Ô1ì® ¤ïék‡®,¹êó@ƒýº·§'ÇÏäôJ»(“§©¶ÜÔ×*U¢öêOàÕAÛ¸R¢À5¿ªU"Ö\pÆéï³{ÍTù.ÕòiOˆ:+üˆý(qòÚÓ”ÛykêÃi |9Á?L¦#Tû"`ÃÃr¶”Ù/¾xƒ¬·sŸ|yþÇ"b¸f9š˜%bFÉ´Ç×l,¹úf{›‚Û Æïä‰uÄNá%'™–#ÐÄí¢[¬E¦×?ölÜ#˜šµÜès+ÃOZ6¨„=Ò£A[»örÓê ušáu´}Ù‹&¯ÑÆÙCáŠ2®£ŒÅòöo†z@1ÃÒ¹(Zá?i¼º þWƒÒ@„œ9ç3%­Ä†„qªà1¾LL‚àËrHÜü†ùGU¼¼‚¯ µ…¼‘>'ãຈûVÇ~*œFÝÚ7ã]Ö=Í0cG«À Ù£nü¸Ò¾Õ&O˜˜e]îÏ:ƒ´ð0ÛýÚè.×4ÿùüèËNy$`?)G—ǯsÑYtS,ï@eŽe(•°–¹àÚ]ü2BGgÈYšŠP‘ñí´ˆÕ°75»n~?7£0<ÌRö˜í2¼°œgè5Òá¬9så¹^¯ > Dlè3O~¦ÛÃOyL §åÀCP?¥÷ˆºš¦ÖÇ°7÷ûÞæì& e@žô´÷Û߇7Ï’Ý]ð‚gáI¡ƒ¹%;ù`)ž–º.™ÝZñC1ÍâŽw ¾ÀÚz…f(KZ¦ŽPö(,+o ”".Fàö> ,ëY2Nj·ºË$”¦Åx>"&v/:G܈ê*ç¥Üë î²Àz6ÐvQ<¥H†„\€›Vóó´˜v/éxËæâLô]åGÊ‚Ë5Ç’ªQ¬ŸpÊá@ø÷b¤ìÇ×Èœµˆ-¡÷¦ŸБ$‚Ä‹“}¹tx»©Ž‰ × JhÙŸÑm@} èäêÜ|[Ÿ­fïcÍÿQzFòÿó2 ›´¡×:Ù7ZÙð ù-%¦pðú>ˆ†ít e2wŠsc@=”×ÀÒ@‰<¯\&ø3=‘.ÌÖ²=Ì Í‰‘¿ºB~aHš Ó•q!¥æ€Æpš,Ñb‹& ­šÕÝ£n=u fŠ5i6ü¤î™. H{䂵`©-ÁA—76†$y¥‹ŒEêlÓý³ø¬P@Ç ]“q$J2zzøŠyްŘ"iÔi"Vé•xŸCVÂm)ÿ Gq8^ðùVi)¾•/nR¢¾3ç|O~ØBTˆ¢¨/EXn·´ìu…Óa§r™e¼•À n“ƒ®W5·µÒ ­±{V*ðyj² =”r¸³á3:oú+pfÏ6EâîV¡~°:‘çÿìÍÐQ3#ËØsò,ÛùݦÑFZ)vIêî '¾'µWò“%9«ÛÙ"iÁãv…3Ý›Z„)J:T›'æ¼ Ì)‰¤Nv³Ü×¾Êóý¾óÉû5;8-`€ù¢šöGå>+ÜÜø07œ8ä°ï½»ËÒ,!ÉŽÌÉÝ÷å{ŠâëmûèÛ·t‚Ö ãr`®PAæê…´¨oô²IÙ#o9¢?ŸÂ-Bx¾x‰…óÓQG› ^+HóÎuEhPá0Á^@Hlx2 }yI‚jA!ýA&Éâ´»yè¾òSîÅ?Ú_i8«kš°w°N=°b’CVšÓæ ärsp˜ÿâG×ÿœà*`¸Ç¶Shagé¼Á¹ñÎ÷߀!æïgl÷ÁÉýtÔl ¹… Ñý3ÏÏǬŠ|Ó]LÀiߥu– “œ9œ/>(õº?¢p8¬¸²ãÿr5ÒÒ&¤4FöÏiøv¢.ÿ›ðß–EV«¯búsxÔõ—²Õ&§éN“Ç$ý ¨M2Bà†SéØÂÔ5~ßOº¸ªÍ!i #t_1—}8móÀÿ”YX:z2Z®ŸÛ ±/Ì;¢Å”¤´šE|z±¿ì,‰v@W^DöQ`+k¢„%ö£G×Sɼ½°Á ’n³š™ c6#-äT'É‚©—,Ó9—ZqµŸ@bÚe=µcÏ#"-LK®š2Ì_ždR¨°³ JÀ®C"uêpjàÜS-7ðQ\q¬H%À 1µÇ«³cÏž´j¡!¨õXð0a¢ór²]“½)KÞˆ²%âÿγß]Q‹E= bÍÅ]îl´Šá}Ng¢‚ÕKâˆD8@ß¡Yb)÷Nº EW~¾Byç/ÄõJB¬î…`Â÷a š ãv_;„¸!M‹/µÌèÓu9§q3âÔxL¯22åãV,dõïö­·¥WàD- ]5=ÈM»hªdGL¡ÄW«Q_⊚3Oþª%¨ýÀè3Žì®›¹Œ¾å›Éè׿½÷{`é1]Í…ýõ÷î<…©Hã¿ôœïèÚ(ÂÏ—\þ©< áèÛØ\–0­†¹sÿ„;[y°T&qn™ƒaÎjïŒuÿL€›¸R!Úáÿ©•©YI›AØÓtWh‚–hwV®Ø7¸ðx¸pîÛ« €Rk‘V f B$§2ljÔ5ýüLÄ4VSñß ’™´ˆVÖßîAü¬FêaEBž–3ý5¡:“.rõ,}› î¸, Çm-+óaõÂF‡µrðÍ"2Ò€æ)÷°X–»Ußc>|ŸÆXlö§¼ªgNýBÐS&O¿ð¾,ãŒn €/Aû¡L’z7Ü3V7r+±ã­lìz„\)èãUe·‡ƒ‚µµŒXôê¤N\6+b& ªr§ö€uè8ÚóÒ¾h£~³ãã#Ëé6õr·§åÓqkÏnºõm¤I[ͦm€Ø¨v­Ÿá9UàD™2¹è ¤´Qƒªù²QoÏG’ô“$öÕQ‹ñ‰}ÞÞðl',ô¨— 7€ÓU²0ÙKµ;éåµ,ú‘„w‚¦.óŠH]½´×wÛ4\†õÒ¡–jBT?AáCÚ‡¥wS}¢'úXs'<´§øeI‘‡‡¸ß6³ˆ®<Ñ2Uó)Ô‰™}nK‹Ç~·'ƒÈZÉ=x”AF†!Ù§Ë"´âñÄÿ‹™R2üfp  £—#iâîŸ{¾êé¨Oc6 µø¤ÅÕ-Ÿ}çÉLq×Ç*~jSOÖŸï_ú´³wÔÅÎʇúø#ÞÈì5±£ûøR„Z\z)š‚e•rÙ(ãߤ…ƒ>S<ÒrðÃùÛübuÏXݳFI‡¶B/Ë,pWQÝÓ¿µOÑj² $„Ô;v3ÚgÖi+(%+£&ëË%ƒ)Ý¡.Ïëܾñ´}UA›ÖZ¹  ëk˜ºãËß9Md ¾OÓí«úþ4Ì£ãÏwO;âk8Úú]œ^þ!¨’^Š#}i˜a‹á"3ë[Í½Û ‚IJzVP⮧Ý7|˜èƒÔ«ó2gSµpéºo6m–ÔÕl¬ß{äÞã0öx*/cxǽ¼¡ô?ƈ¤iç í±®5Ôfq3„J…•ðõ2öÕÞß÷¹Å«È‚ΙsÙá:LŸÖ~dHïÆ;ô )•²‰^Sû¸ZÒ&è¬ÕnòÎkYižÓ×Ri…ƒèYZ- íä ‡M¤H)(![_Çø4 `Ú`‰£„¶zÄ.Vðû½i4þ¡‡­|JWtõžt¸iží ¢û”× œoÐê°44zÛh|Ü»2êc›ºpD9ŒxŸMÔÃvØ%·H„éÕ#㶠7uä —üI5Í@/Ôø÷%Sßh;ósmW){"|¤³¹Îøla–¤Ä$Û =‘Þñó2‘À¿Ôæ(ŽØ€Î®˜¨-]ˆ½•3SÛ-…︎»¯F#9e.jŠœ‡æ‹ üþ‹Fîͪ[èVÀ Žëï¥_í·“«!!l‰7dù+Ë};˜t6!¤O"0rT}¿Æü^/4)þ ÊšúS8ê ·½´;Ü““UUæà¯ï^„ËÚÎö§n!¨È\iм÷¬¦ šyÂ)èÑÍ —¯2_»–HwòšéGÕsD–.Mé?ÀnâW]{ Mº&Øe‡suE¨dÖåM>c[èx’,QY$Ó,ç¼Í\…Ç?±õ¦NÞÿ…çžìÕ´¹Ã2…$Ôç¿ØÃ8@Úb¡Wd&{¹÷XŒ÷Ö žÑ@âÐd! Ï…­†Ç«aÂPßÆ_¡çbDb;ï ÇDŠ‰ G”»"§ÈÖó[¹ÄKy6ë…„mÀâ|&ÿtÉZ×Ʊ=¾³hÇ¿ëíÜJSuà¼RÞñšcúÃà|uüÜl@kï¢'ªÝ‹ŒHg‡Í´ Y L)ÉÎ6p`Ô÷£b‹v ZZWçšÆª©ìS?ÄE ™y„œ±<ØH é85¯¤lqZÄæ#0âQŸ]|¾ªIFe†EP“ÑE!°åξ–§G ÑáÖWãü”þ M-ß!7ïmRB¸ŸY;t€º:6‚Ƕ9îÏ6W€vܨÆC¼;çõP+Þqg¬Ï%ç'þ]y®¹®¿6pA»Rw¶iº˜Iþn¬eöX¸8Ÿ”Í÷´JQÜìòÍ:4*ÞØÆ«)º ‘(_®¸É½‰8áûÃ-íñpÝŸ¹|óÛ¼ü&uZÚr옃ƪF˜>eH)Þ6QN Càœ%}Ž±Üd¯á¯Ü%ò¥SÚ+\~CµsŠÅkvÀ½‹8vY¬.-½u”¸!ⓨ‚7ÁRS¼EêÑë³$¼@]]+qè£YºeÊTœ©¨†–ˆ$ ÙÓ•xÝuJ »‚C3C}ò›8g™ Õ:;vŨR4Y¬A^Û}6×+ˆ÷_¨#ÂÜ€1×»‚…G.4WçÜ¿w,ª¢¥h§eC(òìý"°«7ÿ;§‰•UÖ[ÓŠnºŠÐ2VØdtÝ=)E]Šà¯ï~˜ØPÈP¨X4~5ë"$dªTð> V‰ƒöKÏ|¦°_[&6Öé÷øåqF"«r3›Û®_ ^¸Ç7rCª˜¨j±¦âóJàìäÈù`Ü`¦¶¿ã},$LQ‘v-& O7ýk˜[º„4oyõS˜•çQ.»C¡X,€#›>©žž‚”ô;¾’šy»E£ B’›ïL',ß'™1NzVK³ýâCœÃÚ¥sp°«VžÊãÙ«®ÞjUûôᣳWì«Ýï©úef)_Õ: ƒ“,TSñ2'"·gà‘¬ ¹Ík !îNô×3M§Ò DžÃ-ÓTe/£.¢ô9Ï@ˆâ6ýKd“± Cz¹5öª6ªò~B°v%³Cx(ïÞ„EŽÒÓg!`šƒ?£9¨óô«ÛD˜ç™Mó* {ï 'hÜ`ÜÑ–üÆøž£'‚ß-qéßëEbˆ4­hÍÑîªÎçË" C1À´tYŸr»‹¢·k=ji¸l® \Õo„~MúÝÊ´Ípaµã-Óz£´1Û7ƒ{#K`Yt¬è—’NC@‹Ðè"x›¬ÖkÀ‡½%}´FŽê«€‰ô½KxA•qȳÉ6rijÞ ¨š.Š Õ8a ÔZêóáÍBnywïXd­&‰{<‡°ÑúØOçQN[QB;j»021Ê[ë9ܽàö¿x9ÇC£=ßÁ62Zy¾ŠÖ£ó=”ý·Õ~É`q>%!h¹Í'Kÿ¾Ÿêˆ3zÏ3uDx4Õ‰ì~aS7 ç¼4^°S­=<–l ÅQñ’šþ.ÅÃÓ¯|@ÜØË´œÙ[[»ªS2Íšq³FŸyìl sDDu|ÞT33#z_Ó ä\•Ï}Ámhb¼¨~m©*‘P Ù— åcLúu")e*jsìÎOÚ }+PìÈm®2»GÏÑnr(Ýás×à©ÑK•˜9F«÷/a{ö€’“*ž#ÎLe»Ü׈¡H>4pvd!†è¾Ëïø¼ÖR:‚âžÃ›Ñ?Oˆ‰² :!´U¸!àçdMGo˜Å¡3ÈH ã˜;,D§™š‘ñ±ƒfã¬Ä?[U‡,uUÈEí7ìh$ßIkd´VKí¢7D¢jI\€ ±y’ômÌÜɧú…ì”~Žê ì¦Õ_À_ÇÀ·•ÕE>§–¹¨¡Ôö -pƒ—yâ]uBÒŒ—÷1ª‹ÕU;ŸÜöÎÉ”ée™•¥ÿúžŽi †'ºú¤¡DtµŠRx}¶ëý'ž  :˜œ9|߈&ÆyR> µœ£S:Lmð{4¹`ÙMAõòK¸Ç‹2?ºˆ’ûWÙßÜX¼Lþàw¬â[ñµ·tØà›.´zjþûÅ÷V;]œTûô¾wÒ´')±õ âÿD™®2sàGii·'ÚºM¡À®ßþ!“ayUŒ¶+‘—X«Ýt@-éIÅõ7”ÚÈκזNÔj„Zÿ¿“wëQßÔ,P’.êô°ÍÞ£#ùÊM,y-·{¤kÒ“õ*¡¸µ™·;ž§”²ã×¼äCªÙ K3ò«X/¡Xc\F¶ÔÉ€›4Á{šóF+î=5;9ú^ì•ßÒ4íµ°.Ö»ª`ùmfʼnHßߺ}ÆsôÔqÛw3}ߌ‘‘Å lug½Êˆ¨žþËFʨ•5üxŒÈtOãmµØ¢ Eûèsçݘ¾’Tx/èüÃvüñ€u«ÝET lóîÊ,Xì>-W6Ì ê”îžÁXÐÄÉí)M'»V’5ÙµÃh>ynÛOÚ¢";9÷¹¿aÝŠLBB"ó‘°d‹²Î4Þåq“ìoÎ Þ»#Ú~Ž¹ý&Œ¢c°o=sfCm¹d+KïºVPwéJö 3R×YýÿY&õFÔ“™“+‡s´~+<%nfœxû¸ü¢/ÀS© òz/‡›ŒÒ€èh)óråZï™IÚî4šÇ‘©/¹ËtµFï ýz¢©[RcÕf%¿tùîWlf!ã2—=0*^T™Îø>3>P Þ=ÞÎZRæbFu"í®vŠo–Ú­ˆn¦*û/®‚dq£‡9R=_ôF-'Üüûk«è \̵Ž Øò¯º;ڶȜ‚­OH1fÁ<–Øxd ¦ÅƒÆζF½Z¢2;‹üÎÄÀå!nø hâ1?ÈØ«ÔS'çØ·Úvˆð×x¸¦mi`\5“"ÙùEü/Vƒ¥ø& ~É&º_d_G%bÅå¹È‡¾˜wC¤Ó Â*¾y6n%hÄìšìúš«ÝòÄåz6ÈN…ïªa´£/½3¨ƒk¢Œ Ð’'ç°y0Cö “‡© ²ž€y«o³V…ЪýÆÃc0"wв;àäã[¹y•Gq—D ª¬u ÁÁ'QÊ=Ð¥ÿAkg·–J±)7b[ɲ'ŸÃÖ€Ê +¯Ž«­XP'å­Û±Èùðâ!¡i¦Èûç겫å‰~Âl8]^Ôíÿ@|"4J8Ó{ž(¼'TÙÉÜöÅ@õ0Í… Jºï£sߺ:ƒ¨Îû4@ñ°$ñ[¡¾Ó>©\uC×ëo3Yd ÁY§áG|Ù&;sŽfƒ¡»('ì9ÇåÌå®þIJ¤ˆŒÙ]Ðòf3µEûy1ÃÀô6k+.ƒ3ñjuXíI:I”@0~/jU0¯¨±ÏIÌrbâ˜@B&™K*-ºîœìpéí¸D…ÚÛK wéáðGñr®K¯ÞèIz0s¡{wï°?‘D8“¸ ýÄéÈ´#†£zpð,ŽWV[»#–QË6ÖÏÜÜ—›„ÑqøzTøõȆ®ÇàqVýa‘ I¿ð,LÅOG ¶GUãšr{1M²º®ùEºÖ±¶®úŒšW| ¶Ó*´z Fk»v‚FÞòw6i[X}TVÌçè úbh 3ŒFøOhÌ 2~f¬’æ}jD†Í’" ©LÝÞ1ÅK®YŠ4p ýä*bržè,Y¯<ÞÆm{.³³ Ö‹è"¸úF:†äDÃ6ç@Ü•xR’²b•OÉŸ07z†tÊ·ä†.€Ãhðí= Š¦Ÿ¦ûÑdþ¹™ÿN,¦Vgº9KI©²G2_© 5€„¬?%z%‹< çz¡·çÑÙÄ“ÀåÙS}wi+ÅßÒƒÎâ†ÀNŸÙ" ±¾¢7|Ë ±SµFضûx4ƒáA1ÚE 0Gó©ÐDí°Ó/É,ô©‚]“¿!f‰„¡ Òx@Ó?¡5ô¾h·ÌƒŒ4à6Ù ‰ªtWn²èÉÉ.{!8µÇNúG ïSg‡ëvtyå´q󌖋pgþ•'ÂüzY§é#PaÞ¿á8‚±PJË%·Wëû/]Ž$O\µà Œ6ãJuÌzÜd}6–ÀìÞ…²kÅt3’µ“‚ûÀÝ R%é?Âdöûåaùgµ«½îgÇÙžrýk3ÓˆBa×¹J—\&ŠýCxª—š4jѹDÒââM<O\_Õ²I-WÿZ[Ìn¶ ÖT¢¥ÐlŒlAW;/ž!04¼‚ëç‡ qÙ ¯oÂ̙ɼê§ÊíÒRºÃìÿ!r¢šµDwá0ïÔDfwåTÂ@è,8€Sˆ©«$T6ËŒH2'Å;Ùبyu§µsB¯IenÚKãÔ‚Iñ2HWîÐî iÓZ“‡ò*«F<¢0$mÁú’2·¬ˆriïÙ W>ô|îv{ky«ü¦a­ìj'Æ“LG ¦ –‹†pmu>bˆ$6ÎÉ€êÚPb€¶ñ£1€ L ÒAdN¿hrVàöé´1Æ)œ›î-,þ¹èê¿q_c`ÚΊ02eì% } 1cRð,n‰8¤ fË°{ÆW-;Š¢ÆÏ äW›ýØ)à$ïZwH,êR*ô[\.Ê¿»"N6’y…'ŸÁŸÚÓ^)œ¿È'6˜Èã*í¢±‹™¥l$ ,Y¹#ö»k®aLw¡,d9d!!tK"û“/œ÷ÿ,µ¼sÓ)‘.Re§“±/Íé± V»f1kÞJÕý?)snD“¿cb^ [T@uòwzut¡ ÔbYqÉ«mÑ6Clv¤Yô´§Ú·æ:a}ÏÄ)M·áí'0„ÆNçsOÛ¡G]=ej±ú4ŸœÚ]¬=u»)¬)§Êäx/è(LëŸ5Ê$𜎠k‹7kaü:™EÒ%Чy²Ü¦†Ï%FM¥¥Ñž»[éutê(„ÅË?RúµewžZ¥d(Õf*ƒo Îî÷àåq³—×?:ÄhÍYŒÕbu;åœÕ%2ÒxäŒÚÃb¦O(¬EÃ0âfÒäMF·$B?^…<ÓX·©Ó›]špu!‘ålò«¤ã½TÐÛŒ¦}Ÿ¶©CˆöécMxIfݨÄߧ«!‡ŽTøàWŒˆ3¯ãŽ9ÇNFÏ!þë%?ºbn‘²+ASWx!!*EF+¹ø.ñèH.3[örͧ‹LÐ’íÐgtÊ_˜ƒŽíÁîښݯé±m@wáó‰ Òy/ å*¢B=OºöË$ÛÀëáxÑ6ÍÃÝvhqóR¹=`óçª&„É-l9þ~-LýiX€æˆ®%‹çöYͳÖHÆXŸ‡DÀ~`¬.Ûêašà X'm·X.çøƒo', Ú™ÅÉ/^47–jÝï[DN¡UÑY¢žéÏ”·÷/ùx6ü¹× ÃG ²Î ß3UK¦ XœwùS³Ýû¾ã†;µÄîb±Ñç±]qL UÎ#Q«ô€Ú "ûòÅ° FMWåÆÇ奇à9ºD¨DèYìA2kŽñÞ>ÌïY[‡}CÓc \ݤ9?ž÷¥ˆž/uOŸRƒq¾¾Ÿá7 }L}øérå“…lµoàà-Ø„«Y :ZGØèX0w&ž¦b0©Åü­Ë±EÌ%o¼¼ó˜ ‰ö}úPWˆC½âû¸¯Â_—}ÇSwÊ0²ÚB! [cä™ b»N¢ÅQqý79Ú~Ñs†ü @£"e蟊_¾=U6ŒäÚßyª…:÷†ÏÞ—™„ý ᜇÑ?Æ„é` a–}Ì«=¶­œŠ×DÎî%šÓ ÚÕQFÈêz¨Â6"• ñdîg2jÇ+² «u’ýÙËh±ÂëD"ƒ¹°ªtØâtáÛ7]í:¢I&S8”šv¨· äkpïW+»'Gì*´(ízàlœ¸å*(!nö•Í¥«fj!ufÞ=¾z6ª¶2¼À¾{FÄ:·VààŠ¨XCÉ¢þ‘ñKï›5ñïR,‡Í¡+ÈØy‚tS°يؕt=Jº}®£ÊÄ_R‰ÊZüEïG¾ÊZ*7ñÎùJ—C‰Ó lÙOd²K7…‡ ¶|&êr'¡áËaº{Çùû˼2º&ö'w;~Rr ü8më9¤=Ÿd¢Ô0rXĽéÂ2ã²AÄ¢€’hJ³šˆÌ› ,RÓý$RæM ‡kS¢%°:ûÙ9`gQ]š?jHmQ<~³ÞNÜŽø"Ò­‚+±3ˆSn`©o}o>&Q#Y)%c*À1¥|‹¦…¼éŸéƒd_ÁT•b)Ęx™‚ïï«IÈ—¨ cz…Á¹4Öüç¶n±i>Õ¼ù+‚ ›”UuœÊ°V]W`ŸõÏ +azUïB‹ ð–ýƒr-4 ü#Û§òÀž'ô™"jŒE`—y¶…CÊÉ«0r>ee§õ¬¿wQ%w'ª?ÃS+f  Æ,to‰±nG ‰Gl'nø·~E‘i™Ó8®cýáŸbvõé%L>La/„2ªýúo¡­\bùËå¸÷“óê(²¯bžUâÇ<ðº7/fí_õëÀ‡p‡é lk…ŸÜ¶¿lCl€ÌâVffÑ ˆ SöŒ¼àb¯fèXYD.ƒä¢GÅEŠ€«¤*Eðr;¯ …û{„qÒC¥ÍZØ$˜g$©Ó žjŒ¤Ušûþ«3€ÿÃ.…ÆSªŒ·‡YFè¿ß,“ZS‡z×77S…ÝÎñƒX$ù5c™¬Q¡M&J¡¾€ˆ”‘ µ{°…Ù€ËrjQ^O¹«Ð핺¼ 5>ñ0¿4F¨çˆEŒ )hBƒZ¹¬Y»]ëhùIÏvšK‡{©@Ÿ¾}*(;9oWœÌÀ!GÈŽúÞPÁÈ܃`ŒŠìz­æLw‚rU,p%Ôã\JlG,•Á›`Å/þà}èJŽœW åa{æV! „˜,»±ô‚M 1ÍGÊ33Lb{?L^×2#AÏÀ£›U¸Ý X¥?}Žu–e¡ ªœ ?öú%òSJ“–B€O³©#5Ô®Eú„P²ÅTö··Í¼hR—èOvEöž—GCub:Mz^Œ„hž—ÃññëΚ'r‘ëÿ7^U~I-eŸÀT³ 2÷ÿÌ_nT@9š—[Pp¯qØþ¢âäM³öŸXLõââ—íLZ¿+*yçózñŠ j~wÂ…–. ×W"GÖ€Ž%°M!À|°gª£‘·TøŠx¨XþbÇéP-­p*g Qh£@~n¿¥w’ŽïBiûîTh‰…ùC¹ ð¦_»\åZ ¼Öá@÷Šqñ+ ®aÜš‘Föß<"LÔð¡~ ¢÷2­Á ÍõJOKó ÷vgYOÜVhP§ëíç°2de‹_Ýdi/ÝEˆ~q™`iÑ[묞mcª€¥yF0I>HÄ㬰 E•‰M –¦öZ‘`³Ìaü]Ál7b"¹ÍuEg ¤…¦âÝ;ÎùY] 7©áÚ”w¥QÑȺÑÒÕŠ4ˆb4-?c×›œ¹°Æ qêJ˜:k¹We‰¡í”›älÓð ;MÉ\÷žgšy»%3SÇÀ-ÁtÌ®­^»…f@,l¾ @4è‹DÖþJ ¡„ÎEP¶Wäê»éò<ÆIÇÏþ¥Ÿáš”]ÛDkããÞ=-åPä©gªvhG·›*û‰ †ÅÅÆ u æI¢ú[6Kì9ʆúö»´Çu¨l!À+ÊlmI¸š(›×ÏÀµ("".â6ÕLÎXÍxRÓ´U«+Àdó ÛŸ8ñ£ºN ‰ÙtVå;Ò¢?œ'ÿÌlb Ÿ¢dø/~*jð„fæŒ_Ã{Õ{7EÊÄyõ7›@òs“'z—œ™† f9³=É”¾¤5È ãiÂÀj¥Ý<Ñ'E¶  lDm¤_=3’é75¯å1T#s¤ññ¥p’Ý¡÷þ½j¯š/Äy—5°ÒÀ²äÚ‹£Orj4O˜MEÅׂ¸AaG#FŒi•#z™ÌÁšÔ™x모i¢Ã„ÕLî½:×ââ“ÅèÄ!žÕL½+\døý;€?ãð\hˆ££û0PÇ’›† ”•–ªæ)\Šéyy|0ཅœðð£açè—Üjû^©¦Tiã!`úaœ+Î…Ý/©|t^bYÇšÎCv,œÂ.)œI'Ÿ\ª%æ ïrDGÔf¶"÷P”XBŽïšÌ(™¿ìÏ'៤9·B—P„¸íºÀâC‹ª%ŸÍÔ O"öôO¬?Œ³å¹‚ø7s| $½Ê”HBâç¾’1°w«!§Æ¡h ƪ,÷ØÝópT0uÓJ”ð×-®? yÑãil\)ÉÝçÀNÙʼnʪÿ<Ìg~ÿà µZ«`)‚rtÏèÁ‡'ÚT’€Õ9Лâ Á-[¿ìn[äQÛPQhú*hrAj uG Z«oÓöÐÎ:»‡—wê—É»’tbÞßýÎÖm“g{²E®ÀuF&þoUå´Ò¿”vå`ŲÒó[wþ ^è ÞàjG4’D¯n›c4l>oL FQuå3;B0u(²!5·÷5œoCZÍlOÔËcô‡R€ùú£úyôSÜ6`ÕÏÞ{].ª~C5:];w}Vö;˜‡ãÍ ½&!r‰­ÔüJÕ³D¹Û–ÊçnüR äêFF h¾ç"ñõºCt³5žPqÞ³q¼íïç`a”ì'UW½b«]þ©nÕðŠa½1ª*#ó¼¥a­ÿ|[G˜ùÓÚc.Î~1ç™;6Õ?N°äiá5…þ…¾Uhië!ª7‘$<7Wy(>Á9S˜.€]d»Cá6³"Ôw ˜Ó©Ð5E¿eºd!ÏÁe×ў݂Ýö¢ú‚q¯D© \áÃ`ÑUû*Y¸@@úÙûôÌOÂd›ü´¡ÛÈJ†!» üIìÒ’¾Â¬Q‚nÊÐí"ÔJ^ç³P/V ß±sô¹Í„ûÌ4©h‹¤cƒsßo(*°ê»‘ èóš —]’ä‡,çõÃ,)Ô~ Ê£Ù]>5êe†ÂpwÜ'WN„3*>!€Þ¸û²?ý+Àµ^Þ‚.>˜Qyÿܤû#ôê½ù₰ꆩ¬7û»&ª,Ãʱ©Ú;—^¾”¼ˆb™øh{CŠŒU‹WÄÐ\Z…‹Š±”ž !) `2ök¥âN•ÄâÛÁ* !шTë¼j1±[ÒÈìý];2r~±‹R'Ò¾œ] KÊ4äX¬dÿ¨ÂWä8“·"É—Ÿ²S48|£‡6²K…ž7yós õö3Ëßn ÷¡®µ–Ðjdz{ ¾IÙr½¨}ÑM—ŒÝX‡úLUûíUu\S¾Ã†ÙŸ×:§ÀÔF`ži–"9çu¤WV! S0… †œS—†ùSïµ’l¬-¤S|=bZÜf±sqzN•G) ½Ãýœ¤‹—ÕË:õBÑŽ4—þÃHþ¼>L&Åw¸H’–€~(Ê Å¨ÄR}EóŽûˆ!&Ë¿u¼K~»ÊÕºZB—횆áÖ-%+½Àt˜Ï»‹Ç7JÌ0­v‚AcÉï¿YbXŸÏI•žlÀ‘Íf{ÄÉEµ›Ý`NZyç*¯|ådSH¶Û•ðôBŒ´#tæT!±2}æäžFf½êñ>›­,–Mü(£ãS:…2ðUŠ±=a!‚Ȇ(lg¨%îýL—?£õ]£ùñ#üI„A[#¼lrùGb*ÝŠ¦ »ƒ¨©N[êµ€šü*™®ë¼Ý—…7‹ä*dðm Ê¦¬dô¦‚…|ˆC^2™oCó±x~ÖRTêŒÚïz^`WYšÝàRòÊótœÀ@pWñƒ²á®yH²ÑA%9®ØéÐÒ¬â¶C#`‹}E˜1`æ™M×&^Y3HÇϲºÒŠ÷9¿;M„+‚K~É—!Þ’Û0O‰ïTú šœ°ûŸ»›Ž*ì˪f&‘A',ðpíe즤WÞ›ÐH Šø`iªÝmÝv®‚ˆØEG /d~nôÙÂ¥د1Ó¾uWùâ¤4Mü(Qœó5£_R²©³Ç>Mh¡C{Óí´d{Í“AÞ1 &®>m~ y'oa¸S/=«Šzæ”Ê1_öª‘ækJ§t„ „·âqpÑêB¬éî°7•!/™ïj™Ì…´ßKåµnÈ.(ö¿‡5³Ò)HžeµL²vÐŒRÐ%§ ¨D÷ncU Ú³Øõ“ŽÁÐ…˜‹Q-¼›tš|ˆ—q“µqÍõP™ÐD†ÎHBEm Ëa­;1Ühze¨–Bÿ¹{|Öws²’)®Ò×NèDååVc…k î Q¦:Ž³ëçöŒ…?{L87žú½\¹¶e]d¹‰¾6v¯™xJ•wçDˆN¨ÉѼsø^m( ì)زz5üRªÔ©jÑÚØyžÿ_z85:¡1× pÿýÓ“óñàáÿ%®“6«mÖ"ã² ø5¿`± %‡ib%Y„&ØçóAÉTj.ˆZ <ãJ4P­ÃV†'Vh¨!sxµ„ 0._xHí±aáB-“óJã…ÎòÄoþ‡|aä“(ßUù°ÂW&A‘ïVôÁz¼g„ paÓVX±eÔpáÉÎ!U›QhLQîðÔÆ\ºä©œíòˆ5ÂF~Œú?dþå×HA;p”«2_÷qö¦E˜Ò-ekæõ "`?™9Nót9¤»§Ïç­$)Óì\ƒäóàö<©öM8˜PýÓsÍ¥ uþO·j™LƒÞÃ×ÃùyÖ‡¥ò!¹Åä€Õr~Õ¯ªéJ:àVþã¨ßPXš*oÔ¢À7­£·g¢rÓ4û˜g÷O±}§^èÑsÕ•"âÍYäµ9š¡º"ÓRj¨·ÊÄ\4 {êvü_ëÊØÄ¿ ¥æ=A"ÛÈvóÝ·†ŒŸÉ>‡n<ÿ| ž&7ߧ<ÉmŒ…@pcEikƒQý°…S‡ðÛ÷‡‚¢œñv ƘmÚñµJ¤È§0CH‚¡‡­åô¥L¨*H²#ðýÁ“SŒ”H¾_¶±v;œÊêØó³ïéÿS-úli£ÑàL¶ ¢eãýñ½Îå° Ä¡™ê@¢ç¤Ù] U5Û톯^F‡{~¤§×çg¶°ÓâCN›K¾ žÆ‘/MüšÁWIÈ@RãÊm6-«²?æÈQV4ñuªS73q!7Œ‡j•¿ðj›Š^á†çX¯úBà‰S(Up“¼WpšHúk}™#› jö"I½UœÁàÖð}ªí€î›¸*Ï,]ȇ*$€»«5482íìÑíÑÚ*7ãpwB*{b&ø¤î|۲ɭ™b$ðPr”Q»T0‘L$8 AÑÕ8ÛÉ|Wà$êŒ^Ô"Ùê ®ýa§$z¹e¯ÁÄe:¼–Ö«.â7i²§û˃sŠ ÒȾYFHR{0ÃÃfˆµ(|ñØ™<ø|ï,²þep?[ªä³ µÎó_3X<¥Ô£±Ê/Û¹p¡ ¦"»>°GƒðÞ2„ý¢} ¿†ø]'”PAWe ¨ÎYñƒé<00v¥ "—á>¬”ð•ÈÄH«‘m²ò̹˜ñÏ<óÚÞûA¸:?KgàñÖÀqGþ·±Ø·ýÏÞN°}²‚~Z²ú "®ü^%•ÌÒÆÛj©n†§<¦ùj\á8òÑÁZ‡X$B*'õ‹=òë¢`A«‚™s>‘ͯ)±SƸ⽲öô†ÜöÔpJ¥ÞÍ2þèOºžz2|9yD¸ºistêˆP?Oä\5WΕ{~ E‹§ÖÄÜÇ°‰U¥Z’Ó0óíš‚åítýúàÓûõ[©àtç$uØ¡‘4wþñZ¢6®DÑOÃôÃÛ® S`piY,#-ö!NåfeÀ䇆î$…¡ãC èEkpíKà‰ËnâÅ'b _¢"»Cì÷‡“ë·TÕ­áK _'ñ—¡kÞ…—&eßý“7M«á¶OÚ"|+)¢ýQ|rJ${ª²´=ô}dàcð¦kYb-AÛˆ=¸ìÅWƒþBÀ#†óÖì¿D5>`‡rŒ_„Ñ9WUu ¢[E\>ŒӉeK#ɘµ’?€,Ãyí„Ó¹h`Q.é<ÁG…~S5E¥<ÄÖy ’ôPÔ¢;?ÿÈëú’¹¿T˜…§°ž°Â0&WÊ­’š<ÑXÀ2 ©ï\^Äø¾Wñ…^Ø!½è‡¥ä-}Çûsî'Év'îBïAõ2Q¡òò¡¼È™±cÎBÅÝLjnð!Sá”ËQ=èc$]‹¼gÉ ¸‘¹á^¹öˆøàË?/`ŽqÐ3šÉí¸1œºÍ¢ºÊµ†‰µãØïÀµ[·kÒ솆ï‚ï)ÞKUÁ)»­¡X¶~tV`ï—*Ïî–àºØW\ôH~Y5«xÑêx¨§ýŠÝ‘X(Ñ ?:ÿSJ™ücN“})M _írŠœð/Ó»aé˜ãM:'Øðq?‘É)¿ézÈM (£É/×-\l×q»þÐß ¿›¸`ë {rUW8!®mñNB.;º䮓O«Ú*3¬¸çõŽÃi÷’Nó]ƒÓÇÑ_aïé`OÞ+ekž­qTFKÞ¬…æJ¨J ÍðÏÙÛ”sËNï$2ÿíèªûž£OÙþ0±<6 E*±ØÃ=Úaâ87 b¼V×’&Í_(ËÒ:³À¾‘‡Ášn«JqrtƦÍÐR'¡9¾ª©³é%Î µdǧ Y­UX%ã#§’küÖMäçâv"WWYýW«„Z°×Ù#¼G£d¼8¬^Ö…f>¦—lJl]˜Pö³bÐôÖj,0Q#Ô$i--§1$*óÁÐ.?Û"X>`^ø-5¥±Öùb~ç-%jõ–®:rmõqÊkOÄ…Lgm–R©{¾ñ!G¹F¦nà^zýv^eá¾Où“¬’|Ú e[ôãé€jjÚ~{BIÑŒ[6ç{hÕTŒ”¢ÅîiþzVª»æÊJÁô—ŽNŸŒòUe.;U÷¸x*/nó»Pv«¶‚UrhhŽcT©Í:ÑeåœØmYJ8pkÚ[Nr‚[´žÝŽÚóU~ÕÚ:kb%H®toHÅ/`]«Iç0¬À™¯‰g»ýzŽ4XñÞÕ S»`¥ç!ïBm%<­ÿÓQ‹qQ|/ƒZ*"!ºu«ù©¡°4ýCÂê iªV§2©fµdÓJl©çl’Jæ×6¬¢rð^*¯)E©\6³žÂÿE¹g×;Ý„e+‡ÙÊEqT0"¥SÒ ”ØþEób¡óöÞ lcÐx| Ø$‰’ä"8‚ŸJ ¿u%^± ’\b0¼RÉBÉ|Õ_ÿñyìÞ~Ñ #t}úÎm9<¯xY~uÂ4φtÖôIƒZ,»S}¼Î¨ÎºµS£µ×°Å}šfnÿ‡U 5ó=ºäÂРdááÕi¡äXs®†dv!¨ \-exÈ«^|So‘=þò¦Œü‚ò‡P&’ ”Ç !J½‚æŸ W:û.[ M˜Ó/Á"çL;‡ .r·‰aH‰ Ê“l¡¡V©]a/ΠŒ QTÎxûXv°£V'oAù»ŒVo®š‚µ, Àw£«Ë5ÎÆq7K¨ù7qÂnn}^ndêa2kE[ŠÈù;QYìíF9Œ¸WÇg{—Þ$anÍAç£")œuJÖU\ä8:ª ñ¾~uˆ$ Ÿ>)YåûWñöÞ¾ÃKÑvˆÞ[1~OÞbŽP8s͵ÁÏÞS}¸vdTWUôcyñÔgý©qð3ŽaÖ¾¿ó}„œµ=fµÞbË9ùœ|Çc/訿\9î ¸”Ž8ßÐkÞÉi?^Ê)¢`|1„ŽLóè,+JçÄ›”ÿ¼ ]Û×ÏŒ!]À¿ïQk7êT2á‘O?/›Á¹ çdYࢠië#¨âú¥Ív/Œ "y(kVÀCa´vøwÈÖˆ‘cW4êœiëúnª0¯N}ƒY•[˜Ä¬šb™~PÒ² sŽåËûV4å ó§7?Å*¡,ÆtàÔ0vÅ»‚Ѐ‚û[£0ÎQ·»i`ˆÆg“j½÷&„þa,×s_Aª؉FìßT×,!i5×`‡YBóÐ^zLĔܹ:È £Ad`ͬðt3.„¡~¬èQ9W¥Í•b1Y»y¯E]`˜Í^*~awÀB ˆr3“lþÅt9ήA+æV™œ•üȤ]kÔÐœ3!–+"¸(¼zÎ6zú,J{©Ÿæ³œÁójð7xE¬rÏG³:0矉ûa¬‰ÕúýsþÖwgéýœ´Ï+Öú€!Í¿9Lª?n !ÛùL@®…RÛ–D“ïÅ3ÿ“.ø¨ƒÒ—¹˜|¢bùOªûõtŸ>*KœX±"#¦ {ý¿u¦,Ëýä¶_@v’£‹n–™.ÁÈ0$ØÖh»êCè]à,B{6¦«ªB>àèzL¸Ær™7{cGÓUUÐ =ËÉá,M`YQãcq+«f@„ÍÛ™ÌØ–z<’_F&¸ÚÆd 숉j–ò µ wžJ.ŠÏ¶©x xoCš$DeµêÐìNÜÃͽŒ7ï«2cZ$n(€ùéǤ³‚x©â$–ºytZ5tÔJÜgbŸàJÑÿè‹ ¤=·ÕÁ ÛA§J6õÅžçüá" 2jäùÛ-w¯þç¹ÿÆSÀúÖJ¯cò€s½Ï‡2+øR;tï½¼ÇꟄ#R’D~ |T ýÄàçÿiVϤÔÙ’¢,SV ©S¼ö DbÆÅÕÈ`mY7^Éûk¨¤–O?w£l¾èÀ \½½‚®ôÒöVkCàÉe 0ÿ†ò=à[ª^Fd¿n‘q³…C#Güg5iÛ‰vg:ötÞÿK䤵/?Žùã)„"ÇJ½ÇJÔ³çÍÍzƒØG2±9Ê°.ßqº‚6¹„nr$‰’D3I€ðV´‘ƒa5â°Œ¶ð& ãîÊÅÔ`ÛP>S6´› ¢¸ãF¸mså¿°âJµ_Ö Š*q „=Nãaá}éà z–=»¸^snZDzìÐÛx}­Líɧ\Þªk:)vz%"™| ³–GM$£ƒ0MØî‚#¶aX¶ßZŒg*ê›Ç‡¯_Èïø–‚/-ª¯‹»¡üú†®°ÞàÁKhhrqëˆ6‚<{GŸw+·XИÈÅ ]:VÿhÎ`´âÜk«“a­Ï' 9ÐVŸI^ƒ¼ ±ÝWL4ìš+0P¸ýêà¤^Ý¡5Û?,ˆÑaÒ ¯RÛSbœo}@äm‹û@´­ID¦•$o1Ñ3‰ úðŠ>1žPÙ¬1Ý 8Å[ß;m¥ÐKPW¬_î˜A³xž¸Q©A¼#†ö‡'…Ò@l¸6W{ÒÛÆÉÎ-øìà§ø„ßkMÀ^HŽ¿/®¬w…N!ò‰P¢¬ê èDðöœzO ìf±¶ð!@Z§B‰õf† Üv˜Gˇú/þäÍMTV8¸æõ À%Ö䦟KlÛ#–§þáš\d?~6 ÕQ ‚;ÌWÚ€»˜ZSO¤¹Ëîˆö”öë͈žÁ:~€‘Ìçüe¢-X<ÁBLÿ7rœ„: ³yù@¥7¼t?K/\IG+Úi°Á+lJõDRVSþ ÆŽjêD#ä[Ÿ2‰C’XäõûÎ9iœ• qd³0¡* ¬êòdLÒÕR ›-µüö¨9NpÁ~†×Êȃöv:×d¸4³]'â’œì P«×¥ñFmºó°qÊ™u_µçMH!‹ûŽ&J±Ã>@ÃÝÄòAõ€AæmÑ8Êd+½.Ò˜É §z‰v9H¤)¿Q†ùšM¸!¢&d¥—áÍqÉüR -_5מo›A«ZÑ“{Ÿñ—EÊjV ôáËÌ^¶˜7 ÊÐì©Ôf&>®Š®¡’›®Ì0 çÒœVø–Ã0A‰ #¥8@H*fß¡w!íˆR9Oº,j7jO“ Ž¼B&;6´ÉŠ À›(‚éŤʹݰJb—æ\8çJ½ô éoêþò¢Šóü×:¯Iwµp ÅÕ­Aãðþ^®·ýgô¶R””ŒRœm,™¾–qÊÕ]Á®u:‚Â,ÙèåÊmÜXZTSbºlªd#ŸØ7(žë³èƒÑfo7:|6܆;GƉÎÅã%±lá†\çü/ÍøÖfV0g¸ƒˆe`TšõÆêþ©[(#c¯_Yäðoj´¿f/¬ÀÜl:œ äÖÚä~Ž s•â3OR#ÿ¯ø¦f+òžV^_ÓWãÐ:SÞó"k´[µeš  KKâ9J•˜2×tùÂ…bvÙ^ÏÔUšqm ¦!ÜY^JúÊæ5¹Â5ÕùçדNËõ3B2Šæƒ2eÀvmÌ:Œ–ÑtDn(ò*úˆÏc=Â3<…“{(osÿ$ŽLÅ_ˆc´4ï{“ÆH õ‰l=àæ¢(¶K§Ë8}ëx)ßÅÚ;å˜Ïà„òß ×D¼ /n ⋀̣+k@Ò(Ò ûR2™-ê÷ý+5 {›?ÀkF£ºßÙ3û¡Süœí(Ç-$°ð` ´",C` ²nyl zì_fJ BŠpÔ µþ\UÖš‡Á{ÇpÒó(uk^åý&þz6Þ³—ýŸçí°UjVçÅm‡K?ß]6j0Èzîí¨Kè0“Ãxèß7¼'}FÚÕ&FÝ|JŸT&÷eu%Såy®@ÁrøšC4Ý;{åíÉ3*€NÐ~ƒÓêJ‚:!Xpñ­?Dâ‹N»øëzúÏuÃ}¹Á~´»ÓÿJ§xû¢ÆÅüµï;šrðü؈•,R£¿Zæ¥ @ ñ )ÃèyÏ=[z¡Ÿ+ú•Âü°Ý€aŒrK(ÜàBÒĸ+¾ŒÉ†¶ö%ǶKÆÔÕ½œ¢¯'/©5–¾¿|ë¡sñ™‹#|é¼Ù9Hr¨(Yµºõ½Fón÷R è48>eÑì—‘0yÕ_7â~ü2öªUžæW,ú矹ícùIT•:Ð@®æs2ƒÙ=ªXJ³™ÉkM|—¥K2Ò u5ÙO_SÏd:ía1rc¹³ÉŠÆD“ öˆŸbÚ*{TØ6Woó'É['†cMUúaoÁ°Fß8³õDrDMQc罌âÖõI˜}ÓBó9m$°$¸‚n‹FgMæF\lºò9ºU\š¦XÉo¼¡Aº‚rz“ZäÜäYP7o§Pª©;BU=i›õþq¬…ðÅi¾ÈýÃ÷ up‡¶R”eäÐe©ÄVÞΈSxƒ_JR¨4d!Mš.r…ŸQ"I/O¾«0C—ü„aƒ½Ó‘ Ìñ,Ñvórõrì50~’Û6b-ÇL £Œb¹¼­¨‹Ÿn`Œšc-¨€Zt¬Ã„Ù±x{tN¤œ±¯7A§/žÕ¿#-ÛTÜlóœ?_yKÉáHï}Š%}“(vLUø)øÀஈñÚ½grKO„ê­.šÝLJÃä& \)¨€ö)¢ñž"—?ØNâ²ö{ ¯LH$-ñvá̧±‚ æ°õ¤ÎÂF /Â=ÑXÚ!groÀi }P÷5¶þ]SõÝÌ0`̹ðSQ°ÞÌÞîË×kÏ¢úW-ÞjyÖ†ã€÷«ú×®ÜßýSÀaïZ²?<È‹¦c"›$©œ°Œnа˜!|„ÚfÜ’Gç%Pê ±F³Réd ߟ·ƒ üLÒÃÒoð»”±OzOÛæ—ûAÁ=ëïÒpÇŒ“×F |3ï•XAFÐ}›†RJÁ[)e ‹åÇø½"ƒ õ÷19ACï1ê&´‹ŒQ.D»{ù¹„üæ¡l¦ÇÌŠS¡·kZk’™é‘mì…ÂÓŽ}ÿix7dõA(AƱ@ˆÓ´:5áJB ¯›³Å>ñ‰R¬Bû•eH”Kº 7G¡9• à.ŠÃl,\•+±½Ã0dÑ<”çk³ýžŸžÁMÛSGöíÆþÙÛ—EBz}05…Ïy_‡«Ú&$Ôãs¼W5.½7?n¿Ú‹Þ,CªM}1HÒ쳂çL¥‡°W¿Ø@¹pÀp{âx2»Û¿èÂ|6ì’íu¬Q-bÖ˜%0neçt#¢˜^øäHš?Zê‰Wzâ?ñ£ó{u@ÉnžX ‡=ùÑß–Nâ×h÷7õ,^&ö¾'gÖœ|7 Ÿ( «uã‹CŽði€÷.Ô( ¹^© §ÛS®Â‚†TÔÝêt ¶Ï^g¡{8é¸o³ìâW¯px,4ˆ‘ÃVŒ‡E÷D °:ôÍ2®~ñP¦s¯‹Ñ$M&~‘Ûûø!ÑÂ.Ü,ýÉ•—»>sÞƒ.‘Ob)¶ûÄAvÔ»÷¦É‹®Øð–<;¨…?Ô*p©;²}J€¼üe¹Âœ3séêVçsð> ­À9TR39M«M ÄÜlcè<â­úƒá0ÉØiÄj·Þä(ˆ½oóéx¿q‰écñ¢º\ÓëÌ™¼å¥”è¼[Gê¹Í‰le5\¡hó ð–Õñ·dl\ݲˆÄ̳Ãm!bP>=ŸÀaw¾°„½+EFç»ëé:òºV\™ì¥“ž‘æ@<ÅðÆ<þVbÃŽÆ\äg›£¹P0v™BÑ¢M…vÑ:äSœ(ZpR[ w¨O[Á·RžA¬› ¯TÞÙ$?â¨üxNïPBÕmx›Öʆ‡AU%˜ê±²²V[?sr9u°ÈÂ&'jýÀ‹Ê[5òKNÃð³œR·³•N®3–(üàã¡'ácŒ ¯'I×ÞXߘm[Ç(*øq•‹óm0ºäui”äDòs¾Ü½:Œ%òY¤Ÿ‡öDHÌ’«ÊûñU*ÊtŒæ§F¡—+Þ9 Ê^ ©(ùfáLçÐ"&oÁ¤Xíg*i5} ïÖ≎t^ÏØÍKÅ»‘.YáTŒñ£IV ›òýƒE:ì7ú€#xßQÅÃn\Y‡{ ù8u“½ïaãvv$=çB=N–®Gí(êw¹² ¢v€œÎ²Ç¬Ó©‡ÏšüT £Å$£ÒAžL…/jnáÆW“G¿ï;qÕò¤‘Ôwy®lR™ zß&!ÀéwᇀË!ð’µt¼yõèeuox=Øl­G³"­Ûÿî©ÿ¼La9wlÛP*a­MÌ ¸£ßÙÓõAU -ìd s‚¼±Î}\*nß(€¤ñB3\÷NGC›jŒ‡(Á*¼Ë  Ì¥åøÁÎ/ÄÓÛN¢õF·¯5ÃÕô‚;x2Ho&ª¸Òì…¹t›Z yc®PW$&È׎¡áÁS$`Þ‡O:Ô Mßcnr:äà7)¸“Éè’”ê¥sÐûÙÿ®+kCöÅ «hñœ(Šß Ä Ú‰Y${"]±Ê!züÓÆ$;G¬ o£ãª6æÐwëŒ)~Š…’†Uàëw°írB wPÚÛ~®`a‡Zµ©¿íñ¤ðif]2B¶&!Ž-·¥ÁuÙ—Ç££7u|øÍM¢\Å9—]-ª_†aõúÅ”KJ–°Ü^\þâ-6•9tõFùÁ¡²¦Ò$'®¾d.¥«r 2~$ÓE­=iþ’ @Œ¶¬\‰ªÌÂÄF¯!¨0áɇ<Ú¿ì¯|*)}d«® ŸúSçFÉÞÑýqð%4ôj‰YÅD™èšÚé3Ì™ÝcÒöÄYkª]oüŒse*dÎ:úƲÍñQ½µïz³†z_±‚Ù’?­±Ò=MËûXA!>pGŠ’O1Å‹˜GÓþèzè¼p4é¥%, ;Èj ÄCë`³Ÿªz-CÈס¸b ໩Þh°µLþþçCcxš6NTúbêé¼eÛƒ8?“˜ÔtXô¬Â Ùûºm§s  ä Zcm&b% Ö¡p!fvßhHÅ\‚(ŒÜ!¬*]~˜CØi/µ\„Ž®Ÿ½zÞÄòë¯*"¿ S"ˆ0-e8 ®ˆ¯³µâÉÀ0³bñ&ê7OdX×®rωE# ÞO°âõ6°rY~Y^w Á¥uñ!¥Õ‹ [µ÷[L°G9ä¾FŸ¡¾ØhJ‡k˜y7>ÆÉÔKÊ­CŽA³Æ¬¤Ë„·&Úº©!X—Óðš3Úta~sÞ~-‹lPœ¹&Š@–bi”{™|¸û."kË,¼*D 6êóËT Ž ­Õ2ìrß‹XàäD<ƒB¤{´6«bÙäE¥X„5{,ÿÜÛmÜ­%4ÿý**Ý…Íiˆâ+!zÖK¤â~\#v•‰³û3Ô.S¨Ü µ0w>”²òÝ„¿tnÖC·[O:§¨M¾ÂZÕâ]XQ‰¬Çn±p£äÀ \Éø½ÓŠÕFÍT r,|u—æ¦Áÿ’³üê<ª›*±mÄcG3ÿ-*mfùPE7ÎF>ÞIvÐÕEÓÊ¡i£þ6EéP3Œ…rBßõMÔóo¸ˆ.LcÙ Á“¨°òe¶´¾ƒ0Õ“Žù+DÄ·ÐW% P•še)P,ØÞ+Jí¼¤ÅÎa#V1mÒ´ ñ~1Qæ¾í h+0F€­NG@™OÍ$Mr'˜/=ù/øTr½x´°.jÍ@²]9ŸÝ» è%ÍðÄîLãÁw`Ñ&Ü‘`ª;únìôŽeqº¸jœj,öšßÀÎïÛîG…z=y0ë™q¨){µ±o¾ð08Êí¬2–#vúò2CírÄtï½ f¶6Ðè³ðõo}ãeµž™Ä—Ã/ÅŒG}>Š<åBõ¹êëvU•Œ×|ÌRÁÓ*N-ð?'ãoAp »wȦ°g?¹1·T¾ëüq”‚Ç%¥ "íÈ’&ÒÞõ@òìE@Ü©Tbw= #vÑÏË[ˆ¤ €'´òw4H7{ˆÔµ=â¼×?Ýt :¥ž° \[+hcƒA®•S îiÃwªÎ½(aýg=¶ Z±gîv‰i»#Ð^œ‹ü-¡WT•/¼Ttr|á)"\ÎÝ/ÐtBs$›Kx 莲Yrøà_Ém‹Õ[ryNÛPªÂ4uaÍEÎHL÷bߟ%ÃÉ0Ìa±v×(ø{¼ÿ†dB‘KU€ßrȶ … —<¿` O0±‹Š3H( ¦\I‚ }+ÊöNª=-ë€ØoHgCÚº£³Åè·ruñs(ý¤7+r†À @ Ã’ÓŒ£_’½Ô£«Ûâ'JLµÆ^$NeècÅ<ÚkÌXU1Tç#SL²WpU¡ ÖÒD ¤¼dêœÛ†Å*õ÷c²Ì}XÁc¹ù6!f_+ˬ<Æ%«2æbÝþßÛNáŸSb\Õž¸¼7&^;ŸÀIá_u©ïÒÏǵ0 7f ­–Í„ÇÜë¢ÿeû2* Ü-B$bÌøZ`6ì÷}Êa‰&]Pðá¨!=r¸SÕ•ž§Zåwá{gƒ¢ÆiõàLÅŒjÀx ,Ûh[5I_b«^ ŒôYAÑU„h@H&±ÄÈòùlžªXŽtö`¥µ´\¤u#Ów–Å[²[€#¿´ îÔøª¾XW9ƒ?3ÊìŸ[eŽØø”qÝ ÔACÖäÞ%o–‚³„±CžÖ0ôøº¨føÏÕïÁ•pØwY%+çâÉûRˆWå^#ïV£O^IÊtPÍ>€¥t »aÙü“ëúØr¿;Úƒ‡%Å•%æýÁŸ\ƶÓhõökÀ÷OÙ\[tp:O™Ýža+ÚNßf7ÐÝ;Ç@å/0’8ÑÚþ!Õ›¯#X›´åŽßèÁ=yEêMXWµ¹ˆÇ˜W%1¹·T;¥ oEð¼F§&†ã×îèM”T:oR#µ'Ú³ìâNÍI?øå°kªÏt´™ä:Q]ÅŽæÙäñ÷¡Õ?$ûBÉ~ÿò’9íš•Qœ¾©ïö±Þ`;Ëk&Ñ·ÆÉAÙÔ.sdpø5N>úPœ"¦¢¢Ò+\|íkOõ7?âu¶Ð ÊqŒ’çwÌ&6mÜÜÿ†Rèô£AEYæ­„+Q$`ÆìK»‡Q¥I\¸”™§[¼HÇÂLþ™=ß„¸¬ì¶X±¸HäDÐb£¿gYÐÊ^Ywì~©Z´'nN-ozÀ Ž›C+T¹ÕÞ‘qmªoòÅ¢ñ9M»÷ÊÃn"Å2?6:N©×Ò¼žp÷•x/ù‡u£ýUžÍ)ß.ܾàìPß?Q+7l|¶Xs¦‘C[Dj#ŠÌ:ŸB›y—lmèÜÑ®´Ì´²›ó*ZO;J—ëo Ù­°:& 5ŒŸ]pä²zSIéˆå,ùAü²uExÇ×C§çgC׋’S„¢SϬîÔO¾¯ÔpNhñƒÃw0¿yJÄiû»½SnUAZv‚£b,¢§û{.HÝž†EqÍ@Pò©Ápï¿ @¿StïUDBPÇ<1ØðG<±­!¢²L;Ž?…Æ÷Vêñêé fÓ/Î’3È>ïHþÃ#C°ÚO?Þá†mëúô~ž™9hd䵊?èEc'ýÜ9Э®›tJv(@ô©Ãb‚M‚Am“¼±lq_F—¦2q<½R~Ü<Z|ß÷]#qñþ1•Ê” ¹ÄC½øÓOˆizOƒHŸ¦ïiÒ>MðʯÂ3õ‰ë¬w%µ° D7M»ë¿AAý¯œŸ2||‡ñC!ØÂÔúÊvÙ9’2&FZ»£V­6ËØ•?5[mî¤g­¥N¦’šáÊEËÒÖPò´AÁ0é}U=5àÐ5Sé‹Ð#càò&;~ẈO `Üê™yjî .¦x ~¨.h][Îl'arèÝób>þNpIå5¯4¤8€Le8˜FyCeh3%!q$*¿›Ö±‰…¿£ºŠz?ž'Ž‹úES(koÎzM"¨2“J°p-ö¼Z! ðÑ\ÑËU;% ¿»jŒoá(æLÿu¹½ePüž"ܹ²‘k`S Õ|s¦çlH‘ ¹jEµ–+†Y>ÎêÄ•\aµ:眿¢_:¯#ñ)€ÛJ*†|oì".2p¹hF)xS¦Vx3 o뿯Ý7Rµàü³›pq<ÊÑ"Œz*i~vUò˜(Ô4®$.ÌÇëA©²éRÒ·å½ÒŒ×TyïƒY¥¹žã”n¢•‹¦-'“Ò£ó[Ú·'ºL<üC¯ñ˜‡¦´mçÏZnda yÅ*%šxêý 3iý^znM®OF.„Á™Ád# —DI¼ÆøW„œ«Ó@…7˜ý5Êršx§ ™‹›åöh¦©‹–¾ñ6ô;FE”ÐwÕ$sÌi©z²…±G«°ì³Aó‚© #aSÆsr§…’ÛÃÙ)6ó:Vñe:õŠý!Œ+ 3RΛ‚o !Â}çtTo›vóS2ÿ÷Ÿi[eöò”ö“š%꜋Ãè®`3ì­Ñ /†æí-ÊAÍÑ ¿-&z ”yqst2müëS¬„±¿µÒ…»Þ£¶áÖ®“•ßÞy¯é¢ÉaWfplˆONÄDé#*YG Ì0U¸¾,˜?QàѦ/åX«y[鵋ï6`äú,tS˜ô> •v”Hç¨NË(®›B¬ âÇ([d*펇èx¨¬“;J æÍ-a݃l‰jáåÌ‹5‘ß·8¼€€¦¿"¬V¸=SQ‡X.8fW#,ÝM‡RY¸KõjyÕÞ ¤†G`cµËn™eô„ºÐÕ:9Àþkea•àP‰ÒaÀÁ°¯µ|TÄæéGg™EHxüÒ“Û†*$jïEÅýª®×Ì×Ìûÿµ9èÊ+‹åà6Ì€óuÿO ‹d äšg³¤ò¯G”Z€âmpl±ŽY¦Šëa 7[ÑÊ’ØnÀ3h,ÞbsªShŒ›‘_Ù ^{U¾S€ÕªÆè›]ÓPÔŽÐKÅ]oš´U·§{þÕƬœÞe¿ ›v84¶öÖá‡ËÊN· ¾—ÎØšŒ˜o×´Ù†>Ïks^B•ЅGkØŽfz ƒÓ¡KÇã…@²°s~ DP Èq“•Ây-¤rKÚ³![¢~ ¥5ÌzŒ˜V7 ¤tá>W¼*붬cä )ê1ê]×Ñ Zëbô‹Å'EØPX¹m‰ tJ³ ØåÕÕ¿Ú&j…æ*¾¯êÅåÙN3O‰EŽ„¸åVZ燞jÍ .¢BªaÊÇ ¡ G Ö‡î_ÝEågmõ½‰•Ñ!ù½ÖÔWÔ¬9劉&²ÒÌÙ!ô{+%9ëºÓû…&F¯7îq‹ãvÈv¿ ¨ ÁSЦ/mf+¤00ä1Ïg˜yvóºovµ}¬•8^„覅€6RSQ·æ®:ç÷p!|Ý6oü`ÐÍ!ùºpÁÈíGàÁ4Ê_îxû»A¡ÀqT3š¯f4 ƒ»¢¤,ˆ §Î9æÄ$ll('µµETf›“¸?"cI4Ö˜6?c®Ìˆê¿SÐ-@ž6`}¦„ç+ýîÁÄ1ßHçZ1ùð@Ôç•çh â‚Sôˬb·kǤRsþ +ÇÓ_/óêF¤V~‘â•‚_kÔÙd[Ñ´Hð |rîŸúKhˆ?š¸~Îû{¤« §¥JÙ½ñQèÁªAóLÞ9yÏ}Ý&‹@%h¡Yo¤ÀÞ»Ä+UD—¤×÷× ÛÑ÷ÇJéUü²G/äéýJŒï¤:LX±É‚)fÙɹÈR?\c}¸õ!OiBEvI_{¡¢Ê‚Â8N*eßôçE@R&œ©4’顧•÷NÆûY¬-÷4}ÏaB¨&nAÇ­á}‚ü®Ä͆Ùz6ì÷ólù£µ¬!z“Óâa—{ñ©¢‹°´‚æayªd ¾cWÕ³âmŒ.±¾ËÇÏdç´è•†(¸Ór^±±WÆØ0U®ê‰zFú|).5€"¬”'Ô":ƒòØk6)}SæE¡á‡{÷*n:óâÊë‘Ÿd 1pÁHÈÑ©g¼üo‡Ým»àëbA-2e“fa‘l¾sg)´_F‰ Ys¸¬k»NŠfŽSœh†¸JSw³a´ÜŽÃ2ë§ .1fäkm©„·‡Ôâ^ŠSö`è”»Me0=¾J k||†XÜUÕ:"Ät‡*¦ß‹È~·@¤ GÚµC›%Î…ó$¤mR”6MMÙÁ 4+ÎnܯÊä­^\‚Ç~QªŽ6¥]ãvzÖºœ çÿ•\úš²˜Ï”Ó¯>Í*$?ÁBP´`ΈÜ4§à&8Åb¦E.š/Y³¢.¯Õ²ï*«‚ÔÒãpÜ)÷$AM~ùffØA7!E­íN‘`wS)õ£êý0¿ÎügpçÑ/2­·ã³ì¬å£EYÀy·ìá&ê‡iúªJ¬Õ`‚qî`Lõ««´fî†ä½t'Àeߧ–©²£°p§ùßX¬ÈbÕÏ襈÷¨›,Ç‹ŒˆC4½tö/ÚÁ^ì¬]4µ‘äLÕ½æχ&Ók…7t@×Ü AÜWqÐJOb©@@`çÙïhCLùw›Îm«w%ÜK¤v3·aš¯5½;Ó…ÅérëøMÕ›ÐÜ@â?ë‘~Ïïg¹go«ôgž‰Wwö +<•KïG|»(CTÈ/á©ñ–û€ä¥3bæ8ªn½G=gøþ.AL^1Ú Õù…îÖEt/Œš<ˆÇ¼·M4t»Plgù`Óš:ý½\ ²Ý„÷« ½*"8é'èëJ»ôûÓ“šÝÓâ-™³‰äyoIÉ0•côr”r)-‘¦þ½,ï&&X};F|S3ä¼~LOaЇÜïø¹=—(A à1c~* ÔUe›×bsA鞬¬pG‘–z6@Ñ>+ì×' rCx2ñ¼B'òuÕ‹~cr–¿˜wk÷‚×Uÿ¬# ƵÞ}<ÝmX³NçÖ„”ÃtZÀZ…‹Þ7D 8ŒÔÄeȼ@8Œúç&64”Ô§äÀ!ìCwMX‚»~_YÐRÅe=ÃßiaÌìYÁ$à¨É8³s(R&jóè^ôëK¡ÀD:ª«kج¡åÒ‹u®óØå 9™$;yO#ÛÏœñ€¤‡PŸé©Z£"[VüòN©\ñÖ+ÍnG~ƒ9v/ ØO§þçFFœ–3£Z+ Ô1p62¡ÆzLËŸ»a­‘&?ß«HbC^ÀÉW‹Ä`†H[@^æ ÕfÁ[+cŒW‘þÙ§V:9MÝ#{NÿS¹-‘@2Ô©€ôëY*„ê£Ù;?í¿D³€Xiî-'U[‹‹Ó]fÁÔ1mI}?ÚÍæNÂjbŠbaªçutý¸¬ï+ØoTù*àô@žÛÏÈÎ*‘8!»Ì=Cïæ0†éÒh® *¨Ï:ÌYvca$^Î ‹ÑP0J³v;¨à[´ méæÖy¡v™Éê'‘øc)ì$ÄKü‹o¤YVåLÛиHá“šüWÉËðw`Æ2¾MêÔõO÷tZwyïliÒ6ñrï!®å$:½Úƒ©•À:,ï[áÊ A`XÑ­·¾uG¥òÌ_VÅë‚Æ‹ìÚƒV‰z}è993òt%Þ¤RÓra…ªØaª×NkQEr2L›+˜¡[òüb $½N§ÔZ‚Å·€`,§Ö$püµëÕù‚' Ý¦iX£¬1"Òt=ÇOo7k;]¶f…]ÂÈÆI°H7¤lå×Ñá8”ÊìŽÍÏÇXã6>$(§3v€XáLü¦PïO~¹Æ¸ñjÆA(p”[nþbtç“\rð˜oø/á<_GJöS²Û3aÎÔˆžäÒ<¢Þ…áw˜»B:d5§ý×ïÙ>m+Ï$ÑÇí³u")-­¾QIØ@~?/>­°³ìL›àÖÂ,¹-‡Ý—YBc,&“V=¶,yüwÁ~¢9tˆÏfÖ¬œT¡ÛQçúhŸòh{S¶ÑxP€L8ÃÛä†q>6Ù§rN[´™PÃH¿–.3!Q„W GÅÈØÿ ä:çc”JL4xF#=KF(3þrAí*¿•Iu Êjæ¶h}^o¸šÇgA‹ð’-WN[žYQJÒ’£n^%€VWÖ3+2.—r–åP€€ÍŸ’µ"zi³ƒ!jmÁÿ{K–R/ Ì;‰ôøxeæ?íomDtÀÌVÔ¥:Y¼í,Ø´f6:g&n»4“·´† t9èpXHƒbr¥ÿNJ‰oŸ&#éMÚ’P·w èTÌköÔô*$ra ¶v–.¹.}Ãõ„ü¶ˆ[‹]Ê jø…å P×MˉÉFù3˵¢0j£‹Ž¾‘Þ­U5é‡v&IøÜàÄÅÌ:“/ ñ÷Óˆ¯^;„rbxuBöQ7xßya³É\H\” ù|‡~ј&ÖQI¤9\žø$Ë¥–ÙÎyKÞËÄù-ÇÉížT˜Ü#¨Mýº7ì¦ý§S ^”¡8ÝÔß"¾wRËT‹Gî¿:E¦±{Ä/XÝÏŽdË\·åR.Å9>A|lRøoIϱÞITlv‘:Âf0‰*„0¼<èrú”Ó鯞ýîiG7ËœJ*T%®š&0¨÷¢ §¾¥û.:·•ìÎçÕ„¢ð ª¼îÓ¥÷·;ÕHòþ½”ŽöÇ?.ÑÌSðGÅåÜ‹Þê…z7•E‚y("wê¯J¬ü¹10d¯÷êyQÊR”cîHœ–\h,"ðDø%# ·ýT\èŠM©rFbûe˜›°÷#œÎdòVˆt«¦‘´dÀ×€‘Ú.`°Dõf ÕäkÁȵ6†øÃü›Ç /ýïbÜÑ\1LMqc¥Bû:]•ä%"¾v¾šŽ»õŸ7+2+rcÖFQ=Ô¶,*Ö£¯@T Ø°ÄǨà‰q=Zà«rM¨õ¿ÌéáivÊ©L´vÜ›ªäEŸÒRË ´¯ãØY„®€g0#‹Ø¸zmû’¿ÞÆ&=´Ë.ûñc=Ü…þ¬ê¯/ÑÄ–ª†öFû®êØ?tò¿+ˆ½„Í94AuèHåŽ7¨Ð,¸=áV„ëÏd¹Xä.2fi¶½J"íËÑÕÉd(D0ÔÿÁÍý_ ªÐë㈣˜* ÊŒjڜͮq³g¸ø#²7aÒqÒn޾΅&´¡R½î÷³£v®ç™KÖ-¤B°¼‰×ç·E ½ Imm·îT–æ,`‘uÄ&pñ@¬¸ÐÔº*i"Ó&ßÌ9?G?¸7kê_ œSê|X·÷ ‰ ¸:0º¶Æ·Ÿ@a´^­+ÕÓ—f™±q½­c¾±ÔöÀÜ;ÿËà°%¸+ÿ• ݪf¢²¸Iñ+Àd/ïãmBmŽß´-èŽ ,6U¼vÚ;Swp:Ëdð-{î3©ÖræÎfûÉ™X‘®|ãÇUE½•™ÜÒ‰ € ÔÕY”Ø;0YZudev-182/test/PaxHeaders.12492/rule-syntax-check.py0000644000521600052160000000013111717001424020256 xustar000000000000000030 mtime=1329333012.872333342 29 atime=1332083870.51111765 30 ctime=1332097353.661438935 udev-182/test/rule-syntax-check.py0000755000521600052160000000437111717001424016671 0ustar00kaykay00000000000000#!/usr/bin/python # Simple udev rules syntax checker # # (C) 2010 Canonical Ltd. # Author: Martin Pitt # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. import re import sys if len(sys.argv) < 2: print >> sys.stderr, 'Usage: %s [...]' % sys.argv[0] sys.exit(2) no_args_tests = re.compile('(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|DRIVERS?|TAG|RESULT|TEST)\s*(?:=|!)=\s*"([^"]*)"$') args_tests = re.compile('(ATTRS?|ENV|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*"([^"]*)"$') no_args_assign = re.compile('(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|PROGRAM|RUN|LABEL|GOTO|WAIT_FOR|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*"([^"]*)"$') args_assign = re.compile('(ATTR|ENV|IMPORT){([a-zA-Z0-9/_.*%-]+)}\s*=\s*"([^"]*)"$') result = 0 buffer = '' for path in sys.argv[1:]: lineno = 0 for line in open(path): lineno += 1 # handle line continuation if line.endswith('\\\n'): buffer += line[:-2] continue else: line = buffer + line buffer = '' # filter out comments and empty lines line = line.strip() if not line or line.startswith('#'): continue for clause in line.split(','): clause = clause.strip() if not (no_args_tests.match(clause) or args_tests.match(clause) or no_args_assign.match(clause) or args_assign.match(clause)): print('Invalid line %s:%i: %s' % (path, lineno, line)) print(' clause:', clause) print() result = 1 break sys.exit(result) udev-182/test/PaxHeaders.12492/udev-test.pl0000644000521600052160000000013211731401250016611 xustar000000000000000030 mtime=1332085416.608154492 30 atime=1332085419.961154572 30 ctime=1332097353.652438935 udev-182/test/udev-test.pl0000775000521600052160000020330011731401250015216 0ustar00kaykay00000000000000#!/usr/bin/perl # udev test # # Provides automated testing of the udev binary. # The whole test is self contained in this file, except the matching sysfs tree. # Simply extend the @tests array, to add a new test variant. # # Every test is driven by its own temporary config file. # This program prepares the environment, creates the config and calls udev. # # udev parses the rules, looks at the provided sysfs and # first creates and then removes the device node. # After creation and removal the result is checked against the # expected value and the result is printed. # # Copyright (C) 2004-2011 Kay Sievers # Copyright (C) 2004 Leann Ogasawara use warnings; use strict; my $PWD = $ENV{PWD}; my $sysfs = "test/sys"; my $udev_bin = "./test-udev"; my $valgrind = 0; my $udev_bin_valgrind = "valgrind --tool=memcheck --leak-check=yes --quiet $udev_bin"; my $udev_root = "udev-root"; my $udev_conf = "udev-test.conf"; my $udev_rules = "udev-test.rules"; my @tests = ( { desc => "no rules", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "sda" , exp_rem_error => "yes", rules => < "label test of scsi disc", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "boot_disk" , rules => < "label test of scsi disc", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "boot_disk" , rules => < "label test of scsi disc", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "boot_disk" , rules => < "label test of scsi partition", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "boot_disk1" , rules => < "label test of pattern match", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "boot_disk1" , rules => < "label test of multiple sysfs files", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "boot_disk1" , rules => < "label test of max sysfs files (skip invalid rule)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "boot_disk1" , rules => < "catch device by *", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem/0" , rules => < "catch device by * - take 2", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem/0" , rules => < "catch device by ?", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem/0" , rules => < "catch device by character class", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem/0" , rules => < "replace kernel name", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "Handle comment lines in config file (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "Handle comment lines in config file with whitespace (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "Handle whitespace only lines (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "whitespace" , rules => < "Handle empty lines in config file (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "Handle backslashed multi lines in config file (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "preserve backslashes, if they are not for a newline", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "aaa", rules => < "Handle stupid backslashed multi lines in config file (and replace kernel name)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "subdirectory handling", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "sub/direct/ory/modem" , rules => < "parent device name match of scsi partition", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "first_disk5" , rules => < "test substitution chars", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "Major:8:minor:5:kernelnumber:5:id:0:0:0:0" , rules => < "import of shell-value file", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "subdir/err/node" , rules => < "import of shell-value returned from program", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node12345678", rules => < "sustitution of sysfs value (%s{file})", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "disk-ATA-sda" , rules => < "program result substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "special-device-5" , not_exp_name => "not" , rules => < "program result substitution (newline removal)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "newline_removed" , rules => < "program result substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "test-0:0:0:0" , rules => < "program with lots of arguments", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "foo9" , rules => < "program with subshell", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "bar9" , rules => < "program arguments combined with apostrophes", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "foo7" , rules => < "characters before the %c{N} substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "my-foo9" , rules => < "substitute the second to last argument", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "my-foo8" , rules => < "test substitution by variable name", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", rules => < "test substitution by variable name 2", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", rules => < "test substitution by variable name 3", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "850:0:0:05" , rules => < "test substitution by variable name 4", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "855" , rules => < "test substitution by variable name 5", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "8550:0:0:0" , rules => < "non matching SUBSYSTEMS for device with no parent", devpath => "/devices/virtual/tty/console", exp_name => "TTY", rules => < "non matching SUBSYSTEMS", devpath => "/devices/virtual/tty/console", exp_name => "TTY" , rules => < "ATTRS match", devpath => "/devices/virtual/tty/console", exp_name => "foo" , rules => < "ATTR (empty file)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "empty" , rules => < "ATTR (non-existent file)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "non-existent" , rules => < "program and bus type match", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "scsi-0:0:0:0" , rules => < "sysfs parent hierarchy", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem" , rules => < "name test with ! in the name", devpath => "/devices/virtual/block/fake!blockdev0", exp_name => "is/a/fake/blockdev0" , rules => < "name test with ! in the name, but no matching rule", devpath => "/devices/virtual/block/fake!blockdev0", exp_name => "fake/blockdev0" , exp_rem_error => "yes", rules => < "KERNELS rule", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "scsi-0:0:0:0", rules => < "KERNELS wildcard all", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "scsi-0:0:0:0", rules => < "KERNELS wildcard partial", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "scsi-0:0:0:0", rules => < "KERNELS wildcard partial 2", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "scsi-0:0:0:0", rules => < "substitute attr with link target value (first match)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "driver-is-sd", rules => < "substitute attr with link target value (currently selected device)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "driver-is-ahci", rules => < "ignore ATTRS attribute whitespace", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "ignored", rules => < "do not ignore ATTRS attribute whitespace", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "matched-with-space", rules => < "permissions USER=bad GROUP=name", devpath => "/devices/virtual/tty/tty33", exp_name => "tty33", exp_perms => "0:0:0600", rules => < "permissions OWNER=5000", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => "5000::0600", rules => < "permissions GROUP=100", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => ":100:0660", rules => < "textual user id", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => "nobody::0600", rules => < "textual group id", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => ":daemon:0660", rules => < "textual user/group id", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => "root:mail:0660", rules => < "permissions MODE=0777", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => "::0777", rules => < "permissions OWNER=5000 GROUP=100 MODE=0777", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_perms => "5000:100:0777", rules => < "permissions OWNER to 5000", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "5000::", rules => < "permissions GROUP to 100", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => ":100:0660", rules => < "permissions MODE to 0060", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "::0060", rules => < "permissions OWNER, GROUP, MODE", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "5000:100:0777", rules => < "permissions only rule", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "5000:100:0777", rules => < "multiple permissions only rule", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "3000:4000:0777", rules => < "permissions only rule with override at SYMLINK+ rule", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "ttyACM0", exp_perms => "3000:8000:0777", rules => < "major/minor number test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", exp_majorminor => "8:0", rules => < "big major number test", devpath => "/devices/virtual/misc/misc-fake1", exp_name => "node", exp_majorminor => "4095:1", rules => < "big major and big minor number test", devpath => "/devices/virtual/misc/misc-fake89999", exp_name => "node", exp_majorminor => "4095:89999", rules => < "multiple symlinks with format char", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "symlink2-ttyACM0", rules => < "multiple symlinks with a lot of s p a c e s", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "one", not_exp_name => " ", rules => < "symlink creation (same directory)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "modem0", rules => < "multiple symlinks", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "second-0" , rules => < "symlink name '.'", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => ".", exp_add_error => "yes", exp_rem_error => "yes", rules => < "symlink node to itself", devpath => "/devices/virtual/tty/tty0", exp_name => "link", exp_add_error => "yes", exp_rem_error => "yes", option => "clean", rules => < "symlink %n substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "symlink0", rules => < "symlink %k substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "symlink-ttyACM0", rules => < "symlink %M:%m substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "major-166:0", rules => < "symlink %b substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "symlink-0:0:0:0", rules => < "symlink %c substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "test", rules => < "symlink %c{N} substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "test", rules => < "symlink %c{N+} substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "this", rules => < "symlink only rule with %c{N+}", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "test", rules => < "symlink %s{filename} substitution", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "166:0", rules => < "program result substitution (numbered part of)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "link1", rules => < "program result substitution (numbered part of+)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", exp_name => "link4", rules => < "SUBSYSTEM match test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", rules => < "DRIVERS match test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", rules => < "devnode substitution test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node", rules => < "parent node name substitution test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "sda-part-1", rules => < "udev_root substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "start-udev-root-end", rules => < "last_rule option", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "last", rules => < "negation KERNEL!=", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "match", rules => < "negation SUBSYSTEM!=", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "not-anything", rules => < "negation PROGRAM!= exit code", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "nonzero-program", rules => < "test for whitespace between the operator", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "true", rules => < "ENV{} test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "true", rules => < "ENV{} test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "true", rules => < "ENV{} test (assign)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "true", rules => < "ENV{} test (assign 2 times)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "true", rules => < "ENV{} test (assign2)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "part", rules => < "untrusted string sanitize", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "sane", rules => < "untrusted string sanitize (don't replace utf8)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "uber", rules => < "untrusted string sanitize (replace invalid utf8)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "replaced", rules => < "read sysfs value from parent device", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "serial-354172020305000", rules => < "match against empty key string", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "ok", rules => < "check ACTION value", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "ok", rules => < "final assignment", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "ok", exp_perms => "root:tty:0640", rules => < "final assignment 2", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "ok", exp_perms => "root:tty:0640", rules => < "env substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "node-add-me", rules => < "reset list to current value", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "three", not_exp_name => "two", rules => < "test empty SYMLINK+ (empty override)", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "right", not_exp_name => "wrong", rules => < "test multi matches", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "right", rules => < "test multi matches 2", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "right", rules => < "test multi matches 3", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "right", rules => < "test multi matches 4", devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", exp_name => "right", rules => < "IMPORT parent test sequence 1/2 (keep)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "parent", option => "keep", rules => < "IMPORT parent test sequence 2/2 (keep)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "parentenv-parent_right", option => "clean", rules => < "GOTO test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "right", rules => < "GOTO label does not exist", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "right", rules => < "SYMLINK+ compare test", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "right", not_exp_name => "wrong", rules => < "invalid key operation", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "yes", rules => < "operator chars in attribute", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "yes", rules => < "overlong comment line", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", exp_name => "yes", rules => < "magic subsys/kernel lookup", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "00:16:41:e2:8d:ff", rules => < "TEST absolute path", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "there", rules => < "TEST subsys/kernel lookup", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "yes", rules => < "TEST relative path", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "relative", rules => < "TEST wildcard substitution (find queue/nr_requests)", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "found-subdir", rules => < "TEST MODE=0000", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "sda", exp_perms => "0:0:0000", exp_rem_error => "yes", rules => < "TEST PROGRAM feeds OWNER, GROUP, MODE", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "sda", exp_perms => "5000:100:0400", exp_rem_error => "yes", rules => < "TEST PROGRAM feeds MODE with overflow", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "sda", exp_perms => "0:0:0440", exp_rem_error => "yes", rules => < "magic [subsys/sysname] attribute substitution", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "sda-8741C4G-end", exp_perms => "0:0:0600", rules => < "builtin path_id", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", exp_name => "disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0", rules => <$udev_rules" || die "unable to create rules file: $udev_rules"; print CONF $$rules; close CONF; if ($valgrind > 0) { system("$udev_bin_valgrind $action $devpath"); } else { system("$udev_bin $action $devpath"); } } my $error = 0; sub permissions_test { my($rules, $uid, $gid, $mode) = @_; my $wrong = 0; my $userid; my $groupid; $rules->{exp_perms} =~ m/^(.*):(.*):(.*)$/; if ($1 ne "") { if (defined(getpwnam($1))) { $userid = int(getpwnam($1)); } else { $userid = $1; } if ($uid != $userid) { $wrong = 1; } } if ($2 ne "") { if (defined(getgrnam($2))) { $groupid = int(getgrnam($2)); } else { $groupid = $2; } if ($gid != $groupid) { $wrong = 1; } } if ($3 ne "") { if (($mode & 07777) != oct($3)) { $wrong = 1; }; } if ($wrong == 0) { print "permissions: ok\n"; } else { printf " expected permissions are: %s:%s:%#o\n", $1, $2, oct($3); printf " created permissions are : %i:%i:%#o\n", $uid, $gid, $mode & 07777; print "permissions: error\n"; $error++; sleep(1); } } sub major_minor_test { my($rules, $rdev) = @_; my $major = ($rdev >> 8) & 0xfff; my $minor = ($rdev & 0xff) | (($rdev >> 12) & 0xfff00); my $wrong = 0; $rules->{exp_majorminor} =~ m/^(.*):(.*)$/; if ($1 ne "") { if ($major != $1) { $wrong = 1; }; } if ($2 ne "") { if ($minor != $2) { $wrong = 1; }; } if ($wrong == 0) { print "major:minor: ok\n"; } else { printf " expected major:minor is: %i:%i\n", $1, $2; printf " created major:minor is : %i:%i\n", $major, $minor; print "major:minor: error\n"; $error++; sleep(1); } } sub make_udev_root { system("rm -rf $udev_root"); mkdir($udev_root) || die "unable to create udev_root: $udev_root\n"; # setting group and mode of udev_root ensures the tests work # even if the parent directory has setgid bit enabled. chown (0, 0, $udev_root) || die "unable to chown $udev_root\n"; chmod (0755, $udev_root) || die "unable to chmod $udev_root\n"; } sub run_test { my ($rules, $number) = @_; print "TEST $number: $rules->{desc}\n"; print "device \'$rules->{devpath}\' expecting node/link \'$rules->{exp_name}\'\n"; udev("add", $rules->{devpath}, \$rules->{rules}); if (defined($rules->{not_exp_name})) { if ((-e "$PWD/$udev_root/$rules->{not_exp_name}") || (-l "$PWD/$udev_root/$rules->{not_exp_name}")) { print "nonexistent: error \'$rules->{not_exp_name}\' not expected to be there\n"; $error++; sleep(1); } } if ((-e "$PWD/$udev_root/$rules->{exp_name}") || (-l "$PWD/$udev_root/$rules->{exp_name}")) { my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat("$PWD/$udev_root/$rules->{exp_name}"); if (defined($rules->{exp_perms})) { permissions_test($rules, $uid, $gid, $mode); } if (defined($rules->{exp_majorminor})) { major_minor_test($rules, $rdev); } print "add: ok\n"; } else { print "add: error"; if ($rules->{exp_add_error}) { print " as expected\n"; } else { print "\n"; system("tree $udev_root"); print "\n"; $error++; sleep(1); } } if (defined($rules->{option}) && $rules->{option} eq "keep") { print "\n\n"; return; } udev("remove", $rules->{devpath}, \$rules->{rules}); if ((-e "$PWD/$udev_root/$rules->{exp_name}") || (-l "$PWD/$udev_root/$rules->{exp_name}")) { print "remove: error"; if ($rules->{exp_rem_error}) { print " as expected\n"; } else { print "\n"; system("tree $udev_root"); print "\n"; $error++; sleep(1); } } else { print "remove: ok\n"; } print "\n"; if (defined($rules->{option}) && $rules->{option} eq "clean") { make_udev_root(); } } # only run if we have root permissions # due to mknod restrictions if (!($<==0)) { print "Must have root permissions to run properly.\n"; exit; } # prepare make_udev_root(); # create config file open CONF, ">$udev_conf" || die "unable to create config file: $udev_conf"; print CONF "udev_root=\"$udev_root\"\n"; print CONF "udev_run=\"$udev_root/.udev\"\n"; print CONF "udev_sys=\"$sysfs\"\n"; print CONF "udev_rules=\"$PWD\"\n"; print CONF "udev_log=\"err\"\n"; close CONF; my $test_num = 1; my @list; foreach my $arg (@ARGV) { if ($arg =~ m/--valgrind/) { $valgrind = 1; printf("using valgrind\n"); } else { push(@list, $arg); } } if ($list[0]) { foreach my $arg (@list) { if (defined($tests[$arg-1]->{desc})) { print "udev-test will run test number $arg:\n\n"; run_test($tests[$arg-1], $arg); } else { print "test does not exist.\n"; } } } else { # test all print "\nudev-test will run ".($#tests + 1)." tests:\n\n"; foreach my $rules (@tests) { run_test($rules, $test_num); $test_num++; } } print "$error errors occured\n\n"; # cleanup system("rm -rf $udev_root"); unlink($udev_rules); unlink($udev_conf); if ($error > 0) { exit(1); } exit(0); udev-182/PaxHeaders.12492/gtk-doc.make0000644000521600052160000000007311625536226015566 xustar000000000000000029 atime=1332082771.02209145 30 ctime=1332097353.856438939 udev-182/gtk-doc.make0000644000521600052160000002061311625536226014166 0ustar00kaykay00000000000000# -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = endif # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) if ENABLE_GTK_DOC if GTK_DOC_BUILD_HTML HTML_BUILD_STAMP=html-build.stamp else HTML_BUILD_STAMP= endif if GTK_DOC_BUILD_PDF PDF_BUILD_STAMP=pdf-build.stamp else PDF_BUILD_STAMP= endif all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) else all-local: endif docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # if ENABLE_GTK_DOC dist-check-gtkdoc: else dist-check-gtkdoc: @echo "*** gtk-doc must be installed and enabled in order to make dist" @false endif dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs udev-182/PaxHeaders.12492/src0000644000521600052160000000013211731430511014071 xustar000000000000000030 mtime=1332097353.669438935 30 atime=1332097354.345438951 30 ctime=1332097353.669438935 udev-182/src/0000775000521600052160000000000011731430511012552 5ustar00kaykay00000000000000udev-182/src/PaxHeaders.12492/udevadm-test-builtin.c0000644000521600052160000000013111711107662020365 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083328.467104734 29 ctime=1332097353.43743893 udev-182/src/udevadm-test-builtin.c0000664000521600052160000000725211711107662017000 0ustar00kaykay00000000000000/* * Copyright (C) 2011 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static void help(struct udev *udev) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: udevadm builtin [--help] \n"); udev_builtin_list(udev); fprintf(stderr, "\n"); } static int adm_builtin(struct udev *udev, int argc, char *argv[]) { static const struct option options[] = { { "help", no_argument, NULL, 'h' }, {} }; char *command = NULL; char *syspath = NULL; char filename[UTIL_PATH_SIZE]; struct udev_device *dev = NULL; enum udev_builtin_cmd cmd; int rc = EXIT_SUCCESS; dbg(udev, "version %s\n", VERSION); for (;;) { int option; option = getopt_long(argc, argv, "h", options, NULL); if (option == -1) break; switch (option) { case 'h': help(udev); goto out; } } command = argv[optind++]; if (command == NULL) { fprintf(stderr, "command missing\n"); help(udev); rc = 2; goto out; } syspath = argv[optind++]; if (syspath == NULL) { fprintf(stderr, "syspath missing\n\n"); rc = 3; goto out; } udev_builtin_init(udev); cmd = udev_builtin_lookup(command); if (cmd >= UDEV_BUILTIN_MAX) { fprintf(stderr, "unknown command '%s'\n", command); help(udev); rc = 5; goto out; } /* add /sys if needed */ if (strncmp(syspath, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) util_strscpyl(filename, sizeof(filename), udev_get_sys_path(udev), syspath, NULL); else util_strscpy(filename, sizeof(filename), syspath); util_remove_trailing_chars(filename, '/'); dev = udev_device_new_from_syspath(udev, filename); if (dev == NULL) { fprintf(stderr, "unable to open device '%s'\n\n", filename); rc = 4; goto out; } if (udev_builtin_run(dev, cmd, command, true) < 0) { fprintf(stderr, "error executing '%s'\n\n", command); rc = 6; } out: udev_device_unref(dev); udev_builtin_exit(udev); return rc; } const struct udevadm_cmd udevadm_test_builtin = { .name = "test-builtin", .cmd = adm_builtin, .help = "test a built-in command", .debug = true, }; udev-182/src/PaxHeaders.12492/gudev0000644000521600052160000000013211731430511015203 xustar000000000000000030 mtime=1332097353.673438935 30 atime=1332097354.345438951 30 ctime=1332097353.673438935 udev-182/src/gudev/0000775000521600052160000000000011731430511013664 5ustar00kaykay00000000000000udev-182/src/gudev/PaxHeaders.12492/gudevenumtypes.h.template0000644000521600052160000000013211711107662022335 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082787.919091853 30 ctime=1332097353.608438933 udev-182/src/gudev/gudevenumtypes.h.template0000664000521600052160000000101711711107662020740 0ustar00kaykay00000000000000/*** BEGIN file-header ***/ #ifndef __GUDEV_ENUM_TYPES_H__ #define __GUDEV_ENUM_TYPES_H__ #include G_BEGIN_DECLS /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@filename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) G_GNUC_CONST; #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) /*** END value-header ***/ /*** BEGIN file-tail ***/ G_END_DECLS #endif /* __GUDEV_ENUM_TYPES_H__ */ /*** END file-tail ***/ udev-182/src/gudev/PaxHeaders.12492/gudevenumtypes.h0000644000521600052160000000013211731430436020523 xustar000000000000000030 mtime=1332097310.171437898 30 atime=1332097312.372437952 30 ctime=1332097352.714438915 udev-182/src/gudev/gudevenumtypes.h0000664000521600052160000000061411731430436017130 0ustar00kaykay00000000000000 /* Generated data (by glib-mkenums) */ #ifndef __GUDEV_ENUM_TYPES_H__ #define __GUDEV_ENUM_TYPES_H__ #include G_BEGIN_DECLS /* enumerations from "src/gudev/gudevenums.h" */ GType g_udev_device_type_get_type (void) G_GNUC_CONST; #define G_TYPE_UDEV_DEVICE_TYPE (g_udev_device_type_get_type ()) G_END_DECLS #endif /* __GUDEV_ENUM_TYPES_H__ */ /* Generated data ends here */ udev-182/src/gudev/PaxHeaders.12492/gudevenums.h0000644000521600052160000000013211711107662017621 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082787.920091853 30 ctime=1332097352.709438911 udev-182/src/gudev/gudevenums.h0000664000521600052160000000306211711107662016226 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_ENUMS_H__ #define __G_UDEV_ENUMS_H__ #include G_BEGIN_DECLS /** * GUdevDeviceType: * @G_UDEV_DEVICE_TYPE_NONE: Device does not have a device file. * @G_UDEV_DEVICE_TYPE_BLOCK: Device is a block device. * @G_UDEV_DEVICE_TYPE_CHAR: Device is a character device. * * Enumeration used to specify a the type of a device. */ typedef enum { G_UDEV_DEVICE_TYPE_NONE = 0, G_UDEV_DEVICE_TYPE_BLOCK = 'b', G_UDEV_DEVICE_TYPE_CHAR = 'c', } GUdevDeviceType; G_END_DECLS #endif /* __G_UDEV_ENUMS_H__ */ udev-182/src/gudev/PaxHeaders.12492/gudev.h0000644000521600052160000000013211711107662016551 xustar000000000000000030 mtime=1327796146.954827019 30 atime=1332082820.814092637 30 ctime=1332097352.699438913 udev-182/src/gudev/gudev.h0000664000521600052160000000224711711107662015162 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __G_UDEV_H__ #define __G_UDEV_H__ #define _GUDEV_INSIDE_GUDEV_H 1 #include #include #include #include #include #include #undef _GUDEV_INSIDE_GUDEV_H #endif /* __G_UDEV_H__ */ udev-182/src/gudev/PaxHeaders.12492/gudevenumerator.h0000644000521600052160000000013211711107662020653 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082820.476092629 30 ctime=1332097352.744438913 udev-182/src/gudev/gudevenumerator.h0000664000521600052160000001127511711107662017265 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008-2010 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_ENUMERATOR_H__ #define __G_UDEV_ENUMERATOR_H__ #include G_BEGIN_DECLS #define G_UDEV_TYPE_ENUMERATOR (g_udev_enumerator_get_type ()) #define G_UDEV_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumerator)) #define G_UDEV_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass)) #define G_UDEV_IS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_ENUMERATOR)) #define G_UDEV_IS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_ENUMERATOR)) #define G_UDEV_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass)) typedef struct _GUdevEnumeratorClass GUdevEnumeratorClass; typedef struct _GUdevEnumeratorPrivate GUdevEnumeratorPrivate; /** * GUdevEnumerator: * * The #GUdevEnumerator struct is opaque and should not be accessed directly. * * Since: 165 */ struct _GUdevEnumerator { GObject parent; /*< private >*/ GUdevEnumeratorPrivate *priv; }; /** * GUdevEnumeratorClass: * @parent_class: Parent class. * * Class structure for #GUdevEnumerator. * * Since: 165 */ struct _GUdevEnumeratorClass { GObjectClass parent_class; /*< private >*/ /* Padding for future expansion */ void (*reserved1) (void); void (*reserved2) (void); void (*reserved3) (void); void (*reserved4) (void); void (*reserved5) (void); void (*reserved6) (void); void (*reserved7) (void); void (*reserved8) (void); }; GType g_udev_enumerator_get_type (void) G_GNUC_CONST; GUdevEnumerator *g_udev_enumerator_new (GUdevClient *client); GUdevEnumerator *g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator, const gchar *subsystem); GUdevEnumerator *g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator, const gchar *subsystem); GUdevEnumerator *g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator, const gchar *name, const gchar *value); GUdevEnumerator *g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator, const gchar *name, const gchar *value); GUdevEnumerator *g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator, const gchar *name, const gchar *value); GUdevEnumerator *g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator, const gchar *name); GUdevEnumerator *g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator, const gchar *tag); GUdevEnumerator *g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator); GUdevEnumerator *g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator, const gchar *sysfs_path); GList *g_udev_enumerator_execute (GUdevEnumerator *enumerator); G_END_DECLS #endif /* __G_UDEV_ENUMERATOR_H__ */ udev-182/src/gudev/PaxHeaders.12492/gudevenumtypes.c.template0000644000521600052160000000013211711107662022330 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082787.935091853 30 ctime=1332097353.617438935 udev-182/src/gudev/gudevenumtypes.c.template0000664000521600052160000000163211711107662020736 0ustar00kaykay00000000000000/*** BEGIN file-header ***/ #include /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@filename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) { static volatile gsize g_define_type_id__volatile = 0; if (g_once_init_enter (&g_define_type_id__volatile)) { static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; GType g_define_type_id = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); } return g_define_type_id__volatile; } /*** END value-tail ***/ /*** BEGIN file-tail ***/ /*** END file-tail ***/ udev-182/src/gudev/PaxHeaders.12492/gudevclient.c0000644000521600052160000000013211711107662017743 xustar000000000000000030 mtime=1327796146.955827018 30 atime=1332082819.727092611 30 ctime=1332097352.947438918 udev-182/src/gudev/gudevclient.c0000664000521600052160000003740611711107662016361 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008-2010 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "gudevclient.h" #include "gudevdevice.h" #include "gudevmarshal.h" #include "gudevprivate.h" /** * SECTION:gudevclient * @short_description: Query devices and listen to uevents * * #GUdevClient is used to query information about devices on a Linux * system from the Linux kernel and the udev device * manager. * * Device information is retrieved from the kernel (through the * sysfs filesystem) and the udev daemon (through a * tmpfs filesystem) and presented through * #GUdevDevice objects. This means that no blocking IO ever happens * (in both cases, we are essentially just reading data from kernel * memory) and as such there are no asynchronous versions of the * provided methods. * * To get #GUdevDevice objects, use * g_udev_client_query_by_subsystem(), * g_udev_client_query_by_device_number(), * g_udev_client_query_by_device_file(), * g_udev_client_query_by_sysfs_path(), * g_udev_client_query_by_subsystem_and_name() * or the #GUdevEnumerator type. * * To listen to uevents, connect to the #GUdevClient::uevent signal. */ struct _GUdevClientPrivate { GSource *watch_source; struct udev *udev; struct udev_monitor *monitor; gchar **subsystems; }; enum { PROP_0, PROP_SUBSYSTEMS, }; enum { UEVENT_SIGNAL, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL] = { 0 }; G_DEFINE_TYPE (GUdevClient, g_udev_client, G_TYPE_OBJECT) /* ---------------------------------------------------------------------------------------------------- */ static gboolean monitor_event (GIOChannel *source, GIOCondition condition, gpointer data) { GUdevClient *client = (GUdevClient *) data; GUdevDevice *device; struct udev_device *udevice; if (client->priv->monitor == NULL) goto out; udevice = udev_monitor_receive_device (client->priv->monitor); if (udevice == NULL) goto out; device = _g_udev_device_new (udevice); udev_device_unref (udevice); g_signal_emit (client, signals[UEVENT_SIGNAL], 0, g_udev_device_get_action (device), device); g_object_unref (device); out: return TRUE; } static void g_udev_client_finalize (GObject *object) { GUdevClient *client = G_UDEV_CLIENT (object); if (client->priv->watch_source != NULL) { g_source_destroy (client->priv->watch_source); client->priv->watch_source = NULL; } if (client->priv->monitor != NULL) { udev_monitor_unref (client->priv->monitor); client->priv->monitor = NULL; } if (client->priv->udev != NULL) { udev_unref (client->priv->udev); client->priv->udev = NULL; } g_strfreev (client->priv->subsystems); if (G_OBJECT_CLASS (g_udev_client_parent_class)->finalize != NULL) G_OBJECT_CLASS (g_udev_client_parent_class)->finalize (object); } static void g_udev_client_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GUdevClient *client = G_UDEV_CLIENT (object); switch (prop_id) { case PROP_SUBSYSTEMS: if (client->priv->subsystems != NULL) g_strfreev (client->priv->subsystems); client->priv->subsystems = g_strdupv (g_value_get_boxed (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void g_udev_client_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GUdevClient *client = G_UDEV_CLIENT (object); switch (prop_id) { case PROP_SUBSYSTEMS: g_value_set_boxed (value, client->priv->subsystems); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void g_udev_client_constructed (GObject *object) { GUdevClient *client = G_UDEV_CLIENT (object); GIOChannel *channel; guint n; client->priv->udev = udev_new (); /* connect to event source */ client->priv->monitor = udev_monitor_new_from_netlink (client->priv->udev, "udev"); //g_debug ("ss = %p", client->priv->subsystems); if (client->priv->subsystems != NULL) { /* install subsystem filters to only wake up for certain events */ for (n = 0; client->priv->subsystems[n] != NULL; n++) { gchar *subsystem; gchar *devtype; gchar *s; subsystem = g_strdup (client->priv->subsystems[n]); devtype = NULL; //g_debug ("s = '%s'", subsystem); s = strstr (subsystem, "/"); if (s != NULL) { devtype = s + 1; *s = '\0'; } if (client->priv->monitor != NULL) udev_monitor_filter_add_match_subsystem_devtype (client->priv->monitor, subsystem, devtype); g_free (subsystem); } /* listen to events, and buffer them */ if (client->priv->monitor != NULL) { udev_monitor_enable_receiving (client->priv->monitor); channel = g_io_channel_unix_new (udev_monitor_get_fd (client->priv->monitor)); client->priv->watch_source = g_io_create_watch (channel, G_IO_IN); g_io_channel_unref (channel); g_source_set_callback (client->priv->watch_source, (GSourceFunc) monitor_event, client, NULL); g_source_attach (client->priv->watch_source, g_main_context_get_thread_default ()); g_source_unref (client->priv->watch_source); } else { client->priv->watch_source = NULL; } } if (G_OBJECT_CLASS (g_udev_client_parent_class)->constructed != NULL) G_OBJECT_CLASS (g_udev_client_parent_class)->constructed (object); } static void g_udev_client_class_init (GUdevClientClass *klass) { GObjectClass *gobject_class = (GObjectClass *) klass; gobject_class->constructed = g_udev_client_constructed; gobject_class->set_property = g_udev_client_set_property; gobject_class->get_property = g_udev_client_get_property; gobject_class->finalize = g_udev_client_finalize; /** * GUdevClient:subsystems: * * The subsystems to listen for uevents on. * * To listen for only a specific DEVTYPE for a given SUBSYSTEM, use * "subsystem/devtype". For example, to only listen for uevents * where SUBSYSTEM is usb and DEVTYPE is usb_interface, use * "usb/usb_interface". * * If this property is %NULL, then no events will be reported. If * it's the empty array, events from all subsystems will be * reported. */ g_object_class_install_property (gobject_class, PROP_SUBSYSTEMS, g_param_spec_boxed ("subsystems", "The subsystems to listen for changes on", "The subsystems to listen for changes on", G_TYPE_STRV, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); /** * GUdevClient::uevent: * @client: The #GUdevClient receiving the event. * @action: The action for the uevent e.g. "add", "remove", "change", "move", etc. * @device: Details about the #GUdevDevice the event is for. * * Emitted when @client receives an uevent. * * This signal is emitted in the * thread-default main loop * of the thread that @client was created in. */ signals[UEVENT_SIGNAL] = g_signal_new ("uevent", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GUdevClientClass, uevent), NULL, NULL, g_udev_marshal_VOID__STRING_OBJECT, G_TYPE_NONE, 2, G_TYPE_STRING, G_UDEV_TYPE_DEVICE); g_type_class_add_private (klass, sizeof (GUdevClientPrivate)); } static void g_udev_client_init (GUdevClient *client) { client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client, G_UDEV_TYPE_CLIENT, GUdevClientPrivate); } /** * g_udev_client_new: * @subsystems: (array zero-terminated=1) (element-type utf8) (transfer none) (allow-none): A %NULL terminated string array of subsystems to listen for uevents on, %NULL to not listen on uevents at all, or an empty array to listen to uevents on all subsystems. See the documentation for the #GUdevClient:subsystems property for details on this parameter. * * Constructs a #GUdevClient object that can be used to query * information about devices. Connect to the #GUdevClient::uevent * signal to listen for uevents. Note that signals are emitted in the * thread-default main loop * of the thread that you call this constructor from. * * Returns: A new #GUdevClient object. Free with g_object_unref(). */ GUdevClient * g_udev_client_new (const gchar * const *subsystems) { return G_UDEV_CLIENT (g_object_new (G_UDEV_TYPE_CLIENT, "subsystems", subsystems, NULL)); } /** * g_udev_client_query_by_subsystem: * @client: A #GUdevClient. * @subsystem: (allow-none): The subsystem to get devices for or %NULL to get all devices. * * Gets all devices belonging to @subsystem. * * Returns: (element-type GUdevDevice) (transfer full): A list of #GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. */ GList * g_udev_client_query_by_subsystem (GUdevClient *client, const gchar *subsystem) { struct udev_enumerate *enumerate; struct udev_list_entry *l, *devices; GList *ret; g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); ret = NULL; /* prepare a device scan */ enumerate = udev_enumerate_new (client->priv->udev); /* filter for subsystem */ if (subsystem != NULL) udev_enumerate_add_match_subsystem (enumerate, subsystem); /* retrieve the list */ udev_enumerate_scan_devices (enumerate); /* add devices to the list */ devices = udev_enumerate_get_list_entry (enumerate); for (l = devices; l != NULL; l = udev_list_entry_get_next (l)) { struct udev_device *udevice; GUdevDevice *device; udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), udev_list_entry_get_name (l)); if (udevice == NULL) continue; device = _g_udev_device_new (udevice); udev_device_unref (udevice); ret = g_list_prepend (ret, device); } udev_enumerate_unref (enumerate); ret = g_list_reverse (ret); return ret; } /** * g_udev_client_query_by_device_number: * @client: A #GUdevClient. * @type: A value from the #GUdevDeviceType enumeration. * @number: A device number. * * Looks up a device for a type and device number. * * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). */ GUdevDevice * g_udev_client_query_by_device_number (GUdevClient *client, GUdevDeviceType type, GUdevDeviceNumber number) { struct udev_device *udevice; GUdevDevice *device; g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); device = NULL; udevice = udev_device_new_from_devnum (client->priv->udev, type, number); if (udevice == NULL) goto out; device = _g_udev_device_new (udevice); udev_device_unref (udevice); out: return device; } /** * g_udev_client_query_by_device_file: * @client: A #GUdevClient. * @device_file: A device file. * * Looks up a device for a device file. * * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). */ GUdevDevice * g_udev_client_query_by_device_file (GUdevClient *client, const gchar *device_file) { struct stat stat_buf; GUdevDevice *device; g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); g_return_val_if_fail (device_file != NULL, NULL); device = NULL; if (stat (device_file, &stat_buf) != 0) goto out; if (stat_buf.st_rdev == 0) goto out; if (S_ISBLK (stat_buf.st_mode)) device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_BLOCK, stat_buf.st_rdev); else if (S_ISCHR (stat_buf.st_mode)) device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_CHAR, stat_buf.st_rdev); out: return device; } /** * g_udev_client_query_by_sysfs_path: * @client: A #GUdevClient. * @sysfs_path: A sysfs path. * * Looks up a device for a sysfs path. * * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). */ GUdevDevice * g_udev_client_query_by_sysfs_path (GUdevClient *client, const gchar *sysfs_path) { struct udev_device *udevice; GUdevDevice *device; g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); g_return_val_if_fail (sysfs_path != NULL, NULL); device = NULL; udevice = udev_device_new_from_syspath (client->priv->udev, sysfs_path); if (udevice == NULL) goto out; device = _g_udev_device_new (udevice); udev_device_unref (udevice); out: return device; } /** * g_udev_client_query_by_subsystem_and_name: * @client: A #GUdevClient. * @subsystem: A subsystem name. * @name: The name of the device. * * Looks up a device for a subsystem and name. * * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). */ GUdevDevice * g_udev_client_query_by_subsystem_and_name (GUdevClient *client, const gchar *subsystem, const gchar *name) { struct udev_device *udevice; GUdevDevice *device; g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); g_return_val_if_fail (subsystem != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); device = NULL; udevice = udev_device_new_from_subsystem_sysname (client->priv->udev, subsystem, name); if (udevice == NULL) goto out; device = _g_udev_device_new (udevice); udev_device_unref (udevice); out: return device; } struct udev * _g_udev_client_get_udev (GUdevClient *client) { g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); return client->priv->udev; } udev-182/src/gudev/PaxHeaders.12492/gudevdevice.c0000644000521600052160000000013211711107662017724 xustar000000000000000030 mtime=1327796146.955827018 30 atime=1332082820.049092619 30 ctime=1332097352.959438918 udev-182/src/gudev/gudevdevice.c0000664000521600052160000006354211711107662016342 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "gudevdevice.h" #include "gudevprivate.h" /** * SECTION:gudevdevice * @short_description: Get information about a device * * The #GUdevDevice class is used to get information about a specific * device. Note that you cannot instantiate a #GUdevDevice object * yourself. Instead you must use #GUdevClient to obtain #GUdevDevice * objects. * * To get basic information about a device, use * g_udev_device_get_subsystem(), g_udev_device_get_devtype(), * g_udev_device_get_name(), g_udev_device_get_number(), * g_udev_device_get_sysfs_path(), g_udev_device_get_driver(), * g_udev_device_get_action(), g_udev_device_get_seqnum(), * g_udev_device_get_device_type(), g_udev_device_get_device_number(), * g_udev_device_get_device_file(), * g_udev_device_get_device_file_symlinks(). * * To navigate the device tree, use g_udev_device_get_parent() and * g_udev_device_get_parent_with_subsystem(). * * To access udev properties for the device, use * g_udev_device_get_property_keys(), * g_udev_device_has_property(), * g_udev_device_get_property(), * g_udev_device_get_property_as_int(), * g_udev_device_get_property_as_uint64(), * g_udev_device_get_property_as_double(), * g_udev_device_get_property_as_boolean() and * g_udev_device_get_property_as_strv(). * * To access sysfs attributes for the device, use * g_udev_device_get_sysfs_attr(), * g_udev_device_get_sysfs_attr_as_int(), * g_udev_device_get_sysfs_attr_as_uint64(), * g_udev_device_get_sysfs_attr_as_double(), * g_udev_device_get_sysfs_attr_as_boolean() and * g_udev_device_get_sysfs_attr_as_strv(). * * Note that all getters on #GUdevDevice are non-reffing – returned * values are owned by the object, should not be freed and are only * valid as long as the object is alive. * * By design, #GUdevDevice will not react to changes for a device – it * only contains a snapshot of information when the #GUdevDevice * object was created. To work with changes, you typically connect to * the #GUdevClient::uevent signal on a #GUdevClient and get a new * #GUdevDevice whenever an event happens. */ struct _GUdevDevicePrivate { struct udev_device *udevice; /* computed ondemand and cached */ gchar **device_file_symlinks; gchar **property_keys; gchar **tags; GHashTable *prop_strvs; GHashTable *sysfs_attr_strvs; }; G_DEFINE_TYPE (GUdevDevice, g_udev_device, G_TYPE_OBJECT) static void g_udev_device_finalize (GObject *object) { GUdevDevice *device = G_UDEV_DEVICE (object); g_strfreev (device->priv->device_file_symlinks); g_strfreev (device->priv->property_keys); g_strfreev (device->priv->tags); if (device->priv->udevice != NULL) udev_device_unref (device->priv->udevice); if (device->priv->prop_strvs != NULL) g_hash_table_unref (device->priv->prop_strvs); if (device->priv->sysfs_attr_strvs != NULL) g_hash_table_unref (device->priv->sysfs_attr_strvs); if (G_OBJECT_CLASS (g_udev_device_parent_class)->finalize != NULL) (* G_OBJECT_CLASS (g_udev_device_parent_class)->finalize) (object); } static void g_udev_device_class_init (GUdevDeviceClass *klass) { GObjectClass *gobject_class = (GObjectClass *) klass; gobject_class->finalize = g_udev_device_finalize; g_type_class_add_private (klass, sizeof (GUdevDevicePrivate)); } static void g_udev_device_init (GUdevDevice *device) { device->priv = G_TYPE_INSTANCE_GET_PRIVATE (device, G_UDEV_TYPE_DEVICE, GUdevDevicePrivate); } GUdevDevice * _g_udev_device_new (struct udev_device *udevice) { GUdevDevice *device; device = G_UDEV_DEVICE (g_object_new (G_UDEV_TYPE_DEVICE, NULL)); device->priv->udevice = udev_device_ref (udevice); return device; } /** * g_udev_device_get_subsystem: * @device: A #GUdevDevice. * * Gets the subsystem for @device. * * Returns: The subsystem for @device. */ const gchar * g_udev_device_get_subsystem (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_subsystem (device->priv->udevice); } /** * g_udev_device_get_devtype: * @device: A #GUdevDevice. * * Gets the device type for @device. * * Returns: The devtype for @device. */ const gchar * g_udev_device_get_devtype (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_devtype (device->priv->udevice); } /** * g_udev_device_get_name: * @device: A #GUdevDevice. * * Gets the name of @device, e.g. "sda3". * * Returns: The name of @device. */ const gchar * g_udev_device_get_name (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_sysname (device->priv->udevice); } /** * g_udev_device_get_number: * @device: A #GUdevDevice. * * Gets the number of @device, e.g. "3" if g_udev_device_get_name() returns "sda3". * * Returns: The number of @device. */ const gchar * g_udev_device_get_number (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_sysnum (device->priv->udevice); } /** * g_udev_device_get_sysfs_path: * @device: A #GUdevDevice. * * Gets the sysfs path for @device. * * Returns: The sysfs path for @device. */ const gchar * g_udev_device_get_sysfs_path (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_syspath (device->priv->udevice); } /** * g_udev_device_get_driver: * @device: A #GUdevDevice. * * Gets the name of the driver used for @device. * * Returns: The name of the driver for @device or %NULL if unknown. */ const gchar * g_udev_device_get_driver (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_driver (device->priv->udevice); } /** * g_udev_device_get_action: * @device: A #GUdevDevice. * * Gets the most recent action (e.g. "add", "remove", "change", etc.) for @device. * * Returns: An action string. */ const gchar * g_udev_device_get_action (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_action (device->priv->udevice); } /** * g_udev_device_get_seqnum: * @device: A #GUdevDevice. * * Gets the most recent sequence number for @device. * * Returns: A sequence number. */ guint64 g_udev_device_get_seqnum (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); return udev_device_get_seqnum (device->priv->udevice); } /** * g_udev_device_get_device_type: * @device: A #GUdevDevice. * * Gets the type of the device file, if any, for @device. * * Returns: The device number for @device or #G_UDEV_DEVICE_TYPE_NONE if the device does not have a device file. */ GUdevDeviceType g_udev_device_get_device_type (GUdevDevice *device) { struct stat stat_buf; const gchar *device_file; GUdevDeviceType type; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), G_UDEV_DEVICE_TYPE_NONE); type = G_UDEV_DEVICE_TYPE_NONE; /* TODO: would be better to have support for this in libudev... */ device_file = g_udev_device_get_device_file (device); if (device_file == NULL) goto out; if (stat (device_file, &stat_buf) != 0) goto out; if (S_ISBLK (stat_buf.st_mode)) type = G_UDEV_DEVICE_TYPE_BLOCK; else if (S_ISCHR (stat_buf.st_mode)) type = G_UDEV_DEVICE_TYPE_CHAR; out: return type; } /** * g_udev_device_get_device_number: * @device: A #GUdevDevice. * * Gets the device number, if any, for @device. * * Returns: The device number for @device or 0 if unknown. */ GUdevDeviceNumber g_udev_device_get_device_number (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); return udev_device_get_devnum (device->priv->udevice); } /** * g_udev_device_get_device_file: * @device: A #GUdevDevice. * * Gets the device file for @device. * * Returns: The device file for @device or %NULL if no device file * exists. */ const gchar * g_udev_device_get_device_file (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); return udev_device_get_devnode (device->priv->udevice); } /** * g_udev_device_get_device_file_symlinks: * @device: A #GUdevDevice. * * Gets a list of symlinks (in /dev) that points to * the device file for @device. * * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of symlinks. This array is owned by @device and should not be freed by the caller. */ const gchar * const * g_udev_device_get_device_file_symlinks (GUdevDevice *device) { struct udev_list_entry *l; GPtrArray *p; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); if (device->priv->device_file_symlinks != NULL) goto out; p = g_ptr_array_new (); for (l = udev_device_get_devlinks_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) { g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); } g_ptr_array_add (p, NULL); device->priv->device_file_symlinks = (gchar **) g_ptr_array_free (p, FALSE); out: return (const gchar * const *) device->priv->device_file_symlinks; } /* ---------------------------------------------------------------------------------------------------- */ /** * g_udev_device_get_parent: * @device: A #GUdevDevice. * * Gets the immediate parent of @device, if any. * * Returns: (transfer full): A #GUdevDevice or %NULL if @device has no parent. Free with g_object_unref(). */ GUdevDevice * g_udev_device_get_parent (GUdevDevice *device) { GUdevDevice *ret; struct udev_device *udevice; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); ret = NULL; udevice = udev_device_get_parent (device->priv->udevice); if (udevice == NULL) goto out; ret = _g_udev_device_new (udevice); out: return ret; } /** * g_udev_device_get_parent_with_subsystem: * @device: A #GUdevDevice. * @subsystem: The subsystem of the parent to get. * @devtype: (allow-none): The devtype of the parent to get or %NULL. * * Walks up the chain of parents of @device and returns the first * device encountered where @subsystem and @devtype matches, if any. * * Returns: (transfer full): A #GUdevDevice or %NULL if @device has no parent with @subsystem and @devtype. Free with g_object_unref(). */ GUdevDevice * g_udev_device_get_parent_with_subsystem (GUdevDevice *device, const gchar *subsystem, const gchar *devtype) { GUdevDevice *ret; struct udev_device *udevice; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); g_return_val_if_fail (subsystem != NULL, NULL); ret = NULL; udevice = udev_device_get_parent_with_subsystem_devtype (device->priv->udevice, subsystem, devtype); if (udevice == NULL) goto out; ret = _g_udev_device_new (udevice); out: return ret; } /* ---------------------------------------------------------------------------------------------------- */ /** * g_udev_device_get_property_keys: * @device: A #GUdevDevice. * * Gets all keys for properties on @device. * * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of property keys. This array is owned by @device and should not be freed by the caller. */ const gchar* const * g_udev_device_get_property_keys (GUdevDevice *device) { struct udev_list_entry *l; GPtrArray *p; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); if (device->priv->property_keys != NULL) goto out; p = g_ptr_array_new (); for (l = udev_device_get_properties_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) { g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); } g_ptr_array_add (p, NULL); device->priv->property_keys = (gchar **) g_ptr_array_free (p, FALSE); out: return (const gchar * const *) device->priv->property_keys; } /** * g_udev_device_has_property: * @device: A #GUdevDevice. * @key: Name of property. * * Check if a the property with the given key exists. * * Returns: %TRUE only if the value for @key exist. */ gboolean g_udev_device_has_property (GUdevDevice *device, const gchar *key) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); g_return_val_if_fail (key != NULL, FALSE); return udev_device_get_property_value (device->priv->udevice, key) != NULL; } /** * g_udev_device_get_property: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device. * * Returns: The value for @key or %NULL if @key doesn't exist on @device. Do not free this string, it is owned by @device. */ const gchar * g_udev_device_get_property (GUdevDevice *device, const gchar *key) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); g_return_val_if_fail (key != NULL, NULL); return udev_device_get_property_value (device->priv->udevice, key); } /** * g_udev_device_get_property_as_int: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device and convert it to an integer * using strtol(). * * Returns: The value for @key or 0 if @key doesn't exist or * isn't an integer. */ gint g_udev_device_get_property_as_int (GUdevDevice *device, const gchar *key) { gint result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); g_return_val_if_fail (key != NULL, 0); result = 0; s = g_udev_device_get_property (device, key); if (s == NULL) goto out; result = strtol (s, NULL, 0); out: return result; } /** * g_udev_device_get_property_as_uint64: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device and convert it to an unsigned * 64-bit integer using g_ascii_strtoull(). * * Returns: The value for @key or 0 if @key doesn't exist or isn't a * #guint64. */ guint64 g_udev_device_get_property_as_uint64 (GUdevDevice *device, const gchar *key) { guint64 result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); g_return_val_if_fail (key != NULL, 0); result = 0; s = g_udev_device_get_property (device, key); if (s == NULL) goto out; result = g_ascii_strtoull (s, NULL, 0); out: return result; } /** * g_udev_device_get_property_as_double: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device and convert it to a double * precision floating point number using strtod(). * * Returns: The value for @key or 0.0 if @key doesn't exist or isn't a * #gdouble. */ gdouble g_udev_device_get_property_as_double (GUdevDevice *device, const gchar *key) { gdouble result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0.0); g_return_val_if_fail (key != NULL, 0.0); result = 0.0; s = g_udev_device_get_property (device, key); if (s == NULL) goto out; result = strtod (s, NULL); out: return result; } /** * g_udev_device_get_property_as_boolean: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device and convert it to an * boolean. This is done by doing a case-insensitive string comparison * on the string value against "1" and "true". * * Returns: The value for @key or %FALSE if @key doesn't exist or * isn't a #gboolean. */ gboolean g_udev_device_get_property_as_boolean (GUdevDevice *device, const gchar *key) { gboolean result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); g_return_val_if_fail (key != NULL, FALSE); result = FALSE; s = g_udev_device_get_property (device, key); if (s == NULL) goto out; if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) result = TRUE; out: return result; } static gchar ** split_at_whitespace (const gchar *s) { gchar **result; guint n; guint m; result = g_strsplit_set (s, " \v\t\r\n", 0); /* remove empty strings, thanks GLib */ for (n = 0; result[n] != NULL; n++) { if (strlen (result[n]) == 0) { g_free (result[n]); for (m = n; result[m] != NULL; m++) result[m] = result[m + 1]; n--; } } return result; } /** * g_udev_device_get_property_as_strv: * @device: A #GUdevDevice. * @key: Name of property. * * Look up the value for @key on @device and return the result of * splitting it into non-empty tokens split at white space (only space * (' '), form-feed ('\f'), newline ('\n'), carriage return ('\r'), * horizontal tab ('\t'), and vertical tab ('\v') are considered; the * locale is not taken into account). * * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): The value of @key on @device split into tokens or %NULL if @key doesn't exist. This array is owned by @device and should not be freed by the caller. */ const gchar* const * g_udev_device_get_property_as_strv (GUdevDevice *device, const gchar *key) { gchar **result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); g_return_val_if_fail (key != NULL, NULL); if (device->priv->prop_strvs != NULL) { result = g_hash_table_lookup (device->priv->prop_strvs, key); if (result != NULL) goto out; } result = NULL; s = g_udev_device_get_property (device, key); if (s == NULL) goto out; result = split_at_whitespace (s); if (result == NULL) goto out; if (device->priv->prop_strvs == NULL) device->priv->prop_strvs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_strfreev); g_hash_table_insert (device->priv->prop_strvs, g_strdup (key), result); out: return (const gchar* const *) result; } /* ---------------------------------------------------------------------------------------------------- */ /** * g_udev_device_get_sysfs_attr: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device. * * Returns: The value of the sysfs attribute or %NULL if there is no * such attribute. Do not free this string, it is owned by @device. */ const gchar * g_udev_device_get_sysfs_attr (GUdevDevice *device, const gchar *name) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); g_return_val_if_fail (name != NULL, NULL); return udev_device_get_sysattr_value (device->priv->udevice, name); } /** * g_udev_device_get_sysfs_attr_as_int: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device and convert it to an integer * using strtol(). * * Returns: The value of the sysfs attribute or 0 if there is no such * attribute. */ gint g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device, const gchar *name) { gint result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); g_return_val_if_fail (name != NULL, 0); result = 0; s = g_udev_device_get_sysfs_attr (device, name); if (s == NULL) goto out; result = strtol (s, NULL, 0); out: return result; } /** * g_udev_device_get_sysfs_attr_as_uint64: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device and convert it to an unsigned * 64-bit integer using g_ascii_strtoull(). * * Returns: The value of the sysfs attribute or 0 if there is no such * attribute. */ guint64 g_udev_device_get_sysfs_attr_as_uint64 (GUdevDevice *device, const gchar *name) { guint64 result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); g_return_val_if_fail (name != NULL, 0); result = 0; s = g_udev_device_get_sysfs_attr (device, name); if (s == NULL) goto out; result = g_ascii_strtoull (s, NULL, 0); out: return result; } /** * g_udev_device_get_sysfs_attr_as_double: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device and convert it to a double * precision floating point number using strtod(). * * Returns: The value of the sysfs attribute or 0.0 if there is no such * attribute. */ gdouble g_udev_device_get_sysfs_attr_as_double (GUdevDevice *device, const gchar *name) { gdouble result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0.0); g_return_val_if_fail (name != NULL, 0.0); result = 0.0; s = g_udev_device_get_sysfs_attr (device, name); if (s == NULL) goto out; result = strtod (s, NULL); out: return result; } /** * g_udev_device_get_sysfs_attr_as_boolean: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device and convert it to an * boolean. This is done by doing a case-insensitive string comparison * on the string value against "1" and "true". * * Returns: The value of the sysfs attribute or %FALSE if there is no such * attribute. */ gboolean g_udev_device_get_sysfs_attr_as_boolean (GUdevDevice *device, const gchar *name) { gboolean result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); g_return_val_if_fail (name != NULL, FALSE); result = FALSE; s = g_udev_device_get_sysfs_attr (device, name); if (s == NULL) goto out; if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) result = TRUE; out: return result; } /** * g_udev_device_get_sysfs_attr_as_strv: * @device: A #GUdevDevice. * @name: Name of the sysfs attribute. * * Look up the sysfs attribute with @name on @device and return the result of * splitting it into non-empty tokens split at white space (only space (' '), * form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal * tab ('\t'), and vertical tab ('\v') are considered; the locale is * not taken into account). * * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): The value of the sysfs attribute split into tokens or %NULL if there is no such attribute. This array is owned by @device and should not be freed by the caller. */ const gchar * const * g_udev_device_get_sysfs_attr_as_strv (GUdevDevice *device, const gchar *name) { gchar **result; const gchar *s; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); g_return_val_if_fail (name != NULL, NULL); if (device->priv->sysfs_attr_strvs != NULL) { result = g_hash_table_lookup (device->priv->sysfs_attr_strvs, name); if (result != NULL) goto out; } result = NULL; s = g_udev_device_get_sysfs_attr (device, name); if (s == NULL) goto out; result = split_at_whitespace (s); if (result == NULL) goto out; if (device->priv->sysfs_attr_strvs == NULL) device->priv->sysfs_attr_strvs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_strfreev); g_hash_table_insert (device->priv->sysfs_attr_strvs, g_strdup (name), result); out: return (const gchar* const *) result; } /** * g_udev_device_get_tags: * @device: A #GUdevDevice. * * Gets all tags for @device. * * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of tags. This array is owned by @device and should not be freed by the caller. * * Since: 165 */ const gchar* const * g_udev_device_get_tags (GUdevDevice *device) { struct udev_list_entry *l; GPtrArray *p; g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL); if (device->priv->tags != NULL) goto out; p = g_ptr_array_new (); for (l = udev_device_get_tags_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l)) { g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l))); } g_ptr_array_add (p, NULL); device->priv->tags = (gchar **) g_ptr_array_free (p, FALSE); out: return (const gchar * const *) device->priv->tags; } /** * g_udev_device_get_is_initialized: * @device: A #GUdevDevice. * * Gets whether @device has been initalized. * * Returns: Whether @device has been initialized. * * Since: 165 */ gboolean g_udev_device_get_is_initialized (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); return udev_device_get_is_initialized (device->priv->udevice); } /** * g_udev_device_get_usec_since_initialized: * @device: A #GUdevDevice. * * Gets number of micro-seconds since @device was initialized. * * This only works for devices with properties in the udev * database. All other devices return 0. * * Returns: Number of micro-seconds since @device was initialized or 0 if unknown. * * Since: 165 */ guint64 g_udev_device_get_usec_since_initialized (GUdevDevice *device) { g_return_val_if_fail (G_UDEV_IS_DEVICE (device), 0); return udev_device_get_usec_since_initialized (device->priv->udevice); } udev-182/src/gudev/PaxHeaders.12492/gudevtypes.h0000644000521600052160000000013211711107662017636 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082819.746092611 30 ctime=1332097352.718438913 udev-182/src/gudev/gudevtypes.h0000664000521600052160000000315211711107662016243 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_TYPES_H__ #define __G_UDEV_TYPES_H__ #include #include G_BEGIN_DECLS typedef struct _GUdevClient GUdevClient; typedef struct _GUdevDevice GUdevDevice; typedef struct _GUdevEnumerator GUdevEnumerator; /** * GUdevDeviceNumber: * * Corresponds to the standard #dev_t type as defined by POSIX (Until * bug 584517 is resolved this work-around is needed). */ #ifdef _GUDEV_WORK_AROUND_DEV_T_BUG typedef guint64 GUdevDeviceNumber; /* __UQUAD_TYPE */ #else typedef dev_t GUdevDeviceNumber; #endif G_END_DECLS #endif /* __G_UDEV_TYPES_H__ */ udev-182/src/gudev/PaxHeaders.12492/gjs-example.js0000644000521600052160000000013211711107662020040 xustar000000000000000030 mtime=1327796146.954827019 30 atime=1332083870.429117648 30 ctime=1332097353.624438935 udev-182/src/gudev/gjs-example.js0000775000521600052160000000543511711107662016456 0ustar00kaykay00000000000000#!/usr/bin/env gjs-console // This currently depends on the following patches to gjs // // http://bugzilla.gnome.org/show_bug.cgi?id=584558 // http://bugzilla.gnome.org/show_bug.cgi?id=584560 // http://bugzilla.gnome.org/show_bug.cgi?id=584568 const GUdev = imports.gi.GUdev; const Mainloop = imports.mainloop; function print_device (device) { print (" subsystem: " + device.get_subsystem ()); print (" devtype: " + device.get_devtype ()); print (" name: " + device.get_name ()); print (" number: " + device.get_number ()); print (" sysfs_path: " + device.get_sysfs_path ()); print (" driver: " + device.get_driver ()); print (" action: " + device.get_action ()); print (" seqnum: " + device.get_seqnum ()); print (" device type: " + device.get_device_type ()); print (" device number: " + device.get_device_number ()); print (" device file: " + device.get_device_file ()); print (" device file symlinks: " + device.get_device_file_symlinks ()); print (" foo: " + device.get_sysfs_attr_as_strv ("stat")); var keys = device.get_property_keys (); for (var n = 0; n < keys.length; n++) { print (" " + keys[n] + "=" + device.get_property (keys[n])); } } function on_uevent (client, action, device) { print ("action " + action + " on device " + device.get_sysfs_path()); print_device (device); print (""); } var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]}); client.connect ("uevent", on_uevent); var block_devices = client.query_by_subsystem ("block"); for (var n = 0; n < block_devices.length; n++) { print ("block device: " + block_devices[n].get_device_file ()); } var d; d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810); if (d == null) { print ("query_by_device_number 0x810 -> null"); } else { print ("query_by_device_number 0x810 -> " + d.get_device_file ()); var dd = d.get_parent_with_subsystem ("usb", null); print_device (dd); print ("--------------------------------------------------------------------------"); while (d != null) { print_device (d); print (""); d = d.get_parent (); } } d = client.query_by_sysfs_path ("/sys/block/sda/sda1"); print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ()); d = client.query_by_subsystem_and_name ("block", "sda2"); print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ()); d = client.query_by_device_file ("/dev/sda"); print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ()); d = client.query_by_device_file ("/dev/block/8:0"); print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ()); Mainloop.run('udev-example'); udev-182/src/gudev/PaxHeaders.12492/gudevenumerator.c0000644000521600052160000000013211711107662020646 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082820.406092627 30 ctime=1332097352.970438919 udev-182/src/gudev/gudevenumerator.c0000664000521600052160000003145711711107662017264 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008-2010 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "gudevclient.h" #include "gudevenumerator.h" #include "gudevdevice.h" #include "gudevmarshal.h" #include "gudevprivate.h" /** * SECTION:gudevenumerator * @short_description: Lookup and sort devices * * #GUdevEnumerator is used to lookup and sort devices. * * Since: 165 */ struct _GUdevEnumeratorPrivate { GUdevClient *client; struct udev_enumerate *e; }; enum { PROP_0, PROP_CLIENT, }; G_DEFINE_TYPE (GUdevEnumerator, g_udev_enumerator, G_TYPE_OBJECT) /* ---------------------------------------------------------------------------------------------------- */ static void g_udev_enumerator_finalize (GObject *object) { GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); if (enumerator->priv->client != NULL) { g_object_unref (enumerator->priv->client); enumerator->priv->client = NULL; } if (enumerator->priv->e != NULL) { udev_enumerate_unref (enumerator->priv->e); enumerator->priv->e = NULL; } if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize != NULL) G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize (object); } static void g_udev_enumerator_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); switch (prop_id) { case PROP_CLIENT: if (enumerator->priv->client != NULL) g_object_unref (enumerator->priv->client); enumerator->priv->client = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void g_udev_enumerator_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); switch (prop_id) { case PROP_CLIENT: g_value_set_object (value, enumerator->priv->client); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void g_udev_enumerator_constructed (GObject *object) { GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object); g_assert (G_UDEV_IS_CLIENT (enumerator->priv->client)); enumerator->priv->e = udev_enumerate_new (_g_udev_client_get_udev (enumerator->priv->client)); if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed != NULL) G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed (object); } static void g_udev_enumerator_class_init (GUdevEnumeratorClass *klass) { GObjectClass *gobject_class = (GObjectClass *) klass; gobject_class->finalize = g_udev_enumerator_finalize; gobject_class->set_property = g_udev_enumerator_set_property; gobject_class->get_property = g_udev_enumerator_get_property; gobject_class->constructed = g_udev_enumerator_constructed; /** * GUdevEnumerator:client: * * The #GUdevClient to enumerate devices from. * * Since: 165 */ g_object_class_install_property (gobject_class, PROP_CLIENT, g_param_spec_object ("client", "The client to enumerate devices from", "The client to enumerate devices from", G_UDEV_TYPE_CLIENT, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); g_type_class_add_private (klass, sizeof (GUdevEnumeratorPrivate)); } static void g_udev_enumerator_init (GUdevEnumerator *enumerator) { enumerator->priv = G_TYPE_INSTANCE_GET_PRIVATE (enumerator, G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorPrivate); } /** * g_udev_enumerator_new: * @client: A #GUdevClient to enumerate devices from. * * Constructs a #GUdevEnumerator object that can be used to enumerate * and sort devices. Use the add_match_*() and add_nomatch_*() methods * and execute the query to get a list of devices with * g_udev_enumerator_execute(). * * Returns: A new #GUdevEnumerator object. Free with g_object_unref(). * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_new (GUdevClient *client) { g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); return G_UDEV_ENUMERATOR (g_object_new (G_UDEV_TYPE_ENUMERATOR, "client", client, NULL)); } /** * g_udev_enumerator_add_match_subsystem: * @enumerator: A #GUdevEnumerator. * @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'. * * All returned devices will match the given @subsystem. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator, const gchar *subsystem) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (subsystem != NULL, NULL); udev_enumerate_add_match_subsystem (enumerator->priv->e, subsystem); return enumerator; } /** * g_udev_enumerator_add_nomatch_subsystem: * @enumerator: A #GUdevEnumerator. * @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'. * * All returned devices will not match the given @subsystem. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator, const gchar *subsystem) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (subsystem != NULL, NULL); udev_enumerate_add_nomatch_subsystem (enumerator->priv->e, subsystem); return enumerator; } /** * g_udev_enumerator_add_match_sysfs_attr: * @enumerator: A #GUdevEnumerator. * @name: Wildcard filter for sysfs attribute key. * @value: Wildcard filter for sysfs attribute value. * * All returned devices will have a sysfs attribute matching the given @name and @value. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator, const gchar *name, const gchar *value) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (value != NULL, NULL); udev_enumerate_add_match_sysattr (enumerator->priv->e, name, value); return enumerator; } /** * g_udev_enumerator_add_nomatch_sysfs_attr: * @enumerator: A #GUdevEnumerator. * @name: Wildcard filter for sysfs attribute key. * @value: Wildcard filter for sysfs attribute value. * * All returned devices will not have a sysfs attribute matching the given @name and @value. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator, const gchar *name, const gchar *value) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (value != NULL, NULL); udev_enumerate_add_nomatch_sysattr (enumerator->priv->e, name, value); return enumerator; } /** * g_udev_enumerator_add_match_property: * @enumerator: A #GUdevEnumerator. * @name: Wildcard filter for property name. * @value: Wildcard filter for property value. * * All returned devices will have a property matching the given @name and @value. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator, const gchar *name, const gchar *value) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (value != NULL, NULL); udev_enumerate_add_match_property (enumerator->priv->e, name, value); return enumerator; } /** * g_udev_enumerator_add_match_name: * @enumerator: A #GUdevEnumerator. * @name: Wildcard filter for kernel name e.g. "sda*". * * All returned devices will match the given @name. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator, const gchar *name) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (name != NULL, NULL); udev_enumerate_add_match_sysname (enumerator->priv->e, name); return enumerator; } /** * g_udev_enumerator_add_sysfs_path: * @enumerator: A #GUdevEnumerator. * @sysfs_path: A sysfs path, e.g. "/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" * * Add a device to the list of devices, to retrieve it back sorted in dependency order. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator, const gchar *sysfs_path) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (sysfs_path != NULL, NULL); udev_enumerate_add_syspath (enumerator->priv->e, sysfs_path); return enumerator; } /** * g_udev_enumerator_add_match_tag: * @enumerator: A #GUdevEnumerator. * @tag: A udev tag e.g. "udev-acl". * * All returned devices will match the given @tag. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator, const gchar *tag) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); g_return_val_if_fail (tag != NULL, NULL); udev_enumerate_add_match_tag (enumerator->priv->e, tag); return enumerator; } /** * g_udev_enumerator_add_match_is_initialized: * @enumerator: A #GUdevEnumerator. * * All returned devices will be initialized. * * Returns: (transfer none): The passed in @enumerator. * * Since: 165 */ GUdevEnumerator * g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator) { g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); udev_enumerate_add_match_is_initialized (enumerator->priv->e); return enumerator; } /** * g_udev_enumerator_execute: * @enumerator: A #GUdevEnumerator. * * Executes the query in @enumerator. * * Returns: (element-type GUdevDevice) (transfer full): A list of #GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. * * Since: 165 */ GList * g_udev_enumerator_execute (GUdevEnumerator *enumerator) { GList *ret; struct udev_list_entry *l, *devices; g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL); ret = NULL; /* retrieve the list */ udev_enumerate_scan_devices (enumerator->priv->e); devices = udev_enumerate_get_list_entry (enumerator->priv->e); for (l = devices; l != NULL; l = udev_list_entry_get_next (l)) { struct udev_device *udevice; GUdevDevice *device; udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerator->priv->e), udev_list_entry_get_name (l)); if (udevice == NULL) continue; device = _g_udev_device_new (udevice); udev_device_unref (udevice); ret = g_list_prepend (ret, device); } ret = g_list_reverse (ret); return ret; } udev-182/src/gudev/PaxHeaders.12492/seed-example-enum.js0000644000521600052160000000013211711107662021137 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083870.444117648 30 ctime=1332097353.631438934 udev-182/src/gudev/seed-example-enum.js0000775000521600052160000000300411711107662017543 0ustar00kaykay00000000000000#!/usr/bin/env seed const GLib = imports.gi.GLib; const GUdev = imports.gi.GUdev; function print_device(device) { print(" initialized: " + device.get_is_initialized()); print(" usec since initialized: " + device.get_usec_since_initialized()); print(" subsystem: " + device.get_subsystem()); print(" devtype: " + device.get_devtype()); print(" name: " + device.get_name()); print(" number: " + device.get_number()); print(" sysfs_path: " + device.get_sysfs_path()); print(" driver: " + device.get_driver()); print(" action: " + device.get_action()); print(" seqnum: " + device.get_seqnum()); print(" device type: " + device.get_device_type()); print(" device number: " + device.get_device_number()); print(" device file: " + device.get_device_file()); print(" device file symlinks: " + device.get_device_file_symlinks()); print(" tags: " + device.get_tags()); var keys = device.get_property_keys(); for (var n = 0; n < keys.length; n++) { print(" " + keys[n] + "=" + device.get_property(keys[n])); } } var client = new GUdev.Client({subsystems: []}); var enumerator = new GUdev.Enumerator({client: client}); enumerator.add_match_subsystem('b*') var devices = enumerator.execute(); for (var n=0; n < devices.length; n++) { var device = devices[n]; print_device(device); print(""); } udev-182/src/gudev/PaxHeaders.12492/docs0000644000521600052160000000013211731430512016134 xustar000000000000000030 mtime=1332097354.248438949 30 atime=1332097354.345438951 30 ctime=1332097354.248438949 udev-182/src/gudev/docs/0000775000521600052160000000000011731430512014615 5ustar00kaykay00000000000000udev-182/src/gudev/docs/PaxHeaders.12492/tmpl0000644000521600052160000000013211731430512017110 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.345438951 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/0000775000521600052160000000000011731430512015571 5ustar00kaykay00000000000000udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudevenumerator.sgml0000644000521600052160000000013211731430512023265 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.229438949 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/gudevenumerator.sgml0000664000521600052160000000342711731430512021677 0ustar00kaykay00000000000000 GUdevEnumerator @parent_class: @client: @Returns: @enumerator: @subsystem: @Returns: @enumerator: @subsystem: @Returns: @enumerator: @name: @value: @Returns: @enumerator: @name: @value: @Returns: @enumerator: @name: @value: @Returns: @enumerator: @name: @Returns: @enumerator: @tag: @Returns: @enumerator: @Returns: @enumerator: @sysfs_path: @Returns: @enumerator: @Returns: udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudevenumtypes.sgml0000644000521600052160000000013211731430512023135 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.229438949 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/gudevenumtypes.sgml0000664000521600052160000000046011731430512021541 0ustar00kaykay00000000000000 gudevenumtypes udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudevclient.sgml0000644000521600052160000000013211731430512022362 xustar000000000000000030 mtime=1332097354.228438949 30 atime=1332097354.228438949 30 ctime=1332097354.228438949 udev-182/src/gudev/docs/tmpl/gudevclient.sgml0000664000521600052160000000302611731430512020767 0ustar00kaykay00000000000000 GUdevClient @gudevclient: the object which received the signal. @arg1: @arg2: @parent_class: @uevent: @G_UDEV_DEVICE_TYPE_NONE: @G_UDEV_DEVICE_TYPE_BLOCK: @G_UDEV_DEVICE_TYPE_CHAR: @subsystems: @Returns: @client: @subsystem: @Returns: @client: @type: @number: @Returns: @client: @device_file: @Returns: @client: @sysfs_path: @Returns: @client: @subsystem: @name: @Returns: udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudevmarshal.sgml0000644000521600052160000000013211731430512022533 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.229438949 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/gudevmarshal.sgml0000664000521600052160000000045611731430512021144 0ustar00kaykay00000000000000 gudevmarshal udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudevdevice.sgml0000644000521600052160000000013211731430512022343 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.229438949 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/gudevdevice.sgml0000664000521600052160000000720311731430512020751 0ustar00kaykay00000000000000 GUdevDevice @parent_class: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @subsystem: @devtype: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @key: @Returns: @device: @name: @Returns: @device: @name: @Returns: @device: @name: @Returns: @device: @name: @Returns: @device: @name: @Returns: @device: @name: @Returns: udev-182/src/gudev/docs/tmpl/PaxHeaders.12492/gudev-unused.sgml0000644000521600052160000000013211731430512022464 xustar000000000000000030 mtime=1332097354.229438949 30 atime=1332097354.229438949 30 ctime=1332097354.229438949 udev-182/src/gudev/docs/tmpl/gudev-unused.sgml0000664000521600052160000000000011731430512021056 0ustar00kaykay00000000000000udev-182/src/gudev/docs/PaxHeaders.12492/version.xml0000644000521600052160000000013111731430417020423 xustar000000000000000029 mtime=1332097295.10543754 30 atime=1332097321.643438173 30 ctime=1332097354.194438947 udev-182/src/gudev/docs/version.xml0000664000521600052160000000000411731430417017022 0ustar00kaykay00000000000000182 udev-182/src/gudev/docs/PaxHeaders.12492/version.xml.in0000644000521600052160000000013211711107662021032 xustar000000000000000030 mtime=1327796146.954827019 30 atime=1332086775.910186882 30 ctime=1332097354.189438947 udev-182/src/gudev/docs/version.xml.in0000664000521600052160000000001211711107662017427 0ustar00kaykay00000000000000@VERSION@ udev-182/src/gudev/docs/PaxHeaders.12492/html0000644000521600052160000000013211731430512017100 xustar000000000000000030 mtime=1332097354.328438951 30 atime=1332097354.346438951 30 ctime=1332097354.328438951 udev-182/src/gudev/docs/html/0000775000521600052160000000000011731430512015561 5ustar00kaykay00000000000000udev-182/src/gudev/docs/html/PaxHeaders.12492/gudev.devhelp20000644000521600052160000000013211731430512021722 xustar000000000000000030 mtime=1332097354.237438949 30 atime=1332097354.237438949 30 ctime=1332097354.237438949 udev-182/src/gudev/docs/html/gudev.devhelp20000664000521600052160000002104111731430512020324 0ustar00kaykay00000000000000 udev-182/src/gudev/docs/html/PaxHeaders.12492/ix02.html0000644000521600052160000000013211731430512020625 xustar000000000000000030 mtime=1332097354.315438951 30 atime=1332097354.315438951 30 ctime=1332097354.315438951 udev-182/src/gudev/docs/html/ix02.html0000664000521600052160000001440511731430512017235 0ustar00kaykay00000000000000 Index of new symbols in 165 udev-182/src/gudev/docs/html/PaxHeaders.12492/index.html0000644000521600052160000000013211731430512021152 xustar000000000000000030 mtime=1332097354.316438951 30 atime=1332097354.316438951 30 ctime=1332097354.316438951 udev-182/src/gudev/docs/html/index.html0000664000521600052160000001003411731430512017554 0ustar00kaykay00000000000000 GUDev Reference Manual

David Zeuthen


            
          

Bastien Nocera


            
          

For GUdev version 182

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy of the GNU Free Documentation License from the Free Software Foundation by visiting their Web site or by writing to:


          The Free Software Foundation, Inc.,
          59 Temple Place - Suite 330,
          Boston, MA 02111-1307,
          USA
        

Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any freedesktop.org documentation, and those trademarks are made aware to the members of the freedesktop.org Project, the names have been printed in caps or initial caps.


I. API Reference
GUdevClient — Query devices and listen to uevents
GUdevDevice — Get information about a device
GUdevEnumerator — Lookup and sort devices
Object Hierarchy
Index
Index of new symbols in 165
udev-182/src/gudev/docs/html/PaxHeaders.12492/gudev-hierarchy.html0000644000521600052160000000013211731430512023131 xustar000000000000000030 mtime=1332097354.317438951 30 atime=1332097354.317438951 30 ctime=1332097354.317438951 udev-182/src/gudev/docs/html/gudev-hierarchy.html0000664000521600052160000000372611731430512021545 0ustar00kaykay00000000000000 Object Hierarchy udev-182/src/gudev/docs/html/PaxHeaders.12492/index.sgml0000644000521600052160000000013211731430512021150 xustar000000000000000030 mtime=1332097354.239438949 30 atime=1332097354.239438949 30 ctime=1332097354.239438949 udev-182/src/gudev/docs/html/index.sgml0000664000521600052160000002051411731430512017556 0ustar00kaykay00000000000000 udev-182/src/gudev/docs/html/PaxHeaders.12492/left.png0000644000521600052160000000013211731430512020615 xustar000000000000000030 mtime=1332097354.240438949 30 atime=1332097354.240438949 30 ctime=1332097354.240438949 udev-182/src/gudev/docs/html/left.png0000644000521600052160000000071311731430512017220 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ1&¹³[(XIDATxœµ•!OÃPEïÛ*ˆ‰ŠID%~ꊯ˜ÄÕ"pæ'öŘ`sÜ–¥rKf–´‚¤â h—mi—ÇIžz}÷ܯIû¤–.pÚö\“`xä‹ ˆl‡?l·[²,H¬‡¯×k<Ï#Žcþ%\’AUx[S³7–n6ù¾¯år¹ßèõzE‰‡’s’žŒ1³ºö“²æÅj@œ—NL$ݤiª0 ¿5/ð}¿²\E‡Ž¤KIo¥Í“$a0üjÞdF£bŠkIê„‹æAh>ŸW¶lC'?“tk;|/t*I»ÝN«ÕÊZø^`Œy•4ë÷ûšN§r]×® çJÒÌó<«’½À“Út»Ýú€à`±Xàºî1@p´ä€¸d½÷ŽZ')høÖÚK¬ ª$V?%Å]€­+³L’sgUKà"ÿw5â3O·•ÜòIEND®B`‚udev-182/src/gudev/docs/html/PaxHeaders.12492/ix01.html0000644000521600052160000000013211731430512020624 xustar000000000000000030 mtime=1332097354.318438951 30 atime=1332097354.318438951 30 ctime=1332097354.319438951 udev-182/src/gudev/docs/html/ix01.html0000664000521600052160000002510211731430512017230 0ustar00kaykay00000000000000 Index

Index

C

g_udev_client_new, g_udev_client_new ()
g_udev_client_query_by_device_file, g_udev_client_query_by_device_file ()
g_udev_client_query_by_device_number, g_udev_client_query_by_device_number ()
g_udev_client_query_by_subsystem, g_udev_client_query_by_subsystem ()
g_udev_client_query_by_subsystem_and_name, g_udev_client_query_by_subsystem_and_name ()
g_udev_client_query_by_sysfs_path, g_udev_client_query_by_sysfs_path ()

D

g_udev_device_get_action, g_udev_device_get_action ()
g_udev_device_get_device_file, g_udev_device_get_device_file ()
g_udev_device_get_device_file_symlinks, g_udev_device_get_device_file_symlinks ()
g_udev_device_get_device_number, g_udev_device_get_device_number ()
g_udev_device_get_device_type, g_udev_device_get_device_type ()
g_udev_device_get_devtype, g_udev_device_get_devtype ()
g_udev_device_get_driver, g_udev_device_get_driver ()
g_udev_device_get_is_initialized, g_udev_device_get_is_initialized ()
g_udev_device_get_name, g_udev_device_get_name ()
g_udev_device_get_number, g_udev_device_get_number ()
g_udev_device_get_parent, g_udev_device_get_parent ()
g_udev_device_get_parent_with_subsystem, g_udev_device_get_parent_with_subsystem ()
g_udev_device_get_property, g_udev_device_get_property ()
g_udev_device_get_property_as_boolean, g_udev_device_get_property_as_boolean ()
g_udev_device_get_property_as_double, g_udev_device_get_property_as_double ()
g_udev_device_get_property_as_int, g_udev_device_get_property_as_int ()
g_udev_device_get_property_as_strv, g_udev_device_get_property_as_strv ()
g_udev_device_get_property_as_uint64, g_udev_device_get_property_as_uint64 ()
g_udev_device_get_property_keys, g_udev_device_get_property_keys ()
g_udev_device_get_seqnum, g_udev_device_get_seqnum ()
g_udev_device_get_subsystem, g_udev_device_get_subsystem ()
g_udev_device_get_sysfs_attr, g_udev_device_get_sysfs_attr ()
g_udev_device_get_sysfs_attr_as_boolean, g_udev_device_get_sysfs_attr_as_boolean ()
g_udev_device_get_sysfs_attr_as_double, g_udev_device_get_sysfs_attr_as_double ()
g_udev_device_get_sysfs_attr_as_int, g_udev_device_get_sysfs_attr_as_int ()
g_udev_device_get_sysfs_attr_as_strv, g_udev_device_get_sysfs_attr_as_strv ()
g_udev_device_get_sysfs_attr_as_uint64, g_udev_device_get_sysfs_attr_as_uint64 ()
g_udev_device_get_sysfs_path, g_udev_device_get_sysfs_path ()
g_udev_device_get_tags, g_udev_device_get_tags ()
g_udev_device_get_usec_since_initialized, g_udev_device_get_usec_since_initialized ()
g_udev_device_has_property, g_udev_device_has_property ()

E

g_udev_enumerator_add_match_is_initialized, g_udev_enumerator_add_match_is_initialized ()
g_udev_enumerator_add_match_name, g_udev_enumerator_add_match_name ()
g_udev_enumerator_add_match_property, g_udev_enumerator_add_match_property ()
g_udev_enumerator_add_match_subsystem, g_udev_enumerator_add_match_subsystem ()
g_udev_enumerator_add_match_sysfs_attr, g_udev_enumerator_add_match_sysfs_attr ()
g_udev_enumerator_add_match_tag, g_udev_enumerator_add_match_tag ()
g_udev_enumerator_add_nomatch_subsystem, g_udev_enumerator_add_nomatch_subsystem ()
g_udev_enumerator_add_nomatch_sysfs_attr, g_udev_enumerator_add_nomatch_sysfs_attr ()
g_udev_enumerator_add_sysfs_path, g_udev_enumerator_add_sysfs_path ()
g_udev_enumerator_execute, g_udev_enumerator_execute ()
g_udev_enumerator_new, g_udev_enumerator_new ()

G

GUdevClient, GUdevClient
GUdevClient::uevent, The "uevent" signal
GUdevClient:subsystems, The "subsystems" property
GUdevClientClass, struct GUdevClientClass
GUdevDevice, GUdevDevice
GUdevDeviceClass, struct GUdevDeviceClass
GUdevDeviceNumber, GUdevDeviceNumber
GUdevDeviceType, enum GUdevDeviceType
GUdevEnumerator, GUdevEnumerator
GUdevEnumerator:client, The "client" property
GUdevEnumeratorClass, struct GUdevEnumeratorClass
udev-182/src/gudev/docs/html/PaxHeaders.12492/style.css0000644000521600052160000000013211731430512021027 xustar000000000000000030 mtime=1332097354.240438949 30 atime=1332097354.240438949 30 ctime=1332097354.240438949 udev-182/src/gudev/docs/html/style.css0000644000521600052160000001210011731430512017423 0ustar00kaykay00000000000000.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } udev-182/src/gudev/docs/html/PaxHeaders.12492/up.png0000644000521600052160000000013211731430512020307 xustar000000000000000030 mtime=1332097354.240438949 30 atime=1332097354.240438949 30 ctime=1332097354.240438949 udev-182/src/gudev/docs/html/up.png0000644000521600052160000000062611731430512016715 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ2.œE€Ù#IDATxœí“=JÄ@F¿o‰] !+¤œ2…Å[ZÌ<@/á<€¥…XÛ Ú­20v±³ˆÂ…Ïj0»lþvV°ðA`˜ ïÍ ð—t*iùâHÒ­~xR~'IUUÉ9ç#OÁ‘my–eJÓTeY†GvÉ@x¤O#ß;2E>9²|t$DÞ9nnBäíÈjµò‘BRIsIªë:HîŸ8ŽU…œùëùPÖÚN™1fc­sNÎ95M㧖ɵ¤ ×æŸØŒ1~¸pEòe$ïIž°€Ç î7nrDòf!;Ã`¨çÝ'äykíÎI’øáû䲤sI_]ÿÇy—‡‘€ÅÀ^^I>O>Á¡ø­§²š?YBIEND®B`‚udev-182/src/gudev/docs/html/PaxHeaders.12492/right.png0000644000521600052160000000013211731430512021000 xustar000000000000000030 mtime=1332097354.240438949 30 atime=1332097354.240438949 30 ctime=1332097354.240438949 udev-182/src/gudev/docs/html/right.png0000644000521600052160000000073011731430512017402 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ2 I%Á=eIDATxœ­”!oÂ@†Ÿ.'**M0$ÄÁ$¿?1~¢vIeEuLlÉ&–Ô4‚ä Í¶B»Ý›œ¹|÷>ï—ûî …$ݶ©oc<”´ÑA©¤×€X’ò GUdevDevice

GUdevDevice

GUdevDevice — Get information about a device

Synopsis

                    GUdevDevice;
struct              GUdevDeviceClass;
const gchar *       g_udev_device_get_subsystem         (GUdevDevice *device);
const gchar *       g_udev_device_get_devtype           (GUdevDevice *device);
const gchar *       g_udev_device_get_name              (GUdevDevice *device);
const gchar *       g_udev_device_get_number            (GUdevDevice *device);
const gchar *       g_udev_device_get_sysfs_path        (GUdevDevice *device);
const gchar *       g_udev_device_get_driver            (GUdevDevice *device);
const gchar *       g_udev_device_get_action            (GUdevDevice *device);
guint64             g_udev_device_get_seqnum            (GUdevDevice *device);
GUdevDeviceType     g_udev_device_get_device_type       (GUdevDevice *device);
GUdevDeviceNumber   g_udev_device_get_device_number     (GUdevDevice *device);
const gchar *       g_udev_device_get_device_file       (GUdevDevice *device);
const gchar * const * g_udev_device_get_device_file_symlinks
                                                        (GUdevDevice *device);
GUdevDevice *       g_udev_device_get_parent            (GUdevDevice *device);
GUdevDevice *       g_udev_device_get_parent_with_subsystem
                                                        (GUdevDevice *device,
                                                         const gchar *subsystem,
                                                         const gchar *devtype);
const gchar * const * g_udev_device_get_tags            (GUdevDevice *device);
gboolean            g_udev_device_get_is_initialized    (GUdevDevice *device);
guint64             g_udev_device_get_usec_since_initialized
                                                        (GUdevDevice *device);
const gchar * const * g_udev_device_get_property_keys   (GUdevDevice *device);
gboolean            g_udev_device_has_property          (GUdevDevice *device,
                                                         const gchar *key);
const gchar *       g_udev_device_get_property          (GUdevDevice *device,
                                                         const gchar *key);
gint                g_udev_device_get_property_as_int   (GUdevDevice *device,
                                                         const gchar *key);
guint64             g_udev_device_get_property_as_uint64
                                                        (GUdevDevice *device,
                                                         const gchar *key);
gdouble             g_udev_device_get_property_as_double
                                                        (GUdevDevice *device,
                                                         const gchar *key);
gboolean            g_udev_device_get_property_as_boolean
                                                        (GUdevDevice *device,
                                                         const gchar *key);
const gchar * const * g_udev_device_get_property_as_strv
                                                        (GUdevDevice *device,
                                                         const gchar *key);
const gchar *       g_udev_device_get_sysfs_attr        (GUdevDevice *device,
                                                         const gchar *name);
gint                g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device,
                                                         const gchar *name);
guint64             g_udev_device_get_sysfs_attr_as_uint64
                                                        (GUdevDevice *device,
                                                         const gchar *name);
gdouble             g_udev_device_get_sysfs_attr_as_double
                                                        (GUdevDevice *device,
                                                         const gchar *name);
gboolean            g_udev_device_get_sysfs_attr_as_boolean
                                                        (GUdevDevice *device,
                                                         const gchar *name);
const gchar * const * g_udev_device_get_sysfs_attr_as_strv
                                                        (GUdevDevice *device,
                                                         const gchar *name);

Object Hierarchy

  GObject
   +----GUdevDevice

Description

The GUdevDevice class is used to get information about a specific device. Note that you cannot instantiate a GUdevDevice object yourself. Instead you must use GUdevClient to obtain GUdevDevice objects.

To get basic information about a device, use g_udev_device_get_subsystem(), g_udev_device_get_devtype(), g_udev_device_get_name(), g_udev_device_get_number(), g_udev_device_get_sysfs_path(), g_udev_device_get_driver(), g_udev_device_get_action(), g_udev_device_get_seqnum(), g_udev_device_get_device_type(), g_udev_device_get_device_number(), g_udev_device_get_device_file(), g_udev_device_get_device_file_symlinks().

To navigate the device tree, use g_udev_device_get_parent() and g_udev_device_get_parent_with_subsystem().

To access udev properties for the device, use g_udev_device_get_property_keys(), g_udev_device_has_property(), g_udev_device_get_property(), g_udev_device_get_property_as_int(), g_udev_device_get_property_as_uint64(), g_udev_device_get_property_as_double(), g_udev_device_get_property_as_boolean() and g_udev_device_get_property_as_strv().

To access sysfs attributes for the device, use g_udev_device_get_sysfs_attr(), g_udev_device_get_sysfs_attr_as_int(), g_udev_device_get_sysfs_attr_as_uint64(), g_udev_device_get_sysfs_attr_as_double(), g_udev_device_get_sysfs_attr_as_boolean() and g_udev_device_get_sysfs_attr_as_strv().

Note that all getters on GUdevDevice are non-reffing – returned values are owned by the object, should not be freed and are only valid as long as the object is alive.

By design, GUdevDevice will not react to changes for a device – it only contains a snapshot of information when the GUdevDevice object was created. To work with changes, you typically connect to the "uevent" signal on a GUdevClient and get a new GUdevDevice whenever an event happens.

Details

GUdevDevice

typedef struct _GUdevDevice GUdevDevice;

The GUdevDevice struct is opaque and should not be accessed directly.


struct GUdevDeviceClass

struct GUdevDeviceClass {
  GObjectClass parent_class;
};

Class structure for GUdevDevice.

GObjectClass parent_class;

Parent class.

g_udev_device_get_subsystem ()

const gchar *       g_udev_device_get_subsystem         (GUdevDevice *device);

Gets the subsystem for device.

device :

A GUdevDevice.

Returns :

The subsystem for device.

g_udev_device_get_devtype ()

const gchar *       g_udev_device_get_devtype           (GUdevDevice *device);

Gets the device type for device.

device :

A GUdevDevice.

Returns :

The devtype for device.

g_udev_device_get_name ()

const gchar *       g_udev_device_get_name              (GUdevDevice *device);

Gets the name of device, e.g. "sda3".

device :

A GUdevDevice.

Returns :

The name of device.

g_udev_device_get_number ()

const gchar *       g_udev_device_get_number            (GUdevDevice *device);

Gets the number of device, e.g. "3" if g_udev_device_get_name() returns "sda3".

device :

A GUdevDevice.

Returns :

The number of device.

g_udev_device_get_sysfs_path ()

const gchar *       g_udev_device_get_sysfs_path        (GUdevDevice *device);

Gets the sysfs path for device.

device :

A GUdevDevice.

Returns :

The sysfs path for device.

g_udev_device_get_driver ()

const gchar *       g_udev_device_get_driver            (GUdevDevice *device);

Gets the name of the driver used for device.

device :

A GUdevDevice.

Returns :

The name of the driver for device or NULL if unknown.

g_udev_device_get_action ()

const gchar *       g_udev_device_get_action            (GUdevDevice *device);

Gets the most recent action (e.g. "add", "remove", "change", etc.) for device.

device :

A GUdevDevice.

Returns :

An action string.

g_udev_device_get_seqnum ()

guint64             g_udev_device_get_seqnum            (GUdevDevice *device);

Gets the most recent sequence number for device.

device :

A GUdevDevice.

Returns :

A sequence number.

g_udev_device_get_device_type ()

GUdevDeviceType     g_udev_device_get_device_type       (GUdevDevice *device);

Gets the type of the device file, if any, for device.

device :

A GUdevDevice.

Returns :

The device number for device or G_UDEV_DEVICE_TYPE_NONE if the device does not have a device file.

g_udev_device_get_device_number ()

GUdevDeviceNumber   g_udev_device_get_device_number     (GUdevDevice *device);

Gets the device number, if any, for device.

device :

A GUdevDevice.

Returns :

The device number for device or 0 if unknown.

g_udev_device_get_device_file ()

const gchar *       g_udev_device_get_device_file       (GUdevDevice *device);

Gets the device file for device.

device :

A GUdevDevice.

Returns :

The device file for device or NULL if no device file exists.

g_udev_device_get_device_file_symlinks ()

const gchar * const * g_udev_device_get_device_file_symlinks
                                                        (GUdevDevice *device);

Gets a list of symlinks (in /dev) that points to the device file for device.

device :

A GUdevDevice.

Returns :

A NULL terminated string array of symlinks. This array is owned by device and should not be freed by the caller. [transfer none][array zero-terminated=1][element-type utf8]

g_udev_device_get_parent ()

GUdevDevice *       g_udev_device_get_parent            (GUdevDevice *device);

Gets the immediate parent of device, if any.

device :

A GUdevDevice.

Returns :

A GUdevDevice or NULL if device has no parent. Free with g_object_unref(). [transfer full]

g_udev_device_get_parent_with_subsystem ()

GUdevDevice *       g_udev_device_get_parent_with_subsystem
                                                        (GUdevDevice *device,
                                                         const gchar *subsystem,
                                                         const gchar *devtype);

Walks up the chain of parents of device and returns the first device encountered where subsystem and devtype matches, if any.

device :

A GUdevDevice.

subsystem :

The subsystem of the parent to get.

devtype :

The devtype of the parent to get or NULL. [allow-none]

Returns :

A GUdevDevice or NULL if device has no parent with subsystem and devtype. Free with g_object_unref(). [transfer full]

g_udev_device_get_tags ()

const gchar * const * g_udev_device_get_tags            (GUdevDevice *device);

Gets all tags for device.

device :

A GUdevDevice.

Returns :

A NULL terminated string array of tags. This array is owned by device and should not be freed by the caller. [transfer none][array zero-terminated=1][element-type utf8]

Since 165


g_udev_device_get_is_initialized ()

gboolean            g_udev_device_get_is_initialized    (GUdevDevice *device);

Gets whether device has been initalized.

device :

A GUdevDevice.

Returns :

Whether device has been initialized.

Since 165


g_udev_device_get_usec_since_initialized ()

guint64             g_udev_device_get_usec_since_initialized
                                                        (GUdevDevice *device);

Gets number of micro-seconds since device was initialized.

This only works for devices with properties in the udev database. All other devices return 0.

device :

A GUdevDevice.

Returns :

Number of micro-seconds since device was initialized or 0 if unknown.

Since 165


g_udev_device_get_property_keys ()

const gchar * const * g_udev_device_get_property_keys   (GUdevDevice *device);

Gets all keys for properties on device.

device :

A GUdevDevice.

Returns :

A NULL terminated string array of property keys. This array is owned by device and should not be freed by the caller. [transfer none][array zero-terminated=1][element-type utf8]

g_udev_device_has_property ()

gboolean            g_udev_device_has_property          (GUdevDevice *device,
                                                         const gchar *key);

Check if a the property with the given key exists.

device :

A GUdevDevice.

key :

Name of property.

Returns :

TRUE only if the value for key exist.

g_udev_device_get_property ()

const gchar *       g_udev_device_get_property          (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device.

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value for key or NULL if key doesn't exist on device. Do not free this string, it is owned by device.

g_udev_device_get_property_as_int ()

gint                g_udev_device_get_property_as_int   (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device and convert it to an integer using strtol().

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value for key or 0 if key doesn't exist or isn't an integer.

g_udev_device_get_property_as_uint64 ()

guint64             g_udev_device_get_property_as_uint64
                                                        (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device and convert it to an unsigned 64-bit integer using g_ascii_strtoull().

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value for key or 0 if key doesn't exist or isn't a guint64.

g_udev_device_get_property_as_double ()

gdouble             g_udev_device_get_property_as_double
                                                        (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device and convert it to a double precision floating point number using strtod().

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value for key or 0.0 if key doesn't exist or isn't a gdouble.

g_udev_device_get_property_as_boolean ()

gboolean            g_udev_device_get_property_as_boolean
                                                        (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device and convert it to an boolean. This is done by doing a case-insensitive string comparison on the string value against "1" and "true".

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value for key or FALSE if key doesn't exist or isn't a gboolean.

g_udev_device_get_property_as_strv ()

const gchar * const * g_udev_device_get_property_as_strv
                                                        (GUdevDevice *device,
                                                         const gchar *key);

Look up the value for key on device and return the result of splitting it into non-empty tokens split at white space (only space (' '), form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v') are considered; the locale is not taken into account).

device :

A GUdevDevice.

key :

Name of property.

Returns :

The value of key on device split into tokens or NULL if key doesn't exist. This array is owned by device and should not be freed by the caller. [transfer none][array zero-terminated=1][element-type utf8]

g_udev_device_get_sysfs_attr ()

const gchar *       g_udev_device_get_sysfs_attr        (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device.

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute or NULL if there is no such attribute. Do not free this string, it is owned by device.

g_udev_device_get_sysfs_attr_as_int ()

gint                g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device and convert it to an integer using strtol().

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute or 0 if there is no such attribute.

g_udev_device_get_sysfs_attr_as_uint64 ()

guint64             g_udev_device_get_sysfs_attr_as_uint64
                                                        (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device and convert it to an unsigned 64-bit integer using g_ascii_strtoull().

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute or 0 if there is no such attribute.

g_udev_device_get_sysfs_attr_as_double ()

gdouble             g_udev_device_get_sysfs_attr_as_double
                                                        (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device and convert it to a double precision floating point number using strtod().

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute or 0.0 if there is no such attribute.

g_udev_device_get_sysfs_attr_as_boolean ()

gboolean            g_udev_device_get_sysfs_attr_as_boolean
                                                        (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device and convert it to an boolean. This is done by doing a case-insensitive string comparison on the string value against "1" and "true".

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute or FALSE if there is no such attribute.

g_udev_device_get_sysfs_attr_as_strv ()

const gchar * const * g_udev_device_get_sysfs_attr_as_strv
                                                        (GUdevDevice *device,
                                                         const gchar *name);

Look up the sysfs attribute with name on device and return the result of splitting it into non-empty tokens split at white space (only space (' '), form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v') are considered; the locale is not taken into account).

device :

A GUdevDevice.

name :

Name of the sysfs attribute.

Returns :

The value of the sysfs attribute split into tokens or NULL if there is no such attribute. This array is owned by device and should not be freed by the caller. [transfer none][array zero-terminated=1][element-type utf8]
udev-182/src/gudev/docs/html/PaxHeaders.12492/ref-API.html0000644000521600052160000000013211731430512021226 xustar000000000000000030 mtime=1332097354.325438951 30 atime=1332097354.325438951 30 ctime=1332097354.325438951 udev-182/src/gudev/docs/html/ref-API.html0000664000521600052160000000426511731430512017641 0ustar00kaykay00000000000000 API Reference

API Reference


This part presents the class and function reference for the libgudev library.

Table of Contents

GUdevClient — Query devices and listen to uevents
GUdevDevice — Get information about a device
GUdevEnumerator — Lookup and sort devices
udev-182/src/gudev/docs/html/PaxHeaders.12492/GUdevEnumerator.html0000644000521600052160000000013211731430512023117 xustar000000000000000030 mtime=1332097354.326438951 30 atime=1332097354.326438951 30 ctime=1332097354.327438951 udev-182/src/gudev/docs/html/GUdevEnumerator.html0000664000521600052160000010076511731430512021534 0ustar00kaykay00000000000000 GUdevEnumerator

GUdevEnumerator

GUdevEnumerator — Lookup and sort devices

Object Hierarchy

  GObject
   +----GUdevEnumerator

Properties

  "client"                   GUdevClient*          : Read / Write / Construct Only

Description

GUdevEnumerator is used to lookup and sort devices.

Details

GUdevEnumerator

typedef struct _GUdevEnumerator GUdevEnumerator;

The GUdevEnumerator struct is opaque and should not be accessed directly.

Since 165


struct GUdevEnumeratorClass

struct GUdevEnumeratorClass {
  GObjectClass   parent_class;
};

Class structure for GUdevEnumerator.

GObjectClass parent_class;

Parent class.

Since 165


g_udev_enumerator_new ()

GUdevEnumerator *   g_udev_enumerator_new               (GUdevClient *client);

Constructs a GUdevEnumerator object that can be used to enumerate and sort devices. Use the add_match_*() and add_nomatch_*() methods and execute the query to get a list of devices with g_udev_enumerator_execute().

client :

A GUdevClient to enumerate devices from.

Returns :

A new GUdevEnumerator object. Free with g_object_unref().

Since 165


g_udev_enumerator_add_match_subsystem ()

GUdevEnumerator *   g_udev_enumerator_add_match_subsystem
                                                        (GUdevEnumerator *enumerator,
                                                         const gchar *subsystem);

All returned devices will match the given subsystem.

enumerator :

A GUdevEnumerator.

subsystem :

Wildcard for subsystem name e.g. 'scsi' or 'a*'.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_nomatch_subsystem ()

GUdevEnumerator *   g_udev_enumerator_add_nomatch_subsystem
                                                        (GUdevEnumerator *enumerator,
                                                         const gchar *subsystem);

All returned devices will not match the given subsystem.

enumerator :

A GUdevEnumerator.

subsystem :

Wildcard for subsystem name e.g. 'scsi' or 'a*'.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_match_sysfs_attr ()

GUdevEnumerator *   g_udev_enumerator_add_match_sysfs_attr
                                                        (GUdevEnumerator *enumerator,
                                                         const gchar *name,
                                                         const gchar *value);

All returned devices will have a sysfs attribute matching the given name and value.

enumerator :

A GUdevEnumerator.

name :

Wildcard filter for sysfs attribute key.

value :

Wildcard filter for sysfs attribute value.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_nomatch_sysfs_attr ()

GUdevEnumerator *   g_udev_enumerator_add_nomatch_sysfs_attr
                                                        (GUdevEnumerator *enumerator,
                                                         const gchar *name,
                                                         const gchar *value);

All returned devices will not have a sysfs attribute matching the given name and value.

enumerator :

A GUdevEnumerator.

name :

Wildcard filter for sysfs attribute key.

value :

Wildcard filter for sysfs attribute value.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_match_property ()

GUdevEnumerator *   g_udev_enumerator_add_match_property
                                                        (GUdevEnumerator *enumerator,
                                                         const gchar *name,
                                                         const gchar *value);

All returned devices will have a property matching the given name and value.

enumerator :

A GUdevEnumerator.

name :

Wildcard filter for property name.

value :

Wildcard filter for property value.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_match_name ()

GUdevEnumerator *   g_udev_enumerator_add_match_name    (GUdevEnumerator *enumerator,
                                                         const gchar *name);

All returned devices will match the given name.

enumerator :

A GUdevEnumerator.

name :

Wildcard filter for kernel name e.g. "sda*".

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_match_tag ()

GUdevEnumerator *   g_udev_enumerator_add_match_tag     (GUdevEnumerator *enumerator,
                                                         const gchar *tag);

All returned devices will match the given tag.

enumerator :

A GUdevEnumerator.

tag :

A udev tag e.g. "udev-acl".

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_match_is_initialized ()

GUdevEnumerator *   g_udev_enumerator_add_match_is_initialized
                                                        (GUdevEnumerator *enumerator);

All returned devices will be initialized.

enumerator :

A GUdevEnumerator.

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_add_sysfs_path ()

GUdevEnumerator *   g_udev_enumerator_add_sysfs_path    (GUdevEnumerator *enumerator,
                                                         const gchar *sysfs_path);

Add a device to the list of devices, to retrieve it back sorted in dependency order.

enumerator :

A GUdevEnumerator.

sysfs_path :

A sysfs path, e.g. "/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda"

Returns :

The passed in enumerator. [transfer none]

Since 165


g_udev_enumerator_execute ()

GList *             g_udev_enumerator_execute           (GUdevEnumerator *enumerator);

Executes the query in enumerator.

enumerator :

A GUdevEnumerator.

Returns :

A list of GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. [element-type GUdevDevice][transfer full]

Since 165

Property Details

The "client" property

  "client"                   GUdevClient*          : Read / Write / Construct Only

The GUdevClient to enumerate devices from.

Since 165

udev-182/src/gudev/docs/html/PaxHeaders.12492/home.png0000644000521600052160000000013211731430512020613 xustar000000000000000030 mtime=1332097354.239438949 30 atime=1332097354.239438949 30 ctime=1332097354.239438949 udev-182/src/gudev/docs/html/home.png0000644000521600052160000000121611731430512017215 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ1õÚKvIDATxœÕ•±kqÅ?ßrC‡ßàpà ~C„np¼¡CAAJ .B-\'G‡]:Ü “‚ƒCÇ -(ˆ8´à Ô€!…fD°€…çÒ“klbRÛÁoyüxïûîËïwpðIJº<°of_®-@ÒððçRH•´ÏfÖŸtèÂü¤^¯×ÓÚÚš’$Q«ÕÒ|“ôpâ’¶€gív;X^^&Ïs¢(bww—Z­F£ÑÀ9Çææ&Þû3඙ Æ’^IRµZUE.0Z]]Uš¦ ÃPY–Mü8óHÒGIÚÙÙÑìììæeŸkqqñÒ€™!ó  $ÛÛÛ¬¯¯3Œn eýþ{-/seeeìÔÃŒãXóóóåO‡Í·$ý8==UÇS™—é½×ÑÑQòRR€¤'ã–9-sÚÛÛ+B^ éC·Û•sîŸÍËÂ+%À°<7³ŸWô˜¿ õâ:™2IEND®B`‚udev-182/src/gudev/docs/html/PaxHeaders.12492/GUdevClient.html0000644000521600052160000000013211731430512022214 xustar000000000000000030 mtime=1332097354.328438951 30 atime=1332097354.328438951 30 ctime=1332097354.328438951 udev-182/src/gudev/docs/html/GUdevClient.html0000664000521600052160000007416011731430512020630 0ustar00kaykay00000000000000 GUdevClient

GUdevClient

GUdevClient — Query devices and listen to uevents

Object Hierarchy

  GObject
   +----GUdevClient
  GEnum
   +----GUdevDeviceType

Properties

  "subsystems"               GStrv                 : Read / Write / Construct Only

Signals

  "uevent"                                         : Run Last

Description

GUdevClient is used to query information about devices on a Linux system from the Linux kernel and the udev device manager.

Device information is retrieved from the kernel (through the sysfs filesystem) and the udev daemon (through a tmpfs filesystem) and presented through GUdevDevice objects. This means that no blocking IO ever happens (in both cases, we are essentially just reading data from kernel memory) and as such there are no asynchronous versions of the provided methods.

To get GUdevDevice objects, use g_udev_client_query_by_subsystem(), g_udev_client_query_by_device_number(), g_udev_client_query_by_device_file(), g_udev_client_query_by_sysfs_path(), g_udev_client_query_by_subsystem_and_name() or the GUdevEnumerator type.

To listen to uevents, connect to the "uevent" signal.

Details

GUdevClient

typedef struct _GUdevClient GUdevClient;

The GUdevClient struct is opaque and should not be accessed directly.


struct GUdevClientClass

struct GUdevClientClass {
  GObjectClass   parent_class;

  /* signals */
  void (*uevent) (GUdevClient  *client,
                  const gchar  *action,
                  GUdevDevice  *device);
};

Class structure for GUdevClient.

GObjectClass parent_class;

Parent class.

uevent ()

Signal class handler for the "uevent" signal.

enum GUdevDeviceType

typedef enum {
  G_UDEV_DEVICE_TYPE_NONE = 0,
  G_UDEV_DEVICE_TYPE_BLOCK = 'b',
  G_UDEV_DEVICE_TYPE_CHAR = 'c',
} GUdevDeviceType;

Enumeration used to specify a the type of a device.

G_UDEV_DEVICE_TYPE_NONE

Device does not have a device file.

G_UDEV_DEVICE_TYPE_BLOCK

Device is a block device.

G_UDEV_DEVICE_TYPE_CHAR

Device is a character device.

GUdevDeviceNumber

typedef guint64 GUdevDeviceNumber; /* __UQUAD_TYPE */

Corresponds to the standard dev_t type as defined by POSIX (Until bug 584517 is resolved this work-around is needed).


g_udev_client_new ()

GUdevClient *       g_udev_client_new                   (const gchar * const *subsystems);

Constructs a GUdevClient object that can be used to query information about devices. Connect to the "uevent" signal to listen for uevents. Note that signals are emitted in the thread-default main loop of the thread that you call this constructor from.

subsystems :

A NULL terminated string array of subsystems to listen for uevents on, NULL to not listen on uevents at all, or an empty array to listen to uevents on all subsystems. See the documentation for the "subsystems" property for details on this parameter. [array zero-terminated=1][element-type utf8][transfer none][allow-none]

Returns :

A new GUdevClient object. Free with g_object_unref().

g_udev_client_query_by_subsystem ()

GList *             g_udev_client_query_by_subsystem    (GUdevClient *client,
                                                         const gchar *subsystem);

Gets all devices belonging to subsystem.

client :

A GUdevClient.

subsystem :

The subsystem to get devices for or NULL to get all devices. [allow-none]

Returns :

A list of GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. [element-type GUdevDevice][transfer full]

g_udev_client_query_by_device_number ()

GUdevDevice *       g_udev_client_query_by_device_number
                                                        (GUdevClient *client,
                                                         GUdevDeviceType type,
                                                         GUdevDeviceNumber number);

Looks up a device for a type and device number.

client :

A GUdevClient.

type :

A value from the GUdevDeviceType enumeration.

number :

A device number.

Returns :

A GUdevDevice object or NULL if the device was not found. Free with g_object_unref(). [transfer full]

g_udev_client_query_by_device_file ()

GUdevDevice *       g_udev_client_query_by_device_file  (GUdevClient *client,
                                                         const gchar *device_file);

Looks up a device for a device file.

client :

A GUdevClient.

device_file :

A device file.

Returns :

A GUdevDevice object or NULL if the device was not found. Free with g_object_unref(). [transfer full]

g_udev_client_query_by_sysfs_path ()

GUdevDevice *       g_udev_client_query_by_sysfs_path   (GUdevClient *client,
                                                         const gchar *sysfs_path);

Looks up a device for a sysfs path.

client :

A GUdevClient.

sysfs_path :

A sysfs path.

Returns :

A GUdevDevice object or NULL if the device was not found. Free with g_object_unref(). [transfer full]

g_udev_client_query_by_subsystem_and_name ()

GUdevDevice *       g_udev_client_query_by_subsystem_and_name
                                                        (GUdevClient *client,
                                                         const gchar *subsystem,
                                                         const gchar *name);

Looks up a device for a subsystem and name.

client :

A GUdevClient.

subsystem :

A subsystem name.

name :

The name of the device.

Returns :

A GUdevDevice object or NULL if the device was not found. Free with g_object_unref(). [transfer full]

Property Details

The "subsystems" property

  "subsystems"               GStrv                 : Read / Write / Construct Only

The subsystems to listen for uevents on.

To listen for only a specific DEVTYPE for a given SUBSYSTEM, use "subsystem/devtype". For example, to only listen for uevents where SUBSYSTEM is usb and DEVTYPE is usb_interface, use "usb/usb_interface".

If this property is NULL, then no events will be reported. If it's the empty array, events from all subsystems will be reported.

Signal Details

The "uevent" signal

void                user_function                      (GUdevClient *client,
                                                        gchar       *action,
                                                        GUdevDevice *device,
                                                        gpointer     user_data)      : Run Last

Emitted when client receives an uevent.

This signal is emitted in the thread-default main loop of the thread that client was created in.

client :

The GUdevClient receiving the event.

action :

The action for the uevent e.g. "add", "remove", "change", "move", etc.

device :

Details about the GUdevDevice the event is for.

user_data :

user data set when the signal handler was connected.
udev-182/src/gudev/docs/PaxHeaders.12492/Makefile.am0000644000521600052160000000013211731376104020253 xustar000000000000000030 mtime=1332083780.158115498 30 atime=1332086775.781186879 30 ctime=1332097354.180438947 udev-182/src/gudev/docs/Makefile.am0000664000521600052160000000707511731376104016670 0ustar00kaykay00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.10 at least. AUTOMAKE_OPTIONS = 1.10 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=gudev # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=$(top_srcdir)/src # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=g_udev # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/src/gudev/*.h CFILE_GLOB=$(top_srcdir)/src/gudev/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = \ $(DBUS_GLIB_CFLAGS) \ $(GLIB_CFLAGS) \ -I$(top_srcdir)/src/gudev \ -I$(top_builddir)/src/gudev GTKDOC_LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/libgudev-1.0.la # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += version.xml.in # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want your docs-status tested during 'make check' if ENABLE_GTK_DOC #TESTS_ENVIRONMENT = cd $(srcsrc) #TESTS = $(GTKDOC_CHECK) endif udev-182/src/gudev/docs/PaxHeaders.12492/gudev.types0000644000521600052160000000013211731430512020411 xustar000000000000000030 mtime=1332097354.249438949 30 atime=1332097354.248438949 30 ctime=1332097354.249438949 udev-182/src/gudev/docs/gudev.types0000664000521600052160000000014511731430512017015 0ustar00kaykay00000000000000g_udev_device_type_get_type g_udev_device_get_type g_udev_client_get_type g_udev_enumerator_get_type udev-182/src/gudev/docs/PaxHeaders.12492/gudev-sections.txt0000644000521600052160000000013211731430512021711 xustar000000000000000030 mtime=1332097354.254438949 30 atime=1332097321.320438164 30 ctime=1332097354.254438949 udev-182/src/gudev/docs/gudev-sections.txt0000664000521600052160000000535011731430512020320 0ustar00kaykay00000000000000
gudevclient GUdevClient GUdevClient GUdevClientClass GUdevDeviceType GUdevDeviceNumber g_udev_client_new g_udev_client_query_by_subsystem g_udev_client_query_by_device_number g_udev_client_query_by_device_file g_udev_client_query_by_sysfs_path g_udev_client_query_by_subsystem_and_name G_UDEV_CLIENT G_UDEV_IS_CLIENT G_UDEV_TYPE_CLIENT g_udev_client_get_type G_UDEV_CLIENT_CLASS G_UDEV_IS_CLIENT_CLASS G_UDEV_CLIENT_GET_CLASS GUdevClientPrivate
gudevdevice GUdevDevice GUdevDevice GUdevDeviceClass g_udev_device_get_subsystem g_udev_device_get_devtype g_udev_device_get_name g_udev_device_get_number g_udev_device_get_sysfs_path g_udev_device_get_driver g_udev_device_get_action g_udev_device_get_seqnum g_udev_device_get_device_type g_udev_device_get_device_number g_udev_device_get_device_file g_udev_device_get_device_file_symlinks g_udev_device_get_parent g_udev_device_get_parent_with_subsystem g_udev_device_get_tags g_udev_device_get_is_initialized g_udev_device_get_usec_since_initialized g_udev_device_get_property_keys g_udev_device_has_property g_udev_device_get_property g_udev_device_get_property_as_int g_udev_device_get_property_as_uint64 g_udev_device_get_property_as_double g_udev_device_get_property_as_boolean g_udev_device_get_property_as_strv g_udev_device_get_sysfs_attr g_udev_device_get_sysfs_attr_as_int g_udev_device_get_sysfs_attr_as_uint64 g_udev_device_get_sysfs_attr_as_double g_udev_device_get_sysfs_attr_as_boolean g_udev_device_get_sysfs_attr_as_strv G_UDEV_DEVICE G_UDEV_IS_DEVICE G_UDEV_TYPE_DEVICE g_udev_device_get_type G_UDEV_DEVICE_CLASS G_UDEV_IS_DEVICE_CLASS G_UDEV_DEVICE_GET_CLASS GUdevDevicePrivate
gudevenumerator GUdevEnumerator GUdevEnumerator GUdevEnumeratorClass g_udev_enumerator_new g_udev_enumerator_add_match_subsystem g_udev_enumerator_add_nomatch_subsystem g_udev_enumerator_add_match_sysfs_attr g_udev_enumerator_add_nomatch_sysfs_attr g_udev_enumerator_add_match_property g_udev_enumerator_add_match_name g_udev_enumerator_add_match_tag g_udev_enumerator_add_match_is_initialized g_udev_enumerator_add_sysfs_path g_udev_enumerator_execute G_UDEV_ENUMERATOR G_UDEV_IS_ENUMERATOR G_UDEV_TYPE_ENUMERATOR g_udev_enumerator_get_type G_UDEV_ENUMERATOR_CLASS G_UDEV_IS_ENUMERATOR_CLASS G_UDEV_ENUMERATOR_GET_CLASS GUdevEnumeratorPrivate
gudevmarshal g_udev_marshal_VOID__STRING_OBJECT
gudevenumtypes G_TYPE_UDEV_DEVICE_TYPE g_udev_device_type_get_type
udev-182/src/gudev/docs/PaxHeaders.12492/gudev-docs.xml0000644000521600052160000000013211711107662021000 xustar000000000000000030 mtime=1327796146.954827019 30 atime=1332097321.320438164 30 ctime=1332097354.197438947 udev-182/src/gudev/docs/gudev-docs.xml0000664000521600052160000000570211711107662017410 0ustar00kaykay00000000000000 ]> GUDev Reference Manual For GUdev version &version; David Zeuthen
davidz@redhat.com
Bastien Nocera
hadess@hadess.net
2011 The GUDev Authors Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy of the GNU Free Documentation License from the Free Software Foundation by visiting their Web site or by writing to:
The Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any freedesktop.org documentation, and those trademarks are made aware to the members of the freedesktop.org Project, the names have been printed in caps or initial caps.
API Reference This part presents the class and function reference for the libgudev library. Object Hierarchy Index Index of new symbols in 165
udev-182/src/gudev/docs/PaxHeaders.12492/gudev-overrides.txt0000644000521600052160000000013211731430450022065 xustar000000000000000030 mtime=1332097320.177438137 30 atime=1332097321.325438166 30 ctime=1332097354.205438949 udev-182/src/gudev/docs/gudev-overrides.txt0000664000521600052160000000000011731430450020457 0ustar00kaykay00000000000000udev-182/src/gudev/docs/PaxHeaders.12492/Makefile.in0000644000521600052160000000013211731430314020256 xustar000000000000000030 mtime=1332097228.894435963 30 atime=1332097295.048437538 30 ctime=1332097354.185438947 udev-182/src/gudev/docs/Makefile.in0000664000521600052160000005703511731430314016674 0ustar00kaykay00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make subdir = src/gudev/docs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLKID_CFLAGS = @BLKID_CFLAGS@ BLKID_LIBS = @BLKID_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIRMWARE_PATH = @FIRMWARE_PATH@ GIRDIR = @GIRDIR@ GIRTYPELIBDIR = @GIRTYPELIBDIR@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GPERF = @GPERF@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ G_IR_COMPILER = @G_IR_COMPILER@ G_IR_GENERATE = @G_IR_GENERATE@ G_IR_SCANNER = @G_IR_SCANNER@ HTML_DIR = @HTML_DIR@ INCLUDE_PREFIX = @INCLUDE_PREFIX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ KMOD_CFLAGS = @KMOD_CFLAGS@ KMOD_LIBS = @KMOD_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCI_DATABASE = @PCI_DATABASE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USBUTILS_CFLAGS = @USBUTILS_CFLAGS@ USBUTILS_LIBS = @USBUTILS_LIBS@ USB_DATABASE = @USB_DATABASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ my_CFLAGS = @my_CFLAGS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ rootlib_execdir = @rootlib_execdir@ rootprefix = @rootprefix@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ systemdsystemunitdir = @systemdsystemunitdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # We require automake 1.10 at least. AUTOMAKE_OPTIONS = 1.10 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = gudev # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR = $(top_srcdir)/src # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=g_udev # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = --path=$(abs_srcdir) --path=$(abs_builddir) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/src/gudev/*.h CFILE_GLOB = $(top_srcdir)/src/gudev/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES = # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = \ $(DBUS_GLIB_CFLAGS) \ $(GLIB_CFLAGS) \ -I$(top_srcdir)/src/gudev \ -I$(top_builddir)/src/gudev GTKDOC_LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/libgudev-1.0.la @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gudev/docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/gudev/docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/gtk-doc.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local dist-hook distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local @ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) @ENABLE_GTK_DOC_FALSE@all-local: docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" @ENABLE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want your docs-status tested during 'make check' #TESTS_ENVIRONMENT = cd $(srcsrc) #TESTS = $(GTKDOC_CHECK) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: udev-182/src/gudev/PaxHeaders.12492/gudevprivate.h0000644000521600052160000000013211711107662020144 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082819.843092614 30 ctime=1332097352.979438919 udev-182/src/gudev/gudevprivate.h0000664000521600052160000000250211711107662016547 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_PRIVATE_H__ #define __G_UDEV_PRIVATE_H__ #include #include G_BEGIN_DECLS GUdevDevice * _g_udev_device_new (struct udev_device *udevice); struct udev *_g_udev_client_get_udev (GUdevClient *client); G_END_DECLS #endif /* __G_UDEV_PRIVATE_H__ */ udev-182/src/gudev/PaxHeaders.12492/gudev-1.0.pc.in0000644000521600052160000000013211711107662017625 xustar000000000000000030 mtime=1327796146.954827019 30 atime=1332083662.263112687 30 ctime=1332097353.580438933 udev-182/src/gudev/gudev-1.0.pc.in0000664000521600052160000000040011711107662016223 0ustar00kaykay00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: gudev-1.0 Description: GObject bindings for libudev Version: @VERSION@ Requires: glib-2.0, gobject-2.0 Libs: -L${libdir} -lgudev-1.0 Cflags: -I${includedir}/gudev-1.0 udev-182/src/gudev/PaxHeaders.12492/gudevmarshal.list0000644000521600052160000000013211711107662020645 xustar000000000000000030 mtime=1327796146.956827017 30 atime=1332082787.841091851 30 ctime=1332097353.599438933 udev-182/src/gudev/gudevmarshal.list0000664000521600052160000000002311711107662017244 0ustar00kaykay00000000000000VOID:STRING,OBJECT udev-182/src/gudev/PaxHeaders.12492/COPYING0000644000521600052160000000013211711107662016321 xustar000000000000000030 mtime=1327796146.953827021 30 atime=1332083870.391117647 30 ctime=1332097353.590438933 udev-182/src/gudev/COPYING0000664000521600052160000006363611711107662014743 0ustar00kaykay00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! udev-182/src/gudev/PaxHeaders.12492/seed-example.js0000644000521600052160000000013211711107662020175 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083870.460117648 30 ctime=1332097353.636438936 udev-182/src/gudev/seed-example.js0000775000521600052160000000516211711107662016610 0ustar00kaykay00000000000000#!/usr/bin/env seed // seed example const GLib = imports.gi.GLib; const GUdev = imports.gi.GUdev; function print_device (device) { print (" subsystem: " + device.get_subsystem ()); print (" devtype: " + device.get_devtype ()); print (" name: " + device.get_name ()); print (" number: " + device.get_number ()); print (" sysfs_path: " + device.get_sysfs_path ()); print (" driver: " + device.get_driver ()); print (" action: " + device.get_action ()); print (" seqnum: " + device.get_seqnum ()); print (" device type: " + device.get_device_type ()); print (" device number: " + device.get_device_number ()); print (" device file: " + device.get_device_file ()); print (" device file symlinks: " + device.get_device_file_symlinks ()); print (" foo: " + device.get_sysfs_attr_as_strv ("stat")); var keys = device.get_property_keys (); for (var n = 0; n < keys.length; n++) { print (" " + keys[n] + "=" + device.get_property (keys[n])); } } function on_uevent (client, action, device) { print ("action " + action + " on device " + device.get_sysfs_path()); print_device (device); print (""); } var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]}); client.signal.connect ("uevent", on_uevent); var block_devices = client.query_by_subsystem ("block"); for (var n = 0; n < block_devices.length; n++) { print ("block device: " + block_devices[n].get_device_file ()); } var d; d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810); if (d == null) { print ("query_by_device_number 0x810 -> null"); } else { print ("query_by_device_number 0x810 -> " + d.get_device_file ()); dd = d.get_parent_with_subsystem ("usb", null); print_device (dd); print ("--------------------------------------------------------------------------"); while (d != null) { print_device (d); print (""); d = d.get_parent (); } } d = client.query_by_sysfs_path ("/sys/block/sda/sda1"); print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ()); d = client.query_by_subsystem_and_name ("block", "sda2"); print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ()); d = client.query_by_device_file ("/dev/sda"); print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ()); d = client.query_by_device_file ("/dev/block/8:0"); print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ()); var mainloop = GLib.main_loop_new (); GLib.main_loop_run (mainloop); udev-182/src/gudev/PaxHeaders.12492/gudevclient.h0000644000521600052160000000013211711107662017750 xustar000000000000000030 mtime=1327796146.955827018 30 atime=1332082819.745092611 30 ctime=1332097352.729438913 udev-182/src/gudev/gudevclient.h0000664000521600052160000000750111711107662016357 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_CLIENT_H__ #define __G_UDEV_CLIENT_H__ #include G_BEGIN_DECLS #define G_UDEV_TYPE_CLIENT (g_udev_client_get_type ()) #define G_UDEV_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_CLIENT, GUdevClient)) #define G_UDEV_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_CLIENT, GUdevClientClass)) #define G_UDEV_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_CLIENT)) #define G_UDEV_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_CLIENT)) #define G_UDEV_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_CLIENT, GUdevClientClass)) typedef struct _GUdevClientClass GUdevClientClass; typedef struct _GUdevClientPrivate GUdevClientPrivate; /** * GUdevClient: * * The #GUdevClient struct is opaque and should not be accessed directly. */ struct _GUdevClient { GObject parent; /*< private >*/ GUdevClientPrivate *priv; }; /** * GUdevClientClass: * @parent_class: Parent class. * @uevent: Signal class handler for the #GUdevClient::uevent signal. * * Class structure for #GUdevClient. */ struct _GUdevClientClass { GObjectClass parent_class; /* signals */ void (*uevent) (GUdevClient *client, const gchar *action, GUdevDevice *device); /*< private >*/ /* Padding for future expansion */ void (*reserved1) (void); void (*reserved2) (void); void (*reserved3) (void); void (*reserved4) (void); void (*reserved5) (void); void (*reserved6) (void); void (*reserved7) (void); void (*reserved8) (void); }; GType g_udev_client_get_type (void) G_GNUC_CONST; GUdevClient *g_udev_client_new (const gchar* const *subsystems); GList *g_udev_client_query_by_subsystem (GUdevClient *client, const gchar *subsystem); GUdevDevice *g_udev_client_query_by_device_number (GUdevClient *client, GUdevDeviceType type, GUdevDeviceNumber number); GUdevDevice *g_udev_client_query_by_device_file (GUdevClient *client, const gchar *device_file); GUdevDevice *g_udev_client_query_by_sysfs_path (GUdevClient *client, const gchar *sysfs_path); GUdevDevice *g_udev_client_query_by_subsystem_and_name (GUdevClient *client, const gchar *subsystem, const gchar *name); G_END_DECLS #endif /* __G_UDEV_CLIENT_H__ */ udev-182/src/gudev/PaxHeaders.12492/gudevdevice.h0000644000521600052160000000013211711107662017731 xustar000000000000000030 mtime=1327796146.955827018 30 atime=1332082819.842092614 30 ctime=1332097352.739438913 udev-182/src/gudev/gudevdevice.h0000664000521600052160000001441011711107662016335 0ustar00kaykay00000000000000/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright (C) 2008 David Zeuthen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef __G_UDEV_DEVICE_H__ #define __G_UDEV_DEVICE_H__ #include G_BEGIN_DECLS #define G_UDEV_TYPE_DEVICE (g_udev_device_get_type ()) #define G_UDEV_DEVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_DEVICE, GUdevDevice)) #define G_UDEV_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_DEVICE, GUdevDeviceClass)) #define G_UDEV_IS_DEVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_DEVICE)) #define G_UDEV_IS_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_DEVICE)) #define G_UDEV_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_DEVICE, GUdevDeviceClass)) typedef struct _GUdevDeviceClass GUdevDeviceClass; typedef struct _GUdevDevicePrivate GUdevDevicePrivate; /** * GUdevDevice: * * The #GUdevDevice struct is opaque and should not be accessed directly. */ struct _GUdevDevice { GObject parent; /*< private >*/ GUdevDevicePrivate *priv; }; /** * GUdevDeviceClass: * @parent_class: Parent class. * * Class structure for #GUdevDevice. */ struct _GUdevDeviceClass { GObjectClass parent_class; /*< private >*/ /* Padding for future expansion */ void (*reserved1) (void); void (*reserved2) (void); void (*reserved3) (void); void (*reserved4) (void); void (*reserved5) (void); void (*reserved6) (void); void (*reserved7) (void); void (*reserved8) (void); }; GType g_udev_device_get_type (void) G_GNUC_CONST; gboolean g_udev_device_get_is_initialized (GUdevDevice *device); guint64 g_udev_device_get_usec_since_initialized (GUdevDevice *device); const gchar *g_udev_device_get_subsystem (GUdevDevice *device); const gchar *g_udev_device_get_devtype (GUdevDevice *device); const gchar *g_udev_device_get_name (GUdevDevice *device); const gchar *g_udev_device_get_number (GUdevDevice *device); const gchar *g_udev_device_get_sysfs_path (GUdevDevice *device); const gchar *g_udev_device_get_driver (GUdevDevice *device); const gchar *g_udev_device_get_action (GUdevDevice *device); guint64 g_udev_device_get_seqnum (GUdevDevice *device); GUdevDeviceType g_udev_device_get_device_type (GUdevDevice *device); GUdevDeviceNumber g_udev_device_get_device_number (GUdevDevice *device); const gchar *g_udev_device_get_device_file (GUdevDevice *device); const gchar* const *g_udev_device_get_device_file_symlinks (GUdevDevice *device); GUdevDevice *g_udev_device_get_parent (GUdevDevice *device); GUdevDevice *g_udev_device_get_parent_with_subsystem (GUdevDevice *device, const gchar *subsystem, const gchar *devtype); const gchar* const *g_udev_device_get_property_keys (GUdevDevice *device); gboolean g_udev_device_has_property (GUdevDevice *device, const gchar *key); const gchar *g_udev_device_get_property (GUdevDevice *device, const gchar *key); gint g_udev_device_get_property_as_int (GUdevDevice *device, const gchar *key); guint64 g_udev_device_get_property_as_uint64 (GUdevDevice *device, const gchar *key); gdouble g_udev_device_get_property_as_double (GUdevDevice *device, const gchar *key); gboolean g_udev_device_get_property_as_boolean (GUdevDevice *device, const gchar *key); const gchar* const *g_udev_device_get_property_as_strv (GUdevDevice *device, const gchar *key); const gchar *g_udev_device_get_sysfs_attr (GUdevDevice *device, const gchar *name); gint g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device, const gchar *name); guint64 g_udev_device_get_sysfs_attr_as_uint64 (GUdevDevice *device, const gchar *name); gdouble g_udev_device_get_sysfs_attr_as_double (GUdevDevice *device, const gchar *name); gboolean g_udev_device_get_sysfs_attr_as_boolean (GUdevDevice *device, const gchar *name); const gchar* const *g_udev_device_get_sysfs_attr_as_strv (GUdevDevice *device, const gchar *name); const gchar* const *g_udev_device_get_tags (GUdevDevice *device); G_END_DECLS #endif /* __G_UDEV_DEVICE_H__ */ udev-182/src/PaxHeaders.12492/udevd.80000644000521600052160000000013111731430437015354 xustar000000000000000029 mtime=1332097311.08943792 30 atime=1332097351.920438893 30 ctime=1332097352.768438913 udev-182/src/udevd.80000664000521600052160000000670111731430437013765 0ustar00kaykay00000000000000'\" t .\" Title: udevd .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 03/18/2012 .\" Manual: udevd .\" Source: udev .\" Language: English .\" .TH "UDEVD" "8" "03/18/2012" "udev" "udevd" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" udevd \- event managing daemon .SH "SYNOPSIS" .HP \w'\fBudevd\fR\ 'u \fBudevd\fR [\fB\-\-daemon\fR] [\fB\-\-debug\fR] [\fB\-\-children\-max=\fR] [\fB\-\-exec\-delay=\fR] [\fB\-\-resolve\-names=early|late|never\fR] [\fB\-\-version\fR] [\fB\-\-help\fR] .SH "DESCRIPTION" .PP udevd listens to kernel uevents\&. For every event, udevd executes matching instructions specified in udev rules\&. See \fBudev\fR(7)\&. .PP On startup the content of the directory /usr/lib/udev/devices is copied to /dev\&. If kernel modules specify static device nodes, these nodes are created even without a corresponding kernel device, to allow on\-demand loading of kernel modules\&. Matching permissions specified in udev rules are applied to these static device nodes\&. .PP The behavior of the running daemon can be changed with \fBudevadm control\fR\&. .SH "OPTIONS" .PP \fB\-\-daemon\fR .RS 4 Detach and run in the background\&. .RE .PP \fB\-\-debug\fR .RS 4 Print debug messages to stderr\&. .RE .PP \fB\-\-children\-max=\fR .RS 4 Limit the number of parallel executed events\&. .RE .PP \fB\-\-exec\-delay=\fR .RS 4 Number of seconds to delay the execution of RUN instructions\&. This might be useful when debugging system crashes during coldplug cause by loading non\-working kernel modules\&. .RE .PP \fB\-\-resolve\-names=\fR .RS 4 Specify when udevd should resolve names of users and groups\&. When set to \fBearly\fR (the default) names will be resolved when the rules are parsed\&. When set to \fBlate\fR names will be resolved for every event\&. When set to \fBnever\fR names will never be resolved and all devices will be owned by root\&. .RE .PP \fB\-\-version\fR .RS 4 Print version number\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SH "ENVIRONMENT" .PP \fIUDEV_LOG=\fR .RS 4 Set the logging priority\&. .RE .SH "KERNEL COMMAND LINE" .PP \fIudev\&.log\-priority=\fR .RS 4 Set the logging priority\&. .RE .PP \fIudev\&.children\-max=\fR .RS 4 Limit the number of parallel executed events\&. .RE .PP \fIudev\&.exec\-delay=\fR .RS 4 Number of seconds to delay the execution of RUN instructions\&. This might be useful when debugging system crashes during coldplug cause by loading non\-working kernel modules\&. .RE .SH "AUTHOR" .PP Written by Kay Sievers kay\&.sievers@vrfy\&.org\&. .SH "SEE ALSO" .PP \fBudev\fR(7), \fBudevadm\fR(8) udev-182/src/PaxHeaders.12492/libudev-selinux-private.c0000644000521600052160000000013211711107662021107 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083325.351104659 30 ctime=1332097353.079438921 udev-182/src/libudev-selinux-private.c0000664000521600052160000000640011711107662017513 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static int selinux_enabled; security_context_t selinux_prev_scontext; void udev_selinux_init(struct udev *udev) { /* record the present security context */ selinux_enabled = (is_selinux_enabled() > 0); info(udev, "selinux=%i\n", selinux_enabled); if (!selinux_enabled) return; matchpathcon_init_prefix(NULL, udev_get_dev_path(udev)); if (getfscreatecon(&selinux_prev_scontext) < 0) { err(udev, "getfscreatecon failed\n"); selinux_prev_scontext = NULL; } } void udev_selinux_exit(struct udev *udev) { if (!selinux_enabled) return; freecon(selinux_prev_scontext); selinux_prev_scontext = NULL; } void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode) { security_context_t scontext = NULL; if (!selinux_enabled) return; if (matchpathcon(file, mode, &scontext) < 0) { err(udev, "matchpathcon(%s) failed\n", file); return; } if (lsetfilecon(file, scontext) < 0) err(udev, "setfilecon %s failed: %m\n", file); freecon(scontext); } void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode) { security_context_t scontext = NULL; if (!selinux_enabled) return; if (matchpathcon(file, mode, &scontext) < 0) { err(udev, "matchpathcon(%s) failed\n", file); return; } if (setfscreatecon(scontext) < 0) err(udev, "setfscreatecon %s failed: %m\n", file); freecon(scontext); } void udev_selinux_resetfscreatecon(struct udev *udev) { if (!selinux_enabled) return; if (setfscreatecon(selinux_prev_scontext) < 0) err(udev, "setfscreatecon failed: %m\n"); } void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode) { char filename[UTIL_PATH_SIZE]; if (!selinux_enabled) return; /* resolve relative filename */ if (file[0] != '/') { char procfd[UTIL_PATH_SIZE]; char target[UTIL_PATH_SIZE]; ssize_t len; snprintf(procfd, sizeof(procfd), "/proc/%u/fd/%u", getpid(), dfd); len = readlink(procfd, target, sizeof(target)); if (len <= 0 || len == sizeof(target)) return; target[len] = '\0'; util_strscpyl(filename, sizeof(filename), target, "/", file, NULL); file = filename; } udev_selinux_setfscreatecon(udev, file, mode); } udev-182/src/PaxHeaders.12492/udevadm.80000644000521600052160000000013111731430437015672 xustar000000000000000029 mtime=1332097311.07043792 30 atime=1332097351.920438893 30 ctime=1332097352.760438913 udev-182/src/udevadm.80000664000521600052160000002435311731430437014306 0ustar00kaykay00000000000000'\" t .\" Title: udevadm .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 03/18/2012 .\" Manual: udevadm .\" Source: udev .\" Language: English .\" .TH "UDEVADM" "8" "03/18/2012" "udev" "udevadm" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" udevadm \- udev management tool .SH "SYNOPSIS" .HP \w'\fBudevadm\fR\ 'u \fBudevadm\fR [\fB\-\-debug\fR] [\fB\-\-version\fR] [\fB\-\-help\fR] .HP \w'\fBudevadm\ info\ \fR\fB\fIoptions\fR\fR\ 'u \fBudevadm info \fR\fB\fIoptions\fR\fR .HP \w'\fBudevadm\ trigger\ \fR\fB[options]\fR\ 'u \fBudevadm trigger \fR\fB[options]\fR .HP \w'\fBudevadm\ settle\ \fR\fB[options]\fR\ 'u \fBudevadm settle \fR\fB[options]\fR .HP \w'\fBudevadm\ control\ \fR\fB\fIcommand\fR\fR\ 'u \fBudevadm control \fR\fB\fIcommand\fR\fR .HP \w'\fBudevadm\ monitor\ \fR\fB[options]\fR\ 'u \fBudevadm monitor \fR\fB[options]\fR .HP \w'\fBudevadm\ test\ \fR\fB[options]\fR\fB\ \fR\fB\fIdevpath\fR\fR\ 'u \fBudevadm test \fR\fB[options]\fR\fB \fR\fB\fIdevpath\fR\fR .HP \w'\fBudevadm\ test\-builtin\ \fR\fB[options]\fR\fB\ \fR\fB\fIcommand\fR\fR\fB\ \fR\fB\fIdevpath\fR\fR\ 'u \fBudevadm test\-builtin \fR\fB[options]\fR\fB \fR\fB\fIcommand\fR\fR\fB \fR\fB\fIdevpath\fR\fR .SH "DESCRIPTION" .PP udevadm expects a command and command specific options\&. It controls the runtime behavior of udev, requests kernel events, manages the event queue, and provides simple debugging mechanisms\&. .SH "OPTIONS" .PP \fB\-\-debug\fR .RS 4 Print debug messages to stderr\&. .RE .PP \fB\-\-version\fR .RS 4 Print version number\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm info \fIoptions\fR" .PP Queries the udev database for device information stored in the udev database\&. It can also query the properties of a device from its sysfs representation to help creating udev rules that match this device\&. .PP \fB\-\-query=\fR\fB\fItype\fR\fR .RS 4 Query the database for specified type of device data\&. It needs the \fB\-\-path\fR or \fB\-\-name\fR to identify the specified device\&. Valid queries are: \fBname\fR, \fBsymlink\fR, \fBpath\fR, \fBproperty\fR, \fBall\fR\&. .RE .PP \fB\-\-path=\fR\fB\fIdevpath\fR\fR .RS 4 The devpath of the device to query\&. .RE .PP \fB\-\-name=\fR\fB\fIfile\fR\fR .RS 4 The name of the device node or a symlink to query .RE .PP \fB\-\-root\fR .RS 4 The udev root directory: /dev\&. If used in conjunction with a \fBname\fR or \fBsymlink\fR query, the query returns the absolute path including the root directory\&. .RE .PP \fB\-\-run\fR .RS 4 The udev runtime directory: /run/udev\&. .RE .PP \fB\-\-attribute\-walk\fR .RS 4 Print all sysfs properties of the specified device that can be used in udev rules to match the specified device\&. It prints all devices along the chain, up to the root of sysfs that can be used in udev rules\&. .RE .PP \fB\-\-export\fR .RS 4 Print output as key/value pairs\&. Values are enclosed in single quotes\&. .RE .PP \fB\-\-export\-prefix=\fR\fB\fIname\fR\fR .RS 4 Add a prefix to the key name of exported values\&. .RE .PP \fB\-\-device\-id\-of\-file=\fR\fB\fIfile\fR\fR .RS 4 Print major/minor numbers of the underlying device, where the file lives on\&. .RE .PP \fB\-\-export\-db\fR .RS 4 Export the content of the udev database\&. .RE .PP \fB\-\-cleanup\-db\fR .RS 4 Cleanup the udev database\&. .RE .PP \fB\-\-version\fR .RS 4 Print version\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm trigger [options]" .PP Request device events from the kernel\&. Primarily used to replay events at system coldplug time\&. .PP \fB\-\-verbose\fR .RS 4 Print the list of devices which will be triggered\&. .RE .PP \fB\-\-dry\-run\fR .RS 4 Do not actually trigger the event\&. .RE .PP \fB\-\-type=\fR\fB\fItype\fR\fR .RS 4 Trigger a specific type of devices\&. Valid types are: \fBdevices\fR, \fBsubsystems\fR\&. The default value is \fBdevices\fR\&. .RE .PP \fB\-\-action=\fR\fB\fIaction\fR\fR .RS 4 Type of event to be triggered\&. The default value is \fBchange\fR\&. .RE .PP \fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR .RS 4 Trigger events for devices which belong to a matching subsystem\&. This option can be specified multiple times and supports shell style pattern matching\&. .RE .PP \fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR .RS 4 Do not trigger events for devices which belong to a matching subsystem\&. This option can be specified multiple times and supports shell style pattern matching\&. .RE .PP \fB\-\-attr\-match=\fR\fB\fIattribute\fR\fR\fB=\fR\fB\fIvalue\fR\fR .RS 4 Trigger events for devices with a matching sysfs attribute\&. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching\&. If no value is specified, the existence of the sysfs attribute is checked\&. This option can be specified multiple times\&. .RE .PP \fB\-\-attr\-nomatch=\fR\fB\fIattribute\fR\fR\fB=\fR\fB\fIvalue\fR\fR .RS 4 Do not trigger events for devices with a matching sysfs attribute\&. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching\&. If no value is specified, the existence of the sysfs attribute is checked\&. This option can be specified multiple times\&. .RE .PP \fB\-\-property\-match=\fR\fB\fIproperty\fR\fR\fB=\fR\fB\fIvalue\fR\fR .RS 4 Trigger events for devices with a matching property value\&. This option can be specified multiple times and supports shell style pattern matching\&. .RE .PP \fB\-\-tag\-match=\fR\fB\fIproperty\fR\fR .RS 4 Trigger events for devices with a matching tag\&. This option can be specified multiple times\&. .RE .PP \fB\-\-sysname\-match=\fR\fB\fIname\fR\fR .RS 4 Trigger events for devices with a matching sys device name\&. This option can be specified multiple times and supports shell style pattern matching\&. .RE .PP \fB\-\-parent\-match=\fR\fB\fIsyspath\fR\fR .RS 4 Trigger events for all children of a given device\&. .RE .SS "udevadm settle [options]" .PP Watches the udev event queue, and exits if all current events are handled\&. .PP \fB\-\-timeout=\fR\fB\fIseconds\fR\fR .RS 4 Maximum number of seconds to wait for the event queue to become empty\&. The default value is 120 seconds\&. A value of 0 will check if the queue is empty and always return immediately\&. .RE .PP \fB\-\-seq\-start=\fR\fB\fIseqnum\fR\fR .RS 4 Wait only for events after the given sequence number\&. .RE .PP \fB\-\-seq\-end=\fR\fB\fIseqnum\fR\fR .RS 4 Wait only for events before the given sequence number\&. .RE .PP \fB\-\-exit\-if\-exists=\fR\fB\fIfile\fR\fR .RS 4 Stop waiting if file exists\&. .RE .PP \fB\-\-quiet\fR .RS 4 Do not print any output, like the remaining queue entries when reaching the timeout\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm control \fIcommand\fR" .PP Modify the internal state of the running udev daemon\&. .PP \fB\-\-exit\fR .RS 4 Signal and wait for udevd to exit\&. .RE .PP \fB\-\-log\-priority=\fR\fB\fIvalue\fR\fR .RS 4 Set the internal log level of udevd\&. Valid values are the numerical syslog priorities or their textual representations: \fBerr\fR, \fBinfo\fR and \fBdebug\fR\&. .RE .PP \fB\-\-stop\-exec\-queue\fR .RS 4 Signal udevd to stop executing new events\&. Incoming events will be queued\&. .RE .PP \fB\-\-start\-exec\-queue\fR .RS 4 Signal udevd to enable the execution of events\&. .RE .PP \fB\-\-reload\fR .RS 4 Signal udevd to reload the rules files and other databases like the kernel module index\&. Reloading rules and databases does not apply any changes to already existing devices; the new configuration will only be applied to new events\&. .RE .PP \fB\-\-property=\fR\fB\fIKEY\fR\fR\fB=\fR\fB\fIvalue\fR\fR .RS 4 Set a global property for all events\&. .RE .PP \fB\-\-children\-max=\fR\fIvalue\fR .RS 4 Set the maximum number of events, udevd will handle at the same time\&. .RE .PP \fB\-\-timeout=\fR\fIseconds\fR .RS 4 The maximum number seconds to wait for a reply from udevd\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm monitor [options]" .PP Listens to the kernel uevents and events sent out by a udev rule and prints the devpath of the event to the console\&. It can be used to analyze the event timing, by comparing the timestamps of the kernel uevent and the udev event\&. .PP \fB\-\-kernel\fR .RS 4 Print the kernel uevents\&. .RE .PP \fB\-\-udev\fR .RS 4 Print the udev event after the rule processing\&. .RE .PP \fB\-\-property\fR .RS 4 Also print the properties of the event\&. .RE .PP \fB\-\-subsystem\-match=\fR\fB\fIstring[/string]\fR\fR .RS 4 Filter events by subsystem[/devtype]\&. Only udev events with a matching subsystem value will pass\&. .RE .PP \fB\-\-tag\-match=\fR\fB\fIstring\fR\fR .RS 4 Filter events by property\&. Only udev events with a given tag attached will pass\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm test [options] \fIdevpath\fR" .PP Simulate a udev event run for the given device, and print debug output\&. .PP \fB\-\-action=\fR\fB\fIstring\fR\fR .RS 4 The action string\&. .RE .PP \fB\-\-subsystem=\fR\fB\fIstring\fR\fR .RS 4 The subsystem string\&. .RE .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SS "udevadm test\-builtin [options] \fIcommand\fR \fIdevpath\fR" .PP Run a built\-in command for the given device, and print debug output\&. .PP \fB\-\-help\fR .RS 4 Print help text\&. .RE .SH "AUTHOR" .PP Written by Kay Sievers kay\&.sievers@vrfy\&.org\&. .SH "SEE ALSO" .PP \fBudev\fR(7) \fBudevd\fR(8) udev-182/src/PaxHeaders.12492/udev.html0000644000521600052160000000013211731430437016006 xustar000000000000000030 mtime=1332097311.313437926 30 atime=1332097311.313437926 30 ctime=1332097352.036438897 udev-182/src/udev.html0000664000521600052160000005614511731430437014425 0ustar00kaykay00000000000000 udev

Name

udev — Linux dynamic device management

Configuration

udev configuration files are placed in /etc/udev and /usr/lib/udev. All empty lines or lines beginning with '#' are ignored.

Rules files

The udev rules are read from the files located in the system rules directory /usr/lib/udev/rules.d, the volatile runtime directory /run/udev/rules.d and the local administration directory /etc/udev/rules.d. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical file names replace each other. Files in /etc have the highest priority, files in /run take precedence over files with the same name in /lib. This can be used to override a system-supplied rules file with a local file if needed; a symlink in /etc with the same name as a rules file in /lib, pointing to /dev/null, disables the rules file entirely.

Rule files must have the extension .rules; other extensions are ignored.

Every line in the rules file contains at least one key-value pair. There are two kind of keys: match and assignment. If all match keys are matching against its value, the rule gets applied and the assignment keys get the specified value assigned.

A matching rule may rename a network interface, add symlinks pointing to the device node, or run a specified program as part of the event handling.

A rule consists of a comma-separated list of one or more key-value pairs. Each key has a distinct operation, depending on the used operator. Valid operators are:

==

Compare for equality.

!=

Compare for inequality.

=

Assign a value to a key. Keys that represent a list are reset and only this single value is assigned.

+=

Add the value to a key that holds a list of entries.

:=

Assign a value to a key finally; disallow any later changes.

The following key names can be used to match against device properties. Some of the keys also match against properties of the parent devices in sysfs, not only the device that has generated the event. If multiple keys that match a parent device are specified in a single rule, all these keys must match at one and the same parent device.

ACTION

Match the name of the event action.

DEVPATH

Match the devpath of the event device.

KERNEL

Match the name of the event device.

NAME

Match the name of a network interface. It can be used once the NAME key has been set in one of the preceding rules.

SYMLINK

Match the name of a symlink targeting the node. It can be used once a SYMLINK key has been set in one of the preceding rules. There may be multiple symlinks; only one needs to match.

SUBSYSTEM

Match the subsystem of the event device.

DRIVER

Match the driver name of the event device. Only set this key for devices which are bound to a driver at the time the event is generated.

ATTR{filename}

Match sysfs attribute values of the event device. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace.

KERNELS

Search the devpath upwards for a matching device name.

SUBSYSTEMS

Search the devpath upwards for a matching device subsystem name.

DRIVERS

Search the devpath upwards for a matching device driver name.

ATTRS{filename}

Search the devpath upwards for a device with matching sysfs attribute values. If multiple ATTRS matches are specified, all of them must match on the same device. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace.

TAGS

Search the devpath upwards for a device with matching tag.

ENV{key}

Match against a device property value.

TAG

Match against a device tag.

TEST{octal mode mask}

Test the existence of a file. An octal mode mask can be specified if needed.

PROGRAM

Execute a program to determine whether there is a match; the key is true if the program returns successfully. The device properties are made available to the executed program in the environment. The program's stdout is available in the RESULT key.

RESULT

Match the returned string of the last PROGRAM call. This key can be used in the same or in any later rule after a PROGRAM call.

Most of the fields support shell-style pattern matching. The following pattern characters are supported:

*

Matches zero or more characters.

?

Matches any single character.

[]

Matches any single character specified within the brackets. For example, the pattern string 'tty[SR]' would match either 'ttyS' or 'ttyR'. Ranges are also supported via the '-' character. For example, to match on the range of all digits, the pattern [0-9] could be used. If the first character following the '[' is a '!', any characters not enclosed are matched.

The following keys can get values assigned:

NAME

The name to use for a network interface. The name of a device node can not be changed by udev, only additional symlinks can be created.

SYMLINK

The name of a symlink targeting the node. Every matching rule adds this value to the list of symlinks to be created. Multiple symlinks may be specified by separating the names by the space character. In case multiple devices claim the same name, the link always points to the device with the highest link_priority. If the current device goes away, the links are re-evaluated and the device with the next highest link_priority becomes the owner of the link. If no link_priority is specified, the order of the devices (and which one of them owns the link) is undefined. Also, symlink names must never conflict with the kernel's default device node names, as that would result in unpredictable behavior.

OWNER, GROUP, MODE

The permissions for the device node. Every specified value overrides the compiled-in default value.

ATTR{key}

The value that should be written to a sysfs attribute of the event device.

ENV{key}

Set a device property value. Property names with a leading '.' are neither stored in the database nor exported to events or external tools (run by, say, the PROGRAM match key).

TAG

Attach a tag to a device. This is used to filter events for users of libudev's monitor functionality, or to enumerate a group of tagged devices. The implementation can only work efficiently if only a few tags are attached to a device. It is only meant to be used in contexts with specific device filter requirements, and not as a general-purpose flag. Excessive use might result in inefficient event handling.

RUN

Add a program to the list of programs to be executed for a specific device.

If no absolute path is given, the program is expected to live in /usr/lib/udev, otherwise the absolute path must be specified. The program name and following arguments are separated by spaces. Single quotes can be used to specify arguments with spaces.

This can only be used for very short running tasks. Running an event process for a long period of time may block all further events for this or a dependent device. Starting daemons or other long running processes is not appropriate for udev.

LABEL

A named label to which a GOTO may jump.

GOTO

Jumps to the next LABEL with a matching name.

IMPORT{type}

Import a set of variables as device properties, depending on type:

program

Execute an external program specified as the assigned value and import its output, which must be in environment key format. Path specification, command/argument separation, and quoting work like in RUN.

file

Import a text file specified as the assigned value, the content of which must be in environment key format.

db

Import a single property specified as the assigned value from the current device database. This works only if the database is already populated by an earlier event.

cmdline

Import a single property from the kernel command line. For simple flags the value of the property is set to '1'.

parent

Import the stored keys from the parent device by reading the database entry of the parent device. The value assigned to IMPORT{parent} is used as a filter of key names to import (with the same shell-style pattern matching used for comparisons).

WAIT_FOR

Wait for a file to become available or until a timeout of 10 seconds expires. The path is relative to the sysfs device; if no path is specified, this waits for an attribute to appear.

OPTIONS

Rule and device options:

link_priority=value

Specify the priority of the created symlinks. Devices with higher priorities overwrite existing symlinks of other devices. The default is 0.

event_timeout=

Number of seconds an event waits for operations to finish before giving up and terminating itself.

string_escape=none|replace

Usually control and other possibly unsafe characters are replaced in strings used for device naming. The mode of replacement can be specified with this option.

static_node=

Apply the permissions specified in this rule to the static device node with the specified name. Static device nodes might be provided by kernel modules or copied from /usr/lib/udev/devices. These nodes might not have a corresponding kernel device at the time udevd is started; they can trigger automatic kernel module loading.

watch

Watch the device node with inotify; when the node is closed after being opened for writing, a change uevent is synthesized.

nowatch

Disable the watching of a device node with inotify.

The NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE and RUN fields support simple string substitutions. The RUN substitutions are performed after all rules have been processed, right before the program is executed, allowing for the use of device properties set by earlier matching rules. For all other fields, substitutions are performed while the individual rule is being processed. The available substitutions are:

$kernel, %k

The kernel name for this device.

$number, %n

The kernel number for this device. For example, 'sda3' has kernel number of '3'

$devpath, %p

The devpath of the device.

$id, %b

The name of the device matched while searching the devpath upwards for SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.

$driver

The driver name of the device matched while searching the devpath upwards for SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.

$attr{file}, %s{file}

The value of a sysfs attribute found at the device where all keys of the rule have matched. If the matching device does not have such an attribute, and a previous KERNELS, SUBSYSTEMS, DRIVERS, or ATTRS test selected a parent device, then the attribute from that parent device is used.

If the attribute is a symlink, the last element of the symlink target is returned as the value.

$env{key}, %E{key}

A device property value.

$major, %M

The kernel major number for the device.

$minor, %m

The kernel minor number for the device.

$result, %c

The string returned by the external program requested with PROGRAM. A single part of the string, separated by a space character, may be selected by specifying the part number as an attribute: %c{N}. If the number is followed by the '+' character, this part plus all remaining parts of the result string are substituted: %c{N+}

$parent, %P

The node name of the parent device.

$name

The current name of the device. If not changed by a rule, it is the name of the kernel device.

$links

A space-separated list of the current symlinks. The value is only set during a remove event or if an earlier rule assigned a value.

$root, %r

The udev_root value.

$sys, %S

The sysfs mount point.

$devnode, %N

The name of the device node.

%%

The '%' character itself.

$$

The '$' character itself.

Author

Written by Greg Kroah-Hartman and Kay Sievers . With much help from Dan Stekloff and many others.

udev-182/src/PaxHeaders.12492/libudev-enumerate.c0000644000521600052160000000013211711107662017735 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083323.500104615 30 ctime=1332097353.020438919 udev-182/src/libudev-enumerate.c0000664000521600052160000010276011711107662016347 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-enumerate * @short_description: lookup and sort sys devices * * Lookup devices in the sys filesystem, filter devices by properties, * and return a sorted list of devices. */ struct syspath { char *syspath; size_t len; }; /** * udev_enumerate: * * Opaque object representing one device lookup/sort context. */ struct udev_enumerate { struct udev *udev; int refcount; struct udev_list sysattr_match_list; struct udev_list sysattr_nomatch_list; struct udev_list subsystem_match_list; struct udev_list subsystem_nomatch_list; struct udev_list sysname_match_list; struct udev_list properties_match_list; struct udev_list tags_match_list; struct udev_device *parent_match; struct udev_list devices_list; struct syspath *devices; unsigned int devices_cur; unsigned int devices_max; bool devices_uptodate:1; bool match_is_initialized; }; /** * udev_enumerate_new: * @udev: udev library context * * Returns: an enumeration context **/ UDEV_EXPORT struct udev_enumerate *udev_enumerate_new(struct udev *udev) { struct udev_enumerate *udev_enumerate; udev_enumerate = calloc(1, sizeof(struct udev_enumerate)); if (udev_enumerate == NULL) return NULL; udev_enumerate->refcount = 1; udev_enumerate->udev = udev; udev_list_init(udev, &udev_enumerate->sysattr_match_list, false); udev_list_init(udev, &udev_enumerate->sysattr_nomatch_list, false); udev_list_init(udev, &udev_enumerate->subsystem_match_list, true); udev_list_init(udev, &udev_enumerate->subsystem_nomatch_list, true); udev_list_init(udev, &udev_enumerate->sysname_match_list, true); udev_list_init(udev, &udev_enumerate->properties_match_list, false); udev_list_init(udev, &udev_enumerate->tags_match_list, true); udev_list_init(udev, &udev_enumerate->devices_list, false); return udev_enumerate; } /** * udev_enumerate_ref: * @udev_enumerate: context * * Take a reference of a enumeration context. * * Returns: the passed enumeration context **/ UDEV_EXPORT struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate) { if (udev_enumerate == NULL) return NULL; udev_enumerate->refcount++; return udev_enumerate; } /** * udev_enumerate_unref: * @udev_enumerate: context * * Drop a reference of an enumeration context. If the refcount reaches zero, * all resources of the enumeration context will be released. **/ UDEV_EXPORT void udev_enumerate_unref(struct udev_enumerate *udev_enumerate) { unsigned int i; if (udev_enumerate == NULL) return; udev_enumerate->refcount--; if (udev_enumerate->refcount > 0) return; udev_list_cleanup(&udev_enumerate->sysattr_match_list); udev_list_cleanup(&udev_enumerate->sysattr_nomatch_list); udev_list_cleanup(&udev_enumerate->subsystem_match_list); udev_list_cleanup(&udev_enumerate->subsystem_nomatch_list); udev_list_cleanup(&udev_enumerate->sysname_match_list); udev_list_cleanup(&udev_enumerate->properties_match_list); udev_list_cleanup(&udev_enumerate->tags_match_list); udev_device_unref(udev_enumerate->parent_match); udev_list_cleanup(&udev_enumerate->devices_list); for (i = 0; i < udev_enumerate->devices_cur; i++) free(udev_enumerate->devices[i].syspath); free(udev_enumerate->devices); free(udev_enumerate); } /** * udev_enumerate_get_udev: * @udev_enumerate: context * * Returns: the udev library context. */ UDEV_EXPORT struct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate) { if (udev_enumerate == NULL) return NULL; return udev_enumerate->udev; } static int syspath_add(struct udev_enumerate *udev_enumerate, const char *syspath) { char *path; struct syspath *entry; /* double array size if needed */ if (udev_enumerate->devices_cur >= udev_enumerate->devices_max) { struct syspath *buf; unsigned int add; add = udev_enumerate->devices_max; if (add < 1024) add = 1024; buf = realloc(udev_enumerate->devices, (udev_enumerate->devices_max + add) * sizeof(struct syspath)); if (buf == NULL) return -ENOMEM; udev_enumerate->devices = buf; udev_enumerate->devices_max += add; } path = strdup(syspath); if (path == NULL) return -ENOMEM; entry = &udev_enumerate->devices[udev_enumerate->devices_cur]; entry->syspath = path; entry->len = strlen(path); udev_enumerate->devices_cur++; udev_enumerate->devices_uptodate = false; return 0; } static int syspath_cmp(const void *p1, const void *p2) { const struct syspath *path1 = p1; const struct syspath *path2 = p2; size_t len; int ret; len = MIN(path1->len, path2->len); ret = memcmp(path1->syspath, path2->syspath, len); if (ret == 0) { if (path1->len < path2->len) ret = -1; else if (path1->len > path2->len) ret = 1; } return ret; } /* For devices that should be moved to the absolute end of the list */ static bool devices_delay_end(struct udev *udev, const char *syspath) { static const char *delay_device_list[] = { "/block/md", "/block/dm-", NULL }; size_t len; int i; len = strlen(udev_get_sys_path(udev)); for (i = 0; delay_device_list[i] != NULL; i++) { if (strstr(&syspath[len], delay_device_list[i]) != NULL) { dbg(udev, "delaying: %s\n", syspath); return true; } } return false; } /* For devices that should just be moved a little bit later, just * before the point where some common path prefix changes. Returns the * number of characters that make up that common prefix */ static size_t devices_delay_later(struct udev *udev, const char *syspath) { const char *c; /* For sound cards the control device must be enumerated last * to make sure it's the final device node that gets ACLs * applied. Applications rely on this fact and use ACL changes * on the control node as an indicator that the ACL change of * the entire sound card completed. The kernel makes this * guarantee when creating those devices, and hence we should * too when enumerating them. */ if ((c = strstr(syspath, "/sound/card"))) { c += 11; c += strcspn(c, "/"); if (strncmp(c, "/controlC", 9) == 0) return c - syspath + 1; } return 0; } /** * udev_enumerate_get_list_entry: * @udev_enumerate: context * * Returns: the first entry of the sorted list of device paths. */ UDEV_EXPORT struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate) { if (udev_enumerate == NULL) return NULL; if (!udev_enumerate->devices_uptodate) { unsigned int i; unsigned int max; struct syspath *prev = NULL, *move_later = NULL; size_t move_later_prefix = 0; udev_list_cleanup(&udev_enumerate->devices_list); qsort(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp); max = udev_enumerate->devices_cur; for (i = 0; i < max; i++) { struct syspath *entry = &udev_enumerate->devices[i]; /* skip duplicated entries */ if (prev != NULL && entry->len == prev->len && memcmp(entry->syspath, prev->syspath, entry->len) == 0) continue; prev = entry; /* skip to be delayed devices, and add them to the end of the list */ if (devices_delay_end(udev_enumerate->udev, entry->syspath)) { syspath_add(udev_enumerate, entry->syspath); /* need to update prev here for the case realloc() gives a different address */ prev = &udev_enumerate->devices[i]; continue; } /* skip to be delayed devices, and move the to * the point where the prefix changes. We can * only move one item at a time. */ if (!move_later) { move_later_prefix = devices_delay_later(udev_enumerate->udev, entry->syspath); if (move_later_prefix > 0) { move_later = entry; continue; } } if (move_later && strncmp(entry->syspath, move_later->syspath, move_later_prefix) != 0) { udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL); move_later = NULL; } udev_list_entry_add(&udev_enumerate->devices_list, entry->syspath, NULL); } if (move_later) udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL); /* add and cleanup delayed devices from end of list */ for (i = max; i < udev_enumerate->devices_cur; i++) { struct syspath *entry = &udev_enumerate->devices[i]; udev_list_entry_add(&udev_enumerate->devices_list, entry->syspath, NULL); free(entry->syspath); } udev_enumerate->devices_cur = max; udev_enumerate->devices_uptodate = true; } return udev_list_get_entry(&udev_enumerate->devices_list); } /** * udev_enumerate_add_match_subsystem: * @udev_enumerate: context * @subsystem: filter for a subsystem of the device to include in the list * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { if (udev_enumerate == NULL) return -EINVAL; if (subsystem == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->subsystem_match_list, subsystem, NULL) == NULL) return -ENOMEM; return 0; } /** * udev_enumerate_add_nomatch_subsystem: * @udev_enumerate: context * @subsystem: filter for a subsystem of the device to exclude from the list * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { if (udev_enumerate == NULL) return -EINVAL; if (subsystem == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->subsystem_nomatch_list, subsystem, NULL) == NULL) return -ENOMEM; return 0; } /** * udev_enumerate_add_match_sysattr: * @udev_enumerate: context * @sysattr: filter for a sys attribute at the device to include in the list * @value: optional value of the sys attribute * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { if (udev_enumerate == NULL) return -EINVAL; if (sysattr == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->sysattr_match_list, sysattr, value) == NULL) return -ENOMEM; return 0; } /** * udev_enumerate_add_nomatch_sysattr: * @udev_enumerate: context * @sysattr: filter for a sys attribute at the device to exclude from the list * @value: optional value of the sys attribute * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { if (udev_enumerate == NULL) return -EINVAL; if (sysattr == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->sysattr_nomatch_list, sysattr, value) == NULL) return -ENOMEM; return 0; } static int match_sysattr_value(struct udev_device *dev, const char *sysattr, const char *match_val) { const char *val = NULL; bool match = false; val = udev_device_get_sysattr_value(dev, sysattr); if (val == NULL) goto exit; if (match_val == NULL) { match = true; goto exit; } if (fnmatch(match_val, val, 0) == 0) { match = true; goto exit; } exit: return match; } /** * udev_enumerate_add_match_property: * @udev_enumerate: context * @property: filter for a property of the device to include in the list * @value: value of the property * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value) { if (udev_enumerate == NULL) return -EINVAL; if (property == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->properties_match_list, property, value) == NULL) return -ENOMEM; return 0; } /** * udev_enumerate_add_match_tag: * @udev_enumerate: context * @tag: filter for a tag of the device to include in the list * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag) { if (udev_enumerate == NULL) return -EINVAL; if (tag == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->tags_match_list, tag, NULL) == NULL) return -ENOMEM; return 0; } /** * udev_enumerate_add_match_parent: * @udev_enumerate: context * @parent: parent device where to start searching * * Return the devices on the subtree of one given device. The parent * itself is included in the list. * * A reference for the device is held until the udev_enumerate context * is cleaned up. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_parent(struct udev_enumerate *udev_enumerate, struct udev_device *parent) { if (udev_enumerate == NULL) return -EINVAL; if (parent == NULL) return 0; if (udev_enumerate->parent_match != NULL) udev_device_unref(udev_enumerate->parent_match); udev_enumerate->parent_match = udev_device_ref(parent); return 0; } /** * udev_enumerate_add_match_is_initialized: * @udev_enumerate: context * * Match only devices which udev has set up already. This makes * sure, that the device node permissions and context are properly set * and that network devices are fully renamed. * * Usually, devices which are found in the kernel but not already * handled by udev, have still pending events. Services should subscribe * to monitor events and wait for these devices to become ready, instead * of using uninitialized devices. * * For now, this will not affect devices which do not have a device node * and are not network interfaces. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerate) { if (udev_enumerate == NULL) return -EINVAL; udev_enumerate->match_is_initialized = true; return 0; } /** * udev_enumerate_add_match_sysname: * @udev_enumerate: context * @sysname: filter for the name of the device to include in the list * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname) { if (udev_enumerate == NULL) return -EINVAL; if (sysname == NULL) return 0; if (udev_list_entry_add(&udev_enumerate->sysname_match_list, sysname, NULL) == NULL) return -ENOMEM; return 0; } static bool match_sysattr(struct udev_enumerate *udev_enumerate, struct udev_device *dev) { struct udev_list_entry *list_entry; /* skip list */ udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->sysattr_nomatch_list)) { if (match_sysattr_value(dev, udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry))) return false; } /* include list */ if (udev_list_get_entry(&udev_enumerate->sysattr_match_list) != NULL) { udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->sysattr_match_list)) { /* anything that does not match, will make it FALSE */ if (!match_sysattr_value(dev, udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry))) return false; } return true; } return true; } static bool match_property(struct udev_enumerate *udev_enumerate, struct udev_device *dev) { struct udev_list_entry *list_entry; bool match = false; /* no match always matches */ if (udev_list_get_entry(&udev_enumerate->properties_match_list) == NULL) return true; /* loop over matches */ udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->properties_match_list)) { const char *match_key = udev_list_entry_get_name(list_entry); const char *match_value = udev_list_entry_get_value(list_entry); struct udev_list_entry *property_entry; /* loop over device properties */ udev_list_entry_foreach(property_entry, udev_device_get_properties_list_entry(dev)) { const char *dev_key = udev_list_entry_get_name(property_entry); const char *dev_value = udev_list_entry_get_value(property_entry); if (fnmatch(match_key, dev_key, 0) != 0) continue; if (match_value == NULL && dev_value == NULL) { match = true; goto out; } if (match_value == NULL || dev_value == NULL) continue; if (fnmatch(match_value, dev_value, 0) == 0) { match = true; goto out; } } } out: return match; } static bool match_tag(struct udev_enumerate *udev_enumerate, struct udev_device *dev) { struct udev_list_entry *list_entry; /* no match always matches */ if (udev_list_get_entry(&udev_enumerate->tags_match_list) == NULL) return true; /* loop over matches */ udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->tags_match_list)) if (!udev_device_has_tag(dev, udev_list_entry_get_name(list_entry))) return false; return true; } static bool match_parent(struct udev_enumerate *udev_enumerate, struct udev_device *dev) { const char *parent; if (udev_enumerate->parent_match == NULL) return true; parent = udev_device_get_devpath(udev_enumerate->parent_match); return strncmp(parent, udev_device_get_devpath(dev), strlen(parent)) == 0; } static bool match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname) { struct udev_list_entry *list_entry; if (udev_list_get_entry(&udev_enumerate->sysname_match_list) == NULL) return true; udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->sysname_match_list)) { if (fnmatch(udev_list_entry_get_name(list_entry), sysname, 0) != 0) continue; return true; } return false; } static int scan_dir_and_add_devices(struct udev_enumerate *udev_enumerate, const char *basedir, const char *subdir1, const char *subdir2) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); char path[UTIL_PATH_SIZE]; size_t l; char *s; DIR *dir; struct dirent *dent; s = path; l = util_strpcpyl(&s, sizeof(path), udev_get_sys_path(udev), "/", basedir, NULL); if (subdir1 != NULL) l = util_strpcpyl(&s, l, "/", subdir1, NULL); if (subdir2 != NULL) util_strpcpyl(&s, l, "/", subdir2, NULL); dir = opendir(path); if (dir == NULL) return -ENOENT; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { char syspath[UTIL_PATH_SIZE]; struct udev_device *dev; if (dent->d_name[0] == '.') continue; if (!match_sysname(udev_enumerate, dent->d_name)) continue; util_strscpyl(syspath, sizeof(syspath), path, "/", dent->d_name, NULL); dev = udev_device_new_from_syspath(udev_enumerate->udev, syspath); if (dev == NULL) continue; if (udev_enumerate->match_is_initialized) { /* * All devices with a device node or network interfaces * possibly need udev to adjust the device node permission * or context, or rename the interface before it can be * reliably used from other processes. * * For now, we can only check these types of devices, we * might not store a database, and have no way to find out * for all other types of devices. */ if (!udev_device_get_is_initialized(dev) && (major(udev_device_get_devnum(dev)) > 0 || udev_device_get_ifindex(dev) > 0)) goto nomatch; } if (!match_parent(udev_enumerate, dev)) goto nomatch; if (!match_tag(udev_enumerate, dev)) goto nomatch; if (!match_property(udev_enumerate, dev)) goto nomatch; if (!match_sysattr(udev_enumerate, dev)) goto nomatch; syspath_add(udev_enumerate, udev_device_get_syspath(dev)); nomatch: udev_device_unref(dev); } closedir(dir); return 0; } static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { struct udev_list_entry *list_entry; udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_nomatch_list)) { if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0) return false; } if (udev_list_get_entry(&udev_enumerate->subsystem_match_list) != NULL) { udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_match_list)) { if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0) return true; } return false; } return true; } static int scan_dir(struct udev_enumerate *udev_enumerate, const char *basedir, const char *subdir, const char *subsystem) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); char path[UTIL_PATH_SIZE]; DIR *dir; struct dirent *dent; util_strscpyl(path, sizeof(path), udev_get_sys_path(udev), "/", basedir, NULL); dir = opendir(path); if (dir == NULL) return -1; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { if (dent->d_name[0] == '.') continue; if (!match_subsystem(udev_enumerate, subsystem != NULL ? subsystem : dent->d_name)) continue; scan_dir_and_add_devices(udev_enumerate, basedir, dent->d_name, subdir); } closedir(dir); return 0; } /** * udev_enumerate_add_syspath: * @udev_enumerate: context * @syspath: path of a device * * Add a device to the list of devices, to retrieve it back sorted in dependency order. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char *syspath) { struct udev_device *udev_device; if (udev_enumerate == NULL) return -EINVAL; if (syspath == NULL) return 0; /* resolve to real syspath */ udev_device = udev_device_new_from_syspath(udev_enumerate->udev, syspath); if (udev_device == NULL) return -EINVAL; syspath_add(udev_enumerate, udev_device_get_syspath(udev_device)); udev_device_unref(udev_device); return 0; } static int scan_devices_tags(struct udev_enumerate *udev_enumerate) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); struct udev_list_entry *list_entry; /* scan only tagged devices, use tags reverse-index, instead of searching all devices in /sys */ udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->tags_match_list)) { DIR *dir; struct dirent *dent; char path[UTIL_PATH_SIZE]; util_strscpyl(path, sizeof(path), udev_get_run_path(udev), "/tags/", udev_list_entry_get_name(list_entry), NULL); dir = opendir(path); if (dir == NULL) continue; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { struct udev_device *dev; if (dent->d_name[0] == '.') continue; dev = udev_device_new_from_id_filename(udev_enumerate->udev, dent->d_name); if (dev == NULL) continue; if (!match_subsystem(udev_enumerate, udev_device_get_subsystem(dev))) goto nomatch; if (!match_sysname(udev_enumerate, udev_device_get_sysname(dev))) goto nomatch; if (!match_parent(udev_enumerate, dev)) goto nomatch; if (!match_property(udev_enumerate, dev)) goto nomatch; if (!match_sysattr(udev_enumerate, dev)) goto nomatch; syspath_add(udev_enumerate, udev_device_get_syspath(dev)); nomatch: udev_device_unref(dev); } closedir(dir); } return 0; } static int parent_add_child(struct udev_enumerate *enumerate, const char *path) { struct udev_device *dev; dev = udev_device_new_from_syspath(enumerate->udev, path); if (dev == NULL) return -ENODEV; if (!match_subsystem(enumerate, udev_device_get_subsystem(dev))) return 0; if (!match_sysname(enumerate, udev_device_get_sysname(dev))) return 0; if (!match_property(enumerate, dev)) return 0; if (!match_sysattr(enumerate, dev)) return 0; syspath_add(enumerate, udev_device_get_syspath(dev)); udev_device_unref(dev); return 1; } static int parent_crawl_children(struct udev_enumerate *enumerate, const char *path, int maxdepth) { DIR *d; struct dirent *dent; d = opendir(path); if (d == NULL) return -errno; for (dent = readdir(d); dent != NULL; dent = readdir(d)) { char *child; if (dent->d_name[0] == '.') continue; if (dent->d_type != DT_DIR) continue; if (asprintf(&child, "%s/%s", path, dent->d_name) < 0) continue; parent_add_child(enumerate, child); if (maxdepth > 0) parent_crawl_children(enumerate, child, maxdepth-1); free(child); } closedir(d); return 0; } static int scan_devices_children(struct udev_enumerate *enumerate) { const char *path; path = udev_device_get_syspath(enumerate->parent_match); parent_add_child(enumerate, path); return parent_crawl_children(enumerate, path, 256); } static int scan_devices_all(struct udev_enumerate *udev_enumerate) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); char base[UTIL_PATH_SIZE]; struct stat statbuf; util_strscpyl(base, sizeof(base), udev_get_sys_path(udev), "/subsystem", NULL); if (stat(base, &statbuf) == 0) { /* we have /subsystem/, forget all the old stuff */ dbg(udev, "searching '/subsystem/*/devices/*' dir\n"); scan_dir(udev_enumerate, "subsystem", "devices", NULL); } else { dbg(udev, "searching '/bus/*/devices/*' dir\n"); scan_dir(udev_enumerate, "bus", "devices", NULL); dbg(udev, "searching '/class/*' dir\n"); scan_dir(udev_enumerate, "class", NULL, NULL); } return 0; } /** * udev_enumerate_scan_devices: * @udev_enumerate: udev enumeration context * * Returns: 0 on success, otherwise a negative error value. **/ UDEV_EXPORT int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate) { if (udev_enumerate == NULL) return -EINVAL; /* efficiently lookup tags only, we maintain a reverse-index */ if (udev_list_get_entry(&udev_enumerate->tags_match_list) != NULL) return scan_devices_tags(udev_enumerate); /* walk the subtree of one parent device only */ if (udev_enumerate->parent_match != NULL) return scan_devices_children(udev_enumerate); /* scan devices of all subsystems */ return scan_devices_all(udev_enumerate); } /** * udev_enumerate_scan_subsystems: * @udev_enumerate: udev enumeration context * * Returns: 0 on success, otherwise a negative error value. **/ UDEV_EXPORT int udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); char base[UTIL_PATH_SIZE]; struct stat statbuf; const char *subsysdir; if (udev_enumerate == NULL) return -EINVAL; /* all kernel modules */ if (match_subsystem(udev_enumerate, "module")) { dbg(udev, "searching 'modules/*' dir\n"); scan_dir_and_add_devices(udev_enumerate, "module", NULL, NULL); } util_strscpyl(base, sizeof(base), udev_get_sys_path(udev), "/subsystem", NULL); if (stat(base, &statbuf) == 0) subsysdir = "subsystem"; else subsysdir = "bus"; /* all subsystems (only buses support coldplug) */ if (match_subsystem(udev_enumerate, "subsystem")) { dbg(udev, "searching '%s/*' dir\n", subsysdir); scan_dir_and_add_devices(udev_enumerate, subsysdir, NULL, NULL); } /* all subsystem drivers */ if (match_subsystem(udev_enumerate, "drivers")) { dbg(udev, "searching '%s/*/drivers/*' dir\n", subsysdir); scan_dir(udev_enumerate, subsysdir, "drivers", "drivers"); } return 0; } udev-182/src/PaxHeaders.12492/libudev-device-private.c0000644000521600052160000000013211711107662020657 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083325.022104651 30 ctime=1332097353.048438921 udev-182/src/libudev-device-private.c0000664000521600052160000001552211711107662017270 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static void udev_device_tag(struct udev_device *dev, const char *tag, bool add) { const char *id; struct udev *udev = udev_device_get_udev(dev); char filename[UTIL_PATH_SIZE]; id = udev_device_get_id_filename(dev); if (id == NULL) return; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/tags/", tag, "/", id, NULL); if (add) { int fd; util_create_path(udev, filename); fd = open(filename, O_WRONLY|O_CREAT|O_CLOEXEC|O_TRUNC|O_NOFOLLOW, 0444); if (fd >= 0) close(fd); } else { unlink(filename); } } int udev_device_tag_index(struct udev_device *dev, struct udev_device *dev_old, bool add) { struct udev_list_entry *list_entry; bool found; if (add && dev_old != NULL) { /* delete possible left-over tags */ udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(dev_old)) { const char *tag_old = udev_list_entry_get_name(list_entry); struct udev_list_entry *list_entry_current; found = false; udev_list_entry_foreach(list_entry_current, udev_device_get_tags_list_entry(dev)) { const char *tag = udev_list_entry_get_name(list_entry_current); if (strcmp(tag, tag_old) == 0) { found = true; break; } } if (!found) udev_device_tag(dev_old, tag_old, false); } } udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(dev)) udev_device_tag(dev, udev_list_entry_get_name(list_entry), add); return 0; } static bool device_has_info(struct udev_device *udev_device) { struct udev_list_entry *list_entry; if (udev_device_get_devlinks_list_entry(udev_device) != NULL) return true; if (udev_device_get_devlink_priority(udev_device) != 0) return true; udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) if (udev_list_entry_get_num(list_entry)) return true; if (udev_device_get_tags_list_entry(udev_device) != NULL) return true; if (udev_device_get_watch_handle(udev_device) >= 0) return true; return false; } int udev_device_update_db(struct udev_device *udev_device) { bool has_info; const char *id; struct udev *udev = udev_device_get_udev(udev_device); char filename[UTIL_PATH_SIZE]; char filename_tmp[UTIL_PATH_SIZE]; FILE *f; id = udev_device_get_id_filename(udev_device); if (id == NULL) return -1; has_info = device_has_info(udev_device); util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data/", id, NULL); /* do not store anything for otherwise empty devices */ if (!has_info && major(udev_device_get_devnum(udev_device)) == 0 && udev_device_get_ifindex(udev_device) == 0) { unlink(filename); return 0; } /* write a database file */ util_strscpyl(filename_tmp, sizeof(filename_tmp), filename, ".tmp", NULL); util_create_path(udev, filename_tmp); f = fopen(filename_tmp, "we"); if (f == NULL) { err(udev, "unable to create temporary db file '%s': %m\n", filename_tmp); return -1; } /* * set 'sticky' bit to indicate that we should not clean the * database when we transition from initramfs to the real root */ if (udev_device_get_db_persist(udev_device)) fchmod(fileno(f), 01644); if (has_info) { struct udev_list_entry *list_entry; if (major(udev_device_get_devnum(udev_device)) > 0) { size_t devlen = strlen(udev_get_dev_path(udev))+1; udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(udev_device)) fprintf(f, "S:%s\n", &udev_list_entry_get_name(list_entry)[devlen]); if (udev_device_get_devlink_priority(udev_device) != 0) fprintf(f, "L:%i\n", udev_device_get_devlink_priority(udev_device)); if (udev_device_get_watch_handle(udev_device) >= 0) fprintf(f, "W:%i\n", udev_device_get_watch_handle(udev_device)); } if (udev_device_get_usec_initialized(udev_device) > 0) fprintf(f, "I:%llu\n", udev_device_get_usec_initialized(udev_device)); udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) { if (!udev_list_entry_get_num(list_entry)) continue; fprintf(f, "E:%s=%s\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); } udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(udev_device)) fprintf(f, "G:%s\n", udev_list_entry_get_name(list_entry)); } fclose(f); rename(filename_tmp, filename); info(udev, "created %s file '%s' for '%s'\n", has_info ? "db" : "empty", filename, udev_device_get_devpath(udev_device)); return 0; } int udev_device_delete_db(struct udev_device *udev_device) { const char *id; struct udev *udev = udev_device_get_udev(udev_device); char filename[UTIL_PATH_SIZE]; id = udev_device_get_id_filename(udev_device); if (id == NULL) return -1; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data/", id, NULL); unlink(filename); return 0; } udev-182/src/PaxHeaders.12492/udev-trigger.service.in0000644000521600052160000000013211711107662020547 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083662.302112688 30 ctime=1332097353.516438931 udev-182/src/udev-trigger.service.in0000664000521600052160000000045111711107662017153 0ustar00kaykay00000000000000[Unit] Description=udev Coldplug all Devices Wants=udev.service After=udev-kernel.socket udev-control.socket DefaultDependencies=no [Service] Type=oneshot RemainAfterExit=yes ExecStart=@bindir@/udevadm trigger --type=subsystems --action=add ; @bindir@/udevadm trigger --type=devices --action=add udev-182/src/PaxHeaders.12492/sd-daemon.c0000644000521600052160000000013111716462452016174 xustar000000000000000030 mtime=1329227050.391187515 30 atime=1332083331.222104799 29 ctime=1332097353.47043893 udev-182/src/sd-daemon.c0000664000521600052160000003306011716462452014603 0ustar00kaykay00000000000000/*-*- 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 #include #include #include #ifdef __BIONIC__ #include #else #include #endif #include #include #include #include #include #include #include #include #include #if defined(__linux__) #include #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 } udev-182/src/PaxHeaders.12492/udev-settle.service.in0000644000521600052160000000013211711107662020404 xustar000000000000000030 mtime=1327796146.962827005 30 atime=1332083662.315112689 30 ctime=1332097353.522438931 udev-182/src/udev-settle.service.in0000664000521600052160000000136311711107662017013 0ustar00kaykay00000000000000# This service is usually not enabled by default. If enabled, it # acts as a barrier for basic.target -- so all later services will # wait for udev completely finishing its coldplug run. # # If needed, to work around broken or non-hotplug-aware services, # it might be enabled unconditionally, or pulled-in on-demand by # the services that assume a fully populated /dev at startup. It # should not be used or pulled-in ever on systems without such # legacy services running. [Unit] Description=udev Wait for Complete Device Initialization DefaultDependencies=no Wants=udev.service After=udev-trigger.service Before=basic.target [Service] Type=oneshot TimeoutSec=180 RemainAfterExit=yes ExecStart=@bindir@/udevadm settle [Install] WantedBy=basic.target udev-182/src/PaxHeaders.12492/udev.service.in0000644000521600052160000000013211711107662017106 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083662.290112688 30 ctime=1332097353.510438931 udev-182/src/udev.service.in0000664000521600052160000000053711711107662015517 0ustar00kaykay00000000000000[Unit] Description=udev Kernel Device Manager Wants=udev-control.socket udev-kernel.socket After=udev-control.socket udev-kernel.socket Before=basic.target DefaultDependencies=no ConditionCapability=CAP_MKNOD [Service] Type=notify OOMScoreAdjust=-1000 Sockets=udev-control.socket udev-kernel.socket Restart=on-failure ExecStart=@pkglibexecdir@/udevd udev-182/src/PaxHeaders.12492/libudev-monitor.c0000644000521600052160000000013211711107662017437 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083323.804104622 30 ctime=1332097353.024438919 udev-182/src/libudev-monitor.c0000664000521600052160000007722211711107662016055 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-monitor * @short_description: device event source * * Connects to a device event source. */ /** * udev_monitor: * * Opaque object handling an event source. */ struct udev_monitor { struct udev *udev; int refcount; int sock; struct sockaddr_nl snl; struct sockaddr_nl snl_trusted_sender; struct sockaddr_nl snl_destination; struct sockaddr_un sun; socklen_t addrlen; struct udev_list filter_subsystem_list; struct udev_list filter_tag_list; bool bound; }; enum udev_monitor_netlink_group { UDEV_MONITOR_NONE, UDEV_MONITOR_KERNEL, UDEV_MONITOR_UDEV, }; #define UDEV_MONITOR_MAGIC 0xfeedcafe struct udev_monitor_netlink_header { /* "libudev" prefix to distinguish libudev and kernel messages */ char prefix[8]; /* * magic to protect against daemon <-> library message format mismatch * used in the kernel from socket filter rules; needs to be stored in network order */ unsigned int magic; /* total length of header structure known to the sender */ unsigned int header_size; /* properties string buffer */ unsigned int properties_off; unsigned int properties_len; /* * hashes of primary device properties strings, to let libudev subscribers * use in-kernel socket filters; values need to be stored in network order */ unsigned int filter_subsystem_hash; unsigned int filter_devtype_hash; unsigned int filter_tag_bloom_hi; unsigned int filter_tag_bloom_lo; }; static struct udev_monitor *udev_monitor_new(struct udev *udev) { struct udev_monitor *udev_monitor; udev_monitor = calloc(1, sizeof(struct udev_monitor)); if (udev_monitor == NULL) return NULL; udev_monitor->refcount = 1; udev_monitor->udev = udev; udev_list_init(udev, &udev_monitor->filter_subsystem_list, false); udev_list_init(udev, &udev_monitor->filter_tag_list, true); return udev_monitor; } /** * udev_monitor_new_from_socket: * @udev: udev library context * @socket_path: unix socket path * * This function should not be used in any new application. The * kernel's netlink socket multiplexes messages to all interested * clients. Creating custom sockets from udev to applications * should be avoided. * * Create a new udev monitor and connect to a specified socket. The * path to a socket either points to an existing socket file, or if * the socket path starts with a '@' character, an abstract namespace * socket will be used. * * A socket file will not be created. If it does not already exist, * it will fall-back and connect to an abstract namespace socket with * the given path. The permissions adjustment of a socket file, as * well as the later cleanup, needs to be done by the caller. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev monitor. * * Returns: a new udev monitor, or #NULL, in case of an error **/ UDEV_EXPORT struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char *socket_path) { struct udev_monitor *udev_monitor; struct stat statbuf; if (udev == NULL) return NULL; if (socket_path == NULL) return NULL; udev_monitor = udev_monitor_new(udev); if (udev_monitor == NULL) return NULL; udev_monitor->sun.sun_family = AF_LOCAL; if (socket_path[0] == '@') { /* translate leading '@' to abstract namespace */ util_strscpy(udev_monitor->sun.sun_path, sizeof(udev_monitor->sun.sun_path), socket_path); udev_monitor->sun.sun_path[0] = '\0'; udev_monitor->addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(socket_path); } else if (stat(socket_path, &statbuf) == 0 && S_ISSOCK(statbuf.st_mode)) { /* existing socket file */ util_strscpy(udev_monitor->sun.sun_path, sizeof(udev_monitor->sun.sun_path), socket_path); udev_monitor->addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(socket_path); } else { /* no socket file, assume abstract namespace socket */ util_strscpy(&udev_monitor->sun.sun_path[1], sizeof(udev_monitor->sun.sun_path)-1, socket_path); udev_monitor->addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(socket_path)+1; } udev_monitor->sock = socket(AF_LOCAL, SOCK_DGRAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); if (udev_monitor->sock == -1) { err(udev, "error getting socket: %m\n"); free(udev_monitor); return NULL; } dbg(udev, "monitor %p created with '%s'\n", udev_monitor, socket_path); return udev_monitor; } struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const char *name, int fd) { struct udev_monitor *udev_monitor; unsigned int group; if (udev == NULL) return NULL; if (name == NULL) group = UDEV_MONITOR_NONE; else if (strcmp(name, "udev") == 0) group = UDEV_MONITOR_UDEV; else if (strcmp(name, "kernel") == 0) group = UDEV_MONITOR_KERNEL; else return NULL; udev_monitor = udev_monitor_new(udev); if (udev_monitor == NULL) return NULL; if (fd < 0) { udev_monitor->sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT); if (udev_monitor->sock == -1) { err(udev, "error getting socket: %m\n"); free(udev_monitor); return NULL; } } else { udev_monitor->bound = true; udev_monitor->sock = fd; } udev_monitor->snl.nl_family = AF_NETLINK; udev_monitor->snl.nl_groups = group; /* default destination for sending */ udev_monitor->snl_destination.nl_family = AF_NETLINK; udev_monitor->snl_destination.nl_groups = UDEV_MONITOR_UDEV; dbg(udev, "monitor %p created with NETLINK_KOBJECT_UEVENT (%u)\n", udev_monitor, group); return udev_monitor; } /** * udev_monitor_new_from_netlink: * @udev: udev library context * @name: name of event source * * Create new udev monitor and connect to a specified event * source. Valid sources identifiers are "udev" and "kernel". * * Applications should usually not connect directly to the * "kernel" events, because the devices might not be useable * at that time, before udev has configured them, and created * device nodes. Accessing devices at the same time as udev, * might result in unpredictable behavior. The "udev" events * are sent out after udev has finished its event processing, * all rules have been processed, and needed device nodes are * created. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev monitor. * * Returns: a new udev monitor, or #NULL, in case of an error **/ UDEV_EXPORT struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char *name) { return udev_monitor_new_from_netlink_fd(udev, name, -1); } static inline void bpf_stmt(struct sock_filter *inss, unsigned int *i, unsigned short code, unsigned int data) { struct sock_filter *ins = &inss[*i]; ins->code = code; ins->k = data; (*i)++; } static inline void bpf_jmp(struct sock_filter *inss, unsigned int *i, unsigned short code, unsigned int data, unsigned short jt, unsigned short jf) { struct sock_filter *ins = &inss[*i]; ins->code = code; ins->jt = jt; ins->jf = jf; ins->k = data; (*i)++; } /** * udev_monitor_filter_update: * @udev_monitor: monitor * * Update the installed socket filter. This is only needed, * if the filter was removed or changed. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_monitor_filter_update(struct udev_monitor *udev_monitor) { struct sock_filter ins[512]; struct sock_fprog filter; unsigned int i; struct udev_list_entry *list_entry; int err; if (udev_list_get_entry(&udev_monitor->filter_subsystem_list) == NULL && udev_list_get_entry(&udev_monitor->filter_tag_list) == NULL) return 0; memset(ins, 0x00, sizeof(ins)); i = 0; /* load magic in A */ bpf_stmt(ins, &i, BPF_LD|BPF_W|BPF_ABS, offsetof(struct udev_monitor_netlink_header, magic)); /* jump if magic matches */ bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, UDEV_MONITOR_MAGIC, 1, 0); /* wrong magic, pass packet */ bpf_stmt(ins, &i, BPF_RET|BPF_K, 0xffffffff); if (udev_list_get_entry(&udev_monitor->filter_tag_list) != NULL) { int tag_matches; /* count tag matches, to calculate end of tag match block */ tag_matches = 0; udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_monitor->filter_tag_list)) tag_matches++; /* add all tags matches */ udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_monitor->filter_tag_list)) { uint64_t tag_bloom_bits = util_string_bloom64(udev_list_entry_get_name(list_entry)); uint32_t tag_bloom_hi = tag_bloom_bits >> 32; uint32_t tag_bloom_lo = tag_bloom_bits & 0xffffffff; /* load device bloom bits in A */ bpf_stmt(ins, &i, BPF_LD|BPF_W|BPF_ABS, offsetof(struct udev_monitor_netlink_header, filter_tag_bloom_hi)); /* clear bits (tag bits & bloom bits) */ bpf_stmt(ins, &i, BPF_ALU|BPF_AND|BPF_K, tag_bloom_hi); /* jump to next tag if it does not match */ bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, tag_bloom_hi, 0, 3); /* load device bloom bits in A */ bpf_stmt(ins, &i, BPF_LD|BPF_W|BPF_ABS, offsetof(struct udev_monitor_netlink_header, filter_tag_bloom_lo)); /* clear bits (tag bits & bloom bits) */ bpf_stmt(ins, &i, BPF_ALU|BPF_AND|BPF_K, tag_bloom_lo); /* jump behind end of tag match block if tag matches */ tag_matches--; bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, tag_bloom_lo, 1 + (tag_matches * 6), 0); } /* nothing matched, drop packet */ bpf_stmt(ins, &i, BPF_RET|BPF_K, 0); } /* add all subsystem matches */ if (udev_list_get_entry(&udev_monitor->filter_subsystem_list) != NULL) { udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_monitor->filter_subsystem_list)) { unsigned int hash = util_string_hash32(udev_list_entry_get_name(list_entry)); /* load device subsystem value in A */ bpf_stmt(ins, &i, BPF_LD|BPF_W|BPF_ABS, offsetof(struct udev_monitor_netlink_header, filter_subsystem_hash)); if (udev_list_entry_get_value(list_entry) == NULL) { /* jump if subsystem does not match */ bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, hash, 0, 1); } else { /* jump if subsystem does not match */ bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, hash, 0, 3); /* load device devtype value in A */ bpf_stmt(ins, &i, BPF_LD|BPF_W|BPF_ABS, offsetof(struct udev_monitor_netlink_header, filter_devtype_hash)); /* jump if value does not match */ hash = util_string_hash32(udev_list_entry_get_value(list_entry)); bpf_jmp(ins, &i, BPF_JMP|BPF_JEQ|BPF_K, hash, 0, 1); } /* matched, pass packet */ bpf_stmt(ins, &i, BPF_RET|BPF_K, 0xffffffff); if (i+1 >= ARRAY_SIZE(ins)) return -1; } /* nothing matched, drop packet */ bpf_stmt(ins, &i, BPF_RET|BPF_K, 0); } /* matched, pass packet */ bpf_stmt(ins, &i, BPF_RET|BPF_K, 0xffffffff); /* install filter */ memset(&filter, 0x00, sizeof(filter)); filter.len = i; filter.filter = ins; err = setsockopt(udev_monitor->sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)); return err; } int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender) { udev_monitor->snl_trusted_sender.nl_pid = sender->snl.nl_pid; return 0; } /** * udev_monitor_enable_receiving: * @udev_monitor: the monitor which should receive events * * Binds the @udev_monitor socket to the event source. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor) { int err = 0; const int on = 1; if (udev_monitor->sun.sun_family != 0) { if (!udev_monitor->bound) { err = bind(udev_monitor->sock, (struct sockaddr *)&udev_monitor->sun, udev_monitor->addrlen); if (err == 0) udev_monitor->bound = true; } } else if (udev_monitor->snl.nl_family != 0) { udev_monitor_filter_update(udev_monitor); if (!udev_monitor->bound) { err = bind(udev_monitor->sock, (struct sockaddr *)&udev_monitor->snl, sizeof(struct sockaddr_nl)); if (err == 0) udev_monitor->bound = true; } if (err == 0) { struct sockaddr_nl snl; socklen_t addrlen; /* * get the address the kernel has assigned us * it is usually, but not necessarily the pid */ addrlen = sizeof(struct sockaddr_nl); err = getsockname(udev_monitor->sock, (struct sockaddr *)&snl, &addrlen); if (err == 0) udev_monitor->snl.nl_pid = snl.nl_pid; } } else { return -EINVAL; } if (err < 0) { err(udev_monitor->udev, "bind failed: %m\n"); return err; } /* enable receiving of sender credentials */ setsockopt(udev_monitor->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); return 0; } /** * udev_monitor_set_receive_buffer_size: * @udev_monitor: the monitor which should receive events * @size: the size in bytes * * Set the size of the kernel socket buffer. This call needs the * appropriate privileges to succeed. * * Returns: 0 on success, otherwise -1 on error. */ UDEV_EXPORT int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size) { if (udev_monitor == NULL) return -1; return setsockopt(udev_monitor->sock, SOL_SOCKET, SO_RCVBUFFORCE, &size, sizeof(size)); } int udev_monitor_disconnect(struct udev_monitor *udev_monitor) { int err; err = close(udev_monitor->sock); udev_monitor->sock = -1; return err; } /** * udev_monitor_ref: * @udev_monitor: udev monitor * * Take a reference of a udev monitor. * * Returns: the passed udev monitor **/ UDEV_EXPORT struct udev_monitor *udev_monitor_ref(struct udev_monitor *udev_monitor) { if (udev_monitor == NULL) return NULL; udev_monitor->refcount++; return udev_monitor; } /** * udev_monitor_unref: * @udev_monitor: udev monitor * * Drop a reference of a udev monitor. If the refcount reaches zero, * the bound socket will be closed, and the resources of the monitor * will be released. * **/ UDEV_EXPORT void udev_monitor_unref(struct udev_monitor *udev_monitor) { if (udev_monitor == NULL) return; udev_monitor->refcount--; if (udev_monitor->refcount > 0) return; if (udev_monitor->sock >= 0) close(udev_monitor->sock); udev_list_cleanup(&udev_monitor->filter_subsystem_list); udev_list_cleanup(&udev_monitor->filter_tag_list); dbg(udev_monitor->udev, "monitor %p released\n", udev_monitor); free(udev_monitor); } /** * udev_monitor_get_udev: * @udev_monitor: udev monitor * * Retrieve the udev library context the monitor was created with. * * Returns: the udev library context **/ UDEV_EXPORT struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor) { if (udev_monitor == NULL) return NULL; return udev_monitor->udev; } /** * udev_monitor_get_fd: * @udev_monitor: udev monitor * * Retrieve the socket file descriptor associated with the monitor. * * Returns: the socket file descriptor **/ UDEV_EXPORT int udev_monitor_get_fd(struct udev_monitor *udev_monitor) { if (udev_monitor == NULL) return -1; return udev_monitor->sock; } static int passes_filter(struct udev_monitor *udev_monitor, struct udev_device *udev_device) { struct udev_list_entry *list_entry; if (udev_list_get_entry(&udev_monitor->filter_subsystem_list) == NULL) goto tag; udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_monitor->filter_subsystem_list)) { const char *subsys = udev_list_entry_get_name(list_entry); const char *dsubsys = udev_device_get_subsystem(udev_device); const char *devtype; const char *ddevtype; if (strcmp(dsubsys, subsys) != 0) continue; devtype = udev_list_entry_get_value(list_entry); if (devtype == NULL) goto tag; ddevtype = udev_device_get_devtype(udev_device); if (ddevtype == NULL) continue; if (strcmp(ddevtype, devtype) == 0) goto tag; } return 0; tag: if (udev_list_get_entry(&udev_monitor->filter_tag_list) == NULL) return 1; udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_monitor->filter_tag_list)) { const char *tag = udev_list_entry_get_name(list_entry); if (udev_device_has_tag(udev_device, tag)) return 1; } return 0; } /** * udev_monitor_receive_device: * @udev_monitor: udev monitor * * Receive data from the udev monitor socket, allocate a new udev * device, fill in the received data, and return the device. * * Only socket connections with uid=0 are accepted. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev device. * * Returns: a new udev device, or #NULL, in case of an error **/ UDEV_EXPORT struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor) { struct udev_device *udev_device; struct msghdr smsg; struct iovec iov; char cred_msg[CMSG_SPACE(sizeof(struct ucred))]; struct cmsghdr *cmsg; struct sockaddr_nl snl; struct ucred *cred; char buf[8192]; ssize_t buflen; ssize_t bufpos; struct udev_monitor_netlink_header *nlh; retry: if (udev_monitor == NULL) return NULL; memset(buf, 0x00, sizeof(buf)); iov.iov_base = &buf; iov.iov_len = sizeof(buf); memset (&smsg, 0x00, sizeof(struct msghdr)); smsg.msg_iov = &iov; smsg.msg_iovlen = 1; smsg.msg_control = cred_msg; smsg.msg_controllen = sizeof(cred_msg); if (udev_monitor->snl.nl_family != 0) { smsg.msg_name = &snl; smsg.msg_namelen = sizeof(snl); } buflen = recvmsg(udev_monitor->sock, &smsg, 0); if (buflen < 0) { if (errno != EINTR) info(udev_monitor->udev, "unable to receive message\n"); return NULL; } if (buflen < 32 || (size_t)buflen >= sizeof(buf)) { info(udev_monitor->udev, "invalid message length\n"); return NULL; } if (udev_monitor->snl.nl_family != 0) { if (snl.nl_groups == 0) { /* unicast message, check if we trust the sender */ if (udev_monitor->snl_trusted_sender.nl_pid == 0 || snl.nl_pid != udev_monitor->snl_trusted_sender.nl_pid) { info(udev_monitor->udev, "unicast netlink message ignored\n"); return NULL; } } else if (snl.nl_groups == UDEV_MONITOR_KERNEL) { if (snl.nl_pid > 0) { info(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n", snl.nl_pid); return NULL; } } } cmsg = CMSG_FIRSTHDR(&smsg); if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) { info(udev_monitor->udev, "no sender credentials received, message ignored\n"); return NULL; } cred = (struct ucred *)CMSG_DATA(cmsg); if (cred->uid != 0) { info(udev_monitor->udev, "sender uid=%d, message ignored\n", cred->uid); return NULL; } if (memcmp(buf, "libudev", 8) == 0) { /* udev message needs proper version magic */ nlh = (struct udev_monitor_netlink_header *) buf; if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) { err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n", nlh->magic, htonl(UDEV_MONITOR_MAGIC)); return NULL; } if (nlh->properties_off+32 > buflen) return NULL; bufpos = nlh->properties_off; } else { /* kernel message with header */ bufpos = strlen(buf) + 1; if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) { info(udev_monitor->udev, "invalid message length\n"); return NULL; } /* check message header */ if (strstr(buf, "@/") == NULL) { info(udev_monitor->udev, "unrecognized message header\n"); return NULL; } } udev_device = udev_device_new(udev_monitor->udev); if (udev_device == NULL) return NULL; udev_device_set_info_loaded(udev_device); while (bufpos < buflen) { char *key; size_t keylen; key = &buf[bufpos]; keylen = strlen(key); if (keylen == 0) break; bufpos += keylen + 1; udev_device_add_property_from_string_parse(udev_device, key); } if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) { info(udev_monitor->udev, "missing values, invalid device\n"); udev_device_unref(udev_device); return NULL; } /* skip device, if it does not pass the current filter */ if (!passes_filter(udev_monitor, udev_device)) { struct pollfd pfd[1]; int rc; udev_device_unref(udev_device); /* if something is queued, get next device */ pfd[0].fd = udev_monitor->sock; pfd[0].events = POLLIN; rc = poll(pfd, 1, 0); if (rc > 0) goto retry; return NULL; } return udev_device; } int udev_monitor_send_device(struct udev_monitor *udev_monitor, struct udev_monitor *destination, struct udev_device *udev_device) { const char *buf; ssize_t blen; ssize_t count; blen = udev_device_get_properties_monitor_buf(udev_device, &buf); if (blen < 32) return -EINVAL; if (udev_monitor->sun.sun_family != 0) { struct msghdr smsg; struct iovec iov[2]; const char *action; char header[2048]; char *s; /* header @ */ action = udev_device_get_action(udev_device); if (action == NULL) return -EINVAL; s = header; if (util_strpcpyl(&s, sizeof(header), action, "@", udev_device_get_devpath(udev_device), NULL) == 0) return -EINVAL; iov[0].iov_base = header; iov[0].iov_len = (s - header)+1; /* add properties list */ iov[1].iov_base = (char *)buf; iov[1].iov_len = blen; memset(&smsg, 0x00, sizeof(struct msghdr)); smsg.msg_iov = iov; smsg.msg_iovlen = 2; smsg.msg_name = &udev_monitor->sun; smsg.msg_namelen = udev_monitor->addrlen; count = sendmsg(udev_monitor->sock, &smsg, 0); info(udev_monitor->udev, "passed %zi bytes to socket monitor %p\n", count, udev_monitor); return count; } if (udev_monitor->snl.nl_family != 0) { struct msghdr smsg; struct iovec iov[2]; const char *val; struct udev_monitor_netlink_header nlh; struct udev_list_entry *list_entry; uint64_t tag_bloom_bits; /* add versioned header */ memset(&nlh, 0x00, sizeof(struct udev_monitor_netlink_header)); memcpy(nlh.prefix, "libudev", 8); nlh.magic = htonl(UDEV_MONITOR_MAGIC); nlh.header_size = sizeof(struct udev_monitor_netlink_header); val = udev_device_get_subsystem(udev_device); nlh.filter_subsystem_hash = htonl(util_string_hash32(val)); val = udev_device_get_devtype(udev_device); if (val != NULL) nlh.filter_devtype_hash = htonl(util_string_hash32(val)); iov[0].iov_base = &nlh; iov[0].iov_len = sizeof(struct udev_monitor_netlink_header); /* add tag bloom filter */ tag_bloom_bits = 0; udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(udev_device)) tag_bloom_bits |= util_string_bloom64(udev_list_entry_get_name(list_entry)); if (tag_bloom_bits > 0) { nlh.filter_tag_bloom_hi = htonl(tag_bloom_bits >> 32); nlh.filter_tag_bloom_lo = htonl(tag_bloom_bits & 0xffffffff); } /* add properties list */ nlh.properties_off = iov[0].iov_len; nlh.properties_len = blen; iov[1].iov_base = (char *)buf; iov[1].iov_len = blen; memset(&smsg, 0x00, sizeof(struct msghdr)); smsg.msg_iov = iov; smsg.msg_iovlen = 2; /* * Use custom address for target, or the default one. * * If we send to a multicast group, we will get * ECONNREFUSED, which is expected. */ if (destination != NULL) smsg.msg_name = &destination->snl; else smsg.msg_name = &udev_monitor->snl_destination; smsg.msg_namelen = sizeof(struct sockaddr_nl); count = sendmsg(udev_monitor->sock, &smsg, 0); info(udev_monitor->udev, "passed %zi bytes to netlink monitor %p\n", count, udev_monitor); return count; } return -EINVAL; } /** * udev_monitor_filter_add_match_subsystem_devtype: * @udev_monitor: the monitor * @subsystem: the subsystem value to match the incoming devices against * @devtype: the devtype value to match the incoming devices against * * This filter is efficiently executed inside the kernel, and libudev subscribers * will usually not be woken up for devices which do not match. * * The filter must be installed before the monitor is switched to listening mode. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, const char *subsystem, const char *devtype) { if (udev_monitor == NULL) return -EINVAL; if (subsystem == NULL) return -EINVAL; if (udev_list_entry_add(&udev_monitor->filter_subsystem_list, subsystem, devtype) == NULL) return -ENOMEM; return 0; } /** * udev_monitor_filter_add_match_tag: * @udev_monitor: the monitor * @tag: the name of a tag * * This filter is efficiently executed inside the kernel, and libudev subscribers * will usually not be woken up for devices which do not match. * * The filter must be installed before the monitor is switched to listening mode. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_monitor_filter_add_match_tag(struct udev_monitor *udev_monitor, const char *tag) { if (udev_monitor == NULL) return -EINVAL; if (tag == NULL) return -EINVAL; if (udev_list_entry_add(&udev_monitor->filter_tag_list, tag, NULL) == NULL) return -ENOMEM; return 0; } /** * udev_monitor_filter_remove: * @udev_monitor: monitor * * Remove all filters from monitor. * * Returns: 0 on success, otherwise a negative error value. */ UDEV_EXPORT int udev_monitor_filter_remove(struct udev_monitor *udev_monitor) { static struct sock_fprog filter = { 0, NULL }; udev_list_cleanup(&udev_monitor->filter_subsystem_list); return setsockopt(udev_monitor->sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)); } udev-182/src/PaxHeaders.12492/udev-builtin-hwdb.c0000644000521600052160000000013211711107662017651 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083327.117104701 30 ctime=1332097353.309438927 udev-182/src/udev-builtin-hwdb.c0000664000521600052160000001576111711107662016267 0ustar00kaykay00000000000000/* * usb-db, pci-db - lookup vendor/product database * * Copyright (C) 2009 Lennart Poettering * Copyright (C) 2011 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include "udev.h" static int get_id_attr( struct udev_device *parent, const char *name, uint16_t *value) { const char *t; unsigned u; if (!(t = udev_device_get_sysattr_value(parent, name))) { fprintf(stderr, "%s lacks %s.\n", udev_device_get_syspath(parent), name); return -1; } if (!strncmp(t, "0x", 2)) t += 2; if (sscanf(t, "%04x", &u) != 1 || u > 0xFFFFU) { fprintf(stderr, "Failed to parse %s on %s.\n", name, udev_device_get_syspath(parent)); return -1; } *value = (uint16_t) u; return 0; } static int get_vid_pid( struct udev_device *parent, const char *vendor_attr, const char *product_attr, uint16_t *vid, uint16_t *pid) { if (get_id_attr(parent, vendor_attr, vid) < 0) return -1; else if (*vid <= 0) { fprintf(stderr, "Invalid vendor id.\n"); return -1; } if (get_id_attr(parent, product_attr, pid) < 0) return -1; return 0; } static void rstrip(char *n) { size_t i; for (i = strlen(n); i > 0 && isspace(n[i-1]); i--) n[i-1] = 0; } #define HEXCHARS "0123456789abcdefABCDEF" #define WHITESPACE " \t\n\r" static int lookup_vid_pid(const char *database, uint16_t vid, uint16_t pid, char **vendor, char **product) { FILE *f; int ret = -1; int found_vendor = 0; char *line = NULL; *vendor = *product = NULL; if (!(f = fopen(database, "rme"))) { fprintf(stderr, "Failed to open database file '%s': %s\n", database, strerror(errno)); return -1; } for (;;) { size_t n; if (getline(&line, &n, f) < 0) break; rstrip(line); if (line[0] == '#' || line[0] == 0) continue; if (strspn(line, HEXCHARS) == 4) { unsigned u; if (found_vendor) break; if (sscanf(line, "%04x", &u) == 1 && u == vid) { char *t; t = line+4; t += strspn(t, WHITESPACE); if (!(*vendor = strdup(t))) { fprintf(stderr, "Out of memory.\n"); goto finish; } found_vendor = 1; } continue; } if (found_vendor && line[0] == '\t' && strspn(line+1, HEXCHARS) == 4) { unsigned u; if (sscanf(line+1, "%04x", &u) == 1 && u == pid) { char *t; t = line+5; t += strspn(t, WHITESPACE); if (!(*product = strdup(t))) { fprintf(stderr, "Out of memory.\n"); goto finish; } break; } } } ret = 0; finish: free(line); fclose(f); if (ret < 0) { free(*product); free(*vendor); *product = *vendor = NULL; } return ret; } static struct udev_device *find_device(struct udev_device *dev, const char *subsys, const char *devtype) { const char *str; str = udev_device_get_subsystem(dev); if (str == NULL) goto try_parent; if (strcmp(str, subsys) != 0) goto try_parent; if (devtype != NULL) { str = udev_device_get_devtype(dev); if (str == NULL) goto try_parent; if (strcmp(str, devtype) != 0) goto try_parent; } return dev; try_parent: return udev_device_get_parent_with_subsystem_devtype(dev, subsys, devtype); } static int builtin_db(struct udev_device *dev, bool test, const char *database, const char *vendor_attr, const char *product_attr, const char *subsys, const char *devtype) { struct udev_device *parent; uint16_t vid = 0, pid = 0; char *vendor = NULL, *product = NULL; parent = find_device(dev, subsys, devtype); if (!parent) { fprintf(stderr, "Failed to find device.\n"); goto finish; } if (get_vid_pid(parent, vendor_attr, product_attr, &vid, &pid) < 0) goto finish; if (lookup_vid_pid(database, vid, pid, &vendor, &product) < 0) goto finish; if (vendor) udev_builtin_add_property(dev, test, "ID_VENDOR_FROM_DATABASE", vendor); if (product) udev_builtin_add_property(dev, test, "ID_MODEL_FROM_DATABASE", product); finish: free(vendor); free(product); return 0; } static int builtin_usb_db(struct udev_device *dev, int argc, char *argv[], bool test) { return builtin_db(dev, test, USB_DATABASE, "idVendor", "idProduct", "usb", "usb_device"); } static int builtin_pci_db(struct udev_device *dev, int argc, char *argv[], bool test) { return builtin_db(dev, test, PCI_DATABASE, "vendor", "device", "pci", NULL); } const struct udev_builtin udev_builtin_usb_db = { .name = "usb-db", .cmd = builtin_usb_db, .help = "USB vendor/product database", .run_once = true, }; const struct udev_builtin udev_builtin_pci_db = { .name = "pci-db", .cmd = builtin_pci_db, .help = "PCI vendor/product database", .run_once = true, }; udev-182/src/PaxHeaders.12492/libudev-queue.c0000644000521600052160000000013211725373221017075 xustar000000000000000030 mtime=1331033745.903058028 30 atime=1332083324.041104628 30 ctime=1332097353.029438921 udev-182/src/libudev-queue.c0000664000521600052160000003323211725373221015504 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008 Kay Sievers * Copyright (C) 2009 Alan Jenkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-queue * @short_description: access to currently active events * * The udev daemon processes events asynchronously. All events which do not have * interdependencies run in parallel. This exports the current state of the * event processing queue, and the current event sequence numbers from the kernel * and the udev daemon. */ /** * udev_queue: * * Opaque object representing the current event queue in the udev daemon. */ struct udev_queue { struct udev *udev; int refcount; struct udev_list queue_list; }; /** * udev_queue_new: * @udev: udev library context * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev queue context. * * Returns: the udev queue context, or #NULL on error. **/ UDEV_EXPORT struct udev_queue *udev_queue_new(struct udev *udev) { struct udev_queue *udev_queue; if (udev == NULL) return NULL; udev_queue = calloc(1, sizeof(struct udev_queue)); if (udev_queue == NULL) return NULL; udev_queue->refcount = 1; udev_queue->udev = udev; udev_list_init(udev, &udev_queue->queue_list, false); return udev_queue; } /** * udev_queue_ref: * @udev_queue: udev queue context * * Take a reference of a udev queue context. * * Returns: the same udev queue context. **/ UDEV_EXPORT struct udev_queue *udev_queue_ref(struct udev_queue *udev_queue) { if (udev_queue == NULL) return NULL; udev_queue->refcount++; return udev_queue; } /** * udev_queue_unref: * @udev_queue: udev queue context * * Drop a reference of a udev queue context. If the refcount reaches zero, * the resources of the queue context will be released. **/ UDEV_EXPORT void udev_queue_unref(struct udev_queue *udev_queue) { if (udev_queue == NULL) return; udev_queue->refcount--; if (udev_queue->refcount > 0) return; udev_list_cleanup(&udev_queue->queue_list); free(udev_queue); } /** * udev_queue_get_udev: * @udev_queue: udev queue context * * Retrieve the udev library context the queue context was created with. * * Returns: the udev library context. **/ UDEV_EXPORT struct udev *udev_queue_get_udev(struct udev_queue *udev_queue) { if (udev_queue == NULL) return NULL; return udev_queue->udev; } unsigned long long int udev_get_kernel_seqnum(struct udev *udev) { char filename[UTIL_PATH_SIZE]; unsigned long long int seqnum; int fd; char buf[32]; ssize_t len; util_strscpyl(filename, sizeof(filename), udev_get_sys_path(udev), "/kernel/uevent_seqnum", NULL); fd = open(filename, O_RDONLY|O_CLOEXEC); if (fd < 0) return 0; len = read(fd, buf, sizeof(buf)); close(fd); if (len <= 2) return 0; buf[len-1] = '\0'; seqnum = strtoull(buf, NULL, 10); return seqnum; } /** * udev_queue_get_kernel_seqnum: * @udev_queue: udev queue context * * Returns: the current kernel event sequence number. **/ UDEV_EXPORT unsigned long long int udev_queue_get_kernel_seqnum(struct udev_queue *udev_queue) { unsigned long long int seqnum; if (udev_queue == NULL) return -EINVAL; seqnum = udev_get_kernel_seqnum(udev_queue->udev); dbg(udev_queue->udev, "seqnum=%llu\n", seqnum); return seqnum; } int udev_queue_read_seqnum(FILE *queue_file, unsigned long long int *seqnum) { if (fread(seqnum, sizeof(unsigned long long int), 1, queue_file) != 1) return -1; return 0; } ssize_t udev_queue_skip_devpath(FILE *queue_file) { unsigned short int len; if (fread(&len, sizeof(unsigned short int), 1, queue_file) == 1) { char devpath[len]; /* use fread to skip, fseek might drop buffered data */ if (fread(devpath, 1, len, queue_file) == len) return len; } return -1; } ssize_t udev_queue_read_devpath(FILE *queue_file, char *devpath, size_t size) { unsigned short int read_bytes = 0; unsigned short int len; if (fread(&len, sizeof(unsigned short int), 1, queue_file) != 1) return -1; read_bytes = (len < size - 1) ? len : size - 1; if (fread(devpath, 1, read_bytes, queue_file) != read_bytes) return -1; devpath[read_bytes] = '\0'; /* if devpath was too long, skip unread characters */ if (read_bytes != len) { unsigned short int skip_bytes = len - read_bytes; char buf[skip_bytes]; if (fread(buf, 1, skip_bytes, queue_file) != skip_bytes) return -1; } return read_bytes; } static FILE *open_queue_file(struct udev_queue *udev_queue, unsigned long long int *seqnum_start) { char filename[UTIL_PATH_SIZE]; FILE *queue_file; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev_queue->udev), "/queue.bin", NULL); queue_file = fopen(filename, "re"); if (queue_file == NULL) return NULL; if (udev_queue_read_seqnum(queue_file, seqnum_start) < 0) { err(udev_queue->udev, "corrupt queue file\n"); fclose(queue_file); return NULL; } return queue_file; } /** * udev_queue_get_udev_seqnum: * @udev_queue: udev queue context * * Returns: the last known udev event sequence number. **/ UDEV_EXPORT unsigned long long int udev_queue_get_udev_seqnum(struct udev_queue *udev_queue) { unsigned long long int seqnum_udev; FILE *queue_file; queue_file = open_queue_file(udev_queue, &seqnum_udev); if (queue_file == NULL) return 0; for (;;) { unsigned long long int seqnum; ssize_t devpath_len; if (udev_queue_read_seqnum(queue_file, &seqnum) < 0) break; devpath_len = udev_queue_skip_devpath(queue_file); if (devpath_len < 0) break; if (devpath_len > 0) seqnum_udev = seqnum; } fclose(queue_file); return seqnum_udev; } /** * udev_queue_get_udev_is_active: * @udev_queue: udev queue context * * Returns: a flag indicating if udev is active. **/ UDEV_EXPORT int udev_queue_get_udev_is_active(struct udev_queue *udev_queue) { unsigned long long int seqnum_start; FILE *queue_file; queue_file = open_queue_file(udev_queue, &seqnum_start); if (queue_file == NULL) return 0; fclose(queue_file); return 1; } /** * udev_queue_get_queue_is_empty: * @udev_queue: udev queue context * * Returns: a flag indicating if udev is currently handling events. **/ UDEV_EXPORT int udev_queue_get_queue_is_empty(struct udev_queue *udev_queue) { unsigned long long int seqnum_kernel; unsigned long long int seqnum_udev = 0; int queued = 0; int is_empty = 0; FILE *queue_file; if (udev_queue == NULL) return -EINVAL; queue_file = open_queue_file(udev_queue, &seqnum_udev); if (queue_file == NULL) return 1; for (;;) { unsigned long long int seqnum; ssize_t devpath_len; if (udev_queue_read_seqnum(queue_file, &seqnum) < 0) break; devpath_len = udev_queue_skip_devpath(queue_file); if (devpath_len < 0) break; if (devpath_len > 0) { queued++; seqnum_udev = seqnum; } else { queued--; } } if (queued > 0) { dbg(udev_queue->udev, "queue is not empty\n"); goto out; } seqnum_kernel = udev_queue_get_kernel_seqnum(udev_queue); if (seqnum_udev < seqnum_kernel) { dbg(udev_queue->udev, "queue is empty but kernel events still pending [%llu]<->[%llu]\n", seqnum_kernel, seqnum_udev); goto out; } dbg(udev_queue->udev, "queue is empty\n"); is_empty = 1; out: fclose(queue_file); return is_empty; } /** * udev_queue_get_seqnum_sequence_is_finished: * @udev_queue: udev queue context * @start: first event sequence number * @end: last event sequence number * * Returns: a flag indicating if any of the sequence numbers in the given range is currently active. **/ UDEV_EXPORT int udev_queue_get_seqnum_sequence_is_finished(struct udev_queue *udev_queue, unsigned long long int start, unsigned long long int end) { unsigned long long int seqnum; ssize_t devpath_len; int unfinished; FILE *queue_file; if (udev_queue == NULL) return -EINVAL; queue_file = open_queue_file(udev_queue, &seqnum); if (queue_file == NULL) return 1; if (start < seqnum) start = seqnum; if (start > end) { fclose(queue_file); return 1; } if (end - start > INT_MAX - 1) { fclose(queue_file); return -EOVERFLOW; } /* * we might start with 0, and handle the initial seqnum * only when we find an entry in the queue file **/ unfinished = end - start; do { if (udev_queue_read_seqnum(queue_file, &seqnum) < 0) break; devpath_len = udev_queue_skip_devpath(queue_file); if (devpath_len < 0) break; /* * we might start with an empty or re-build queue file, where * the initial seqnum is not recorded as finished */ if (start == seqnum && devpath_len > 0) unfinished++; if (devpath_len == 0) { if (seqnum >= start && seqnum <= end) unfinished--; } } while (unfinished > 0); fclose(queue_file); return (unfinished == 0); } /** * udev_queue_get_seqnum_is_finished: * @udev_queue: udev queue context * @seqnum: sequence number * * Returns: a flag indicating if the given sequence number is currently active. **/ UDEV_EXPORT int udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue, unsigned long long int seqnum) { if (!udev_queue_get_seqnum_sequence_is_finished(udev_queue, seqnum, seqnum)) return 0; dbg(udev_queue->udev, "seqnum: %llu finished\n", seqnum); return 1; } /** * udev_queue_get_queued_list_entry: * @udev_queue: udev queue context * * Returns: the first entry of the list of queued events. **/ UDEV_EXPORT struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev_queue) { unsigned long long int seqnum; FILE *queue_file; if (udev_queue == NULL) return NULL; udev_list_cleanup(&udev_queue->queue_list); queue_file = open_queue_file(udev_queue, &seqnum); if (queue_file == NULL) return NULL; for (;;) { char syspath[UTIL_PATH_SIZE]; char *s; size_t l; ssize_t len; char seqnum_str[32]; struct udev_list_entry *list_entry; if (udev_queue_read_seqnum(queue_file, &seqnum) < 0) break; snprintf(seqnum_str, sizeof(seqnum_str), "%llu", seqnum); s = syspath; l = util_strpcpyl(&s, sizeof(syspath), udev_get_sys_path(udev_queue->udev), NULL); len = udev_queue_read_devpath(queue_file, s, l); if (len < 0) break; if (len > 0) { udev_list_entry_add(&udev_queue->queue_list, syspath, seqnum_str); } else { udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_queue->queue_list)) { if (strcmp(seqnum_str, udev_list_entry_get_value(list_entry)) == 0) { udev_list_entry_delete(list_entry); break; } } } } fclose(queue_file); return udev_list_get_entry(&udev_queue->queue_list); } struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev_queue); UDEV_EXPORT struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev_queue) { errno = ENOSYS; return NULL; } udev-182/src/PaxHeaders.12492/libudev-private.h0000644000521600052160000000013211711107662017427 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332082819.371092602 30 ctime=1332097352.989438919 udev-182/src/libudev-private.h0000664000521600052160000002510511711107662016036 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #ifndef _LIBUDEV_PRIVATE_H_ #define _LIBUDEV_PRIVATE_H_ #include #include #include #include #include "libudev.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define READ_END 0 #define WRITE_END 1 static inline void __attribute__((always_inline, format(printf, 2, 3))) udev_log_null(struct udev *udev, const char *format, ...) {} #define udev_log_cond(udev, prio, arg...) \ do { \ if (udev_get_log_priority(udev) >= prio) \ udev_log(udev, prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \ } while (0) #ifdef ENABLE_LOGGING # ifdef ENABLE_DEBUG # define dbg(udev, arg...) udev_log_cond(udev, LOG_DEBUG, ## arg) # else # define dbg(udev, arg...) udev_log_null(udev, ## arg) # endif # define info(udev, arg...) udev_log_cond(udev, LOG_INFO, ## arg) # define err(udev, arg...) udev_log_cond(udev, LOG_ERR, ## arg) #else # define dbg(udev, arg...) udev_log_null(udev, ## arg) # define info(udev, arg...) udev_log_null(udev, ## arg) # define err(udev, arg...) udev_log_null(udev, ## arg) #endif #define UDEV_EXPORT __attribute__ ((visibility("default"))) static inline void udev_log_init(const char *program_name) { openlog(program_name, LOG_PID | LOG_CONS, LOG_DAEMON); } static inline void udev_log_close(void) { closelog(); } /* libudev.c */ void udev_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, ...) __attribute__((format(printf, 6, 7))); int udev_get_rules_path(struct udev *udev, char **path[], unsigned long long *ts_usec[]); struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value); struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev); /* libudev-device.c */ struct udev_device *udev_device_new(struct udev *udev); struct udev_device *udev_device_new_from_id_filename(struct udev *udev, char *id); mode_t udev_device_get_devnode_mode(struct udev_device *udev_device); int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath); int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode); int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique); void udev_device_cleanup_devlinks_list(struct udev_device *udev_device); struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value); void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property); int udev_device_add_property_from_string_parse_finish(struct udev_device *udev_device); char **udev_device_get_properties_envp(struct udev_device *udev_device); ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf); int udev_device_read_db(struct udev_device *udev_device, const char *dbfile); int udev_device_read_uevent_file(struct udev_device *udev_device); int udev_device_set_action(struct udev_device *udev_device, const char *action); const char *udev_device_get_devpath_old(struct udev_device *udev_device); const char *udev_device_get_id_filename(struct udev_device *udev_device); void udev_device_set_is_initialized(struct udev_device *udev_device); int udev_device_add_tag(struct udev_device *udev_device, const char *tag); void udev_device_cleanup_tags_list(struct udev_device *udev_device); unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_device); void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized); int udev_device_get_devlink_priority(struct udev_device *udev_device); int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio); int udev_device_get_watch_handle(struct udev_device *udev_device); int udev_device_set_watch_handle(struct udev_device *udev_device, int handle); int udev_device_get_ifindex(struct udev_device *udev_device); void udev_device_set_info_loaded(struct udev_device *device); bool udev_device_get_db_persist(struct udev_device *udev_device); void udev_device_set_db_persist(struct udev_device *udev_device); /* libudev-device-private.c */ int udev_device_update_db(struct udev_device *udev_device); int udev_device_delete_db(struct udev_device *udev_device); int udev_device_tag_index(struct udev_device *dev, struct udev_device *dev_old, bool add); /* libudev-monitor.c - netlink/unix socket communication */ int udev_monitor_disconnect(struct udev_monitor *udev_monitor); int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender); int udev_monitor_send_device(struct udev_monitor *udev_monitor, struct udev_monitor *destination, struct udev_device *udev_device); struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const char *name, int fd); /* libudev-list.c */ struct udev_list_node { struct udev_list_node *next, *prev; }; struct udev_list { struct udev *udev; struct udev_list_node node; struct udev_list_entry **entries; unsigned int entries_cur; unsigned int entries_max; bool unique; }; #define UDEV_LIST(list) struct udev_list_node list = { &(list), &(list) } void udev_list_node_init(struct udev_list_node *list); int udev_list_node_is_empty(struct udev_list_node *list); void udev_list_node_append(struct udev_list_node *new, struct udev_list_node *list); void udev_list_node_remove(struct udev_list_node *entry); #define udev_list_node_foreach(node, list) \ for (node = (list)->next; \ node != list; \ node = (node)->next) #define udev_list_node_foreach_safe(node, tmp, list) \ for (node = (list)->next, tmp = (node)->next; \ node != list; \ node = tmp, tmp = (tmp)->next) void udev_list_init(struct udev *udev, struct udev_list *list, bool unique); void udev_list_cleanup(struct udev_list *list); struct udev_list_entry *udev_list_get_entry(struct udev_list *list); struct udev_list_entry *udev_list_entry_add(struct udev_list *list, const char *name, const char *value); void udev_list_entry_delete(struct udev_list_entry *entry); void udev_list_entry_insert_before(struct udev_list_entry *new, struct udev_list_entry *entry); void udev_list_entry_append(struct udev_list_entry *new, struct udev_list *list); int udev_list_entry_get_num(struct udev_list_entry *list_entry); void udev_list_entry_set_num(struct udev_list_entry *list_entry, int num); #define udev_list_entry_foreach_safe(entry, tmp, first) \ for (entry = first, tmp = udev_list_entry_get_next(entry); \ entry != NULL; \ entry = tmp, tmp = udev_list_entry_get_next(tmp)) /* libudev-queue.c */ unsigned long long int udev_get_kernel_seqnum(struct udev *udev); int udev_queue_read_seqnum(FILE *queue_file, unsigned long long int *seqnum); ssize_t udev_queue_read_devpath(FILE *queue_file, char *devpath, size_t size); ssize_t udev_queue_skip_devpath(FILE *queue_file); /* libudev-queue-private.c */ struct udev_queue_export *udev_queue_export_new(struct udev *udev); struct udev_queue_export *udev_queue_export_unref(struct udev_queue_export *udev_queue_export); void udev_queue_export_cleanup(struct udev_queue_export *udev_queue_export); int udev_queue_export_device_queued(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device); int udev_queue_export_device_finished(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device); /* libudev-util.c */ #define UTIL_PATH_SIZE 1024 #define UTIL_NAME_SIZE 512 #define UTIL_LINE_SIZE 16384 #define UDEV_ALLOWED_CHARS_INPUT "/ $%?," ssize_t util_get_sys_core_link_value(struct udev *udev, const char *slink, const char *syspath, char *value, size_t size); int util_resolve_sys_link(struct udev *udev, char *syspath, size_t size); int util_log_priority(const char *priority); size_t util_path_encode(const char *src, char *dest, size_t size); size_t util_path_decode(char *s); void util_remove_trailing_chars(char *path, char c); size_t util_strpcpy(char **dest, size_t size, const char *src); size_t util_strpcpyl(char **dest, size_t size, const char *src, ...) __attribute__((sentinel)); size_t util_strscpy(char *dest, size_t size, const char *src); size_t util_strscpyl(char *dest, size_t size, const char *src, ...) __attribute__((sentinel)); int util_replace_whitespace(const char *str, char *to, size_t len); int util_replace_chars(char *str, const char *white); unsigned int util_string_hash32(const char *key); uint64_t util_string_bloom64(const char *str); /* libudev-util-private.c */ int util_create_path(struct udev *udev, const char *path); int util_create_path_selinux(struct udev *udev, const char *path); int util_delete_path(struct udev *udev, const char *path); uid_t util_lookup_user(struct udev *udev, const char *user); gid_t util_lookup_group(struct udev *udev, const char *group); int util_resolve_subsys_kernel(struct udev *udev, const char *string, char *result, size_t maxsize, int read_value); unsigned long long ts_usec(const struct timespec *ts); unsigned long long now_usec(void); /* libudev-selinux-private.c */ #ifndef WITH_SELINUX static inline void udev_selinux_init(struct udev *udev) {} static inline void udev_selinux_exit(struct udev *udev) {} static inline void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode) {} static inline void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode) {} static inline void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode) {} static inline void udev_selinux_resetfscreatecon(struct udev *udev) {} #else void udev_selinux_init(struct udev *udev); void udev_selinux_exit(struct udev *udev); void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode); void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode); void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode); void udev_selinux_resetfscreatecon(struct udev *udev); #endif #endif udev-182/src/PaxHeaders.12492/udevadm-test.c0000644000521600052160000000013111711107662016721 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083328.371104731 29 ctime=1332097353.42943893 udev-182/src/udevadm-test.c0000664000521600052160000001400311711107662015324 0ustar00kaykay00000000000000/* * Copyright (C) 2003-2004 Greg Kroah-Hartman * Copyright (C) 2004-2008 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static int adm_test(struct udev *udev, int argc, char *argv[]) { int resolve_names = 1; char filename[UTIL_PATH_SIZE]; const char *action = "add"; const char *syspath = NULL; struct udev_event *event = NULL; struct udev_device *dev = NULL; struct udev_rules *rules = NULL; struct udev_list_entry *entry; sigset_t mask, sigmask_orig; int err; int rc = 0; static const struct option options[] = { { "action", required_argument, NULL, 'a' }, { "resolve-names", required_argument, NULL, 'N' }, { "help", no_argument, NULL, 'h' }, {} }; info(udev, "version %s\n", VERSION); for (;;) { int option; option = getopt_long(argc, argv, "a:s:N:fh", options, NULL); if (option == -1) break; dbg(udev, "option '%c'\n", option); switch (option) { case 'a': action = optarg; break; case 'N': if (strcmp (optarg, "early") == 0) { resolve_names = 1; } else if (strcmp (optarg, "late") == 0) { resolve_names = 0; } else if (strcmp (optarg, "never") == 0) { resolve_names = -1; } else { fprintf(stderr, "resolve-names must be early, late or never\n"); err(udev, "resolve-names must be early, late or never\n"); exit(EXIT_FAILURE); } break; case 'h': printf("Usage: udevadm test OPTIONS \n" " --action= set action string\n" " --help\n\n"); exit(EXIT_SUCCESS); default: exit(EXIT_FAILURE); } } syspath = argv[optind]; if (syspath == NULL) { fprintf(stderr, "syspath parameter missing\n"); rc = 2; goto out; } printf("This program is for debugging only, it does not run any program,\n" "specified by a RUN key. It may show incorrect results, because\n" "some values may be different, or not available at a simulation run.\n" "\n"); sigprocmask(SIG_SETMASK, NULL, &sigmask_orig); udev_builtin_init(udev); rules = udev_rules_new(udev, resolve_names); if (rules == NULL) { fprintf(stderr, "error reading rules\n"); rc = 3; goto out; } /* add /sys if needed */ if (strncmp(syspath, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) util_strscpyl(filename, sizeof(filename), udev_get_sys_path(udev), syspath, NULL); else util_strscpy(filename, sizeof(filename), syspath); util_remove_trailing_chars(filename, '/'); dev = udev_device_new_from_syspath(udev, filename); if (dev == NULL) { fprintf(stderr, "unable to open device '%s'\n", filename); rc = 4; goto out; } /* skip reading of db, but read kernel parameters */ udev_device_set_info_loaded(dev); udev_device_read_uevent_file(dev); udev_device_set_action(dev, action); event = udev_event_new(dev); sigfillset(&mask); sigprocmask(SIG_SETMASK, &mask, &sigmask_orig); event->fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); if (event->fd_signal < 0) { fprintf(stderr, "error creating signalfd\n"); rc = 5; goto out; } err = udev_event_execute_rules(event, rules, &sigmask_orig); udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); if (err == 0) { udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { char program[UTIL_PATH_SIZE]; udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); printf("run: '%s'\n", program); } } out: if (event != NULL && event->fd_signal >= 0) close(event->fd_signal); udev_event_unref(event); udev_device_unref(dev); udev_rules_unref(rules); udev_builtin_exit(udev); return rc; } const struct udevadm_cmd udevadm_test = { .name = "test", .cmd = adm_test, .help = "test an event run", .debug = true, }; udev-182/src/PaxHeaders.12492/udevd.c0000644000521600052160000000013011711137745015432 xustar000000000000000030 mtime=1327808485.643538062 29 atime=1332083330.81810479 29 ctime=1332097353.45043893 udev-182/src/udevd.c0000664000521600052160000017722211711137745014053 0ustar00kaykay00000000000000/* * Copyright (C) 2004-2011 Kay Sievers * Copyright (C) 2004 Chris Friesen * Copyright (C) 2009 Canonical Ltd. * Copyright (C) 2009 Scott James Remnant * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" #include "sd-daemon.h" static bool debug; void udev_main_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { if (debug) { char buf[1024]; struct timespec ts; vsnprintf(buf, sizeof(buf), format, args); clock_gettime(CLOCK_MONOTONIC, &ts); fprintf(stderr, "[%llu.%06u] [%u] %s: %s", (unsigned long long) ts.tv_sec, (unsigned int) ts.tv_nsec/1000, (int) getpid(), fn, buf); } else { vsyslog(priority, format, args); } } static struct udev_rules *rules; static struct udev_queue_export *udev_queue_export; static struct udev_ctrl *udev_ctrl; static struct udev_monitor *monitor; static int worker_watch[2] = { -1, -1 }; static int fd_signal = -1; static int fd_ep = -1; static int fd_inotify = -1; static bool stop_exec_queue; static bool reload; static int children; static int children_max; static int exec_delay; static sigset_t sigmask_orig; static UDEV_LIST(event_list); static UDEV_LIST(worker_list); static bool udev_exit; enum event_state { EVENT_UNDEF, EVENT_QUEUED, EVENT_RUNNING, }; struct event { struct udev_list_node node; struct udev *udev; struct udev_device *dev; enum event_state state; int exitcode; unsigned long long int delaying_seqnum; unsigned long long int seqnum; const char *devpath; size_t devpath_len; const char *devpath_old; dev_t devnum; bool is_block; int ifindex; }; static struct event *node_to_event(struct udev_list_node *node) { char *event; event = (char *)node; event -= offsetof(struct event, node); return (struct event *)event; } static void event_queue_cleanup(struct udev *udev, enum event_state type); enum worker_state { WORKER_UNDEF, WORKER_RUNNING, WORKER_IDLE, WORKER_KILLED, }; struct worker { struct udev_list_node node; struct udev *udev; int refcount; pid_t pid; struct udev_monitor *monitor; enum worker_state state; struct event *event; unsigned long long event_start_usec; }; /* passed from worker to main process */ struct worker_message { pid_t pid; int exitcode; }; static struct worker *node_to_worker(struct udev_list_node *node) { char *worker; worker = (char *)node; worker -= offsetof(struct worker, node); return (struct worker *)worker; } static void event_queue_delete(struct event *event, bool export) { udev_list_node_remove(&event->node); if (export) { udev_queue_export_device_finished(udev_queue_export, event->dev); info(event->udev, "seq %llu done with %i\n", udev_device_get_seqnum(event->dev), event->exitcode); } udev_device_unref(event->dev); free(event); } static struct worker *worker_ref(struct worker *worker) { worker->refcount++; return worker; } static void worker_cleanup(struct worker *worker) { udev_list_node_remove(&worker->node); udev_monitor_unref(worker->monitor); children--; free(worker); } static void worker_unref(struct worker *worker) { worker->refcount--; if (worker->refcount > 0) return; info(worker->udev, "worker [%u] cleaned up\n", worker->pid); worker_cleanup(worker); } static void worker_list_cleanup(struct udev *udev) { struct udev_list_node *loop, *tmp; udev_list_node_foreach_safe(loop, tmp, &worker_list) { struct worker *worker = node_to_worker(loop); worker_cleanup(worker); } } static void worker_new(struct event *event) { struct udev *udev = event->udev; struct worker *worker; struct udev_monitor *worker_monitor; pid_t pid; /* listen for new events */ worker_monitor = udev_monitor_new_from_netlink(udev, NULL); if (worker_monitor == NULL) return; /* allow the main daemon netlink address to send devices to the worker */ udev_monitor_allow_unicast_sender(worker_monitor, monitor); udev_monitor_enable_receiving(worker_monitor); worker = calloc(1, sizeof(struct worker)); if (worker == NULL) { udev_monitor_unref(worker_monitor); return; } /* worker + event reference */ worker->refcount = 2; worker->udev = udev; pid = fork(); switch (pid) { case 0: { struct udev_device *dev = NULL; int fd_monitor; struct epoll_event ep_signal, ep_monitor; sigset_t mask; int rc = EXIT_SUCCESS; /* take initial device from queue */ dev = event->dev; event->dev = NULL; free(worker); worker_list_cleanup(udev); event_queue_cleanup(udev, EVENT_UNDEF); udev_queue_export_unref(udev_queue_export); udev_monitor_unref(monitor); udev_ctrl_unref(udev_ctrl); close(fd_signal); close(fd_ep); close(worker_watch[READ_END]); sigfillset(&mask); fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); if (fd_signal < 0) { err(udev, "error creating signalfd %m\n"); rc = 2; goto out; } fd_ep = epoll_create1(EPOLL_CLOEXEC); if (fd_ep < 0) { err(udev, "error creating epoll fd: %m\n"); rc = 3; goto out; } memset(&ep_signal, 0, sizeof(struct epoll_event)); ep_signal.events = EPOLLIN; ep_signal.data.fd = fd_signal; fd_monitor = udev_monitor_get_fd(worker_monitor); memset(&ep_monitor, 0, sizeof(struct epoll_event)); ep_monitor.events = EPOLLIN; ep_monitor.data.fd = fd_monitor; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_signal, &ep_signal) < 0 || epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_monitor, &ep_monitor) < 0) { err(udev, "fail to add fds to epoll: %m\n"); rc = 4; goto out; } /* request TERM signal if parent exits */ prctl(PR_SET_PDEATHSIG, SIGTERM); for (;;) { struct udev_event *udev_event; struct worker_message msg; int err; info(udev, "seq %llu running\n", udev_device_get_seqnum(dev)); udev_event = udev_event_new(dev); if (udev_event == NULL) { rc = 5; goto out; } /* needed for SIGCHLD/SIGTERM in spawn() */ udev_event->fd_signal = fd_signal; if (exec_delay > 0) udev_event->exec_delay = exec_delay; /* apply rules, create node, symlinks */ err = udev_event_execute_rules(udev_event, rules, &sigmask_orig); if (err == 0) udev_event_execute_run(udev_event, &sigmask_orig); /* apply/restore inotify watch */ if (err == 0 && udev_event->inotify_watch) { udev_watch_begin(udev, dev); udev_device_update_db(dev); } /* send processed event back to libudev listeners */ udev_monitor_send_device(worker_monitor, NULL, dev); /* send udevd the result of the event execution */ memset(&msg, 0, sizeof(struct worker_message)); if (err != 0) msg.exitcode = err; msg.pid = getpid(); send(worker_watch[WRITE_END], &msg, sizeof(struct worker_message), 0); info(udev, "seq %llu processed with %i\n", udev_device_get_seqnum(dev), err); udev_device_unref(dev); dev = NULL; if (udev_event->sigterm) { udev_event_unref(udev_event); goto out; } udev_event_unref(udev_event); /* wait for more device messages from main udevd, or term signal */ while (dev == NULL) { struct epoll_event ev[4]; int fdcount; int i; fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), -1); if (fdcount < 0) { if (errno == EINTR) continue; err = -errno; err(udev, "failed to poll: %m\n"); goto out; } for (i = 0; i < fdcount; i++) { if (ev[i].data.fd == fd_monitor && ev[i].events & EPOLLIN) { dev = udev_monitor_receive_device(worker_monitor); break; } else if (ev[i].data.fd == fd_signal && ev[i].events & EPOLLIN) { struct signalfd_siginfo fdsi; ssize_t size; size = read(fd_signal, &fdsi, sizeof(struct signalfd_siginfo)); if (size != sizeof(struct signalfd_siginfo)) continue; switch (fdsi.ssi_signo) { case SIGTERM: goto out; } } } } } out: udev_device_unref(dev); if (fd_signal >= 0) close(fd_signal); if (fd_ep >= 0) close(fd_ep); close(fd_inotify); close(worker_watch[WRITE_END]); udev_rules_unref(rules); udev_builtin_exit(udev); udev_monitor_unref(worker_monitor); udev_unref(udev); udev_log_close(); exit(rc); } case -1: udev_monitor_unref(worker_monitor); event->state = EVENT_QUEUED; free(worker); err(udev, "fork of child failed: %m\n"); break; default: /* close monitor, but keep address around */ udev_monitor_disconnect(worker_monitor); worker->monitor = worker_monitor; worker->pid = pid; worker->state = WORKER_RUNNING; worker->event_start_usec = now_usec(); worker->event = event; event->state = EVENT_RUNNING; udev_list_node_append(&worker->node, &worker_list); children++; info(udev, "seq %llu forked new worker [%u]\n", udev_device_get_seqnum(event->dev), pid); break; } } static void event_run(struct event *event) { struct udev_list_node *loop; udev_list_node_foreach(loop, &worker_list) { struct worker *worker = node_to_worker(loop); ssize_t count; if (worker->state != WORKER_IDLE) continue; count = udev_monitor_send_device(monitor, worker->monitor, event->dev); if (count < 0) { err(event->udev, "worker [%u] did not accept message %zi (%m), kill it\n", worker->pid, count); kill(worker->pid, SIGKILL); worker->state = WORKER_KILLED; continue; } worker_ref(worker); worker->event = event; worker->state = WORKER_RUNNING; worker->event_start_usec = now_usec(); event->state = EVENT_RUNNING; return; } if (children >= children_max) { if (children_max > 1) info(event->udev, "maximum number (%i) of children reached\n", children); return; } /* start new worker and pass initial device */ worker_new(event); } static int event_queue_insert(struct udev_device *dev) { struct event *event; event = calloc(1, sizeof(struct event)); if (event == NULL) return -1; event->udev = udev_device_get_udev(dev); event->dev = dev; event->seqnum = udev_device_get_seqnum(dev); event->devpath = udev_device_get_devpath(dev); event->devpath_len = strlen(event->devpath); event->devpath_old = udev_device_get_devpath_old(dev); event->devnum = udev_device_get_devnum(dev); event->is_block = (strcmp("block", udev_device_get_subsystem(dev)) == 0); event->ifindex = udev_device_get_ifindex(dev); udev_queue_export_device_queued(udev_queue_export, dev); info(event->udev, "seq %llu queued, '%s' '%s'\n", udev_device_get_seqnum(dev), udev_device_get_action(dev), udev_device_get_subsystem(dev)); event->state = EVENT_QUEUED; udev_list_node_append(&event->node, &event_list); return 0; } static void worker_kill(struct udev *udev, int retain) { struct udev_list_node *loop; int max; if (children <= retain) return; max = children - retain; udev_list_node_foreach(loop, &worker_list) { struct worker *worker = node_to_worker(loop); if (max-- <= 0) break; if (worker->state == WORKER_KILLED) continue; worker->state = WORKER_KILLED; kill(worker->pid, SIGTERM); } } /* lookup event for identical, parent, child device */ static bool is_devpath_busy(struct event *event) { struct udev_list_node *loop; size_t common; /* check if queue contains events we depend on */ udev_list_node_foreach(loop, &event_list) { struct event *loop_event = node_to_event(loop); /* we already found a later event, earlier can not block us, no need to check again */ if (loop_event->seqnum < event->delaying_seqnum) continue; /* event we checked earlier still exists, no need to check again */ if (loop_event->seqnum == event->delaying_seqnum) return true; /* found ourself, no later event can block us */ if (loop_event->seqnum >= event->seqnum) break; /* check major/minor */ if (major(event->devnum) != 0 && event->devnum == loop_event->devnum && event->is_block == loop_event->is_block) return true; /* check network device ifindex */ if (event->ifindex != 0 && event->ifindex == loop_event->ifindex) return true; /* check our old name */ if (event->devpath_old != NULL && strcmp(loop_event->devpath, event->devpath_old) == 0) { event->delaying_seqnum = loop_event->seqnum; return true; } /* compare devpath */ common = MIN(loop_event->devpath_len, event->devpath_len); /* one devpath is contained in the other? */ if (memcmp(loop_event->devpath, event->devpath, common) != 0) continue; /* identical device event found */ if (loop_event->devpath_len == event->devpath_len) { /* devices names might have changed/swapped in the meantime */ if (major(event->devnum) != 0 && (event->devnum != loop_event->devnum || event->is_block != loop_event->is_block)) continue; if (event->ifindex != 0 && event->ifindex != loop_event->ifindex) continue; event->delaying_seqnum = loop_event->seqnum; return true; } /* parent device event found */ if (event->devpath[common] == '/') { event->delaying_seqnum = loop_event->seqnum; return true; } /* child device event found */ if (loop_event->devpath[common] == '/') { event->delaying_seqnum = loop_event->seqnum; return true; } /* no matching device */ continue; } return false; } static void event_queue_start(struct udev *udev) { struct udev_list_node *loop; udev_list_node_foreach(loop, &event_list) { struct event *event = node_to_event(loop); if (event->state != EVENT_QUEUED) continue; /* do not start event if parent or child event is still running */ if (is_devpath_busy(event)) { dbg(udev, "delay seq %llu (%s)\n", event->seqnum, event->devpath); continue; } event_run(event); } } static void event_queue_cleanup(struct udev *udev, enum event_state match_type) { struct udev_list_node *loop, *tmp; udev_list_node_foreach_safe(loop, tmp, &event_list) { struct event *event = node_to_event(loop); if (match_type != EVENT_UNDEF && match_type != event->state) continue; event_queue_delete(event, false); } } static void worker_returned(int fd_worker) { for (;;) { struct worker_message msg; ssize_t size; struct udev_list_node *loop; size = recv(fd_worker, &msg, sizeof(struct worker_message), MSG_DONTWAIT); if (size != sizeof(struct worker_message)) break; /* lookup worker who sent the signal */ udev_list_node_foreach(loop, &worker_list) { struct worker *worker = node_to_worker(loop); if (worker->pid != msg.pid) continue; /* worker returned */ if (worker->event) { worker->event->exitcode = msg.exitcode; event_queue_delete(worker->event, true); worker->event = NULL; } if (worker->state != WORKER_KILLED) worker->state = WORKER_IDLE; worker_unref(worker); break; } } } /* receive the udevd message from userspace */ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) { struct udev *udev = udev_ctrl_get_udev(uctrl); struct udev_ctrl_connection *ctrl_conn; struct udev_ctrl_msg *ctrl_msg = NULL; const char *str; int i; ctrl_conn = udev_ctrl_get_connection(uctrl); if (ctrl_conn == NULL) goto out; ctrl_msg = udev_ctrl_receive_msg(ctrl_conn); if (ctrl_msg == NULL) goto out; i = udev_ctrl_get_set_log_level(ctrl_msg); if (i >= 0) { info(udev, "udevd message (SET_LOG_PRIORITY) received, log_priority=%i\n", i); udev_set_log_priority(udev, i); worker_kill(udev, 0); } if (udev_ctrl_get_stop_exec_queue(ctrl_msg) > 0) { info(udev, "udevd message (STOP_EXEC_QUEUE) received\n"); stop_exec_queue = true; } if (udev_ctrl_get_start_exec_queue(ctrl_msg) > 0) { info(udev, "udevd message (START_EXEC_QUEUE) received\n"); stop_exec_queue = false; } if (udev_ctrl_get_reload(ctrl_msg) > 0) { info(udev, "udevd message (RELOAD) received\n"); reload = true; } str = udev_ctrl_get_set_env(ctrl_msg); if (str != NULL) { char *key; key = strdup(str); if (key != NULL) { char *val; val = strchr(key, '='); if (val != NULL) { val[0] = '\0'; val = &val[1]; if (val[0] == '\0') { info(udev, "udevd message (ENV) received, unset '%s'\n", key); udev_add_property(udev, key, NULL); } else { info(udev, "udevd message (ENV) received, set '%s=%s'\n", key, val); udev_add_property(udev, key, val); } } else { err(udev, "wrong key format '%s'\n", key); } free(key); } worker_kill(udev, 0); } i = udev_ctrl_get_set_children_max(ctrl_msg); if (i >= 0) { info(udev, "udevd message (SET_MAX_CHILDREN) received, children_max=%i\n", i); children_max = i; } if (udev_ctrl_get_ping(ctrl_msg) > 0) info(udev, "udevd message (SYNC) received\n"); if (udev_ctrl_get_exit(ctrl_msg) > 0) { info(udev, "udevd message (EXIT) received\n"); udev_exit = true; /* keep reference to block the client until we exit */ udev_ctrl_connection_ref(ctrl_conn); } out: udev_ctrl_msg_unref(ctrl_msg); return udev_ctrl_connection_unref(ctrl_conn); } /* read inotify messages */ static int handle_inotify(struct udev *udev) { int nbytes, pos; char *buf; struct inotify_event *ev; if ((ioctl(fd_inotify, FIONREAD, &nbytes) < 0) || (nbytes <= 0)) return 0; buf = malloc(nbytes); if (buf == NULL) { err(udev, "error getting buffer for inotify\n"); return -1; } nbytes = read(fd_inotify, buf, nbytes); for (pos = 0; pos < nbytes; pos += sizeof(struct inotify_event) + ev->len) { struct udev_device *dev; ev = (struct inotify_event *)(buf + pos); dev = udev_watch_lookup(udev, ev->wd); if (dev != NULL) { info(udev, "inotify event: %x for %s\n", ev->mask, udev_device_get_devnode(dev)); if (ev->mask & IN_CLOSE_WRITE) { char filename[UTIL_PATH_SIZE]; int fd; info(udev, "device %s closed, synthesising 'change'\n", udev_device_get_devnode(dev)); util_strscpyl(filename, sizeof(filename), udev_device_get_syspath(dev), "/uevent", NULL); fd = open(filename, O_WRONLY); if (fd >= 0) { if (write(fd, "change", 6) < 0) info(udev, "error writing uevent: %m\n"); close(fd); } } if (ev->mask & IN_IGNORED) udev_watch_end(udev, dev); udev_device_unref(dev); } } free(buf); return 0; } static void handle_signal(struct udev *udev, int signo) { switch (signo) { case SIGINT: case SIGTERM: udev_exit = true; break; case SIGCHLD: for (;;) { pid_t pid; int status; struct udev_list_node *loop, *tmp; pid = waitpid(-1, &status, WNOHANG); if (pid <= 0) break; udev_list_node_foreach_safe(loop, tmp, &worker_list) { struct worker *worker = node_to_worker(loop); if (worker->pid != pid) continue; info(udev, "worker [%u] exit\n", pid); if (WIFEXITED(status)) { if (WEXITSTATUS(status) != 0) err(udev, "worker [%u] exit with return code %i\n", pid, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { err(udev, "worker [%u] terminated by signal %i (%s)\n", pid, WTERMSIG(status), strsignal(WTERMSIG(status))); } else if (WIFSTOPPED(status)) { err(udev, "worker [%u] stopped\n", pid); } else if (WIFCONTINUED(status)) { err(udev, "worker [%u] continued\n", pid); } else { err(udev, "worker [%u] exit with status 0x%04x\n", pid, status); } if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { if (worker->event) { err(udev, "worker [%u] failed while handling '%s'\n", pid, worker->event->devpath); worker->event->exitcode = -32; event_queue_delete(worker->event, true); /* drop reference taken for state 'running' */ worker_unref(worker); } } worker_unref(worker); break; } } break; case SIGHUP: reload = true; break; } } static void static_dev_create_from_modules(struct udev *udev) { struct utsname kernel; char modules[UTIL_PATH_SIZE]; char buf[4096]; FILE *f; uname(&kernel); util_strscpyl(modules, sizeof(modules), "/lib/modules/", kernel.release, "/modules.devname", NULL); f = fopen(modules, "r"); if (f == NULL) return; while (fgets(buf, sizeof(buf), f) != NULL) { char *s; const char *modname; const char *devname; const char *devno; int maj, min; char type; mode_t mode; char filename[UTIL_PATH_SIZE]; if (buf[0] == '#') continue; modname = buf; s = strchr(modname, ' '); if (s == NULL) continue; s[0] = '\0'; devname = &s[1]; s = strchr(devname, ' '); if (s == NULL) continue; s[0] = '\0'; devno = &s[1]; s = strchr(devno, ' '); if (s == NULL) s = strchr(devno, '\n'); if (s != NULL) s[0] = '\0'; if (sscanf(devno, "%c%u:%u", &type, &maj, &min) != 3) continue; if (type == 'c') mode = S_IFCHR; else if (type == 'b') mode = S_IFBLK; else continue; util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev), "/", devname, NULL); util_create_path_selinux(udev, filename); udev_selinux_setfscreatecon(udev, filename, mode); info(udev, "mknod '%s' %c%u:%u\n", filename, type, maj, min); if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST) utimensat(AT_FDCWD, filename, NULL, 0); udev_selinux_resetfscreatecon(udev); } fclose(f); } static int copy_dev_dir(struct udev *udev, DIR *dir_from, DIR *dir_to, int maxdepth) { struct dirent *dent; for (dent = readdir(dir_from); dent != NULL; dent = readdir(dir_from)) { struct stat stats; if (dent->d_name[0] == '.') continue; if (fstatat(dirfd(dir_from), dent->d_name, &stats, AT_SYMLINK_NOFOLLOW) != 0) continue; if (S_ISBLK(stats.st_mode) || S_ISCHR(stats.st_mode)) { udev_selinux_setfscreateconat(udev, dirfd(dir_to), dent->d_name, stats.st_mode & 0777); if (mknodat(dirfd(dir_to), dent->d_name, stats.st_mode, stats.st_rdev) == 0) { fchmodat(dirfd(dir_to), dent->d_name, stats.st_mode & 0777, 0); fchownat(dirfd(dir_to), dent->d_name, stats.st_uid, stats.st_gid, 0); } else { utimensat(dirfd(dir_to), dent->d_name, NULL, 0); } udev_selinux_resetfscreatecon(udev); } else if (S_ISLNK(stats.st_mode)) { char target[UTIL_PATH_SIZE]; ssize_t len; len = readlinkat(dirfd(dir_from), dent->d_name, target, sizeof(target)); if (len <= 0 || len == (ssize_t)sizeof(target)) continue; target[len] = '\0'; udev_selinux_setfscreateconat(udev, dirfd(dir_to), dent->d_name, S_IFLNK); if (symlinkat(target, dirfd(dir_to), dent->d_name) < 0 && errno == EEXIST) utimensat(dirfd(dir_to), dent->d_name, NULL, AT_SYMLINK_NOFOLLOW); udev_selinux_resetfscreatecon(udev); } else if (S_ISDIR(stats.st_mode)) { DIR *dir2_from, *dir2_to; if (maxdepth == 0) continue; udev_selinux_setfscreateconat(udev, dirfd(dir_to), dent->d_name, S_IFDIR|0755); mkdirat(dirfd(dir_to), dent->d_name, 0755); udev_selinux_resetfscreatecon(udev); dir2_to = fdopendir(openat(dirfd(dir_to), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC)); if (dir2_to == NULL) continue; dir2_from = fdopendir(openat(dirfd(dir_from), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC)); if (dir2_from == NULL) { closedir(dir2_to); continue; } copy_dev_dir(udev, dir2_from, dir2_to, maxdepth-1); closedir(dir2_to); closedir(dir2_from); } } return 0; } static void static_dev_create_links(struct udev *udev, DIR *dir) { struct stdlinks { const char *link; const char *target; }; static const struct stdlinks stdlinks[] = { { "core", "/proc/kcore" }, { "fd", "/proc/self/fd" }, { "stdin", "/proc/self/fd/0" }, { "stdout", "/proc/self/fd/1" }, { "stderr", "/proc/self/fd/2" }, }; unsigned int i; for (i = 0; i < ARRAY_SIZE(stdlinks); i++) { struct stat sb; if (stat(stdlinks[i].target, &sb) == 0) { udev_selinux_setfscreateconat(udev, dirfd(dir), stdlinks[i].link, S_IFLNK); if (symlinkat(stdlinks[i].target, dirfd(dir), stdlinks[i].link) < 0 && errno == EEXIST) utimensat(dirfd(dir), stdlinks[i].link, NULL, AT_SYMLINK_NOFOLLOW); udev_selinux_resetfscreatecon(udev); } } } static void static_dev_create_from_devices(struct udev *udev, DIR *dir) { DIR *dir_from; dir_from = opendir(PKGLIBEXECDIR "/devices"); if (dir_from == NULL) return; copy_dev_dir(udev, dir_from, dir, 8); closedir(dir_from); } static void static_dev_create(struct udev *udev) { DIR *dir; dir = opendir(udev_get_dev_path(udev)); if (dir == NULL) return; static_dev_create_links(udev, dir); static_dev_create_from_devices(udev, dir); closedir(dir); } static int mem_size_mb(void) { FILE *f; char buf[4096]; long int memsize = -1; f = fopen("/proc/meminfo", "r"); if (f == NULL) return -1; while (fgets(buf, sizeof(buf), f) != NULL) { long int value; if (sscanf(buf, "MemTotal: %ld kB", &value) == 1) { memsize = value / 1024; break; } } fclose(f); return memsize; } static int convert_db(struct udev *udev) { char filename[UTIL_PATH_SIZE]; FILE *f; struct udev_enumerate *udev_enumerate; struct udev_list_entry *list_entry; /* current database */ util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data", NULL); if (access(filename, F_OK) >= 0) return 0; /* make sure we do not get here again */ util_create_path(udev, filename); mkdir(filename, 0755); /* old database */ util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev), "/.udev/db", NULL); if (access(filename, F_OK) < 0) return 0; f = fopen("/dev/kmsg", "w"); if (f != NULL) { fprintf(f, "<30>udevd[%u]: converting old udev database\n", getpid()); fclose(f); } udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_scan_devices(udev_enumerate); udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate)) { struct udev_device *device; device = udev_device_new_from_syspath(udev, udev_list_entry_get_name(list_entry)); if (device == NULL) continue; /* try to find the old database for devices without a current one */ if (udev_device_read_db(device, NULL) < 0) { bool have_db; const char *id; struct stat stats; char devpath[UTIL_PATH_SIZE]; char from[UTIL_PATH_SIZE]; have_db = false; /* find database in old location */ id = udev_device_get_id_filename(device); util_strscpyl(from, sizeof(from), udev_get_dev_path(udev), "/.udev/db/", id, NULL); if (lstat(from, &stats) == 0) { if (!have_db) { udev_device_read_db(device, from); have_db = true; } unlink(from); } /* find old database with $subsys:$sysname name */ util_strscpyl(from, sizeof(from), udev_get_dev_path(udev), "/.udev/db/", udev_device_get_subsystem(device), ":", udev_device_get_sysname(device), NULL); if (lstat(from, &stats) == 0) { if (!have_db) { udev_device_read_db(device, from); have_db = true; } unlink(from); } /* find old database with the encoded devpath name */ util_path_encode(udev_device_get_devpath(device), devpath, sizeof(devpath)); util_strscpyl(from, sizeof(from), udev_get_dev_path(udev), "/.udev/db/", devpath, NULL); if (lstat(from, &stats) == 0) { if (!have_db) { udev_device_read_db(device, from); have_db = true; } unlink(from); } /* write out new database */ if (have_db) udev_device_update_db(device); } udev_device_unref(device); } udev_enumerate_unref(udev_enumerate); return 0; } static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink) { int ctrl = -1, netlink = -1; int fd, n; n = sd_listen_fds(true); if (n <= 0) return -1; for (fd = SD_LISTEN_FDS_START; fd < n + SD_LISTEN_FDS_START; fd++) { if (sd_is_socket(fd, AF_LOCAL, SOCK_SEQPACKET, -1)) { if (ctrl >= 0) return -1; ctrl = fd; continue; } if (sd_is_socket(fd, AF_NETLINK, SOCK_RAW, -1)) { if (netlink >= 0) return -1; netlink = fd; continue; } return -1; } if (ctrl < 0 || netlink < 0) return -1; info(udev, "ctrl=%i netlink=%i\n", ctrl, netlink); *rctrl = ctrl; *rnetlink = netlink; return 0; } static bool check_rules_timestamp(struct udev *udev) { char **p; unsigned long long *stamp_usec; int i, n; bool changed = false; n = udev_get_rules_path(udev, &p, &stamp_usec); for (i = 0; i < n; i++) { struct stat stats; if (stat(p[i], &stats) < 0) continue; if (stamp_usec[i] == ts_usec(&stats.st_mtim)) continue; /* first check */ if (stamp_usec[i] != 0) { info(udev, "reload - timestamp of '%s' changed\n", p[i]); changed = true; } /* update timestamp */ stamp_usec[i] = ts_usec(&stats.st_mtim); } return changed; } int main(int argc, char *argv[]) { struct udev *udev; FILE *f; sigset_t mask; int daemonize = false; int resolve_names = 1; static const struct option options[] = { { "daemon", no_argument, NULL, 'd' }, { "debug", no_argument, NULL, 'D' }, { "children-max", required_argument, NULL, 'c' }, { "exec-delay", required_argument, NULL, 'e' }, { "resolve-names", required_argument, NULL, 'N' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, {} }; int fd_ctrl = -1; int fd_netlink = -1; int fd_worker = -1; struct epoll_event ep_ctrl, ep_inotify, ep_signal, ep_netlink, ep_worker; struct udev_ctrl_connection *ctrl_conn = NULL; char **s; int rc = 1; udev = udev_new(); if (udev == NULL) goto exit; udev_log_init("udevd"); udev_set_log_fn(udev, udev_main_log); info(udev, "version %s\n", VERSION); udev_selinux_init(udev); for (;;) { int option; option = getopt_long(argc, argv, "c:deDtN:hV", options, NULL); if (option == -1) break; switch (option) { case 'd': daemonize = true; break; case 'c': children_max = strtoul(optarg, NULL, 0); break; case 'e': exec_delay = strtoul(optarg, NULL, 0); break; case 'D': debug = true; if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; case 'N': if (strcmp (optarg, "early") == 0) { resolve_names = 1; } else if (strcmp (optarg, "late") == 0) { resolve_names = 0; } else if (strcmp (optarg, "never") == 0) { resolve_names = -1; } else { fprintf(stderr, "resolve-names must be early, late or never\n"); err(udev, "resolve-names must be early, late or never\n"); goto exit; } break; case 'h': printf("Usage: udevd OPTIONS\n" " --daemon\n" " --debug\n" " --children-max=\n" " --exec-delay=\n" " --resolve-names=early|late|never\n" " --version\n" " --help\n" "\n"); goto exit; case 'V': printf("%s\n", VERSION); goto exit; default: goto exit; } } /* * read the kernel commandline, in case we need to get into debug mode * udev.log-priority= syslog priority * udev.children-max= events are fully serialized if set to 1 * */ f = fopen("/proc/cmdline", "r"); if (f != NULL) { char cmdline[4096]; if (fgets(cmdline, sizeof(cmdline), f) != NULL) { char *pos; pos = strstr(cmdline, "udev.log-priority="); if (pos != NULL) { pos += strlen("udev.log-priority="); udev_set_log_priority(udev, util_log_priority(pos)); } pos = strstr(cmdline, "udev.children-max="); if (pos != NULL) { pos += strlen("udev.children-max="); children_max = strtoul(pos, NULL, 0); } pos = strstr(cmdline, "udev.exec-delay="); if (pos != NULL) { pos += strlen("udev.exec-delay="); exec_delay = strtoul(pos, NULL, 0); } } fclose(f); } if (getuid() != 0) { fprintf(stderr, "root privileges required\n"); err(udev, "root privileges required\n"); goto exit; } /* set umask before creating any file/directory */ chdir("/"); umask(022); /* /run/udev */ mkdir(udev_get_run_path(udev), 0755); /* create standard links, copy static nodes, create nodes from modules */ static_dev_create(udev); static_dev_create_from_modules(udev); /* before opening new files, make sure std{in,out,err} fds are in a sane state */ if (daemonize) { int fd; fd = open("/dev/null", O_RDWR); if (fd >= 0) { if (write(STDOUT_FILENO, 0, 0) < 0) dup2(fd, STDOUT_FILENO); if (write(STDERR_FILENO, 0, 0) < 0) dup2(fd, STDERR_FILENO); if (fd > STDERR_FILENO) close(fd); } else { fprintf(stderr, "cannot open /dev/null\n"); err(udev, "cannot open /dev/null\n"); } } if (systemd_fds(udev, &fd_ctrl, &fd_netlink) >= 0) { /* get control and netlink socket from from systemd */ udev_ctrl = udev_ctrl_new_from_fd(udev, fd_ctrl); if (udev_ctrl == NULL) { err(udev, "error taking over udev control socket"); rc = 1; goto exit; } monitor = udev_monitor_new_from_netlink_fd(udev, "kernel", fd_netlink); if (monitor == NULL) { err(udev, "error taking over netlink socket\n"); rc = 3; goto exit; } } else { /* open control and netlink socket */ udev_ctrl = udev_ctrl_new(udev); if (udev_ctrl == NULL) { fprintf(stderr, "error initializing udev control socket"); err(udev, "error initializing udev control socket"); rc = 1; goto exit; } fd_ctrl = udev_ctrl_get_fd(udev_ctrl); monitor = udev_monitor_new_from_netlink(udev, "kernel"); if (monitor == NULL) { fprintf(stderr, "error initializing netlink socket\n"); err(udev, "error initializing netlink socket\n"); rc = 3; goto exit; } fd_netlink = udev_monitor_get_fd(monitor); } if (udev_monitor_enable_receiving(monitor) < 0) { fprintf(stderr, "error binding netlink socket\n"); err(udev, "error binding netlink socket\n"); rc = 3; goto exit; } if (udev_ctrl_enable_receiving(udev_ctrl) < 0) { fprintf(stderr, "error binding udev control socket\n"); err(udev, "error binding udev control socket\n"); rc = 1; goto exit; } udev_monitor_set_receive_buffer_size(monitor, 128*1024*1024); /* create queue file before signalling 'ready', to make sure we block 'settle' */ udev_queue_export = udev_queue_export_new(udev); if (udev_queue_export == NULL) { err(udev, "error creating queue file\n"); goto exit; } if (daemonize) { pid_t pid; int fd; pid = fork(); switch (pid) { case 0: break; case -1: err(udev, "fork of daemon failed: %m\n"); rc = 4; goto exit; default: rc = EXIT_SUCCESS; goto exit_daemonize; } setsid(); fd = open("/proc/self/oom_score_adj", O_RDWR); if (fd < 0) { /* Fallback to old interface */ fd = open("/proc/self/oom_adj", O_RDWR); if (fd < 0) { err(udev, "error disabling OOM: %m\n"); } else { /* OOM_DISABLE == -17 */ write(fd, "-17", 3); close(fd); } } else { write(fd, "-1000", 5); close(fd); } } else { sd_notify(1, "READY=1"); } f = fopen("/dev/kmsg", "w"); if (f != NULL) { fprintf(f, "<30>udevd[%u]: starting version " VERSION "\n", getpid()); fclose(f); } if (!debug) { int fd; fd = open("/dev/null", O_RDWR); if (fd >= 0) { dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); close(fd); } } fd_inotify = udev_watch_init(udev); if (fd_inotify < 0) { fprintf(stderr, "error initializing inotify\n"); err(udev, "error initializing inotify\n"); rc = 4; goto exit; } udev_watch_restore(udev); /* block and listen to all signals on signalfd */ sigfillset(&mask); sigprocmask(SIG_SETMASK, &mask, &sigmask_orig); fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); if (fd_signal < 0) { fprintf(stderr, "error creating signalfd\n"); err(udev, "error creating signalfd\n"); rc = 5; goto exit; } /* unnamed socket from workers to the main daemon */ if (socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, worker_watch) < 0) { fprintf(stderr, "error creating socketpair\n"); err(udev, "error creating socketpair\n"); rc = 6; goto exit; } fd_worker = worker_watch[READ_END]; udev_builtin_init(udev); rules = udev_rules_new(udev, resolve_names); if (rules == NULL) { err(udev, "error reading rules\n"); goto exit; } memset(&ep_ctrl, 0, sizeof(struct epoll_event)); ep_ctrl.events = EPOLLIN; ep_ctrl.data.fd = fd_ctrl; memset(&ep_inotify, 0, sizeof(struct epoll_event)); ep_inotify.events = EPOLLIN; ep_inotify.data.fd = fd_inotify; memset(&ep_signal, 0, sizeof(struct epoll_event)); ep_signal.events = EPOLLIN; ep_signal.data.fd = fd_signal; memset(&ep_netlink, 0, sizeof(struct epoll_event)); ep_netlink.events = EPOLLIN; ep_netlink.data.fd = fd_netlink; memset(&ep_worker, 0, sizeof(struct epoll_event)); ep_worker.events = EPOLLIN; ep_worker.data.fd = fd_worker; fd_ep = epoll_create1(EPOLL_CLOEXEC); if (fd_ep < 0) { err(udev, "error creating epoll fd: %m\n"); goto exit; } if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_ctrl, &ep_ctrl) < 0 || epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_inotify, &ep_inotify) < 0 || epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_signal, &ep_signal) < 0 || epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_netlink, &ep_netlink) < 0 || epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_worker, &ep_worker) < 0) { err(udev, "fail to add fds to epoll: %m\n"); goto exit; } /* if needed, convert old database from earlier udev version */ convert_db(udev); if (children_max <= 0) { int memsize = mem_size_mb(); /* set value depending on the amount of RAM */ if (memsize > 0) children_max = 128 + (memsize / 8); else children_max = 128; } info(udev, "set children_max to %u\n", children_max); udev_rules_apply_static_dev_perms(rules); udev_list_node_init(&event_list); udev_list_node_init(&worker_list); for (;;) { static unsigned long long last_usec; struct epoll_event ev[8]; int fdcount; int timeout; bool is_worker, is_signal, is_inotify, is_netlink, is_ctrl; int i; if (udev_exit) { /* close sources of new events and discard buffered events */ if (fd_ctrl >= 0) { epoll_ctl(fd_ep, EPOLL_CTL_DEL, fd_ctrl, NULL); fd_ctrl = -1; } if (monitor != NULL) { epoll_ctl(fd_ep, EPOLL_CTL_DEL, fd_netlink, NULL); udev_monitor_unref(monitor); monitor = NULL; } if (fd_inotify >= 0) { epoll_ctl(fd_ep, EPOLL_CTL_DEL, fd_inotify, NULL); close(fd_inotify); fd_inotify = -1; } /* discard queued events and kill workers */ event_queue_cleanup(udev, EVENT_QUEUED); worker_kill(udev, 0); /* exit after all has cleaned up */ if (udev_list_node_is_empty(&event_list) && udev_list_node_is_empty(&worker_list)) break; /* timeout at exit for workers to finish */ timeout = 30 * 1000; } else if (udev_list_node_is_empty(&event_list) && children <= 2) { /* we are idle */ timeout = -1; } else { /* kill idle or hanging workers */ timeout = 3 * 1000; } fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), timeout); if (fdcount < 0) continue; if (fdcount == 0) { struct udev_list_node *loop; /* timeout */ if (udev_exit) { err(udev, "timeout, giving up waiting for workers to finish\n"); break; } /* kill idle workers */ if (udev_list_node_is_empty(&event_list)) { info(udev, "cleanup idle workers\n"); worker_kill(udev, 2); } /* check for hanging events */ udev_list_node_foreach(loop, &worker_list) { struct worker *worker = node_to_worker(loop); if (worker->state != WORKER_RUNNING) continue; if ((now_usec() - worker->event_start_usec) > 30 * 1000 * 1000) { err(udev, "worker [%u] timeout, kill it\n", worker->pid, worker->event ? worker->event->devpath : ""); kill(worker->pid, SIGKILL); worker->state = WORKER_KILLED; /* drop reference taken for state 'running' */ worker_unref(worker); if (worker->event) { err(udev, "seq %llu '%s' killed\n", udev_device_get_seqnum(worker->event->dev), worker->event->devpath); worker->event->exitcode = -64; event_queue_delete(worker->event, true); worker->event = NULL; } } } } is_worker = is_signal = is_inotify = is_netlink = is_ctrl = false; for (i = 0; i < fdcount; i++) { if (ev[i].data.fd == fd_worker && ev[i].events & EPOLLIN) is_worker = true; else if (ev[i].data.fd == fd_netlink && ev[i].events & EPOLLIN) is_netlink = true; else if (ev[i].data.fd == fd_signal && ev[i].events & EPOLLIN) is_signal = true; else if (ev[i].data.fd == fd_inotify && ev[i].events & EPOLLIN) is_inotify = true; else if (ev[i].data.fd == fd_ctrl && ev[i].events & EPOLLIN) is_ctrl = true; } /* check for changed config, every 3 seconds at most */ if ((now_usec() - last_usec) > 3 * 1000 * 1000) { if (check_rules_timestamp(udev)) reload = true; if (udev_builtin_validate(udev)) reload = true; last_usec = now_usec(); } /* reload requested, HUP signal received, rules changed, builtin changed */ if (reload) { worker_kill(udev, 0); rules = udev_rules_unref(rules); udev_builtin_exit(udev); reload = 0; } /* event has finished */ if (is_worker) worker_returned(fd_worker); if (is_netlink) { struct udev_device *dev; dev = udev_monitor_receive_device(monitor); if (dev != NULL) { udev_device_set_usec_initialized(dev, now_usec()); if (event_queue_insert(dev) < 0) udev_device_unref(dev); } } /* start new events */ if (!udev_list_node_is_empty(&event_list) && !udev_exit && !stop_exec_queue) { if (rules == NULL) rules = udev_rules_new(udev, resolve_names); if (rules != NULL) event_queue_start(udev); } if (is_signal) { struct signalfd_siginfo fdsi; ssize_t size; size = read(fd_signal, &fdsi, sizeof(struct signalfd_siginfo)); if (size == sizeof(struct signalfd_siginfo)) handle_signal(udev, fdsi.ssi_signo); } /* we are shutting down, the events below are not handled anymore */ if (udev_exit) continue; /* device node watch */ if (is_inotify) handle_inotify(udev); /* * This needs to be after the inotify handling, to make sure, * that the ping is send back after the possibly generated * "change" events by the inotify device node watch. * * A single time we may receive a client connection which we need to * keep open to block the client. It will be closed right before we * exit. */ if (is_ctrl) ctrl_conn = handle_ctrl_msg(udev_ctrl); } rc = EXIT_SUCCESS; exit: udev_queue_export_cleanup(udev_queue_export); udev_ctrl_cleanup(udev_ctrl); exit_daemonize: if (fd_ep >= 0) close(fd_ep); worker_list_cleanup(udev); event_queue_cleanup(udev, EVENT_UNDEF); udev_rules_unref(rules); udev_builtin_exit(udev); if (fd_signal >= 0) close(fd_signal); if (worker_watch[READ_END] >= 0) close(worker_watch[READ_END]); if (worker_watch[WRITE_END] >= 0) close(worker_watch[WRITE_END]); udev_monitor_unref(monitor); udev_queue_export_unref(udev_queue_export); udev_ctrl_connection_unref(ctrl_conn); udev_ctrl_unref(udev_ctrl); udev_selinux_exit(udev); udev_unref(udev); udev_log_close(); return rc; } udev-182/src/PaxHeaders.12492/udev-builtin-path_id.c0000644000521600052160000000013211727632672020350 xustar000000000000000030 mtime=1331639738.067724531 30 atime=1332083327.436104709 30 ctime=1332097353.339438927 udev-182/src/udev-builtin-path_id.c0000664000521600052160000004123411727632672016760 0ustar00kaykay00000000000000/* * compose persistent device path * * Copyright (C) 2009-2011 Kay Sievers * * Logic based on Hannes Reinecke's shell script. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "udev.h" static int path_prepend(char **path, const char *fmt, ...) { va_list va; char *pre; int err = 0; va_start(va, fmt); err = vasprintf(&pre, fmt, va); va_end(va); if (err < 0) goto out; if (*path != NULL) { char *new; err = asprintf(&new, "%s-%s", pre, *path); free(pre); if (err < 0) goto out; free(*path); *path = new; } else { *path = pre; } out: return err; } /* ** Linux only supports 32 bit luns. ** See drivers/scsi/scsi_scan.c::scsilun_to_int() for more details. */ static int format_lun_number(struct udev_device *dev, char **path) { unsigned long lun = strtoul(udev_device_get_sysnum(dev), NULL, 10); /* address method 0, peripheral device addressing with bus id of zero */ if (lun < 256) return path_prepend(path, "lun-%d", lun); /* handle all other lun addressing methods by using a variant of the original lun format */ return path_prepend(path, "lun-0x%04x%04x00000000", (lun & 0xffff), (lun >> 16) & 0xffff); } static struct udev_device *skip_subsystem(struct udev_device *dev, const char *subsys) { struct udev_device *parent = dev; while (parent != NULL) { const char *subsystem; subsystem = udev_device_get_subsystem(parent); if (subsystem == NULL || strcmp(subsystem, subsys) != 0) break; dev = parent; parent = udev_device_get_parent(parent); } return dev; } static struct udev_device *handle_scsi_fibre_channel(struct udev_device *parent, char **path) { struct udev *udev = udev_device_get_udev(parent); struct udev_device *targetdev; struct udev_device *fcdev = NULL; const char *port; char *lun = NULL;; targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); if (targetdev == NULL) return NULL; fcdev = udev_device_new_from_subsystem_sysname(udev, "fc_transport", udev_device_get_sysname(targetdev)); if (fcdev == NULL) return NULL; port = udev_device_get_sysattr_value(fcdev, "port_name"); if (port == NULL) { parent = NULL; goto out; } format_lun_number(parent, &lun); path_prepend(path, "fc-%s-%s", port, lun); if (lun) free(lun); out: udev_device_unref(fcdev); return parent; } static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **path) { struct udev *udev = udev_device_get_udev(parent); struct udev_device *targetdev; struct udev_device *target_parent; struct udev_device *sasdev; const char *sas_address; char *lun = NULL; targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); if (targetdev == NULL) return NULL; target_parent = udev_device_get_parent(targetdev); if (target_parent == NULL) return NULL; sasdev = udev_device_new_from_subsystem_sysname(udev, "sas_device", udev_device_get_sysname(target_parent)); if (sasdev == NULL) return NULL; sas_address = udev_device_get_sysattr_value(sasdev, "sas_address"); if (sas_address == NULL) { parent = NULL; goto out; } format_lun_number(parent, &lun); path_prepend(path, "sas-%s-%s", sas_address, lun); if (lun) free(lun); out: udev_device_unref(sasdev); return parent; } static struct udev_device *handle_scsi_iscsi(struct udev_device *parent, char **path) { struct udev *udev = udev_device_get_udev(parent); struct udev_device *transportdev; struct udev_device *sessiondev = NULL; const char *target; char *connname; struct udev_device *conndev = NULL; const char *addr; const char *port; char *lun = NULL; /* find iscsi session */ transportdev = parent; for (;;) { transportdev = udev_device_get_parent(transportdev); if (transportdev == NULL) return NULL; if (strncmp(udev_device_get_sysname(transportdev), "session", 7) == 0) break; } /* find iscsi session device */ sessiondev = udev_device_new_from_subsystem_sysname(udev, "iscsi_session", udev_device_get_sysname(transportdev)); if (sessiondev == NULL) return NULL; target = udev_device_get_sysattr_value(sessiondev, "targetname"); if (target == NULL) { parent = NULL; goto out; } if (asprintf(&connname, "connection%s:0", udev_device_get_sysnum(transportdev)) < 0) { parent = NULL; goto out; } conndev = udev_device_new_from_subsystem_sysname(udev, "iscsi_connection", connname); free(connname); if (conndev == NULL) { parent = NULL; goto out; } addr = udev_device_get_sysattr_value(conndev, "persistent_address"); port = udev_device_get_sysattr_value(conndev, "persistent_port"); if (addr == NULL || port == NULL) { parent = NULL; goto out; } format_lun_number(parent, &lun); path_prepend(path, "ip-%s:%s-iscsi-%s-%s", addr, port, target, lun); if (lun) free(lun); out: udev_device_unref(sessiondev); udev_device_unref(conndev); return parent; } static struct udev_device *handle_scsi_default(struct udev_device *parent, char **path) { struct udev_device *hostdev; int host, bus, target, lun; const char *name; char *base; char *pos; DIR *dir; struct dirent *dent; int basenum; hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host"); if (hostdev == NULL) return NULL; name = udev_device_get_sysname(parent); if (sscanf(name, "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) return NULL; /* rebase host offset to get the local relative number */ basenum = -1; base = strdup(udev_device_get_syspath(hostdev)); if (base == NULL) return NULL; pos = strrchr(base, '/'); if (pos == NULL) { parent = NULL; goto out; } pos[0] = '\0'; dir = opendir(base); if (dir == NULL) { parent = NULL; goto out; } for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { char *rest; int i; if (dent->d_name[0] == '.') continue; if (dent->d_type != DT_DIR && dent->d_type != DT_LNK) continue; if (strncmp(dent->d_name, "host", 4) != 0) continue; i = strtoul(&dent->d_name[4], &rest, 10); if (rest[0] != '\0') continue; /* * find the smallest number; the host really needs to export its * own instance number per parent device; relying on the global host * enumeration and plainly rebasing the numbers sounds unreliable */ if (basenum == -1 || i < basenum) basenum = i; } closedir(dir); if (basenum == -1) { parent = NULL; goto out; } host -= basenum; path_prepend(path, "scsi-%u:%u:%u:%u", host, bus, target, lun); out: free(base); return hostdev; } static struct udev_device *handle_scsi(struct udev_device *parent, char **path) { const char *devtype; const char *name; const char *id; devtype = udev_device_get_devtype(parent); if (devtype == NULL || strcmp(devtype, "scsi_device") != 0) return parent; /* firewire */ id = udev_device_get_sysattr_value(parent, "ieee1394_id"); if (id != NULL) { parent = skip_subsystem(parent, "scsi"); path_prepend(path, "ieee1394-0x%s", id); goto out; } /* lousy scsi sysfs does not have a "subsystem" for the transport */ name = udev_device_get_syspath(parent); if (strstr(name, "/rport-") != NULL) { parent = handle_scsi_fibre_channel(parent, path); goto out; } if (strstr(name, "/end_device-") != NULL) { parent = handle_scsi_sas(parent, path); goto out; } if (strstr(name, "/session") != NULL) { parent = handle_scsi_iscsi(parent, path); goto out; } /* * We do not support the ATA transport class, it creates duplicated link * names as the fake SCSI host adapters are all separated, they are all * re-based as host == 0. ATA should just stop faking two duplicated * hierarchies for a single topology and leave the SCSI stuff alone; * until that happens, there are no by-path/ links for ATA devices behind * an ATA transport class. */ if (strstr(name, "/ata") != NULL) { parent = NULL; goto out; } parent = handle_scsi_default(parent, path); out: return parent; } static void handle_scsi_tape(struct udev_device *dev, char **path) { const char *name; /* must be the last device in the syspath */ if (*path != NULL) return; name = udev_device_get_sysname(dev); if (strncmp(name, "nst", 3) == 0 && strchr("lma", name[3]) != NULL) path_prepend(path, "nst%c", name[3]); else if (strncmp(name, "st", 2) == 0 && strchr("lma", name[2]) != NULL) path_prepend(path, "st%c", name[2]); } static struct udev_device *handle_usb(struct udev_device *parent, char **path) { const char *devtype; const char *str; const char *port; devtype = udev_device_get_devtype(parent); if (devtype == NULL) return parent; if (strcmp(devtype, "usb_interface") != 0 && strcmp(devtype, "usb_device") != 0) return parent; str = udev_device_get_sysname(parent); port = strchr(str, '-'); if (port == NULL) return parent; port++; parent = skip_subsystem(parent, "usb"); path_prepend(path, "usb-0:%s", port); return parent; } static struct udev_device *handle_ccw(struct udev_device *parent, struct udev_device *dev, char **path) { struct udev_device *scsi_dev; scsi_dev = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device"); if (scsi_dev != NULL) { const char *wwpn; const char *lun; const char *hba_id; hba_id = udev_device_get_sysattr_value(scsi_dev, "hba_id"); wwpn = udev_device_get_sysattr_value(scsi_dev, "wwpn"); lun = udev_device_get_sysattr_value(scsi_dev, "fcp_lun"); if (hba_id != NULL && lun != NULL && wwpn != NULL) { path_prepend(path, "ccw-%s-zfcp-%s:%s", hba_id, wwpn, lun); goto out; } } path_prepend(path, "ccw-%s", udev_device_get_sysname(parent)); out: parent = skip_subsystem(parent, "ccw"); return parent; } static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev_device *parent; char *path = NULL; /* S390 ccw bus */ parent = udev_device_get_parent_with_subsystem_devtype(dev, "ccw", NULL); if (parent != NULL) { handle_ccw(parent, dev, &path); goto out; } /* walk up the chain of devices and compose path */ parent = dev; while (parent != NULL) { const char *subsys; subsys = udev_device_get_subsystem(parent); if (subsys == NULL) { ; } else if (strcmp(subsys, "scsi_tape") == 0) { handle_scsi_tape(parent, &path); } else if (strcmp(subsys, "scsi") == 0) { parent = handle_scsi(parent, &path); } else if (strcmp(subsys, "usb") == 0) { parent = handle_usb(parent, &path); } else if (strcmp(subsys, "serio") == 0) { path_prepend(&path, "serio-%s", udev_device_get_sysnum(parent)); parent = skip_subsystem(parent, "serio"); } else if (strcmp(subsys, "pci") == 0) { path_prepend(&path, "pci-%s", udev_device_get_sysname(parent)); parent = skip_subsystem(parent, "pci"); } else if (strcmp(subsys, "platform") == 0) { path_prepend(&path, "platform-%s", udev_device_get_sysname(parent)); parent = skip_subsystem(parent, "platform"); } else if (strcmp(subsys, "acpi") == 0) { path_prepend(&path, "acpi-%s", udev_device_get_sysname(parent)); parent = skip_subsystem(parent, "acpi"); } else if (strcmp(subsys, "xen") == 0) { path_prepend(&path, "xen-%s", udev_device_get_sysname(parent)); parent = skip_subsystem(parent, "xen"); } else if (strcmp(subsys, "virtio") == 0) { path_prepend(&path, "virtio-pci-%s", udev_device_get_sysname(parent)); parent = skip_subsystem(parent, "virtio"); } parent = udev_device_get_parent(parent); } out: if (path != NULL) { char tag[UTIL_NAME_SIZE]; size_t i; const char *p; /* compose valid udev tag name */ for (p = path, i = 0; *p; p++) { if ((*p >= '0' && *p <= '9') || (*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z') || *p == '-') { tag[i++] = *p; continue; } /* skip all leading '_' */ if (i == 0) continue; /* avoid second '_' */ if (tag[i-1] == '_') continue; tag[i++] = '_'; } /* strip trailing '_' */ while (i > 0 && tag[i-1] == '_') i--; tag[i] = '\0'; udev_builtin_add_property(dev, test, "ID_PATH", path); udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); free(path); return EXIT_SUCCESS; } return EXIT_FAILURE; } const struct udev_builtin udev_builtin_path_id = { .name = "path_id", .cmd = builtin_path_id, .help = "compose persistent device path", .run_once = true, }; udev-182/src/PaxHeaders.12492/udev.70000644000521600052160000000013211731430437015210 xustar000000000000000030 mtime=1332097311.229437924 30 atime=1332097351.920438893 30 ctime=1332097352.751438913 udev-182/src/udev.70000664000521600052160000004035111731430437013617 0ustar00kaykay00000000000000'\" t .\" Title: udev .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 03/18/2012 .\" Manual: udev .\" Source: udev .\" Language: English .\" .TH "UDEV" "7" "03/18/2012" "udev" "udev" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" udev \- Linux dynamic device management .SH "DESCRIPTION" .PP udev supplies the system software with device events, manages permissions of device nodes and may create additional symlinks in the /dev directory, or renames network interfaces\&. The kernel usually just assigns unpredictable device names based on the order of discovery\&. Meaningful symlinks or network device names provide a way to reliably identify devices based on their properties or current configuration\&. .PP The udev daemon, \fBudevd\fR(8), receives device uevents directly from the kernel whenever a device is added or removed from the system, or it changes its state\&. When udev receives a device event, it matches its configured set of rules against various device attributes to identify the device\&. Rules that match may provide additional device information to be stored in the udev database or to be used to create meaningful symlink names\&. .PP All device information udev processes is stored in the udev database and sent out to possible event subscribers\&. Access to all stored data and the event sources is provided by the library libudev\&. .SH "CONFIGURATION" .PP udev configuration files are placed in /etc/udev and /usr/lib/udev\&. All empty lines or lines beginning with \*(Aq#\*(Aq are ignored\&. .SS "Configuration file" .PP udev expects its main configuration file at /etc/udev/udev\&.conf\&. It consists of a set of variables allowing the user to override default udev values\&. The following variables can be set: .PP \fBudev_root\fR .RS 4 Specifies where to place the device nodes in the filesystem\&. The default value is /dev\&. .RE .PP \fBudev_log\fR .RS 4 The logging priority\&. Valid values are the numerical syslog priorities or their textual representations: \fBerr\fR, \fBinfo\fR and \fBdebug\fR\&. .RE .SS "Rules files" .PP The udev rules are read from the files located in the system rules directory /usr/lib/udev/rules\&.d, the volatile runtime directory /run/udev/rules\&.d and the local administration directory /etc/udev/rules\&.d\&. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live\&. However, files with identical file names replace each other\&. Files in /etc have the highest priority, files in /run take precedence over files with the same name in /lib\&. This can be used to override a system\-supplied rules file with a local file if needed; a symlink in /etc with the same name as a rules file in /lib, pointing to /dev/null, disables the rules file entirely\&. .PP Rule files must have the extension \&.rules; other extensions are ignored\&. .PP Every line in the rules file contains at least one key\-value pair\&. There are two kind of keys: match and assignment\&. If all match keys are matching against its value, the rule gets applied and the assignment keys get the specified value assigned\&. .PP A matching rule may rename a network interface, add symlinks pointing to the device node, or run a specified program as part of the event handling\&. .PP A rule consists of a comma\-separated list of one or more key\-value pairs\&. Each key has a distinct operation, depending on the used operator\&. Valid operators are: .PP \fB==\fR .RS 4 Compare for equality\&. .RE .PP \fB!=\fR .RS 4 Compare for inequality\&. .RE .PP \fB=\fR .RS 4 Assign a value to a key\&. Keys that represent a list are reset and only this single value is assigned\&. .RE .PP \fB+=\fR .RS 4 Add the value to a key that holds a list of entries\&. .RE .PP \fB:=\fR .RS 4 Assign a value to a key finally; disallow any later changes\&. .RE .PP The following key names can be used to match against device properties\&. Some of the keys also match against properties of the parent devices in sysfs, not only the device that has generated the event\&. If multiple keys that match a parent device are specified in a single rule, all these keys must match at one and the same parent device\&. .PP \fBACTION\fR .RS 4 Match the name of the event action\&. .RE .PP \fBDEVPATH\fR .RS 4 Match the devpath of the event device\&. .RE .PP \fBKERNEL\fR .RS 4 Match the name of the event device\&. .RE .PP \fBNAME\fR .RS 4 Match the name of a network interface\&. It can be used once the NAME key has been set in one of the preceding rules\&. .RE .PP \fBSYMLINK\fR .RS 4 Match the name of a symlink targeting the node\&. It can be used once a SYMLINK key has been set in one of the preceding rules\&. There may be multiple symlinks; only one needs to match\&. .RE .PP \fBSUBSYSTEM\fR .RS 4 Match the subsystem of the event device\&. .RE .PP \fBDRIVER\fR .RS 4 Match the driver name of the event device\&. Only set this key for devices which are bound to a driver at the time the event is generated\&. .RE .PP \fBATTR{\fR\fB\fIfilename\fR\fR\fB}\fR .RS 4 Match sysfs attribute values of the event device\&. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace\&. .RE .PP \fBKERNELS\fR .RS 4 Search the devpath upwards for a matching device name\&. .RE .PP \fBSUBSYSTEMS\fR .RS 4 Search the devpath upwards for a matching device subsystem name\&. .RE .PP \fBDRIVERS\fR .RS 4 Search the devpath upwards for a matching device driver name\&. .RE .PP \fBATTRS{\fR\fB\fIfilename\fR\fR\fB}\fR .RS 4 Search the devpath upwards for a device with matching sysfs attribute values\&. If multiple \fBATTRS\fR matches are specified, all of them must match on the same device\&. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace\&. .RE .PP \fBTAGS\fR .RS 4 Search the devpath upwards for a device with matching tag\&. .RE .PP \fBENV{\fR\fB\fIkey\fR\fR\fB}\fR .RS 4 Match against a device property value\&. .RE .PP \fBTAG\fR .RS 4 Match against a device tag\&. .RE .PP \fBTEST{\fR\fB\fIoctal mode mask\fR\fR\fB}\fR .RS 4 Test the existence of a file\&. An octal mode mask can be specified if needed\&. .RE .PP \fBPROGRAM\fR .RS 4 Execute a program to determine whether there is a match; the key is true if the program returns successfully\&. The device properties are made available to the executed program in the environment\&. The program\*(Aqs stdout is available in the RESULT key\&. .RE .PP \fBRESULT\fR .RS 4 Match the returned string of the last PROGRAM call\&. This key can be used in the same or in any later rule after a PROGRAM call\&. .RE .PP Most of the fields support shell\-style pattern matching\&. The following pattern characters are supported: .PP \fB*\fR .RS 4 Matches zero or more characters\&. .RE .PP \fB?\fR .RS 4 Matches any single character\&. .RE .PP \fB[]\fR .RS 4 Matches any single character specified within the brackets\&. For example, the pattern string \*(Aqtty[SR]\*(Aq would match either \*(AqttyS\*(Aq or \*(AqttyR\*(Aq\&. Ranges are also supported via the \*(Aq\-\*(Aq character\&. For example, to match on the range of all digits, the pattern [0\-9] could be used\&. If the first character following the \*(Aq[\*(Aq is a \*(Aq!\*(Aq, any characters not enclosed are matched\&. .RE .PP The following keys can get values assigned: .PP \fBNAME\fR .RS 4 The name to use for a network interface\&. The name of a device node can not be changed by udev, only additional symlinks can be created\&. .RE .PP \fBSYMLINK\fR .RS 4 The name of a symlink targeting the node\&. Every matching rule adds this value to the list of symlinks to be created\&. Multiple symlinks may be specified by separating the names by the space character\&. In case multiple devices claim the same name, the link always points to the device with the highest link_priority\&. If the current device goes away, the links are re\-evaluated and the device with the next highest link_priority becomes the owner of the link\&. If no link_priority is specified, the order of the devices (and which one of them owns the link) is undefined\&. Also, symlink names must never conflict with the kernel\*(Aqs default device node names, as that would result in unpredictable behavior\&. .RE .PP \fBOWNER, GROUP, MODE\fR .RS 4 The permissions for the device node\&. Every specified value overrides the compiled\-in default value\&. .RE .PP \fBATTR{\fR\fB\fIkey\fR\fR\fB}\fR .RS 4 The value that should be written to a sysfs attribute of the event device\&. .RE .PP \fBENV{\fR\fB\fIkey\fR\fR\fB}\fR .RS 4 Set a device property value\&. Property names with a leading \*(Aq\&.\*(Aq are neither stored in the database nor exported to events or external tools (run by, say, the PROGRAM match key)\&. .RE .PP \fBTAG\fR .RS 4 Attach a tag to a device\&. This is used to filter events for users of libudev\*(Aqs monitor functionality, or to enumerate a group of tagged devices\&. The implementation can only work efficiently if only a few tags are attached to a device\&. It is only meant to be used in contexts with specific device filter requirements, and not as a general\-purpose flag\&. Excessive use might result in inefficient event handling\&. .RE .PP \fBRUN\fR .RS 4 Add a program to the list of programs to be executed for a specific device\&. .sp If no absolute path is given, the program is expected to live in /usr/lib/udev, otherwise the absolute path must be specified\&. The program name and following arguments are separated by spaces\&. Single quotes can be used to specify arguments with spaces\&. .sp This can only be used for very short running tasks\&. Running an event process for a long period of time may block all further events for this or a dependent device\&. Starting daemons or other long running processes is not appropriate for udev\&. .RE .PP \fBLABEL\fR .RS 4 A named label to which a GOTO may jump\&. .RE .PP \fBGOTO\fR .RS 4 Jumps to the next LABEL with a matching name\&. .RE .PP \fBIMPORT{\fR\fB\fItype\fR\fR\fB}\fR .RS 4 Import a set of variables as device properties, depending on \fItype\fR: .PP \fBprogram\fR .RS 4 Execute an external program specified as the assigned value and import its output, which must be in environment key format\&. Path specification, command/argument separation, and quoting work like in \fBRUN\fR\&. .RE .PP \fBfile\fR .RS 4 Import a text file specified as the assigned value, the content of which must be in environment key format\&. .RE .PP \fBdb\fR .RS 4 Import a single property specified as the assigned value from the current device database\&. This works only if the database is already populated by an earlier event\&. .RE .PP \fBcmdline\fR .RS 4 Import a single property from the kernel command line\&. For simple flags the value of the property is set to \*(Aq1\*(Aq\&. .RE .PP \fBparent\fR .RS 4 Import the stored keys from the parent device by reading the database entry of the parent device\&. The value assigned to \fBIMPORT{parent}\fR is used as a filter of key names to import (with the same shell\-style pattern matching used for comparisons)\&. .RE .RE .PP \fBWAIT_FOR\fR .RS 4 Wait for a file to become available or until a timeout of 10 seconds expires\&. The path is relative to the sysfs device; if no path is specified, this waits for an attribute to appear\&. .RE .PP \fBOPTIONS\fR .RS 4 Rule and device options: .PP \fBlink_priority=\fR\fB\fIvalue\fR\fR .RS 4 Specify the priority of the created symlinks\&. Devices with higher priorities overwrite existing symlinks of other devices\&. The default is 0\&. .RE .PP \fBevent_timeout=\fR .RS 4 Number of seconds an event waits for operations to finish before giving up and terminating itself\&. .RE .PP \fBstring_escape=\fR\fB\fInone|replace\fR\fR .RS 4 Usually control and other possibly unsafe characters are replaced in strings used for device naming\&. The mode of replacement can be specified with this option\&. .RE .PP \fBstatic_node=\fR .RS 4 Apply the permissions specified in this rule to the static device node with the specified name\&. Static device nodes might be provided by kernel modules or copied from /usr/lib/udev/devices\&. These nodes might not have a corresponding kernel device at the time udevd is started; they can trigger automatic kernel module loading\&. .RE .PP \fBwatch\fR .RS 4 Watch the device node with inotify; when the node is closed after being opened for writing, a change uevent is synthesized\&. .RE .PP \fBnowatch\fR .RS 4 Disable the watching of a device node with inotify\&. .RE .RE .PP The \fBNAME\fR, \fBSYMLINK\fR, \fBPROGRAM\fR, \fBOWNER\fR, \fBGROUP\fR, \fBMODE\fR and \fBRUN\fR fields support simple string substitutions\&. The \fBRUN\fR substitutions are performed after all rules have been processed, right before the program is executed, allowing for the use of device properties set by earlier matching rules\&. For all other fields, substitutions are performed while the individual rule is being processed\&. The available substitutions are: .PP \fB$kernel\fR, \fB%k\fR .RS 4 The kernel name for this device\&. .RE .PP \fB$number\fR, \fB%n\fR .RS 4 The kernel number for this device\&. For example, \*(Aqsda3\*(Aq has kernel number of \*(Aq3\*(Aq .RE .PP \fB$devpath\fR, \fB%p\fR .RS 4 The devpath of the device\&. .RE .PP \fB$id\fR, \fB%b\fR .RS 4 The name of the device matched while searching the devpath upwards for \fBSUBSYSTEMS\fR, \fBKERNELS\fR, \fBDRIVERS\fR and \fBATTRS\fR\&. .RE .PP \fB$driver\fR .RS 4 The driver name of the device matched while searching the devpath upwards for \fBSUBSYSTEMS\fR, \fBKERNELS\fR, \fBDRIVERS\fR and \fBATTRS\fR\&. .RE .PP \fB$attr{\fR\fB\fIfile\fR\fR\fB}\fR, \fB%s{\fR\fB\fIfile\fR\fR\fB}\fR .RS 4 The value of a sysfs attribute found at the device where all keys of the rule have matched\&. If the matching device does not have such an attribute, and a previous KERNELS, SUBSYSTEMS, DRIVERS, or ATTRS test selected a parent device, then the attribute from that parent device is used\&. .sp If the attribute is a symlink, the last element of the symlink target is returned as the value\&. .RE .PP \fB$env{\fR\fB\fIkey\fR\fR\fB}\fR, \fB%E{\fR\fB\fIkey\fR\fR\fB}\fR .RS 4 A device property value\&. .RE .PP \fB$major\fR, \fB%M\fR .RS 4 The kernel major number for the device\&. .RE .PP \fB$minor\fR, \fB%m\fR .RS 4 The kernel minor number for the device\&. .RE .PP \fB$result\fR, \fB%c\fR .RS 4 The string returned by the external program requested with PROGRAM\&. A single part of the string, separated by a space character, may be selected by specifying the part number as an attribute: \fB%c{N}\fR\&. If the number is followed by the \*(Aq+\*(Aq character, this part plus all remaining parts of the result string are substituted: \fB%c{N+}\fR .RE .PP \fB$parent\fR, \fB%P\fR .RS 4 The node name of the parent device\&. .RE .PP \fB$name\fR .RS 4 The current name of the device\&. If not changed by a rule, it is the name of the kernel device\&. .RE .PP \fB$links\fR .RS 4 A space\-separated list of the current symlinks\&. The value is only set during a remove event or if an earlier rule assigned a value\&. .RE .PP \fB$root\fR, \fB%r\fR .RS 4 The udev_root value\&. .RE .PP \fB$sys\fR, \fB%S\fR .RS 4 The sysfs mount point\&. .RE .PP \fB$devnode\fR, \fB%N\fR .RS 4 The name of the device node\&. .RE .PP \fB%%\fR .RS 4 The \*(Aq%\*(Aq character itself\&. .RE .PP \fB$$\fR .RS 4 The \*(Aq$\*(Aq character itself\&. .RE .SH "AUTHOR" .PP Written by Greg Kroah\-Hartman greg@kroah\&.com and Kay Sievers kay\&.sievers@vrfy\&.org\&. With much help from Dan Stekloff and many others\&. .SH "SEE ALSO" .PP \fBudevd\fR(8), \fBudevadm\fR(8) udev-182/src/PaxHeaders.12492/udevadm-trigger.c0000644000521600052160000000013111711107662017405 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083328.264104729 29 ctime=1332097353.42043893 udev-182/src/udevadm-trigger.c0000664000521600052160000002301411711107662016012 0ustar00kaykay00000000000000/* * Copyright (C) 2008-2009 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static int verbose; static int dry_run; static void exec_list(struct udev_enumerate *udev_enumerate, const char *action) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); struct udev_list_entry *entry; udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(udev_enumerate)) { char filename[UTIL_PATH_SIZE]; int fd; if (verbose) printf("%s\n", udev_list_entry_get_name(entry)); if (dry_run) continue; util_strscpyl(filename, sizeof(filename), udev_list_entry_get_name(entry), "/uevent", NULL); fd = open(filename, O_WRONLY); if (fd < 0) { dbg(udev, "error on opening %s: %m\n", filename); continue; } if (write(fd, action, strlen(action)) < 0) info(udev, "error writing '%s' to '%s': %m\n", action, filename); close(fd); } } static const char *keyval(const char *str, const char **val, char *buf, size_t size) { char *pos; util_strscpy(buf, size,str); pos = strchr(buf, '='); if (pos != NULL) { pos[0] = 0; pos++; } *val = pos; return buf; } static int adm_trigger(struct udev *udev, int argc, char *argv[]) { static const struct option options[] = { { "verbose", no_argument, NULL, 'v' }, { "dry-run", no_argument, NULL, 'n' }, { "type", required_argument, NULL, 't' }, { "action", required_argument, NULL, 'c' }, { "subsystem-match", required_argument, NULL, 's' }, { "subsystem-nomatch", required_argument, NULL, 'S' }, { "attr-match", required_argument, NULL, 'a' }, { "attr-nomatch", required_argument, NULL, 'A' }, { "property-match", required_argument, NULL, 'p' }, { "tag-match", required_argument, NULL, 'g' }, { "sysname-match", required_argument, NULL, 'y' }, { "parent-match", required_argument, NULL, 'b' }, { "help", no_argument, NULL, 'h' }, {} }; enum { TYPE_DEVICES, TYPE_SUBSYSTEMS, } device_type = TYPE_DEVICES; const char *action = "change"; struct udev_enumerate *udev_enumerate; int rc = 0; dbg(udev, "version %s\n", VERSION); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) { rc = 1; goto exit; } for (;;) { int option; const char *key; const char *val; char buf[UTIL_PATH_SIZE]; option = getopt_long(argc, argv, "vng:o:t:hc:p:s:S:a:A:y:b:", options, NULL); if (option == -1) break; switch (option) { case 'v': verbose = 1; break; case 'n': dry_run = 1; break; case 't': if (strcmp(optarg, "devices") == 0) { device_type = TYPE_DEVICES; } else if (strcmp(optarg, "subsystems") == 0) { device_type = TYPE_SUBSYSTEMS; } else { err(udev, "unknown type --type=%s\n", optarg); rc = 2; goto exit; } break; case 'c': action = optarg; break; case 's': udev_enumerate_add_match_subsystem(udev_enumerate, optarg); break; case 'S': udev_enumerate_add_nomatch_subsystem(udev_enumerate, optarg); break; case 'a': key = keyval(optarg, &val, buf, sizeof(buf)); udev_enumerate_add_match_sysattr(udev_enumerate, key, val); break; case 'A': key = keyval(optarg, &val, buf, sizeof(buf)); udev_enumerate_add_nomatch_sysattr(udev_enumerate, key, val); break; case 'p': key = keyval(optarg, &val, buf, sizeof(buf)); udev_enumerate_add_match_property(udev_enumerate, key, val); break; case 'g': udev_enumerate_add_match_tag(udev_enumerate, optarg); break; case 'y': udev_enumerate_add_match_sysname(udev_enumerate, optarg); break; case 'b': { char path[UTIL_PATH_SIZE]; struct udev_device *dev; /* add sys dir if needed */ if (strncmp(optarg, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) util_strscpyl(path, sizeof(path), udev_get_sys_path(udev), optarg, NULL); else util_strscpy(path, sizeof(path), optarg); util_remove_trailing_chars(path, '/'); dev = udev_device_new_from_syspath(udev, path); if (dev == NULL) { err(udev, "unable to open the device '%s'\n", optarg); rc = 2; goto exit; } udev_enumerate_add_match_parent(udev_enumerate, dev); /* drop reference immediately, enumerate pins the device as long as needed */ udev_device_unref(dev); break; } case 'h': printf("Usage: udevadm trigger OPTIONS\n" " --verbose print the list of devices while running\n" " --dry-run do not actually trigger the events\n" " --type= type of events to trigger\n" " devices sys devices (default)\n" " subsystems sys subsystems and drivers\n" " --action= event action value, default is \"change\"\n" " --subsystem-match= trigger devices from a matching subsystem\n" " --subsystem-nomatch= exclude devices from a matching subsystem\n" " --attr-match=]> trigger devices with a matching attribute\n" " --attr-nomatch=]> exclude devices with a matching attribute\n" " --property-match== trigger devices with a matching property\n" " --tag-match== trigger devices with a matching property\n" " --sysname-match= trigger devices with a matching name\n" " --parent-match= trigger devices with that parent device\n" " --help\n\n"); goto exit; default: rc = 1; goto exit; } } switch (device_type) { case TYPE_SUBSYSTEMS: udev_enumerate_scan_subsystems(udev_enumerate); exec_list(udev_enumerate, action); goto exit; case TYPE_DEVICES: udev_enumerate_scan_devices(udev_enumerate); exec_list(udev_enumerate, action); goto exit; default: goto exit; } exit: udev_enumerate_unref(udev_enumerate); return rc; } const struct udevadm_cmd udevadm_trigger = { .name = "trigger", .cmd = adm_trigger, .help = "request events from the kernel", }; udev-182/src/PaxHeaders.12492/mtd_probe0000644000521600052160000000013211731430511016044 xustar000000000000000030 mtime=1332097353.169438923 30 atime=1332097354.347438951 30 ctime=1332097353.169438923 udev-182/src/mtd_probe/0000775000521600052160000000000011731430511014525 5ustar00kaykay00000000000000udev-182/src/mtd_probe/PaxHeaders.12492/mtd_probe.c0000644000521600052160000000013211711107662020246 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083334.080104867 30 ctime=1332097353.145438923 udev-182/src/mtd_probe/mtd_probe.c0000664000521600052160000000273511711107662016661 0ustar00kaykay00000000000000/* * Copyright (C) 2010 - Maxim Levitsky * * mtd_probe is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * mtd_probe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with mtd_probe; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ #include "mtd_probe.h" #include #include #include #include #include #include #include #include int main(int argc, char** argv) { if (argc != 2) { printf("usage: mtd_probe /dev/mtd[n]\n"); return 1; } int mtd_fd = open(argv[1], O_RDONLY); if (mtd_fd == -1) { perror("open"); exit(-1); } mtd_info_t mtd_info; int error = ioctl(mtd_fd, MEMGETINFO, &mtd_info); if (error == -1) { perror("ioctl"); exit(-1); } probe_smart_media(mtd_fd, &mtd_info); return -1; } udev-182/src/mtd_probe/PaxHeaders.12492/probe_smartmedia.c0000644000521600052160000000013211711107662021610 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083334.151104869 30 ctime=1332097353.169438923 udev-182/src/mtd_probe/probe_smartmedia.c0000664000521600052160000000521611711107662020220 0ustar00kaykay00000000000000/* * Copyright (C) 2010 - Maxim Levitsky * * mtd_probe is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * mtd_probe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with mtd_probe; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include #include #include "mtd_probe.h" static const uint8_t cis_signature[] = { 0x01, 0x03, 0xD9, 0x01, 0xFF, 0x18, 0x02, 0xDF, 0x01, 0x20 }; void probe_smart_media(int mtd_fd, mtd_info_t* info) { char* cis_buffer = malloc(SM_SECTOR_SIZE); if (!cis_buffer) return; if (info->type != MTD_NANDFLASH) goto exit; int sector_size = info->writesize; int block_size = info->erasesize; int size_in_megs = info->size / (1024 * 1024); int spare_count; if (sector_size != SM_SECTOR_SIZE && sector_size != SM_SMALL_PAGE) goto exit; switch(size_in_megs) { case 1: case 2: spare_count = 6; break; case 4: spare_count = 12; break; default: spare_count = 24; break; } int offset; int cis_found = 0; for (offset = 0 ; offset < block_size * spare_count ; offset += sector_size) { lseek(mtd_fd, SEEK_SET, offset); if (read(mtd_fd, cis_buffer, SM_SECTOR_SIZE) == SM_SECTOR_SIZE){ cis_found = 1; break; } } if (!cis_found) goto exit; if (memcmp(cis_buffer, cis_signature, sizeof(cis_signature)) != 0 && (memcmp(cis_buffer + SM_SMALL_PAGE, cis_signature, sizeof(cis_signature)) != 0)) goto exit; printf("MTD_FTL=smartmedia\n"); free(cis_buffer); exit(0); exit: free(cis_buffer); return; } udev-182/src/mtd_probe/PaxHeaders.12492/mtd_probe.h0000644000521600052160000000013211711107662020253 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083334.088104867 30 ctime=1332097353.156438923 udev-182/src/mtd_probe/mtd_probe.h0000664000521600052160000000307311711107662016662 0ustar00kaykay00000000000000/* * Copyright (C) 2010 - Maxim Levitsky * * mtd_probe is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * mtd_probe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with mtd_probe; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ #include /* Full oob structure as written on the flash */ struct sm_oob { uint32_t reserved; uint8_t data_status; uint8_t block_status; uint8_t lba_copy1[2]; uint8_t ecc2[3]; uint8_t lba_copy2[2]; uint8_t ecc1[3]; } __attribute__((packed)); /* one sector is always 512 bytes, but it can consist of two nand pages */ #define SM_SECTOR_SIZE 512 /* oob area is also 16 bytes, but might be from two pages */ #define SM_OOB_SIZE 16 /* This is maximum zone size, and all devices that have more that one zone have this size */ #define SM_MAX_ZONE_SIZE 1024 /* support for small page nand */ #define SM_SMALL_PAGE 256 #define SM_SMALL_OOB_SIZE 8 void probe_smart_media(int mtd_fd, mtd_info_t *info); udev-182/src/mtd_probe/PaxHeaders.12492/75-probe_mtd.rules0000644000521600052160000000013211711107662021407 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.409117623 30 ctime=1332097352.659438911 udev-182/src/mtd_probe/75-probe_mtd.rules0000664000521600052160000000037711711107662020022 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION!="add", GOTO="mtd_probe_end" KERNEL=="mtd*ro", IMPORT{program}="mtd_probe $devnode" KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", IMPORT{builtin}="kmod load sm_ftl" LABEL="mtd_probe_end" udev-182/src/PaxHeaders.12492/udevadm-settle.c0000644000521600052160000000013211711107662017243 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083328.160104726 30 ctime=1332097353.409438929 udev-182/src/udevadm-settle.c0000664000521600052160000002141011711107662015645 0ustar00kaykay00000000000000/* * Copyright (C) 2006-2009 Kay Sievers * Copyright (C) 2009 Canonical Ltd. * Copyright (C) 2009 Scott James Remnant * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static int adm_settle(struct udev *udev, int argc, char *argv[]) { static const struct option options[] = { { "seq-start", required_argument, NULL, 's' }, { "seq-end", required_argument, NULL, 'e' }, { "timeout", required_argument, NULL, 't' }, { "exit-if-exists", required_argument, NULL, 'E' }, { "quiet", no_argument, NULL, 'q' }, { "help", no_argument, NULL, 'h' }, {} }; unsigned long long start_usec = now_usec(); unsigned long long start = 0; unsigned long long end = 0; int quiet = 0; const char *exists = NULL; unsigned int timeout = 120; struct pollfd pfd[1]; struct udev_queue *udev_queue = NULL; int rc = EXIT_FAILURE; dbg(udev, "version %s\n", VERSION); for (;;) { int option; int seconds; option = getopt_long(argc, argv, "s:e:t:E:qh", options, NULL); if (option == -1) break; switch (option) { case 's': start = strtoull(optarg, NULL, 0); break; case 'e': end = strtoull(optarg, NULL, 0); break; case 't': seconds = atoi(optarg); if (seconds >= 0) timeout = seconds; else fprintf(stderr, "invalid timeout value\n"); dbg(udev, "timeout=%i\n", timeout); break; case 'q': quiet = 1; break; case 'E': exists = optarg; break; case 'h': printf("Usage: udevadm settle OPTIONS\n" " --timeout= maximum time to wait for events\n" " --seq-start= first seqnum to wait for\n" " --seq-end= last seqnum to wait for\n" " --exit-if-exists= stop waiting if file exists\n" " --quiet do not print list after timeout\n" " --help\n\n"); exit(EXIT_SUCCESS); default: exit(EXIT_FAILURE); } } udev_queue = udev_queue_new(udev); if (udev_queue == NULL) exit(2); if (start > 0) { unsigned long long kernel_seq; kernel_seq = udev_queue_get_kernel_seqnum(udev_queue); /* unless specified, the last event is the current kernel seqnum */ if (end == 0) end = udev_queue_get_kernel_seqnum(udev_queue); if (start > end) { err(udev, "seq-start larger than seq-end, ignoring\n"); start = 0; end = 0; } if (start > kernel_seq || end > kernel_seq) { err(udev, "seq-start or seq-end larger than current kernel value, ignoring\n"); start = 0; end = 0; } info(udev, "start=%llu end=%llu current=%llu\n", start, end, kernel_seq); } else { if (end > 0) { err(udev, "seq-end needs seq-start parameter, ignoring\n"); end = 0; } } /* guarantee that the udev daemon isn't pre-processing */ if (getuid() == 0) { struct udev_ctrl *uctrl; uctrl = udev_ctrl_new(udev); if (uctrl != NULL) { if (udev_ctrl_send_ping(uctrl, timeout) < 0) { info(udev, "no connection to daemon\n"); udev_ctrl_unref(uctrl); rc = EXIT_SUCCESS; goto out; } udev_ctrl_unref(uctrl); } } pfd[0].events = POLLIN; pfd[0].fd = inotify_init1(IN_CLOEXEC); if (pfd[0].fd < 0) { err(udev, "inotify_init failed: %m\n"); } else { if (inotify_add_watch(pfd[0].fd, udev_get_run_path(udev), IN_MOVED_TO) < 0) { err(udev, "watching '%s' failed\n", udev_get_run_path(udev)); close(pfd[0].fd); pfd[0].fd = -1; } } for (;;) { struct stat statbuf; if (exists != NULL && stat(exists, &statbuf) == 0) { rc = EXIT_SUCCESS; break; } if (start > 0) { /* if asked for, wait for a specific sequence of events */ if (udev_queue_get_seqnum_sequence_is_finished(udev_queue, start, end) == 1) { rc = EXIT_SUCCESS; break; } } else { /* exit if queue is empty */ if (udev_queue_get_queue_is_empty(udev_queue)) { rc = EXIT_SUCCESS; break; } } if (pfd[0].fd >= 0) { int delay; if (exists != NULL || start > 0) delay = 100; else delay = 1000; /* wake up after delay, or immediately after the queue is rebuilt */ if (poll(pfd, 1, delay) > 0 && pfd[0].revents & POLLIN) { char buf[sizeof(struct inotify_event) + PATH_MAX]; read(pfd[0].fd, buf, sizeof(buf)); } } else { sleep(1); } if (timeout > 0) { unsigned long long age_usec; age_usec = now_usec() - start_usec; if (age_usec / (1000 * 1000) >= timeout) { struct udev_list_entry *list_entry; if (!quiet && udev_queue_get_queued_list_entry(udev_queue) != NULL) { info(udev, "timeout waiting for udev queue\n"); printf("\nudevadm settle - timeout of %i seconds reached, the event queue contains:\n", timeout); udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue)) printf(" %s (%s)\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); } break; } } } out: if (pfd[0].fd >= 0) close(pfd[0].fd); udev_queue_unref(udev_queue); return rc; } const struct udevadm_cmd udevadm_settle = { .name = "settle", .cmd = adm_settle, .help = "wait for the event queue to finish", }; udev-182/src/PaxHeaders.12492/libudev.pc.in0000644000521600052160000000013211711107662016537 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083662.252112687 30 ctime=1332097353.485438931 udev-182/src/libudev.pc.in0000664000521600052160000000035711711107662015150 0ustar00kaykay00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libudev Description: Library to access udev device information Version: @VERSION@ Libs: -L${libdir} -ludev -lrt Libs.private: Cflags: -I${includedir} udev-182/src/PaxHeaders.12492/udevadm.html0000644000521600052160000000013211731430437016470 xustar000000000000000030 mtime=1332097311.286437926 30 atime=1332097311.285437926 30 ctime=1332097352.040438896 udev-182/src/udevadm.html0000664000521600052160000004014311731430437015076 0ustar00kaykay00000000000000 udevadm

Name

udevadm — udev management tool

Synopsis

udevadm [--debug] [--version] [--help]

udevadm info options

udevadm trigger [options]

udevadm settle [options]

udevadm control command

udevadm monitor [options]

udevadm test [options] devpath

udevadm test-builtin [options] command devpath

OPTIONS

--debug

Print debug messages to stderr.

--version

Print version number.

--help

Print help text.

udevadm trigger [options]

Request device events from the kernel. Primarily used to replay events at system coldplug time.

--verbose

Print the list of devices which will be triggered.

--dry-run

Do not actually trigger the event.

--type=type

Trigger a specific type of devices. Valid types are: devices, subsystems. The default value is devices.

--action=action

Type of event to be triggered. The default value is change.

--subsystem-match=subsystem

Trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching.

--subsystem-nomatch=subsystem

Do not trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching.

--attr-match=attribute=value

Trigger events for devices with a matching sysfs attribute. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching. If no value is specified, the existence of the sysfs attribute is checked. This option can be specified multiple times.

--attr-nomatch=attribute=value

Do not trigger events for devices with a matching sysfs attribute. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching. If no value is specified, the existence of the sysfs attribute is checked. This option can be specified multiple times.

--property-match=property=value

Trigger events for devices with a matching property value. This option can be specified multiple times and supports shell style pattern matching.

--tag-match=property

Trigger events for devices with a matching tag. This option can be specified multiple times.

--sysname-match=name

Trigger events for devices with a matching sys device name. This option can be specified multiple times and supports shell style pattern matching.

--parent-match=syspath

Trigger events for all children of a given device.

udev-182/src/PaxHeaders.12492/libudev-util.c0000644000521600052160000000013211711107662016725 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083322.799104598 30 ctime=1332097353.007438919 udev-182/src/libudev-util.c0000664000521600052160000003665611711107662015351 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2011 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-util * @short_description: utils */ ssize_t util_get_sys_core_link_value(struct udev *udev, const char *slink, const char *syspath, char *value, size_t size) { char path[UTIL_PATH_SIZE]; char target[UTIL_PATH_SIZE]; ssize_t len; const char *pos; util_strscpyl(path, sizeof(path), syspath, "/", slink, NULL); len = readlink(path, target, sizeof(target)); if (len <= 0 || len == (ssize_t)sizeof(target)) return -1; target[len] = '\0'; pos = strrchr(target, '/'); if (pos == NULL) return -1; pos = &pos[1]; dbg(udev, "resolved link to: '%s'\n", pos); return util_strscpy(value, size, pos); } int util_resolve_sys_link(struct udev *udev, char *syspath, size_t size) { char link_target[UTIL_PATH_SIZE]; ssize_t len; int i; int back; char *base = NULL; len = readlink(syspath, link_target, sizeof(link_target)); if (len <= 0 || len == (ssize_t)sizeof(link_target)) return -1; link_target[len] = '\0'; dbg(udev, "path link '%s' points to '%s'\n", syspath, link_target); for (back = 0; strncmp(&link_target[back * 3], "../", 3) == 0; back++) ; dbg(udev, "base '%s', tail '%s', back %i\n", syspath, &link_target[back * 3], back); for (i = 0; i <= back; i++) { base = strrchr(syspath, '/'); if (base == NULL) return -EINVAL; base[0] = '\0'; } if (base == NULL) return -EINVAL; dbg(udev, "after moving back '%s'\n", syspath); util_strscpyl(base, size - (base - syspath), "/", &link_target[back * 3], NULL); return 0; } int util_log_priority(const char *priority) { char *endptr; int prio; prio = strtol(priority, &endptr, 10); if (endptr[0] == '\0' || isspace(endptr[0])) return prio; if (strncmp(priority, "err", 3) == 0) return LOG_ERR; if (strncmp(priority, "info", 4) == 0) return LOG_INFO; if (strncmp(priority, "debug", 5) == 0) return LOG_DEBUG; return 0; } size_t util_path_encode(const char *src, char *dest, size_t size) { size_t i, j; for (i = 0, j = 0; src[i] != '\0'; i++) { if (src[i] == '/') { if (j+4 >= size) { j = 0; break; } memcpy(&dest[j], "\\x2f", 4); j += 4; } else if (src[i] == '\\') { if (j+4 >= size) { j = 0; break; } memcpy(&dest[j], "\\x5c", 4); j += 4; } else { if (j+1 >= size) { j = 0; break; } dest[j] = src[i]; j++; } } dest[j] = '\0'; return j; } size_t util_path_decode(char *s) { size_t i, j; for (i = 0, j = 0; s[i] != '\0'; j++) { if (memcmp(&s[i], "\\x2f", 4) == 0) { s[j] = '/'; i += 4; } else if (memcmp(&s[i], "\\x5c", 4) == 0) { s[j] = '\\'; i += 4; } else { s[j] = s[i]; i++; } } s[j] = '\0'; return j; } void util_remove_trailing_chars(char *path, char c) { size_t len; if (path == NULL) return; len = strlen(path); while (len > 0 && path[len-1] == c) path[--len] = '\0'; } /* * Concatenates strings. In any case, terminates in _all_ cases with '\0' * and moves the @dest pointer forward to the added '\0'. Returns the * remaining size, and 0 if the string was truncated. */ size_t util_strpcpy(char **dest, size_t size, const char *src) { size_t len; len = strlen(src); if (len >= size) { if (size > 1) *dest = mempcpy(*dest, src, size-1); size = 0; *dest[0] = '\0'; } else { if (len > 0) { *dest = mempcpy(*dest, src, len); size -= len; } *dest[0] = '\0'; } return size; } /* concatenates list of strings, moves dest forward */ size_t util_strpcpyl(char **dest, size_t size, const char *src, ...) { va_list va; va_start(va, src); do { size = util_strpcpy(dest, size, src); src = va_arg(va, char *); } while (src != NULL); va_end(va); return size; } /* copies string */ size_t util_strscpy(char *dest, size_t size, const char *src) { char *s; s = dest; return util_strpcpy(&s, size, src); } /* concatenates list of strings */ size_t util_strscpyl(char *dest, size_t size, const char *src, ...) { va_list va; char *s; va_start(va, src); s = dest; do { size = util_strpcpy(&s, size, src); src = va_arg(va, char *); } while (src != NULL); va_end(va); return size; } /* count of characters used to encode one unicode char */ static int utf8_encoded_expected_len(const char *str) { unsigned char c = (unsigned char)str[0]; if (c < 0x80) return 1; if ((c & 0xe0) == 0xc0) return 2; if ((c & 0xf0) == 0xe0) return 3; if ((c & 0xf8) == 0xf0) return 4; if ((c & 0xfc) == 0xf8) return 5; if ((c & 0xfe) == 0xfc) return 6; return 0; } /* decode one unicode char */ static int utf8_encoded_to_unichar(const char *str) { int unichar; int len; int i; len = utf8_encoded_expected_len(str); switch (len) { case 1: return (int)str[0]; case 2: unichar = str[0] & 0x1f; break; case 3: unichar = (int)str[0] & 0x0f; break; case 4: unichar = (int)str[0] & 0x07; break; case 5: unichar = (int)str[0] & 0x03; break; case 6: unichar = (int)str[0] & 0x01; break; default: return -1; } for (i = 1; i < len; i++) { if (((int)str[i] & 0xc0) != 0x80) return -1; unichar <<= 6; unichar |= (int)str[i] & 0x3f; } return unichar; } /* expected size used to encode one unicode char */ static int utf8_unichar_to_encoded_len(int unichar) { if (unichar < 0x80) return 1; if (unichar < 0x800) return 2; if (unichar < 0x10000) return 3; if (unichar < 0x200000) return 4; if (unichar < 0x4000000) return 5; return 6; } /* check if unicode char has a valid numeric range */ static int utf8_unichar_valid_range(int unichar) { if (unichar > 0x10ffff) return 0; if ((unichar & 0xfffff800) == 0xd800) return 0; if ((unichar > 0xfdcf) && (unichar < 0xfdf0)) return 0; if ((unichar & 0xffff) == 0xffff) return 0; return 1; } /* validate one encoded unicode char and return its length */ static int utf8_encoded_valid_unichar(const char *str) { int len; int unichar; int i; len = utf8_encoded_expected_len(str); if (len == 0) return -1; /* ascii is valid */ if (len == 1) return 1; /* check if expected encoded chars are available */ for (i = 0; i < len; i++) if ((str[i] & 0x80) != 0x80) return -1; unichar = utf8_encoded_to_unichar(str); /* check if encoded length matches encoded value */ if (utf8_unichar_to_encoded_len(unichar) != len) return -1; /* check if value has valid range */ if (!utf8_unichar_valid_range(unichar)) return -1; return len; } int util_replace_whitespace(const char *str, char *to, size_t len) { size_t i, j; /* strip trailing whitespace */ len = strnlen(str, len); while (len && isspace(str[len-1])) len--; /* strip leading whitespace */ i = 0; while (isspace(str[i]) && (i < len)) i++; j = 0; while (i < len) { /* substitute multiple whitespace with a single '_' */ if (isspace(str[i])) { while (isspace(str[i])) i++; to[j++] = '_'; } to[j++] = str[i++]; } to[j] = '\0'; return 0; } static int is_whitelisted(char c, const char *white) { if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || strchr("#+-.:=@_", c) != NULL || (white != NULL && strchr(white, c) != NULL)) return 1; return 0; } /* allow chars in whitelist, plain ascii, hex-escaping and valid utf8 */ int util_replace_chars(char *str, const char *white) { size_t i = 0; int replaced = 0; while (str[i] != '\0') { int len; if (is_whitelisted(str[i], white)) { i++; continue; } /* accept hex encoding */ if (str[i] == '\\' && str[i+1] == 'x') { i += 2; continue; } /* accept valid utf8 */ len = utf8_encoded_valid_unichar(&str[i]); if (len > 1) { i += len; continue; } /* if space is allowed, replace whitespace with ordinary space */ if (isspace(str[i]) && white != NULL && strchr(white, ' ') != NULL) { str[i] = ' '; i++; replaced++; continue; } /* everything else is replaced with '_' */ str[i] = '_'; i++; replaced++; } return replaced; } /** * udev_util_encode_string: * @str: input string to be encoded * @str_enc: output string to store the encoded input string * @len: maximum size of the output string, which may be * four times as long as the input string * * Encode all potentially unsafe characters of a string to the * corresponding 2 char hex value prefixed by '\x'. * * Returns: 0 if the entire string was copied, non-zero otherwise. **/ UDEV_EXPORT int udev_util_encode_string(const char *str, char *str_enc, size_t len) { size_t i, j; if (str == NULL || str_enc == NULL) return -1; for (i = 0, j = 0; str[i] != '\0'; i++) { int seqlen; seqlen = utf8_encoded_valid_unichar(&str[i]); if (seqlen > 1) { if (len-j < (size_t)seqlen) goto err; memcpy(&str_enc[j], &str[i], seqlen); j += seqlen; i += (seqlen-1); } else if (str[i] == '\\' || !is_whitelisted(str[i], NULL)) { if (len-j < 4) goto err; sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]); j += 4; } else { if (len-j < 1) goto err; str_enc[j] = str[i]; j++; } } if (len-j < 1) goto err; str_enc[j] = '\0'; return 0; err: return -1; } /* * http://sites.google.com/site/murmurhash/ * * All code is released to the public domain. For business purposes, * Murmurhash is under the MIT license. * */ static unsigned int murmur_hash2(const char *key, int len, unsigned int seed) { /* * 'm' and 'r' are mixing constants generated offline. * They're not really 'magic', they just happen to work well. */ const unsigned int m = 0x5bd1e995; const int r = 24; /* initialize the hash to a 'random' value */ unsigned int h = seed ^ len; /* mix 4 bytes at a time into the hash */ const unsigned char * data = (const unsigned char *)key; while(len >= 4) { unsigned int k = *(unsigned int *)data; k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; data += 4; len -= 4; } /* handle the last few bytes of the input array */ switch(len) { case 3: h ^= data[2] << 16; case 2: h ^= data[1] << 8; case 1: h ^= data[0]; h *= m; }; /* do a few final mixes of the hash to ensure the last few bytes are well-incorporated */ h ^= h >> 13; h *= m; h ^= h >> 15; return h; } unsigned int util_string_hash32(const char *str) { return murmur_hash2(str, strlen(str), 0); } /* get a bunch of bit numbers out of the hash, and set the bits in our bit field */ uint64_t util_string_bloom64(const char *str) { uint64_t bits = 0; unsigned int hash = util_string_hash32(str); bits |= 1LLU << (hash & 63); bits |= 1LLU << ((hash >> 6) & 63); bits |= 1LLU << ((hash >> 12) & 63); bits |= 1LLU << ((hash >> 18) & 63); return bits; } #define USEC_PER_SEC 1000000ULL #define NSEC_PER_USEC 1000ULL unsigned long long ts_usec(const struct timespec *ts) { return (unsigned long long) ts->tv_sec * USEC_PER_SEC + (unsigned long long) ts->tv_nsec / NSEC_PER_USEC; } unsigned long long now_usec(void) { struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) return 0; return ts_usec(&ts); } udev-182/src/PaxHeaders.12492/libudev.h0000644000521600052160000000013211711107662015757 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332082819.369092602 30 ctime=1332097352.800438916 udev-182/src/libudev.h0000664000521600052160000002203011711107662014360 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2011 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #ifndef _LIBUDEV_H_ #define _LIBUDEV_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif /* * udev - library context * * reads the udev config and system environment * allows custom logging */ struct udev; struct udev *udev_ref(struct udev *udev); void udev_unref(struct udev *udev); struct udev *udev_new(void); void udev_set_log_fn(struct udev *udev, void (*log_fn)(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args)); int udev_get_log_priority(struct udev *udev); void udev_set_log_priority(struct udev *udev, int priority); const char *udev_get_sys_path(struct udev *udev); const char *udev_get_dev_path(struct udev *udev); const char *udev_get_run_path(struct udev *udev); void *udev_get_userdata(struct udev *udev); void udev_set_userdata(struct udev *udev, void *userdata); /* * udev_list * * access to libudev generated lists */ struct udev_list_entry; struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry); struct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list_entry, const char *name); const char *udev_list_entry_get_name(struct udev_list_entry *list_entry); const char *udev_list_entry_get_value(struct udev_list_entry *list_entry); /** * udev_list_entry_foreach: * @list_entry: entry to store the current position * @first_entry: first entry to start with * * Helper to iterate over all entries of a list. */ #define udev_list_entry_foreach(list_entry, first_entry) \ for (list_entry = first_entry; \ list_entry != NULL; \ list_entry = udev_list_entry_get_next(list_entry)) /* * udev_device * * access to sysfs/kernel devices */ struct udev_device; struct udev_device *udev_device_ref(struct udev_device *udev_device); void udev_device_unref(struct udev_device *udev_device); struct udev *udev_device_get_udev(struct udev_device *udev_device); struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath); struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum); struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname); struct udev_device *udev_device_new_from_environment(struct udev *udev); /* udev_device_get_parent_*() does not take a reference on the returned device, it is automatically unref'd with the parent */ struct udev_device *udev_device_get_parent(struct udev_device *udev_device); struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, const char *subsystem, const char *devtype); /* retrieve device properties */ const char *udev_device_get_devpath(struct udev_device *udev_device); const char *udev_device_get_subsystem(struct udev_device *udev_device); const char *udev_device_get_devtype(struct udev_device *udev_device); const char *udev_device_get_syspath(struct udev_device *udev_device); const char *udev_device_get_sysname(struct udev_device *udev_device); const char *udev_device_get_sysnum(struct udev_device *udev_device); const char *udev_device_get_devnode(struct udev_device *udev_device); int udev_device_get_is_initialized(struct udev_device *udev_device); struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device); struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device); struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device); struct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device); const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key); const char *udev_device_get_driver(struct udev_device *udev_device); dev_t udev_device_get_devnum(struct udev_device *udev_device); const char *udev_device_get_action(struct udev_device *udev_device); unsigned long long int udev_device_get_seqnum(struct udev_device *udev_device); unsigned long long int udev_device_get_usec_since_initialized(struct udev_device *udev_device); const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr); int udev_device_has_tag(struct udev_device *udev_device, const char *tag); /* * udev_monitor * * access to kernel uevents and udev events */ struct udev_monitor; struct udev_monitor *udev_monitor_ref(struct udev_monitor *udev_monitor); void udev_monitor_unref(struct udev_monitor *udev_monitor); struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor); /* kernel and udev generated events over netlink */ struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char *name); /* custom socket (use netlink and filters instead) */ struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char *socket_path); /* bind socket */ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor); int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size); int udev_monitor_get_fd(struct udev_monitor *udev_monitor); struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor); /* in-kernel socket filters to select messages that get delivered to a listener */ int udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, const char *subsystem, const char *devtype); int udev_monitor_filter_add_match_tag(struct udev_monitor *udev_monitor, const char *tag); int udev_monitor_filter_update(struct udev_monitor *udev_monitor); int udev_monitor_filter_remove(struct udev_monitor *udev_monitor); /* * udev_enumerate * * search sysfs for specific devices and provide a sorted list */ struct udev_enumerate; struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate); void udev_enumerate_unref(struct udev_enumerate *udev_enumerate); struct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate); struct udev_enumerate *udev_enumerate_new(struct udev *udev); /* device properties filter */ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem); int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem); int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value); int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value); int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value); int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname); int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag); int udev_enumerate_add_match_parent(struct udev_enumerate *udev_enumerate, struct udev_device *parent); int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerate); int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char *syspath); /* run enumeration with active filters */ int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate); int udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate); /* return device list */ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate); /* * udev_queue * * access to the currently running udev events */ struct udev_queue; struct udev_queue *udev_queue_ref(struct udev_queue *udev_queue); void udev_queue_unref(struct udev_queue *udev_queue); struct udev *udev_queue_get_udev(struct udev_queue *udev_queue); struct udev_queue *udev_queue_new(struct udev *udev); unsigned long long int udev_queue_get_kernel_seqnum(struct udev_queue *udev_queue); unsigned long long int udev_queue_get_udev_seqnum(struct udev_queue *udev_queue); int udev_queue_get_udev_is_active(struct udev_queue *udev_queue); int udev_queue_get_queue_is_empty(struct udev_queue *udev_queue); int udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue, unsigned long long int seqnum); int udev_queue_get_seqnum_sequence_is_finished(struct udev_queue *udev_queue, unsigned long long int start, unsigned long long int end); struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev_queue); /* * udev_util * * udev specific utilities */ int udev_util_encode_string(const char *str, char *str_enc, size_t len); #ifdef __cplusplus } /* extern "C" */ #endif #endif udev-182/src/PaxHeaders.12492/udev.h0000644000521600052160000000013211711145700015263 xustar000000000000000030 mtime=1327811520.763033394 30 atime=1332083325.648104666 30 ctime=1332097353.218438927 udev-182/src/udev.h0000664000521600052160000001734511711145700013701 0ustar00kaykay00000000000000/* * Copyright (C) 2003 Greg Kroah-Hartman * Copyright (C) 2003-2010 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef _UDEV_H_ #define _UDEV_H_ #include #include #include #include "libudev.h" #include "libudev-private.h" struct udev_event { struct udev *udev; struct udev_device *dev; struct udev_device *dev_parent; struct udev_device *dev_db; char *name; char *program_result; mode_t mode; uid_t uid; gid_t gid; struct udev_list run_list; int exec_delay; unsigned long long birth_usec; unsigned long long timeout_usec; int fd_signal; unsigned int builtin_run; unsigned int builtin_ret; bool sigterm; bool inotify_watch; bool inotify_watch_final; bool group_final; bool owner_final; bool mode_set; bool mode_final; bool name_final; bool devlink_final; bool run_final; }; struct udev_watch { struct udev_list_node node; int handle; char *name; }; /* udev-rules.c */ struct udev_rules; struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names); struct udev_rules *udev_rules_unref(struct udev_rules *rules); int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, const sigset_t *sigmask); void udev_rules_apply_static_dev_perms(struct udev_rules *rules); /* udev-event.c */ struct udev_event *udev_event_new(struct udev_device *dev); void udev_event_unref(struct udev_event *event); size_t udev_event_apply_format(struct udev_event *event, const char *src, char *dest, size_t size); int udev_event_apply_subsys_kernel(struct udev_event *event, const char *string, char *result, size_t maxsize, int read_value); int udev_event_spawn(struct udev_event *event, const char *cmd, char **envp, const sigset_t *sigmask, char *result, size_t ressize); int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigset); int udev_event_execute_run(struct udev_event *event, const sigset_t *sigset); int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]); /* udev-watch.c */ int udev_watch_init(struct udev *udev); void udev_watch_restore(struct udev *udev); void udev_watch_begin(struct udev *udev, struct udev_device *dev); void udev_watch_end(struct udev *udev, struct udev_device *dev); struct udev_device *udev_watch_lookup(struct udev *udev, int wd); /* udev-node.c */ void udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid); void udev_node_remove(struct udev_device *dev); void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev_old); /* udev-ctrl.c */ struct udev_ctrl; struct udev_ctrl *udev_ctrl_new(struct udev *udev); struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd); int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl); struct udev_ctrl *udev_ctrl_ref(struct udev_ctrl *uctrl); struct udev_ctrl *udev_ctrl_unref(struct udev_ctrl *uctrl); int udev_ctrl_cleanup(struct udev_ctrl *uctrl); struct udev *udev_ctrl_get_udev(struct udev_ctrl *uctrl); int udev_ctrl_get_fd(struct udev_ctrl *uctrl); int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, int timeout); int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, int timeout); int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, int timeout); int udev_ctrl_send_reload(struct udev_ctrl *uctrl, int timeout); int udev_ctrl_send_ping(struct udev_ctrl *uctrl, int timeout); int udev_ctrl_send_exit(struct udev_ctrl *uctrl, int timeout); int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, int timeout); int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, int timeout); struct udev_ctrl_connection; struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl); struct udev_ctrl_connection *udev_ctrl_connection_ref(struct udev_ctrl_connection *conn); struct udev_ctrl_connection *udev_ctrl_connection_unref(struct udev_ctrl_connection *conn); struct udev_ctrl_msg; struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn); struct udev_ctrl_msg *udev_ctrl_msg_ref(struct udev_ctrl_msg *ctrl_msg); struct udev_ctrl_msg *udev_ctrl_msg_unref(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_set_log_level(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_stop_exec_queue(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_start_exec_queue(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_reload(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_ping(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_exit(struct udev_ctrl_msg *ctrl_msg); const char *udev_ctrl_get_set_env(struct udev_ctrl_msg *ctrl_msg); int udev_ctrl_get_set_children_max(struct udev_ctrl_msg *ctrl_msg); /* built-in commands */ enum udev_builtin_cmd { UDEV_BUILTIN_BLKID, UDEV_BUILTIN_FIRMWARE, UDEV_BUILTIN_INPUT_ID, UDEV_BUILTIN_KMOD, UDEV_BUILTIN_PATH_ID, UDEV_BUILTIN_PCI_DB, UDEV_BUILTIN_USB_DB, UDEV_BUILTIN_USB_ID, UDEV_BUILTIN_MAX }; struct udev_builtin { const char *name; int (*cmd)(struct udev_device *dev, int argc, char *argv[], bool test); const char *help; int (*init)(struct udev *udev); void (*exit)(struct udev *udev); bool (*validate)(struct udev *udev); bool run_once; }; extern const struct udev_builtin udev_builtin_blkid; extern const struct udev_builtin udev_builtin_firmware; extern const struct udev_builtin udev_builtin_input_id; extern const struct udev_builtin udev_builtin_kmod; extern const struct udev_builtin udev_builtin_path_id; extern const struct udev_builtin udev_builtin_pci_db; extern const struct udev_builtin udev_builtin_usb_db; extern const struct udev_builtin udev_builtin_usb_id; int udev_builtin_init(struct udev *udev); void udev_builtin_exit(struct udev *udev); enum udev_builtin_cmd udev_builtin_lookup(const char *command); const char *udev_builtin_name(enum udev_builtin_cmd cmd); bool udev_builtin_run_once(enum udev_builtin_cmd cmd); int udev_builtin_run(struct udev_device *dev, enum udev_builtin_cmd cmd, const char *command, bool test); void udev_builtin_list(struct udev *udev); int udev_builtin_add_property(struct udev_device *dev, bool test, const char *key, const char *val); /* udev logging */ void udev_main_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args); /* udevadm commands */ struct udevadm_cmd { const char *name; int (*cmd)(struct udev *udev, int argc, char *argv[]); const char *help; int debug; }; extern const struct udevadm_cmd udevadm_info; extern const struct udevadm_cmd udevadm_trigger; extern const struct udevadm_cmd udevadm_settle; extern const struct udevadm_cmd udevadm_control; extern const struct udevadm_cmd udevadm_monitor; extern const struct udevadm_cmd udevadm_test; extern const struct udevadm_cmd udevadm_test_builtin; #endif udev-182/src/PaxHeaders.12492/collect0000644000521600052160000000013211731430511015516 xustar000000000000000030 mtime=1332097353.119438923 30 atime=1332097354.347438951 30 ctime=1332097353.119438923 udev-182/src/collect/0000775000521600052160000000000011731430511014177 5ustar00kaykay00000000000000udev-182/src/collect/PaxHeaders.12492/collect.c0000644000521600052160000000013211711107662017372 xustar000000000000000030 mtime=1327796146.952827023 30 atime=1332083332.401104827 30 ctime=1332097353.120438923 udev-182/src/collect/collect.c0000664000521600052160000003225211711107662016002 0ustar00kaykay00000000000000/* * Collect variables across events. * * usage: collect [--add|--remove] * * Adds ID to the list governed by . * must be part of the ID list . * If all IDs given by are listed (ie collect has been * invoked for each ID in ) collect returns 0, the * number of missing IDs otherwise. * A negative number is returned on error. * * Copyright(C) 2007, Hannes Reinecke * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * */ #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" #define BUFSIZE 16 #define UDEV_ALARM_TIMEOUT 180 enum collect_state { STATE_NONE, STATE_OLD, STATE_CONFIRMED, }; struct _mate { struct udev_list_node node; char *name; enum collect_state state; }; static struct udev_list_node bunch; static int debug; /* This can increase dynamically */ static size_t bufsize = BUFSIZE; static struct _mate *node_to_mate(struct udev_list_node *node) { char *mate; mate = (char *)node; mate -= offsetof(struct _mate, node); return (struct _mate *)mate; } static void sig_alrm(int signo) { exit(4); } static void usage(void) { printf("usage: collect [--add|--remove] [--debug] \n" "\n" " Adds ID to the list governed by .\n" " must be part of the list .\n" " If all IDs given by are listed (ie collect has been\n" " invoked for each ID in ) collect returns 0, the\n" " number of missing IDs otherwise.\n" " On error a negative number is returned.\n" "\n"); } /* * prepare * * Prepares the database file */ static int prepare(char *dir, char *filename) { struct stat statbuf; char buf[512]; int fd; if (stat(dir, &statbuf) < 0) mkdir(dir, 0700); sprintf(buf, "%s/%s", dir, filename); fd = open(buf,O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); if (fd < 0) fprintf(stderr, "Cannot open %s: %s\n", buf, strerror(errno)); if (lockf(fd,F_TLOCK,0) < 0) { if (debug) fprintf(stderr, "Lock taken, wait for %d seconds\n", UDEV_ALARM_TIMEOUT); if (errno == EAGAIN || errno == EACCES) { alarm(UDEV_ALARM_TIMEOUT); lockf(fd, F_LOCK, 0); if (debug) fprintf(stderr, "Acquired lock on %s\n", buf); } else { if (debug) fprintf(stderr, "Could not get lock on %s: %s\n", buf, strerror(errno)); } } return fd; } /* * Read checkpoint file * * Tricky reading this. We allocate a buffer twice as large * as we're going to read. Then we read into the upper half * of that buffer and start parsing. * Once we do _not_ find end-of-work terminator (whitespace * character) we move the upper half to the lower half, * adjust the read pointer and read the next bit. * Quite clever methinks :-) * I should become a programmer ... * * Yes, one could have used fgets() for this. But then we'd * have to use freopen etc which I found quite tedious. */ static int checkout(int fd) { int len; char *buf, *ptr, *word = NULL; struct _mate *him; restart: len = bufsize >> 1; buf = calloc(1,bufsize + 1); if (!buf) { fprintf(stderr, "Out of memory\n"); return -1; } memset(buf, ' ', bufsize); ptr = buf + len; while ((read(fd, buf + len, len)) > 0) { while (ptr && *ptr) { word = ptr; ptr = strpbrk(word," \n\t\r"); if (!ptr && word < (buf + len)) { bufsize = bufsize << 1; if (debug) fprintf(stderr, "ID overflow, restarting with size %zi\n", bufsize); free(buf); lseek(fd, 0, SEEK_SET); goto restart; } if (ptr) { *ptr = '\0'; ptr++; if (!strlen(word)) continue; if (debug) fprintf(stderr, "Found word %s\n", word); him = malloc(sizeof (struct _mate)); him->name = strdup(word); him->state = STATE_OLD; udev_list_node_append(&him->node, &bunch); word = NULL; } } memcpy(buf, buf + len, len); memset(buf + len, ' ', len); if (!ptr) ptr = word; if (!ptr) break; ptr -= len; } free(buf); return 0; } /* * invite * * Adds a new ID 'us' to the internal list, * marks it as confirmed. */ static void invite(char *us) { struct udev_list_node *him_node; struct _mate *who = NULL; if (debug) fprintf(stderr, "Adding ID '%s'\n", us); udev_list_node_foreach(him_node, &bunch) { struct _mate *him = node_to_mate(him_node); if (!strcmp(him->name, us)) { him->state = STATE_CONFIRMED; who = him; } } if (debug && !who) fprintf(stderr, "ID '%s' not in database\n", us); } /* * reject * * Marks the ID 'us' as invalid, * causing it to be removed when the * list is written out. */ static void reject(char *us) { struct udev_list_node *him_node; struct _mate *who = NULL; if (debug) fprintf(stderr, "Removing ID '%s'\n", us); udev_list_node_foreach(him_node, &bunch) { struct _mate *him = node_to_mate(him_node); if (!strcmp(him->name, us)) { him->state = STATE_NONE; who = him; } } if (debug && !who) fprintf(stderr, "ID '%s' not in database\n", us); } /* * kickout * * Remove all IDs in the internal list which are not part * of the list passed via the commandline. */ static void kickout(void) { struct udev_list_node *him_node; struct udev_list_node *tmp; udev_list_node_foreach_safe(him_node, tmp, &bunch) { struct _mate *him = node_to_mate(him_node); if (him->state == STATE_OLD) { udev_list_node_remove(&him->node); free(him->name); free(him); } } } /* * missing * * Counts all missing IDs in the internal list. */ static int missing(int fd) { char *buf; int ret = 0; struct udev_list_node *him_node; buf = malloc(bufsize); if (!buf) return -1; udev_list_node_foreach(him_node, &bunch) { struct _mate *him = node_to_mate(him_node); if (him->state == STATE_NONE) { ret++; } else { while (strlen(him->name)+1 >= bufsize) { char *tmpbuf; bufsize = bufsize << 1; tmpbuf = realloc(buf, bufsize); if (!tmpbuf) { free(buf); return -1; } buf = tmpbuf; } snprintf(buf, strlen(him->name)+2, "%s ", him->name); write(fd, buf, strlen(buf)); } } free(buf); return ret; } /* * everybody * * Prints out the status of the internal list. */ static void everybody(void) { struct udev_list_node *him_node; const char *state = ""; udev_list_node_foreach(him_node, &bunch) { struct _mate *him = node_to_mate(him_node); switch (him->state) { case STATE_NONE: state = "none"; break; case STATE_OLD: state = "old"; break; case STATE_CONFIRMED: state = "confirmed"; break; } fprintf(stderr, "ID: %s=%s\n", him->name, state); } } int main(int argc, char **argv) { struct udev *udev; static const struct option options[] = { { "add", no_argument, NULL, 'a' }, { "remove", no_argument, NULL, 'r' }, { "debug", no_argument, NULL, 'd' }, { "help", no_argument, NULL, 'h' }, {} }; int argi; char *checkpoint, *us; int fd; int i; int ret = EXIT_SUCCESS; int prune = 0; char tmpdir[UTIL_PATH_SIZE]; udev = udev_new(); if (udev == NULL) { ret = EXIT_FAILURE; goto exit; } while (1) { int option; option = getopt_long(argc, argv, "ardh", options, NULL); if (option == -1) break; switch (option) { case 'a': prune = 0; break; case 'r': prune = 1; break; case 'd': debug = 1; break; case 'h': usage(); goto exit; default: ret = 1; goto exit; } } argi = optind; if (argi + 2 > argc) { printf("Missing parameter(s)\n"); ret = 1; goto exit; } checkpoint = argv[argi++]; us = argv[argi++]; if (signal(SIGALRM, sig_alrm) == SIG_ERR) { fprintf(stderr, "Cannot set SIGALRM: %s\n", strerror(errno)); ret = 2; goto exit; } udev_list_node_init(&bunch); if (debug) fprintf(stderr, "Using checkpoint '%s'\n", checkpoint); util_strscpyl(tmpdir, sizeof(tmpdir), udev_get_run_path(udev), "/collect", NULL); fd = prepare(tmpdir, checkpoint); if (fd < 0) { ret = 3; goto out; } if (checkout(fd) < 0) { ret = 2; goto out; } for (i = argi; i < argc; i++) { struct udev_list_node *him_node; struct _mate *who; who = NULL; udev_list_node_foreach(him_node, &bunch) { struct _mate *him = node_to_mate(him_node); if (!strcmp(him->name, argv[i])) who = him; } if (!who) { struct _mate *him; if (debug) fprintf(stderr, "ID %s: not in database\n", argv[i]); him = malloc(sizeof (struct _mate)); him->name = malloc(strlen(argv[i]) + 1); strcpy(him->name, argv[i]); him->state = STATE_NONE; udev_list_node_append(&him->node, &bunch); } else { if (debug) fprintf(stderr, "ID %s: found in database\n", argv[i]); who->state = STATE_CONFIRMED; } } if (prune) reject(us); else invite(us); if (debug) { everybody(); fprintf(stderr, "Prune lists\n"); } kickout(); lseek(fd, 0, SEEK_SET); ftruncate(fd, 0); ret = missing(fd); lockf(fd, F_ULOCK, 0); close(fd); out: if (debug) everybody(); if (ret >= 0) printf("COLLECT_%s=%d\n", checkpoint, ret); exit: udev_unref(udev); return ret; } udev-182/src/PaxHeaders.12492/udev-ctrl.c0000644000521600052160000000013111711107662016224 xustar000000000000000030 mtime=1327796146.962827005 29 atime=1332083326.66010469 30 ctime=1332097353.268438925 udev-182/src/udev-ctrl.c0000664000521600052160000003411411711107662014634 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include "udev.h" /* wire protocol magic must match */ #define UDEV_CTRL_MAGIC 0xdead1dea enum udev_ctrl_msg_type { UDEV_CTRL_UNKNOWN, UDEV_CTRL_SET_LOG_LEVEL, UDEV_CTRL_STOP_EXEC_QUEUE, UDEV_CTRL_START_EXEC_QUEUE, UDEV_CTRL_RELOAD, UDEV_CTRL_SET_ENV, UDEV_CTRL_SET_CHILDREN_MAX, UDEV_CTRL_PING, UDEV_CTRL_EXIT, }; struct udev_ctrl_msg_wire { char version[16]; unsigned int magic; enum udev_ctrl_msg_type type; union { int intval; char buf[256]; }; }; struct udev_ctrl_msg { int refcount; struct udev_ctrl_connection *conn; struct udev_ctrl_msg_wire ctrl_msg_wire; }; struct udev_ctrl { int refcount; struct udev *udev; int sock; struct sockaddr_un saddr; socklen_t addrlen; bool bound; bool cleanup_socket; bool connected; }; struct udev_ctrl_connection { int refcount; struct udev_ctrl *uctrl; int sock; }; struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd) { struct udev_ctrl *uctrl; uctrl = calloc(1, sizeof(struct udev_ctrl)); if (uctrl == NULL) return NULL; uctrl->refcount = 1; uctrl->udev = udev; if (fd < 0) { uctrl->sock = socket(AF_LOCAL, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); if (uctrl->sock < 0) { err(udev, "error getting socket: %m\n"); udev_ctrl_unref(uctrl); return NULL; } } else { uctrl->bound = true; uctrl->sock = fd; } uctrl->saddr.sun_family = AF_LOCAL; util_strscpyl(uctrl->saddr.sun_path, sizeof(uctrl->saddr.sun_path), udev_get_run_path(udev), "/control", NULL); uctrl->addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(uctrl->saddr.sun_path); return uctrl; } struct udev_ctrl *udev_ctrl_new(struct udev *udev) { return udev_ctrl_new_from_fd(udev, -1); } int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) { int err; if (!uctrl->bound) { err = bind(uctrl->sock, (struct sockaddr *)&uctrl->saddr, uctrl->addrlen); if (err < 0 && errno == EADDRINUSE) { unlink(uctrl->saddr.sun_path); err = bind(uctrl->sock, (struct sockaddr *)&uctrl->saddr, uctrl->addrlen); } if (err < 0) { err = -errno; err(uctrl->udev, "bind failed: %m\n"); return err; } err = listen(uctrl->sock, 0); if (err < 0) { err = -errno; err(uctrl->udev, "listen failed: %m\n"); return err; } uctrl->bound = true; uctrl->cleanup_socket = true; } return 0; } struct udev *udev_ctrl_get_udev(struct udev_ctrl *uctrl) { return uctrl->udev; } struct udev_ctrl *udev_ctrl_ref(struct udev_ctrl *uctrl) { if (uctrl == NULL) return NULL; uctrl->refcount++; return uctrl; } struct udev_ctrl *udev_ctrl_unref(struct udev_ctrl *uctrl) { if (uctrl == NULL) return NULL; uctrl->refcount--; if (uctrl->refcount > 0) return uctrl; if (uctrl->sock >= 0) close(uctrl->sock); free(uctrl); return NULL; } int udev_ctrl_cleanup(struct udev_ctrl *uctrl) { if (uctrl == NULL) return 0; if (uctrl->cleanup_socket) unlink(uctrl->saddr.sun_path); return 0; } int udev_ctrl_get_fd(struct udev_ctrl *uctrl) { if (uctrl == NULL) return -EINVAL; return uctrl->sock; } struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl) { struct udev_ctrl_connection *conn; struct ucred ucred; socklen_t slen; const int on = 1; conn = calloc(1, sizeof(struct udev_ctrl_connection)); if (conn == NULL) return NULL; conn->refcount = 1; conn->uctrl = uctrl; conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK); if (conn->sock < 0) { if (errno != EINTR) err(uctrl->udev, "unable to receive ctrl connection: %m\n"); goto err; } /* check peer credential of connection */ slen = sizeof(ucred); if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &ucred, &slen) < 0) { err(uctrl->udev, "unable to receive credentials of ctrl connection: %m\n"); goto err; } if (ucred.uid > 0) { err(uctrl->udev, "sender uid=%i, message ignored\n", ucred.uid); goto err; } /* enable receiving of the sender credentials in the messages */ setsockopt(conn->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); udev_ctrl_ref(uctrl); return conn; err: if (conn->sock >= 0) close(conn->sock); free(conn); return NULL; } struct udev_ctrl_connection *udev_ctrl_connection_ref(struct udev_ctrl_connection *conn) { if (conn == NULL) return NULL; conn->refcount++; return conn; } struct udev_ctrl_connection *udev_ctrl_connection_unref(struct udev_ctrl_connection *conn) { if (conn == NULL) return NULL; conn->refcount--; if (conn->refcount > 0) return conn; if (conn->sock >= 0) close(conn->sock); udev_ctrl_unref(conn->uctrl); free(conn); return NULL; } static int ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int intval, const char *buf, int timeout) { struct udev_ctrl_msg_wire ctrl_msg_wire; int err = 0; memset(&ctrl_msg_wire, 0x00, sizeof(struct udev_ctrl_msg_wire)); strcpy(ctrl_msg_wire.version, "udev-" VERSION); ctrl_msg_wire.magic = UDEV_CTRL_MAGIC; ctrl_msg_wire.type = type; if (buf != NULL) util_strscpy(ctrl_msg_wire.buf, sizeof(ctrl_msg_wire.buf), buf); else ctrl_msg_wire.intval = intval; if (!uctrl->connected) { if (connect(uctrl->sock, (struct sockaddr *)&uctrl->saddr, uctrl->addrlen) < 0) { err = -errno; goto out; } uctrl->connected = true; } if (send(uctrl->sock, &ctrl_msg_wire, sizeof(ctrl_msg_wire), 0) < 0) { err = -errno; goto out; } /* wait for peer message handling or disconnect */ for (;;) { struct pollfd pfd[1]; int r; pfd[0].fd = uctrl->sock; pfd[0].events = POLLIN; r = poll(pfd, 1, timeout * 1000); if (r < 0) { if (errno == EINTR) continue; err = -errno; break; } if (r > 0 && pfd[0].revents & POLLERR) { err = -EIO; break; } if (r == 0) err = -ETIMEDOUT; break; } out: return err; } int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, priority, NULL, timeout); } int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, 0, NULL, timeout); } int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, 0, NULL, timeout); } int udev_ctrl_send_reload(struct udev_ctrl *uctrl, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_RELOAD, 0, NULL, timeout); } int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_SET_ENV, 0, key, timeout); } int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, count, NULL, timeout); } int udev_ctrl_send_ping(struct udev_ctrl *uctrl, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_PING, 0, NULL, timeout); } int udev_ctrl_send_exit(struct udev_ctrl *uctrl, int timeout) { return ctrl_send(uctrl, UDEV_CTRL_EXIT, 0, NULL, timeout); } struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn) { struct udev *udev = conn->uctrl->udev; struct udev_ctrl_msg *uctrl_msg; ssize_t size; struct msghdr smsg; struct cmsghdr *cmsg; struct iovec iov; struct ucred *cred; char cred_msg[CMSG_SPACE(sizeof(struct ucred))]; uctrl_msg = calloc(1, sizeof(struct udev_ctrl_msg)); if (uctrl_msg == NULL) return NULL; uctrl_msg->refcount = 1; uctrl_msg->conn = conn; udev_ctrl_connection_ref(conn); /* wait for the incoming message */ for(;;) { struct pollfd pfd[1]; int r; pfd[0].fd = conn->sock; pfd[0].events = POLLIN; r = poll(pfd, 1, 10000); if (r < 0) { if (errno == EINTR) continue; goto err; } else if (r == 0) { err(udev, "timeout waiting for ctrl message\n"); goto err; } else { if (!(pfd[0].revents & POLLIN)) { err(udev, "ctrl connection error: %m\n"); goto err; } } break; } iov.iov_base = &uctrl_msg->ctrl_msg_wire; iov.iov_len = sizeof(struct udev_ctrl_msg_wire); memset(&smsg, 0x00, sizeof(struct msghdr)); smsg.msg_iov = &iov; smsg.msg_iovlen = 1; smsg.msg_control = cred_msg; smsg.msg_controllen = sizeof(cred_msg); size = recvmsg(conn->sock, &smsg, 0); if (size < 0) { err(udev, "unable to receive ctrl message: %m\n"); goto err; } cmsg = CMSG_FIRSTHDR(&smsg); cred = (struct ucred *) CMSG_DATA(cmsg); if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) { err(udev, "no sender credentials received, message ignored\n"); goto err; } if (cred->uid != 0) { err(udev, "sender uid=%i, message ignored\n", cred->uid); goto err; } if (uctrl_msg->ctrl_msg_wire.magic != UDEV_CTRL_MAGIC) { err(udev, "message magic 0x%08x doesn't match, ignore it\n", uctrl_msg->ctrl_msg_wire.magic); goto err; } dbg(udev, "created ctrl_msg %p (%i)\n", uctrl_msg, uctrl_msg->ctrl_msg_wire.type); return uctrl_msg; err: udev_ctrl_msg_unref(uctrl_msg); return NULL; } struct udev_ctrl_msg *udev_ctrl_msg_ref(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg == NULL) return NULL; ctrl_msg->refcount++; return ctrl_msg; } struct udev_ctrl_msg *udev_ctrl_msg_unref(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg == NULL) return NULL; ctrl_msg->refcount--; if (ctrl_msg->refcount > 0) return ctrl_msg; dbg(ctrl_msg->conn->uctrl->udev, "release ctrl_msg %p\n", ctrl_msg); udev_ctrl_connection_unref(ctrl_msg->conn); free(ctrl_msg); return NULL; } int udev_ctrl_get_set_log_level(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_SET_LOG_LEVEL) return ctrl_msg->ctrl_msg_wire.intval; return -1; } int udev_ctrl_get_stop_exec_queue(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_STOP_EXEC_QUEUE) return 1; return -1; } int udev_ctrl_get_start_exec_queue(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_START_EXEC_QUEUE) return 1; return -1; } int udev_ctrl_get_reload(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_RELOAD) return 1; return -1; } const char *udev_ctrl_get_set_env(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_SET_ENV) return ctrl_msg->ctrl_msg_wire.buf; return NULL; } int udev_ctrl_get_set_children_max(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_SET_CHILDREN_MAX) return ctrl_msg->ctrl_msg_wire.intval; return -1; } int udev_ctrl_get_ping(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_PING) return 1; return -1; } int udev_ctrl_get_exit(struct udev_ctrl_msg *ctrl_msg) { if (ctrl_msg->ctrl_msg_wire.type == UDEV_CTRL_EXIT) return 1; return -1; } udev-182/src/PaxHeaders.12492/udev-builtin-blkid.c0000644000521600052160000000013211711107662020012 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083326.912104696 30 ctime=1332097353.286438927 udev-182/src/udev-builtin-blkid.c0000664000521600052160000001543511711107662016426 0ustar00kaykay00000000000000/* * probe disks for filesystems and partitions * * Copyright (C) 2011 Kay Sievers * Copyright (C) 2011 Karel Zak * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "udev.h" static void print_property(struct udev_device *dev, bool test, const char *name, const char *value) { char s[265]; s[0] = '\0'; if (!strcmp(name, "TYPE")) { udev_builtin_add_property(dev, test, "ID_FS_TYPE", value); } else if (!strcmp(name, "USAGE")) { udev_builtin_add_property(dev, test, "ID_FS_USAGE", value); } else if (!strcmp(name, "VERSION")) { udev_builtin_add_property(dev, test, "ID_FS_VERSION", value); } else if (!strcmp(name, "UUID")) { blkid_safe_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_UUID", s); blkid_encode_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_UUID_ENC", s); } else if (!strcmp(name, "UUID_SUB")) { blkid_safe_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_UUID_SUB", s); blkid_encode_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_UUID_SUB_ENC", s); } else if (!strcmp(name, "LABEL")) { blkid_safe_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_LABEL", s); blkid_encode_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_FS_LABEL_ENC", s); } else if (!strcmp(name, "PTTYPE")) { udev_builtin_add_property(dev, test, "ID_PART_TABLE_TYPE", value); } else if (!strcmp(name, "PART_ENTRY_NAME")) { blkid_encode_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_PART_ENTRY_NAME", s); } else if (!strcmp(name, "PART_ENTRY_TYPE")) { blkid_encode_string(value, s, sizeof(s)); udev_builtin_add_property(dev, test, "ID_PART_ENTRY_TYPE", s); } else if (!strncmp(name, "PART_ENTRY_", 11)) { util_strscpyl(s, sizeof(s), "ID_", name, NULL); udev_builtin_add_property(dev, test, s, value); } } static int probe_superblocks(blkid_probe pr) { struct stat st; int rc; if (fstat(blkid_probe_get_fd(pr), &st)) return -1; blkid_probe_enable_partitions(pr, 1); if (!S_ISCHR(st.st_mode) && blkid_probe_get_size(pr) <= 1024 * 1440 && blkid_probe_is_wholedisk(pr)) { /* * check if the small disk is partitioned, if yes then * don't probe for filesystems. */ blkid_probe_enable_superblocks(pr, 0); rc = blkid_do_fullprobe(pr); if (rc < 0) return rc; /* -1 = error, 1 = nothing, 0 = succes */ if (blkid_probe_lookup_value(pr, "PTTYPE", NULL, NULL) == 0) return 0; /* partition table detected */ } blkid_probe_set_partitions_flags(pr, BLKID_PARTS_ENTRY_DETAILS); blkid_probe_enable_superblocks(pr, 1); return blkid_do_safeprobe(pr); } static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev *udev = udev_device_get_udev(dev); int64_t offset = 0; bool noraid = false; int fd = -1; blkid_probe pr; const char *data; const char *name; int nvals; int i; size_t len; int err = 0; static const struct option options[] = { { "offset", optional_argument, NULL, 'o' }, { "noraid", no_argument, NULL, 'R' }, {} }; for (;;) { int option; option = getopt_long(argc, argv, "oR", options, NULL); if (option == -1) break; switch (option) { case 'o': offset = strtoull(optarg, NULL, 0); break; case 'R': noraid = true; break; } } pr = blkid_new_probe(); if (!pr) { err = -ENOMEM; return EXIT_FAILURE; } blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE | BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION); if (noraid) blkid_probe_filter_superblocks_usage(pr, BLKID_FLTR_NOTIN, BLKID_USAGE_RAID); fd = open(udev_device_get_devnode(dev), O_RDONLY|O_CLOEXEC); if (fd < 0) { fprintf(stderr, "error: %s: %m\n", udev_device_get_devnode(dev)); goto out; } err = blkid_probe_set_device(pr, fd, offset, 0); if (err < 0) goto out; info(udev, "probe %s %sraid offset=%llu\n", udev_device_get_devnode(dev), noraid ? "no" : "", (unsigned long long) offset); err = probe_superblocks(pr); if (err < 0) goto out; nvals = blkid_probe_numof_values(pr); for (i = 0; i < nvals; i++) { if (blkid_probe_get_value(pr, i, &name, &data, &len)) continue; len = strnlen((char *) data, len); print_property(dev, test, name, (char *) data); } blkid_free_probe(pr); out: if (fd > 0) close(fd); if (err < 0) return EXIT_FAILURE; return EXIT_SUCCESS; } const struct udev_builtin udev_builtin_blkid = { .name = "blkid", .cmd = builtin_blkid, .help = "filesystem and partition probing", .run_once = true, }; udev-182/src/PaxHeaders.12492/libudev-device.c0000644000521600052160000000013211711107662017207 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083323.017104604 30 ctime=1332097353.013438919 udev-182/src/libudev-device.c0000664000521600052160000016751211711107662015627 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-device * @short_description: kernel sys devices * * Representation of kernel sys devices. Devices are uniquely identified * by their syspath, every device has exactly one path in the kernel sys * filesystem. Devices usually belong to a kernel subsystem, and and have * a unique name inside that subsystem. */ /** * udev_device: * * Opaque object representing one kernel sys device. */ struct udev_device { struct udev *udev; struct udev_device *parent_device; char *syspath; const char *devpath; char *sysname; const char *sysnum; char *devnode; mode_t devnode_mode; char *subsystem; char *devtype; char *driver; char *action; char *devpath_old; char *id_filename; char **envp; char *monitor_buf; size_t monitor_buf_len; struct udev_list devlinks_list; struct udev_list properties_list; struct udev_list sysattr_value_list; struct udev_list sysattr_list; struct udev_list tags_list; unsigned long long int seqnum; unsigned long long int usec_initialized; int devlink_priority; int refcount; dev_t devnum; int ifindex; int watch_handle; int maj, min; bool parent_set; bool subsystem_set; bool devtype_set; bool devlinks_uptodate; bool envp_uptodate; bool tags_uptodate; bool driver_set; bool info_loaded; bool db_loaded; bool uevent_loaded; bool is_initialized; bool sysattr_list_read; bool db_persist; }; /** * udev_device_get_seqnum: * @udev_device: udev device * * This is only valid if the device was received through a monitor. Devices read from * sys do not have a sequence number. * * Returns: the kernel event sequence number, or 0 if there is no sequence number available. **/ UDEV_EXPORT unsigned long long int udev_device_get_seqnum(struct udev_device *udev_device) { if (udev_device == NULL) return 0; return udev_device->seqnum; } static int udev_device_set_seqnum(struct udev_device *udev_device, unsigned long long int seqnum) { char num[32]; udev_device->seqnum = seqnum; snprintf(num, sizeof(num), "%llu", seqnum); udev_device_add_property(udev_device, "SEQNUM", num); return 0; } int udev_device_get_ifindex(struct udev_device *udev_device) { if (!udev_device->info_loaded) udev_device_read_uevent_file(udev_device); return udev_device->ifindex; } static int udev_device_set_ifindex(struct udev_device *udev_device, int ifindex) { char num[32]; udev_device->ifindex = ifindex; snprintf(num, sizeof(num), "%u", ifindex); udev_device_add_property(udev_device, "IFINDEX", num); return 0; } /** * udev_device_get_devnum: * @udev_device: udev device * * Returns: the device major/minor number. **/ UDEV_EXPORT dev_t udev_device_get_devnum(struct udev_device *udev_device) { if (udev_device == NULL) return makedev(0, 0); if (!udev_device->info_loaded) udev_device_read_uevent_file(udev_device); return udev_device->devnum; } static int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum) { char num[32]; udev_device->devnum = devnum; snprintf(num, sizeof(num), "%u", major(devnum)); udev_device_add_property(udev_device, "MAJOR", num); snprintf(num, sizeof(num), "%u", minor(devnum)); udev_device_add_property(udev_device, "MINOR", num); return 0; } const char *udev_device_get_devpath_old(struct udev_device *udev_device) { return udev_device->devpath_old; } static int udev_device_set_devpath_old(struct udev_device *udev_device, const char *devpath_old) { const char *pos; free(udev_device->devpath_old); udev_device->devpath_old = strdup(devpath_old); if (udev_device->devpath_old == NULL) return -ENOMEM; udev_device_add_property(udev_device, "DEVPATH_OLD", udev_device->devpath_old); pos = strrchr(udev_device->devpath_old, '/'); if (pos == NULL) return -EINVAL; return 0; } /** * udev_device_get_driver: * @udev_device: udev device * * Returns: the driver string, or #NULL if there is no driver attached. **/ UDEV_EXPORT const char *udev_device_get_driver(struct udev_device *udev_device) { char driver[UTIL_NAME_SIZE]; if (udev_device == NULL) return NULL; if (!udev_device->driver_set) { udev_device->driver_set = true; if (util_get_sys_core_link_value(udev_device->udev, "driver", udev_device->syspath, driver, sizeof(driver)) > 0) udev_device->driver = strdup(driver); } return udev_device->driver; } static int udev_device_set_driver(struct udev_device *udev_device, const char *driver) { free(udev_device->driver); udev_device->driver = strdup(driver); if (udev_device->driver == NULL) return -ENOMEM; udev_device->driver_set = true; udev_device_add_property(udev_device, "DRIVER", udev_device->driver); return 0; } /** * udev_device_get_devtype: * @udev_device: udev device * * Retrieve the devtype string of the udev device. * * Returns: the devtype name of the udev device, or #NULL if it can not be determined **/ UDEV_EXPORT const char *udev_device_get_devtype(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (!udev_device->devtype_set) { udev_device->devtype_set = true; udev_device_read_uevent_file(udev_device); } return udev_device->devtype; } static int udev_device_set_devtype(struct udev_device *udev_device, const char *devtype) { free(udev_device->devtype); udev_device->devtype = strdup(devtype); if (udev_device->devtype == NULL) return -ENOMEM; udev_device->devtype_set = true; udev_device_add_property(udev_device, "DEVTYPE", udev_device->devtype); return 0; } static int udev_device_set_subsystem(struct udev_device *udev_device, const char *subsystem) { free(udev_device->subsystem); udev_device->subsystem = strdup(subsystem); if (udev_device->subsystem == NULL) return -ENOMEM; udev_device->subsystem_set = true; udev_device_add_property(udev_device, "SUBSYSTEM", udev_device->subsystem); return 0; } /** * udev_device_get_subsystem: * @udev_device: udev device * * Retrieve the subsystem string of the udev device. The string does not * contain any "/". * * Returns: the subsystem name of the udev device, or #NULL if it can not be determined **/ UDEV_EXPORT const char *udev_device_get_subsystem(struct udev_device *udev_device) { char subsystem[UTIL_NAME_SIZE]; if (udev_device == NULL) return NULL; if (!udev_device->subsystem_set) { udev_device->subsystem_set = true; /* read "subsystem" link */ if (util_get_sys_core_link_value(udev_device->udev, "subsystem", udev_device->syspath, subsystem, sizeof(subsystem)) > 0) { udev_device_set_subsystem(udev_device, subsystem); return udev_device->subsystem; } /* implicit names */ if (strncmp(udev_device->devpath, "/module/", 8) == 0) { udev_device_set_subsystem(udev_device, "module"); return udev_device->subsystem; } if (strstr(udev_device->devpath, "/drivers/") != NULL) { udev_device_set_subsystem(udev_device, "drivers"); return udev_device->subsystem; } if (strncmp(udev_device->devpath, "/subsystem/", 11) == 0 || strncmp(udev_device->devpath, "/class/", 7) == 0 || strncmp(udev_device->devpath, "/bus/", 5) == 0) { udev_device_set_subsystem(udev_device, "subsystem"); return udev_device->subsystem; } } return udev_device->subsystem; } mode_t udev_device_get_devnode_mode(struct udev_device *udev_device) { if (!udev_device->info_loaded) udev_device_read_uevent_file(udev_device); return udev_device->devnode_mode; } static int udev_device_set_devnode_mode(struct udev_device *udev_device, mode_t mode) { char num[32]; udev_device->devnode_mode = mode; snprintf(num, sizeof(num), "%#o", mode); udev_device_add_property(udev_device, "DEVMODE", num); return 0; } struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value) { udev_device->envp_uptodate = false; if (value == NULL) { struct udev_list_entry *list_entry; list_entry = udev_device_get_properties_list_entry(udev_device); list_entry = udev_list_entry_get_by_name(list_entry, key); if (list_entry != NULL) udev_list_entry_delete(list_entry); return NULL; } return udev_list_entry_add(&udev_device->properties_list, key, value); } static struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property) { char name[UTIL_LINE_SIZE]; char *val; util_strscpy(name, sizeof(name), property); val = strchr(name, '='); if (val == NULL) return NULL; val[0] = '\0'; val = &val[1]; if (val[0] == '\0') val = NULL; return udev_device_add_property(udev_device, name, val); } /* * parse property string, and if needed, update internal values accordingly * * udev_device_add_property_from_string_parse_finish() needs to be * called after adding properties, and its return value checked * * udev_device_set_info_loaded() needs to be set, to avoid trying * to use a device without a DEVPATH set */ void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property) { if (strncmp(property, "DEVPATH=", 8) == 0) { char path[UTIL_PATH_SIZE]; util_strscpyl(path, sizeof(path), udev_get_sys_path(udev_device->udev), &property[8], NULL); udev_device_set_syspath(udev_device, path); } else if (strncmp(property, "SUBSYSTEM=", 10) == 0) { udev_device_set_subsystem(udev_device, &property[10]); } else if (strncmp(property, "DEVTYPE=", 8) == 0) { udev_device_set_devtype(udev_device, &property[8]); } else if (strncmp(property, "DEVNAME=", 8) == 0) { udev_device_set_devnode(udev_device, &property[8]); } else if (strncmp(property, "DEVLINKS=", 9) == 0) { char devlinks[UTIL_PATH_SIZE]; char *slink; char *next; util_strscpy(devlinks, sizeof(devlinks), &property[9]); slink = devlinks; next = strchr(slink, ' '); while (next != NULL) { next[0] = '\0'; udev_device_add_devlink(udev_device, slink, 0); slink = &next[1]; next = strchr(slink, ' '); } if (slink[0] != '\0') udev_device_add_devlink(udev_device, slink, 0); } else if (strncmp(property, "TAGS=", 5) == 0) { char tags[UTIL_PATH_SIZE]; char *next; util_strscpy(tags, sizeof(tags), &property[5]); next = strchr(tags, ':'); if (next != NULL) { next++; while (next[0] != '\0') { char *tag; tag = next; next = strchr(tag, ':'); if (next == NULL) break; next[0] = '\0'; next++; udev_device_add_tag(udev_device, tag); } } } else if (strncmp(property, "USEC_INITIALIZED=", 19) == 0) { udev_device_set_usec_initialized(udev_device, strtoull(&property[19], NULL, 10)); } else if (strncmp(property, "DRIVER=", 7) == 0) { udev_device_set_driver(udev_device, &property[7]); } else if (strncmp(property, "ACTION=", 7) == 0) { udev_device_set_action(udev_device, &property[7]); } else if (strncmp(property, "MAJOR=", 6) == 0) { udev_device->maj = strtoull(&property[6], NULL, 10); } else if (strncmp(property, "MINOR=", 6) == 0) { udev_device->min = strtoull(&property[6], NULL, 10); } else if (strncmp(property, "DEVPATH_OLD=", 12) == 0) { udev_device_set_devpath_old(udev_device, &property[12]); } else if (strncmp(property, "SEQNUM=", 7) == 0) { udev_device_set_seqnum(udev_device, strtoull(&property[7], NULL, 10)); } else if (strncmp(property, "IFINDEX=", 8) == 0) { udev_device_set_ifindex(udev_device, strtoull(&property[8], NULL, 10)); } else if (strncmp(property, "DEVMODE=", 8) == 0) { udev_device_set_devnode_mode(udev_device, strtoul(&property[8], NULL, 8)); } else { udev_device_add_property_from_string(udev_device, property); } } int udev_device_add_property_from_string_parse_finish(struct udev_device *udev_device) { if (udev_device->maj > 0) udev_device_set_devnum(udev_device, makedev(udev_device->maj, udev_device->min)); udev_device->maj = 0; udev_device->min = 0; if (udev_device->devpath == NULL || udev_device->subsystem == NULL) return -EINVAL; return 0; } /** * udev_device_get_property_value: * @udev_device: udev device * @key: property name * * Returns: the value of a device property, or #NULL if there is no such property. **/ UDEV_EXPORT const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key) { struct udev_list_entry *list_entry; if (udev_device == NULL) return NULL; if (key == NULL) return NULL; list_entry = udev_device_get_properties_list_entry(udev_device); list_entry = udev_list_entry_get_by_name(list_entry, key); return udev_list_entry_get_value(list_entry); } int udev_device_read_db(struct udev_device *udev_device, const char *dbfile) { char filename[UTIL_PATH_SIZE]; char line[UTIL_LINE_SIZE]; FILE *f; /* providing a database file will always force-load it */ if (dbfile == NULL) { const char *id; if (udev_device->db_loaded) return 0; udev_device->db_loaded = true; id = udev_device_get_id_filename(udev_device); if (id == NULL) return -1; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev_device->udev), "/data/", id, NULL); dbfile = filename; } f = fopen(dbfile, "re"); if (f == NULL) { info(udev_device->udev, "no db file to read %s: %m\n", dbfile); return -1; } udev_device->is_initialized = true; while (fgets(line, sizeof(line), f)) { ssize_t len; const char *val; struct udev_list_entry *entry; len = strlen(line); if (len < 4) break; line[len-1] = '\0'; val = &line[2]; switch(line[0]) { case 'S': util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev_device->udev), "/", val, NULL); udev_device_add_devlink(udev_device, filename, 0); break; case 'L': udev_device_set_devlink_priority(udev_device, atoi(val)); break; case 'E': entry = udev_device_add_property_from_string(udev_device, val); udev_list_entry_set_num(entry, true); break; case 'G': udev_device_add_tag(udev_device, val); break; case 'W': udev_device_set_watch_handle(udev_device, atoi(val)); break; case 'I': udev_device_set_usec_initialized(udev_device, strtoull(val, NULL, 10)); break; } } fclose(f); info(udev_device->udev, "device %p filled with db file data\n", udev_device); return 0; } int udev_device_read_uevent_file(struct udev_device *udev_device) { char filename[UTIL_PATH_SIZE]; FILE *f; char line[UTIL_LINE_SIZE]; int maj = 0; int min = 0; if (udev_device->uevent_loaded) return 0; util_strscpyl(filename, sizeof(filename), udev_device->syspath, "/uevent", NULL); f = fopen(filename, "re"); if (f == NULL) return -1; udev_device->uevent_loaded = true; while (fgets(line, sizeof(line), f)) { char *pos; pos = strchr(line, '\n'); if (pos == NULL) continue; pos[0] = '\0'; if (strncmp(line, "DEVTYPE=", 8) == 0) { udev_device_set_devtype(udev_device, &line[8]); continue; } if (strncmp(line, "IFINDEX=", 8) == 0) { udev_device_set_ifindex(udev_device, strtoull(&line[8], NULL, 10)); continue; } if (strncmp(line, "DEVNAME=", 8) == 0) { udev_device_set_devnode(udev_device, &line[8]); continue; } if (strncmp(line, "MAJOR=", 6) == 0) maj = strtoull(&line[6], NULL, 10); else if (strncmp(line, "MINOR=", 6) == 0) min = strtoull(&line[6], NULL, 10); else if (strncmp(line, "DEVMODE=", 8) == 0) udev_device->devnode_mode = strtoul(&line[8], NULL, 8); udev_device_add_property_from_string(udev_device, line); } udev_device->devnum = makedev(maj, min); fclose(f); return 0; } void udev_device_set_info_loaded(struct udev_device *device) { device->info_loaded = true; } struct udev_device *udev_device_new(struct udev *udev) { struct udev_device *udev_device; struct udev_list_entry *list_entry; if (udev == NULL) return NULL; udev_device = calloc(1, sizeof(struct udev_device)); if (udev_device == NULL) return NULL; udev_device->refcount = 1; udev_device->udev = udev; udev_list_init(udev, &udev_device->devlinks_list, true); udev_list_init(udev, &udev_device->properties_list, true); udev_list_init(udev, &udev_device->sysattr_value_list, true); udev_list_init(udev, &udev_device->sysattr_list, false); udev_list_init(udev, &udev_device->tags_list, true); udev_device->watch_handle = -1; /* copy global properties */ udev_list_entry_foreach(list_entry, udev_get_properties_list_entry(udev)) udev_device_add_property(udev_device, udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); dbg(udev_device->udev, "udev_device: %p created\n", udev_device); return udev_device; } /** * udev_device_new_from_syspath: * @udev: udev library context * @syspath: sys device path including sys directory * * Create new udev device, and fill in information from the sys * device and the udev database entry. The syspath is the absolute * path to the device, including the sys mount point. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev device. * * Returns: a new udev device, or #NULL, if it does not exist **/ UDEV_EXPORT struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath) { size_t len; const char *subdir; char path[UTIL_PATH_SIZE]; char *pos; struct stat statbuf; struct udev_device *udev_device; if (udev == NULL) return NULL; if (syspath == NULL) return NULL; /* path starts in sys */ len = strlen(udev_get_sys_path(udev)); if (strncmp(syspath, udev_get_sys_path(udev), len) != 0) { info(udev, "not in sys :%s\n", syspath); return NULL; } /* path is not a root directory */ subdir = &syspath[len+1]; pos = strrchr(subdir, '/'); if (pos == NULL || pos[1] == '\0' || pos < &subdir[2]) { dbg(udev, "not a subdir :%s\n", syspath); return NULL; } /* resolve possible symlink to real path */ util_strscpy(path, sizeof(path), syspath); util_resolve_sys_link(udev, path, sizeof(path)); if (strncmp(&path[len], "/devices/", 9) == 0) { char file[UTIL_PATH_SIZE]; /* all "devices" require a "uevent" file */ util_strscpyl(file, sizeof(file), path, "/uevent", NULL); if (stat(file, &statbuf) != 0) { dbg(udev, "not a device: %s\n", syspath); return NULL; } } else { /* everything else just needs to be a directory */ if (stat(path, &statbuf) != 0 || !S_ISDIR(statbuf.st_mode)) { dbg(udev, "directory not found: %s\n", syspath); return NULL; } } udev_device = udev_device_new(udev); if (udev_device == NULL) return NULL; udev_device_set_syspath(udev_device, path); info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device)); return udev_device; } /** * udev_device_new_from_devnum: * @udev: udev library context * @type: char or block device * @devnum: device major/minor number * * Create new udev device, and fill in information from the sys * device and the udev database entry. The device is looked-up * by its major/minor number and type. Character and block device * numbers are not unique across the two types. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev device. * * Returns: a new udev device, or #NULL, if it does not exist **/ UDEV_EXPORT struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum) { char path[UTIL_PATH_SIZE]; const char *type_str; if (type == 'b') type_str = "block"; else if (type == 'c') type_str = "char"; else return NULL; /* use /sys/dev/{block,char}/: link */ snprintf(path, sizeof(path), "%s/dev/%s/%u:%u", udev_get_sys_path(udev), type_str, major(devnum), minor(devnum)); return udev_device_new_from_syspath(udev, path); } struct udev_device *udev_device_new_from_id_filename(struct udev *udev, char *id) { char type; int maj, min; char subsys[UTIL_PATH_SIZE]; char *sysname; switch(id[0]) { case 'b': case 'c': if (sscanf(id, "%c%i:%i", &type, &maj, &min) != 3) return NULL; return udev_device_new_from_devnum(udev, type, makedev(maj, min)); case 'n': { int sk; struct ifreq ifr; struct udev_device *dev; int ifindex; ifindex = strtoul(&id[1], NULL, 10); if (ifindex <= 0) return NULL; sk = socket(PF_INET, SOCK_DGRAM, 0); if (sk < 0) return NULL; memset(&ifr, 0x00, sizeof(struct ifreq)); ifr.ifr_ifindex = ifindex; if (ioctl(sk, SIOCGIFNAME, &ifr) != 0) { close(sk); return NULL; } close(sk); dev = udev_device_new_from_subsystem_sysname(udev, "net", ifr.ifr_name); if (dev == NULL) return NULL; if (udev_device_get_ifindex(dev) == ifindex) return dev; udev_device_unref(dev); return NULL; } case '+': util_strscpy(subsys, sizeof(subsys), &id[1]); sysname = strchr(subsys, ':'); if (sysname == NULL) return NULL; sysname[0] = '\0'; sysname = &sysname[1]; return udev_device_new_from_subsystem_sysname(udev, subsys, sysname); default: return NULL; } } /** * udev_device_new_from_subsystem_sysname: * @udev: udev library context * @subsystem: the subsystem of the device * @sysname: the name of the device * * Create new udev device, and fill in information from the sys device * and the udev database entry. The device is looked up by the subsystem * and name string of the device, like "mem" / "zero", or "block" / "sda". * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev device. * * Returns: a new udev device, or #NULL, if it does not exist **/ UDEV_EXPORT struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname) { char path_full[UTIL_PATH_SIZE]; char *path; size_t l; struct stat statbuf; path = path_full; l = util_strpcpyl(&path, sizeof(path_full), udev_get_sys_path(udev), NULL); if (strcmp(subsystem, "subsystem") == 0) { util_strscpyl(path, l, "/subsystem/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; util_strscpyl(path, l, "/bus/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; util_strscpyl(path, l, "/class/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; goto out; } if (strcmp(subsystem, "module") == 0) { util_strscpyl(path, l, "/module/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; goto out; } if (strcmp(subsystem, "drivers") == 0) { char subsys[UTIL_NAME_SIZE]; char *driver; util_strscpy(subsys, sizeof(subsys), sysname); driver = strchr(subsys, ':'); if (driver != NULL) { driver[0] = '\0'; driver = &driver[1]; util_strscpyl(path, l, "/subsystem/", subsys, "/drivers/", driver, NULL); if (stat(path_full, &statbuf) == 0) goto found; util_strscpyl(path, l, "/bus/", subsys, "/drivers/", driver, NULL); if (stat(path_full, &statbuf) == 0) goto found; } goto out; } util_strscpyl(path, l, "/subsystem/", subsystem, "/devices/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; util_strscpyl(path, l, "/bus/", subsystem, "/devices/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; util_strscpyl(path, l, "/class/", subsystem, "/", sysname, NULL); if (stat(path_full, &statbuf) == 0) goto found; out: return NULL; found: return udev_device_new_from_syspath(udev, path_full); } /** * udev_device_new_from_environment * @udev: udev library context * * Create new udev device, and fill in information from the * current process environment. This only works reliable if * the process is called from a udev rule. It is usually used * for tools executed from IMPORT= rules. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev device. * * Returns: a new udev device, or #NULL, if it does not exist **/ UDEV_EXPORT struct udev_device *udev_device_new_from_environment(struct udev *udev) { int i; struct udev_device *udev_device; udev_device = udev_device_new(udev); if (udev_device == NULL) return NULL; udev_device_set_info_loaded(udev_device); for (i = 0; environ[i] != NULL; i++) udev_device_add_property_from_string_parse(udev_device, environ[i]); if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) { info(udev, "missing values, invalid device\n"); udev_device_unref(udev_device); udev_device = NULL; } return udev_device; } static struct udev_device *device_new_from_parent(struct udev_device *udev_device) { struct udev_device *udev_device_parent = NULL; char path[UTIL_PATH_SIZE]; const char *subdir; util_strscpy(path, sizeof(path), udev_device->syspath); subdir = &path[strlen(udev_get_sys_path(udev_device->udev))+1]; for (;;) { char *pos; pos = strrchr(subdir, '/'); if (pos == NULL || pos < &subdir[2]) break; pos[0] = '\0'; udev_device_parent = udev_device_new_from_syspath(udev_device->udev, path); if (udev_device_parent != NULL) return udev_device_parent; } return NULL; } /** * udev_device_get_parent: * @udev_device: the device to start searching from * * Find the next parent device, and fill in information from the sys * device and the udev database entry. * * The returned the device is not referenced. It is attached to the * child device, and will be cleaned up when the child device * is cleaned up. * * It is not necessarily just the upper level directory, empty or not * recognized sys directories are ignored. * * It can be called as many times as needed, without caring about * references. * * Returns: a new udev device, or #NULL, if it no parent exist. **/ UDEV_EXPORT struct udev_device *udev_device_get_parent(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (!udev_device->parent_set) { udev_device->parent_set = true; udev_device->parent_device = device_new_from_parent(udev_device); } if (udev_device->parent_device != NULL) dbg(udev_device->udev, "returning existing parent %p\n", udev_device->parent_device); return udev_device->parent_device; } /** * udev_device_get_parent_with_subsystem_devtype: * @udev_device: udev device to start searching from * @subsystem: the subsystem of the device * @devtype: the type (DEVTYPE) of the device * * Find the next parent device, with a matching subsystem and devtype * value, and fill in information from the sys device and the udev * database entry. * * If devtype is #NULL, only subsystem is checked, and any devtype will * match. * * The returned the device is not referenced. It is attached to the * child device, and will be cleaned up when the child device * is cleaned up. * * It can be called as many times as needed, without caring about * references. * * Returns: a new udev device, or #NULL if no matching parent exists. **/ UDEV_EXPORT struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, const char *subsystem, const char *devtype) { struct udev_device *parent; if (subsystem == NULL) return NULL; parent = udev_device_get_parent(udev_device); while (parent != NULL) { const char *parent_subsystem; const char *parent_devtype; parent_subsystem = udev_device_get_subsystem(parent); if (parent_subsystem != NULL && strcmp(parent_subsystem, subsystem) == 0) { if (devtype == NULL) break; parent_devtype = udev_device_get_devtype(parent); if (parent_devtype != NULL && strcmp(parent_devtype, devtype) == 0) break; } parent = udev_device_get_parent(parent); } return parent; } /** * udev_device_get_udev: * @udev_device: udev device * * Retrieve the udev library context the device was created with. * * Returns: the udev library context **/ UDEV_EXPORT struct udev *udev_device_get_udev(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->udev; } /** * udev_device_ref: * @udev_device: udev device * * Take a reference of a udev device. * * Returns: the passed udev device **/ UDEV_EXPORT struct udev_device *udev_device_ref(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; udev_device->refcount++; return udev_device; } /** * udev_device_unref: * @udev_device: udev device * * Drop a reference of a udev device. If the refcount reaches zero, * the resources of the device will be released. * **/ UDEV_EXPORT void udev_device_unref(struct udev_device *udev_device) { if (udev_device == NULL) return; udev_device->refcount--; if (udev_device->refcount > 0) return; if (udev_device->parent_device != NULL) udev_device_unref(udev_device->parent_device); free(udev_device->syspath); free(udev_device->sysname); free(udev_device->devnode); free(udev_device->subsystem); free(udev_device->devtype); udev_list_cleanup(&udev_device->devlinks_list); udev_list_cleanup(&udev_device->properties_list); udev_list_cleanup(&udev_device->sysattr_value_list); udev_list_cleanup(&udev_device->sysattr_list); udev_list_cleanup(&udev_device->tags_list); free(udev_device->action); free(udev_device->driver); free(udev_device->devpath_old); free(udev_device->id_filename); free(udev_device->envp); free(udev_device->monitor_buf); dbg(udev_device->udev, "udev_device: %p released\n", udev_device); free(udev_device); } /** * udev_device_get_devpath: * @udev_device: udev device * * Retrieve the kernel devpath value of the udev device. The path * does not contain the sys mount point, and starts with a '/'. * * Returns: the devpath of the udev device **/ UDEV_EXPORT const char *udev_device_get_devpath(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->devpath; } /** * udev_device_get_syspath: * @udev_device: udev device * * Retrieve the sys path of the udev device. The path is an * absolute path and starts with the sys mount point. * * Returns: the sys path of the udev device **/ UDEV_EXPORT const char *udev_device_get_syspath(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->syspath; } /** * udev_device_get_sysname: * @udev_device: udev device * * Returns: the sys name of the device device **/ UDEV_EXPORT const char *udev_device_get_sysname(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->sysname; } /** * udev_device_get_sysnum: * @udev_device: udev device * * Returns: the trailing number of of the device name **/ UDEV_EXPORT const char *udev_device_get_sysnum(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->sysnum; } /** * udev_device_get_devnode: * @udev_device: udev device * * Retrieve the device node file name belonging to the udev device. * The path is an absolute path, and starts with the device directory. * * Returns: the device node file name of the udev device, or #NULL if no device node exists **/ UDEV_EXPORT const char *udev_device_get_devnode(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (udev_device->devnode != NULL) return udev_device->devnode; if (!udev_device->info_loaded) udev_device_read_uevent_file(udev_device); return udev_device->devnode; } /** * udev_device_get_devlinks_list_entry: * @udev_device: udev device * * Retrieve the list of device links pointing to the device file of * the udev device. The next list entry can be retrieved with * udev_list_entry_next(), which returns #NULL if no more entries exist. * The devlink path can be retrieved from the list entry by * udev_list_entry_get_name(). The path is an absolute path, and starts with * the device directory. * * Returns: the first entry of the device node link list **/ UDEV_EXPORT struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); return udev_list_get_entry(&udev_device->devlinks_list); } void udev_device_cleanup_devlinks_list(struct udev_device *udev_device) { udev_device->devlinks_uptodate = false; udev_list_cleanup(&udev_device->devlinks_list); } /** * udev_device_get_properties_list_entry: * @udev_device: udev device * * Retrieve the list of key/value device properties of the udev * device. The next list entry can be retrieved with udev_list_entry_next(), * which returns #NULL if no more entries exist. The property name * can be retrieved from the list entry by udev_list_get_name(), * the property value by udev_list_get_value(). * * Returns: the first entry of the property list **/ UDEV_EXPORT struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) { udev_device_read_uevent_file(udev_device); udev_device_read_db(udev_device, NULL); } if (!udev_device->devlinks_uptodate) { char symlinks[UTIL_PATH_SIZE]; struct udev_list_entry *list_entry; udev_device->devlinks_uptodate = true; list_entry = udev_device_get_devlinks_list_entry(udev_device); if (list_entry != NULL) { char *s; size_t l; s = symlinks; l = util_strpcpyl(&s, sizeof(symlinks), udev_list_entry_get_name(list_entry), NULL); udev_list_entry_foreach(list_entry, udev_list_entry_get_next(list_entry)) l = util_strpcpyl(&s, l, " ", udev_list_entry_get_name(list_entry), NULL); udev_device_add_property(udev_device, "DEVLINKS", symlinks); } } if (!udev_device->tags_uptodate) { udev_device->tags_uptodate = true; if (udev_device_get_tags_list_entry(udev_device) != NULL) { char tags[UTIL_PATH_SIZE]; struct udev_list_entry *list_entry; char *s; size_t l; s = tags; l = util_strpcpyl(&s, sizeof(tags), ":", NULL); udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(udev_device)) l = util_strpcpyl(&s, l, udev_list_entry_get_name(list_entry), ":", NULL); udev_device_add_property(udev_device, "TAGS", tags); } } return udev_list_get_entry(&udev_device->properties_list); } /** * udev_device_get_action: * @udev_device: udev device * * This is only valid if the device was received through a monitor. Devices read from * sys do not have an action string. Usual actions are: add, remove, change, online, * offline. * * Returns: the kernel action value, or #NULL if there is no action value available. **/ UDEV_EXPORT const char *udev_device_get_action(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->action; } /** * udev_device_get_usec_since_initialized: * @udev_device: udev device * * Return the number of microseconds passed since udev set up the * device for the first time. * * This is only implemented for devices with need to store properties * in the udev database. All other devices return 0 here. * * Returns: the number of microseconds since the device was first seen. **/ UDEV_EXPORT unsigned long long int udev_device_get_usec_since_initialized(struct udev_device *udev_device) { unsigned long long now; if (udev_device == NULL) return 0; if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); if (udev_device->usec_initialized == 0) return 0; now = now_usec(); if (now == 0) return 0; return now - udev_device->usec_initialized; } unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_device) { return udev_device->usec_initialized; } void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized) { char num[32]; udev_device->usec_initialized = usec_initialized; snprintf(num, sizeof(num), "%llu", usec_initialized); udev_device_add_property(udev_device, "USEC_INITIALIZED", num); } /** * udev_device_get_sysattr_value: * @udev_device: udev device * @sysattr: attribute name * * The retrieved value is cached in the device. Repeated calls will return the same * value and not open the attribute again. * * Returns: the content of a sys attribute file, or #NULL if there is no sys attribute value. **/ UDEV_EXPORT const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr) { struct udev_list_entry *list_entry; char path[UTIL_PATH_SIZE]; char value[4096]; struct stat statbuf; int fd; ssize_t size; const char *val = NULL; if (udev_device == NULL) return NULL; if (sysattr == NULL) return NULL; /* look for possibly already cached result */ list_entry = udev_list_get_entry(&udev_device->sysattr_value_list); list_entry = udev_list_entry_get_by_name(list_entry, sysattr); if (list_entry != NULL) { dbg(udev_device->udev, "got '%s' (%s) from cache\n", sysattr, udev_list_entry_get_value(list_entry)); return udev_list_entry_get_value(list_entry); } util_strscpyl(path, sizeof(path), udev_device_get_syspath(udev_device), "/", sysattr, NULL); if (lstat(path, &statbuf) != 0) { dbg(udev_device->udev, "no attribute '%s', keep negative entry\n", path); udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, NULL); goto out; } if (S_ISLNK(statbuf.st_mode)) { struct udev_device *dev; /* * Some core links return only the last element of the target path, * these are just values, the paths should not be exposed. */ if (strcmp(sysattr, "driver") == 0 || strcmp(sysattr, "subsystem") == 0 || strcmp(sysattr, "module") == 0) { if (util_get_sys_core_link_value(udev_device->udev, sysattr, udev_device->syspath, value, sizeof(value)) < 0) return NULL; dbg(udev_device->udev, "cache '%s' with link value '%s'\n", sysattr, value); list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, value); val = udev_list_entry_get_value(list_entry); goto out; } /* resolve link to a device and return its syspath */ util_strscpyl(path, sizeof(path), udev_device->syspath, "/", sysattr, NULL); dev = udev_device_new_from_syspath(udev_device->udev, path); if (dev != NULL) { list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, udev_device_get_syspath(dev)); val = udev_list_entry_get_value(list_entry); udev_device_unref(dev); } goto out; } /* skip directories */ if (S_ISDIR(statbuf.st_mode)) goto out; /* skip non-readable files */ if ((statbuf.st_mode & S_IRUSR) == 0) goto out; /* read attribute value */ fd = open(path, O_RDONLY|O_CLOEXEC); if (fd < 0) { dbg(udev_device->udev, "attribute '%s' can not be opened\n", path); goto out; } size = read(fd, value, sizeof(value)); close(fd); if (size < 0) goto out; if (size == sizeof(value)) goto out; /* got a valid value, store it in cache and return it */ value[size] = '\0'; util_remove_trailing_chars(value, '\n'); dbg(udev_device->udev, "'%s' has attribute value '%s'\n", path, value); list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, value); val = udev_list_entry_get_value(list_entry); out: return val; } static int udev_device_sysattr_list_read(struct udev_device *udev_device) { struct dirent *dent; DIR *dir; int num = 0; if (udev_device == NULL) return -1; if (udev_device->sysattr_list_read) return 0; dir = opendir(udev_device_get_syspath(udev_device)); if (!dir) { dbg(udev_device->udev, "sysfs dir '%s' can not be opened\n", udev_device_get_syspath(udev_device)); return -1; } for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { char path[UTIL_PATH_SIZE]; struct stat statbuf; /* only handle symlinks and regular files */ if (dent->d_type != DT_LNK && dent->d_type != DT_REG) continue; util_strscpyl(path, sizeof(path), udev_device_get_syspath(udev_device), "/", dent->d_name, NULL); if (lstat(path, &statbuf) != 0) continue; if ((statbuf.st_mode & S_IRUSR) == 0) continue; udev_list_entry_add(&udev_device->sysattr_list, dent->d_name, NULL); num++; } closedir(dir); dbg(udev_device->udev, "found %d sysattrs for '%s'\n", num, udev_device_get_syspath(udev_device)); udev_device->sysattr_list_read = true; return num; } /** * udev_device_get_sysattr_list_entry: * @udev_device: udev device * * Retrieve the list of available sysattrs, with value being empty; * This just return all available sysfs attributes for a particular * device without reading their values. * * Returns: the first entry of the property list **/ UDEV_EXPORT struct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device) { if (!udev_device->sysattr_list_read) { int ret; ret = udev_device_sysattr_list_read(udev_device); if (0 > ret) return NULL; } return udev_list_get_entry(&udev_device->sysattr_list); } int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath) { const char *pos; size_t len; free(udev_device->syspath); udev_device->syspath = strdup(syspath); if (udev_device->syspath == NULL) return -ENOMEM; udev_device->devpath = &udev_device->syspath[strlen(udev_get_sys_path(udev_device->udev))]; udev_device_add_property(udev_device, "DEVPATH", udev_device->devpath); pos = strrchr(udev_device->syspath, '/'); if (pos == NULL) return -EINVAL; udev_device->sysname = strdup(&pos[1]); if (udev_device->sysname == NULL) return -ENOMEM; /* some devices have '!' in their name, change that to '/' */ len = 0; while (udev_device->sysname[len] != '\0') { if (udev_device->sysname[len] == '!') udev_device->sysname[len] = '/'; len++; } /* trailing number */ while (len > 0 && isdigit(udev_device->sysname[--len])) udev_device->sysnum = &udev_device->sysname[len]; /* sysname is completely numeric */ if (len == 0) udev_device->sysnum = NULL; return 0; } int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode) { free(udev_device->devnode); if (devnode[0] != '/') { if (asprintf(&udev_device->devnode, "%s/%s", udev_get_dev_path(udev_device->udev), devnode) < 0) udev_device->devnode = NULL; } else { udev_device->devnode = strdup(devnode); } if (udev_device->devnode == NULL) return -ENOMEM; udev_device_add_property(udev_device, "DEVNAME", udev_device->devnode); return 0; } int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique) { struct udev_list_entry *list_entry; udev_device->devlinks_uptodate = false; list_entry = udev_list_entry_add(&udev_device->devlinks_list, devlink, NULL); if (list_entry == NULL) return -ENOMEM; if (unique) udev_list_entry_set_num(list_entry, true); return 0; } const char *udev_device_get_id_filename(struct udev_device *udev_device) { if (udev_device->id_filename == NULL) { if (udev_device_get_subsystem(udev_device) == NULL) return NULL; if (major(udev_device_get_devnum(udev_device)) > 0) { /* use dev_t -- b259:131072, c254:0 */ if (asprintf(&udev_device->id_filename, "%c%u:%u", strcmp(udev_device_get_subsystem(udev_device), "block") == 0 ? 'b' : 'c', major(udev_device_get_devnum(udev_device)), minor(udev_device_get_devnum(udev_device))) < 0) udev_device->id_filename = NULL; } else if (udev_device_get_ifindex(udev_device) > 0) { /* use netdev ifindex -- n3 */ if (asprintf(&udev_device->id_filename, "n%u", udev_device_get_ifindex(udev_device)) < 0) udev_device->id_filename = NULL; } else { /* * use $subsys:$syname -- pci:0000:00:1f.2 * sysname() has '!' translated, get it from devpath */ const char *sysname; sysname = strrchr(udev_device->devpath, '/'); if (sysname == NULL) return NULL; sysname = &sysname[1]; if (asprintf(&udev_device->id_filename, "+%s:%s", udev_device_get_subsystem(udev_device), sysname) < 0) udev_device->id_filename = NULL; } } return udev_device->id_filename; } /** * udev_device_get_is_initialized: * @udev_device: udev device * * Check if udev has already handled the device and has set up * device node permissions and context, or has renamed a network * device. * * This is only implemented for devices with a device node * or network interfaces. All other devices return 1 here. * * Returns: 1 if the device is set up. 0 otherwise. **/ UDEV_EXPORT int udev_device_get_is_initialized(struct udev_device *udev_device) { if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); return udev_device->is_initialized; } void udev_device_set_is_initialized(struct udev_device *udev_device) { udev_device->is_initialized = true; } int udev_device_add_tag(struct udev_device *udev_device, const char *tag) { if (strchr(tag, ':') != NULL || strchr(tag, ' ') != NULL) return -EINVAL; udev_device->tags_uptodate = false; if (udev_list_entry_add(&udev_device->tags_list, tag, NULL) != NULL) return 0; return -ENOMEM; } void udev_device_cleanup_tags_list(struct udev_device *udev_device) { udev_device->tags_uptodate = false; udev_list_cleanup(&udev_device->tags_list); } /** * udev_device_get_tags_list_entry: * @udev_device: udev device * * Retrieve the list of tags attached to the udev device. The next * list entry can be retrieved with udev_list_entry_next(), * which returns #NULL if no more entries exist. The tag string * can be retrieved from the list entry by udev_list_get_name(). * * Returns: the first entry of the tag list **/ UDEV_EXPORT struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); return udev_list_get_entry(&udev_device->tags_list); } UDEV_EXPORT int udev_device_has_tag(struct udev_device *udev_device, const char *tag) { struct udev_list_entry *list_entry; if (udev_device == NULL) return false; if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); list_entry = udev_device_get_tags_list_entry(udev_device); if (udev_list_entry_get_by_name(list_entry, tag) != NULL) return true; return false; } #define ENVP_SIZE 128 #define MONITOR_BUF_SIZE 4096 static int update_envp_monitor_buf(struct udev_device *udev_device) { struct udev_list_entry *list_entry; char *s; size_t l; unsigned int i; /* monitor buffer of property strings */ free(udev_device->monitor_buf); udev_device->monitor_buf_len = 0; udev_device->monitor_buf = malloc(MONITOR_BUF_SIZE); if (udev_device->monitor_buf == NULL) return -ENOMEM; /* envp array, strings will point into monitor buffer */ if (udev_device->envp == NULL) udev_device->envp = malloc(sizeof(char *) * ENVP_SIZE); if (udev_device->envp == NULL) return -ENOMEM; i = 0; s = udev_device->monitor_buf; l = MONITOR_BUF_SIZE; udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) { const char *key; key = udev_list_entry_get_name(list_entry); /* skip private variables */ if (key[0] == '.') continue; /* add string to envp array */ udev_device->envp[i++] = s; if (i+1 >= ENVP_SIZE) return -EINVAL; /* add property string to monitor buffer */ l = util_strpcpyl(&s, l, key, "=", udev_list_entry_get_value(list_entry), NULL); if (l == 0) return -EINVAL; /* advance past the trailing '\0' that util_strpcpyl() guarantees */ s++; l--; } udev_device->envp[i] = NULL; udev_device->monitor_buf_len = s - udev_device->monitor_buf; udev_device->envp_uptodate = true; dbg(udev_device->udev, "filled envp/monitor buffer, %u properties, %zu bytes\n", i, udev_device->monitor_buf_len); return 0; } char **udev_device_get_properties_envp(struct udev_device *udev_device) { if (!udev_device->envp_uptodate) if (update_envp_monitor_buf(udev_device) != 0) return NULL; return udev_device->envp; } ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf) { if (!udev_device->envp_uptodate) if (update_envp_monitor_buf(udev_device) != 0) return -EINVAL; *buf = udev_device->monitor_buf; return udev_device->monitor_buf_len; } int udev_device_set_action(struct udev_device *udev_device, const char *action) { free(udev_device->action); udev_device->action = strdup(action); if (udev_device->action == NULL) return -ENOMEM; udev_device_add_property(udev_device, "ACTION", udev_device->action); return 0; } int udev_device_get_devlink_priority(struct udev_device *udev_device) { if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); return udev_device->devlink_priority; } int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio) { udev_device->devlink_priority = prio; return 0; } int udev_device_get_watch_handle(struct udev_device *udev_device) { if (!udev_device->info_loaded) udev_device_read_db(udev_device, NULL); return udev_device->watch_handle; } int udev_device_set_watch_handle(struct udev_device *udev_device, int handle) { udev_device->watch_handle = handle; return 0; } bool udev_device_get_db_persist(struct udev_device *udev_device) { return udev_device->db_persist; } void udev_device_set_db_persist(struct udev_device *udev_device) { udev_device->db_persist = true; } udev-182/src/PaxHeaders.12492/test-libudev.c0000644000521600052160000000013211711107662016727 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083662.693112698 30 ctime=1332097353.210438925 udev-182/src/test-libudev.c0000664000521600052160000004302511711107662015337 0ustar00kaykay00000000000000/* * test-libudev * * Copyright (C) 2008 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { printf("test-libudev: %s %s:%d ", fn, file, line); vprintf(format, args); } static void print_device(struct udev_device *device) { const char *str; dev_t devnum; int count; struct udev_list_entry *list_entry; printf("*** device: %p ***\n", device); str = udev_device_get_action(device); if (str != NULL) printf("action: '%s'\n", str); str = udev_device_get_syspath(device); printf("syspath: '%s'\n", str); str = udev_device_get_sysname(device); printf("sysname: '%s'\n", str); str = udev_device_get_sysnum(device); if (str != NULL) printf("sysnum: '%s'\n", str); str = udev_device_get_devpath(device); printf("devpath: '%s'\n", str); str = udev_device_get_subsystem(device); if (str != NULL) printf("subsystem: '%s'\n", str); str = udev_device_get_devtype(device); if (str != NULL) printf("devtype: '%s'\n", str); str = udev_device_get_driver(device); if (str != NULL) printf("driver: '%s'\n", str); str = udev_device_get_devnode(device); if (str != NULL) printf("devname: '%s'\n", str); devnum = udev_device_get_devnum(device); if (major(devnum) > 0) printf("devnum: %u:%u\n", major(devnum), minor(devnum)); count = 0; udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(device)) { printf("link: '%s'\n", udev_list_entry_get_name(list_entry)); count++; } if (count > 0) printf("found %i links\n", count); count = 0; udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(device)) { printf("property: '%s=%s'\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); count++; } if (count > 0) printf("found %i properties\n", count); str = udev_device_get_property_value(device, "MAJOR"); if (str != NULL) printf("MAJOR: '%s'\n", str); str = udev_device_get_sysattr_value(device, "dev"); if (str != NULL) printf("attr{dev}: '%s'\n", str); printf("\n"); } static int test_device(struct udev *udev, const char *syspath) { struct udev_device *device; printf("looking at device: %s\n", syspath); device = udev_device_new_from_syspath(udev, syspath); if (device == NULL) { printf("no device found\n"); return -1; } print_device(device); udev_device_unref(device); return 0; } static int test_device_parents(struct udev *udev, const char *syspath) { struct udev_device *device; struct udev_device *device_parent; printf("looking at device: %s\n", syspath); device = udev_device_new_from_syspath(udev, syspath); if (device == NULL) return -1; printf("looking at parents\n"); device_parent = device; do { print_device(device_parent); device_parent = udev_device_get_parent(device_parent); } while (device_parent != NULL); printf("looking at parents again\n"); device_parent = device; do { print_device(device_parent); device_parent = udev_device_get_parent(device_parent); } while (device_parent != NULL); udev_device_unref(device); return 0; } static int test_device_devnum(struct udev *udev) { dev_t devnum = makedev(1, 3); struct udev_device *device; printf("looking up device: %u:%u\n", major(devnum), minor(devnum)); device = udev_device_new_from_devnum(udev, 'c', devnum); if (device == NULL) return -1; print_device(device); udev_device_unref(device); return 0; } static int test_device_subsys_name(struct udev *udev) { struct udev_device *device; printf("looking up device: 'block':'sda'\n"); device = udev_device_new_from_subsystem_sysname(udev, "block", "sda"); if (device == NULL) return -1; print_device(device); udev_device_unref(device); printf("looking up device: 'subsystem':'pci'\n"); device = udev_device_new_from_subsystem_sysname(udev, "subsystem", "pci"); if (device == NULL) return -1; print_device(device); udev_device_unref(device); printf("looking up device: 'drivers':'scsi:sd'\n"); device = udev_device_new_from_subsystem_sysname(udev, "drivers", "scsi:sd"); if (device == NULL) return -1; print_device(device); udev_device_unref(device); printf("looking up device: 'module':'printk'\n"); device = udev_device_new_from_subsystem_sysname(udev, "module", "printk"); if (device == NULL) return -1; print_device(device); udev_device_unref(device); return 0; } static int test_enumerate_print_list(struct udev_enumerate *enumerate) { struct udev_list_entry *list_entry; int count = 0; udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(enumerate)) { struct udev_device *device; device = udev_device_new_from_syspath(udev_enumerate_get_udev(enumerate), udev_list_entry_get_name(list_entry)); if (device != NULL) { printf("device: '%s' (%s)\n", udev_device_get_syspath(device), udev_device_get_subsystem(device)); udev_device_unref(device); count++; } } printf("found %i devices\n\n", count); return count; } static int test_monitor(struct udev *udev) { struct udev_monitor *udev_monitor = NULL; int fd_ep; int fd_udev = -1; struct epoll_event ep_udev, ep_stdin; fd_ep = epoll_create1(EPOLL_CLOEXEC); if (fd_ep < 0) { printf("error creating epoll fd: %m\n"); goto out; } udev_monitor = udev_monitor_new_from_netlink(udev, "udev"); if (udev_monitor == NULL) { printf("no socket\n"); goto out; } fd_udev = udev_monitor_get_fd(udev_monitor); if (udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "block", NULL) < 0 || udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "tty", NULL) < 0 || udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "usb", "usb_device") < 0) { printf("filter failed\n"); goto out; } if (udev_monitor_enable_receiving(udev_monitor) < 0) { printf("bind failed\n"); goto out; } memset(&ep_udev, 0, sizeof(struct epoll_event)); ep_udev.events = EPOLLIN; ep_udev.data.fd = fd_udev; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_udev, &ep_udev) < 0) { printf("fail to add fd to epoll: %m\n"); goto out; } memset(&ep_stdin, 0, sizeof(struct epoll_event)); ep_stdin.events = EPOLLIN; ep_stdin.data.fd = STDIN_FILENO; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, STDIN_FILENO, &ep_stdin) < 0) { printf("fail to add fd to epoll: %m\n"); goto out; } for (;;) { int fdcount; struct epoll_event ev[4]; struct udev_device *device; int i; printf("waiting for events from udev, press ENTER to exit\n"); fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), -1); printf("epoll fd count: %i\n", fdcount); for (i = 0; i < fdcount; i++) { if (ev[i].data.fd == fd_udev && ev[i].events & EPOLLIN) { device = udev_monitor_receive_device(udev_monitor); if (device == NULL) { printf("no device from socket\n"); continue; } print_device(device); udev_device_unref(device); } else if (ev[i].data.fd == STDIN_FILENO && ev[i].events & EPOLLIN) { printf("exiting loop\n"); goto out; } } } out: if (fd_ep >= 0) close(fd_ep); udev_monitor_unref(udev_monitor); return 0; } static int test_queue(struct udev *udev) { struct udev_queue *udev_queue; unsigned long long int seqnum; struct udev_list_entry *list_entry; udev_queue = udev_queue_new(udev); if (udev_queue == NULL) return -1; seqnum = udev_queue_get_kernel_seqnum(udev_queue); printf("seqnum kernel: %llu\n", seqnum); seqnum = udev_queue_get_udev_seqnum(udev_queue); printf("seqnum udev : %llu\n", seqnum); if (udev_queue_get_queue_is_empty(udev_queue)) printf("queue is empty\n"); printf("get queue list\n"); udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue)) printf("queued: '%s' [%s]\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); printf("\n"); printf("get queue list again\n"); udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue)) printf("queued: '%s' [%s]\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); printf("\n"); list_entry = udev_queue_get_queued_list_entry(udev_queue); if (list_entry != NULL) { printf("event [%llu] is queued\n", seqnum); seqnum = strtoull(udev_list_entry_get_value(list_entry), NULL, 10); if (udev_queue_get_seqnum_is_finished(udev_queue, seqnum)) printf("event [%llu] is not finished\n", seqnum); else printf("event [%llu] is finished\n", seqnum); } printf("\n"); udev_queue_unref(udev_queue); return 0; } static int test_enumerate(struct udev *udev, const char *subsystem) { struct udev_enumerate *udev_enumerate; printf("enumerate '%s'\n", subsystem == NULL ? "" : subsystem); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_match_subsystem(udev_enumerate, subsystem); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'net' + duplicated scan + null + zero\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_match_subsystem(udev_enumerate, "net"); udev_enumerate_scan_devices(udev_enumerate); udev_enumerate_scan_devices(udev_enumerate); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/zero"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/null"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/zero"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/null"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/zero"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/null"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/null"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/zero"); udev_enumerate_add_syspath(udev_enumerate, "/sys/class/mem/zero"); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'block'\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_match_subsystem(udev_enumerate,"block"); udev_enumerate_add_match_is_initialized(udev_enumerate); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'not block'\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_nomatch_subsystem(udev_enumerate, "block"); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'pci, mem, vc'\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_match_subsystem(udev_enumerate, "pci"); udev_enumerate_add_match_subsystem(udev_enumerate, "mem"); udev_enumerate_add_match_subsystem(udev_enumerate, "vc"); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'subsystem'\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_scan_subsystems(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); printf("enumerate 'property IF_FS_*=filesystem'\n"); udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_add_match_property(udev_enumerate, "ID_FS*", "filesystem"); udev_enumerate_scan_devices(udev_enumerate); test_enumerate_print_list(udev_enumerate); udev_enumerate_unref(udev_enumerate); return 0; } int main(int argc, char *argv[]) { struct udev *udev = NULL; static const struct option options[] = { { "syspath", required_argument, NULL, 'p' }, { "subsystem", required_argument, NULL, 's' }, { "debug", no_argument, NULL, 'd' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, {} }; const char *syspath = "/devices/virtual/mem/null"; const char *subsystem = NULL; char path[1024]; const char *str; udev = udev_new(); printf("context: %p\n", udev); if (udev == NULL) { printf("no context\n"); return 1; } udev_set_log_fn(udev, log_fn); printf("set log: %p\n", log_fn); for (;;) { int option; option = getopt_long(argc, argv, "+p:s:dhV", options, NULL); if (option == -1) break; switch (option) { case 'p': syspath = optarg; break; case 's': subsystem = optarg; break; case 'd': if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; case 'h': printf("--debug --syspath= --subsystem= --help\n"); goto out; case 'V': printf("%s\n", VERSION); goto out; default: goto out; } } str = udev_get_sys_path(udev); printf("sys_path: '%s'\n", str); str = udev_get_dev_path(udev); printf("dev_path: '%s'\n", str); /* add sys path if needed */ if (strncmp(syspath, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) { snprintf(path, sizeof(path), "%s%s", udev_get_sys_path(udev), syspath); syspath = path; } test_device(udev, syspath); test_device_devnum(udev); test_device_subsys_name(udev); test_device_parents(udev, syspath); test_enumerate(udev, subsystem); test_queue(udev); test_monitor(udev); out: udev_unref(udev); return 0; } udev-182/src/PaxHeaders.12492/rule_generator0000644000521600052160000000013211731430510017105 xustar000000000000000030 mtime=1332097352.679438911 30 atime=1332097354.347438951 30 ctime=1332097352.679438911 udev-182/src/rule_generator/0000775000521600052160000000000011731430510015566 5ustar00kaykay00000000000000udev-182/src/rule_generator/PaxHeaders.12492/75-persistent-net-generator.rules0000644000521600052160000000013211711107662025446 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.430117624 30 ctime=1332097352.679438911 udev-182/src/rule_generator/75-persistent-net-generator.rules0000664000521600052160000001010311711107662024045 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update # these rules generate rules for persistent network device naming # # variables used to communicate: # MATCHADDR MAC address used for the match # MATCHID bus_id used for the match # MATCHDRV driver name used for the match # MATCHIFTYPE interface type match # COMMENT comment to add to the generated rule # INTERFACE_NAME requested name supplied by external tool # INTERFACE_NEW new interface name returned by rule writer ACTION!="add", GOTO="persistent_net_generator_end" SUBSYSTEM!="net", GOTO="persistent_net_generator_end" # ignore the interface if a name has already been set NAME=="?*", GOTO="persistent_net_generator_end" # device name whitelist KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end" # ignore Xen virtual interfaces SUBSYSTEMS=="xen", GOTO="persistent_net_generator_end" # read MAC address ENV{MATCHADDR}="$attr{address}" # match interface type ENV{MATCHIFTYPE}="$attr{type}" # ignore KVM virtual interfaces ENV{MATCHADDR}=="52:54:00:*", GOTO="persistent_net_generator_end" # ignore VMWare virtual interfaces ENV{MATCHADDR}=="00:0c:29:*|00:50:56:*", GOTO="persistent_net_generator_end" # ignore Hyper-V virtual interfaces ENV{MATCHADDR}=="00:15:5d:*", GOTO="persistent_net_generator_end" # These vendors are known to violate the local MAC address assignment scheme # Interlan, DEC (UNIBUS or QBUS), Apollo, Cisco, Racal-Datacom ENV{MATCHADDR}=="02:07:01:*", GOTO="globally_administered_whitelist" # 3Com ENV{MATCHADDR}=="02:60:60:*", GOTO="globally_administered_whitelist" # 3Com IBM PC; Imagen; Valid; Cisco; Apple ENV{MATCHADDR}=="02:60:8c:*", GOTO="globally_administered_whitelist" # Intel ENV{MATCHADDR}=="02:a0:c9:*", GOTO="globally_administered_whitelist" # Olivetti ENV{MATCHADDR}=="02:aa:3c:*", GOTO="globally_administered_whitelist" # CMC Masscomp; Silicon Graphics; Prime EXL ENV{MATCHADDR}=="02:cf:1f:*", GOTO="globally_administered_whitelist" # Prominet Corporation Gigabit Ethernet Switch ENV{MATCHADDR}=="02:e0:3b:*", GOTO="globally_administered_whitelist" # BTI (Bus-Tech, Inc.) IBM Mainframes ENV{MATCHADDR}=="02:e6:d3:*", GOTO="globally_administered_whitelist" # Realtek ENV{MATCHADDR}=="52:54:00:*", GOTO="globally_administered_whitelist" # Novell 2000 ENV{MATCHADDR}=="52:54:4c:*", GOTO="globally_administered_whitelist" # Realtec ENV{MATCHADDR}=="52:54:ab:*", GOTO="globally_administered_whitelist" # Kingston Technologies ENV{MATCHADDR}=="e2:0c:0f:*", GOTO="globally_administered_whitelist" # Xensource ENV{MATCHADDR}=="00:16:3e:*", GOTO="globally_administered_whitelist" # match interface dev_id ATTR{dev_id}=="?*", ENV{MATCHDEVID}="$attr{dev_id}" # do not use "locally administered" MAC address ENV{MATCHADDR}=="?[2367abef]:*", ENV{MATCHADDR}="" # do not use empty address ENV{MATCHADDR}=="00:00:00:00:00:00", ENV{MATCHADDR}="" LABEL="globally_administered_whitelist" # build comment line for generated rule: SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($driver)" SUBSYSTEMS=="usb", ATTRS{idVendor}=="?*", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($driver)" SUBSYSTEMS=="pcmcia", ENV{COMMENT}="PCMCIA device $attr{card_id}:$attr{manf_id} ($driver)" SUBSYSTEMS=="ieee1394", ENV{COMMENT}="Firewire device $attr{host_id})" # ibmveth likes to use "locally administered" MAC addresses DRIVERS=="ibmveth", ENV{MATCHADDR}="$attr{address}", ENV{COMMENT}="ibmveth ($id)" # S/390 uses id matches only, do not use MAC address match SUBSYSTEMS=="ccwgroup", ENV{COMMENT}="S/390 $driver device at $id", ENV{MATCHID}="$id", ENV{MATCHDRV}="$driver", ENV{MATCHADDR}="" # see if we got enough data to create a rule ENV{MATCHADDR}=="", ENV{MATCHID}=="", ENV{INTERFACE_NAME}=="", GOTO="persistent_net_generator_end" # default comment ENV{COMMENT}=="", ENV{COMMENT}="net device ($attr{driver})" # write rule DRIVERS=="?*", IMPORT{program}="write_net_rules" # rename interface if needed ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}" LABEL="persistent_net_generator_end" udev-182/src/rule_generator/PaxHeaders.12492/75-cd-aliases-generator.rules0000644000521600052160000000013211711107662024467 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.421117624 30 ctime=1332097352.667438911 udev-182/src/rule_generator/75-cd-aliases-generator.rules0000664000521600052160000000071611711107662023077 0ustar00kaykay00000000000000# these rules generate rules for the /dev/{cdrom,dvd,...} symlinks # the "path" of usb/ieee1394 devices changes frequently, use "id" ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", \ PROGRAM="write_cd_rules by-id", SYMLINK+="%c", GOTO="persistent_cd_end" ACTION=="add", SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", PROGRAM="write_cd_rules", SYMLINK+="%c" LABEL="persistent_cd_end" udev-182/src/rule_generator/PaxHeaders.12492/write_cd_rules0000644000521600052160000000013211711107662022126 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.728117607 30 ctime=1332097352.067438897 udev-182/src/rule_generator/write_cd_rules0000664000521600052160000000701311711107662020533 0ustar00kaykay00000000000000#!/bin/sh -e # This script is run if an optical drive lacks a rule for persistent naming. # # It adds symlinks for optical drives based on the device class determined # by cdrom_id and used ID_PATH to identify the device. # (C) 2006 Marco d'Itri # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # debug, if UDEV_LOG= if [ -n "$UDEV_LOG" ]; then if [ "$UDEV_LOG" -ge 7 ]; then set -x fi fi RULES_FILE="/etc/udev/rules.d/70-persistent-cd.rules" . /lib/udev/rule_generator.functions find_next_available() { raw_find_next_available "$(find_all_rules 'SYMLINK\+=' "$1")" } write_rule() { local match="$1" local link="$2" local comment="$3" { if [ "$PRINT_HEADER" ]; then PRINT_HEADER= echo "# This file was automatically generated by the $0" echo "# program, run by the cd-aliases-generator.rules rules file." echo "#" echo "# You can modify it, as long as you keep each rule on a single" echo "# line, and set the \$GENERATED variable." echo "" fi [ "$comment" ] && echo "# $comment" echo "$match, SYMLINK+=\"$link\", ENV{GENERATED}=\"1\"" } >> $RULES_FILE SYMLINKS="$SYMLINKS $link" } if [ -z "$DEVPATH" ]; then echo "Missing \$DEVPATH." >&2 exit 1 fi if [ -z "$ID_CDROM" ]; then echo "$DEVPATH is not a CD reader." >&2 exit 1 fi if [ "$1" ]; then METHOD="$1" else METHOD='by-path' fi case "$METHOD" in by-path) if [ -z "$ID_PATH" ]; then echo "$DEVPATH not supported by path_id. by-id may work." >&2 exit 1 fi RULE="ENV{ID_PATH}==\"$ID_PATH\"" ;; by-id) if [ "$ID_SERIAL" ]; then RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\"" elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\"" else echo "$DEVPATH not supported by ata_id. by-path may work." >&2 exit 1 fi ;; *) echo "Invalid argument (must be either by-path or by-id)." >&2 exit 1 ;; esac # Prevent concurrent processes from modifying the file at the same time. lock_rules_file # Check if the rules file is writeable. choose_rules_file link_num=$(find_next_available 'cdrom[0-9]*') match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE" comment="$ID_MODEL ($ID_PATH)" write_rule "$match" "cdrom$link_num" "$comment" [ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \ write_rule "$match" "cdrw$link_num" [ "$ID_CDROM_DVD" ] && \ write_rule "$match" "dvd$link_num" [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \ write_rule "$match" "dvdrw$link_num" echo >> $RULES_FILE unlock_rules_file echo $SYMLINKS exit 0 udev-182/src/rule_generator/PaxHeaders.12492/write_net_rules0000644000521600052160000000013211711107662022326 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083868.732117607 30 ctime=1332097352.071438897 udev-182/src/rule_generator/write_net_rules0000664000521600052160000001044011711107662020731 0ustar00kaykay00000000000000#!/bin/sh -e # This script is run to create persistent network device naming rules # based on properties of the device. # If the interface needs to be renamed, INTERFACE_NEW= will be printed # on stdout to allow udev to IMPORT it. # variables used to communicate: # MATCHADDR MAC address used for the match # MATCHID bus_id used for the match # MATCHDEVID dev_id used for the match # MATCHDRV driver name used for the match # MATCHIFTYPE interface type match # COMMENT comment to add to the generated rule # INTERFACE_NAME requested name supplied by external tool # INTERFACE_NEW new interface name returned by rule writer # Copyright (C) 2006 Marco d'Itri # Copyright (C) 2007 Kay Sievers # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # debug, if UDEV_LOG= if [ -n "$UDEV_LOG" ]; then if [ "$UDEV_LOG" -ge 7 ]; then set -x fi fi RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules' . /lib/udev/rule_generator.functions interface_name_taken() { local value="$(find_all_rules 'NAME=' $INTERFACE)" if [ "$value" ]; then return 0 else return 1 fi } find_next_available() { raw_find_next_available "$(find_all_rules 'NAME=' "$1")" } write_rule() { local match="$1" local name="$2" local comment="$3" { if [ "$PRINT_HEADER" ]; then PRINT_HEADER= echo "# This file was automatically generated by the $0" echo "# program, run by the persistent-net-generator.rules rules file." echo "#" echo "# You can modify it, as long as you keep each rule on a single" echo "# line, and change only the value of the NAME= key." fi echo "" [ "$comment" ] && echo "# $comment" echo "SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$name\"" } >> $RULES_FILE } if [ -z "$INTERFACE" ]; then echo "missing \$INTERFACE" >&2 exit 1 fi # Prevent concurrent processes from modifying the file at the same time. lock_rules_file # Check if the rules file is writeable. choose_rules_file # the DRIVERS key is needed to not match bridges and VLAN sub-interfaces if [ "$MATCHADDR" ]; then match="$match, DRIVERS==\"?*\", ATTR{address}==\"$MATCHADDR\"" fi if [ "$MATCHDRV" ]; then match="$match, DRIVERS==\"$MATCHDRV\"" fi if [ "$MATCHDEVID" ]; then match="$match, ATTR{dev_id}==\"$MATCHDEVID\"" fi if [ "$MATCHID" ]; then match="$match, KERNELS==\"$MATCHID\"" fi if [ "$MATCHIFTYPE" ]; then match="$match, ATTR{type}==\"$MATCHIFTYPE\"" fi if [ -z "$match" ]; then echo "missing valid match" >&2 unlock_rules_file exit 1 fi basename=${INTERFACE%%[0-9]*} match="$match, KERNEL==\"$basename*\"" if [ "$INTERFACE_NAME" ]; then # external tools may request a custom name COMMENT="$COMMENT (custom name provided by external tool)" if [ "$INTERFACE_NAME" != "$INTERFACE" ]; then INTERFACE=$INTERFACE_NAME; echo "INTERFACE_NEW=$INTERFACE" fi else # if a rule using the current name already exists, find a new name if interface_name_taken; then INTERFACE="$basename$(find_next_available "$basename[0-9]*")" # prevent INTERFACE from being "eth" instead of "eth0" [ "$INTERFACE" = "${INTERFACE%%[ \[\]0-9]*}" ] && INTERFACE=${INTERFACE}0 echo "INTERFACE_NEW=$INTERFACE" fi fi write_rule "$match" "$INTERFACE" "$COMMENT" unlock_rules_file exit 0 udev-182/src/rule_generator/PaxHeaders.12492/rule_generator.functions0000644000521600052160000000013211711107662024140 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.718117607 30 ctime=1332097352.058438897 udev-182/src/rule_generator/rule_generator.functions0000664000521600052160000000663111711107662022552 0ustar00kaykay00000000000000# functions used by the udev rule generator # Copyright (C) 2006 Marco d'Itri # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . PATH='/usr/bin:/bin:/usr/sbin:/sbin' # Read a single line from file $1 in the $DEVPATH directory. # The function must not return an error even if the file does not exist. sysread() { local file="$1" [ -e "/sys$DEVPATH/$file" ] || return 0 local value read value < "/sys$DEVPATH/$file" || return 0 echo "$value" } sysreadlink() { local file="$1" [ -e "/sys$DEVPATH/$file" ] || return 0 readlink -f /sys$DEVPATH/$file 2> /dev/null || true } # Return true if a directory is writeable. writeable() { if ln -s test-link $1/.is-writeable 2> /dev/null; then rm -f $1/.is-writeable return 0 else return 1 fi } # Create a lock file for the current rules file. lock_rules_file() { RUNDIR=$(udevadm info --run) [ -e "$RUNDIR" ] || return 0 RULES_LOCK="$RUNDIR/.lock-${RULES_FILE##*/}" retry=30 while ! mkdir $RULES_LOCK 2> /dev/null; do if [ $retry -eq 0 ]; then echo "Cannot lock $RULES_FILE!" >&2 exit 2 fi sleep 1 retry=$(($retry - 1)) done } unlock_rules_file() { [ "$RULES_LOCK" ] || return 0 rmdir $RULES_LOCK || true } # Choose the real rules file if it is writeable or a temporary file if not. # Both files should be checked later when looking for existing rules. choose_rules_file() { RUNDIR=$(udevadm info --run) local tmp_rules_file="$RUNDIR/tmp-rules--${RULES_FILE##*/}" [ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1 if writeable ${RULES_FILE%/*}; then RO_RULES_FILE='/dev/null' else RO_RULES_FILE=$RULES_FILE RULES_FILE=$tmp_rules_file fi } # Return the name of the first free device. raw_find_next_available() { local links="$1" local basename=${links%%[ 0-9]*} local max=-1 for name in $links; do local num=${name#$basename} [ "$num" ] || num=0 [ $num -gt $max ] && max=$num done local max=$(($max + 1)) # "name0" actually is just "name" [ $max -eq 0 ] && return echo "$max" } # Find all rules matching a key (with action) and a pattern. find_all_rules() { local key="$1" local linkre="$2" local match="$3" local search='.*[[:space:],]'"$key"'"('"$linkre"')".*' echo $(sed -n -r -e 's/^#.*//' -e "${match}s/${search}/\1/p" \ $RO_RULES_FILE \ $([ -e $RULES_FILE ] && echo $RULES_FILE) \ 2>/dev/null) } udev-182/src/PaxHeaders.12492/udev-builtin-usb_id.c0000644000521600052160000000013211711107662020172 xustar000000000000000030 mtime=1327796146.962827005 30 atime=1332083327.582104712 30 ctime=1332097353.350438927 udev-182/src/udev-builtin-usb_id.c0000664000521600052160000004323411711107662016604 0ustar00kaykay00000000000000/* * USB device properties and persistent device path * * Copyright (c) 2005 SUSE Linux Products GmbH, Germany * Author: Hannes Reinecke * * Copyright (C) 2005-2011 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "udev.h" static void set_usb_iftype(char *to, int if_class_num, size_t len) { char *type = "generic"; switch (if_class_num) { case 1: type = "audio"; break; case 2: /* CDC-Control */ break; case 3: type = "hid"; break; case 5: /* Physical */ break; case 6: type = "media"; break; case 7: type = "printer"; break; case 8: type = "storage"; break; case 9: type = "hub"; break; case 0x0a: /* CDC-Data */ break; case 0x0b: /* Chip/Smart Card */ break; case 0x0d: /* Content Security */ break; case 0x0e: type = "video"; break; case 0xdc: /* Diagnostic Device */ break; case 0xe0: /* Wireless Controller */ break; case 0xfe: /* Application-specific */ break; case 0xff: /* Vendor-specific */ break; default: break; } strncpy(to, type, len); to[len-1] = '\0'; } static int set_usb_mass_storage_ifsubtype(char *to, const char *from, size_t len) { int type_num = 0; char *eptr; char *type = "generic"; type_num = strtoul(from, &eptr, 0); if (eptr != from) { switch (type_num) { case 2: type = "atapi"; break; case 3: type = "tape"; break; case 4: /* UFI */ case 5: /* SFF-8070i */ type = "floppy"; break; case 1: /* RBC devices */ type = "rbc"; break; case 6: /* Transparent SPC-2 devices */ type = "scsi"; break; default: break; } } util_strscpy(to, len, type); return type_num; } static void set_scsi_type(char *to, const char *from, size_t len) { int type_num; char *eptr; char *type = "generic"; type_num = strtoul(from, &eptr, 0); if (eptr != from) { switch (type_num) { case 0: case 0xe: type = "disk"; break; case 1: type = "tape"; break; case 4: case 7: case 0xf: type = "optical"; break; case 5: type = "cd"; break; default: break; } } util_strscpy(to, len, type); } #define USB_DT_DEVICE 0x01 #define USB_DT_INTERFACE 0x04 static int dev_if_packed_info(struct udev_device *dev, char *ifs_str, size_t len) { char *filename = NULL; int fd; ssize_t size; unsigned char buf[18 + 65535]; unsigned int pos, strpos; struct usb_interface_descriptor { u_int8_t bLength; u_int8_t bDescriptorType; u_int8_t bInterfaceNumber; u_int8_t bAlternateSetting; u_int8_t bNumEndpoints; u_int8_t bInterfaceClass; u_int8_t bInterfaceSubClass; u_int8_t bInterfaceProtocol; u_int8_t iInterface; } __attribute__((packed)); int err = 0; if (asprintf(&filename, "%s/descriptors", udev_device_get_syspath(dev)) < 0) { err = -1; goto out; } fd = open(filename, O_RDONLY|O_CLOEXEC); if (fd < 0) { fprintf(stderr, "error opening USB device 'descriptors' file\n"); err = -1; goto out; } size = read(fd, buf, sizeof(buf)); close(fd); if (size < 18 || size == sizeof(buf)) { err = -1; goto out; } pos = 0; strpos = 0; ifs_str[0] = '\0'; while (pos < sizeof(buf) && strpos+7 < len-2) { struct usb_interface_descriptor *desc; char if_str[8]; desc = (struct usb_interface_descriptor *) &buf[pos]; if (desc->bLength < 3) break; pos += desc->bLength; if (desc->bDescriptorType != USB_DT_INTERFACE) continue; if (snprintf(if_str, 8, ":%02x%02x%02x", desc->bInterfaceClass, desc->bInterfaceSubClass, desc->bInterfaceProtocol) != 7) continue; if (strstr(ifs_str, if_str) != NULL) continue; memcpy(&ifs_str[strpos], if_str, 8), strpos += 7; } if (strpos > 0) { ifs_str[strpos++] = ':'; ifs_str[strpos++] = '\0'; } out: free(filename); return err; } /* * A unique USB identification is generated like this: * * 1.) Get the USB device type from InterfaceClass and InterfaceSubClass * 2.) If the device type is 'Mass-Storage/SPC-2' or 'Mass-Storage/RBC' * use the SCSI vendor and model as USB-Vendor and USB-model. * 3.) Otherwise use the USB manufacturer and product as * USB-Vendor and USB-model. Any non-printable characters * in those strings will be skipped; a slash '/' will be converted * into a full stop '.'. * 4.) If that fails, too, we will use idVendor and idProduct * as USB-Vendor and USB-model. * 5.) The USB identification is the USB-vendor and USB-model * string concatenated with an underscore '_'. * 6.) If the device supplies a serial number, this number * is concatenated with the identification with an underscore '_'. */ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool test) { char vendor_str[64]; char vendor_str_enc[256]; const char *vendor_id; char model_str[64]; char model_str_enc[256]; const char *product_id; char serial_str[UTIL_NAME_SIZE]; char packed_if_str[UTIL_NAME_SIZE]; char revision_str[64]; char type_str[64]; char instance_str[64]; const char *ifnum = NULL; const char *driver = NULL; char serial[256]; struct udev *udev = udev_device_get_udev(dev); struct udev_device *dev_interface = NULL; struct udev_device *dev_usb = NULL; const char *if_class, *if_subclass; int if_class_num; int protocol = 0; size_t l; char *s; vendor_str[0] = '\0'; model_str[0] = '\0'; serial_str[0] = '\0'; packed_if_str[0] = '\0'; revision_str[0] = '\0'; type_str[0] = '\0'; instance_str[0] = '\0'; dbg(udev, "syspath %s\n", udev_device_get_syspath(dev)); /* shortcut, if we are called directly for a "usb_device" type */ if (udev_device_get_devtype(dev) != NULL && strcmp(udev_device_get_devtype(dev), "usb_device") == 0) { dev_if_packed_info(dev, packed_if_str, sizeof(packed_if_str)); dev_usb = dev; goto fallback; } /* usb interface directory */ dev_interface = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface"); if (dev_interface == NULL) { info(udev, "unable to access usb_interface device of '%s'\n", udev_device_get_syspath(dev)); return EXIT_FAILURE; } ifnum = udev_device_get_sysattr_value(dev_interface, "bInterfaceNumber"); driver = udev_device_get_sysattr_value(dev_interface, "driver"); if_class = udev_device_get_sysattr_value(dev_interface, "bInterfaceClass"); if (!if_class) { info(udev, "%s: cannot get bInterfaceClass attribute\n", udev_device_get_sysname(dev)); return EXIT_FAILURE; } if_class_num = strtoul(if_class, NULL, 16); if (if_class_num == 8) { /* mass storage */ if_subclass = udev_device_get_sysattr_value(dev_interface, "bInterfaceSubClass"); if (if_subclass != NULL) protocol = set_usb_mass_storage_ifsubtype(type_str, if_subclass, sizeof(type_str)-1); } else { set_usb_iftype(type_str, if_class_num, sizeof(type_str)-1); } info(udev, "%s: if_class %d protocol %d\n", udev_device_get_syspath(dev_interface), if_class_num, protocol); /* usb device directory */ dev_usb = udev_device_get_parent_with_subsystem_devtype(dev_interface, "usb", "usb_device"); if (!dev_usb) { info(udev, "unable to find parent 'usb' device of '%s'\n", udev_device_get_syspath(dev)); return EXIT_FAILURE; } /* all interfaces of the device in a single string */ dev_if_packed_info(dev_usb, packed_if_str, sizeof(packed_if_str)); /* mass storage : SCSI or ATAPI */ if ((protocol == 6 || protocol == 2)) { struct udev_device *dev_scsi; const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev; int host, bus, target, lun; /* get scsi device */ dev_scsi = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device"); if (dev_scsi == NULL) { info(udev, "unable to find parent 'scsi' device of '%s'\n", udev_device_get_syspath(dev)); goto fallback; } if (sscanf(udev_device_get_sysname(dev_scsi), "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) { info(udev, "invalid scsi device '%s'\n", udev_device_get_sysname(dev_scsi)); goto fallback; } /* Generic SPC-2 device */ scsi_vendor = udev_device_get_sysattr_value(dev_scsi, "vendor"); if (!scsi_vendor) { info(udev, "%s: cannot get SCSI vendor attribute\n", udev_device_get_sysname(dev_scsi)); goto fallback; } udev_util_encode_string(scsi_vendor, vendor_str_enc, sizeof(vendor_str_enc)); util_replace_whitespace(scsi_vendor, vendor_str, sizeof(vendor_str)-1); util_replace_chars(vendor_str, NULL); scsi_model = udev_device_get_sysattr_value(dev_scsi, "model"); if (!scsi_model) { info(udev, "%s: cannot get SCSI model attribute\n", udev_device_get_sysname(dev_scsi)); goto fallback; } udev_util_encode_string(scsi_model, model_str_enc, sizeof(model_str_enc)); util_replace_whitespace(scsi_model, model_str, sizeof(model_str)-1); util_replace_chars(model_str, NULL); scsi_type = udev_device_get_sysattr_value(dev_scsi, "type"); if (!scsi_type) { info(udev, "%s: cannot get SCSI type attribute\n", udev_device_get_sysname(dev_scsi)); goto fallback; } set_scsi_type(type_str, scsi_type, sizeof(type_str)-1); scsi_rev = udev_device_get_sysattr_value(dev_scsi, "rev"); if (!scsi_rev) { info(udev, "%s: cannot get SCSI revision attribute\n", udev_device_get_sysname(dev_scsi)); goto fallback; } util_replace_whitespace(scsi_rev, revision_str, sizeof(revision_str)-1); util_replace_chars(revision_str, NULL); /* * some broken devices have the same identifiers * for all luns, export the target:lun number */ sprintf(instance_str, "%d:%d", target, lun); } fallback: vendor_id = udev_device_get_sysattr_value(dev_usb, "idVendor"); product_id = udev_device_get_sysattr_value(dev_usb, "idProduct"); /* fallback to USB vendor & device */ if (vendor_str[0] == '\0') { const char *usb_vendor = NULL; usb_vendor = udev_device_get_sysattr_value(dev_usb, "manufacturer"); if (!usb_vendor) usb_vendor = vendor_id; if (!usb_vendor) { info(udev, "No USB vendor information available\n"); return EXIT_FAILURE; } udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc)); util_replace_whitespace(usb_vendor, vendor_str, sizeof(vendor_str)-1); util_replace_chars(vendor_str, NULL); } if (model_str[0] == '\0') { const char *usb_model = NULL; usb_model = udev_device_get_sysattr_value(dev_usb, "product"); if (!usb_model) usb_model = product_id; if (!usb_model) { dbg(udev, "No USB model information available\n"); return EXIT_FAILURE; } udev_util_encode_string(usb_model, model_str_enc, sizeof(model_str_enc)); util_replace_whitespace(usb_model, model_str, sizeof(model_str)-1); util_replace_chars(model_str, NULL); } if (revision_str[0] == '\0') { const char *usb_rev; usb_rev = udev_device_get_sysattr_value(dev_usb, "bcdDevice"); if (usb_rev) { util_replace_whitespace(usb_rev, revision_str, sizeof(revision_str)-1); util_replace_chars(revision_str, NULL); } } if (serial_str[0] == '\0') { const char *usb_serial; usb_serial = udev_device_get_sysattr_value(dev_usb, "serial"); if (usb_serial) { util_replace_whitespace(usb_serial, serial_str, sizeof(serial_str)-1); util_replace_chars(serial_str, NULL); } } s = serial; l = util_strpcpyl(&s, sizeof(serial), vendor_str, "_", model_str, NULL); if (serial_str[0] != '\0') l = util_strpcpyl(&s, l, "_", serial_str, NULL); if (instance_str[0] != '\0') util_strpcpyl(&s, l, "-", instance_str, NULL); udev_builtin_add_property(dev, test, "ID_VENDOR", vendor_str); udev_builtin_add_property(dev, test, "ID_VENDOR_ENC", vendor_str_enc); udev_builtin_add_property(dev, test, "ID_VENDOR_ID", vendor_id); udev_builtin_add_property(dev, test, "ID_MODEL", model_str); udev_builtin_add_property(dev, test, "ID_MODEL_ENC", model_str_enc); udev_builtin_add_property(dev, test, "ID_MODEL_ID", product_id); udev_builtin_add_property(dev, test, "ID_REVISION", revision_str); udev_builtin_add_property(dev, test, "ID_SERIAL", serial); if (serial_str[0] != '\0') udev_builtin_add_property(dev, test, "ID_SERIAL_SHORT", serial_str); if (type_str[0] != '\0') udev_builtin_add_property(dev, test, "ID_TYPE", type_str); if (instance_str[0] != '\0') udev_builtin_add_property(dev, test, "ID_INSTANCE", instance_str); udev_builtin_add_property(dev, test, "ID_BUS", "usb"); if (packed_if_str[0] != '\0') udev_builtin_add_property(dev, test, "ID_USB_INTERFACES", packed_if_str); if (ifnum != NULL) udev_builtin_add_property(dev, test, "ID_USB_INTERFACE_NUM", ifnum); if (driver != NULL) udev_builtin_add_property(dev, test, "ID_USB_DRIVER", driver); return EXIT_SUCCESS; } const struct udev_builtin udev_builtin_usb_id = { .name = "usb_id", .cmd = builtin_usb_id, .help = "usb device properties", .run_once = true, }; udev-182/src/PaxHeaders.12492/libudev-list.c0000644000521600052160000000013211711107662016723 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083322.632104595 30 ctime=1332097353.001438919 udev-182/src/libudev-list.c0000664000521600052160000002404511711107662015334 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev-list * @short_description: list operation * * Libudev list operations. */ /** * udev_list_entry: * * Opaque object representing one entry in a list. An entry contains * contains a name, and optionally a value. */ struct udev_list_entry { struct udev_list_node node; struct udev_list *list; char *name; char *value; int num; }; /* the list's head points to itself if empty */ void udev_list_node_init(struct udev_list_node *list) { list->next = list; list->prev = list; } int udev_list_node_is_empty(struct udev_list_node *list) { return list->next == list; } static void udev_list_node_insert_between(struct udev_list_node *new, struct udev_list_node *prev, struct udev_list_node *next) { next->prev = new; new->next = next; new->prev = prev; prev->next = new; } void udev_list_node_append(struct udev_list_node *new, struct udev_list_node *list) { udev_list_node_insert_between(new, list->prev, list); } void udev_list_node_remove(struct udev_list_node *entry) { struct udev_list_node *prev = entry->prev; struct udev_list_node *next = entry->next; next->prev = prev; prev->next = next; entry->prev = NULL; entry->next = NULL; } /* return list entry which embeds this node */ static struct udev_list_entry *list_node_to_entry(struct udev_list_node *node) { char *list; list = (char *)node; list -= offsetof(struct udev_list_entry, node); return (struct udev_list_entry *)list; } void udev_list_init(struct udev *udev, struct udev_list *list, bool unique) { memset(list, 0x00, sizeof(struct udev_list)); list->udev = udev; list->unique = unique; udev_list_node_init(&list->node); } /* insert entry into a list as the last element */ void udev_list_entry_append(struct udev_list_entry *new, struct udev_list *list) { /* inserting before the list head make the node the last node in the list */ udev_list_node_insert_between(&new->node, list->node.prev, &list->node); new->list = list; } /* insert entry into a list, before a given existing entry */ void udev_list_entry_insert_before(struct udev_list_entry *new, struct udev_list_entry *entry) { udev_list_node_insert_between(&new->node, entry->node.prev, &entry->node); new->list = entry->list; } /* binary search in sorted array */ static int list_search(struct udev_list *list, const char *name) { unsigned int first, last; first = 0; last = list->entries_cur; while (first < last) { unsigned int i; int cmp; i = (first + last)/2; cmp = strcmp(name, list->entries[i]->name); if (cmp < 0) last = i; else if (cmp > 0) first = i+1; else return i; } /* not found, return negative insertion-index+1 */ return -(first+1); } struct udev_list_entry *udev_list_entry_add(struct udev_list *list, const char *name, const char *value) { struct udev_list_entry *entry; int i = 0; if (list->unique) { /* lookup existing name or insertion-index */ i = list_search(list, name); if (i >= 0) { entry = list->entries[i]; dbg(list->udev, "'%s' is already in the list\n", name); free(entry->value); if (value == NULL) { entry->value = NULL; dbg(list->udev, "'%s' value unset\n", name); return entry; } entry->value = strdup(value); if (entry->value == NULL) return NULL; dbg(list->udev, "'%s' value replaced with '%s'\n", name, value); return entry; } } /* add new name */ entry = calloc(1, sizeof(struct udev_list_entry)); if (entry == NULL) return NULL; entry->name = strdup(name); if (entry->name == NULL) { free(entry); return NULL; } if (value != NULL) { entry->value = strdup(value); if (entry->value == NULL) { free(entry->name); free(entry); return NULL; } } if (list->unique) { /* allocate or enlarge sorted array if needed */ if (list->entries_cur >= list->entries_max) { unsigned int add; add = list->entries_max; if (add < 1) add = 64; list->entries = realloc(list->entries, (list->entries_max + add) * sizeof(struct udev_list_entry *)); if (list->entries == NULL) { free(entry->name); free(entry->value); return NULL; } list->entries_max += add; } /* the negative i returned the insertion index */ i = (-i)-1; /* insert into sorted list */ if ((unsigned int)i < list->entries_cur) udev_list_entry_insert_before(entry, list->entries[i]); else udev_list_entry_append(entry, list); /* insert into sorted array */ memmove(&list->entries[i+1], &list->entries[i], (list->entries_cur - i) * sizeof(struct udev_list_entry *)); list->entries[i] = entry; list->entries_cur++; } else { udev_list_entry_append(entry, list); } dbg(list->udev, "'%s=%s' added\n", entry->name, entry->value); return entry; } void udev_list_entry_delete(struct udev_list_entry *entry) { if (entry->list->entries != NULL) { int i; struct udev_list *list = entry->list; /* remove entry from sorted array */ i = list_search(list, entry->name); if (i >= 0) { memmove(&list->entries[i], &list->entries[i+1], ((list->entries_cur-1) - i) * sizeof(struct udev_list_entry *)); list->entries_cur--; } } udev_list_node_remove(&entry->node); free(entry->name); free(entry->value); free(entry); } void udev_list_cleanup(struct udev_list *list) { struct udev_list_entry *entry_loop; struct udev_list_entry *entry_tmp; free(list->entries); list->entries = NULL; list->entries_cur = 0; list->entries_max = 0; udev_list_entry_foreach_safe(entry_loop, entry_tmp, udev_list_get_entry(list)) udev_list_entry_delete(entry_loop); } struct udev_list_entry *udev_list_get_entry(struct udev_list *list) { if (udev_list_node_is_empty(&list->node)) return NULL; return list_node_to_entry(list->node.next); } /** * udev_list_entry_get_next: * @list_entry: current entry * * Returns: the next entry from the list, #NULL is no more entries are found. */ UDEV_EXPORT struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry) { struct udev_list_node *next; if (list_entry == NULL) return NULL; next = list_entry->node.next; /* empty list or no more entries */ if (next == &list_entry->list->node) return NULL; return list_node_to_entry(next); } /** * udev_list_entry_get_by_name: * @list_entry: current entry * @name: name string to match * * Returns: the entry where @name matched, #NULL if no matching entry is found. */ UDEV_EXPORT struct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list_entry, const char *name) { int i; if (list_entry == NULL) return NULL; if (!list_entry->list->unique) return NULL; i = list_search(list_entry->list, name); if (i < 0) return NULL; return list_entry->list->entries[i]; } /** * udev_list_entry_get_name: * @list_entry: current entry * * Returns: the name string of this entry. */ UDEV_EXPORT const char *udev_list_entry_get_name(struct udev_list_entry *list_entry) { if (list_entry == NULL) return NULL; return list_entry->name; } /** * udev_list_entry_get_value: * @list_entry: current entry * * Returns: the value string of this entry. */ UDEV_EXPORT const char *udev_list_entry_get_value(struct udev_list_entry *list_entry) { if (list_entry == NULL) return NULL; return list_entry->value; } int udev_list_entry_get_num(struct udev_list_entry *list_entry) { if (list_entry == NULL) return -EINVAL; return list_entry->num; } void udev_list_entry_set_num(struct udev_list_entry *list_entry, int num) { if (list_entry == NULL) return; list_entry->num = num; } udev-182/src/PaxHeaders.12492/udev.xml0000644000521600052160000000013211730121050015625 xustar000000000000000030 mtime=1331733032.102889675 30 atime=1332083334.589104879 30 ctime=1332097353.530438933 udev-182/src/udev.xml0000664000521600052160000007033711730121050014243 0ustar00kaykay00000000000000 udev udev udev 7 udev Linux dynamic device management Description udev supplies the system software with device events, manages permissions of device nodes and may create additional symlinks in the /dev directory, or renames network interfaces. The kernel usually just assigns unpredictable device names based on the order of discovery. Meaningful symlinks or network device names provide a way to reliably identify devices based on their properties or current configuration. The udev daemon, udevd 8, receives device uevents directly from the kernel whenever a device is added or removed from the system, or it changes its state. When udev receives a device event, it matches its configured set of rules against various device attributes to identify the device. Rules that match may provide additional device information to be stored in the udev database or to be used to create meaningful symlink names. All device information udev processes is stored in the udev database and sent out to possible event subscribers. Access to all stored data and the event sources is provided by the library libudev. Configuration udev configuration files are placed in /etc/udev and /usr/lib/udev. All empty lines or lines beginning with '#' are ignored. Configuration file udev expects its main configuration file at /etc/udev/udev.conf. It consists of a set of variables allowing the user to override default udev values. The following variables can be set: Specifies where to place the device nodes in the filesystem. The default value is /dev. The logging priority. Valid values are the numerical syslog priorities or their textual representations: , and . Rules files The udev rules are read from the files located in the system rules directory /usr/lib/udev/rules.d, the volatile runtime directory /run/udev/rules.d and the local administration directory /etc/udev/rules.d. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical file names replace each other. Files in /etc have the highest priority, files in /run take precedence over files with the same name in /lib. This can be used to override a system-supplied rules file with a local file if needed; a symlink in /etc with the same name as a rules file in /lib, pointing to /dev/null, disables the rules file entirely. Rule files must have the extension .rules; other extensions are ignored. Every line in the rules file contains at least one key-value pair. There are two kind of keys: match and assignment. If all match keys are matching against its value, the rule gets applied and the assignment keys get the specified value assigned. A matching rule may rename a network interface, add symlinks pointing to the device node, or run a specified program as part of the event handling. A rule consists of a comma-separated list of one or more key-value pairs. Each key has a distinct operation, depending on the used operator. Valid operators are: Compare for equality. Compare for inequality. Assign a value to a key. Keys that represent a list are reset and only this single value is assigned. Add the value to a key that holds a list of entries. Assign a value to a key finally; disallow any later changes. The following key names can be used to match against device properties. Some of the keys also match against properties of the parent devices in sysfs, not only the device that has generated the event. If multiple keys that match a parent device are specified in a single rule, all these keys must match at one and the same parent device. Match the name of the event action. Match the devpath of the event device. Match the name of the event device. Match the name of a network interface. It can be used once the NAME key has been set in one of the preceding rules. Match the name of a symlink targeting the node. It can be used once a SYMLINK key has been set in one of the preceding rules. There may be multiple symlinks; only one needs to match. Match the subsystem of the event device. Match the driver name of the event device. Only set this key for devices which are bound to a driver at the time the event is generated. Match sysfs attribute values of the event device. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace. Search the devpath upwards for a matching device name. Search the devpath upwards for a matching device subsystem name. Search the devpath upwards for a matching device driver name. Search the devpath upwards for a device with matching sysfs attribute values. If multiple matches are specified, all of them must match on the same device. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace. Search the devpath upwards for a device with matching tag. Match against a device property value. Match against a device tag. Test the existence of a file. An octal mode mask can be specified if needed. Execute a program to determine whether there is a match; the key is true if the program returns successfully. The device properties are made available to the executed program in the environment. The program's stdout is available in the RESULT key. Match the returned string of the last PROGRAM call. This key can be used in the same or in any later rule after a PROGRAM call. Most of the fields support shell-style pattern matching. The following pattern characters are supported: Matches zero or more characters. Matches any single character. Matches any single character specified within the brackets. For example, the pattern string 'tty[SR]' would match either 'ttyS' or 'ttyR'. Ranges are also supported via the '-' character. For example, to match on the range of all digits, the pattern [0-9] could be used. If the first character following the '[' is a '!', any characters not enclosed are matched. The following keys can get values assigned: The name to use for a network interface. The name of a device node can not be changed by udev, only additional symlinks can be created. The name of a symlink targeting the node. Every matching rule adds this value to the list of symlinks to be created. Multiple symlinks may be specified by separating the names by the space character. In case multiple devices claim the same name, the link always points to the device with the highest link_priority. If the current device goes away, the links are re-evaluated and the device with the next highest link_priority becomes the owner of the link. If no link_priority is specified, the order of the devices (and which one of them owns the link) is undefined. Also, symlink names must never conflict with the kernel's default device node names, as that would result in unpredictable behavior. The permissions for the device node. Every specified value overrides the compiled-in default value. The value that should be written to a sysfs attribute of the event device. Set a device property value. Property names with a leading '.' are neither stored in the database nor exported to events or external tools (run by, say, the PROGRAM match key). Attach a tag to a device. This is used to filter events for users of libudev's monitor functionality, or to enumerate a group of tagged devices. The implementation can only work efficiently if only a few tags are attached to a device. It is only meant to be used in contexts with specific device filter requirements, and not as a general-purpose flag. Excessive use might result in inefficient event handling. Add a program to the list of programs to be executed for a specific device. If no absolute path is given, the program is expected to live in /usr/lib/udev, otherwise the absolute path must be specified. The program name and following arguments are separated by spaces. Single quotes can be used to specify arguments with spaces. This can only be used for very short running tasks. Running an event process for a long period of time may block all further events for this or a dependent device. Starting daemons or other long running processes is not appropriate for udev. A named label to which a GOTO may jump. Jumps to the next LABEL with a matching name. Import a set of variables as device properties, depending on type: Execute an external program specified as the assigned value and import its output, which must be in environment key format. Path specification, command/argument separation, and quoting work like in . Import a text file specified as the assigned value, the content of which must be in environment key format. Import a single property specified as the assigned value from the current device database. This works only if the database is already populated by an earlier event. Import a single property from the kernel command line. For simple flags the value of the property is set to '1'. Import the stored keys from the parent device by reading the database entry of the parent device. The value assigned to is used as a filter of key names to import (with the same shell-style pattern matching used for comparisons). Wait for a file to become available or until a timeout of 10 seconds expires. The path is relative to the sysfs device; if no path is specified, this waits for an attribute to appear. Rule and device options: Specify the priority of the created symlinks. Devices with higher priorities overwrite existing symlinks of other devices. The default is 0. Number of seconds an event waits for operations to finish before giving up and terminating itself. Usually control and other possibly unsafe characters are replaced in strings used for device naming. The mode of replacement can be specified with this option. Apply the permissions specified in this rule to the static device node with the specified name. Static device nodes might be provided by kernel modules or copied from /usr/lib/udev/devices. These nodes might not have a corresponding kernel device at the time udevd is started; they can trigger automatic kernel module loading. Watch the device node with inotify; when the node is closed after being opened for writing, a change uevent is synthesized. Disable the watching of a device node with inotify. The , , , , , and fields support simple string substitutions. The substitutions are performed after all rules have been processed, right before the program is executed, allowing for the use of device properties set by earlier matching rules. For all other fields, substitutions are performed while the individual rule is being processed. The available substitutions are: , The kernel name for this device. , The kernel number for this device. For example, 'sda3' has kernel number of '3' , The devpath of the device. , The name of the device matched while searching the devpath upwards for , , and . The driver name of the device matched while searching the devpath upwards for , , and . , The value of a sysfs attribute found at the device where all keys of the rule have matched. If the matching device does not have such an attribute, and a previous KERNELS, SUBSYSTEMS, DRIVERS, or ATTRS test selected a parent device, then the attribute from that parent device is used. If the attribute is a symlink, the last element of the symlink target is returned as the value. , A device property value. , The kernel major number for the device. , The kernel minor number for the device. , The string returned by the external program requested with PROGRAM. A single part of the string, separated by a space character, may be selected by specifying the part number as an attribute: . If the number is followed by the '+' character, this part plus all remaining parts of the result string are substituted: , The node name of the parent device. The current name of the device. If not changed by a rule, it is the name of the kernel device. A space-separated list of the current symlinks. The value is only set during a remove event or if an earlier rule assigned a value. , The udev_root value. , The sysfs mount point. , The name of the device node. The '%' character itself. The '$' character itself. Author Written by Greg Kroah-Hartman greg@kroah.com and Kay Sievers kay.sievers@vrfy.org. With much help from Dan Stekloff and many others. See Also udevd8 , udevadm8 udev-182/src/PaxHeaders.12492/udevd.xml0000644000521600052160000000013211711107662016005 xustar000000000000000030 mtime=1327796146.964827003 30 atime=1332083335.233104895 30 ctime=1332097353.549438931 udev-182/src/udevd.xml0000664000521600052160000001233211711107662014412 0ustar00kaykay00000000000000 udevd udev udevd 8 udevdevent managing daemon udevd Description udevd listens to kernel uevents. For every event, udevd executes matching instructions specified in udev rules. See udev7 . On startup the content of the directory /usr/lib/udev/devices is copied to /dev. If kernel modules specify static device nodes, these nodes are created even without a corresponding kernel device, to allow on-demand loading of kernel modules. Matching permissions specified in udev rules are applied to these static device nodes. The behavior of the running daemon can be changed with udevadm control. Options Detach and run in the background. Print debug messages to stderr. Limit the number of parallel executed events. Number of seconds to delay the execution of RUN instructions. This might be useful when debugging system crashes during coldplug cause by loading non-working kernel modules. Specify when udevd should resolve names of users and groups. When set to (the default) names will be resolved when the rules are parsed. When set to names will be resolved for every event. When set to names will never be resolved and all devices will be owned by root. Print version number. Print help text. Environment UDEV_LOG= Set the logging priority. Kernel command line udev.log-priority= Set the logging priority. udev.children-max= Limit the number of parallel executed events. udev.exec-delay= Number of seconds to delay the execution of RUN instructions. This might be useful when debugging system crashes during coldplug cause by loading non-working kernel modules. Author Written by Kay Sievers kay.sievers@vrfy.org. See Also udev7 , udevadm8 udev-182/src/PaxHeaders.12492/scsi_id0000644000521600052160000000013211731430511015506 xustar000000000000000030 mtime=1332097353.569438933 30 atime=1332097354.348438951 30 ctime=1332097353.569438933 udev-182/src/scsi_id/0000775000521600052160000000000011731430511014167 5ustar00kaykay00000000000000udev-182/src/scsi_id/PaxHeaders.12492/README0000644000521600052160000000013211711107662016451 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083870.370117646 30 ctime=1332097353.569438933 udev-182/src/scsi_id/README0000664000521600052160000000027011711107662015054 0ustar00kaykay00000000000000scsi_id - generate a SCSI unique identifier for a given SCSI device Please send questions, comments or patches to or . udev-182/src/scsi_id/PaxHeaders.12492/scsi_id.c0000644000521600052160000000013211711107662017352 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083332.703104834 30 ctime=1332097353.179438923 udev-182/src/scsi_id/scsi_id.c0000664000521600052160000005457711711107662016000 0ustar00kaykay00000000000000/* * Copyright (C) IBM Corp. 2003 * Copyright (C) SUSE Linux Products GmbH, 2006 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" #include "scsi_id.h" static const struct option options[] = { { "device", required_argument, NULL, 'd' }, { "config", required_argument, NULL, 'f' }, { "page", required_argument, NULL, 'p' }, { "blacklisted", no_argument, NULL, 'b' }, { "whitelisted", no_argument, NULL, 'g' }, { "replace-whitespace", no_argument, NULL, 'u' }, { "sg-version", required_argument, NULL, 's' }, { "verbose", no_argument, NULL, 'v' }, { "version", no_argument, NULL, 'V' }, { "export", no_argument, NULL, 'x' }, { "help", no_argument, NULL, 'h' }, {} }; static const char short_options[] = "d:f:ghip:uvVx"; static const char dev_short_options[] = "bgp:"; static int all_good; static int dev_specified; static char config_file[MAX_PATH_LEN] = SYSCONFDIR "/scsi_id.config"; static enum page_code default_page_code; static int sg_version = 4; static int use_stderr; static int debug; static int reformat_serial; static int export; static char vendor_str[64]; static char model_str[64]; static char vendor_enc_str[256]; static char model_enc_str[256]; static char revision_str[16]; static char type_str[16]; static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { vsyslog(priority, format, args); } static void set_type(const char *from, char *to, size_t len) { int type_num; char *eptr; char *type = "generic"; type_num = strtoul(from, &eptr, 0); if (eptr != from) { switch (type_num) { case 0: type = "disk"; break; case 1: type = "tape"; break; case 4: type = "optical"; break; case 5: type = "cd"; break; case 7: type = "optical"; break; case 0xe: type = "disk"; break; case 0xf: type = "optical"; break; default: break; } } util_strscpy(to, len, type); } /* * get_value: * * buf points to an '=' followed by a quoted string ("foo") or a string ending * with a space or ','. * * Return a pointer to the NUL terminated string, returns NULL if no * matches. */ static char *get_value(char **buffer) { static char *quote_string = "\"\n"; static char *comma_string = ",\n"; char *val; char *end; if (**buffer == '"') { /* * skip leading quote, terminate when quote seen */ (*buffer)++; end = quote_string; } else { end = comma_string; } val = strsep(buffer, end); if (val && end == quote_string) /* * skip trailing quote */ (*buffer)++; while (isspace(**buffer)) (*buffer)++; return val; } static int argc_count(char *opts) { int i = 0; while (*opts != '\0') if (*opts++ == ' ') i++; return i; } /* * get_file_options: * * If vendor == NULL, find a line in the config file with only "OPTIONS="; * if vendor and model are set find the first OPTIONS line in the config * file that matches. Set argc and argv to match the OPTIONS string. * * vendor and model can end in '\n'. */ static int get_file_options(struct udev *udev, const char *vendor, const char *model, int *argc, char ***newargv) { char *buffer; FILE *fd; char *buf; char *str1; char *vendor_in, *model_in, *options_in; /* read in from file */ int lineno; int c; int retval = 0; dbg(udev, "vendor='%s'; model='%s'\n", vendor, model); fd = fopen(config_file, "r"); if (fd == NULL) { dbg(udev, "can't open %s\n", config_file); if (errno == ENOENT) { return 1; } else { err(udev, "can't open %s: %s\n", config_file, strerror(errno)); return -1; } } /* * Allocate a buffer rather than put it on the stack so we can * keep it around to parse any options (any allocated newargv * points into this buffer for its strings). */ buffer = malloc(MAX_BUFFER_LEN); if (!buffer) { fclose(fd); err(udev, "can't allocate memory\n"); return -1; } *newargv = NULL; lineno = 0; while (1) { vendor_in = model_in = options_in = NULL; buf = fgets(buffer, MAX_BUFFER_LEN, fd); if (buf == NULL) break; lineno++; if (buf[strlen(buffer) - 1] != '\n') { err(udev, "Config file line %d too long\n", lineno); break; } while (isspace(*buf)) buf++; /* blank or all whitespace line */ if (*buf == '\0') continue; /* comment line */ if (*buf == '#') continue; dbg(udev, "lineno %d: '%s'\n", lineno, buf); str1 = strsep(&buf, "="); if (str1 && strcasecmp(str1, "VENDOR") == 0) { str1 = get_value(&buf); if (!str1) { retval = -1; break; } vendor_in = str1; str1 = strsep(&buf, "="); if (str1 && strcasecmp(str1, "MODEL") == 0) { str1 = get_value(&buf); if (!str1) { retval = -1; break; } model_in = str1; str1 = strsep(&buf, "="); } } if (str1 && strcasecmp(str1, "OPTIONS") == 0) { str1 = get_value(&buf); if (!str1) { retval = -1; break; } options_in = str1; } dbg(udev, "config file line %d:\n" " vendor '%s'; model '%s'; options '%s'\n", lineno, vendor_in, model_in, options_in); /* * Only allow: [vendor=foo[,model=bar]]options=stuff */ if (!options_in || (!vendor_in && model_in)) { err(udev, "Error parsing config file line %d '%s'\n", lineno, buffer); retval = -1; break; } if (vendor == NULL) { if (vendor_in == NULL) { dbg(udev, "matched global option\n"); break; } } else if ((vendor_in && strncmp(vendor, vendor_in, strlen(vendor_in)) == 0) && (!model_in || (strncmp(model, model_in, strlen(model_in)) == 0))) { /* * Matched vendor and optionally model. * * Note: a short vendor_in or model_in can * give a partial match (that is FOO * matches FOOBAR). */ dbg(udev, "matched vendor/model\n"); break; } else { dbg(udev, "no match\n"); } } if (retval == 0) { if (vendor_in != NULL || model_in != NULL || options_in != NULL) { /* * Something matched. Allocate newargv, and store * values found in options_in. */ strcpy(buffer, options_in); c = argc_count(buffer) + 2; *newargv = calloc(c, sizeof(**newargv)); if (!*newargv) { err(udev, "can't allocate memory\n"); retval = -1; } else { *argc = c; c = 0; /* * argv[0] at 0 is skipped by getopt, but * store the buffer address there for * later freeing */ (*newargv)[c] = buffer; for (c = 1; c < *argc; c++) (*newargv)[c] = strsep(&buffer, " \t"); } } else { /* No matches */ retval = 1; } } if (retval != 0) free(buffer); fclose(fd); return retval; } static int set_options(struct udev *udev, int argc, char **argv, const char *short_opts, char *maj_min_dev) { int option; /* * optind is a global extern used by getopt. Since we can call * set_options twice (once for command line, and once for config * file) we have to reset this back to 1. */ optind = 1; while (1) { option = getopt_long(argc, argv, short_opts, options, NULL); if (option == -1) break; if (optarg) dbg(udev, "option '%c' arg '%s'\n", option, optarg); else dbg(udev, "option '%c'\n", option); switch (option) { case 'b': all_good = 0; break; case 'd': dev_specified = 1; util_strscpy(maj_min_dev, MAX_PATH_LEN, optarg); break; case 'e': use_stderr = 1; break; case 'f': util_strscpy(config_file, MAX_PATH_LEN, optarg); break; case 'g': all_good = 1; break; case 'h': printf("Usage: scsi_id OPTIONS \n" " --device= device node for SG_IO commands\n" " --config= location of config file\n" " --page=0x80|0x83|pre-spc3-83 SCSI page (0x80, 0x83, pre-spc3-83)\n" " --sg-version=3|4 use SGv3 or SGv4\n" " --blacklisted threat device as blacklisted\n" " --whitelisted threat device as whitelisted\n" " --replace-whitespace replace all whitespaces by underscores\n" " --verbose verbose logging\n" " --version print version\n" " --export print values as environment keys\n" " --help print this help text\n\n"); exit(0); case 'p': if (strcmp(optarg, "0x80") == 0) { default_page_code = PAGE_80; } else if (strcmp(optarg, "0x83") == 0) { default_page_code = PAGE_83; } else if (strcmp(optarg, "pre-spc3-83") == 0) { default_page_code = PAGE_83_PRE_SPC3; } else { err(udev, "Unknown page code '%s'\n", optarg); return -1; } break; case 's': sg_version = atoi(optarg); if (sg_version < 3 || sg_version > 4) { err(udev, "Unknown SG version '%s'\n", optarg); return -1; } break; case 'u': reformat_serial = 1; break; case 'x': export = 1; break; case 'v': debug++; break; case 'V': printf("%s\n", VERSION); exit(0); break; default: exit(1); } } if (optind < argc && !dev_specified) { dev_specified = 1; util_strscpy(maj_min_dev, MAX_PATH_LEN, argv[optind]); } return 0; } static int per_dev_options(struct udev *udev, struct scsi_id_device *dev_scsi, int *good_bad, int *page_code) { int retval; int newargc; char **newargv = NULL; int option; *good_bad = all_good; *page_code = default_page_code; retval = get_file_options(udev, vendor_str, model_str, &newargc, &newargv); optind = 1; /* reset this global extern */ while (retval == 0) { option = getopt_long(newargc, newargv, dev_short_options, options, NULL); if (option == -1) break; if (optarg) dbg(udev, "option '%c' arg '%s'\n", option, optarg); else dbg(udev, "option '%c'\n", option); switch (option) { case 'b': *good_bad = 0; break; case 'g': *good_bad = 1; break; case 'p': if (strcmp(optarg, "0x80") == 0) { *page_code = PAGE_80; } else if (strcmp(optarg, "0x83") == 0) { *page_code = PAGE_83; } else if (strcmp(optarg, "pre-spc3-83") == 0) { *page_code = PAGE_83_PRE_SPC3; } else { err(udev, "Unknown page code '%s'\n", optarg); retval = -1; } break; default: err(udev, "Unknown or bad option '%c' (0x%x)\n", option, option); retval = -1; break; } } if (newargv) { free(newargv[0]); free(newargv); } return retval; } static int set_inq_values(struct udev *udev, struct scsi_id_device *dev_scsi, const char *path) { int retval; dev_scsi->use_sg = sg_version; retval = scsi_std_inquiry(udev, dev_scsi, path); if (retval) return retval; udev_util_encode_string(dev_scsi->vendor, vendor_enc_str, sizeof(vendor_enc_str)); udev_util_encode_string(dev_scsi->model, model_enc_str, sizeof(model_enc_str)); util_replace_whitespace(dev_scsi->vendor, vendor_str, sizeof(vendor_str)); util_replace_chars(vendor_str, NULL); util_replace_whitespace(dev_scsi->model, model_str, sizeof(model_str)); util_replace_chars(model_str, NULL); set_type(dev_scsi->type, type_str, sizeof(type_str)); util_replace_whitespace(dev_scsi->revision, revision_str, sizeof(revision_str)); util_replace_chars(revision_str, NULL); return 0; } /* * scsi_id: try to get an id, if one is found, printf it to stdout. * returns a value passed to exit() - 0 if printed an id, else 1. */ static int scsi_id(struct udev *udev, char *maj_min_dev) { struct scsi_id_device dev_scsi; int good_dev; int page_code; int retval = 0; memset(&dev_scsi, 0x00, sizeof(struct scsi_id_device)); if (set_inq_values(udev, &dev_scsi, maj_min_dev) < 0) { retval = 1; goto out; } /* get per device (vendor + model) options from the config file */ per_dev_options(udev, &dev_scsi, &good_dev, &page_code); dbg(udev, "per dev options: good %d; page code 0x%x\n", good_dev, page_code); if (!good_dev) { retval = 1; goto out; } /* read serial number from mode pages (no values for optical drives) */ scsi_get_serial(udev, &dev_scsi, maj_min_dev, page_code, MAX_SERIAL_LEN); if (export) { char serial_str[MAX_SERIAL_LEN]; printf("ID_SCSI=1\n"); printf("ID_VENDOR=%s\n", vendor_str); printf("ID_VENDOR_ENC=%s\n", vendor_enc_str); printf("ID_MODEL=%s\n", model_str); printf("ID_MODEL_ENC=%s\n", model_enc_str); printf("ID_REVISION=%s\n", revision_str); printf("ID_TYPE=%s\n", type_str); if (dev_scsi.serial[0] != '\0') { util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)); util_replace_chars(serial_str, NULL); printf("ID_SERIAL=%s\n", serial_str); util_replace_whitespace(dev_scsi.serial_short, serial_str, sizeof(serial_str)); util_replace_chars(serial_str, NULL); printf("ID_SERIAL_SHORT=%s\n", serial_str); } if (dev_scsi.wwn[0] != '\0') { printf("ID_WWN=0x%s\n", dev_scsi.wwn); if (dev_scsi.wwn_vendor_extension[0] != '\0') { printf("ID_WWN_VENDOR_EXTENSION=0x%s\n", dev_scsi.wwn_vendor_extension); printf("ID_WWN_WITH_EXTENSION=0x%s%s\n", dev_scsi.wwn, dev_scsi.wwn_vendor_extension); } else { printf("ID_WWN_WITH_EXTENSION=0x%s\n", dev_scsi.wwn); } } if (dev_scsi.tgpt_group[0] != '\0') { printf("ID_TARGET_PORT=%s\n", dev_scsi.tgpt_group); } if (dev_scsi.unit_serial_number[0] != '\0') { printf("ID_SCSI_SERIAL=%s\n", dev_scsi.unit_serial_number); } goto out; } if (dev_scsi.serial[0] == '\0') { retval = 1; goto out; } if (reformat_serial) { char serial_str[MAX_SERIAL_LEN]; util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)); util_replace_chars(serial_str, NULL); printf("%s\n", serial_str); goto out; } printf("%s\n", dev_scsi.serial); out: return retval; } int main(int argc, char **argv) { struct udev *udev; int retval = 0; char maj_min_dev[MAX_PATH_LEN]; int newargc; char **newargv; udev = udev_new(); if (udev == NULL) goto exit; udev_log_init("scsi_id"); udev_set_log_fn(udev, log_fn); /* * Get config file options. */ newargv = NULL; retval = get_file_options(udev, NULL, NULL, &newargc, &newargv); if (retval < 0) { retval = 1; goto exit; } if (newargv && (retval == 0)) { if (set_options(udev, newargc, newargv, short_options, maj_min_dev) < 0) { retval = 2; goto exit; } free(newargv); } /* * Get command line options (overriding any config file settings). */ if (set_options(udev, argc, argv, short_options, maj_min_dev) < 0) exit(1); if (!dev_specified) { err(udev, "no device specified\n"); retval = 1; goto exit; } retval = scsi_id(udev, maj_min_dev); exit: udev_unref(udev); udev_log_close(); return retval; } udev-182/src/scsi_id/PaxHeaders.12492/scsi_serial.c0000644000521600052160000000013211711107662020235 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083332.858104838 30 ctime=1332097353.185438923 udev-182/src/scsi_id/scsi_serial.c0000664000521600052160000011325611711107662016651 0ustar00kaykay00000000000000/* * Copyright (C) IBM Corp. 2003 * * Author: Patrick Mansfield * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" #include "scsi.h" #include "scsi_id.h" /* * A priority based list of id, naa, and binary/ascii for the identifier * descriptor in VPD page 0x83. * * Brute force search for a match starting with the first value in the * following id_search_list. This is not a performance issue, since there * is normally one or some small number of descriptors. */ static const struct scsi_id_search_values id_search_list[] = { { SCSI_ID_TGTGROUP, SCSI_ID_NAA_DONT_CARE, SCSI_ID_BINARY }, { SCSI_ID_NAA, SCSI_ID_NAA_IEEE_REG_EXTENDED, SCSI_ID_BINARY }, { SCSI_ID_NAA, SCSI_ID_NAA_IEEE_REG_EXTENDED, SCSI_ID_ASCII }, { SCSI_ID_NAA, SCSI_ID_NAA_IEEE_REG, SCSI_ID_BINARY }, { SCSI_ID_NAA, SCSI_ID_NAA_IEEE_REG, SCSI_ID_ASCII }, /* * Devices already exist using NAA values that are now marked * reserved. These should not conflict with other values, or it is * a bug in the device. As long as we find the IEEE extended one * first, we really don't care what other ones are used. Using * don't care here means that a device that returns multiple * non-IEEE descriptors in a random order will get different * names. */ { SCSI_ID_NAA, SCSI_ID_NAA_DONT_CARE, SCSI_ID_BINARY }, { SCSI_ID_NAA, SCSI_ID_NAA_DONT_CARE, SCSI_ID_ASCII }, { SCSI_ID_EUI_64, SCSI_ID_NAA_DONT_CARE, SCSI_ID_BINARY }, { SCSI_ID_EUI_64, SCSI_ID_NAA_DONT_CARE, SCSI_ID_ASCII }, { SCSI_ID_T10_VENDOR, SCSI_ID_NAA_DONT_CARE, SCSI_ID_BINARY }, { SCSI_ID_T10_VENDOR, SCSI_ID_NAA_DONT_CARE, SCSI_ID_ASCII }, { SCSI_ID_VENDOR_SPECIFIC, SCSI_ID_NAA_DONT_CARE, SCSI_ID_BINARY }, { SCSI_ID_VENDOR_SPECIFIC, SCSI_ID_NAA_DONT_CARE, SCSI_ID_ASCII }, }; static const char hex_str[]="0123456789abcdef"; /* * Values returned in the result/status, only the ones used by the code * are used here. */ #define DID_NO_CONNECT 0x01 /* Unable to connect before timeout */ #define DID_BUS_BUSY 0x02 /* Bus remain busy until timeout */ #define DID_TIME_OUT 0x03 /* Timed out for some other reason */ #define DRIVER_TIMEOUT 0x06 #define DRIVER_SENSE 0x08 /* Sense_buffer has been set */ /* The following "category" function returns one of the following */ #define SG_ERR_CAT_CLEAN 0 /* No errors or other information */ #define SG_ERR_CAT_MEDIA_CHANGED 1 /* interpreted from sense buffer */ #define SG_ERR_CAT_RESET 2 /* interpreted from sense buffer */ #define SG_ERR_CAT_TIMEOUT 3 #define SG_ERR_CAT_RECOVERED 4 /* Successful command after recovered err */ #define SG_ERR_CAT_NOTSUPPORTED 5 /* Illegal / unsupported command */ #define SG_ERR_CAT_SENSE 98 /* Something else in the sense buffer */ #define SG_ERR_CAT_OTHER 99 /* Some other error/warning */ static int do_scsi_page80_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, char *serial, char *serial_short, int max_len); static int sg_err_category_new(struct udev *udev, int scsi_status, int msg_status, int host_status, int driver_status, const unsigned char *sense_buffer, int sb_len) { scsi_status &= 0x7e; /* * XXX change to return only two values - failed or OK. */ if (!scsi_status && !host_status && !driver_status) return SG_ERR_CAT_CLEAN; if ((scsi_status == SCSI_CHECK_CONDITION) || (scsi_status == SCSI_COMMAND_TERMINATED) || ((driver_status & 0xf) == DRIVER_SENSE)) { if (sense_buffer && (sb_len > 2)) { int sense_key; unsigned char asc; if (sense_buffer[0] & 0x2) { sense_key = sense_buffer[1] & 0xf; asc = sense_buffer[2]; } else { sense_key = sense_buffer[2] & 0xf; asc = (sb_len > 12) ? sense_buffer[12] : 0; } if (sense_key == RECOVERED_ERROR) return SG_ERR_CAT_RECOVERED; else if (sense_key == UNIT_ATTENTION) { if (0x28 == asc) return SG_ERR_CAT_MEDIA_CHANGED; if (0x29 == asc) return SG_ERR_CAT_RESET; } else if (sense_key == ILLEGAL_REQUEST) { return SG_ERR_CAT_NOTSUPPORTED; } } return SG_ERR_CAT_SENSE; } if (host_status) { if ((host_status == DID_NO_CONNECT) || (host_status == DID_BUS_BUSY) || (host_status == DID_TIME_OUT)) return SG_ERR_CAT_TIMEOUT; } if (driver_status) { if (driver_status == DRIVER_TIMEOUT) return SG_ERR_CAT_TIMEOUT; } return SG_ERR_CAT_OTHER; } static int sg_err_category3(struct udev *udev, struct sg_io_hdr *hp) { return sg_err_category_new(udev, hp->status, hp->msg_status, hp->host_status, hp->driver_status, hp->sbp, hp->sb_len_wr); } static int sg_err_category4(struct udev *udev, struct sg_io_v4 *hp) { return sg_err_category_new(udev, hp->device_status, 0, hp->transport_status, hp->driver_status, (unsigned char *)(uintptr_t)hp->response, hp->response_len); } static int scsi_dump_sense(struct udev *udev, struct scsi_id_device *dev_scsi, unsigned char *sense_buffer, int sb_len) { int s; int code; int sense_class; int sense_key; int asc, ascq; #ifdef DUMP_SENSE char out_buffer[256]; int i, j; #endif /* * Figure out and print the sense key, asc and ascq. * * If you want to suppress these for a particular drive model, add * a black list entry in the scsi_id config file. * * XXX We probably need to: lookup the sense/asc/ascq in a retry * table, and if found return 1 (after dumping the sense, asc, and * ascq). So, if/when we get something like a power on/reset, * we'll retry the command. */ dbg(udev, "got check condition\n"); if (sb_len < 1) { info(udev, "%s: sense buffer empty\n", dev_scsi->kernel); return -1; } sense_class = (sense_buffer[0] >> 4) & 0x07; code = sense_buffer[0] & 0xf; if (sense_class == 7) { /* * extended sense data. */ s = sense_buffer[7] + 8; if (sb_len < s) { info(udev, "%s: sense buffer too small %d bytes, %d bytes too short\n", dev_scsi->kernel, sb_len, s - sb_len); return -1; } if ((code == 0x0) || (code == 0x1)) { sense_key = sense_buffer[2] & 0xf; if (s < 14) { /* * Possible? */ info(udev, "%s: sense result too" " small %d bytes\n", dev_scsi->kernel, s); return -1; } asc = sense_buffer[12]; ascq = sense_buffer[13]; } else if ((code == 0x2) || (code == 0x3)) { sense_key = sense_buffer[1] & 0xf; asc = sense_buffer[2]; ascq = sense_buffer[3]; } else { info(udev, "%s: invalid sense code 0x%x\n", dev_scsi->kernel, code); return -1; } info(udev, "%s: sense key 0x%x ASC 0x%x ASCQ 0x%x\n", dev_scsi->kernel, sense_key, asc, ascq); } else { if (sb_len < 4) { info(udev, "%s: sense buffer too small %d bytes, %d bytes too short\n", dev_scsi->kernel, sb_len, 4 - sb_len); return -1; } if (sense_buffer[0] < 15) info(udev, "%s: old sense key: 0x%x\n", dev_scsi->kernel, sense_buffer[0] & 0x0f); else info(udev, "%s: sense = %2x %2x\n", dev_scsi->kernel, sense_buffer[0], sense_buffer[2]); info(udev, "%s: non-extended sense class %d code 0x%0x\n", dev_scsi->kernel, sense_class, code); } #ifdef DUMP_SENSE for (i = 0, j = 0; (i < s) && (j < 254); i++) { dbg(udev, "i %d, j %d\n", i, j); out_buffer[j++] = hex_str[(sense_buffer[i] & 0xf0) >> 4]; out_buffer[j++] = hex_str[sense_buffer[i] & 0x0f]; out_buffer[j++] = ' '; } out_buffer[j] = '\0'; info(udev, "%s: sense dump:\n", dev_scsi->kernel); info(udev, "%s: %s\n", dev_scsi->kernel, out_buffer); #endif return -1; } static int scsi_dump(struct udev *udev, struct scsi_id_device *dev_scsi, struct sg_io_hdr *io) { if (!io->status && !io->host_status && !io->msg_status && !io->driver_status) { /* * Impossible, should not be called. */ info(udev, "%s: called with no error\n", __FUNCTION__); return -1; } info(udev, "%s: sg_io failed status 0x%x 0x%x 0x%x 0x%x\n", dev_scsi->kernel, io->driver_status, io->host_status, io->msg_status, io->status); if (io->status == SCSI_CHECK_CONDITION) return scsi_dump_sense(udev, dev_scsi, io->sbp, io->sb_len_wr); else return -1; } static int scsi_dump_v4(struct udev *udev, struct scsi_id_device *dev_scsi, struct sg_io_v4 *io) { if (!io->device_status && !io->transport_status && !io->driver_status) { /* * Impossible, should not be called. */ info(udev, "%s: called with no error\n", __FUNCTION__); return -1; } info(udev, "%s: sg_io failed status 0x%x 0x%x 0x%x\n", dev_scsi->kernel, io->driver_status, io->transport_status, io->device_status); if (io->device_status == SCSI_CHECK_CONDITION) return scsi_dump_sense(udev, dev_scsi, (unsigned char *)(uintptr_t)io->response, io->response_len); else return -1; } static int scsi_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, unsigned char evpd, unsigned char page, unsigned char *buf, unsigned int buflen) { unsigned char inq_cmd[INQUIRY_CMDLEN] = { INQUIRY_CMD, evpd, page, 0, buflen, 0 }; unsigned char sense[SENSE_BUFF_LEN]; void *io_buf; struct sg_io_v4 io_v4; struct sg_io_hdr io_hdr; int retry = 3; /* rather random */ int retval; if (buflen > SCSI_INQ_BUFF_LEN) { info(udev, "buflen %d too long\n", buflen); return -1; } resend: dbg(udev, "%s evpd %d, page 0x%x\n", dev_scsi->kernel, evpd, page); if (dev_scsi->use_sg == 4) { memset(&io_v4, 0, sizeof(struct sg_io_v4)); io_v4.guard = 'Q'; io_v4.protocol = BSG_PROTOCOL_SCSI; io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; io_v4.request_len = sizeof(inq_cmd); io_v4.request = (uintptr_t)inq_cmd; io_v4.max_response_len = sizeof(sense); io_v4.response = (uintptr_t)sense; io_v4.din_xfer_len = buflen; io_v4.din_xferp = (uintptr_t)buf; io_buf = (void *)&io_v4; } else { memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); io_hdr.interface_id = 'S'; io_hdr.cmd_len = sizeof(inq_cmd); io_hdr.mx_sb_len = sizeof(sense); io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; io_hdr.dxfer_len = buflen; io_hdr.dxferp = buf; io_hdr.cmdp = inq_cmd; io_hdr.sbp = sense; io_hdr.timeout = DEF_TIMEOUT; io_buf = (void *)&io_hdr; } retval = ioctl(fd, SG_IO, io_buf); if (retval < 0) { if ((errno == EINVAL || errno == ENOSYS) && dev_scsi->use_sg == 4) { dev_scsi->use_sg = 3; goto resend; } info(udev, "%s: ioctl failed: %s\n", dev_scsi->kernel, strerror(errno)); goto error; } if (dev_scsi->use_sg == 4) retval = sg_err_category4(udev, io_buf); else retval = sg_err_category3(udev, io_buf); switch (retval) { case SG_ERR_CAT_NOTSUPPORTED: buf[1] = 0; /* Fallthrough */ case SG_ERR_CAT_CLEAN: case SG_ERR_CAT_RECOVERED: retval = 0; break; default: if (dev_scsi->use_sg == 4) retval = scsi_dump_v4(udev, dev_scsi, io_buf); else retval = scsi_dump(udev, dev_scsi, io_buf); } if (!retval) { retval = buflen; } else if (retval > 0) { if (--retry > 0) { dbg(udev, "%s: Retrying ...\n", dev_scsi->kernel); goto resend; } retval = -1; } error: if (retval < 0) info(udev, "%s: Unable to get INQUIRY vpd %d page 0x%x.\n", dev_scsi->kernel, evpd, page); return retval; } /* Get list of supported EVPD pages */ static int do_scsi_page0_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, unsigned char *buffer, unsigned int len) { int retval; memset(buffer, 0, len); retval = scsi_inquiry(udev, dev_scsi, fd, 1, 0x0, buffer, len); if (retval < 0) return 1; if (buffer[1] != 0) { info(udev, "%s: page 0 not available.\n", dev_scsi->kernel); return 1; } if (buffer[3] > len) { info(udev, "%s: page 0 buffer too long %d\n", dev_scsi->kernel, buffer[3]); return 1; } /* * Following check is based on code once included in the 2.5.x * kernel. * * Some ill behaved devices return the standard inquiry here * rather than the evpd data, snoop the data to verify. */ if (buffer[3] > MODEL_LENGTH) { /* * If the vendor id appears in the page assume the page is * invalid. */ if (!strncmp((char *)&buffer[VENDOR_LENGTH], dev_scsi->vendor, VENDOR_LENGTH)) { info(udev, "%s: invalid page0 data\n", dev_scsi->kernel); return 1; } } return 0; } /* * The caller checks that serial is long enough to include the vendor + * model. */ static int prepend_vendor_model(struct udev *udev, struct scsi_id_device *dev_scsi, char *serial) { int ind; strncpy(serial, dev_scsi->vendor, VENDOR_LENGTH); strncat(serial, dev_scsi->model, MODEL_LENGTH); ind = strlen(serial); /* * This is not a complete check, since we are using strncat/cpy * above, ind will never be too large. */ if (ind != (VENDOR_LENGTH + MODEL_LENGTH)) { info(udev, "%s: expected length %d, got length %d\n", dev_scsi->kernel, (VENDOR_LENGTH + MODEL_LENGTH), ind); return -1; } return ind; } /** * check_fill_0x83_id - check the page 0x83 id, if OK allocate and fill * serial number. **/ static int check_fill_0x83_id(struct udev *udev, struct scsi_id_device *dev_scsi, unsigned char *page_83, const struct scsi_id_search_values *id_search, char *serial, char *serial_short, int max_len, char *wwn, char *wwn_vendor_extension, char *tgpt_group) { int i, j, s, len; /* * ASSOCIATION must be with the device (value 0) * or with the target port for SCSI_ID_TGTPORT */ if ((page_83[1] & 0x30) == 0x10) { if (id_search->id_type != SCSI_ID_TGTGROUP) return 1; } else if ((page_83[1] & 0x30) != 0) { return 1; } if ((page_83[1] & 0x0f) != id_search->id_type) return 1; /* * Possibly check NAA sub-type. */ if ((id_search->naa_type != SCSI_ID_NAA_DONT_CARE) && (id_search->naa_type != (page_83[4] & 0xf0) >> 4)) return 1; /* * Check for matching code set - ASCII or BINARY. */ if ((page_83[0] & 0x0f) != id_search->code_set) return 1; /* * page_83[3]: identifier length */ len = page_83[3]; if ((page_83[0] & 0x0f) != SCSI_ID_ASCII) /* * If not ASCII, use two bytes for each binary value. */ len *= 2; /* * Add one byte for the NUL termination, and one for the id_type. */ len += 2; if (id_search->id_type == SCSI_ID_VENDOR_SPECIFIC) len += VENDOR_LENGTH + MODEL_LENGTH; if (max_len < len) { info(udev, "%s: length %d too short - need %d\n", dev_scsi->kernel, max_len, len); return 1; } if (id_search->id_type == SCSI_ID_TGTGROUP && tgpt_group != NULL) { unsigned int group; group = ((unsigned int)page_83[6] << 8) | page_83[7]; sprintf(tgpt_group,"%x", group); return 1; } serial[0] = hex_str[id_search->id_type]; /* * For SCSI_ID_VENDOR_SPECIFIC prepend the vendor and model before * the id since it is not unique across all vendors and models, * this differs from SCSI_ID_T10_VENDOR, where the vendor is * included in the identifier. */ if (id_search->id_type == SCSI_ID_VENDOR_SPECIFIC) if (prepend_vendor_model(udev, dev_scsi, &serial[1]) < 0) { dbg(udev, "prepend failed\n"); return 1; } i = 4; /* offset to the start of the identifier */ s = j = strlen(serial); if ((page_83[0] & 0x0f) == SCSI_ID_ASCII) { /* * ASCII descriptor. */ while (i < (4 + page_83[3])) serial[j++] = page_83[i++]; } else { /* * Binary descriptor, convert to ASCII, using two bytes of * ASCII for each byte in the page_83. */ while (i < (4 + page_83[3])) { serial[j++] = hex_str[(page_83[i] & 0xf0) >> 4]; serial[j++] = hex_str[page_83[i] & 0x0f]; i++; } } strcpy(serial_short, &serial[s]); if (id_search->id_type == SCSI_ID_NAA && wwn != NULL) { strncpy(wwn, &serial[s], 16); if (wwn_vendor_extension != NULL) { strncpy(wwn_vendor_extension, &serial[s + 16], 16); } } return 0; } /* Extract the raw binary from VPD 0x83 pre-SPC devices */ static int check_fill_0x83_prespc3(struct udev *udev, struct scsi_id_device *dev_scsi, unsigned char *page_83, const struct scsi_id_search_values *id_search, char *serial, char *serial_short, int max_len) { int i, j; dbg(udev, "using pre-spc3-83 for %s\n", dev_scsi->kernel); serial[0] = hex_str[id_search->id_type]; /* serial has been memset to zero before */ j = strlen(serial); /* j = 1; */ for (i = 0; (i < page_83[3]) && (j < max_len-3); ++i) { serial[j++] = hex_str[(page_83[4+i] & 0xf0) >> 4]; serial[j++] = hex_str[ page_83[4+i] & 0x0f]; } serial[max_len-1] = 0; strncpy(serial_short, serial, max_len-1); return 0; } /* Get device identification VPD page */ static int do_scsi_page83_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, char *serial, char *serial_short, int len, char *unit_serial_number, char *wwn, char *wwn_vendor_extension, char *tgpt_group) { int retval; unsigned int id_ind, j; unsigned char page_83[SCSI_INQ_BUFF_LEN]; /* also pick up the page 80 serial number */ do_scsi_page80_inquiry(udev, dev_scsi, fd, NULL, unit_serial_number, MAX_SERIAL_LEN); memset(page_83, 0, SCSI_INQ_BUFF_LEN); retval = scsi_inquiry(udev, dev_scsi, fd, 1, PAGE_83, page_83, SCSI_INQ_BUFF_LEN); if (retval < 0) return 1; if (page_83[1] != PAGE_83) { info(udev, "%s: Invalid page 0x83\n", dev_scsi->kernel); return 1; } /* * XXX Some devices (IBM 3542) return all spaces for an identifier if * the LUN is not actually configured. This leads to identifiers of * the form: "1 ". */ /* * Model 4, 5, and (some) model 6 EMC Symmetrix devices return * a page 83 reply according to SCSI-2 format instead of SPC-2/3. * * The SCSI-2 page 83 format returns an IEEE WWN in binary * encoded hexi-decimal in the 16 bytes following the initial * 4-byte page 83 reply header. * * Both the SPC-2 and SPC-3 formats return an IEEE WWN as part * of an Identification descriptor. The 3rd byte of the first * Identification descriptor is a reserved (BSZ) byte field. * * Reference the 7th byte of the page 83 reply to determine * whether the reply is compliant with SCSI-2 or SPC-2/3 * specifications. A zero value in the 7th byte indicates * an SPC-2/3 conformant reply, (i.e., the reserved field of the * first Identification descriptor). This byte will be non-zero * for a SCSI-2 conformant page 83 reply from these EMC * Symmetrix models since the 7th byte of the reply corresponds * to the 4th and 5th nibbles of the 6-byte OUI for EMC, that is, * 0x006048. */ if (page_83[6] != 0) return check_fill_0x83_prespc3(udev, dev_scsi, page_83, id_search_list, serial, serial_short, len); /* * Search for a match in the prioritized id_search_list - since WWN ids * come first we can pick up the WWN in check_fill_0x83_id(). */ for (id_ind = 0; id_ind < sizeof(id_search_list)/sizeof(id_search_list[0]); id_ind++) { /* * Examine each descriptor returned. There is normally only * one or a small number of descriptors. */ for (j = 4; j <= (unsigned int)page_83[3] + 3; j += page_83[j + 3] + 4) { retval = check_fill_0x83_id(udev, dev_scsi, &page_83[j], &id_search_list[id_ind], serial, serial_short, len, wwn, wwn_vendor_extension, tgpt_group); dbg(udev, "%s id desc %d/%d/%d\n", dev_scsi->kernel, id_search_list[id_ind].id_type, id_search_list[id_ind].naa_type, id_search_list[id_ind].code_set); if (!retval) { dbg(udev, " used\n"); return retval; } else if (retval < 0) { dbg(udev, " failed\n"); return retval; } else { dbg(udev, " not used\n"); } } } return 1; } /* * Get device identification VPD page for older SCSI-2 device which is not * compliant with either SPC-2 or SPC-3 format. * * Return the hard coded error code value 2 if the page 83 reply is not * conformant to the SCSI-2 format. */ static int do_scsi_page83_prespc3_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, char *serial, char *serial_short, int len) { int retval; int i, j; unsigned char page_83[SCSI_INQ_BUFF_LEN]; memset(page_83, 0, SCSI_INQ_BUFF_LEN); retval = scsi_inquiry(udev, dev_scsi, fd, 1, PAGE_83, page_83, SCSI_INQ_BUFF_LEN); if (retval < 0) return 1; if (page_83[1] != PAGE_83) { info(udev, "%s: Invalid page 0x83\n", dev_scsi->kernel); return 1; } /* * Model 4, 5, and (some) model 6 EMC Symmetrix devices return * a page 83 reply according to SCSI-2 format instead of SPC-2/3. * * The SCSI-2 page 83 format returns an IEEE WWN in binary * encoded hexi-decimal in the 16 bytes following the initial * 4-byte page 83 reply header. * * Both the SPC-2 and SPC-3 formats return an IEEE WWN as part * of an Identification descriptor. The 3rd byte of the first * Identification descriptor is a reserved (BSZ) byte field. * * Reference the 7th byte of the page 83 reply to determine * whether the reply is compliant with SCSI-2 or SPC-2/3 * specifications. A zero value in the 7th byte indicates * an SPC-2/3 conformant reply, (i.e., the reserved field of the * first Identification descriptor). This byte will be non-zero * for a SCSI-2 conformant page 83 reply from these EMC * Symmetrix models since the 7th byte of the reply corresponds * to the 4th and 5th nibbles of the 6-byte OUI for EMC, that is, * 0x006048. */ if (page_83[6] == 0) return 2; serial[0] = hex_str[id_search_list[0].id_type]; /* * The first four bytes contain data, not a descriptor. */ i = 4; j = strlen(serial); /* * Binary descriptor, convert to ASCII, * using two bytes of ASCII for each byte * in the page_83. */ while (i < (page_83[3]+4)) { serial[j++] = hex_str[(page_83[i] & 0xf0) >> 4]; serial[j++] = hex_str[page_83[i] & 0x0f]; i++; } dbg(udev, "using pre-spc3-83 for %s\n", dev_scsi->kernel); return 0; } /* Get unit serial number VPD page */ static int do_scsi_page80_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, int fd, char *serial, char *serial_short, int max_len) { int retval; int ser_ind; int i; int len; unsigned char buf[SCSI_INQ_BUFF_LEN]; memset(buf, 0, SCSI_INQ_BUFF_LEN); retval = scsi_inquiry(udev, dev_scsi, fd, 1, PAGE_80, buf, SCSI_INQ_BUFF_LEN); if (retval < 0) return retval; if (buf[1] != PAGE_80) { info(udev, "%s: Invalid page 0x80\n", dev_scsi->kernel); return 1; } len = 1 + VENDOR_LENGTH + MODEL_LENGTH + buf[3]; if (max_len < len) { info(udev, "%s: length %d too short - need %d\n", dev_scsi->kernel, max_len, len); return 1; } /* * Prepend 'S' to avoid unlikely collision with page 0x83 vendor * specific type where we prepend '0' + vendor + model. */ len = buf[3]; if (serial != NULL) { serial[0] = 'S'; ser_ind = prepend_vendor_model(udev, dev_scsi, &serial[1]); if (ser_ind < 0) return 1; for (i = 4; i < len + 4; i++, ser_ind++) serial[ser_ind] = buf[i]; } if (serial_short != NULL) { memcpy(serial_short, &buf[4], len); serial_short[len] = '\0'; } return 0; } int scsi_std_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname) { int fd; unsigned char buf[SCSI_INQ_BUFF_LEN]; struct stat statbuf; int err = 0; dbg(udev, "opening %s\n", devname); fd = open(devname, O_RDONLY | O_NONBLOCK); if (fd < 0) { info(udev, "scsi_id: cannot open %s: %s\n", devname, strerror(errno)); return 1; } if (fstat(fd, &statbuf) < 0) { info(udev, "scsi_id: cannot stat %s: %s\n", devname, strerror(errno)); err = 2; goto out; } sprintf(dev_scsi->kernel,"%d:%d", major(statbuf.st_rdev), minor(statbuf.st_rdev)); memset(buf, 0, SCSI_INQ_BUFF_LEN); err = scsi_inquiry(udev, dev_scsi, fd, 0, 0, buf, SCSI_INQ_BUFF_LEN); if (err < 0) goto out; err = 0; memcpy(dev_scsi->vendor, buf + 8, 8); dev_scsi->vendor[8] = '\0'; memcpy(dev_scsi->model, buf + 16, 16); dev_scsi->model[16] = '\0'; memcpy(dev_scsi->revision, buf + 32, 4); dev_scsi->revision[4] = '\0'; sprintf(dev_scsi->type,"%x", buf[0] & 0x1f); out: close(fd); return err; } int scsi_get_serial(struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname, int page_code, int len) { unsigned char page0[SCSI_INQ_BUFF_LEN]; int fd = -1; int cnt; int ind; int retval; memset(dev_scsi->serial, 0, len); dbg(udev, "opening %s\n", devname); srand((unsigned int)getpid()); for (cnt = 20; cnt > 0; cnt--) { struct timespec duration; fd = open(devname, O_RDONLY | O_NONBLOCK); if (fd >= 0 || errno != EBUSY) break; duration.tv_sec = 0; duration.tv_nsec = (200 * 1000 * 1000) + (rand() % 100 * 1000 * 1000); nanosleep(&duration, NULL); } if (fd < 0) return 1; if (page_code == PAGE_80) { if (do_scsi_page80_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len)) { retval = 1; goto completed; } else { retval = 0; goto completed; } } else if (page_code == PAGE_83) { if (do_scsi_page83_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len, dev_scsi->unit_serial_number, dev_scsi->wwn, dev_scsi->wwn_vendor_extension, dev_scsi->tgpt_group)) { retval = 1; goto completed; } else { retval = 0; goto completed; } } else if (page_code == PAGE_83_PRE_SPC3) { retval = do_scsi_page83_prespc3_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len); if (retval) { /* * Fallback to servicing a SPC-2/3 compliant page 83 * inquiry if the page 83 reply format does not * conform to pre-SPC3 expectations. */ if (retval == 2) { if (do_scsi_page83_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len, dev_scsi->unit_serial_number, dev_scsi->wwn, dev_scsi->wwn_vendor_extension, dev_scsi->tgpt_group)) { retval = 1; goto completed; } else { retval = 0; goto completed; } } else { retval = 1; goto completed; } } else { retval = 0; goto completed; } } else if (page_code != 0x00) { info(udev, "%s: unsupported page code 0x%d\n", dev_scsi->kernel, page_code); return 1; } /* * Get page 0, the page of the pages. By default, try from best to * worst of supported pages: 0x83 then 0x80. */ if (do_scsi_page0_inquiry(udev, dev_scsi, fd, page0, SCSI_INQ_BUFF_LEN)) { /* * Don't try anything else. Black list if a specific page * should be used for this vendor+model, or maybe have an * optional fall-back to page 0x80 or page 0x83. */ retval = 1; goto completed; } dbg(udev, "%s: Checking page0\n", dev_scsi->kernel); for (ind = 4; ind <= page0[3] + 3; ind++) if (page0[ind] == PAGE_83) if (!do_scsi_page83_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len, dev_scsi->unit_serial_number, dev_scsi->wwn, dev_scsi->wwn_vendor_extension, dev_scsi->tgpt_group)) { /* * Success */ retval = 0; goto completed; } for (ind = 4; ind <= page0[3] + 3; ind++) if (page0[ind] == PAGE_80) if (!do_scsi_page80_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len)) { /* * Success */ retval = 0; goto completed; } retval = 1; completed: close(fd); return retval; } udev-182/src/scsi_id/PaxHeaders.12492/scsi.h0000644000521600052160000000013211711107662016703 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083332.897104839 30 ctime=1332097353.194438924 udev-182/src/scsi_id/scsi.h0000664000521600052160000000523611711107662015315 0ustar00kaykay00000000000000/* * scsi.h * * General scsi and linux scsi specific defines and structs. * * Copyright (C) IBM Corp. 2003 * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation version 2 of the License. */ #include struct scsi_ioctl_command { unsigned int inlen; /* excluding scsi command length */ unsigned int outlen; unsigned char data[1]; /* on input, scsi command starts here then opt. data */ }; /* * Default 5 second timeout */ #define DEF_TIMEOUT 5000 #define SENSE_BUFF_LEN 32 /* * The request buffer size passed to the SCSI INQUIRY commands, use 254, * as this is a nice value for some devices, especially some of the usb * mass storage devices. */ #define SCSI_INQ_BUFF_LEN 254 /* * SCSI INQUIRY vendor and model (really product) lengths. */ #define VENDOR_LENGTH 8 #define MODEL_LENGTH 16 #define INQUIRY_CMD 0x12 #define INQUIRY_CMDLEN 6 /* * INQUIRY VPD page 0x83 identifier descriptor related values. Reference the * SCSI Primary Commands specification for details. */ /* * id type values of id descriptors. These are assumed to fit in 4 bits. */ #define SCSI_ID_VENDOR_SPECIFIC 0 #define SCSI_ID_T10_VENDOR 1 #define SCSI_ID_EUI_64 2 #define SCSI_ID_NAA 3 #define SCSI_ID_RELPORT 4 #define SCSI_ID_TGTGROUP 5 #define SCSI_ID_LUNGROUP 6 #define SCSI_ID_MD5 7 #define SCSI_ID_NAME 8 /* * Supported NAA values. These fit in 4 bits, so the "don't care" value * cannot conflict with real values. */ #define SCSI_ID_NAA_DONT_CARE 0xff #define SCSI_ID_NAA_IEEE_REG 5 #define SCSI_ID_NAA_IEEE_REG_EXTENDED 6 /* * Supported Code Set values. */ #define SCSI_ID_BINARY 1 #define SCSI_ID_ASCII 2 struct scsi_id_search_values { u_char id_type; u_char naa_type; u_char code_set; }; /* * Following are the "true" SCSI status codes. Linux has traditionally * used a 1 bit right and masked version of these. So now CHECK_CONDITION * and friends (in ) are deprecated. */ #define SCSI_CHECK_CONDITION 0x2 #define SCSI_CONDITION_MET 0x4 #define SCSI_BUSY 0x8 #define SCSI_IMMEDIATE 0x10 #define SCSI_IMMEDIATE_CONDITION_MET 0x14 #define SCSI_RESERVATION_CONFLICT 0x18 #define SCSI_COMMAND_TERMINATED 0x22 #define SCSI_TASK_SET_FULL 0x28 #define SCSI_ACA_ACTIVE 0x30 #define SCSI_TASK_ABORTED 0x40 udev-182/src/scsi_id/PaxHeaders.12492/scsi_id.80000644000521600052160000000013211711107662017277 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083868.581117604 30 ctime=1332097352.780438915 udev-182/src/scsi_id/scsi_id.80000664000521600052160000000725011711107662015707 0ustar00kaykay00000000000000.TH SCSI_ID 8 "December 2003" "" "Linux Administrator's Manual" .SH NAME scsi_id \- retrieve and generate a unique SCSI identifier .SH SYNOPSIS .BI scsi_id [\fIoptions\fP] .SH "DESCRIPTION" .B scsi_id queries a SCSI device via the SCSI INQUIRY vital product data (VPD) page 0x80 or 0x83 and uses the resulting data to generate a value that is unique across all SCSI devices that properly support page 0x80 or page 0x83. If a result is generated it is sent to standard output, and the program exits with a zero value. If no identifier is output, the program exits with a non\-zero value. \fBscsi_id\fP is primarily for use by other utilities such as \fBudev\fP that require a unique SCSI identifier. By default all devices are assumed black listed, the \fB\-\-whitelisted\fP option must be specified on the command line or in the config file for any useful behaviour. SCSI commands are sent directly to the device via the SG_IO ioctl interface. In order to generate unique values for either page 0x80 or page 0x83, the serial numbers or world wide names are prefixed as follows. Identifiers based on page 0x80 are prefixed by the character 'S', the SCSI vendor, the SCSI product (model) and then the the serial number returned by page 0x80. For example: .sp .nf # /usr/lib/udev/scsi_id \-\-page=0x80 \-\-whitelisted \-\-device=/dev/sda SIBM 3542 1T05078453 .fi .P Identifiers based on page 0x83 are prefixed by the identifier type followed by the page 0x83 identifier. For example, a device with a NAA (Name Address Authority) type of 3 (also in this case the page 0x83 identifier starts with the NAA value of 6): .sp .nf # /usr/lib/udev/scsi_id \-\-page=0x83 \-\-whitelisted \-\-device=/dev/sda 3600a0b80000b174b000000d63efc5c8c .fi .P .SH OPTIONS .TP .BI \-\-blacklisted The default behaviour \- treat the device as black listed, and do nothing unless a white listed device is found in the scsi_id config\-file. .TP .BI \-\-device=\| device\^ Send SG_IO commands to \fBdevice\fP, such as \fB/dev/sdc\fP. .TP .BI \-\-config=\| config\-file Read configuration and black/white list entries from .B config\-file rather than the default .B /etc/scsi_id.config file. .TP .BI \-\-whitelisted Treat the device as white listed. The \fB\-\-whitelisted\fP option must be specified on the command line or in the scsi_id configuration file for .B scsi_id to generate any output. .TP .BI \-\-page=\| 0x80 | 0x83 | pre-spc3-83 Use SCSI INQUIRY VPD page code 0x80, 0x83, or pre-spc3-83. .sp The default behaviour is to query the available VPD pages, and use page 0x83 if found, else page 0x80 if found, else nothing. .sp Page pre-spc3-83 should only be utilized for those scsi devices which are not compliant with the SPC-2 or SPC-3 format for page 83. While this option is used for older model 4, 5, and 6 EMC Symmetrix devices, its use with SPC-2 or SPC-3 compliant devices will fallback to the page 83 format supported by these devices. .TP .BI \-\-replace-whitespace Reformat the output : replace all whitespaces by underscores. .TP .BI \-\-export Export all data in KEY= format used to import in other programs. .TP .BI \-\-verbose Generate verbose debugging output. .TP .BI \-\-version Display version number and exit. .RE .SH "FILES" .nf .ft B .ft .TP \fI/etc/scsi_id.config\fP Configuration of black/white list entries and per device options: # one config per line, short match strings match longer strings # vendor=string[,model=string],options= vendor="ATA",options=-p 0x80 .RE .fi .LP .SH "SEE ALSO" .BR udev (7) .SH AUTHORS Developed by Patrick Mansfield based on SCSI ID source included in earlier linux 2.5 kernels, sg_utils source, and SCSI specifications. udev-182/src/scsi_id/PaxHeaders.12492/scsi_id.h0000644000521600052160000000013211711107662017357 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083332.737104835 30 ctime=1332097353.201438925 udev-182/src/scsi_id/scsi_id.h0000664000521600052160000000450311711107662015765 0ustar00kaykay00000000000000/* * Copyright (C) IBM Corp. 2003 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #define MAX_PATH_LEN 512 /* * MAX_ATTR_LEN: maximum length of the result of reading a sysfs * attribute. */ #define MAX_ATTR_LEN 256 /* * MAX_SERIAL_LEN: the maximum length of the serial number, including * added prefixes such as vendor and product (model) strings. */ #define MAX_SERIAL_LEN 256 /* * MAX_BUFFER_LEN: maximum buffer size and line length used while reading * the config file. */ #define MAX_BUFFER_LEN 256 struct scsi_id_device { char vendor[9]; char model[17]; char revision[5]; char type[33]; char kernel[64]; char serial[MAX_SERIAL_LEN]; char serial_short[MAX_SERIAL_LEN]; int use_sg; /* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */ char unit_serial_number[MAX_SERIAL_LEN]; /* NULs if not set - otherwise hex encoding using lower-case e.g. '50014ee0016eb572' */ char wwn[17]; /* NULs if not set - otherwise hex encoding using lower-case e.g. '0xe00000d80000' */ char wwn_vendor_extension[17]; /* NULs if not set - otherwise decimal number */ char tgpt_group[8]; }; extern int scsi_std_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname); extern int scsi_get_serial (struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname, int page_code, int len); /* * Page code values. */ enum page_code { PAGE_83_PRE_SPC3 = -0x83, PAGE_UNSPECIFIED = 0x00, PAGE_80 = 0x80, PAGE_83 = 0x83, }; udev-182/src/PaxHeaders.12492/udev-builtin-kmod.c0000644000521600052160000000013211714063447017664 xustar000000000000000030 mtime=1328572199.678236944 30 atime=1332083327.332104707 30 ctime=1332097353.329438927 udev-182/src/udev-builtin-kmod.c0000664000521600052160000001034711714063447016275 0ustar00kaykay00000000000000/* * load kernel modules * * Copyright (C) 2011 Kay Sievers * Copyright (C) 2011 ProFUSION embedded systems * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "udev.h" static struct kmod_ctx *ctx; static int load_module(struct udev *udev, const char *alias) { struct kmod_list *list = NULL; struct kmod_list *l; int err; err = kmod_module_new_from_lookup(ctx, alias, &list); if (err < 0) return err; if (list == NULL) info(udev, "no module matches '%s'\n", alias); kmod_list_foreach(l, list) { struct kmod_module *mod = kmod_module_get_module(l); err = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, NULL, NULL, NULL, NULL); if (err == KMOD_PROBE_APPLY_BLACKLIST) info(udev, "module '%s' is blacklisted\n", kmod_module_get_name(mod)); else if (err == 0) info(udev, "inserted '%s'\n", kmod_module_get_name(mod)); else info(udev, "failed to insert '%s'\n", kmod_module_get_name(mod)); kmod_module_unref(mod); } kmod_module_unref_list(list); return err; } static void udev_kmod_log(void *data, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { udev_main_log(data, priority, file, line, fn, format, args); } /* needs to re-instantiate the context after a reload */ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev *udev = udev_device_get_udev(dev); int i; if (!ctx) { ctx = kmod_new(NULL, NULL); if (!ctx) return -ENOMEM; info(udev, "load module index\n"); kmod_set_log_fn(ctx, udev_kmod_log, udev); kmod_load_resources(ctx); } if (argc < 3 || strcmp(argv[1], "load")) { err(udev, "expect: %s load \n", argv[0]); return EXIT_FAILURE; } for (i = 2; argv[i]; i++) { info(udev, "execute '%s' '%s'\n", argv[1], argv[i]); load_module(udev, argv[i]); } return EXIT_SUCCESS; } /* called at udev startup */ static int builtin_kmod_init(struct udev *udev) { if (ctx) return 0; ctx = kmod_new(NULL, NULL); if (!ctx) return -ENOMEM; info(udev, "load module index\n"); kmod_set_log_fn(ctx, udev_kmod_log, udev); kmod_load_resources(ctx); return 0; } /* called on udev shutdown and reload request */ static void builtin_kmod_exit(struct udev *udev) { info(udev, "unload module index\n"); ctx = kmod_unref(ctx); } /* called every couple of seconds during event activity; 'true' if config has changed */ static bool builtin_kmod_validate(struct udev *udev) { info(udev, "validate module index\n"); if (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK) return true; return false; } const struct udev_builtin udev_builtin_kmod = { .name = "kmod", .cmd = builtin_kmod, .init = builtin_kmod_init, .exit = builtin_kmod_exit, .validate = builtin_kmod_validate, .help = "kernel module loader", .run_once = false, }; udev-182/src/PaxHeaders.12492/udev-builtin-firmware.c0000644000521600052160000000013211711107662020541 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083327.017104699 30 ctime=1332097353.299438926 udev-182/src/udev-builtin-firmware.c0000664000521600052160000001300311711107662017142 0ustar00kaykay00000000000000/* * firmware - Kernel firmware loader * * Copyright (C) 2009 Piter Punk * Copyright (C) 2009-2011 Kay Sievers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details:* */ #include #include #include #include #include #include #include #include #include #include "udev.h" static bool set_loading(struct udev *udev, char *loadpath, const char *state) { FILE *ldfile; ldfile = fopen(loadpath, "we"); if (ldfile == NULL) { err(udev, "error: can not open '%s'\n", loadpath); return false; }; fprintf(ldfile, "%s\n", state); fclose(ldfile); return true; } static bool copy_firmware(struct udev *udev, const char *source, const char *target, size_t size) { char *buf; FILE *fsource = NULL, *ftarget = NULL; bool ret = false; buf = malloc(size); if (buf == NULL) { err(udev,"No memory available to load firmware file"); return false; } info(udev, "writing '%s' (%zi) to '%s'\n", source, size, target); fsource = fopen(source, "re"); if (fsource == NULL) goto exit; ftarget = fopen(target, "we"); if (ftarget == NULL) goto exit; if (fread(buf, size, 1, fsource) != 1) goto exit; if (fwrite(buf, size, 1, ftarget) == 1) ret = true; exit: if (ftarget != NULL) fclose(ftarget); if (fsource != NULL) fclose(fsource); free(buf); return ret; } static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev *udev = udev_device_get_udev(dev); static const char *searchpath[] = { FIRMWARE_PATH }; char fwencpath[UTIL_PATH_SIZE]; char misspath[UTIL_PATH_SIZE]; char loadpath[UTIL_PATH_SIZE]; char datapath[UTIL_PATH_SIZE]; char fwpath[UTIL_PATH_SIZE]; const char *firmware; FILE *fwfile; struct utsname kernel; struct stat statbuf; unsigned int i; int rc = EXIT_SUCCESS; firmware = udev_device_get_property_value(dev, "FIRMWARE"); if (firmware == NULL) { err(udev, "firmware parameter missing\n\n"); rc = EXIT_FAILURE; goto exit; } /* lookup firmware file */ uname(&kernel); for (i = 0; i < ARRAY_SIZE(searchpath); i++) { util_strscpyl(fwpath, sizeof(fwpath), searchpath[i], kernel.release, "/", firmware, NULL); dbg(udev, "trying %s\n", fwpath); fwfile = fopen(fwpath, "re"); if (fwfile != NULL) break; util_strscpyl(fwpath, sizeof(fwpath), searchpath[i], firmware, NULL); dbg(udev, "trying %s\n", fwpath); fwfile = fopen(fwpath, "re"); if (fwfile != NULL) break; } util_path_encode(firmware, fwencpath, sizeof(fwencpath)); util_strscpyl(misspath, sizeof(misspath), udev_get_run_path(udev), "/firmware-missing/", fwencpath, NULL); util_strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL); if (fwfile == NULL) { int err; /* This link indicates the missing firmware file and the associated device */ info(udev, "did not find firmware file '%s'\n", firmware); do { err = util_create_path(udev, misspath); if (err != 0 && err != -ENOENT) break; err = symlink(udev_device_get_devpath(dev), misspath); if (err != 0) err = -errno; } while (err == -ENOENT); rc = EXIT_FAILURE; set_loading(udev, loadpath, "-1"); goto exit; } if (stat(fwpath, &statbuf) < 0 || statbuf.st_size == 0) { rc = EXIT_FAILURE; goto exit; } if (unlink(misspath) == 0) util_delete_path(udev, misspath); if (!set_loading(udev, loadpath, "1")) goto exit; util_strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL); if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) { err(udev, "error sending firmware '%s' to device\n", firmware); set_loading(udev, loadpath, "-1"); rc = EXIT_FAILURE; goto exit; }; set_loading(udev, loadpath, "0"); exit: if (fwfile) fclose(fwfile); return rc; } const struct udev_builtin udev_builtin_firmware = { .name = "firmware", .cmd = builtin_firmware, .help = "kernel firmware loader", .run_once = true, }; udev-182/src/PaxHeaders.12492/ata_id0000644000521600052160000000013211731430511015312 xustar000000000000000030 mtime=1332097353.098438921 30 atime=1332097354.348438951 30 ctime=1332097353.098438921 udev-182/src/ata_id/0000775000521600052160000000000011731430511013773 5ustar00kaykay00000000000000udev-182/src/ata_id/PaxHeaders.12492/ata_id.c0000644000521600052160000000013211727757663017005 xustar000000000000000030 mtime=1331683251.220734316 30 atime=1332083331.609104808 30 ctime=1332097353.099438921 udev-182/src/ata_id/ata_id.c0000664000521600052160000007100511727757663015414 0ustar00kaykay00000000000000/* * ata_id - reads product/serial number from ATA drives * * Copyright (C) 2005-2008 Kay Sievers * Copyright (C) 2009 Lennart Poettering * Copyright (C) 2009-2010 David Zeuthen * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" #define COMMAND_TIMEOUT_MSEC (30 * 1000) static int disk_scsi_inquiry_command(int fd, void *buf, size_t buf_len) { struct sg_io_v4 io_v4; uint8_t cdb[6]; uint8_t sense[32]; int ret; /* * INQUIRY, see SPC-4 section 6.4 */ memset(cdb, 0, sizeof(cdb)); cdb[0] = 0x12; /* OPERATION CODE: INQUIRY */ cdb[3] = (buf_len >> 8); /* ALLOCATION LENGTH */ cdb[4] = (buf_len & 0xff); memset(sense, 0, sizeof(sense)); memset(&io_v4, 0, sizeof(struct sg_io_v4)); io_v4.guard = 'Q'; io_v4.protocol = BSG_PROTOCOL_SCSI; io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; io_v4.request_len = sizeof (cdb); io_v4.request = (uintptr_t) cdb; io_v4.max_response_len = sizeof (sense); io_v4.response = (uintptr_t) sense; io_v4.din_xfer_len = buf_len; io_v4.din_xferp = (uintptr_t) buf; io_v4.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_v4); if (ret != 0) { /* could be that the driver doesn't do version 4, try version 3 */ if (errno == EINVAL) { struct sg_io_hdr io_hdr; memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); io_hdr.interface_id = 'S'; io_hdr.cmdp = (unsigned char*) cdb; io_hdr.cmd_len = sizeof (cdb); io_hdr.dxferp = buf; io_hdr.dxfer_len = buf_len; io_hdr.sbp = sense; io_hdr.mx_sb_len = sizeof (sense); io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; io_hdr.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_hdr); if (ret != 0) goto out; /* even if the ioctl succeeds, we need to check the return value */ if (!(io_hdr.status == 0 && io_hdr.host_status == 0 && io_hdr.driver_status == 0)) { errno = EIO; ret = -1; goto out; } } else { goto out; } } /* even if the ioctl succeeds, we need to check the return value */ if (!(io_v4.device_status == 0 && io_v4.transport_status == 0 && io_v4.driver_status == 0)) { errno = EIO; ret = -1; goto out; } out: return ret; } static int disk_identify_command(int fd, void *buf, size_t buf_len) { struct sg_io_v4 io_v4; uint8_t cdb[12]; uint8_t sense[32]; uint8_t *desc = sense+8; int ret; /* * ATA Pass-Through 12 byte command, as described in * * T10 04-262r8 ATA Command Pass-Through * * from http://www.t10.org/ftp/t10/document.04/04-262r8.pdf */ memset(cdb, 0, sizeof(cdb)); cdb[0] = 0xa1; /* OPERATION CODE: 12 byte pass through */ cdb[1] = 4 << 1; /* PROTOCOL: PIO Data-in */ cdb[2] = 0x2e; /* OFF_LINE=0, CK_COND=1, T_DIR=1, BYT_BLOK=1, T_LENGTH=2 */ cdb[3] = 0; /* FEATURES */ cdb[4] = 1; /* SECTORS */ cdb[5] = 0; /* LBA LOW */ cdb[6] = 0; /* LBA MID */ cdb[7] = 0; /* LBA HIGH */ cdb[8] = 0 & 0x4F; /* SELECT */ cdb[9] = 0xEC; /* Command: ATA IDENTIFY DEVICE */; memset(sense, 0, sizeof(sense)); memset(&io_v4, 0, sizeof(struct sg_io_v4)); io_v4.guard = 'Q'; io_v4.protocol = BSG_PROTOCOL_SCSI; io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; io_v4.request_len = sizeof (cdb); io_v4.request = (uintptr_t) cdb; io_v4.max_response_len = sizeof (sense); io_v4.response = (uintptr_t) sense; io_v4.din_xfer_len = buf_len; io_v4.din_xferp = (uintptr_t) buf; io_v4.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_v4); if (ret != 0) { /* could be that the driver doesn't do version 4, try version 3 */ if (errno == EINVAL) { struct sg_io_hdr io_hdr; memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); io_hdr.interface_id = 'S'; io_hdr.cmdp = (unsigned char*) cdb; io_hdr.cmd_len = sizeof (cdb); io_hdr.dxferp = buf; io_hdr.dxfer_len = buf_len; io_hdr.sbp = sense; io_hdr.mx_sb_len = sizeof (sense); io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; io_hdr.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_hdr); if (ret != 0) goto out; } else { goto out; } } if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) { errno = EIO; ret = -1; goto out; } out: return ret; } static int disk_identify_packet_device_command(int fd, void *buf, size_t buf_len) { struct sg_io_v4 io_v4; uint8_t cdb[16]; uint8_t sense[32]; uint8_t *desc = sense+8; int ret; /* * ATA Pass-Through 16 byte command, as described in * * T10 04-262r8 ATA Command Pass-Through * * from http://www.t10.org/ftp/t10/document.04/04-262r8.pdf */ memset(cdb, 0, sizeof(cdb)); cdb[0] = 0x85; /* OPERATION CODE: 16 byte pass through */ cdb[1] = 4 << 1; /* PROTOCOL: PIO Data-in */ cdb[2] = 0x2e; /* OFF_LINE=0, CK_COND=1, T_DIR=1, BYT_BLOK=1, T_LENGTH=2 */ cdb[3] = 0; /* FEATURES */ cdb[4] = 0; /* FEATURES */ cdb[5] = 0; /* SECTORS */ cdb[6] = 1; /* SECTORS */ cdb[7] = 0; /* LBA LOW */ cdb[8] = 0; /* LBA LOW */ cdb[9] = 0; /* LBA MID */ cdb[10] = 0; /* LBA MID */ cdb[11] = 0; /* LBA HIGH */ cdb[12] = 0; /* LBA HIGH */ cdb[13] = 0; /* DEVICE */ cdb[14] = 0xA1; /* Command: ATA IDENTIFY PACKET DEVICE */; cdb[15] = 0; /* CONTROL */ memset(sense, 0, sizeof(sense)); memset(&io_v4, 0, sizeof(struct sg_io_v4)); io_v4.guard = 'Q'; io_v4.protocol = BSG_PROTOCOL_SCSI; io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; io_v4.request_len = sizeof (cdb); io_v4.request = (uintptr_t) cdb; io_v4.max_response_len = sizeof (sense); io_v4.response = (uintptr_t) sense; io_v4.din_xfer_len = buf_len; io_v4.din_xferp = (uintptr_t) buf; io_v4.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_v4); if (ret != 0) { /* could be that the driver doesn't do version 4, try version 3 */ if (errno == EINVAL) { struct sg_io_hdr io_hdr; memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); io_hdr.interface_id = 'S'; io_hdr.cmdp = (unsigned char*) cdb; io_hdr.cmd_len = sizeof (cdb); io_hdr.dxferp = buf; io_hdr.dxfer_len = buf_len; io_hdr.sbp = sense; io_hdr.mx_sb_len = sizeof (sense); io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; io_hdr.timeout = COMMAND_TIMEOUT_MSEC; ret = ioctl(fd, SG_IO, &io_hdr); if (ret != 0) goto out; } else { goto out; } } if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) { errno = EIO; ret = -1; goto out; } out: return ret; } /** * disk_identify_get_string: * @identify: A block of IDENTIFY data * @offset_words: Offset of the string to get, in words. * @dest: Destination buffer for the string. * @dest_len: Length of destination buffer, in bytes. * * Copies the ATA string from @identify located at @offset_words into @dest. */ static void disk_identify_get_string(uint8_t identify[512], unsigned int offset_words, char *dest, size_t dest_len) { unsigned int c1; unsigned int c2; assert(identify != NULL); assert(dest != NULL); assert((dest_len & 1) == 0); while (dest_len > 0) { c1 = identify[offset_words * 2 + 1]; c2 = identify[offset_words * 2]; *dest = c1; dest++; *dest = c2; dest++; offset_words++; dest_len -= 2; } } static void disk_identify_fixup_string(uint8_t identify[512], unsigned int offset_words, size_t len) { disk_identify_get_string(identify, offset_words, (char *) identify + offset_words * 2, len); } static void disk_identify_fixup_uint16 (uint8_t identify[512], unsigned int offset_words) { uint16_t *p; p = (uint16_t *) identify; p[offset_words] = le16toh (p[offset_words]); } /** * disk_identify: * @udev: The libudev context. * @fd: File descriptor for the block device. * @out_identify: Return location for IDENTIFY data. * @out_is_packet_device: Return location for whether returned data is from a IDENTIFY PACKET DEVICE. * * Sends the IDENTIFY DEVICE or IDENTIFY PACKET DEVICE command to the * device represented by @fd. If successful, then the result will be * copied into @out_identify and @out_is_packet_device. * * This routine is based on code from libatasmart, Copyright 2008 * Lennart Poettering, LGPL v2.1. * * Returns: 0 if the data was successfully obtained, otherwise * non-zero with errno set. */ static int disk_identify(struct udev *udev, int fd, uint8_t out_identify[512], int *out_is_packet_device) { int ret; uint8_t inquiry_buf[36]; int peripheral_device_type; int all_nul_bytes; int n; int is_packet_device; assert(out_identify != NULL); /* init results */ ret = -1; memset(out_identify, '\0', 512); is_packet_device = 0; /* If we were to use ATA PASS_THROUGH (12) on an ATAPI device * we could accidentally blank media. This is because MMC's BLANK * command has the same op-code (0x61). * * To prevent this from happening we bail out if the device * isn't a Direct Access Block Device, e.g. SCSI type 0x00 * (CD/DVD devices are type 0x05). So we send a SCSI INQUIRY * command first... libata is handling this via its SCSI * emulation layer. * * This also ensures that we're actually dealing with a device * that understands SCSI commands. * * (Yes, it is a bit perverse that we're tunneling the ATA * command through SCSI and relying on the ATA driver * emulating SCSI well-enough...) * * (See commit 160b069c25690bfb0c785994c7c3710289179107 for * the original bug-fix and see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556635 * for the original bug-report.) */ ret = disk_scsi_inquiry_command (fd, inquiry_buf, sizeof (inquiry_buf)); if (ret != 0) goto out; /* SPC-4, section 6.4.2: Standard INQUIRY data */ peripheral_device_type = inquiry_buf[0] & 0x1f; if (peripheral_device_type == 0x05) { is_packet_device = 1; ret = disk_identify_packet_device_command(fd, out_identify, 512); goto check_nul_bytes; } if (peripheral_device_type != 0x00) { ret = -1; errno = EIO; goto out; } /* OK, now issue the IDENTIFY DEVICE command */ ret = disk_identify_command(fd, out_identify, 512); if (ret != 0) goto out; check_nul_bytes: /* Check if IDENTIFY data is all NUL bytes - if so, bail */ all_nul_bytes = 1; for (n = 0; n < 512; n++) { if (out_identify[n] != '\0') { all_nul_bytes = 0; break; } } if (all_nul_bytes) { ret = -1; errno = EIO; goto out; } out: if (out_is_packet_device != NULL) *out_is_packet_device = is_packet_device; return ret; } static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { vsyslog(priority, format, args); } int main(int argc, char *argv[]) { struct udev *udev; struct hd_driveid id; uint8_t identify[512]; uint16_t *identify_words; char model[41]; char model_enc[256]; char serial[21]; char revision[9]; const char *node = NULL; int export = 0; int fd; uint16_t word; int rc = 0; int is_packet_device = 0; static const struct option options[] = { { "export", no_argument, NULL, 'x' }, { "help", no_argument, NULL, 'h' }, {} }; udev = udev_new(); if (udev == NULL) goto exit; udev_log_init("ata_id"); udev_set_log_fn(udev, log_fn); while (1) { int option; option = getopt_long(argc, argv, "xh", options, NULL); if (option == -1) break; switch (option) { case 'x': export = 1; break; case 'h': printf("Usage: ata_id [--export] [--help] \n" " --export print values as environment keys\n" " --help print this help text\n\n"); goto exit; } } node = argv[optind]; if (node == NULL) { err(udev, "no node specified\n"); rc = 1; goto exit; } fd = open(node, O_RDONLY|O_NONBLOCK); if (fd < 0) { err(udev, "unable to open '%s'\n", node); rc = 1; goto exit; } if (disk_identify(udev, fd, identify, &is_packet_device) == 0) { /* * fix up only the fields from the IDENTIFY data that we are going to * use and copy it into the hd_driveid struct for convenience */ disk_identify_fixup_string (identify, 10, 20); /* serial */ disk_identify_fixup_string (identify, 23, 6); /* fwrev */ disk_identify_fixup_string (identify, 27, 40); /* model */ disk_identify_fixup_uint16 (identify, 0); /* configuration */ disk_identify_fixup_uint16 (identify, 75); /* queue depth */ disk_identify_fixup_uint16 (identify, 75); /* SATA capabilities */ disk_identify_fixup_uint16 (identify, 82); /* command set supported */ disk_identify_fixup_uint16 (identify, 83); /* command set supported */ disk_identify_fixup_uint16 (identify, 84); /* command set supported */ disk_identify_fixup_uint16 (identify, 85); /* command set supported */ disk_identify_fixup_uint16 (identify, 86); /* command set supported */ disk_identify_fixup_uint16 (identify, 87); /* command set supported */ disk_identify_fixup_uint16 (identify, 89); /* time required for SECURITY ERASE UNIT */ disk_identify_fixup_uint16 (identify, 90); /* time required for enhanced SECURITY ERASE UNIT */ disk_identify_fixup_uint16 (identify, 91); /* current APM values */ disk_identify_fixup_uint16 (identify, 94); /* current AAM value */ disk_identify_fixup_uint16 (identify, 128); /* device lock function */ disk_identify_fixup_uint16 (identify, 217); /* nominal media rotation rate */ memcpy(&id, identify, sizeof id); } else { /* If this fails, then try HDIO_GET_IDENTITY */ if (ioctl(fd, HDIO_GET_IDENTITY, &id) != 0) { info(udev, "HDIO_GET_IDENTITY failed for '%s': %m\n", node); rc = 2; goto close; } } identify_words = (uint16_t *) identify; memcpy (model, id.model, 40); model[40] = '\0'; udev_util_encode_string(model, model_enc, sizeof(model_enc)); util_replace_whitespace((char *) id.model, model, 40); util_replace_chars(model, NULL); util_replace_whitespace((char *) id.serial_no, serial, 20); util_replace_chars(serial, NULL); util_replace_whitespace((char *) id.fw_rev, revision, 8); util_replace_chars(revision, NULL); if (export) { /* Set this to convey the disk speaks the ATA protocol */ printf("ID_ATA=1\n"); if ((id.config >> 8) & 0x80) { /* This is an ATAPI device */ switch ((id.config >> 8) & 0x1f) { case 0: printf("ID_TYPE=cd\n"); break; case 1: printf("ID_TYPE=tape\n"); break; case 5: printf("ID_TYPE=cd\n"); break; case 7: printf("ID_TYPE=optical\n"); break; default: printf("ID_TYPE=generic\n"); break; } } else { printf("ID_TYPE=disk\n"); } printf("ID_BUS=ata\n"); printf("ID_MODEL=%s\n", model); printf("ID_MODEL_ENC=%s\n", model_enc); printf("ID_REVISION=%s\n", revision); if (serial[0] != '\0') { printf("ID_SERIAL=%s_%s\n", model, serial); printf("ID_SERIAL_SHORT=%s\n", serial); } else { printf("ID_SERIAL=%s\n", model); } if (id.command_set_1 & (1<<5)) { printf ("ID_ATA_WRITE_CACHE=1\n"); printf ("ID_ATA_WRITE_CACHE_ENABLED=%d\n", (id.cfs_enable_1 & (1<<5)) ? 1 : 0); } if (id.command_set_1 & (1<<10)) { printf("ID_ATA_FEATURE_SET_HPA=1\n"); printf("ID_ATA_FEATURE_SET_HPA_ENABLED=%d\n", (id.cfs_enable_1 & (1<<10)) ? 1 : 0); /* * TODO: use the READ NATIVE MAX ADDRESS command to get the native max address * so it is easy to check whether the protected area is in use. */ } if (id.command_set_1 & (1<<3)) { printf("ID_ATA_FEATURE_SET_PM=1\n"); printf("ID_ATA_FEATURE_SET_PM_ENABLED=%d\n", (id.cfs_enable_1 & (1<<3)) ? 1 : 0); } if (id.command_set_1 & (1<<1)) { printf("ID_ATA_FEATURE_SET_SECURITY=1\n"); printf("ID_ATA_FEATURE_SET_SECURITY_ENABLED=%d\n", (id.cfs_enable_1 & (1<<1)) ? 1 : 0); printf("ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=%d\n", id.trseuc * 2); if ((id.cfs_enable_1 & (1<<1))) /* enabled */ { if (id.dlf & (1<<8)) printf("ID_ATA_FEATURE_SET_SECURITY_LEVEL=maximum\n"); else printf("ID_ATA_FEATURE_SET_SECURITY_LEVEL=high\n"); } if (id.dlf & (1<<5)) printf("ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=%d\n", id.trsEuc * 2); if (id.dlf & (1<<4)) printf("ID_ATA_FEATURE_SET_SECURITY_EXPIRE=1\n"); if (id.dlf & (1<<3)) printf("ID_ATA_FEATURE_SET_SECURITY_FROZEN=1\n"); if (id.dlf & (1<<2)) printf("ID_ATA_FEATURE_SET_SECURITY_LOCKED=1\n"); } if (id.command_set_1 & (1<<0)) { printf("ID_ATA_FEATURE_SET_SMART=1\n"); printf("ID_ATA_FEATURE_SET_SMART_ENABLED=%d\n", (id.cfs_enable_1 & (1<<0)) ? 1 : 0); } if (id.command_set_2 & (1<<9)) { printf("ID_ATA_FEATURE_SET_AAM=1\n"); printf("ID_ATA_FEATURE_SET_AAM_ENABLED=%d\n", (id.cfs_enable_2 & (1<<9)) ? 1 : 0); printf("ID_ATA_FEATURE_SET_AAM_VENDOR_RECOMMENDED_VALUE=%d\n", id.acoustic >> 8); printf("ID_ATA_FEATURE_SET_AAM_CURRENT_VALUE=%d\n", id.acoustic & 0xff); } if (id.command_set_2 & (1<<5)) { printf("ID_ATA_FEATURE_SET_PUIS=1\n"); printf("ID_ATA_FEATURE_SET_PUIS_ENABLED=%d\n", (id.cfs_enable_2 & (1<<5)) ? 1 : 0); } if (id.command_set_2 & (1<<3)) { printf("ID_ATA_FEATURE_SET_APM=1\n"); printf("ID_ATA_FEATURE_SET_APM_ENABLED=%d\n", (id.cfs_enable_2 & (1<<3)) ? 1 : 0); if ((id.cfs_enable_2 & (1<<3))) printf("ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=%d\n", id.CurAPMvalues & 0xff); } if (id.command_set_2 & (1<<0)) printf("ID_ATA_DOWNLOAD_MICROCODE=1\n"); /* * Word 76 indicates the capabilities of a SATA device. A PATA device shall set * word 76 to 0000h or FFFFh. If word 76 is set to 0000h or FFFFh, then * the device does not claim compliance with the Serial ATA specification and words * 76 through 79 are not valid and shall be ignored. */ word = *((uint16_t *) identify + 76); if (word != 0x0000 && word != 0xffff) { printf("ID_ATA_SATA=1\n"); /* * If bit 2 of word 76 is set to one, then the device supports the Gen2 * signaling rate of 3.0 Gb/s (see SATA 2.6). * * If bit 1 of word 76 is set to one, then the device supports the Gen1 * signaling rate of 1.5 Gb/s (see SATA 2.6). */ if (word & (1<<2)) printf("ID_ATA_SATA_SIGNAL_RATE_GEN2=1\n"); if (word & (1<<1)) printf("ID_ATA_SATA_SIGNAL_RATE_GEN1=1\n"); } /* Word 217 indicates the nominal media rotation rate of the device */ word = *((uint16_t *) identify + 217); if (word != 0x0000) { if (word == 0x0001) { printf ("ID_ATA_ROTATION_RATE_RPM=0\n"); /* non-rotating e.g. SSD */ } else if (word >= 0x0401 && word <= 0xfffe) { printf ("ID_ATA_ROTATION_RATE_RPM=%d\n", word); } } /* * Words 108-111 contain a mandatory World Wide Name (WWN) in the NAA IEEE Registered identifier * format. Word 108 bits (15:12) shall contain 5h, indicating that the naming authority is IEEE. * All other values are reserved. */ word = *((uint16_t *) identify + 108); if ((word & 0xf000) == 0x5000) { uint64_t wwwn; wwwn = *((uint16_t *) identify + 108); wwwn <<= 16; wwwn |= *((uint16_t *) identify + 109); wwwn <<= 16; wwwn |= *((uint16_t *) identify + 110); wwwn <<= 16; wwwn |= *((uint16_t *) identify + 111); printf("ID_WWN=0x%llx\n", (unsigned long long int) wwwn); /* ATA devices have no vendor extension */ printf("ID_WWN_WITH_EXTENSION=0x%llx\n", (unsigned long long int) wwwn); } /* from Linux's include/linux/ata.h */ if (identify_words[0] == 0x848a || identify_words[0] == 0x844a) { printf("ID_ATA_CFA=1\n"); } else { if ((identify_words[83] & 0xc004) == 0x4004) { printf("ID_ATA_CFA=1\n"); } } } else { if (serial[0] != '\0') printf("%s_%s\n", model, serial); else printf("%s\n", model); } close: close(fd); exit: udev_unref(udev); udev_log_close(); return rc; } udev-182/src/PaxHeaders.12492/libudev.c0000644000521600052160000000013211730121223015740 xustar000000000000000030 mtime=1331733139.453892044 30 atime=1332082819.341092602 30 ctime=1332097352.996438919 udev-182/src/libudev.c0000664000521600052160000003266511730121223014360 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008-2010 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /** * SECTION:libudev * @short_description: libudev context * * The context contains the default values read from the udev config file, * and is passed to all library operations. */ /** * udev: * * Opaque object representing the library context. */ struct udev { int refcount; void (*log_fn)(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args); void *userdata; char *sys_path; char *dev_path; char *rules_path[4]; unsigned long long rules_path_ts[4]; int rules_path_count; char *run_path; struct udev_list properties_list; int log_priority; }; void udev_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, ...) { va_list args; va_start(args, format); udev->log_fn(udev, priority, file, line, fn, format, args); va_end(args); } static void log_stderr(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { fprintf(stderr, "libudev: %s: ", fn); vfprintf(stderr, format, args); } /** * udev_get_userdata: * @udev: udev library context * * Retrieve stored data pointer from library context. This might be useful * to access from callbacks like a custom logging function. * * Returns: stored userdata **/ UDEV_EXPORT void *udev_get_userdata(struct udev *udev) { if (udev == NULL) return NULL; return udev->userdata; } /** * udev_set_userdata: * @udev: udev library context * @userdata: data pointer * * Store custom @userdata in the library context. **/ UDEV_EXPORT void udev_set_userdata(struct udev *udev, void *userdata) { if (udev == NULL) return; udev->userdata = userdata; } static char *set_value(char **s, const char *v) { free(*s); *s = strdup(v); util_remove_trailing_chars(*s, '/'); return *s; } /** * udev_new: * * Create udev library context. This reads the udev configuration * file, and fills in the default values. * * The initial refcount is 1, and needs to be decremented to * release the resources of the udev library context. * * Returns: a new udev library context **/ UDEV_EXPORT struct udev *udev_new(void) { struct udev *udev; const char *env; char *config_file = NULL; FILE *f; udev = calloc(1, sizeof(struct udev)); if (udev == NULL) return NULL; udev->refcount = 1; udev->log_fn = log_stderr; udev->log_priority = LOG_ERR; udev_list_init(udev, &udev->properties_list, true); /* custom config file */ env = getenv("UDEV_CONFIG_FILE"); if (env != NULL) { if (set_value(&config_file, env) == NULL) goto err; udev_add_property(udev, "UDEV_CONFIG_FILE", config_file); } /* default config file */ if (config_file == NULL) config_file = strdup(SYSCONFDIR "/udev/udev.conf"); if (config_file == NULL) goto err; f = fopen(config_file, "re"); if (f != NULL) { char line[UTIL_LINE_SIZE]; int line_nr = 0; while (fgets(line, sizeof(line), f)) { size_t len; char *key; char *val; line_nr++; /* find key */ key = line; while (isspace(key[0])) key++; /* comment or empty line */ if (key[0] == '#' || key[0] == '\0') continue; /* split key/value */ val = strchr(key, '='); if (val == NULL) { err(udev, "missing = in '%s'[%i], skip line\n", config_file, line_nr); continue; } val[0] = '\0'; val++; /* find value */ while (isspace(val[0])) val++; /* terminate key */ len = strlen(key); if (len == 0) continue; while (isspace(key[len-1])) len--; key[len] = '\0'; /* terminate value */ len = strlen(val); if (len == 0) continue; while (isspace(val[len-1])) len--; val[len] = '\0'; if (len == 0) continue; /* unquote */ if (val[0] == '"' || val[0] == '\'') { if (val[len-1] != val[0]) { err(udev, "inconsistent quoting in '%s'[%i], skip line\n", config_file, line_nr); continue; } val[len-1] = '\0'; val++; } if (strcmp(key, "udev_log") == 0) { udev_set_log_priority(udev, util_log_priority(val)); continue; } if (strcmp(key, "udev_root") == 0) { set_value(&udev->dev_path, val); continue; } if (strcmp(key, "udev_run") == 0) { set_value(&udev->run_path, val); continue; } if (strcmp(key, "udev_sys") == 0) { set_value(&udev->sys_path, val); continue; } if (strcmp(key, "udev_rules") == 0) { set_value(&udev->rules_path[0], val); udev->rules_path_count = 1; continue; } } fclose(f); } /* environment overrides config */ env = getenv("UDEV_LOG"); if (env != NULL) udev_set_log_priority(udev, util_log_priority(env)); /* set defaults */ if (udev->dev_path == NULL) if (set_value(&udev->dev_path, "/dev") == NULL) goto err; if (udev->sys_path == NULL) if (set_value(&udev->sys_path, "/sys") == NULL) goto err; if (udev->run_path == NULL) if (set_value(&udev->run_path, "/run/udev") == NULL) goto err; if (udev->rules_path[0] == NULL) { /* /usr/lib/udev -- system rules */ udev->rules_path[0] = strdup(PKGLIBEXECDIR "/rules.d"); if (!udev->rules_path[0]) goto err; /* /run/udev -- runtime rules */ if (asprintf(&udev->rules_path[2], "%s/rules.d", udev->run_path) < 0) goto err; /* /etc/udev -- local administration rules */ udev->rules_path[1] = strdup(SYSCONFDIR "/udev/rules.d"); if (!udev->rules_path[1]) goto err; udev->rules_path_count = 3; } dbg(udev, "context %p created\n", udev); dbg(udev, "log_priority=%d\n", udev->log_priority); dbg(udev, "config_file='%s'\n", config_file); dbg(udev, "dev_path='%s'\n", udev->dev_path); dbg(udev, "sys_path='%s'\n", udev->sys_path); dbg(udev, "run_path='%s'\n", udev->run_path); dbg(udev, "rules_path='%s':'%s':'%s'\n", udev->rules_path[0], udev->rules_path[1], udev->rules_path[2]); free(config_file); return udev; err: free(config_file); err(udev, "context creation failed\n"); udev_unref(udev); return NULL; } /** * udev_ref: * @udev: udev library context * * Take a reference of the udev library context. * * Returns: the passed udev library context **/ UDEV_EXPORT struct udev *udev_ref(struct udev *udev) { if (udev == NULL) return NULL; udev->refcount++; return udev; } /** * udev_unref: * @udev: udev library context * * Drop a reference of the udev library context. If the refcount * reaches zero, the resources of the context will be released. * **/ UDEV_EXPORT void udev_unref(struct udev *udev) { if (udev == NULL) return; udev->refcount--; if (udev->refcount > 0) return; udev_list_cleanup(&udev->properties_list); free(udev->dev_path); free(udev->sys_path); free(udev->rules_path[0]); free(udev->rules_path[1]); free(udev->rules_path[2]); free(udev->run_path); dbg(udev, "context %p released\n", udev); free(udev); } /** * udev_set_log_fn: * @udev: udev library context * @log_fn: function to be called for logging messages * * The built-in logging writes to stderr. It can be * overridden by a custom function, to plug log messages * into the users' logging functionality. * **/ UDEV_EXPORT void udev_set_log_fn(struct udev *udev, void (*log_fn)(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args)) { udev->log_fn = log_fn; info(udev, "custom logging function %p registered\n", log_fn); } /** * udev_get_log_priority: * @udev: udev library context * * The initial logging priority is read from the udev config file * at startup. * * Returns: the current logging priority **/ UDEV_EXPORT int udev_get_log_priority(struct udev *udev) { return udev->log_priority; } /** * udev_set_log_priority: * @udev: udev library context * @priority: the new logging priority * * Set the current logging priority. The value controls which messages * are logged. **/ UDEV_EXPORT void udev_set_log_priority(struct udev *udev, int priority) { char num[32]; udev->log_priority = priority; snprintf(num, sizeof(num), "%u", udev->log_priority); udev_add_property(udev, "UDEV_LOG", num); } int udev_get_rules_path(struct udev *udev, char **path[], unsigned long long *stamp_usec[]) { *path = udev->rules_path; if (stamp_usec) *stamp_usec = udev->rules_path_ts; return udev->rules_path_count; } /** * udev_get_sys_path: * @udev: udev library context * * Retrieve the sysfs mount point. The default is "/sys". For * testing purposes, it can be overridden with udev_sys= * in the udev configuration file. * * Returns: the sys mount point **/ UDEV_EXPORT const char *udev_get_sys_path(struct udev *udev) { if (udev == NULL) return NULL; return udev->sys_path; } /** * udev_get_dev_path: * @udev: udev library context * * Retrieve the device directory path. The default value is "/dev", * the actual value may be overridden in the udev configuration * file. * * Returns: the device directory path **/ UDEV_EXPORT const char *udev_get_dev_path(struct udev *udev) { if (udev == NULL) return NULL; return udev->dev_path; } /** * udev_get_run_path: * @udev: udev library context * * Retrieve the udev runtime directory path. The default is "/run/udev". * * Returns: the runtime directory path **/ UDEV_EXPORT const char *udev_get_run_path(struct udev *udev) { if (udev == NULL) return NULL; return udev->run_path; } struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value) { if (value == NULL) { struct udev_list_entry *list_entry; list_entry = udev_get_properties_list_entry(udev); list_entry = udev_list_entry_get_by_name(list_entry, key); if (list_entry != NULL) udev_list_entry_delete(list_entry); return NULL; } return udev_list_entry_add(&udev->properties_list, key, value); } struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev) { return udev_list_get_entry(&udev->properties_list); } udev-182/src/PaxHeaders.12492/udevadm-control.c0000644000521600052160000000013111711107662017422 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083327.956104721 29 ctime=1332097353.38843893 udev-182/src/udevadm-control.c0000664000521600052160000001450511711107662016034 0ustar00kaykay00000000000000/* * Copyright (C) 2005-2011 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static void print_help(void) { printf("Usage: udevadm control COMMAND\n" " --exit instruct the daemon to cleanup and exit\n" " --log-priority= set the udev log level for the daemon\n" " --stop-exec-queue do not execute events, queue only\n" " --start-exec-queue execute events, flush queue\n" " --reload reload rules and databases\n" " --property== set a global property for all events\n" " --children-max= maximum number of children\n" " --timeout= maximum time to block for a reply\n" " --help print this help text\n\n"); } static int adm_control(struct udev *udev, int argc, char *argv[]) { struct udev_ctrl *uctrl = NULL; int timeout = 60; int rc = 1; static const struct option options[] = { { "exit", no_argument, NULL, 'e' }, { "log-priority", required_argument, NULL, 'l' }, { "stop-exec-queue", no_argument, NULL, 's' }, { "start-exec-queue", no_argument, NULL, 'S' }, { "reload", no_argument, NULL, 'R' }, { "reload-rules", no_argument, NULL, 'R' }, { "property", required_argument, NULL, 'p' }, { "env", required_argument, NULL, 'p' }, { "children-max", required_argument, NULL, 'm' }, { "timeout", required_argument, NULL, 't' }, { "help", no_argument, NULL, 'h' }, {} }; if (getuid() != 0) { fprintf(stderr, "root privileges required\n"); return 1; } uctrl = udev_ctrl_new(udev); if (uctrl == NULL) return 2; for (;;) { int option; option = getopt_long(argc, argv, "el:sSRp:m:h", options, NULL); if (option == -1) break; switch (option) { case 'e': if (udev_ctrl_send_exit(uctrl, timeout) < 0) rc = 2; else rc = 0; break; case 'l': { int i; i = util_log_priority(optarg); if (i < 0) { fprintf(stderr, "invalid number '%s'\n", optarg); goto out; } if (udev_ctrl_send_set_log_level(uctrl, util_log_priority(optarg), timeout) < 0) rc = 2; else rc = 0; break; } case 's': if (udev_ctrl_send_stop_exec_queue(uctrl, timeout) < 0) rc = 2; else rc = 0; break; case 'S': if (udev_ctrl_send_start_exec_queue(uctrl, timeout) < 0) rc = 2; else rc = 0; break; case 'R': if (udev_ctrl_send_reload(uctrl, timeout) < 0) rc = 2; else rc = 0; break; case 'p': if (strchr(optarg, '=') == NULL) { fprintf(stderr, "expect = instead of '%s'\n", optarg); goto out; } if (udev_ctrl_send_set_env(uctrl, optarg, timeout) < 0) rc = 2; else rc = 0; break; case 'm': { char *endp; int i; i = strtoul(optarg, &endp, 0); if (endp[0] != '\0' || i < 1) { fprintf(stderr, "invalid number '%s'\n", optarg); goto out; } if (udev_ctrl_send_set_children_max(uctrl, i, timeout) < 0) rc = 2; else rc = 0; break; } case 't': { int seconds; seconds = atoi(optarg); if (seconds >= 0) timeout = seconds; else fprintf(stderr, "invalid timeout value\n"); break; } case 'h': print_help(); rc = 0; break; } } if (argv[optind] != NULL) fprintf(stderr, "unknown option\n"); else if (optind == 1) fprintf(stderr, "missing option\n"); out: udev_ctrl_unref(uctrl); return rc; } const struct udevadm_cmd udevadm_control = { .name = "control", .cmd = adm_control, .help = "control the udev daemon", }; udev-182/src/PaxHeaders.12492/udevadm-monitor.c0000644000521600052160000000013211711107662017432 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083328.043104723 30 ctime=1332097353.399438929 udev-182/src/udevadm-monitor.c0000664000521600052160000002666111711107662016051 0ustar00kaykay00000000000000/* * Copyright (C) 2004-2010 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static bool udev_exit; static void sig_handler(int signum) { if (signum == SIGINT || signum == SIGTERM) udev_exit = true; } static void print_device(struct udev_device *device, const char *source, int prop) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); printf("%-6s[%llu.%06u] %-8s %s (%s)\n", source, (unsigned long long) ts.tv_sec, (unsigned int) ts.tv_nsec/1000, udev_device_get_action(device), udev_device_get_devpath(device), udev_device_get_subsystem(device)); if (prop) { struct udev_list_entry *list_entry; udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(device)) printf("%s=%s\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); printf("\n"); } } static int adm_monitor(struct udev *udev, int argc, char *argv[]) { struct sigaction act; sigset_t mask; int option; bool prop = false; bool print_kernel = false; bool print_udev = false; struct udev_list subsystem_match_list; struct udev_list tag_match_list; struct udev_monitor *udev_monitor = NULL; struct udev_monitor *kernel_monitor = NULL; int fd_ep = -1; int fd_kernel = -1, fd_udev = -1; struct epoll_event ep_kernel, ep_udev; int rc = 0; static const struct option options[] = { { "property", no_argument, NULL, 'p' }, { "environment", no_argument, NULL, 'e' }, { "kernel", no_argument, NULL, 'k' }, { "udev", no_argument, NULL, 'u' }, { "subsystem-match", required_argument, NULL, 's' }, { "tag-match", required_argument, NULL, 't' }, { "help", no_argument, NULL, 'h' }, {} }; udev_list_init(udev, &subsystem_match_list, true); udev_list_init(udev, &tag_match_list, true); for (;;) { option = getopt_long(argc, argv, "pekus:t:h", options, NULL); if (option == -1) break; switch (option) { case 'p': case 'e': prop = true; break; case 'k': print_kernel = true; break; case 'u': print_udev = true; break; case 's': { char subsys[UTIL_NAME_SIZE]; char *devtype; util_strscpy(subsys, sizeof(subsys), optarg); devtype = strchr(subsys, '/'); if (devtype != NULL) { devtype[0] = '\0'; devtype++; } udev_list_entry_add(&subsystem_match_list, subsys, devtype); break; } case 't': udev_list_entry_add(&tag_match_list, optarg, NULL); break; case 'h': printf("Usage: udevadm monitor [--property] [--kernel] [--udev] [--help]\n" " --property print the event properties\n" " --kernel print kernel uevents\n" " --udev print udev events\n" " --subsystem-match= filter events by subsystem\n" " --tag-match= filter events by tag\n" " --help\n\n"); goto out; default: rc = 1; goto out; } } if (!print_kernel && !print_udev) { print_kernel = true; print_udev = true; } /* set signal handlers */ memset(&act, 0x00, sizeof(struct sigaction)); act.sa_handler = sig_handler; sigemptyset(&act.sa_mask); act.sa_flags = SA_RESTART; sigaction(SIGINT, &act, NULL); sigaction(SIGTERM, &act, NULL); sigemptyset(&mask); sigaddset(&mask, SIGINT); sigaddset(&mask, SIGTERM); sigprocmask(SIG_UNBLOCK, &mask, NULL); fd_ep = epoll_create1(EPOLL_CLOEXEC); if (fd_ep < 0) { err(udev, "error creating epoll fd: %m\n"); goto out; } printf("monitor will print the received events for:\n"); if (print_udev) { struct udev_list_entry *entry; udev_monitor = udev_monitor_new_from_netlink(udev, "udev"); if (udev_monitor == NULL) { fprintf(stderr, "error: unable to create netlink socket\n"); rc = 1; goto out; } udev_monitor_set_receive_buffer_size(udev_monitor, 128*1024*1024); fd_udev = udev_monitor_get_fd(udev_monitor); udev_list_entry_foreach(entry, udev_list_get_entry(&subsystem_match_list)) { const char *subsys = udev_list_entry_get_name(entry); const char *devtype = udev_list_entry_get_value(entry); if (udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, subsys, devtype) < 0) fprintf(stderr, "error: unable to apply subsystem filter '%s'\n", subsys); } udev_list_entry_foreach(entry, udev_list_get_entry(&tag_match_list)) { const char *tag = udev_list_entry_get_name(entry); if (udev_monitor_filter_add_match_tag(udev_monitor, tag) < 0) fprintf(stderr, "error: unable to apply tag filter '%s'\n", tag); } if (udev_monitor_enable_receiving(udev_monitor) < 0) { fprintf(stderr, "error: unable to subscribe to udev events\n"); rc = 2; goto out; } memset(&ep_udev, 0, sizeof(struct epoll_event)); ep_udev.events = EPOLLIN; ep_udev.data.fd = fd_udev; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_udev, &ep_udev) < 0) { err(udev, "fail to add fd to epoll: %m\n"); goto out; } printf("UDEV - the event which udev sends out after rule processing\n"); } if (print_kernel) { struct udev_list_entry *entry; kernel_monitor = udev_monitor_new_from_netlink(udev, "kernel"); if (kernel_monitor == NULL) { fprintf(stderr, "error: unable to create netlink socket\n"); rc = 3; goto out; } udev_monitor_set_receive_buffer_size(kernel_monitor, 128*1024*1024); fd_kernel = udev_monitor_get_fd(kernel_monitor); udev_list_entry_foreach(entry, udev_list_get_entry(&subsystem_match_list)) { const char *subsys = udev_list_entry_get_name(entry); if (udev_monitor_filter_add_match_subsystem_devtype(kernel_monitor, subsys, NULL) < 0) fprintf(stderr, "error: unable to apply subsystem filter '%s'\n", subsys); } if (udev_monitor_enable_receiving(kernel_monitor) < 0) { fprintf(stderr, "error: unable to subscribe to kernel events\n"); rc = 4; goto out; } memset(&ep_kernel, 0, sizeof(struct epoll_event)); ep_kernel.events = EPOLLIN; ep_kernel.data.fd = fd_kernel; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_kernel, &ep_kernel) < 0) { err(udev, "fail to add fd to epoll: %m\n"); goto out; } printf("KERNEL - the kernel uevent\n"); } printf("\n"); while (!udev_exit) { int fdcount; struct epoll_event ev[4]; int i; fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), -1); if (fdcount < 0) { if (errno != EINTR) fprintf(stderr, "error receiving uevent message: %m\n"); continue; } for (i = 0; i < fdcount; i++) { if (ev[i].data.fd == fd_kernel && ev[i].events & EPOLLIN) { struct udev_device *device; device = udev_monitor_receive_device(kernel_monitor); if (device == NULL) continue; print_device(device, "KERNEL", prop); udev_device_unref(device); } else if (ev[i].data.fd == fd_udev && ev[i].events & EPOLLIN) { struct udev_device *device; device = udev_monitor_receive_device(udev_monitor); if (device == NULL) continue; print_device(device, "UDEV", prop); udev_device_unref(device); } } } out: if (fd_ep >= 0) close(fd_ep); udev_monitor_unref(udev_monitor); udev_monitor_unref(kernel_monitor); udev_list_cleanup(&subsystem_match_list); udev_list_cleanup(&tag_match_list); return rc; } const struct udevadm_cmd udevadm_monitor = { .name = "monitor", .cmd = adm_monitor, .help = "listen to kernel and udev events", }; udev-182/src/PaxHeaders.12492/udev-builtin.c0000644000521600052160000000013211711107662016727 xustar000000000000000030 mtime=1327796146.962827005 30 atime=1332083326.817104694 30 ctime=1332097353.274438925 udev-182/src/udev-builtin.c0000664000521600052160000000762711711107662015347 0ustar00kaykay00000000000000/* * Copyright (C) 2007-2009 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "udev.h" static const struct udev_builtin *builtins[] = { [UDEV_BUILTIN_BLKID] = &udev_builtin_blkid, [UDEV_BUILTIN_FIRMWARE] = &udev_builtin_firmware, [UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id, [UDEV_BUILTIN_KMOD] = &udev_builtin_kmod, [UDEV_BUILTIN_PATH_ID] = &udev_builtin_path_id, [UDEV_BUILTIN_PCI_DB] = &udev_builtin_pci_db, [UDEV_BUILTIN_USB_DB] = &udev_builtin_usb_db, [UDEV_BUILTIN_USB_ID] = &udev_builtin_usb_id, }; int udev_builtin_init(struct udev *udev) { unsigned int i; int err; for (i = 0; i < ARRAY_SIZE(builtins); i++) { if (builtins[i]->init) { err = builtins[i]->init(udev); if (err < 0) break; } } return err; } void udev_builtin_exit(struct udev *udev) { unsigned int i; for (i = 0; i < ARRAY_SIZE(builtins); i++) if (builtins[i]->exit) builtins[i]->exit(udev); } bool udev_builtin_validate(struct udev *udev) { unsigned int i; bool change = false; for (i = 0; i < ARRAY_SIZE(builtins); i++) if (builtins[i]->validate) if (builtins[i]->validate(udev)) change = true; return change; } void udev_builtin_list(struct udev *udev) { unsigned int i; for (i = 0; i < ARRAY_SIZE(builtins); i++) fprintf(stderr, " %-12s %s\n", builtins[i]->name, builtins[i]->help); } const char *udev_builtin_name(enum udev_builtin_cmd cmd) { return builtins[cmd]->name; } bool udev_builtin_run_once(enum udev_builtin_cmd cmd) { return builtins[cmd]->run_once; } enum udev_builtin_cmd udev_builtin_lookup(const char *command) { char name[UTIL_PATH_SIZE]; enum udev_builtin_cmd i; char *pos; util_strscpy(name, sizeof(name), command); pos = strchr(name, ' '); if (pos) pos[0] = '\0'; for (i = 0; i < ARRAY_SIZE(builtins); i++) if (strcmp(builtins[i]->name, name) == 0) return i; return UDEV_BUILTIN_MAX; } int udev_builtin_run(struct udev_device *dev, enum udev_builtin_cmd cmd, const char *command, bool test) { char arg[UTIL_PATH_SIZE]; int argc; char *argv[128]; optind = 0; util_strscpy(arg, sizeof(arg), command); udev_build_argv(udev_device_get_udev(dev), arg, &argc, argv); return builtins[cmd]->cmd(dev, argc, argv, test); } int udev_builtin_add_property(struct udev_device *dev, bool test, const char *key, const char *val) { struct udev_list_entry *entry; entry = udev_device_add_property(dev, key, val); /* store in db, skip private keys */ if (key[0] != '.') udev_list_entry_set_num(entry, true); info(udev_device_get_udev(dev), "%s=%s\n", key, val); if (test) printf("%s=%s\n", key, val); return 0; } udev-182/src/PaxHeaders.12492/sd-daemon.h0000644000521600052160000000013111716462463016203 xustar000000000000000030 mtime=1329227059.638194109 30 atime=1332083330.865104791 29 ctime=1332097353.46043893 udev-182/src/sd-daemon.h0000664000521600052160000002556411716462463014624 0ustar00kaykay00000000000000/*-*- 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 #include #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 udev-182/src/PaxHeaders.12492/udev-node.c0000644000521600052160000000013211711145706016207 xustar000000000000000030 mtime=1327811526.881038919 30 atime=1332083325.967104674 30 ctime=1332097353.249438925 udev-182/src/udev-node.c0000664000521600052160000003617711711145706014631 0ustar00kaykay00000000000000/* * Copyright (C) 2003-2010 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" #define TMP_FILE_EXT ".udev-tmp" static int node_symlink(struct udev *udev, const char *node, const char *slink) { struct stat stats; char target[UTIL_PATH_SIZE]; char *s; size_t l; char slink_tmp[UTIL_PATH_SIZE + sizeof(TMP_FILE_EXT)]; int i = 0; int tail = 0; int err = 0; /* use relative link */ target[0] = '\0'; while (node[i] && (node[i] == slink[i])) { if (node[i] == '/') tail = i+1; i++; } s = target; l = sizeof(target); while (slink[i] != '\0') { if (slink[i] == '/') l = util_strpcpy(&s, l, "../"); i++; } l = util_strscpy(s, l, &node[tail]); if (l == 0) { err = -EINVAL; goto exit; } /* preserve link with correct target, do not replace node of other device */ if (lstat(slink, &stats) == 0) { if (S_ISBLK(stats.st_mode) || S_ISCHR(stats.st_mode)) { struct stat stats2; info(udev, "found existing node instead of symlink '%s'\n", slink); if (lstat(node, &stats2) == 0) { if ((stats.st_mode & S_IFMT) == (stats2.st_mode & S_IFMT) && stats.st_rdev == stats2.st_rdev && stats.st_ino != stats2.st_ino) { info(udev, "replace device node '%s' with symlink to our node '%s'\n", slink, node); } else { err(udev, "device node '%s' already exists, " "link to '%s' will not overwrite it\n", slink, node); goto exit; } } } else if (S_ISLNK(stats.st_mode)) { char buf[UTIL_PATH_SIZE]; int len; dbg(udev, "found existing symlink '%s'\n", slink); len = readlink(slink, buf, sizeof(buf)); if (len > 0 && len < (int)sizeof(buf)) { buf[len] = '\0'; if (strcmp(target, buf) == 0) { info(udev, "preserve already existing symlink '%s' to '%s'\n", slink, target); udev_selinux_lsetfilecon(udev, slink, S_IFLNK); utimensat(AT_FDCWD, slink, NULL, AT_SYMLINK_NOFOLLOW); goto exit; } } } } else { info(udev, "creating symlink '%s' to '%s'\n", slink, target); do { err = util_create_path_selinux(udev, slink); if (err != 0 && err != -ENOENT) break; udev_selinux_setfscreatecon(udev, slink, S_IFLNK); err = symlink(target, slink); if (err != 0) err = -errno; udev_selinux_resetfscreatecon(udev); } while (err == -ENOENT); if (err == 0) goto exit; } info(udev, "atomically replace '%s'\n", slink); util_strscpyl(slink_tmp, sizeof(slink_tmp), slink, TMP_FILE_EXT, NULL); unlink(slink_tmp); do { err = util_create_path_selinux(udev, slink_tmp); if (err != 0 && err != -ENOENT) break; udev_selinux_setfscreatecon(udev, slink_tmp, S_IFLNK); err = symlink(target, slink_tmp); if (err != 0) err = -errno; udev_selinux_resetfscreatecon(udev); } while (err == -ENOENT); if (err != 0) { err(udev, "symlink '%s' '%s' failed: %m\n", target, slink_tmp); goto exit; } err = rename(slink_tmp, slink); if (err != 0) { err(udev, "rename '%s' '%s' failed: %m\n", slink_tmp, slink); unlink(slink_tmp); } exit: return err; } /* find device node of device with highest priority */ static const char *link_find_prioritized(struct udev_device *dev, bool add, const char *stackdir, char *buf, size_t bufsize) { struct udev *udev = udev_device_get_udev(dev); DIR *dir; int priority = 0; const char *target = NULL; if (add) { priority = udev_device_get_devlink_priority(dev); util_strscpy(buf, bufsize, udev_device_get_devnode(dev)); target = buf; } dir = opendir(stackdir); if (dir == NULL) return target; for (;;) { struct udev_device *dev_db; struct dirent *dent; dent = readdir(dir); if (dent == NULL || dent->d_name[0] == '\0') break; if (dent->d_name[0] == '.') continue; info(udev, "found '%s' claiming '%s'\n", dent->d_name, stackdir); /* did we find ourself? */ if (strcmp(dent->d_name, udev_device_get_id_filename(dev)) == 0) continue; dev_db = udev_device_new_from_id_filename(udev, dent->d_name); if (dev_db != NULL) { const char *devnode; devnode = udev_device_get_devnode(dev_db); if (devnode != NULL) { dbg(udev, "compare priority of '%s'(%i) > '%s'(%i)\n", target, priority, udev_device_get_devnode(dev_db), udev_device_get_devlink_priority(dev_db)); if (target == NULL || udev_device_get_devlink_priority(dev_db) > priority) { info(udev, "'%s' claims priority %i for '%s'\n", udev_device_get_syspath(dev_db), udev_device_get_devlink_priority(dev_db), stackdir); priority = udev_device_get_devlink_priority(dev_db); util_strscpy(buf, bufsize, devnode); target = buf; } } udev_device_unref(dev_db); } } closedir(dir); return target; } /* manage "stack of names" with possibly specified device priorities */ static void link_update(struct udev_device *dev, const char *slink, bool add) { struct udev *udev = udev_device_get_udev(dev); char name_enc[UTIL_PATH_SIZE]; char filename[UTIL_PATH_SIZE * 2]; char dirname[UTIL_PATH_SIZE]; const char *target; char buf[UTIL_PATH_SIZE]; dbg(udev, "update symlink '%s' of '%s'\n", slink, udev_device_get_syspath(dev)); util_path_encode(&slink[strlen(udev_get_dev_path(udev))+1], name_enc, sizeof(name_enc)); util_strscpyl(dirname, sizeof(dirname), udev_get_run_path(udev), "/links/", name_enc, NULL); util_strscpyl(filename, sizeof(filename), dirname, "/", udev_device_get_id_filename(dev), NULL); if (!add) { dbg(udev, "removing index: '%s'\n", filename); if (unlink(filename) == 0) rmdir(dirname); } target = link_find_prioritized(dev, add, dirname, buf, sizeof(buf)); if (target == NULL) { info(udev, "no reference left, remove '%s'\n", slink); if (unlink(slink) == 0) util_delete_path(udev, slink); } else { info(udev, "creating link '%s' to '%s'\n", slink, target); node_symlink(udev, target, slink); } if (add) { int err; dbg(udev, "creating index: '%s'\n", filename); do { int fd; err = util_create_path(udev, filename); if (err != 0 && err != -ENOENT) break; fd = open(filename, O_WRONLY|O_CREAT|O_CLOEXEC|O_TRUNC|O_NOFOLLOW, 0444); if (fd >= 0) close(fd); else err = -errno; } while (err == -ENOENT); } } void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev_old) { struct udev *udev = udev_device_get_udev(dev); struct udev_list_entry *list_entry; /* update possible left-over symlinks */ udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev_old)) { const char *name = udev_list_entry_get_name(list_entry); struct udev_list_entry *list_entry_current; int found; /* check if old link name still belongs to this device */ found = 0; udev_list_entry_foreach(list_entry_current, udev_device_get_devlinks_list_entry(dev)) { const char *name_current = udev_list_entry_get_name(list_entry_current); if (strcmp(name, name_current) == 0) { found = 1; break; } } if (found) continue; info(udev, "update old name, '%s' no longer belonging to '%s'\n", name, udev_device_get_devpath(dev)); link_update(dev, name, 0); } } static int node_fixup(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid) { struct udev *udev = udev_device_get_udev(dev); const char *devnode = udev_device_get_devnode(dev); dev_t devnum = udev_device_get_devnum(dev); struct stat stats; int err = 0; if (strcmp(udev_device_get_subsystem(dev), "block") == 0) mode |= S_IFBLK; else mode |= S_IFCHR; if (lstat(devnode, &stats) != 0) { err = -errno; info(udev, "can not stat() node '%s' (%m)\n", devnode); goto out; } if (((stats.st_mode & S_IFMT) != (mode & S_IFMT)) || (stats.st_rdev != devnum)) { err = -EEXIST; info(udev, "found node '%s' with non-matching devnum %s, skip handling\n", udev_device_get_devnode(dev), udev_device_get_id_filename(dev)); goto out; } if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) { info(udev, "set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid); chmod(devnode, mode); chown(devnode, uid, gid); } else { info(udev, "preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid); } /* * Set initial selinux file context only on add events. * We set the proper context on bootup (triger) or for newly * added devices, but we don't change it later, in case * something else has set a custom context in the meantime. */ if (strcmp(udev_device_get_action(dev), "add") == 0) udev_selinux_lsetfilecon(udev, devnode, mode); /* always update timestamp when we re-use the node, like on media change events */ utimensat(AT_FDCWD, devnode, NULL, 0); out: return err; } void udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid) { struct udev *udev = udev_device_get_udev(dev); char filename[UTIL_PATH_SIZE]; struct udev_list_entry *list_entry; int err = 0; info(udev, "handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d\n", udev_device_get_devnode(dev), udev_device_get_id_filename(dev), mode, uid, gid); if (node_fixup(dev, mode, uid, gid) < 0) return; /* always add /dev/{block,char}/$major:$minor */ snprintf(filename, sizeof(filename), "%s/%s/%u:%u", udev_get_dev_path(udev), strcmp(udev_device_get_subsystem(dev), "block") == 0 ? "block" : "char", major(udev_device_get_devnum(dev)), minor(udev_device_get_devnum(dev))); node_symlink(udev, udev_device_get_devnode(dev), filename); /* create/update symlinks, add symlinks to name index */ udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) { if (udev_list_entry_get_num(list_entry)) /* simple unmanaged link name */ node_symlink(udev, udev_device_get_devnode(dev), udev_list_entry_get_name(list_entry)); else link_update(dev, udev_list_entry_get_name(list_entry), 1); } } void udev_node_remove(struct udev_device *dev) { struct udev *udev = udev_device_get_udev(dev); struct udev_list_entry *list_entry; const char *devnode; struct stat stats; struct udev_device *dev_check; char filename[UTIL_PATH_SIZE]; /* remove/update symlinks, remove symlinks from name index */ udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) link_update(dev, udev_list_entry_get_name(list_entry), 0); /* remove /dev/{block,char}/$major:$minor */ snprintf(filename, sizeof(filename), "%s/%s/%u:%u", udev_get_dev_path(udev), strcmp(udev_device_get_subsystem(dev), "block") == 0 ? "block" : "char", major(udev_device_get_devnum(dev)), minor(udev_device_get_devnum(dev))); unlink(filename); } udev-182/src/PaxHeaders.12492/docs0000644000521600052160000000013211731430511015021 xustar000000000000000030 mtime=1332097353.920438941 30 atime=1332097354.348438951 30 ctime=1332097353.920438941 udev-182/src/docs/0000775000521600052160000000000011731430511013502 5ustar00kaykay00000000000000udev-182/src/docs/PaxHeaders.12492/tmpl0000644000521600052160000000013211731430511015775 xustar000000000000000030 mtime=1332097353.901438941 30 atime=1332097354.348438951 30 ctime=1332097353.901438941 udev-182/src/docs/tmpl/0000775000521600052160000000000011731430511014456 5ustar00kaykay00000000000000udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-enumerate.sgml0000644000521600052160000000013211731430511022353 xustar000000000000000030 mtime=1332097353.900438941 30 atime=1332097353.900438941 30 ctime=1332097353.900438941 udev-182/src/docs/tmpl/libudev-enumerate.sgml0000664000521600052160000000437711731430511020772 0ustar00kaykay00000000000000 udev_enumerate @udev_enumerate: @Returns: @udev_enumerate: @udev_enumerate: @Returns: @udev: @Returns: @udev_enumerate: @subsystem: @Returns: @udev_enumerate: @subsystem: @Returns: @udev_enumerate: @sysattr: @value: @Returns: @udev_enumerate: @sysattr: @value: @Returns: @udev_enumerate: @property: @value: @Returns: @udev_enumerate: @tag: @Returns: @udev_enumerate: @parent: @Returns: @udev_enumerate: @Returns: @udev_enumerate: @sysname: @Returns: @udev_enumerate: @syspath: @Returns: @udev_enumerate: @Returns: @udev_enumerate: @Returns: @udev_enumerate: @Returns: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-monitor.sgml0000644000521600052160000000013211731430511022055 xustar000000000000000030 mtime=1332097353.900438941 30 atime=1332097353.900438941 30 ctime=1332097353.900438941 udev-182/src/docs/tmpl/libudev-monitor.sgml0000664000521600052160000000333011731430511020460 0ustar00kaykay00000000000000 udev_monitor @udev_monitor: @Returns: @udev_monitor: @udev_monitor: @Returns: @udev: @name: @Returns: @udev: @socket_path: @Returns: @udev_monitor: @Returns: @udev_monitor: @size: @Returns: @udev_monitor: @Returns: @udev_monitor: @Returns: @udev_monitor: @subsystem: @devtype: @Returns: @udev_monitor: @tag: @Returns: @udev_monitor: @Returns: @udev_monitor: @Returns: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-unused.sgml0000644000521600052160000000013211731430511021671 xustar000000000000000030 mtime=1332097353.901438941 30 atime=1332097353.901438941 30 ctime=1332097353.901438941 udev-182/src/docs/tmpl/libudev-unused.sgml0000664000521600052160000000000011731430511020263 0ustar00kaykay00000000000000udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-queue.sgml0000644000521600052160000000013211731430511021512 xustar000000000000000030 mtime=1332097353.900438941 30 atime=1332097353.900438941 30 ctime=1332097353.900438941 udev-182/src/docs/tmpl/libudev-queue.sgml0000664000521600052160000000270111731430511020116 0ustar00kaykay00000000000000 udev_queue @udev_queue: @Returns: @udev_queue: @udev_queue: @Returns: @udev: @Returns: @udev_queue: @Returns: @udev_queue: @Returns: @udev_queue: @seqnum: @Returns: @udev_queue: @start: @end: @Returns: @udev_queue: @Returns: @udev_queue: @Returns: @udev_queue: @Returns: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-device.sgml0000644000521600052160000000013211731430511021625 xustar000000000000000030 mtime=1332097353.900438941 30 atime=1332097353.900438941 30 ctime=1332097353.900438941 udev-182/src/docs/tmpl/libudev-device.sgml0000664000521600052160000000651311731430511020236 0ustar00kaykay00000000000000 udev_device @udev_device: @Returns: @udev_device: @udev_device: @Returns: @udev: @syspath: @Returns: @udev: @type: @devnum: @Returns: @udev: @subsystem: @sysname: @Returns: @udev: @Returns: @udev_device: @Returns: @udev_device: @subsystem: @devtype: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @key: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @sysattr: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @Returns: @udev_device: @tag: @Returns: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-util.sgml0000644000521600052160000000013211731430511021343 xustar000000000000000030 mtime=1332097353.901438941 30 atime=1332097353.901438941 30 ctime=1332097353.901438941 udev-182/src/docs/tmpl/libudev-util.sgml0000664000521600052160000000063011731430511017746 0ustar00kaykay00000000000000 udev_util @str: @str_enc: @len: @Returns: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev-list.sgml0000644000521600052160000000013211731430511021341 xustar000000000000000030 mtime=1332097353.900438941 30 atime=1332097353.900438941 30 ctime=1332097353.900438941 udev-182/src/docs/tmpl/libudev-list.sgml0000664000521600052160000000154411731430511017751 0ustar00kaykay00000000000000 udev_list @list_entry: @Returns: @list_entry: @name: @Returns: @list_entry: @Returns: @list_entry: @Returns: @list_entry: @first_entry: udev-182/src/docs/tmpl/PaxHeaders.12492/libudev.sgml0000644000521600052160000000013211731430511020370 xustar000000000000000030 mtime=1332097353.901438941 30 atime=1332097353.901438941 30 ctime=1332097353.901438941 udev-182/src/docs/tmpl/libudev.sgml0000664000521600052160000000235611731430511017002 0ustar00kaykay00000000000000 udev @udev: @Returns: @udev: @void: @Returns: @udev: @log_fn: @udev: @Returns: @udev: @priority: @udev: @Returns: @udev: @Returns: @udev: @Returns: @udev: @Returns: @udev: @userdata: udev-182/src/docs/PaxHeaders.12492/version.xml0000644000521600052160000000013211731430417017312 xustar000000000000000030 mtime=1332097295.001437538 30 atime=1332097319.023438109 30 ctime=1332097353.861438939 udev-182/src/docs/version.xml0000664000521600052160000000000411731430417015710 0ustar00kaykay00000000000000182 udev-182/src/docs/PaxHeaders.12492/version.xml.in0000644000521600052160000000013211711107662017720 xustar000000000000000030 mtime=1327796146.950827026 30 atime=1332086775.781186879 30 ctime=1332097353.852438939 udev-182/src/docs/version.xml.in0000664000521600052160000000001211711107662016315 0ustar00kaykay00000000000000@VERSION@ udev-182/src/docs/PaxHeaders.12492/html0000644000521600052160000000013211731430511015765 xustar000000000000000030 mtime=1332097353.996438943 30 atime=1332097354.349438951 30 ctime=1332097353.996438943 udev-182/src/docs/html/0000775000521600052160000000000011731430511014446 5ustar00kaykay00000000000000udev-182/src/docs/html/PaxHeaders.12492/api-index-full.html0000644000521600052160000000013211731430511021546 xustar000000000000000030 mtime=1332097353.990438943 30 atime=1332097353.990438943 30 ctime=1332097353.990438943 udev-182/src/docs/html/api-index-full.html0000664000521600052160000006372711731430511020171 0ustar00kaykay00000000000000 API Index

API Index

udev, struct in udev

D

udev_device, struct in udev_device
udev_device_get_action, function in udev_device
udev_device_get_devlinks_list_entry, function in udev_device
udev_device_get_devnode, function in udev_device
udev_device_get_devnum, function in udev_device
udev_device_get_devpath, function in udev_device
udev_device_get_devtype, function in udev_device
udev_device_get_driver, function in udev_device
udev_device_get_is_initialized, function in udev_device
udev_device_get_parent, function in udev_device
udev_device_get_parent_with_subsystem_devtype, function in udev_device
udev_device_get_properties_list_entry, function in udev_device
udev_device_get_property_value, function in udev_device
udev_device_get_seqnum, function in udev_device
udev_device_get_subsystem, function in udev_device
udev_device_get_sysattr_list_entry, function in udev_device
udev_device_get_sysattr_value, function in udev_device
udev_device_get_sysname, function in udev_device
udev_device_get_sysnum, function in udev_device
udev_device_get_syspath, function in udev_device
udev_device_get_tags_list_entry, function in udev_device
udev_device_get_udev, function in udev_device
udev_device_get_usec_since_initialized, function in udev_device
udev_device_has_tag, function in udev_device
udev_device_new_from_devnum, function in udev_device
udev_device_new_from_environment, function in udev_device
udev_device_new_from_subsystem_sysname, function in udev_device
udev_device_new_from_syspath, function in udev_device
udev_device_ref, function in udev_device
udev_device_unref, function in udev_device

E

udev_enumerate, struct in udev_enumerate
udev_enumerate_add_match_is_initialized, function in udev_enumerate
udev_enumerate_add_match_parent, function in udev_enumerate
udev_enumerate_add_match_property, function in udev_enumerate
udev_enumerate_add_match_subsystem, function in udev_enumerate
udev_enumerate_add_match_sysattr, function in udev_enumerate
udev_enumerate_add_match_sysname, function in udev_enumerate
udev_enumerate_add_match_tag, function in udev_enumerate
udev_enumerate_add_nomatch_subsystem, function in udev_enumerate
udev_enumerate_add_nomatch_sysattr, function in udev_enumerate
udev_enumerate_add_syspath, function in udev_enumerate
udev_enumerate_get_list_entry, function in udev_enumerate
udev_enumerate_get_udev, function in udev_enumerate
udev_enumerate_new, function in udev_enumerate
udev_enumerate_ref, function in udev_enumerate
udev_enumerate_scan_devices, function in udev_enumerate
udev_enumerate_scan_subsystems, function in udev_enumerate
udev_enumerate_unref, function in udev_enumerate

G

udev_get_dev_path, function in udev
udev_get_log_priority, function in udev
udev_get_run_path, function in udev
udev_get_sys_path, function in udev
udev_get_userdata, function in udev

L

udev_list_entry, struct in udev_list
udev_list_entry_foreach, macro in udev_list
udev_list_entry_get_by_name, function in udev_list
udev_list_entry_get_name, function in udev_list
udev_list_entry_get_next, function in udev_list
udev_list_entry_get_value, function in udev_list

M

udev_monitor, struct in udev_monitor
udev_monitor_enable_receiving, function in udev_monitor
udev_monitor_filter_add_match_subsystem_devtype, function in udev_monitor
udev_monitor_filter_add_match_tag, function in udev_monitor
udev_monitor_filter_remove, function in udev_monitor
udev_monitor_filter_update, function in udev_monitor
udev_monitor_get_fd, function in udev_monitor
udev_monitor_get_udev, function in udev_monitor
udev_monitor_new_from_netlink, function in udev_monitor
udev_monitor_new_from_socket, function in udev_monitor
udev_monitor_receive_device, function in udev_monitor
udev_monitor_ref, function in udev_monitor
udev_monitor_set_receive_buffer_size, function in udev_monitor
udev_monitor_unref, function in udev_monitor

N

udev_new, function in udev

Q

udev_queue, struct in udev_queue
udev_queue_get_kernel_seqnum, function in udev_queue
udev_queue_get_queued_list_entry, function in udev_queue
udev_queue_get_queue_is_empty, function in udev_queue
udev_queue_get_seqnum_is_finished, function in udev_queue
udev_queue_get_seqnum_sequence_is_finished, function in udev_queue
udev_queue_get_udev, function in udev_queue
udev_queue_get_udev_is_active, function in udev_queue
udev_queue_get_udev_seqnum, function in udev_queue
udev_queue_new, function in udev_queue
udev_queue_ref, function in udev_queue
udev_queue_unref, function in udev_queue

R

udev_ref, function in udev

S

udev_set_log_fn, function in udev
udev_set_log_priority, function in udev
udev_set_userdata, function in udev

U

udev_unref, function in udev
udev_util_encode_string, function in udev_util
udev-182/src/docs/html/PaxHeaders.12492/index.html0000644000521600052160000000013211731430511020037 xustar000000000000000030 mtime=1332097353.990438943 30 atime=1332097353.990438943 30 ctime=1332097353.991438943 udev-182/src/docs/html/index.html0000664000521600052160000000444111731430511016446 0ustar00kaykay00000000000000 libudev Reference Manual

for libudev version 182


libudev
udev — libudev context
udev_list — list operation
udev_device — kernel sys devices
udev_monitor — device event source
udev_enumerate — lookup and sort sys devices
udev_queue — access to currently active events
udev_util — utils
API Index
udev-182/src/docs/html/PaxHeaders.12492/libudev-udev-enumerate.html0000644000521600052160000000013211731430511023306 xustar000000000000000030 mtime=1332097353.991438943 30 atime=1332097353.991438943 30 ctime=1332097353.991438943 udev-182/src/docs/html/libudev-udev-enumerate.html0000664000521600052160000006707311731430511021727 0ustar00kaykay00000000000000 udev_enumerate

udev_enumerate

udev_enumerate — lookup and sort sys devices

Synopsis

struct              udev_enumerate;
struct udev_enumerate * udev_enumerate_ref              (struct udev_enumerate *udev_enumerate);
void                udev_enumerate_unref                (struct udev_enumerate *udev_enumerate);
struct udev *       udev_enumerate_get_udev             (struct udev_enumerate *udev_enumerate);
struct udev_enumerate * udev_enumerate_new              (struct udev *udev);
int                 udev_enumerate_add_match_subsystem  (struct udev_enumerate *udev_enumerate,
                                                         const char *subsystem);
int                 udev_enumerate_add_nomatch_subsystem
                                                        (struct udev_enumerate *udev_enumerate,
                                                         const char *subsystem);
int                 udev_enumerate_add_match_sysattr    (struct udev_enumerate *udev_enumerate,
                                                         const char *sysattr,
                                                         const char *value);
int                 udev_enumerate_add_nomatch_sysattr  (struct udev_enumerate *udev_enumerate,
                                                         const char *sysattr,
                                                         const char *value);
int                 udev_enumerate_add_match_property   (struct udev_enumerate *udev_enumerate,
                                                         const char *property,
                                                         const char *value);
int                 udev_enumerate_add_match_tag        (struct udev_enumerate *udev_enumerate,
                                                         const char *tag);
int                 udev_enumerate_add_match_parent     (struct udev_enumerate *udev_enumerate,
                                                         struct udev_device *parent);
int                 udev_enumerate_add_match_is_initialized
                                                        (struct udev_enumerate *udev_enumerate);
int                 udev_enumerate_add_match_sysname    (struct udev_enumerate *udev_enumerate,
                                                         const char *sysname);
int                 udev_enumerate_add_syspath          (struct udev_enumerate *udev_enumerate,
                                                         const char *syspath);
int                 udev_enumerate_scan_devices         (struct udev_enumerate *udev_enumerate);
int                 udev_enumerate_scan_subsystems      (struct udev_enumerate *udev_enumerate);
struct udev_list_entry * udev_enumerate_get_list_entry  (struct udev_enumerate *udev_enumerate);

Description

Lookup devices in the sys filesystem, filter devices by properties, and return a sorted list of devices.

Details

struct udev_enumerate

struct udev_enumerate;

Opaque object representing one device lookup/sort context.


udev_enumerate_ref ()

struct udev_enumerate * udev_enumerate_ref              (struct udev_enumerate *udev_enumerate);

Take a reference of a enumeration context.

udev_enumerate :

context

Returns :

the passed enumeration context

udev_enumerate_unref ()

void                udev_enumerate_unref                (struct udev_enumerate *udev_enumerate);

Drop a reference of an enumeration context. If the refcount reaches zero, all resources of the enumeration context will be released.

udev_enumerate :

context

udev_enumerate_get_udev ()

struct udev *       udev_enumerate_get_udev             (struct udev_enumerate *udev_enumerate);

udev_enumerate :

context

Returns :

the udev library context.

udev_enumerate_new ()

struct udev_enumerate * udev_enumerate_new              (struct udev *udev);

udev :

udev library context

Returns :

an enumeration context

udev_enumerate_add_match_subsystem ()

int                 udev_enumerate_add_match_subsystem  (struct udev_enumerate *udev_enumerate,
                                                         const char *subsystem);

udev_enumerate :

context

subsystem :

filter for a subsystem of the device to include in the list

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_nomatch_subsystem ()

int                 udev_enumerate_add_nomatch_subsystem
                                                        (struct udev_enumerate *udev_enumerate,
                                                         const char *subsystem);

udev_enumerate :

context

subsystem :

filter for a subsystem of the device to exclude from the list

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_sysattr ()

int                 udev_enumerate_add_match_sysattr    (struct udev_enumerate *udev_enumerate,
                                                         const char *sysattr,
                                                         const char *value);

udev_enumerate :

context

sysattr :

filter for a sys attribute at the device to include in the list

value :

optional value of the sys attribute

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_nomatch_sysattr ()

int                 udev_enumerate_add_nomatch_sysattr  (struct udev_enumerate *udev_enumerate,
                                                         const char *sysattr,
                                                         const char *value);

udev_enumerate :

context

sysattr :

filter for a sys attribute at the device to exclude from the list

value :

optional value of the sys attribute

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_property ()

int                 udev_enumerate_add_match_property   (struct udev_enumerate *udev_enumerate,
                                                         const char *property,
                                                         const char *value);

udev_enumerate :

context

property :

filter for a property of the device to include in the list

value :

value of the property

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_tag ()

int                 udev_enumerate_add_match_tag        (struct udev_enumerate *udev_enumerate,
                                                         const char *tag);

udev_enumerate :

context

tag :

filter for a tag of the device to include in the list

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_parent ()

int                 udev_enumerate_add_match_parent     (struct udev_enumerate *udev_enumerate,
                                                         struct udev_device *parent);

Return the devices on the subtree of one given device. The parent itself is included in the list.

A reference for the device is held until the udev_enumerate context is cleaned up.

udev_enumerate :

context

parent :

parent device where to start searching

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_is_initialized ()

int                 udev_enumerate_add_match_is_initialized
                                                        (struct udev_enumerate *udev_enumerate);

Match only devices which udev has set up already. This makes sure, that the device node permissions and context are properly set and that network devices are fully renamed.

Usually, devices which are found in the kernel but not already handled by udev, have still pending events. Services should subscribe to monitor events and wait for these devices to become ready, instead of using uninitialized devices.

For now, this will not affect devices which do not have a device node and are not network interfaces.

udev_enumerate :

context

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_match_sysname ()

int                 udev_enumerate_add_match_sysname    (struct udev_enumerate *udev_enumerate,
                                                         const char *sysname);

udev_enumerate :

context

sysname :

filter for the name of the device to include in the list

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_add_syspath ()

int                 udev_enumerate_add_syspath          (struct udev_enumerate *udev_enumerate,
                                                         const char *syspath);

Add a device to the list of devices, to retrieve it back sorted in dependency order.

udev_enumerate :

context

syspath :

path of a device

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_scan_devices ()

int                 udev_enumerate_scan_devices         (struct udev_enumerate *udev_enumerate);

udev_enumerate :

udev enumeration context

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_scan_subsystems ()

int                 udev_enumerate_scan_subsystems      (struct udev_enumerate *udev_enumerate);

udev_enumerate :

udev enumeration context

Returns :

0 on success, otherwise a negative error value.

udev_enumerate_get_list_entry ()

struct udev_list_entry * udev_enumerate_get_list_entry  (struct udev_enumerate *udev_enumerate);

udev_enumerate :

context

Returns :

the first entry of the sorted list of device paths.
udev-182/src/docs/html/PaxHeaders.12492/libudev-udev-monitor.html0000644000521600052160000000013211731430511023010 xustar000000000000000030 mtime=1332097353.992438943 30 atime=1332097353.992438943 30 ctime=1332097353.992438943 udev-182/src/docs/html/libudev-udev-monitor.html0000664000521600052160000005532311731430511021424 0ustar00kaykay00000000000000 udev_monitor

udev_monitor

udev_monitor — device event source

Synopsis

struct              udev_monitor;
struct udev_monitor * udev_monitor_ref                  (struct udev_monitor *udev_monitor);
void                udev_monitor_unref                  (struct udev_monitor *udev_monitor);
struct udev *       udev_monitor_get_udev               (struct udev_monitor *udev_monitor);
struct udev_monitor * udev_monitor_new_from_netlink     (struct udev *udev,
                                                         const char *name);
struct udev_monitor * udev_monitor_new_from_socket      (struct udev *udev,
                                                         const char *socket_path);
int                 udev_monitor_enable_receiving       (struct udev_monitor *udev_monitor);
int                 udev_monitor_set_receive_buffer_size
                                                        (struct udev_monitor *udev_monitor,
                                                         int size);
int                 udev_monitor_get_fd                 (struct udev_monitor *udev_monitor);
struct udev_device * udev_monitor_receive_device        (struct udev_monitor *udev_monitor);
int                 udev_monitor_filter_add_match_subsystem_devtype
                                                        (struct udev_monitor *udev_monitor,
                                                         const char *subsystem,
                                                         const char *devtype);
int                 udev_monitor_filter_add_match_tag   (struct udev_monitor *udev_monitor,
                                                         const char *tag);
int                 udev_monitor_filter_update          (struct udev_monitor *udev_monitor);
int                 udev_monitor_filter_remove          (struct udev_monitor *udev_monitor);

Description

Connects to a device event source.

Details

struct udev_monitor

struct udev_monitor;

Opaque object handling an event source.


udev_monitor_ref ()

struct udev_monitor * udev_monitor_ref                  (struct udev_monitor *udev_monitor);

Take a reference of a udev monitor.

udev_monitor :

udev monitor

Returns :

the passed udev monitor

udev_monitor_unref ()

void                udev_monitor_unref                  (struct udev_monitor *udev_monitor);

Drop a reference of a udev monitor. If the refcount reaches zero, the bound socket will be closed, and the resources of the monitor will be released.

udev_monitor :

udev monitor

udev_monitor_get_udev ()

struct udev *       udev_monitor_get_udev               (struct udev_monitor *udev_monitor);

Retrieve the udev library context the monitor was created with.

udev_monitor :

udev monitor

Returns :

the udev library context

udev_monitor_new_from_netlink ()

struct udev_monitor * udev_monitor_new_from_netlink     (struct udev *udev,
                                                         const char *name);

Create new udev monitor and connect to a specified event source. Valid sources identifiers are "udev" and "kernel".

Applications should usually not connect directly to the "kernel" events, because the devices might not be useable at that time, before udev has configured them, and created device nodes. Accessing devices at the same time as udev, might result in unpredictable behavior. The "udev" events are sent out after udev has finished its event processing, all rules have been processed, and needed device nodes are created.

The initial refcount is 1, and needs to be decremented to release the resources of the udev monitor.

udev :

udev library context

name :

name of event source

Returns :

a new udev monitor, or NULL, in case of an error

udev_monitor_new_from_socket ()

struct udev_monitor * udev_monitor_new_from_socket      (struct udev *udev,
                                                         const char *socket_path);

This function should not be used in any new application. The kernel's netlink socket multiplexes messages to all interested clients. Creating custom sockets from udev to applications should be avoided.

Create a new udev monitor and connect to a specified socket. The path to a socket either points to an existing socket file, or if the socket path starts with a '@' character, an abstract namespace socket will be used.

A socket file will not be created. If it does not already exist, it will fall-back and connect to an abstract namespace socket with the given path. The permissions adjustment of a socket file, as well as the later cleanup, needs to be done by the caller.

The initial refcount is 1, and needs to be decremented to release the resources of the udev monitor.

udev :

udev library context

socket_path :

unix socket path

Returns :

a new udev monitor, or NULL, in case of an error

udev_monitor_enable_receiving ()

int                 udev_monitor_enable_receiving       (struct udev_monitor *udev_monitor);

Binds the udev_monitor socket to the event source.

udev_monitor :

the monitor which should receive events

Returns :

0 on success, otherwise a negative error value.

udev_monitor_set_receive_buffer_size ()

int                 udev_monitor_set_receive_buffer_size
                                                        (struct udev_monitor *udev_monitor,
                                                         int size);

Set the size of the kernel socket buffer. This call needs the appropriate privileges to succeed.

udev_monitor :

the monitor which should receive events

size :

the size in bytes

Returns :

0 on success, otherwise -1 on error.

udev_monitor_get_fd ()

int                 udev_monitor_get_fd                 (struct udev_monitor *udev_monitor);

Retrieve the socket file descriptor associated with the monitor.

udev_monitor :

udev monitor

Returns :

the socket file descriptor

udev_monitor_receive_device ()

struct udev_device * udev_monitor_receive_device        (struct udev_monitor *udev_monitor);

Receive data from the udev monitor socket, allocate a new udev device, fill in the received data, and return the device.

Only socket connections with uid=0 are accepted.

The initial refcount is 1, and needs to be decremented to release the resources of the udev device.

udev_monitor :

udev monitor

Returns :

a new udev device, or NULL, in case of an error

udev_monitor_filter_add_match_subsystem_devtype ()

int                 udev_monitor_filter_add_match_subsystem_devtype
                                                        (struct udev_monitor *udev_monitor,
                                                         const char *subsystem,
                                                         const char *devtype);

This filter is efficiently executed inside the kernel, and libudev subscribers will usually not be woken up for devices which do not match.

The filter must be installed before the monitor is switched to listening mode.

udev_monitor :

the monitor

subsystem :

the subsystem value to match the incoming devices against

devtype :

the devtype value to match the incoming devices against

Returns :

0 on success, otherwise a negative error value.

udev_monitor_filter_add_match_tag ()

int                 udev_monitor_filter_add_match_tag   (struct udev_monitor *udev_monitor,
                                                         const char *tag);

This filter is efficiently executed inside the kernel, and libudev subscribers will usually not be woken up for devices which do not match.

The filter must be installed before the monitor is switched to listening mode.

udev_monitor :

the monitor

tag :

the name of a tag

Returns :

0 on success, otherwise a negative error value.

udev_monitor_filter_update ()

int                 udev_monitor_filter_update          (struct udev_monitor *udev_monitor);

Update the installed socket filter. This is only needed, if the filter was removed or changed.

udev_monitor :

monitor

Returns :

0 on success, otherwise a negative error value.

udev_monitor_filter_remove ()

int                 udev_monitor_filter_remove          (struct udev_monitor *udev_monitor);

Remove all filters from monitor.

udev_monitor :

monitor

Returns :

0 on success, otherwise a negative error value.
udev-182/src/docs/html/PaxHeaders.12492/libudev-udev-device.html0000644000521600052160000000013211731430511022560 xustar000000000000000030 mtime=1332097353.993438943 30 atime=1332097353.993438943 30 ctime=1332097353.993438943 udev-182/src/docs/html/libudev-udev-device.html0000664000521600052160000013434711731430511021200 0ustar00kaykay00000000000000 udev_device

udev_device

udev_device — kernel sys devices

Synopsis

struct              udev_device;
struct udev_device * udev_device_ref                    (struct udev_device *udev_device);
void                udev_device_unref                   (struct udev_device *udev_device);
struct udev *       udev_device_get_udev                (struct udev_device *udev_device);
struct udev_device * udev_device_new_from_syspath       (struct udev *udev,
                                                         const char *syspath);
struct udev_device * udev_device_new_from_devnum        (struct udev *udev,
                                                         char type,
                                                         dev_t devnum);
struct udev_device * udev_device_new_from_subsystem_sysname
                                                        (struct udev *udev,
                                                         const char *subsystem,
                                                         const char *sysname);
struct udev_device * udev_device_new_from_environment   (struct udev *udev);
struct udev_device * udev_device_get_parent             (struct udev_device *udev_device);
struct udev_device * udev_device_get_parent_with_subsystem_devtype
                                                        (struct udev_device *udev_device,
                                                         const char *subsystem,
                                                         const char *devtype);
const char *        udev_device_get_devpath             (struct udev_device *udev_device);
const char *        udev_device_get_subsystem           (struct udev_device *udev_device);
const char *        udev_device_get_devtype             (struct udev_device *udev_device);
const char *        udev_device_get_syspath             (struct udev_device *udev_device);
const char *        udev_device_get_sysname             (struct udev_device *udev_device);
const char *        udev_device_get_sysnum              (struct udev_device *udev_device);
const char *        udev_device_get_devnode             (struct udev_device *udev_device);
int                 udev_device_get_is_initialized      (struct udev_device *udev_device);
struct udev_list_entry * udev_device_get_devlinks_list_entry
                                                        (struct udev_device *udev_device);
struct udev_list_entry * udev_device_get_properties_list_entry
                                                        (struct udev_device *udev_device);
struct udev_list_entry * udev_device_get_tags_list_entry
                                                        (struct udev_device *udev_device);
const char *        udev_device_get_property_value      (struct udev_device *udev_device,
                                                         const char *key);
const char *        udev_device_get_driver              (struct udev_device *udev_device);
dev_t               udev_device_get_devnum              (struct udev_device *udev_device);
const char *        udev_device_get_action              (struct udev_device *udev_device);
const char *        udev_device_get_sysattr_value       (struct udev_device *udev_device,
                                                         const char *sysattr);
struct udev_list_entry * udev_device_get_sysattr_list_entry
                                                        (struct udev_device *udev_device);
unsigned long long int udev_device_get_seqnum           (struct udev_device *udev_device);
unsigned long long int udev_device_get_usec_since_initialized
                                                        (struct udev_device *udev_device);
int                 udev_device_has_tag                 (struct udev_device *udev_device,
                                                         const char *tag);

Description

Representation of kernel sys devices. Devices are uniquely identified by their syspath, every device has exactly one path in the kernel sys filesystem. Devices usually belong to a kernel subsystem, and and have a unique name inside that subsystem.

Details

struct udev_device

struct udev_device;

Opaque object representing one kernel sys device.


udev_device_ref ()

struct udev_device * udev_device_ref                    (struct udev_device *udev_device);

Take a reference of a udev device.

udev_device :

udev device

Returns :

the passed udev device

udev_device_unref ()

void                udev_device_unref                   (struct udev_device *udev_device);

Drop a reference of a udev device. If the refcount reaches zero, the resources of the device will be released.

udev_device :

udev device

udev_device_get_udev ()

struct udev *       udev_device_get_udev                (struct udev_device *udev_device);

Retrieve the udev library context the device was created with.

udev_device :

udev device

Returns :

the udev library context

udev_device_new_from_syspath ()

struct udev_device * udev_device_new_from_syspath       (struct udev *udev,
                                                         const char *syspath);

Create new udev device, and fill in information from the sys device and the udev database entry. The syspath is the absolute path to the device, including the sys mount point.

The initial refcount is 1, and needs to be decremented to release the resources of the udev device.

udev :

udev library context

syspath :

sys device path including sys directory

Returns :

a new udev device, or NULL, if it does not exist

udev_device_new_from_devnum ()

struct udev_device * udev_device_new_from_devnum        (struct udev *udev,
                                                         char type,
                                                         dev_t devnum);

Create new udev device, and fill in information from the sys device and the udev database entry. The device is looked-up by its major/minor number and type. Character and block device numbers are not unique across the two types.

The initial refcount is 1, and needs to be decremented to release the resources of the udev device.

udev :

udev library context

type :

char or block device

devnum :

device major/minor number

Returns :

a new udev device, or NULL, if it does not exist

udev_device_new_from_subsystem_sysname ()

struct udev_device * udev_device_new_from_subsystem_sysname
                                                        (struct udev *udev,
                                                         const char *subsystem,
                                                         const char *sysname);

Create new udev device, and fill in information from the sys device and the udev database entry. The device is looked up by the subsystem and name string of the device, like "mem" / "zero", or "block" / "sda".

The initial refcount is 1, and needs to be decremented to release the resources of the udev device.

udev :

udev library context

subsystem :

the subsystem of the device

sysname :

the name of the device

Returns :

a new udev device, or NULL, if it does not exist

udev_device_new_from_environment ()

struct udev_device * udev_device_new_from_environment   (struct udev *udev);

Create new udev device, and fill in information from the current process environment. This only works reliable if the process is called from a udev rule. It is usually used for tools executed from IMPORT= rules.

The initial refcount is 1, and needs to be decremented to release the resources of the udev device.

udev :

udev library context

Returns :

a new udev device, or NULL, if it does not exist

udev_device_get_parent ()

struct udev_device * udev_device_get_parent             (struct udev_device *udev_device);

Find the next parent device, and fill in information from the sys device and the udev database entry.

The returned the device is not referenced. It is attached to the child device, and will be cleaned up when the child device is cleaned up.

It is not necessarily just the upper level directory, empty or not recognized sys directories are ignored.

It can be called as many times as needed, without caring about references.

udev_device :

the device to start searching from

Returns :

a new udev device, or NULL, if it no parent exist.

udev_device_get_parent_with_subsystem_devtype ()

struct udev_device * udev_device_get_parent_with_subsystem_devtype
                                                        (struct udev_device *udev_device,
                                                         const char *subsystem,
                                                         const char *devtype);

Find the next parent device, with a matching subsystem and devtype value, and fill in information from the sys device and the udev database entry.

If devtype is NULL, only subsystem is checked, and any devtype will match.

The returned the device is not referenced. It is attached to the child device, and will be cleaned up when the child device is cleaned up.

It can be called as many times as needed, without caring about references.

udev_device :

udev device to start searching from

subsystem :

the subsystem of the device

devtype :

the type (DEVTYPE) of the device

Returns :

a new udev device, or NULL if no matching parent exists.

udev_device_get_devpath ()

const char *        udev_device_get_devpath             (struct udev_device *udev_device);

Retrieve the kernel devpath value of the udev device. The path does not contain the sys mount point, and starts with a '/'.

udev_device :

udev device

Returns :

the devpath of the udev device

udev_device_get_subsystem ()

const char *        udev_device_get_subsystem           (struct udev_device *udev_device);

Retrieve the subsystem string of the udev device. The string does not contain any "/".

udev_device :

udev device

Returns :

the subsystem name of the udev device, or NULL if it can not be determined

udev_device_get_devtype ()

const char *        udev_device_get_devtype             (struct udev_device *udev_device);

Retrieve the devtype string of the udev device.

udev_device :

udev device

Returns :

the devtype name of the udev device, or NULL if it can not be determined

udev_device_get_syspath ()

const char *        udev_device_get_syspath             (struct udev_device *udev_device);

Retrieve the sys path of the udev device. The path is an absolute path and starts with the sys mount point.

udev_device :

udev device

Returns :

the sys path of the udev device

udev_device_get_sysname ()

const char *        udev_device_get_sysname             (struct udev_device *udev_device);

udev_device :

udev device

Returns :

the sys name of the device device

udev_device_get_sysnum ()

const char *        udev_device_get_sysnum              (struct udev_device *udev_device);

udev_device :

udev device

Returns :

the trailing number of of the device name

udev_device_get_devnode ()

const char *        udev_device_get_devnode             (struct udev_device *udev_device);

Retrieve the device node file name belonging to the udev device. The path is an absolute path, and starts with the device directory.

udev_device :

udev device

Returns :

the device node file name of the udev device, or NULL if no device node exists

udev_device_get_is_initialized ()

int                 udev_device_get_is_initialized      (struct udev_device *udev_device);

Check if udev has already handled the device and has set up device node permissions and context, or has renamed a network device.

This is only implemented for devices with a device node or network interfaces. All other devices return 1 here.

udev_device :

udev device

Returns :

1 if the device is set up. 0 otherwise.

udev_device_get_devlinks_list_entry ()

struct udev_list_entry * udev_device_get_devlinks_list_entry
                                                        (struct udev_device *udev_device);

Retrieve the list of device links pointing to the device file of the udev device. The next list entry can be retrieved with udev_list_entry_next(), which returns NULL if no more entries exist. The devlink path can be retrieved from the list entry by udev_list_entry_get_name(). The path is an absolute path, and starts with the device directory.

udev_device :

udev device

Returns :

the first entry of the device node link list

udev_device_get_properties_list_entry ()

struct udev_list_entry * udev_device_get_properties_list_entry
                                                        (struct udev_device *udev_device);

Retrieve the list of key/value device properties of the udev device. The next list entry can be retrieved with udev_list_entry_next(), which returns NULL if no more entries exist. The property name can be retrieved from the list entry by udev_list_get_name(), the property value by udev_list_get_value().

udev_device :

udev device

Returns :

the first entry of the property list

udev_device_get_tags_list_entry ()

struct udev_list_entry * udev_device_get_tags_list_entry
                                                        (struct udev_device *udev_device);

Retrieve the list of tags attached to the udev device. The next list entry can be retrieved with udev_list_entry_next(), which returns NULL if no more entries exist. The tag string can be retrieved from the list entry by udev_list_get_name().

udev_device :

udev device

Returns :

the first entry of the tag list

udev_device_get_property_value ()

const char *        udev_device_get_property_value      (struct udev_device *udev_device,
                                                         const char *key);

udev_device :

udev device

key :

property name

Returns :

the value of a device property, or NULL if there is no such property.

udev_device_get_driver ()

const char *        udev_device_get_driver              (struct udev_device *udev_device);

udev_device :

udev device

Returns :

the driver string, or NULL if there is no driver attached.

udev_device_get_devnum ()

dev_t               udev_device_get_devnum              (struct udev_device *udev_device);

udev_device :

udev device

Returns :

the device major/minor number.

udev_device_get_action ()

const char *        udev_device_get_action              (struct udev_device *udev_device);

This is only valid if the device was received through a monitor. Devices read from sys do not have an action string. Usual actions are: add, remove, change, online, offline.

udev_device :

udev device

Returns :

the kernel action value, or NULL if there is no action value available.

udev_device_get_sysattr_value ()

const char *        udev_device_get_sysattr_value       (struct udev_device *udev_device,
                                                         const char *sysattr);

The retrieved value is cached in the device. Repeated calls will return the same value and not open the attribute again.

udev_device :

udev device

sysattr :

attribute name

Returns :

the content of a sys attribute file, or NULL if there is no sys attribute value.

udev_device_get_sysattr_list_entry ()

struct udev_list_entry * udev_device_get_sysattr_list_entry
                                                        (struct udev_device *udev_device);

Retrieve the list of available sysattrs, with value being empty; This just return all available sysfs attributes for a particular device without reading their values.

udev_device :

udev device

Returns :

the first entry of the property list

udev_device_get_seqnum ()

unsigned long long int udev_device_get_seqnum           (struct udev_device *udev_device);

This is only valid if the device was received through a monitor. Devices read from sys do not have a sequence number.

udev_device :

udev device

Returns :

the kernel event sequence number, or 0 if there is no sequence number available.

udev_device_get_usec_since_initialized ()

unsigned long long int udev_device_get_usec_since_initialized
                                                        (struct udev_device *udev_device);

Return the number of microseconds passed since udev set up the device for the first time.

This is only implemented for devices with need to store properties in the udev database. All other devices return 0 here.

udev_device :

udev device

Returns :

the number of microseconds since the device was first seen.

udev_device_has_tag ()

int                 udev_device_has_tag                 (struct udev_device *udev_device,
                                                         const char *tag);

udev-182/src/docs/html/PaxHeaders.12492/index.sgml0000644000521600052160000000013211731430511020035 xustar000000000000000030 mtime=1332097353.909438941 30 atime=1332097353.909438941 30 ctime=1332097353.909438941 udev-182/src/docs/html/index.sgml0000664000521600052160000003040011731430511016436 0ustar00kaykay00000000000000 udev-182/src/docs/html/PaxHeaders.12492/libudev-udev.html0000644000521600052160000000013211731430511021323 xustar000000000000000030 mtime=1332097353.994438943 30 atime=1332097353.994438943 30 ctime=1332097353.994438943 udev-182/src/docs/html/libudev-udev.html0000664000521600052160000003614211731430511017735 0ustar00kaykay00000000000000 udev

udev

udev — libudev context

Synopsis

struct              udev;
struct udev *       udev_ref                            (struct udev *udev);
void                udev_unref                          (struct udev *udev);
struct udev *       udev_new                            (void);
void                udev_set_log_fn                     (struct udev *udev,
                                                         void (*log_fn) (struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args));
int                 udev_get_log_priority               (struct udev *udev);
void                udev_set_log_priority               (struct udev *udev,
                                                         int priority);
const char *        udev_get_sys_path                   (struct udev *udev);
const char *        udev_get_dev_path                   (struct udev *udev);
const char *        udev_get_run_path                   (struct udev *udev);
void *              udev_get_userdata                   (struct udev *udev);
void                udev_set_userdata                   (struct udev *udev,
                                                         void *userdata);

Description

The context contains the default values read from the udev config file, and is passed to all library operations.

Details

struct udev

struct udev;

Opaque object representing the library context.


udev_ref ()

struct udev *       udev_ref                            (struct udev *udev);

Take a reference of the udev library context.

udev :

udev library context

Returns :

the passed udev library context

udev_unref ()

void                udev_unref                          (struct udev *udev);

Drop a reference of the udev library context. If the refcount reaches zero, the resources of the context will be released.

udev :

udev library context

udev_new ()

struct udev *       udev_new                            (void);

Create udev library context. This reads the udev configuration file, and fills in the default values.

The initial refcount is 1, and needs to be decremented to release the resources of the udev library context.

Returns :

a new udev library context

udev_set_log_fn ()

void                udev_set_log_fn                     (struct udev *udev,
                                                         void (*log_fn) (struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args));

The built-in logging writes to stderr. It can be overridden by a custom function, to plug log messages into the users' logging functionality.

udev :

udev library context

log_fn :

function to be called for logging messages

udev_get_log_priority ()

int                 udev_get_log_priority               (struct udev *udev);

The initial logging priority is read from the udev config file at startup.

udev :

udev library context

Returns :

the current logging priority

udev_set_log_priority ()

void                udev_set_log_priority               (struct udev *udev,
                                                         int priority);

Set the current logging priority. The value controls which messages are logged.

udev :

udev library context

priority :

the new logging priority

udev_get_sys_path ()

const char *        udev_get_sys_path                   (struct udev *udev);

Retrieve the sysfs mount point. The default is "/sys". For testing purposes, it can be overridden with udev_sys= in the udev configuration file.

udev :

udev library context

Returns :

the sys mount point

udev_get_dev_path ()

const char *        udev_get_dev_path                   (struct udev *udev);

Retrieve the device directory path. The default value is "/dev", the actual value may be overridden in the udev configuration file.

udev :

udev library context

Returns :

the device directory path

udev_get_run_path ()

const char *        udev_get_run_path                   (struct udev *udev);

Retrieve the udev runtime directory path. The default is "/run/udev".

udev :

udev library context

Returns :

the runtime directory path

udev_get_userdata ()

void *              udev_get_userdata                   (struct udev *udev);

Retrieve stored data pointer from library context. This might be useful to access from callbacks like a custom logging function.

udev :

udev library context

Returns :

stored userdata

udev_set_userdata ()

void                udev_set_userdata                   (struct udev *udev,
                                                         void *userdata);

Store custom userdata in the library context.

udev :

udev library context

userdata :

data pointer
udev-182/src/docs/html/PaxHeaders.12492/ch01.html0000644000521600052160000000013211731430511017463 xustar000000000000000030 mtime=1332097353.994438943 30 atime=1332097353.994438943 30 ctime=1332097353.994438943 udev-182/src/docs/html/ch01.html0000664000521600052160000000502011731430511016064 0ustar00kaykay00000000000000 libudev

libudev

udev — libudev context
udev_list — list operation
udev_device — kernel sys devices
udev_monitor — device event source
udev_enumerate — lookup and sort sys devices
udev_queue — access to currently active events
udev_util — utils
udev-182/src/docs/html/PaxHeaders.12492/left.png0000644000521600052160000000013211731430511017502 xustar000000000000000030 mtime=1332097353.909438941 30 atime=1332097353.909438941 30 ctime=1332097353.909438941 udev-182/src/docs/html/left.png0000644000521600052160000000071311731430511016105 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ1&¹³[(XIDATxœµ•!OÃPEïÛ*ˆ‰ŠID%~ꊯ˜ÄÕ"pæ'öŘ`sÜ–¥rKf–´‚¤â h—mi—ÇIžz}÷ܯIû¤–.pÚö\“`xä‹ ˆl‡?l·[²,H¬‡¯×k<Ï#Žcþ%\’AUx[S³7–n6ù¾¯år¹ßèõzE‰‡’s’žŒ1³ºö“²æÅj@œ—NL$ݤiª0 ¿5/ð}¿²\E‡Ž¤KIo¥Í“$a0üjÞdF£bŠkIê„‹æAh>ŸW¶lC'?“tk;|/t*I»ÝN«ÕÊZø^`Œy•4ë÷ûšN§r]×® çJÒÌó<«’½À“Út»Ýú€à`±Xàºî1@p´ä€¸d½÷ŽZ')høÖÚK¬ ª$V?%Å]€­+³L’sgUKà"ÿw5â3O·•ÜòIEND®B`‚udev-182/src/docs/html/PaxHeaders.12492/style.css0000644000521600052160000000013211731430511017714 xustar000000000000000030 mtime=1332097353.912438941 30 atime=1332097353.912438941 30 ctime=1332097353.912438941 udev-182/src/docs/html/style.css0000644000521600052160000001210011731430511016310 0ustar00kaykay00000000000000.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } udev-182/src/docs/html/PaxHeaders.12492/up.png0000644000521600052160000000013211731430511017174 xustar000000000000000030 mtime=1332097353.913438941 30 atime=1332097353.913438941 30 ctime=1332097353.913438941 udev-182/src/docs/html/up.png0000644000521600052160000000062611731430511015602 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ2.œE€Ù#IDATxœí“=JÄ@F¿o‰] !+¤œ2…Å[ZÌ<@/á<€¥…XÛ Ú­20v±³ˆÂ…Ïj0»lþvV°ðA`˜ ïÍ ð—t*iùâHÒ­~xR~'IUUÉ9ç#OÁ‘my–eJÓTeY†GvÉ@x¤O#ß;2E>9²|t$DÞ9nnBäíÈjµò‘BRIsIªë:HîŸ8ŽU…œùëùPÖÚN™1fc­sNÎ95M㧖ɵ¤ ×æŸØŒ1~¸pEòe$ïIž°€Ç î7nrDòf!;Ã`¨çÝ'äykíÎI’øáû䲤sI_]ÿÇy—‡‘€ÅÀ^^I>O>Á¡ø­§²š?YBIEND®B`‚udev-182/src/docs/html/PaxHeaders.12492/libudev-udev-queue.html0000644000521600052160000000013211731430511022445 xustar000000000000000030 mtime=1332097353.995438943 30 atime=1332097353.995438943 30 ctime=1332097353.995438943 udev-182/src/docs/html/libudev-udev-queue.html0000664000521600052160000004120211731430511021050 0ustar00kaykay00000000000000 udev_queue

udev_queue

udev_queue — access to currently active events

Synopsis

struct              udev_queue;
struct udev_queue * udev_queue_ref                      (struct udev_queue *udev_queue);
void                udev_queue_unref                    (struct udev_queue *udev_queue);
struct udev *       udev_queue_get_udev                 (struct udev_queue *udev_queue);
struct udev_queue * udev_queue_new                      (struct udev *udev);
int                 udev_queue_get_udev_is_active       (struct udev_queue *udev_queue);
int                 udev_queue_get_queue_is_empty       (struct udev_queue *udev_queue);
int                 udev_queue_get_seqnum_is_finished   (struct udev_queue *udev_queue,
                                                         unsigned long long int seqnum);
int                 udev_queue_get_seqnum_sequence_is_finished
                                                        (struct udev_queue *udev_queue,
                                                         unsigned long long int start,
                                                         unsigned long long int end);
struct udev_list_entry * udev_queue_get_queued_list_entry
                                                        (struct udev_queue *udev_queue);
unsigned long long int udev_queue_get_kernel_seqnum     (struct udev_queue *udev_queue);
unsigned long long int udev_queue_get_udev_seqnum       (struct udev_queue *udev_queue);

Description

The udev daemon processes events asynchronously. All events which do not have interdependencies run in parallel. This exports the current state of the event processing queue, and the current event sequence numbers from the kernel and the udev daemon.

Details

struct udev_queue

struct udev_queue;

Opaque object representing the current event queue in the udev daemon.


udev_queue_ref ()

struct udev_queue * udev_queue_ref                      (struct udev_queue *udev_queue);

Take a reference of a udev queue context.

udev_queue :

udev queue context

Returns :

the same udev queue context.

udev_queue_unref ()

void                udev_queue_unref                    (struct udev_queue *udev_queue);

Drop a reference of a udev queue context. If the refcount reaches zero, the resources of the queue context will be released.

udev_queue :

udev queue context

udev_queue_get_udev ()

struct udev *       udev_queue_get_udev                 (struct udev_queue *udev_queue);

Retrieve the udev library context the queue context was created with.

udev_queue :

udev queue context

Returns :

the udev library context.

udev_queue_new ()

struct udev_queue * udev_queue_new                      (struct udev *udev);

The initial refcount is 1, and needs to be decremented to release the resources of the udev queue context.

udev :

udev library context

Returns :

the udev queue context, or NULL on error.

udev_queue_get_udev_is_active ()

int                 udev_queue_get_udev_is_active       (struct udev_queue *udev_queue);

udev_queue :

udev queue context

Returns :

a flag indicating if udev is active.

udev_queue_get_queue_is_empty ()

int                 udev_queue_get_queue_is_empty       (struct udev_queue *udev_queue);

udev_queue :

udev queue context

Returns :

a flag indicating if udev is currently handling events.

udev_queue_get_seqnum_is_finished ()

int                 udev_queue_get_seqnum_is_finished   (struct udev_queue *udev_queue,
                                                         unsigned long long int seqnum);

udev_queue :

udev queue context

seqnum :

sequence number

Returns :

a flag indicating if the given sequence number is currently active.

udev_queue_get_seqnum_sequence_is_finished ()

int                 udev_queue_get_seqnum_sequence_is_finished
                                                        (struct udev_queue *udev_queue,
                                                         unsigned long long int start,
                                                         unsigned long long int end);

udev_queue :

udev queue context

start :

first event sequence number

end :

last event sequence number

Returns :

a flag indicating if any of the sequence numbers in the given range is currently active.

udev_queue_get_queued_list_entry ()

struct udev_list_entry * udev_queue_get_queued_list_entry
                                                        (struct udev_queue *udev_queue);

udev_queue :

udev queue context

Returns :

the first entry of the list of queued events.

udev_queue_get_kernel_seqnum ()

unsigned long long int udev_queue_get_kernel_seqnum     (struct udev_queue *udev_queue);

udev_queue :

udev queue context

Returns :

the current kernel event sequence number.

udev_queue_get_udev_seqnum ()

unsigned long long int udev_queue_get_udev_seqnum       (struct udev_queue *udev_queue);

udev_queue :

udev queue context

Returns :

the last known udev event sequence number.
udev-182/src/docs/html/PaxHeaders.12492/right.png0000644000521600052160000000013211731430511017665 xustar000000000000000030 mtime=1332097353.912438941 30 atime=1332097353.912438941 30 ctime=1332097353.912438941 udev-182/src/docs/html/right.png0000644000521600052160000000073011731430511016267 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ2 I%Á=eIDATxœ­”!oÂ@†Ÿ.'**M0$ÄÁ$¿?1~¢vIeEuLlÉ&–Ô4‚ä Í¶B»Ý›œ¹|÷>ï—ûî …$ݶ©oc<”´ÑA©¤×€X’ò udev_util

udev_util

udev_util — utils

Synopsis

int                 udev_util_encode_string             (const char *str,
                                                         char *str_enc,
                                                         size_t len);

Description

Details

udev_util_encode_string ()

int                 udev_util_encode_string             (const char *str,
                                                         char *str_enc,
                                                         size_t len);

Encode all potentially unsafe characters of a string to the corresponding 2 char hex value prefixed by '\x'.

str :

input string to be encoded

str_enc :

output string to store the encoded input string

len :

maximum size of the output string, which may be four times as long as the input string

Returns :

0 if the entire string was copied, non-zero otherwise.
udev-182/src/docs/html/PaxHeaders.12492/libudev.devhelp20000644000521600052160000000013211731430511021127 xustar000000000000000030 mtime=1332097353.909438941 30 atime=1332097353.909438941 30 ctime=1332097353.909438941 udev-182/src/docs/html/libudev.devhelp20000664000521600052160000003013311731430511017533 0ustar00kaykay00000000000000 udev-182/src/docs/html/PaxHeaders.12492/libudev-udev-list.html0000644000521600052160000000013211731430511022274 xustar000000000000000030 mtime=1332097353.996438943 30 atime=1332097353.996438943 30 ctime=1332097353.996438943 udev-182/src/docs/html/libudev-udev-list.html0000664000521600052160000002137711731430511020712 0ustar00kaykay00000000000000 udev_list

udev_list

udev_list — list operation

Synopsis

struct              udev_list_entry;
struct udev_list_entry * udev_list_entry_get_next       (struct udev_list_entry *list_entry);
struct udev_list_entry * udev_list_entry_get_by_name    (struct udev_list_entry *list_entry,
                                                         const char *name);
const char *        udev_list_entry_get_name            (struct udev_list_entry *list_entry);
const char *        udev_list_entry_get_value           (struct udev_list_entry *list_entry);
#define             udev_list_entry_foreach             (list_entry,
                                                         first_entry)

Description

Libudev list operations.

Details

struct udev_list_entry

struct udev_list_entry;

Opaque object representing one entry in a list. An entry contains contains a name, and optionally a value.


udev_list_entry_get_next ()

struct udev_list_entry * udev_list_entry_get_next       (struct udev_list_entry *list_entry);

list_entry :

current entry

Returns :

the next entry from the list, NULL is no more entries are found.

udev_list_entry_get_by_name ()

struct udev_list_entry * udev_list_entry_get_by_name    (struct udev_list_entry *list_entry,
                                                         const char *name);

list_entry :

current entry

name :

name string to match

Returns :

the entry where name matched, NULL if no matching entry is found.

udev_list_entry_get_name ()

const char *        udev_list_entry_get_name            (struct udev_list_entry *list_entry);

list_entry :

current entry

Returns :

the name string of this entry.

udev_list_entry_get_value ()

const char *        udev_list_entry_get_value           (struct udev_list_entry *list_entry);

list_entry :

current entry

Returns :

the value string of this entry.

udev_list_entry_foreach()

#define             udev_list_entry_foreach(list_entry, first_entry)

Helper to iterate over all entries of a list.

list_entry :

entry to store the current position

first_entry :

first entry to start with
udev-182/src/docs/html/PaxHeaders.12492/home.png0000644000521600052160000000013211731430511017500 xustar000000000000000030 mtime=1332097353.908438941 30 atime=1332097353.908438941 30 ctime=1332097353.908438941 udev-182/src/docs/html/home.png0000644000521600052160000000121611731430511016102 0ustar00kaykay00000000000000‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ1õÚKvIDATxœÕ•±kqÅ?ßrC‡ßàpà ~C„np¼¡CAAJ .B-\'G‡]:Ü “‚ƒCÇ -(ˆ8´à Ô€!…fD°€…çÒ“klbRÛÁoyüxïûîËïwpðIJº<°of_®-@ÒððçRH•´ÏfÖŸtèÂü¤^¯×ÓÚÚš’$Q«ÕÒ|“ôpâ’¶€gív;X^^&Ïs¢(bww—Z­F£ÑÀ9Çææ&Þû3඙ Æ’^IRµZUE.0Z]]Uš¦ ÃPY–Mü8óHÒGIÚÙÙÑìììæeŸkqqñÒ€™!ó  $ÛÛÛ¬¯¯3Œn eýþ{-/seeeìÔÃŒãXóóóåO‡Í·$ý8==UÇS™—é½×ÑÑQòRR€¤'ã–9-sÚÛÛ+B^ éC·Û•sîŸÍËÂ+%À°<7³ŸWô˜¿ õâ:™2IEND®B`‚udev-182/src/docs/PaxHeaders.12492/Makefile.am0000644000521600052160000000013111711107662017137 xustar000000000000000030 mtime=1327796146.949827028 29 atime=1332086775.78018688 30 ctime=1332097353.842438939 udev-182/src/docs/Makefile.am0000664000521600052160000000661411711107662015553 0ustar00kaykay00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.10 at least. AUTOMAKE_OPTIONS = 1.10 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=libudev # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=$(top_srcdir)/src # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space udev # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/src/libudev*.h CFILE_GLOB=$(top_srcdir)/src/libudev*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= libudev-private.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS= GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += version.xml.in # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want your docs-status tested during 'make check' if ENABLE_GTK_DOC #TESTS_ENVIRONMENT = cd $(srcsrc) #TESTS = $(GTKDOC_CHECK) endif udev-182/src/docs/PaxHeaders.12492/libudev-docs.xml0000644000521600052160000000013111711107662020205 xustar000000000000000030 mtime=1327796146.949827028 30 atime=1332097318.704438103 29 ctime=1332097353.86543894 udev-182/src/docs/libudev-docs.xml0000664000521600052160000000203511711107662016612 0ustar00kaykay00000000000000 ]> libudev Reference Manual for libudev version &version; 2009-2011 Kay Sievers <kay.sievers@vrfy.org> libudev API Index udev-182/src/docs/PaxHeaders.12492/libudev-overrides.txt0000644000521600052160000000013211731430446021300 xustar000000000000000030 mtime=1332097318.573438099 30 atime=1332097318.707438103 30 ctime=1332097353.875438941 udev-182/src/docs/libudev-overrides.txt0000664000521600052160000000000011731430446017672 0ustar00kaykay00000000000000udev-182/src/docs/PaxHeaders.12492/libudev-sections.txt0000644000521600052160000000013211731430511021116 xustar000000000000000030 mtime=1332097353.924438941 30 atime=1332097318.704438103 30 ctime=1332097353.924438941 udev-182/src/docs/libudev-sections.txt0000664000521600052160000000552311731430511017527 0ustar00kaykay00000000000000
libudev udev udev udev_ref udev_unref udev_new udev_set_log_fn udev_get_log_priority udev_set_log_priority udev_get_sys_path udev_get_dev_path udev_get_run_path udev_get_userdata udev_set_userdata
libudev-list udev_list udev_list_entry udev_list_entry_get_next udev_list_entry_get_by_name udev_list_entry_get_name udev_list_entry_get_value udev_list_entry_foreach
libudev-device udev_device udev_device udev_device_ref udev_device_unref udev_device_get_udev udev_device_new_from_syspath udev_device_new_from_devnum udev_device_new_from_subsystem_sysname udev_device_new_from_environment udev_device_get_parent udev_device_get_parent_with_subsystem_devtype udev_device_get_devpath udev_device_get_subsystem udev_device_get_devtype udev_device_get_syspath udev_device_get_sysname udev_device_get_sysnum udev_device_get_devnode udev_device_get_is_initialized udev_device_get_devlinks_list_entry udev_device_get_properties_list_entry udev_device_get_tags_list_entry udev_device_get_property_value udev_device_get_driver udev_device_get_devnum udev_device_get_action udev_device_get_sysattr_value udev_device_get_sysattr_list_entry udev_device_get_seqnum udev_device_get_usec_since_initialized udev_device_has_tag
libudev-monitor udev_monitor udev_monitor udev_monitor_ref udev_monitor_unref udev_monitor_get_udev udev_monitor_new_from_netlink udev_monitor_new_from_socket udev_monitor_enable_receiving udev_monitor_set_receive_buffer_size udev_monitor_get_fd udev_monitor_receive_device udev_monitor_filter_add_match_subsystem_devtype udev_monitor_filter_add_match_tag udev_monitor_filter_update udev_monitor_filter_remove
libudev-enumerate udev_enumerate udev_enumerate udev_enumerate_ref udev_enumerate_unref udev_enumerate_get_udev udev_enumerate_new udev_enumerate_add_match_subsystem udev_enumerate_add_nomatch_subsystem udev_enumerate_add_match_sysattr udev_enumerate_add_nomatch_sysattr udev_enumerate_add_match_property udev_enumerate_add_match_tag udev_enumerate_add_match_parent udev_enumerate_add_match_is_initialized udev_enumerate_add_match_sysname udev_enumerate_add_syspath udev_enumerate_scan_devices udev_enumerate_scan_subsystems udev_enumerate_get_list_entry
libudev-queue udev_queue udev_queue udev_queue_ref udev_queue_unref udev_queue_get_udev udev_queue_new udev_queue_get_udev_is_active udev_queue_get_queue_is_empty udev_queue_get_seqnum_is_finished udev_queue_get_seqnum_sequence_is_finished udev_queue_get_queued_list_entry udev_queue_get_kernel_seqnum udev_queue_get_udev_seqnum
libudev-util udev_util udev_util_encode_string
udev-182/src/docs/PaxHeaders.12492/libudev.types0000644000521600052160000000013211731430511017616 xustar000000000000000030 mtime=1332097353.920438941 30 atime=1332097353.920438941 30 ctime=1332097353.920438941 udev-182/src/docs/libudev.types0000664000521600052160000000000011731430511016210 0ustar00kaykay00000000000000udev-182/src/docs/PaxHeaders.12492/Makefile.in0000644000521600052160000000013211731430314017144 xustar000000000000000030 mtime=1332097228.853435961 30 atime=1332097294.935437536 30 ctime=1332097353.848438939 udev-182/src/docs/Makefile.in0000664000521600052160000005653411731430314015565 0ustar00kaykay00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make subdir = src/docs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLKID_CFLAGS = @BLKID_CFLAGS@ BLKID_LIBS = @BLKID_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIRMWARE_PATH = @FIRMWARE_PATH@ GIRDIR = @GIRDIR@ GIRTYPELIBDIR = @GIRTYPELIBDIR@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GPERF = @GPERF@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ G_IR_COMPILER = @G_IR_COMPILER@ G_IR_GENERATE = @G_IR_GENERATE@ G_IR_SCANNER = @G_IR_SCANNER@ HTML_DIR = @HTML_DIR@ INCLUDE_PREFIX = @INCLUDE_PREFIX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ KMOD_CFLAGS = @KMOD_CFLAGS@ KMOD_LIBS = @KMOD_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCI_DATABASE = @PCI_DATABASE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USBUTILS_CFLAGS = @USBUTILS_CFLAGS@ USBUTILS_LIBS = @USBUTILS_LIBS@ USB_DATABASE = @USB_DATABASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ my_CFLAGS = @my_CFLAGS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ rootlib_execdir = @rootlib_execdir@ rootprefix = @rootprefix@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ systemdsystemunitdir = @systemdsystemunitdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # We require automake 1.10 at least. AUTOMAKE_OPTIONS = 1.10 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = libudev # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR = $(top_srcdir)/src # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space udev # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = --path=$(abs_srcdir) --path=$(abs_builddir) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/src/libudev*.h CFILE_GLOB = $(top_srcdir)/src/libudev*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES = libudev-private.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = GTKDOC_LIBS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/gtk-doc.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local dist-hook distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local @ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) @ENABLE_GTK_DOC_FALSE@all-local: docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" @ENABLE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want your docs-status tested during 'make check' #TESTS_ENVIRONMENT = cd $(srcsrc) #TESTS = $(GTKDOC_CHECK) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: udev-182/src/PaxHeaders.12492/udev-event.c0000644000521600052160000000013211711145706016403 xustar000000000000000030 mtime=1327811526.881038919 30 atime=1332083325.603104665 30 ctime=1332097353.230438925 udev-182/src/udev-event.c0000644000521600052160000012145611711145706015016 0ustar00kaykay00000000000000/* * Copyright (C) 2003-2010 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" struct udev_event *udev_event_new(struct udev_device *dev) { struct udev *udev = udev_device_get_udev(dev); struct udev_event *event; event = calloc(1, sizeof(struct udev_event)); if (event == NULL) return NULL; event->dev = dev; event->udev = udev; udev_list_init(udev, &event->run_list, false); event->fd_signal = -1; event->birth_usec = now_usec(); event->timeout_usec = 30 * 1000 * 1000; dbg(event->udev, "allocated event %p\n", event); return event; } void udev_event_unref(struct udev_event *event) { if (event == NULL) return; udev_list_cleanup(&event->run_list); free(event->program_result); free(event->name); dbg(event->udev, "free event %p\n", event); free(event); } size_t udev_event_apply_format(struct udev_event *event, const char *src, char *dest, size_t size) { struct udev_device *dev = event->dev; enum subst_type { SUBST_UNKNOWN, SUBST_DEVNODE, SUBST_ATTR, SUBST_ENV, SUBST_KERNEL, SUBST_KERNEL_NUMBER, SUBST_DRIVER, SUBST_DEVPATH, SUBST_ID, SUBST_MAJOR, SUBST_MINOR, SUBST_RESULT, SUBST_PARENT, SUBST_NAME, SUBST_LINKS, SUBST_ROOT, SUBST_SYS, }; static const struct subst_map { char *name; char fmt; enum subst_type type; } map[] = { { .name = "devnode", .fmt = 'N', .type = SUBST_DEVNODE }, { .name = "tempnode", .fmt = 'N', .type = SUBST_DEVNODE }, { .name = "attr", .fmt = 's', .type = SUBST_ATTR }, { .name = "sysfs", .fmt = 's', .type = SUBST_ATTR }, { .name = "env", .fmt = 'E', .type = SUBST_ENV }, { .name = "kernel", .fmt = 'k', .type = SUBST_KERNEL }, { .name = "number", .fmt = 'n', .type = SUBST_KERNEL_NUMBER }, { .name = "driver", .fmt = 'd', .type = SUBST_DRIVER }, { .name = "devpath", .fmt = 'p', .type = SUBST_DEVPATH }, { .name = "id", .fmt = 'b', .type = SUBST_ID }, { .name = "major", .fmt = 'M', .type = SUBST_MAJOR }, { .name = "minor", .fmt = 'm', .type = SUBST_MINOR }, { .name = "result", .fmt = 'c', .type = SUBST_RESULT }, { .name = "parent", .fmt = 'P', .type = SUBST_PARENT }, { .name = "name", .fmt = 'D', .type = SUBST_NAME }, { .name = "links", .fmt = 'L', .type = SUBST_LINKS }, { .name = "root", .fmt = 'r', .type = SUBST_ROOT }, { .name = "sys", .fmt = 'S', .type = SUBST_SYS }, }; const char *from; char *s; size_t l; from = src; s = dest; l = size; for (;;) { enum subst_type type = SUBST_UNKNOWN; char attrbuf[UTIL_PATH_SIZE]; char *attr = NULL; while (from[0] != '\0') { if (from[0] == '$') { /* substitute named variable */ unsigned int i; if (from[1] == '$') { from++; goto copy; } for (i = 0; i < ARRAY_SIZE(map); i++) { if (strncmp(&from[1], map[i].name, strlen(map[i].name)) == 0) { type = map[i].type; from += strlen(map[i].name)+1; dbg(event->udev, "will substitute format name '%s'\n", map[i].name); goto subst; } } } else if (from[0] == '%') { /* substitute format char */ unsigned int i; if (from[1] == '%') { from++; goto copy; } for (i = 0; i < ARRAY_SIZE(map); i++) { if (from[1] == map[i].fmt) { type = map[i].type; from += 2; dbg(event->udev, "will substitute format char '%c'\n", map[i].fmt); goto subst; } } } copy: /* copy char */ if (l == 0) goto out; s[0] = from[0]; from++; s++; l--; } goto out; subst: /* extract possible $format{attr} */ if (from[0] == '{') { unsigned int i; from++; for (i = 0; from[i] != '}'; i++) { if (from[i] == '\0') { err(event->udev, "missing closing brace for format '%s'\n", src); goto out; } } if (i >= sizeof(attrbuf)) goto out; memcpy(attrbuf, from, i); attrbuf[i] = '\0'; from += i+1; attr = attrbuf; } else { attr = NULL; } switch (type) { case SUBST_DEVPATH: l = util_strpcpy(&s, l, udev_device_get_devpath(dev)); dbg(event->udev, "substitute devpath '%s'\n", udev_device_get_devpath(dev)); break; case SUBST_KERNEL: l = util_strpcpy(&s, l, udev_device_get_sysname(dev)); dbg(event->udev, "substitute kernel name '%s'\n", udev_device_get_sysname(dev)); break; case SUBST_KERNEL_NUMBER: if (udev_device_get_sysnum(dev) == NULL) break; l = util_strpcpy(&s, l, udev_device_get_sysnum(dev)); dbg(event->udev, "substitute kernel number '%s'\n", udev_device_get_sysnum(dev)); break; case SUBST_ID: if (event->dev_parent == NULL) break; l = util_strpcpy(&s, l, udev_device_get_sysname(event->dev_parent)); dbg(event->udev, "substitute id '%s'\n", udev_device_get_sysname(event->dev_parent)); break; case SUBST_DRIVER: { const char *driver; if (event->dev_parent == NULL) break; driver = udev_device_get_driver(event->dev_parent); if (driver == NULL) break; l = util_strpcpy(&s, l, driver); dbg(event->udev, "substitute driver '%s'\n", driver); break; } case SUBST_MAJOR: { char num[UTIL_PATH_SIZE]; sprintf(num, "%d", major(udev_device_get_devnum(dev))); l = util_strpcpy(&s, l, num); dbg(event->udev, "substitute major number '%s'\n", num); break; } case SUBST_MINOR: { char num[UTIL_PATH_SIZE]; sprintf(num, "%d", minor(udev_device_get_devnum(dev))); l = util_strpcpy(&s, l, num); dbg(event->udev, "substitute minor number '%s'\n", num); break; } case SUBST_RESULT: { char *rest; int i; if (event->program_result == NULL) break; /* get part part of the result string */ i = 0; if (attr != NULL) i = strtoul(attr, &rest, 10); if (i > 0) { char result[UTIL_PATH_SIZE]; char tmp[UTIL_PATH_SIZE]; char *cpos; dbg(event->udev, "request part #%d of result string\n", i); util_strscpy(result, sizeof(result), event->program_result); cpos = result; while (--i) { while (cpos[0] != '\0' && !isspace(cpos[0])) cpos++; while (isspace(cpos[0])) cpos++; } if (i > 0) { err(event->udev, "requested part of result string not found\n"); break; } util_strscpy(tmp, sizeof(tmp), cpos); /* %{2+}c copies the whole string from the second part on */ if (rest[0] != '+') { cpos = strchr(tmp, ' '); if (cpos) cpos[0] = '\0'; } l = util_strpcpy(&s, l, tmp); dbg(event->udev, "substitute part of result string '%s'\n", tmp); } else { l = util_strpcpy(&s, l, event->program_result); dbg(event->udev, "substitute result string '%s'\n", event->program_result); } break; } case SUBST_ATTR: { const char *value = NULL; char vbuf[UTIL_NAME_SIZE]; size_t len; int count; if (attr == NULL) { err(event->udev, "missing file parameter for attr\n"); break; } /* try to read the value specified by "[dmi/id]product_name" */ if (util_resolve_subsys_kernel(event->udev, attr, vbuf, sizeof(vbuf), 1) == 0) value = vbuf; /* try to read the attribute the device */ if (value == NULL) value = udev_device_get_sysattr_value(event->dev, attr); /* try to read the attribute of the parent device, other matches have selected */ if (value == NULL && event->dev_parent != NULL && event->dev_parent != event->dev) value = udev_device_get_sysattr_value(event->dev_parent, attr); if (value == NULL) break; /* strip trailing whitespace, and replace unwanted characters */ if (value != vbuf) util_strscpy(vbuf, sizeof(vbuf), value); len = strlen(vbuf); while (len > 0 && isspace(vbuf[--len])) vbuf[len] = '\0'; count = util_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT); if (count > 0) info(event->udev, "%i character(s) replaced\n" , count); l = util_strpcpy(&s, l, vbuf); dbg(event->udev, "substitute sysfs value '%s'\n", vbuf); break; } case SUBST_PARENT: { struct udev_device *dev_parent; const char *devnode; dev_parent = udev_device_get_parent(event->dev); if (dev_parent == NULL) break; devnode = udev_device_get_devnode(dev_parent); if (devnode != NULL) { size_t devlen = strlen(udev_get_dev_path(event->udev))+1; l = util_strpcpy(&s, l, &devnode[devlen]); dbg(event->udev, "found parent '%s', got node name '%s'\n", udev_device_get_syspath(dev_parent), &devnode[devlen]); } break; } case SUBST_DEVNODE: if (udev_device_get_devnode(dev) != NULL) l = util_strpcpy(&s, l, udev_device_get_devnode(dev)); break; case SUBST_NAME: { if (event->name != NULL) { l = util_strpcpy(&s, l, event->name); dbg(event->udev, "substitute custom node name '%s'\n", event->name); } else if (udev_device_get_devnode(dev) != NULL) { size_t devlen = strlen(udev_get_dev_path(event->udev))+1; l = util_strpcpy(&s, l, &udev_device_get_devnode(dev)[devlen]); dbg(event->udev, "substitute node name'%s'\n", &udev_device_get_devnode(dev)[devlen]); } else { l = util_strpcpy(&s, l, udev_device_get_sysname(dev)); dbg(event->udev, "substitute device name'%s'\n", udev_device_get_sysname(dev)); } break; } case SUBST_LINKS: { size_t devlen = strlen(udev_get_dev_path(event->udev))+1; struct udev_list_entry *list_entry; list_entry = udev_device_get_devlinks_list_entry(dev); if (list_entry == NULL) break; l = util_strpcpy(&s, l, &udev_list_entry_get_name(list_entry)[devlen]); udev_list_entry_foreach(list_entry, udev_list_entry_get_next(list_entry)) l = util_strpcpyl(&s, l, " ", &udev_list_entry_get_name(list_entry)[devlen], NULL); break; } case SUBST_ROOT: l = util_strpcpy(&s, l, udev_get_dev_path(event->udev)); dbg(event->udev, "substitute udev_root '%s'\n", udev_get_dev_path(event->udev)); break; case SUBST_SYS: l = util_strpcpy(&s, l, udev_get_sys_path(event->udev)); dbg(event->udev, "substitute sys_path '%s'\n", udev_get_sys_path(event->udev)); break; case SUBST_ENV: if (attr == NULL) { dbg(event->udev, "missing attribute\n"); break; } else { const char *value; value = udev_device_get_property_value(event->dev, attr); if (value == NULL) break; dbg(event->udev, "substitute env '%s=%s'\n", attr, value); l = util_strpcpy(&s, l, value); break; } default: err(event->udev, "unknown substitution type=%i\n", type); break; } } out: s[0] = '\0'; dbg(event->udev, "'%s' -> '%s' (%zu)\n", src, dest, l); return l; } static int spawn_exec(struct udev_event *event, const char *cmd, char *const argv[], char **envp, const sigset_t *sigmask, int fd_stdout, int fd_stderr) { struct udev *udev = event->udev; int err; int fd; /* discard child output or connect to pipe */ fd = open("/dev/null", O_RDWR); if (fd >= 0) { dup2(fd, STDIN_FILENO); if (fd_stdout < 0) dup2(fd, STDOUT_FILENO); if (fd_stderr < 0) dup2(fd, STDERR_FILENO); close(fd); } else { err(udev, "open /dev/null failed: %m\n"); } /* connect pipes to std{out,err} */ if (fd_stdout >= 0) { dup2(fd_stdout, STDOUT_FILENO); close(fd_stdout); } if (fd_stderr >= 0) { dup2(fd_stderr, STDERR_FILENO); close(fd_stderr); } /* terminate child in case parent goes away */ prctl(PR_SET_PDEATHSIG, SIGTERM); /* restore original udev sigmask before exec */ if (sigmask) sigprocmask(SIG_SETMASK, sigmask, NULL); execve(argv[0], argv, envp); /* exec failed */ err = -errno; err(udev, "failed to execute '%s' '%s': %m\n", argv[0], cmd); return err; } static void spawn_read(struct udev_event *event, const char *cmd, int fd_stdout, int fd_stderr, char *result, size_t ressize) { struct udev *udev = event->udev; size_t respos = 0; int fd_ep = -1; struct epoll_event ep_outpipe, ep_errpipe; /* read from child if requested */ if (fd_stdout < 0 && fd_stderr < 0) return; fd_ep = epoll_create1(EPOLL_CLOEXEC); if (fd_ep < 0) { err(udev, "error creating epoll fd: %m\n"); goto out; } if (fd_stdout >= 0) { memset(&ep_outpipe, 0, sizeof(struct epoll_event)); ep_outpipe.events = EPOLLIN; ep_outpipe.data.ptr = &fd_stdout; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_stdout, &ep_outpipe) < 0) { err(udev, "fail to add fd to epoll: %m\n"); goto out; } } if (fd_stderr >= 0) { memset(&ep_errpipe, 0, sizeof(struct epoll_event)); ep_errpipe.events = EPOLLIN; ep_errpipe.data.ptr = &fd_stderr; if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_stderr, &ep_errpipe) < 0) { err(udev, "fail to add fd to epoll: %m\n"); goto out; } } /* read child output */ while (fd_stdout >= 0 || fd_stderr >= 0) { int timeout; int fdcount; struct epoll_event ev[4]; int i; if (event->timeout_usec > 0) { unsigned long long age_usec; age_usec = now_usec() - event->birth_usec; if (age_usec >= event->timeout_usec) { err(udev, "timeout '%s'\n", cmd); goto out; } timeout = ((event->timeout_usec - age_usec) / 1000) + 1000; } else { timeout = -1; } fdcount = epoll_wait(fd_ep, ev, ARRAY_SIZE(ev), timeout); if (fdcount < 0) { if (errno == EINTR) continue; err(udev, "failed to poll: %m\n"); goto out; } if (fdcount == 0) { err(udev, "timeout '%s'\n", cmd); goto out; } for (i = 0; i < fdcount; i++) { int *fd = (int *)ev[i].data.ptr; if (ev[i].events & EPOLLIN) { ssize_t count; char buf[4096]; count = read(*fd, buf, sizeof(buf)-1); if (count <= 0) continue; buf[count] = '\0'; /* store stdout result */ if (result != NULL && *fd == fd_stdout) { if (respos + count < ressize) { memcpy(&result[respos], buf, count); respos += count; } else { err(udev, "'%s' ressize %zd too short\n", cmd, ressize); } } /* log debug output only if we watch stderr */ if (fd_stderr >= 0) { char *pos; char *line; pos = buf; while ((line = strsep(&pos, "\n"))) { if (pos != NULL || line[0] != '\0') info(udev, "'%s'(%s) '%s'\n", cmd, *fd == fd_stdout ? "out" : "err" , line); } } } else if (ev[i].events & EPOLLHUP) { if (epoll_ctl(fd_ep, EPOLL_CTL_DEL, *fd, NULL) < 0) { err(udev, "failed to remove fd from epoll: %m\n"); goto out; } *fd = -1; } } } /* return the child's stdout string */ if (result != NULL) { result[respos] = '\0'; dbg(udev, "result='%s'\n", result); } out: if (fd_ep >= 0) close(fd_ep); } static int spawn_wait(struct udev_event *event, const char *cmd, pid_t pid) { struct udev *udev = event->udev; struct pollfd pfd[1]; int err = 0; pfd[0].events = POLLIN; pfd[0].fd = event->fd_signal; while (pid > 0) { int timeout; int fdcount; if (event->timeout_usec > 0) { unsigned long long age_usec; age_usec = now_usec() - event->birth_usec; if (age_usec >= event->timeout_usec) timeout = 1000; else timeout = ((event->timeout_usec - age_usec) / 1000) + 1000; } else { timeout = -1; } fdcount = poll(pfd, 1, timeout); if (fdcount < 0) { if (errno == EINTR) continue; err = -errno; err(udev, "failed to poll: %m\n"); goto out; } if (fdcount == 0) { err(udev, "timeout: killing '%s' [%u]\n", cmd, pid); kill(pid, SIGKILL); } if (pfd[0].revents & POLLIN) { struct signalfd_siginfo fdsi; int status; ssize_t size; size = read(event->fd_signal, &fdsi, sizeof(struct signalfd_siginfo)); if (size != sizeof(struct signalfd_siginfo)) continue; switch (fdsi.ssi_signo) { case SIGTERM: event->sigterm = true; break; case SIGCHLD: if (waitpid(pid, &status, WNOHANG) < 0) break; if (WIFEXITED(status)) { info(udev, "'%s' [%u] exit with return code %i\n", cmd, pid, WEXITSTATUS(status)); if (WEXITSTATUS(status) != 0) err = -1; } else if (WIFSIGNALED(status)) { err(udev, "'%s' [%u] terminated by signal %i (%s)\n", cmd, pid, WTERMSIG(status), strsignal(WTERMSIG(status))); err = -1; } else if (WIFSTOPPED(status)) { err(udev, "'%s' [%u] stopped\n", cmd, pid); err = -1; } else if (WIFCONTINUED(status)) { err(udev, "'%s' [%u] continued\n", cmd, pid); err = -1; } else { err(udev, "'%s' [%u] exit with status 0x%04x\n", cmd, pid, status); err = -1; } pid = 0; break; } } } out: return err; } int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) { int i = 0; char *pos; if (strchr(cmd, ' ') == NULL) { argv[i++] = cmd; goto out; } pos = cmd; while (pos != NULL && pos[0] != '\0') { if (pos[0] == '\'') { /* do not separate quotes */ pos++; argv[i] = strsep(&pos, "\'"); if (pos != NULL) while (pos[0] == ' ') pos++; } else { argv[i] = strsep(&pos, " "); if (pos != NULL) while (pos[0] == ' ') pos++; } dbg(udev, "argv[%i] '%s'\n", i, argv[i]); i++; } out: argv[i] = NULL; if (argc) *argc = i; return 0; } int udev_event_spawn(struct udev_event *event, const char *cmd, char **envp, const sigset_t *sigmask, char *result, size_t ressize) { struct udev *udev = event->udev; int outpipe[2] = {-1, -1}; int errpipe[2] = {-1, -1}; pid_t pid; char arg[UTIL_PATH_SIZE]; char *argv[128]; char program[UTIL_PATH_SIZE]; int err = 0; util_strscpy(arg, sizeof(arg), cmd); udev_build_argv(event->udev, arg, NULL, argv); /* pipes from child to parent */ if (result != NULL || udev_get_log_priority(udev) >= LOG_INFO) { if (pipe2(outpipe, O_NONBLOCK) != 0) { err = -errno; err(udev, "pipe failed: %m\n"); goto out; } } if (udev_get_log_priority(udev) >= LOG_INFO) { if (pipe2(errpipe, O_NONBLOCK) != 0) { err = -errno; err(udev, "pipe failed: %m\n"); goto out; } } /* allow programs in /usr/lib/udev/ to be called without the path */ if (argv[0][0] != '/') { util_strscpyl(program, sizeof(program), PKGLIBEXECDIR "/", argv[0], NULL); argv[0] = program; } pid = fork(); switch(pid) { case 0: /* child closes parent's ends of pipes */ if (outpipe[READ_END] >= 0) { close(outpipe[READ_END]); outpipe[READ_END] = -1; } if (errpipe[READ_END] >= 0) { close(errpipe[READ_END]); errpipe[READ_END] = -1; } info(udev, "starting '%s'\n", cmd); err = spawn_exec(event, cmd, argv, envp, sigmask, outpipe[WRITE_END], errpipe[WRITE_END]); _exit(2 ); case -1: err(udev, "fork of '%s' failed: %m\n", cmd); err = -1; goto out; default: /* parent closed child's ends of pipes */ if (outpipe[WRITE_END] >= 0) { close(outpipe[WRITE_END]); outpipe[WRITE_END] = -1; } if (errpipe[WRITE_END] >= 0) { close(errpipe[WRITE_END]); errpipe[WRITE_END] = -1; } spawn_read(event, cmd, outpipe[READ_END], errpipe[READ_END], result, ressize); err = spawn_wait(event, cmd, pid); } out: if (outpipe[READ_END] >= 0) close(outpipe[READ_END]); if (outpipe[WRITE_END] >= 0) close(outpipe[WRITE_END]); if (errpipe[READ_END] >= 0) close(errpipe[READ_END]); if (errpipe[WRITE_END] >= 0) close(errpipe[WRITE_END]); return err; } static void rename_netif_kernel_log(struct ifreq ifr) { int klog; FILE *f; klog = open("/dev/kmsg", O_WRONLY); if (klog < 0) return; f = fdopen(klog, "w"); if (f == NULL) { close(klog); return; } fprintf(f, "<30>udevd[%u]: renamed network interface %s to %s\n", getpid(), ifr.ifr_name, ifr.ifr_newname); fclose(f); } static int rename_netif(struct udev_event *event) { struct udev_device *dev = event->dev; int sk; struct ifreq ifr; int loop; int err; info(event->udev, "changing net interface name from '%s' to '%s'\n", udev_device_get_sysname(dev), event->name); sk = socket(PF_INET, SOCK_DGRAM, 0); if (sk < 0) { err = -errno; err(event->udev, "error opening socket: %m\n"); return err; } memset(&ifr, 0x00, sizeof(struct ifreq)); util_strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev)); util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name); err = ioctl(sk, SIOCSIFNAME, &ifr); if (err == 0) { rename_netif_kernel_log(ifr); goto out; } /* keep trying if the destination interface name already exists */ err = -errno; if (err != -EEXIST) goto out; /* free our own name, another process may wait for us */ snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev)); err = ioctl(sk, SIOCSIFNAME, &ifr); if (err < 0) { err = -errno; goto out; } /* log temporary name */ rename_netif_kernel_log(ifr); /* wait a maximum of 90 seconds for our target to become available */ util_strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname); util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name); loop = 90 * 20; while (loop--) { const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 }; dbg(event->udev, "wait for netif '%s' to become free, loop=%i\n", event->name, (90 * 20) - loop); nanosleep(&duration, NULL); err = ioctl(sk, SIOCSIFNAME, &ifr); if (err == 0) { rename_netif_kernel_log(ifr); break; } err = -errno; if (err != -EEXIST) break; } out: if (err < 0) err(event->udev, "error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname); close(sk); return err; } int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask) { struct udev_device *dev = event->dev; int err = 0; if (udev_device_get_subsystem(dev) == NULL) return -1; if (strcmp(udev_device_get_action(dev), "remove") == 0) { udev_device_read_db(dev, NULL); udev_device_delete_db(dev); udev_device_tag_index(dev, NULL, false); if (major(udev_device_get_devnum(dev)) != 0) udev_watch_end(event->udev, dev); udev_rules_apply_to_event(rules, event, sigmask); if (major(udev_device_get_devnum(dev)) != 0) udev_node_remove(dev); } else { event->dev_db = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev)); if (event->dev_db != NULL) { udev_device_read_db(event->dev_db, NULL); udev_device_set_info_loaded(event->dev_db); /* disable watch during event processing */ if (major(udev_device_get_devnum(dev)) != 0) udev_watch_end(event->udev, event->dev_db); } udev_rules_apply_to_event(rules, event, sigmask); /* rename a new network interface, if needed */ if (udev_device_get_ifindex(dev) > 0 && strcmp(udev_device_get_action(dev), "add") == 0 && event->name != NULL && strcmp(event->name, udev_device_get_sysname(dev)) != 0) { char syspath[UTIL_PATH_SIZE]; char *pos; err = rename_netif(event); if (err == 0) { info(event->udev, "renamed netif to '%s'\n", event->name); /* remember old name */ udev_device_add_property(dev, "INTERFACE_OLD", udev_device_get_sysname(dev)); /* now change the devpath, because the kernel device name has changed */ util_strscpy(syspath, sizeof(syspath), udev_device_get_syspath(dev)); pos = strrchr(syspath, '/'); if (pos != NULL) { pos++; util_strscpy(pos, sizeof(syspath) - (pos - syspath), event->name); udev_device_set_syspath(event->dev, syspath); udev_device_add_property(dev, "INTERFACE", udev_device_get_sysname(dev)); info(event->udev, "changed devpath to '%s'\n", udev_device_get_devpath(dev)); } } } if (major(udev_device_get_devnum(dev)) > 0) { /* remove/update possible left-over symlinks from old database entry */ if (event->dev_db != NULL) udev_node_update_old_links(dev, event->dev_db); if (!event->mode_set) { if (udev_device_get_devnode_mode(dev) > 0) { /* kernel supplied value */ event->mode = udev_device_get_devnode_mode(dev); } else if (event->gid > 0) { /* default 0660 if a group is assigned */ event->mode = 0660; } else { /* default 0600 */ event->mode = 0600; } } udev_node_add(dev, event->mode, event->uid, event->gid); } /* preserve old, or get new initialization timestamp */ if (event->dev_db != NULL && udev_device_get_usec_initialized(event->dev_db) > 0) udev_device_set_usec_initialized(event->dev, udev_device_get_usec_initialized(event->dev_db)); else if (udev_device_get_usec_initialized(event->dev) == 0) udev_device_set_usec_initialized(event->dev, now_usec()); /* (re)write database file */ udev_device_update_db(dev); udev_device_tag_index(dev, event->dev_db, true); udev_device_set_is_initialized(dev); udev_device_unref(event->dev_db); event->dev_db = NULL; } out: return err; } int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask) { struct udev_list_entry *list_entry; int err = 0; dbg(event->udev, "executing run list\n"); udev_list_entry_foreach(list_entry, udev_list_get_entry(&event->run_list)) { const char *cmd = udev_list_entry_get_name(list_entry); if (strncmp(cmd, "socket:", strlen("socket:")) == 0) { struct udev_monitor *monitor; monitor = udev_monitor_new_from_socket(event->udev, &cmd[strlen("socket:")]); if (monitor == NULL) continue; udev_monitor_send_device(monitor, NULL, event->dev); udev_monitor_unref(monitor); } else { char program[UTIL_PATH_SIZE]; char **envp; if (event->exec_delay > 0) { info(event->udev, "delay execution of '%s'\n", program); sleep(event->exec_delay); } udev_event_apply_format(event, cmd, program, sizeof(program)); envp = udev_device_get_properties_envp(event->dev); if (udev_event_spawn(event, program, envp, sigmask, NULL, 0) < 0) { if (udev_list_entry_get_num(list_entry)) err = -1; } } } return err; } udev-182/src/PaxHeaders.12492/udevd.html0000644000521600052160000000013011731430437016150 xustar000000000000000029 mtime=1332097311.06043792 29 atime=1332097311.06043792 30 ctime=1332097352.045438898 udev-182/src/udevd.html0000664000521600052160000001104511731430437014557 0ustar00kaykay00000000000000 udevd

Name

udevd — event managing daemon

Synopsis

udevd [--daemon] [--debug] [--children-max=] [--exec-delay=] [--resolve-names=early|late|never] [--version] [--help]

udev-182/src/PaxHeaders.12492/udev-rules.c0000644000521600052160000000013211730121166016407 xustar000000000000000030 mtime=1331733110.135891366 30 atime=1332083326.115104678 30 ctime=1332097353.260438925 udev-182/src/udev-rules.c0000664000521600052160000034250411730121166015023 0ustar00kaykay00000000000000/* * Copyright (C) 2003-2010 Kay Sievers * Copyright (C) 2008 Alan Jenkins * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" #define PREALLOC_TOKEN 2048 #define PREALLOC_STRBUF 32 * 1024 #define PREALLOC_TRIE 256 struct uid_gid { unsigned int name_off; union { uid_t uid; gid_t gid; }; }; struct trie_node { /* this node's first child */ unsigned int child_idx; /* the next child of our parent node's child list */ unsigned int next_child_idx; /* this node's last child (shortcut for append) */ unsigned int last_child_idx; unsigned int value_off; unsigned short value_len; unsigned char key; }; struct udev_rules { struct udev *udev; int resolve_names; /* every key in the rules file becomes a token */ struct token *tokens; unsigned int token_cur; unsigned int token_max; /* all key strings are copied to a single string buffer */ char *buf; size_t buf_cur; size_t buf_max; unsigned int buf_count; /* during rule parsing, strings are indexed to find duplicates */ struct trie_node *trie_nodes; unsigned int trie_nodes_cur; unsigned int trie_nodes_max; /* during rule parsing, uid/gid lookup results are cached */ struct uid_gid *uids; unsigned int uids_cur; unsigned int uids_max; struct uid_gid *gids; unsigned int gids_cur; unsigned int gids_max; }; /* KEY=="", KEY!="", KEY+="", KEY="", KEY:="" */ enum operation_type { OP_UNSET, OP_MATCH, OP_NOMATCH, OP_MATCH_MAX, OP_ADD, OP_ASSIGN, OP_ASSIGN_FINAL, }; enum string_glob_type { GL_UNSET, GL_PLAIN, /* no special chars */ GL_GLOB, /* shell globs ?,*,[] */ GL_SPLIT, /* multi-value A|B */ GL_SPLIT_GLOB, /* multi-value with glob A*|B* */ GL_SOMETHING, /* commonly used "?*" */ }; enum string_subst_type { SB_UNSET, SB_NONE, SB_FORMAT, SB_SUBSYS, }; /* tokens of a rule are sorted/handled in this order */ enum token_type { TK_UNSET, TK_RULE, TK_M_ACTION, /* val */ TK_M_DEVPATH, /* val */ TK_M_KERNEL, /* val */ TK_M_DEVLINK, /* val */ TK_M_NAME, /* val */ TK_M_ENV, /* val, attr */ TK_M_TAG, /* val */ TK_M_SUBSYSTEM, /* val */ TK_M_DRIVER, /* val */ TK_M_WAITFOR, /* val */ TK_M_ATTR, /* val, attr */ TK_M_PARENTS_MIN, TK_M_KERNELS, /* val */ TK_M_SUBSYSTEMS, /* val */ TK_M_DRIVERS, /* val */ TK_M_ATTRS, /* val, attr */ TK_M_TAGS, /* val */ TK_M_PARENTS_MAX, TK_M_TEST, /* val, mode_t */ TK_M_EVENT_TIMEOUT, /* int */ TK_M_PROGRAM, /* val */ TK_M_IMPORT_FILE, /* val */ TK_M_IMPORT_PROG, /* val */ TK_M_IMPORT_BUILTIN, /* val */ TK_M_IMPORT_DB, /* val */ TK_M_IMPORT_CMDLINE, /* val */ TK_M_IMPORT_PARENT, /* val */ TK_M_RESULT, /* val */ TK_M_MAX, TK_A_STRING_ESCAPE_NONE, TK_A_STRING_ESCAPE_REPLACE, TK_A_DB_PERSIST, TK_A_INOTIFY_WATCH, /* int */ TK_A_DEVLINK_PRIO, /* int */ TK_A_OWNER, /* val */ TK_A_GROUP, /* val */ TK_A_MODE, /* val */ TK_A_OWNER_ID, /* uid_t */ TK_A_GROUP_ID, /* gid_t */ TK_A_MODE_ID, /* mode_t */ TK_A_STATIC_NODE, /* val */ TK_A_ENV, /* val, attr */ TK_A_TAG, /* val */ TK_A_NAME, /* val */ TK_A_DEVLINK, /* val */ TK_A_ATTR, /* val, attr */ TK_A_RUN, /* val, bool */ TK_A_GOTO, /* size_t */ TK_END, }; /* we try to pack stuff in a way that we take only 12 bytes per token */ struct token { union { unsigned char type; /* same in rule and key */ struct { enum token_type type:8; bool can_set_name:1; bool has_static_node:1; unsigned int unused:6; unsigned short token_count; unsigned int label_off; unsigned short filename_off; unsigned short filename_line; } rule; struct { enum token_type type:8; enum operation_type op:8; enum string_glob_type glob:8; enum string_subst_type subst:4; enum string_subst_type attrsubst:4; unsigned int value_off; union { unsigned int attr_off; int devlink_unique; unsigned int rule_goto; mode_t mode; uid_t uid; gid_t gid; int devlink_prio; int event_timeout; int watch; enum udev_builtin_cmd builtin_cmd; }; } key; }; }; #define MAX_TK 64 struct rule_tmp { struct udev_rules *rules; struct token rule; struct token token[MAX_TK]; unsigned int token_cur; }; #ifdef ENABLE_DEBUG static const char *operation_str(enum operation_type type) { static const char *operation_strs[] = { [OP_UNSET] = "UNSET", [OP_MATCH] = "match", [OP_NOMATCH] = "nomatch", [OP_MATCH_MAX] = "MATCH_MAX", [OP_ADD] = "add", [OP_ASSIGN] = "assign", [OP_ASSIGN_FINAL] = "assign-final", } ; return operation_strs[type]; } static const char *string_glob_str(enum string_glob_type type) { static const char *string_glob_strs[] = { [GL_UNSET] = "UNSET", [GL_PLAIN] = "plain", [GL_GLOB] = "glob", [GL_SPLIT] = "split", [GL_SPLIT_GLOB] = "split-glob", [GL_SOMETHING] = "split-glob", }; return string_glob_strs[type]; } static const char *token_str(enum token_type type) { static const char *token_strs[] = { [TK_UNSET] = "UNSET", [TK_RULE] = "RULE", [TK_M_ACTION] = "M ACTION", [TK_M_DEVPATH] = "M DEVPATH", [TK_M_KERNEL] = "M KERNEL", [TK_M_DEVLINK] = "M DEVLINK", [TK_M_NAME] = "M NAME", [TK_M_ENV] = "M ENV", [TK_M_TAG] = "M TAG", [TK_M_SUBSYSTEM] = "M SUBSYSTEM", [TK_M_DRIVER] = "M DRIVER", [TK_M_WAITFOR] = "M WAITFOR", [TK_M_ATTR] = "M ATTR", [TK_M_PARENTS_MIN] = "M PARENTS_MIN", [TK_M_KERNELS] = "M KERNELS", [TK_M_SUBSYSTEMS] = "M SUBSYSTEMS", [TK_M_DRIVERS] = "M DRIVERS", [TK_M_ATTRS] = "M ATTRS", [TK_M_TAGS] = "M TAGS", [TK_M_PARENTS_MAX] = "M PARENTS_MAX", [TK_M_TEST] = "M TEST", [TK_M_EVENT_TIMEOUT] = "M EVENT_TIMEOUT", [TK_M_PROGRAM] = "M PROGRAM", [TK_M_IMPORT_FILE] = "M IMPORT_FILE", [TK_M_IMPORT_PROG] = "M IMPORT_PROG", [TK_M_IMPORT_BUILTIN] = "M IMPORT_BUILTIN", [TK_M_IMPORT_DB] = "M IMPORT_DB", [TK_M_IMPORT_CMDLINE] = "M IMPORT_CMDLINE", [TK_M_IMPORT_PARENT] = "M IMPORT_PARENT", [TK_M_RESULT] = "M RESULT", [TK_M_MAX] = "M MAX", [TK_A_STRING_ESCAPE_NONE] = "A STRING_ESCAPE_NONE", [TK_A_STRING_ESCAPE_REPLACE] = "A STRING_ESCAPE_REPLACE", [TK_A_DB_PERSIST] = "A DB_PERSIST", [TK_A_INOTIFY_WATCH] = "A INOTIFY_WATCH", [TK_A_DEVLINK_PRIO] = "A DEVLINK_PRIO", [TK_A_OWNER] = "A OWNER", [TK_A_GROUP] = "A GROUP", [TK_A_MODE] = "A MODE", [TK_A_OWNER_ID] = "A OWNER_ID", [TK_A_GROUP_ID] = "A GROUP_ID", [TK_A_STATIC_NODE] = "A STATIC_NODE", [TK_A_MODE_ID] = "A MODE_ID", [TK_A_ENV] = "A ENV", [TK_A_TAG] = "A ENV", [TK_A_NAME] = "A NAME", [TK_A_DEVLINK] = "A DEVLINK", [TK_A_ATTR] = "A ATTR", [TK_A_RUN] = "A RUN", [TK_A_GOTO] = "A GOTO", [TK_END] = "END", }; return token_strs[type]; } static void dump_token(struct udev_rules *rules, struct token *token) { enum token_type type = token->type; enum operation_type op = token->key.op; enum string_glob_type glob = token->key.glob; const char *value = &rules->buf[token->key.value_off]; const char *attr = &rules->buf[token->key.attr_off]; switch (type) { case TK_RULE: { const char *tks_ptr = (char *)rules->tokens; const char *tk_ptr = (char *)token; unsigned int idx = (tk_ptr - tks_ptr) / sizeof(struct token); dbg(rules->udev, "* RULE %s:%u, token: %u, count: %u, label: '%s'\n", &rules->buf[token->rule.filename_off], token->rule.filename_line, idx, token->rule.token_count, &rules->buf[token->rule.label_off]); break; } case TK_M_ACTION: case TK_M_DEVPATH: case TK_M_KERNEL: case TK_M_SUBSYSTEM: case TK_M_DRIVER: case TK_M_WAITFOR: case TK_M_DEVLINK: case TK_M_NAME: case TK_M_KERNELS: case TK_M_SUBSYSTEMS: case TK_M_DRIVERS: case TK_M_TAGS: case TK_M_PROGRAM: case TK_M_IMPORT_FILE: case TK_M_IMPORT_PROG: case TK_M_IMPORT_DB: case TK_M_IMPORT_CMDLINE: case TK_M_IMPORT_PARENT: case TK_M_RESULT: case TK_A_NAME: case TK_A_DEVLINK: case TK_A_OWNER: case TK_A_GROUP: case TK_A_MODE: case TK_A_RUN: dbg(rules->udev, "%s %s '%s'(%s)\n", token_str(type), operation_str(op), value, string_glob_str(glob)); break; case TK_M_IMPORT_BUILTIN: dbg(rules->udev, "%s %i '%s'\n", token_str(type), token->key.builtin_cmd, value); break; case TK_M_ATTR: case TK_M_ATTRS: case TK_M_ENV: case TK_A_ATTR: case TK_A_ENV: dbg(rules->udev, "%s %s '%s' '%s'(%s)\n", token_str(type), operation_str(op), attr, value, string_glob_str(glob)); break; case TK_M_TAG: case TK_A_TAG: dbg(rules->udev, "%s %s '%s'\n", token_str(type), operation_str(op), value); break; case TK_A_STRING_ESCAPE_NONE: case TK_A_STRING_ESCAPE_REPLACE: case TK_A_DB_PERSIST: dbg(rules->udev, "%s\n", token_str(type)); break; case TK_M_TEST: dbg(rules->udev, "%s %s '%s'(%s) %#o\n", token_str(type), operation_str(op), value, string_glob_str(glob), token->key.mode); break; case TK_A_INOTIFY_WATCH: dbg(rules->udev, "%s %u\n", token_str(type), token->key.watch); break; case TK_A_DEVLINK_PRIO: dbg(rules->udev, "%s %u\n", token_str(type), token->key.devlink_prio); break; case TK_A_OWNER_ID: dbg(rules->udev, "%s %s %u\n", token_str(type), operation_str(op), token->key.uid); break; case TK_A_GROUP_ID: dbg(rules->udev, "%s %s %u\n", token_str(type), operation_str(op), token->key.gid); break; case TK_A_MODE_ID: dbg(rules->udev, "%s %s %#o\n", token_str(type), operation_str(op), token->key.mode); break; case TK_A_STATIC_NODE: dbg(rules->udev, "%s '%s'\n", token_str(type), value); break; case TK_M_EVENT_TIMEOUT: dbg(rules->udev, "%s %u\n", token_str(type), token->key.event_timeout); break; case TK_A_GOTO: dbg(rules->udev, "%s '%s' %u\n", token_str(type), value, token->key.rule_goto); break; case TK_END: dbg(rules->udev, "* %s\n", token_str(type)); break; case TK_M_PARENTS_MIN: case TK_M_PARENTS_MAX: case TK_M_MAX: case TK_UNSET: dbg(rules->udev, "unknown type %u\n", type); break; } } static void dump_rules(struct udev_rules *rules) { unsigned int i; dbg(rules->udev, "dumping %u (%zu bytes) tokens, %u (%zu bytes) strings\n", rules->token_cur, rules->token_cur * sizeof(struct token), rules->buf_count, rules->buf_cur); for(i = 0; i < rules->token_cur; i++) dump_token(rules, &rules->tokens[i]); } #else static inline const char *operation_str(enum operation_type type) { return NULL; } static inline const char *token_str(enum token_type type) { return NULL; } static inline void dump_token(struct udev_rules *rules, struct token *token) {} static inline void dump_rules(struct udev_rules *rules) {} #endif /* ENABLE_DEBUG */ static int add_new_string(struct udev_rules *rules, const char *str, size_t bytes) { int off; /* grow buffer if needed */ if (rules->buf_cur + bytes+1 >= rules->buf_max) { char *buf; unsigned int add; /* double the buffer size */ add = rules->buf_max; if (add < bytes * 8) add = bytes * 8; buf = realloc(rules->buf, rules->buf_max + add); if (buf == NULL) return -1; dbg(rules->udev, "extend buffer from %zu to %zu\n", rules->buf_max, rules->buf_max + add); rules->buf = buf; rules->buf_max += add; } off = rules->buf_cur; memcpy(&rules->buf[rules->buf_cur], str, bytes); rules->buf_cur += bytes; rules->buf_count++; return off; } static int add_string(struct udev_rules *rules, const char *str) { unsigned int node_idx; struct trie_node *new_node; unsigned int new_node_idx; unsigned char key; unsigned short len; unsigned int depth; unsigned int off; struct trie_node *parent; /* walk trie, start from last character of str to find matching tails */ len = strlen(str); key = str[len-1]; node_idx = 0; for (depth = 0; depth <= len; depth++) { struct trie_node *node; unsigned int child_idx; node = &rules->trie_nodes[node_idx]; off = node->value_off + node->value_len - len; /* match against current node */ if (depth == len || (node->value_len >= len && memcmp(&rules->buf[off], str, len) == 0)) return off; /* lookup child node */ key = str[len - 1 - depth]; child_idx = node->child_idx; while (child_idx > 0) { struct trie_node *child; child = &rules->trie_nodes[child_idx]; if (child->key == key) break; child_idx = child->next_child_idx; } if (child_idx == 0) break; node_idx = child_idx; } /* string not found, add it */ off = add_new_string(rules, str, len + 1); /* grow trie nodes if needed */ if (rules->trie_nodes_cur >= rules->trie_nodes_max) { struct trie_node *nodes; unsigned int add; /* double the buffer size */ add = rules->trie_nodes_max; if (add < 8) add = 8; nodes = realloc(rules->trie_nodes, (rules->trie_nodes_max + add) * sizeof(struct trie_node)); if (nodes == NULL) return -1; dbg(rules->udev, "extend trie nodes from %u to %u\n", rules->trie_nodes_max, rules->trie_nodes_max + add); rules->trie_nodes = nodes; rules->trie_nodes_max += add; } /* get a new node */ new_node_idx = rules->trie_nodes_cur; rules->trie_nodes_cur++; new_node = &rules->trie_nodes[new_node_idx]; memset(new_node, 0x00, sizeof(struct trie_node)); new_node->value_off = off; new_node->value_len = len; new_node->key = key; /* join the parent's child list */ parent = &rules->trie_nodes[node_idx]; if (parent->child_idx == 0) { parent->child_idx = new_node_idx; } else { struct trie_node *last_child; last_child = &rules->trie_nodes[parent->last_child_idx]; last_child->next_child_idx = new_node_idx; } parent->last_child_idx = new_node_idx; return off; } static int add_token(struct udev_rules *rules, struct token *token) { /* grow buffer if needed */ if (rules->token_cur+1 >= rules->token_max) { struct token *tokens; unsigned int add; /* double the buffer size */ add = rules->token_max; if (add < 8) add = 8; tokens = realloc(rules->tokens, (rules->token_max + add ) * sizeof(struct token)); if (tokens == NULL) return -1; dbg(rules->udev, "extend tokens from %u to %u\n", rules->token_max, rules->token_max + add); rules->tokens = tokens; rules->token_max += add; } memcpy(&rules->tokens[rules->token_cur], token, sizeof(struct token)); rules->token_cur++; return 0; } static uid_t add_uid(struct udev_rules *rules, const char *owner) { unsigned int i; uid_t uid; unsigned int off; /* lookup, if we know it already */ for (i = 0; i < rules->uids_cur; i++) { off = rules->uids[i].name_off; if (strcmp(&rules->buf[off], owner) == 0) { uid = rules->uids[i].uid; dbg(rules->udev, "return existing %u for '%s'\n", uid, owner); return uid; } } uid = util_lookup_user(rules->udev, owner); /* grow buffer if needed */ if (rules->uids_cur+1 >= rules->uids_max) { struct uid_gid *uids; unsigned int add; /* double the buffer size */ add = rules->uids_max; if (add < 1) add = 8; uids = realloc(rules->uids, (rules->uids_max + add ) * sizeof(struct uid_gid)); if (uids == NULL) return uid; dbg(rules->udev, "extend uids from %u to %u\n", rules->uids_max, rules->uids_max + add); rules->uids = uids; rules->uids_max += add; } rules->uids[rules->uids_cur].uid = uid; off = add_string(rules, owner); if (off <= 0) return uid; rules->uids[rules->uids_cur].name_off = off; rules->uids_cur++; return uid; } static gid_t add_gid(struct udev_rules *rules, const char *group) { unsigned int i; gid_t gid; unsigned int off; /* lookup, if we know it already */ for (i = 0; i < rules->gids_cur; i++) { off = rules->gids[i].name_off; if (strcmp(&rules->buf[off], group) == 0) { gid = rules->gids[i].gid; dbg(rules->udev, "return existing %u for '%s'\n", gid, group); return gid; } } gid = util_lookup_group(rules->udev, group); /* grow buffer if needed */ if (rules->gids_cur+1 >= rules->gids_max) { struct uid_gid *gids; unsigned int add; /* double the buffer size */ add = rules->gids_max; if (add < 1) add = 8; gids = realloc(rules->gids, (rules->gids_max + add ) * sizeof(struct uid_gid)); if (gids == NULL) return gid; dbg(rules->udev, "extend gids from %u to %u\n", rules->gids_max, rules->gids_max + add); rules->gids = gids; rules->gids_max += add; } rules->gids[rules->gids_cur].gid = gid; off = add_string(rules, group); if (off <= 0) return gid; rules->gids[rules->gids_cur].name_off = off; rules->gids_cur++; return gid; } static int import_property_from_string(struct udev_device *dev, char *line) { struct udev *udev = udev_device_get_udev(dev); char *key; char *val; size_t len; /* find key */ key = line; while (isspace(key[0])) key++; /* comment or empty line */ if (key[0] == '#' || key[0] == '\0') return -1; /* split key/value */ val = strchr(key, '='); if (val == NULL) return -1; val[0] = '\0'; val++; /* find value */ while (isspace(val[0])) val++; /* terminate key */ len = strlen(key); if (len == 0) return -1; while (isspace(key[len-1])) len--; key[len] = '\0'; /* terminate value */ len = strlen(val); if (len == 0) return -1; while (isspace(val[len-1])) len--; val[len] = '\0'; if (len == 0) return -1; /* unquote */ if (val[0] == '"' || val[0] == '\'') { if (val[len-1] != val[0]) { info(udev, "inconsistent quoting: '%s', skip\n", line); return -1; } val[len-1] = '\0'; val++; } dbg(udev, "adding '%s'='%s'\n", key, val); /* handle device, renamed by external tool, returning new path */ if (strcmp(key, "DEVPATH") == 0) { char syspath[UTIL_PATH_SIZE]; info(udev, "updating devpath from '%s' to '%s'\n", udev_device_get_devpath(dev), val); util_strscpyl(syspath, sizeof(syspath), udev_get_sys_path(udev), val, NULL); udev_device_set_syspath(dev, syspath); } else { struct udev_list_entry *entry; entry = udev_device_add_property(dev, key, val); /* store in db, skip private keys */ if (key[0] != '.') udev_list_entry_set_num(entry, true); } return 0; } static int import_file_into_properties(struct udev_device *dev, const char *filename) { FILE *f; char line[UTIL_LINE_SIZE]; f = fopen(filename, "r"); if (f == NULL) return -1; while (fgets(line, sizeof(line), f) != NULL) import_property_from_string(dev, line); fclose(f); return 0; } static int import_program_into_properties(struct udev_event *event, const char *program, const sigset_t *sigmask) { struct udev_device *dev = event->dev; char **envp; char result[UTIL_LINE_SIZE]; char *line; int err; envp = udev_device_get_properties_envp(dev); err = udev_event_spawn(event, program, envp, sigmask, result, sizeof(result)); if (err < 0) return err; line = result; while (line != NULL) { char *pos; pos = strchr(line, '\n'); if (pos != NULL) { pos[0] = '\0'; pos = &pos[1]; } import_property_from_string(dev, line); line = pos; } return 0; } static int import_parent_into_properties(struct udev_device *dev, const char *filter) { struct udev *udev = udev_device_get_udev(dev); struct udev_device *dev_parent; struct udev_list_entry *list_entry; dev_parent = udev_device_get_parent(dev); if (dev_parent == NULL) return -1; dbg(udev, "found parent '%s', get the node name\n", udev_device_get_syspath(dev_parent)); udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(dev_parent)) { const char *key = udev_list_entry_get_name(list_entry); const char *val = udev_list_entry_get_value(list_entry); if (fnmatch(filter, key, 0) == 0) { struct udev_list_entry *entry; dbg(udev, "import key '%s=%s'\n", key, val); entry = udev_device_add_property(dev, key, val); /* store in db, skip private keys */ if (key[0] != '.') udev_list_entry_set_num(entry, true); } } return 0; } #define WAIT_LOOP_PER_SECOND 50 static int wait_for_file(struct udev_device *dev, const char *file, int timeout) { struct udev *udev = udev_device_get_udev(dev); char filepath[UTIL_PATH_SIZE]; char devicepath[UTIL_PATH_SIZE]; struct stat stats; int loop = timeout * WAIT_LOOP_PER_SECOND; /* a relative path is a device attribute */ devicepath[0] = '\0'; if (file[0] != '/') { util_strscpyl(devicepath, sizeof(devicepath), udev_get_sys_path(udev), udev_device_get_devpath(dev), NULL); util_strscpyl(filepath, sizeof(filepath), devicepath, "/", file, NULL); file = filepath; } dbg(udev, "will wait %i sec for '%s'\n", timeout, file); while (--loop) { const struct timespec duration = { 0, 1000 * 1000 * 1000 / WAIT_LOOP_PER_SECOND }; /* lookup file */ if (stat(file, &stats) == 0) { info(udev, "file '%s' appeared after %i loops\n", file, (timeout * WAIT_LOOP_PER_SECOND) - loop-1); return 0; } /* make sure, the device did not disappear in the meantime */ if (devicepath[0] != '\0' && stat(devicepath, &stats) != 0) { info(udev, "device disappeared while waiting for '%s'\n", file); return -2; } info(udev, "wait for '%s' for %i mseconds\n", file, 1000 / WAIT_LOOP_PER_SECOND); nanosleep(&duration, NULL); } info(udev, "waiting for '%s' failed\n", file); return -1; } static int attr_subst_subdir(char *attr, size_t len) { bool found = false; if (strstr(attr, "/*/")) { char *pos; char dirname[UTIL_PATH_SIZE]; const char *tail; DIR *dir; util_strscpy(dirname, sizeof(dirname), attr); pos = strstr(dirname, "/*/"); if (pos == NULL) return -1; pos[0] = '\0'; tail = &pos[2]; dir = opendir(dirname); if (dir != NULL) { struct dirent *dent; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { struct stat stats; if (dent->d_name[0] == '.') continue; util_strscpyl(attr, len, dirname, "/", dent->d_name, tail, NULL); if (stat(attr, &stats) == 0) { found = true; break; } } closedir(dir); } } return found; } static int get_key(struct udev *udev, char **line, char **key, enum operation_type *op, char **value) { char *linepos; char *temp; linepos = *line; if (linepos == NULL || linepos[0] == '\0') return -1; /* skip whitespace */ while (isspace(linepos[0]) || linepos[0] == ',') linepos++; /* get the key */ if (linepos[0] == '\0') return -1; *key = linepos; for (;;) { linepos++; if (linepos[0] == '\0') return -1; if (isspace(linepos[0])) break; if (linepos[0] == '=') break; if ((linepos[0] == '+') || (linepos[0] == '!') || (linepos[0] == ':')) if (linepos[1] == '=') break; } /* remember end of key */ temp = linepos; /* skip whitespace after key */ while (isspace(linepos[0])) linepos++; if (linepos[0] == '\0') return -1; /* get operation type */ if (linepos[0] == '=' && linepos[1] == '=') { *op = OP_MATCH; linepos += 2; } else if (linepos[0] == '!' && linepos[1] == '=') { *op = OP_NOMATCH; linepos += 2; } else if (linepos[0] == '+' && linepos[1] == '=') { *op = OP_ADD; linepos += 2; } else if (linepos[0] == '=') { *op = OP_ASSIGN; linepos++; } else if (linepos[0] == ':' && linepos[1] == '=') { *op = OP_ASSIGN_FINAL; linepos += 2; } else return -1; /* terminate key */ temp[0] = '\0'; /* skip whitespace after operator */ while (isspace(linepos[0])) linepos++; if (linepos[0] == '\0') return -1; /* get the value */ if (linepos[0] == '"') linepos++; else return -1; *value = linepos; /* terminate */ temp = strchr(linepos, '"'); if (!temp) return -1; temp[0] = '\0'; temp++; dbg(udev, "%s '%s'-'%s'\n", operation_str(*op), *key, *value); /* move line to next key */ *line = temp; return 0; } /* extract possible KEY{attr} */ static char *get_key_attribute(struct udev *udev, char *str) { char *pos; char *attr; attr = strchr(str, '{'); if (attr != NULL) { attr++; pos = strchr(attr, '}'); if (pos == NULL) { err(udev, "missing closing brace for format\n"); return NULL; } pos[0] = '\0'; dbg(udev, "attribute='%s'\n", attr); return attr; } return NULL; } static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type, enum operation_type op, const char *value, const void *data) { struct token *token = &rule_tmp->token[rule_tmp->token_cur]; const char *attr = NULL; memset(token, 0x00, sizeof(struct token)); switch (type) { case TK_M_ACTION: case TK_M_DEVPATH: case TK_M_KERNEL: case TK_M_SUBSYSTEM: case TK_M_DRIVER: case TK_M_WAITFOR: case TK_M_DEVLINK: case TK_M_NAME: case TK_M_KERNELS: case TK_M_SUBSYSTEMS: case TK_M_DRIVERS: case TK_M_TAGS: case TK_M_PROGRAM: case TK_M_IMPORT_FILE: case TK_M_IMPORT_PROG: case TK_M_IMPORT_DB: case TK_M_IMPORT_CMDLINE: case TK_M_IMPORT_PARENT: case TK_M_RESULT: case TK_A_OWNER: case TK_A_GROUP: case TK_A_MODE: case TK_A_NAME: case TK_A_GOTO: case TK_M_TAG: case TK_A_TAG: token->key.value_off = add_string(rule_tmp->rules, value); break; case TK_M_IMPORT_BUILTIN: token->key.value_off = add_string(rule_tmp->rules, value); token->key.builtin_cmd = *(enum udev_builtin_cmd *)data; break; case TK_M_ENV: case TK_M_ATTR: case TK_M_ATTRS: case TK_A_ATTR: case TK_A_ENV: attr = data; token->key.value_off = add_string(rule_tmp->rules, value); token->key.attr_off = add_string(rule_tmp->rules, attr); break; case TK_A_DEVLINK: token->key.value_off = add_string(rule_tmp->rules, value); token->key.devlink_unique = *(int *)data; break; case TK_M_TEST: token->key.value_off = add_string(rule_tmp->rules, value); if (data != NULL) token->key.mode = *(mode_t *)data; break; case TK_A_STRING_ESCAPE_NONE: case TK_A_STRING_ESCAPE_REPLACE: case TK_A_DB_PERSIST: break; case TK_A_RUN: token->key.value_off = add_string(rule_tmp->rules, value); break; case TK_A_INOTIFY_WATCH: case TK_A_DEVLINK_PRIO: token->key.devlink_prio = *(int *)data; break; case TK_A_OWNER_ID: token->key.uid = *(uid_t *)data; break; case TK_A_GROUP_ID: token->key.gid = *(gid_t *)data; break; case TK_A_MODE_ID: token->key.mode = *(mode_t *)data; break; case TK_A_STATIC_NODE: token->key.value_off = add_string(rule_tmp->rules, value); break; case TK_M_EVENT_TIMEOUT: token->key.event_timeout = *(int *)data; break; case TK_RULE: case TK_M_PARENTS_MIN: case TK_M_PARENTS_MAX: case TK_M_MAX: case TK_END: case TK_UNSET: err(rule_tmp->rules->udev, "wrong type %u\n", type); return -1; } if (value != NULL && type < TK_M_MAX) { /* check if we need to split or call fnmatch() while matching rules */ enum string_glob_type glob; int has_split; int has_glob; has_split = (strchr(value, '|') != NULL); has_glob = (strchr(value, '*') != NULL || strchr(value, '?') != NULL || strchr(value, '[') != NULL); if (has_split && has_glob) { glob = GL_SPLIT_GLOB; } else if (has_split) { glob = GL_SPLIT; } else if (has_glob) { if (strcmp(value, "?*") == 0) glob = GL_SOMETHING; else glob = GL_GLOB; } else { glob = GL_PLAIN; } token->key.glob = glob; } if (value != NULL && type > TK_M_MAX) { /* check if assigned value has substitution chars */ if (value[0] == '[') token->key.subst = SB_SUBSYS; else if (strchr(value, '%') != NULL || strchr(value, '$') != NULL) token->key.subst = SB_FORMAT; else token->key.subst = SB_NONE; } if (attr != NULL) { /* check if property/attribut name has substitution chars */ if (attr[0] == '[') token->key.attrsubst = SB_SUBSYS; else if (strchr(attr, '%') != NULL || strchr(attr, '$') != NULL) token->key.attrsubst = SB_FORMAT; else token->key.attrsubst = SB_NONE; } token->key.type = type; token->key.op = op; rule_tmp->token_cur++; if (rule_tmp->token_cur >= ARRAY_SIZE(rule_tmp->token)) { err(rule_tmp->rules->udev, "temporary rule array too small\n"); return -1; } return 0; } static int sort_token(struct udev_rules *rules, struct rule_tmp *rule_tmp) { unsigned int i; unsigned int start = 0; unsigned int end = rule_tmp->token_cur; for (i = 0; i < rule_tmp->token_cur; i++) { enum token_type next_val = TK_UNSET; unsigned int next_idx = 0; unsigned int j; /* find smallest value */ for (j = start; j < end; j++) { if (rule_tmp->token[j].type == TK_UNSET) continue; if (next_val == TK_UNSET || rule_tmp->token[j].type < next_val) { next_val = rule_tmp->token[j].type; next_idx = j; } } /* add token and mark done */ if (add_token(rules, &rule_tmp->token[next_idx]) != 0) return -1; rule_tmp->token[next_idx].type = TK_UNSET; /* shrink range */ if (next_idx == start) start++; if (next_idx+1 == end) end--; } return 0; } static int add_rule(struct udev_rules *rules, char *line, const char *filename, unsigned int filename_off, unsigned int lineno) { char *linepos; char *attr; struct rule_tmp rule_tmp; memset(&rule_tmp, 0x00, sizeof(struct rule_tmp)); rule_tmp.rules = rules; rule_tmp.rule.type = TK_RULE; rule_tmp.rule.rule.filename_off = filename_off; rule_tmp.rule.rule.filename_line = lineno; linepos = line; for (;;) { char *key; char *value; enum operation_type op; if (get_key(rules->udev, &linepos, &key, &op, &value) != 0) break; if (strcmp(key, "ACTION") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid ACTION operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_ACTION, op, value, NULL); continue; } if (strcmp(key, "DEVPATH") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid DEVPATH operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_DEVPATH, op, value, NULL); continue; } if (strcmp(key, "KERNEL") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid KERNEL operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_KERNEL, op, value, NULL); continue; } if (strcmp(key, "SUBSYSTEM") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid SUBSYSTEM operation\n"); goto invalid; } /* bus, class, subsystem events should all be the same */ if (strcmp(value, "subsystem") == 0 || strcmp(value, "bus") == 0 || strcmp(value, "class") == 0) { if (strcmp(value, "bus") == 0 || strcmp(value, "class") == 0) err(rules->udev, "'%s' must be specified as 'subsystem' \n" "please fix it in %s:%u", value, filename, lineno); rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, "subsystem|class|bus", NULL); } else rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, value, NULL); continue; } if (strcmp(key, "DRIVER") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid DRIVER operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_DRIVER, op, value, NULL); continue; } if (strncmp(key, "ATTR{", sizeof("ATTR{")-1) == 0) { attr = get_key_attribute(rules->udev, key + sizeof("ATTR")-1); if (attr == NULL) { err(rules->udev, "error parsing ATTR attribute\n"); goto invalid; } if (op < OP_MATCH_MAX) { rule_add_key(&rule_tmp, TK_M_ATTR, op, value, attr); } else { rule_add_key(&rule_tmp, TK_A_ATTR, op, value, attr); } continue; } if (strcmp(key, "KERNELS") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid KERNELS operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_KERNELS, op, value, NULL); continue; } if (strcmp(key, "SUBSYSTEMS") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid SUBSYSTEMS operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_SUBSYSTEMS, op, value, NULL); continue; } if (strcmp(key, "DRIVERS") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid DRIVERS operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_DRIVERS, op, value, NULL); continue; } if (strncmp(key, "ATTRS{", sizeof("ATTRS{")-1) == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid ATTRS operation\n"); goto invalid; } attr = get_key_attribute(rules->udev, key + sizeof("ATTRS")-1); if (attr == NULL) { err(rules->udev, "error parsing ATTRS attribute\n"); goto invalid; } if (strncmp(attr, "device/", 7) == 0) err(rules->udev, "the 'device' link may not be available in a future kernel, " "please fix it in %s:%u", filename, lineno); else if (strstr(attr, "../") != NULL) err(rules->udev, "do not reference parent sysfs directories directly, " "it may break with a future kernel, please fix it in %s:%u", filename, lineno); rule_add_key(&rule_tmp, TK_M_ATTRS, op, value, attr); continue; } if (strcmp(key, "TAGS") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid TAGS operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_TAGS, op, value, NULL); continue; } if (strncmp(key, "ENV{", sizeof("ENV{")-1) == 0) { attr = get_key_attribute(rules->udev, key + sizeof("ENV")-1); if (attr == NULL) { err(rules->udev, "error parsing ENV attribute\n"); goto invalid; } if (op < OP_MATCH_MAX) { if (rule_add_key(&rule_tmp, TK_M_ENV, op, value, attr) != 0) goto invalid; } else { static const char *blacklist[] = { "ACTION", "SUBSYSTEM", "DEVTYPE", "MAJOR", "MINOR", "DRIVER", "IFINDEX", "DEVNAME", "DEVLINKS", "DEVPATH", "TAGS", }; unsigned int i; for (i = 0; i < ARRAY_SIZE(blacklist); i++) if (strcmp(attr, blacklist[i]) == 0) { err(rules->udev, "invalid ENV attribute, '%s' can not be set %s:%u\n", attr, filename, lineno); continue; } if (rule_add_key(&rule_tmp, TK_A_ENV, op, value, attr) != 0) goto invalid; } continue; } if (strcmp(key, "TAG") == 0) { if (op < OP_MATCH_MAX) rule_add_key(&rule_tmp, TK_M_TAG, op, value, NULL); else rule_add_key(&rule_tmp, TK_A_TAG, op, value, NULL); continue; } if (strcmp(key, "PROGRAM") == 0) { rule_add_key(&rule_tmp, TK_M_PROGRAM, op, value, NULL); continue; } if (strcmp(key, "RESULT") == 0) { if (op > OP_MATCH_MAX) { err(rules->udev, "invalid RESULT operation\n"); goto invalid; } rule_add_key(&rule_tmp, TK_M_RESULT, op, value, NULL); continue; } if (strncmp(key, "IMPORT", sizeof("IMPORT")-1) == 0) { attr = get_key_attribute(rules->udev, key + sizeof("IMPORT")-1); if (attr == NULL) { err(rules->udev, "IMPORT{} type missing, ignoring IMPORT %s:%u\n", filename, lineno); continue; } if (strstr(attr, "program")) { /* find known built-in command */ if (value[0] != '/') { enum udev_builtin_cmd cmd; cmd = udev_builtin_lookup(value); if (cmd < UDEV_BUILTIN_MAX) { info(rules->udev, "IMPORT found builtin '%s', replacing %s:%u\n", value, filename, lineno); rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd); continue; } } dbg(rules->udev, "IMPORT will be executed\n"); rule_add_key(&rule_tmp, TK_M_IMPORT_PROG, op, value, NULL); } else if (strstr(attr, "builtin")) { enum udev_builtin_cmd cmd = udev_builtin_lookup(value); dbg(rules->udev, "IMPORT execute builtin\n"); if (cmd < UDEV_BUILTIN_MAX) rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd); else err(rules->udev, "IMPORT{builtin}: '%s' unknown %s:%u\n", value, filename, lineno); } else if (strstr(attr, "file")) { dbg(rules->udev, "IMPORT will be included as file\n"); rule_add_key(&rule_tmp, TK_M_IMPORT_FILE, op, value, NULL); } else if (strstr(attr, "db")) { dbg(rules->udev, "IMPORT will include db values\n"); rule_add_key(&rule_tmp, TK_M_IMPORT_DB, op, value, NULL); } else if (strstr(attr, "cmdline")) { dbg(rules->udev, "IMPORT will include db values\n"); rule_add_key(&rule_tmp, TK_M_IMPORT_CMDLINE, op, value, NULL); } else if (strstr(attr, "parent")) { dbg(rules->udev, "IMPORT will include the parent values\n"); rule_add_key(&rule_tmp, TK_M_IMPORT_PARENT, op, value, NULL); } continue; } if (strncmp(key, "TEST", sizeof("TEST")-1) == 0) { mode_t mode = 0; if (op > OP_MATCH_MAX) { err(rules->udev, "invalid TEST operation\n"); goto invalid; } attr = get_key_attribute(rules->udev, key + sizeof("TEST")-1); if (attr != NULL) { mode = strtol(attr, NULL, 8); rule_add_key(&rule_tmp, TK_M_TEST, op, value, &mode); } else { rule_add_key(&rule_tmp, TK_M_TEST, op, value, NULL); } continue; } if (strcmp(key, "RUN") == 0) { if (strncmp(value, "socket:", 7) == 0) err(rules->udev, "RUN+=\"socket:...\" support will be removed from a future udev release. " "Please remove it from: %s:%u and use libudev to subscribe to events.\n", filename, lineno); rule_add_key(&rule_tmp, TK_A_RUN, op, value, NULL); continue; } if (strcmp(key, "WAIT_FOR") == 0 || strcmp(key, "WAIT_FOR_SYSFS") == 0) { rule_add_key(&rule_tmp, TK_M_WAITFOR, 0, value, NULL); continue; } if (strcmp(key, "LABEL") == 0) { rule_tmp.rule.rule.label_off = add_string(rules, value); continue; } if (strcmp(key, "GOTO") == 0) { rule_add_key(&rule_tmp, TK_A_GOTO, 0, value, NULL); continue; } if (strncmp(key, "NAME", sizeof("NAME")-1) == 0) { if (op < OP_MATCH_MAX) { rule_add_key(&rule_tmp, TK_M_NAME, op, value, NULL); } else { if (strcmp(value, "%k") == 0) { err(rules->udev, "NAME=\"%%k\" is ignored, because it breaks kernel supplied names, " "please remove it from %s:%u\n", filename, lineno); continue; } if (value[0] == '\0') { info(rules->udev, "NAME=\"\" is ignored, because udev will not delete any device nodes, " "please remove it from %s:%u\n", filename, lineno); continue; } rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL); } rule_tmp.rule.rule.can_set_name = true; continue; } if (strncmp(key, "SYMLINK", sizeof("SYMLINK")-1) == 0) { if (op < OP_MATCH_MAX) { rule_add_key(&rule_tmp, TK_M_DEVLINK, op, value, NULL); } else { int flag = 0; attr = get_key_attribute(rules->udev, key + sizeof("SYMLINK")-1); if (attr != NULL && strstr(attr, "unique") != NULL) flag = 1; rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, &flag); } rule_tmp.rule.rule.can_set_name = true; continue; } if (strcmp(key, "OWNER") == 0) { uid_t uid; char *endptr; uid = strtoul(value, &endptr, 10); if (endptr[0] == '\0') { rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid); } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { uid = add_uid(rules, value); rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid); } else if (rules->resolve_names >= 0) { rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL); } rule_tmp.rule.rule.can_set_name = true; continue; } if (strcmp(key, "GROUP") == 0) { gid_t gid; char *endptr; gid = strtoul(value, &endptr, 10); if (endptr[0] == '\0') { rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid); } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { gid = add_gid(rules, value); rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid); } else if (rules->resolve_names >= 0) { rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL); } rule_tmp.rule.rule.can_set_name = true; continue; } if (strcmp(key, "MODE") == 0) { mode_t mode; char *endptr; mode = strtol(value, &endptr, 8); if (endptr[0] == '\0') rule_add_key(&rule_tmp, TK_A_MODE_ID, op, NULL, &mode); else rule_add_key(&rule_tmp, TK_A_MODE, op, value, NULL); rule_tmp.rule.rule.can_set_name = true; continue; } if (strcmp(key, "OPTIONS") == 0) { const char *pos; pos = strstr(value, "link_priority="); if (pos != NULL) { int prio = atoi(&pos[strlen("link_priority=")]); rule_add_key(&rule_tmp, TK_A_DEVLINK_PRIO, op, NULL, &prio); dbg(rules->udev, "link priority=%i\n", prio); } pos = strstr(value, "event_timeout="); if (pos != NULL) { int tout = atoi(&pos[strlen("event_timeout=")]); rule_add_key(&rule_tmp, TK_M_EVENT_TIMEOUT, op, NULL, &tout); dbg(rules->udev, "event timeout=%i\n", tout); } pos = strstr(value, "string_escape="); if (pos != NULL) { pos = &pos[strlen("string_escape=")]; if (strncmp(pos, "none", strlen("none")) == 0) rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_NONE, op, NULL, NULL); else if (strncmp(pos, "replace", strlen("replace")) == 0) rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_REPLACE, op, NULL, NULL); } pos = strstr(value, "db_persist"); if (pos != NULL) rule_add_key(&rule_tmp, TK_A_DB_PERSIST, op, NULL, NULL); pos = strstr(value, "nowatch"); if (pos != NULL) { const int off = 0; rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &off); dbg(rules->udev, "inotify watch of device disabled\n"); } else { pos = strstr(value, "watch"); if (pos != NULL) { const int on = 1; rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &on); dbg(rules->udev, "inotify watch of device requested\n"); } } pos = strstr(value, "static_node="); if (pos != NULL) { rule_add_key(&rule_tmp, TK_A_STATIC_NODE, op, &pos[strlen("static_node=")], NULL); rule_tmp.rule.rule.has_static_node = true; } continue; } err(rules->udev, "unknown key '%s' in %s:%u\n", key, filename, lineno); goto invalid; } /* add rule token */ rule_tmp.rule.rule.token_count = 1 + rule_tmp.token_cur; if (add_token(rules, &rule_tmp.rule) != 0) goto invalid; /* add tokens to list, sorted by type */ if (sort_token(rules, &rule_tmp) != 0) goto invalid; return 0; invalid: err(rules->udev, "invalid rule '%s:%u'\n", filename, lineno); return -1; } static int parse_file(struct udev_rules *rules, const char *filename, unsigned short filename_off) { FILE *f; unsigned int first_token; char line[UTIL_LINE_SIZE]; int line_nr = 0; unsigned int i; info(rules->udev, "reading '%s' as rules file\n", filename); f = fopen(filename, "r"); if (f == NULL) return -1; first_token = rules->token_cur; while (fgets(line, sizeof(line), f) != NULL) { char *key; size_t len; /* skip whitespace */ line_nr++; key = line; while (isspace(key[0])) key++; /* comment */ if (key[0] == '#') continue; len = strlen(line); if (len < 3) continue; /* continue reading if backslash+newline is found */ while (line[len-2] == '\\') { if (fgets(&line[len-2], (sizeof(line)-len)+2, f) == NULL) break; if (strlen(&line[len-2]) < 2) break; line_nr++; len = strlen(line); } if (len+1 >= sizeof(line)) { err(rules->udev, "line too long '%s':%u, ignored\n", filename, line_nr); continue; } add_rule(rules, key, filename, filename_off, line_nr); } fclose(f); /* link GOTOs to LABEL rules in this file to be able to fast-forward */ for (i = first_token+1; i < rules->token_cur; i++) { if (rules->tokens[i].type == TK_A_GOTO) { char *label = &rules->buf[rules->tokens[i].key.value_off]; unsigned int j; for (j = i+1; j < rules->token_cur; j++) { if (rules->tokens[j].type != TK_RULE) continue; if (rules->tokens[j].rule.label_off == 0) continue; if (strcmp(label, &rules->buf[rules->tokens[j].rule.label_off]) != 0) continue; rules->tokens[i].key.rule_goto = j; break; } if (rules->tokens[i].key.rule_goto == 0) err(rules->udev, "GOTO '%s' has no matching label in: '%s'\n", label, filename); } } return 0; } static int add_matching_files(struct udev *udev, struct udev_list *file_list, const char *dirname, const char *suffix) { DIR *dir; struct dirent *dent; char filename[UTIL_PATH_SIZE]; dbg(udev, "open directory '%s'\n", dirname); dir = opendir(dirname); if (dir == NULL) { info(udev, "unable to open '%s': %m\n", dirname); return -1; } for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { if (dent->d_name[0] == '.') continue; /* look for file matching with specified suffix */ if (suffix != NULL) { const char *ext; ext = strrchr(dent->d_name, '.'); if (ext == NULL) continue; if (strcmp(ext, suffix) != 0) continue; } util_strscpyl(filename, sizeof(filename), dirname, "/", dent->d_name, NULL); dbg(udev, "put file '%s' into list\n", filename); /* * the basename is the key, the filename the value * identical basenames from different directories override each other * entries are sorted after basename */ udev_list_entry_add(file_list, dent->d_name, filename); } closedir(dir); return 0; } struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) { struct udev_rules *rules; struct udev_list file_list; struct udev_list_entry *file_loop; struct token end_token; char **s; rules = calloc(1, sizeof(struct udev_rules)); if (rules == NULL) return NULL; rules->udev = udev; rules->resolve_names = resolve_names; udev_list_init(udev, &file_list, true); /* init token array and string buffer */ rules->tokens = malloc(PREALLOC_TOKEN * sizeof(struct token)); if (rules->tokens == NULL) { free(rules); return NULL; } rules->token_max = PREALLOC_TOKEN; rules->buf = malloc(PREALLOC_STRBUF); if (rules->buf == NULL) { free(rules->tokens); free(rules); return NULL; } rules->buf_max = PREALLOC_STRBUF; /* offset 0 is always '\0' */ rules->buf[0] = '\0'; rules->buf_cur = 1; dbg(udev, "prealloc %zu bytes tokens (%u * %zu bytes), %zu bytes buffer\n", rules->token_max * sizeof(struct token), rules->token_max, sizeof(struct token), rules->buf_max); rules->trie_nodes = malloc(PREALLOC_TRIE * sizeof(struct trie_node)); if (rules->trie_nodes == NULL) { free(rules->buf); free(rules->tokens); free(rules); return NULL; } rules->trie_nodes_max = PREALLOC_TRIE; /* offset 0 is the trie root, with an empty string */ memset(rules->trie_nodes, 0x00, sizeof(struct trie_node)); rules->trie_nodes_cur = 1; for (udev_get_rules_path(udev, &s, NULL); *s != NULL; s++) add_matching_files(udev, &file_list, *s, ".rules"); /* add all filenames to the string buffer */ udev_list_entry_foreach(file_loop, udev_list_get_entry(&file_list)) { const char *filename = udev_list_entry_get_value(file_loop); unsigned int filename_off; filename_off = add_string(rules, filename); /* the offset in the rule is limited to unsigned short */ if (filename_off < USHRT_MAX) udev_list_entry_set_num(file_loop, filename_off); } /* parse all rules files */ udev_list_entry_foreach(file_loop, udev_list_get_entry(&file_list)) { const char *filename = udev_list_entry_get_value(file_loop); unsigned int filename_off = udev_list_entry_get_num(file_loop); struct stat st; if (stat(filename, &st) != 0) { err(udev, "can not find '%s': %m\n", filename); continue; } if (S_ISREG(st.st_mode) && st.st_size <= 0) { info(udev, "ignore empty '%s'\n", filename); continue; } if (S_ISCHR(st.st_mode)) { info(udev, "ignore masked '%s'\n", filename); continue; } parse_file(rules, filename, filename_off); } udev_list_cleanup(&file_list); memset(&end_token, 0x00, sizeof(struct token)); end_token.type = TK_END; add_token(rules, &end_token); /* shrink allocated token and string buffer */ if (rules->token_cur < rules->token_max) { struct token *tokens; tokens = realloc(rules->tokens, rules->token_cur * sizeof(struct token)); if (tokens != NULL || rules->token_cur == 0) { rules->tokens = tokens; rules->token_max = rules->token_cur; } } if (rules->buf_cur < rules->buf_max) { char *buf; buf = realloc(rules->buf, rules->buf_cur); if (buf != NULL || rules->buf_cur == 0) { rules->buf = buf; rules->buf_max = rules->buf_cur; } } info(udev, "rules use %zu bytes tokens (%u * %zu bytes), %zu bytes buffer\n", rules->token_max * sizeof(struct token), rules->token_max, sizeof(struct token), rules->buf_max); info(udev, "temporary index used %zu bytes (%u * %zu bytes)\n", rules->trie_nodes_cur * sizeof(struct trie_node), rules->trie_nodes_cur, sizeof(struct trie_node)); /* cleanup trie */ free(rules->trie_nodes); rules->trie_nodes = NULL; rules->trie_nodes_cur = 0; rules->trie_nodes_max = 0; /* cleanup uid/gid cache */ free(rules->uids); rules->uids = NULL; rules->uids_cur = 0; rules->uids_max = 0; free(rules->gids); rules->gids = NULL; rules->gids_cur = 0; rules->gids_max = 0; dump_rules(rules); return rules; } struct udev_rules *udev_rules_unref(struct udev_rules *rules) { if (rules == NULL) return NULL; free(rules->tokens); free(rules->buf); free(rules->trie_nodes); free(rules->uids); free(rules->gids); free(rules); return NULL; } static int match_key(struct udev_rules *rules, struct token *token, const char *val) { char *key_value = &rules->buf[token->key.value_off]; char *pos; bool match = false; if (val == NULL) val = ""; switch (token->key.glob) { case GL_PLAIN: match = (strcmp(key_value, val) == 0); break; case GL_GLOB: match = (fnmatch(key_value, val, 0) == 0); break; case GL_SPLIT: { const char *split; size_t len; split = &rules->buf[token->key.value_off]; len = strlen(val); for (;;) { const char *next; next = strchr(split, '|'); if (next != NULL) { size_t matchlen = (size_t)(next - split); match = (matchlen == len && strncmp(split, val, matchlen) == 0); if (match) break; } else { match = (strcmp(split, val) == 0); break; } split = &next[1]; } break; } case GL_SPLIT_GLOB: { char value[UTIL_PATH_SIZE]; util_strscpy(value, sizeof(value), &rules->buf[token->key.value_off]); key_value = value; while (key_value != NULL) { pos = strchr(key_value, '|'); if (pos != NULL) { pos[0] = '\0'; pos = &pos[1]; } dbg(rules->udev, "match %s '%s' <-> '%s'\n", token_str(token->type), key_value, val); match = (fnmatch(key_value, val, 0) == 0); if (match) break; key_value = pos; } break; } case GL_SOMETHING: match = (val[0] != '\0'); break; case GL_UNSET: return -1; } if (match && (token->key.op == OP_MATCH)) { dbg(rules->udev, "%s is true (matching value)\n", token_str(token->type)); return 0; } if (!match && (token->key.op == OP_NOMATCH)) { dbg(rules->udev, "%s is true (non-matching value)\n", token_str(token->type)); return 0; } dbg(rules->udev, "%s is not true\n", token_str(token->type)); return -1; } static int match_attr(struct udev_rules *rules, struct udev_device *dev, struct udev_event *event, struct token *cur) { const char *name; char nbuf[UTIL_NAME_SIZE]; const char *value; char vbuf[UTIL_NAME_SIZE]; size_t len; name = &rules->buf[cur->key.attr_off]; switch (cur->key.attrsubst) { case SB_FORMAT: udev_event_apply_format(event, name, nbuf, sizeof(nbuf)); name = nbuf; /* fall through */ case SB_NONE: value = udev_device_get_sysattr_value(dev, name); if (value == NULL) return -1; break; case SB_SUBSYS: if (util_resolve_subsys_kernel(event->udev, name, vbuf, sizeof(vbuf), 1) != 0) return -1; value = vbuf; break; default: return -1; } /* remove trailing whitespace, if not asked to match for it */ len = strlen(value); if (len > 0 && isspace(value[len-1])) { const char *key_value; size_t klen; key_value = &rules->buf[cur->key.value_off]; klen = strlen(key_value); if (klen > 0 && !isspace(key_value[klen-1])) { if (value != vbuf) { util_strscpy(vbuf, sizeof(vbuf), value); value = vbuf; } while (len > 0 && isspace(vbuf[--len])) vbuf[len] = '\0'; dbg(rules->udev, "removed trailing whitespace from '%s'\n", value); } } return match_key(rules, cur, value); } enum escape_type { ESCAPE_UNSET, ESCAPE_NONE, ESCAPE_REPLACE, }; int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, const sigset_t *sigmask) { struct token *cur; struct token *rule; enum escape_type esc = ESCAPE_UNSET; bool can_set_name; if (rules->tokens == NULL) return -1; can_set_name = ((strcmp(udev_device_get_action(event->dev), "remove") != 0) && (major(udev_device_get_devnum(event->dev)) > 0 || udev_device_get_ifindex(event->dev) > 0)); /* loop through token list, match, run actions or forward to next rule */ cur = &rules->tokens[0]; rule = cur; for (;;) { dump_token(rules, cur); switch (cur->type) { case TK_RULE: /* current rule */ rule = cur; /* possibly skip rules which want to set NAME, SYMLINK, OWNER, GROUP, MODE */ if (!can_set_name && rule->rule.can_set_name) goto nomatch; esc = ESCAPE_UNSET; break; case TK_M_ACTION: if (match_key(rules, cur, udev_device_get_action(event->dev)) != 0) goto nomatch; break; case TK_M_DEVPATH: if (match_key(rules, cur, udev_device_get_devpath(event->dev)) != 0) goto nomatch; break; case TK_M_KERNEL: if (match_key(rules, cur, udev_device_get_sysname(event->dev)) != 0) goto nomatch; break; case TK_M_DEVLINK: { size_t devlen = strlen(udev_get_dev_path(event->udev))+1; struct udev_list_entry *list_entry; bool match = false; udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(event->dev)) { const char *devlink; devlink = &udev_list_entry_get_name(list_entry)[devlen]; if (match_key(rules, cur, devlink) == 0) { match = true; break; } } if (!match) goto nomatch; break; } case TK_M_NAME: if (match_key(rules, cur, event->name) != 0) goto nomatch; break; case TK_M_ENV: { const char *key_name = &rules->buf[cur->key.attr_off]; const char *value; value = udev_device_get_property_value(event->dev, key_name); if (value == NULL) { dbg(event->udev, "ENV{%s} is not set, treat as empty\n", key_name); value = ""; } if (match_key(rules, cur, value)) goto nomatch; break; } case TK_M_TAG: { struct udev_list_entry *list_entry; bool match = false; udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(event->dev)) { if (strcmp(&rules->buf[cur->key.value_off], udev_list_entry_get_name(list_entry)) == 0) { match = true; break; } } if (!match && (cur->key.op != OP_NOMATCH)) goto nomatch; break; } case TK_M_SUBSYSTEM: if (match_key(rules, cur, udev_device_get_subsystem(event->dev)) != 0) goto nomatch; break; case TK_M_DRIVER: if (match_key(rules, cur, udev_device_get_driver(event->dev)) != 0) goto nomatch; break; case TK_M_WAITFOR: { char filename[UTIL_PATH_SIZE]; int found; udev_event_apply_format(event, &rules->buf[cur->key.value_off], filename, sizeof(filename)); found = (wait_for_file(event->dev, filename, 10) == 0); if (!found && (cur->key.op != OP_NOMATCH)) goto nomatch; break; } case TK_M_ATTR: if (match_attr(rules, event->dev, event, cur) != 0) goto nomatch; break; case TK_M_KERNELS: case TK_M_SUBSYSTEMS: case TK_M_DRIVERS: case TK_M_ATTRS: case TK_M_TAGS: { struct token *next; /* get whole sequence of parent matches */ next = cur; while (next->type > TK_M_PARENTS_MIN && next->type < TK_M_PARENTS_MAX) next++; /* loop over parents */ event->dev_parent = event->dev; for (;;) { struct token *key; dbg(event->udev, "parent: '%s'\n", udev_device_get_syspath(event->dev_parent)); /* loop over sequence of parent match keys */ for (key = cur; key < next; key++ ) { dump_token(rules, key); switch(key->type) { case TK_M_KERNELS: if (match_key(rules, key, udev_device_get_sysname(event->dev_parent)) != 0) goto try_parent; break; case TK_M_SUBSYSTEMS: if (match_key(rules, key, udev_device_get_subsystem(event->dev_parent)) != 0) goto try_parent; break; case TK_M_DRIVERS: if (match_key(rules, key, udev_device_get_driver(event->dev_parent)) != 0) goto try_parent; break; case TK_M_ATTRS: if (match_attr(rules, event->dev_parent, event, key) != 0) goto try_parent; break; case TK_M_TAGS: { bool match = udev_device_has_tag(event->dev_parent, &rules->buf[cur->key.value_off]); if (match && key->key.op == OP_NOMATCH) goto try_parent; if (!match && key->key.op == OP_MATCH) goto try_parent; break; } default: goto nomatch; } dbg(event->udev, "parent key matched\n"); } dbg(event->udev, "all parent keys matched\n"); break; try_parent: event->dev_parent = udev_device_get_parent(event->dev_parent); if (event->dev_parent == NULL) goto nomatch; } /* move behind our sequence of parent match keys */ cur = next; continue; } case TK_M_TEST: { char filename[UTIL_PATH_SIZE]; struct stat statbuf; int match; udev_event_apply_format(event, &rules->buf[cur->key.value_off], filename, sizeof(filename)); if (util_resolve_subsys_kernel(event->udev, filename, filename, sizeof(filename), 0) != 0) { if (filename[0] != '/') { char tmp[UTIL_PATH_SIZE]; util_strscpy(tmp, sizeof(tmp), filename); util_strscpyl(filename, sizeof(filename), udev_device_get_syspath(event->dev), "/", tmp, NULL); } } attr_subst_subdir(filename, sizeof(filename)); match = (stat(filename, &statbuf) == 0); dbg(event->udev, "'%s' %s", filename, match ? "exists\n" : "does not exist\n"); if (match && cur->key.mode > 0) { match = ((statbuf.st_mode & cur->key.mode) > 0); dbg(event->udev, "'%s' has mode=%#o and %s %#o\n", filename, statbuf.st_mode, match ? "matches" : "does not match", cur->key.mode); } if (match && cur->key.op == OP_NOMATCH) goto nomatch; if (!match && cur->key.op == OP_MATCH) goto nomatch; break; } case TK_M_EVENT_TIMEOUT: info(event->udev, "OPTIONS event_timeout=%u\n", cur->key.event_timeout); event->timeout_usec = cur->key.event_timeout * 1000 * 1000; break; case TK_M_PROGRAM: { char program[UTIL_PATH_SIZE]; char **envp; char result[UTIL_PATH_SIZE]; free(event->program_result); event->program_result = NULL; udev_event_apply_format(event, &rules->buf[cur->key.value_off], program, sizeof(program)); envp = udev_device_get_properties_envp(event->dev); info(event->udev, "PROGRAM '%s' %s:%u\n", program, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); if (udev_event_spawn(event, program, envp, sigmask, result, sizeof(result)) < 0) { if (cur->key.op != OP_NOMATCH) goto nomatch; } else { int count; util_remove_trailing_chars(result, '\n'); if (esc == ESCAPE_UNSET || esc == ESCAPE_REPLACE) { count = util_replace_chars(result, UDEV_ALLOWED_CHARS_INPUT); if (count > 0) info(event->udev, "%i character(s) replaced\n" , count); } event->program_result = strdup(result); dbg(event->udev, "storing result '%s'\n", event->program_result); if (cur->key.op == OP_NOMATCH) goto nomatch; } break; } case TK_M_IMPORT_FILE: { char import[UTIL_PATH_SIZE]; udev_event_apply_format(event, &rules->buf[cur->key.value_off], import, sizeof(import)); if (import_file_into_properties(event->dev, import) != 0) if (cur->key.op != OP_NOMATCH) goto nomatch; break; } case TK_M_IMPORT_PROG: { char import[UTIL_PATH_SIZE]; udev_event_apply_format(event, &rules->buf[cur->key.value_off], import, sizeof(import)); info(event->udev, "IMPORT '%s' %s:%u\n", import, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); if (import_program_into_properties(event, import, sigmask) != 0) if (cur->key.op != OP_NOMATCH) goto nomatch; break; } case TK_M_IMPORT_BUILTIN: { char command[UTIL_PATH_SIZE]; if (udev_builtin_run_once(cur->key.builtin_cmd)) { /* check if we ran already */ if (event->builtin_run & (1 << cur->key.builtin_cmd)) { info(event->udev, "IMPORT builtin skip '%s' %s:%u\n", udev_builtin_name(cur->key.builtin_cmd), &rules->buf[rule->rule.filename_off], rule->rule.filename_line); /* return the result from earlier run */ if (event->builtin_ret & (1 << cur->key.builtin_cmd)) if (cur->key.op != OP_NOMATCH) goto nomatch; break; } /* mark as ran */ event->builtin_run |= (1 << cur->key.builtin_cmd); } udev_event_apply_format(event, &rules->buf[cur->key.value_off], command, sizeof(command)); info(event->udev, "IMPORT builtin '%s' %s:%u\n", udev_builtin_name(cur->key.builtin_cmd), &rules->buf[rule->rule.filename_off], rule->rule.filename_line); if (udev_builtin_run(event->dev, cur->key.builtin_cmd, command, false) != 0) { /* remember failure */ info(rules->udev, "IMPORT builtin '%s' returned non-zero\n", udev_builtin_name(cur->key.builtin_cmd)); event->builtin_ret |= (1 << cur->key.builtin_cmd); if (cur->key.op != OP_NOMATCH) goto nomatch; } break; } case TK_M_IMPORT_DB: { const char *key = &rules->buf[cur->key.value_off]; const char *value; value = udev_device_get_property_value(event->dev_db, key); if (value != NULL) { struct udev_list_entry *entry; entry = udev_device_add_property(event->dev, key, value); udev_list_entry_set_num(entry, true); } else { if (cur->key.op != OP_NOMATCH) goto nomatch; } break; } case TK_M_IMPORT_CMDLINE: { FILE *f; bool imported = false; f = fopen("/proc/cmdline", "r"); if (f != NULL) { char cmdline[4096]; if (fgets(cmdline, sizeof(cmdline), f) != NULL) { const char *key = &rules->buf[cur->key.value_off]; char *pos; pos = strstr(cmdline, key); if (pos != NULL) { struct udev_list_entry *entry; pos += strlen(key); if (pos[0] == '\0' || isspace(pos[0])) { /* we import simple flags as 'FLAG=1' */ entry = udev_device_add_property(event->dev, key, "1"); udev_list_entry_set_num(entry, true); imported = true; } else if (pos[0] == '=') { const char *value; pos++; value = pos; while (pos[0] != '\0' && !isspace(pos[0])) pos++; pos[0] = '\0'; entry = udev_device_add_property(event->dev, key, value); udev_list_entry_set_num(entry, true); imported = true; } } } fclose(f); } if (!imported && cur->key.op != OP_NOMATCH) goto nomatch; break; } case TK_M_IMPORT_PARENT: { char import[UTIL_PATH_SIZE]; udev_event_apply_format(event, &rules->buf[cur->key.value_off], import, sizeof(import)); if (import_parent_into_properties(event->dev, import) != 0) if (cur->key.op != OP_NOMATCH) goto nomatch; break; } case TK_M_RESULT: if (match_key(rules, cur, event->program_result) != 0) goto nomatch; break; case TK_A_STRING_ESCAPE_NONE: esc = ESCAPE_NONE; break; case TK_A_STRING_ESCAPE_REPLACE: esc = ESCAPE_REPLACE; break; case TK_A_DB_PERSIST: udev_device_set_db_persist(event->dev); break; case TK_A_INOTIFY_WATCH: if (event->inotify_watch_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->inotify_watch_final = true; event->inotify_watch = cur->key.watch; break; case TK_A_DEVLINK_PRIO: udev_device_set_devlink_priority(event->dev, cur->key.devlink_prio); break; case TK_A_OWNER: { char owner[UTIL_NAME_SIZE]; if (event->owner_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->owner_final = true; udev_event_apply_format(event, &rules->buf[cur->key.value_off], owner, sizeof(owner)); event->uid = util_lookup_user(event->udev, owner); info(event->udev, "OWNER %u %s:%u\n", event->uid, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; } case TK_A_GROUP: { char group[UTIL_NAME_SIZE]; if (event->group_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->group_final = true; udev_event_apply_format(event, &rules->buf[cur->key.value_off], group, sizeof(group)); event->gid = util_lookup_group(event->udev, group); info(event->udev, "GROUP %u %s:%u\n", event->gid, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; } case TK_A_MODE: { char mode_str[UTIL_NAME_SIZE]; mode_t mode; char *endptr; if (event->mode_final) break; udev_event_apply_format(event, &rules->buf[cur->key.value_off], mode_str, sizeof(mode_str)); mode = strtol(mode_str, &endptr, 8); if (endptr[0] != '\0') { err(event->udev, "ignoring invalid mode '%s'\n", mode_str); break; } if (cur->key.op == OP_ASSIGN_FINAL) event->mode_final = true; event->mode_set = true; event->mode = mode; info(event->udev, "MODE %#o %s:%u\n", event->mode, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; } case TK_A_OWNER_ID: if (event->owner_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->owner_final = true; event->uid = cur->key.uid; info(event->udev, "OWNER %u %s:%u\n", event->uid, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; case TK_A_GROUP_ID: if (event->group_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->group_final = true; event->gid = cur->key.gid; info(event->udev, "GROUP %u %s:%u\n", event->gid, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; case TK_A_MODE_ID: if (event->mode_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->mode_final = true; event->mode_set = true; event->mode = cur->key.mode; info(event->udev, "MODE %#o %s:%u\n", event->mode, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; case TK_A_ENV: { const char *name = &rules->buf[cur->key.attr_off]; char *value = &rules->buf[cur->key.value_off]; if (value[0] != '\0') { char temp_value[UTIL_NAME_SIZE]; struct udev_list_entry *entry; udev_event_apply_format(event, value, temp_value, sizeof(temp_value)); entry = udev_device_add_property(event->dev, name, temp_value); /* store in db, skip private keys */ if (name[0] != '.') udev_list_entry_set_num(entry, true); } else { udev_device_add_property(event->dev, name, NULL); } break; } case TK_A_TAG: { char tag[UTIL_PATH_SIZE]; const char *p; udev_event_apply_format(event, &rules->buf[cur->key.value_off], tag, sizeof(tag)); if (cur->key.op == OP_ASSIGN || cur->key.op == OP_ASSIGN_FINAL) udev_device_cleanup_tags_list(event->dev); for (p = tag; *p != '\0'; p++) { if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9') || *p == '-' || *p == '_') continue; err(event->udev, "ignoring invalid tag name '%s'\n", tag); break; } udev_device_add_tag(event->dev, tag); break; } case TK_A_NAME: { const char *name = &rules->buf[cur->key.value_off]; char name_str[UTIL_PATH_SIZE]; int count; if (event->name_final) break; if (cur->key.op == OP_ASSIGN_FINAL) event->name_final = true; udev_event_apply_format(event, name, name_str, sizeof(name_str)); if (esc == ESCAPE_UNSET || esc == ESCAPE_REPLACE) { count = util_replace_chars(name_str, "/"); if (count > 0) info(event->udev, "%i character(s) replaced\n", count); } if (major(udev_device_get_devnum(event->dev))) { size_t devlen = strlen(udev_get_dev_path(event->udev))+1; if (strcmp(name_str, &udev_device_get_devnode(event->dev)[devlen]) != 0) { err(event->udev, "NAME=\"%s\" ignored, kernel device nodes " "can not be renamed; please fix it in %s:%u\n", name, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; } } free(event->name); event->name = strdup(name_str); info(event->udev, "NAME '%s' %s:%u\n", event->name, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); break; } case TK_A_DEVLINK: { char temp[UTIL_PATH_SIZE]; char filename[UTIL_PATH_SIZE]; char *pos, *next; int count = 0; if (event->devlink_final) break; if (major(udev_device_get_devnum(event->dev)) == 0) break; if (cur->key.op == OP_ASSIGN_FINAL) event->devlink_final = true; if (cur->key.op == OP_ASSIGN || cur->key.op == OP_ASSIGN_FINAL) udev_device_cleanup_devlinks_list(event->dev); /* allow multiple symlinks separated by spaces */ udev_event_apply_format(event, &rules->buf[cur->key.value_off], temp, sizeof(temp)); if (esc == ESCAPE_UNSET) count = util_replace_chars(temp, "/ "); else if (esc == ESCAPE_REPLACE) count = util_replace_chars(temp, "/"); if (count > 0) info(event->udev, "%i character(s) replaced\n" , count); dbg(event->udev, "rule applied, added symlink(s) '%s'\n", temp); pos = temp; while (isspace(pos[0])) pos++; next = strchr(pos, ' '); while (next != NULL) { next[0] = '\0'; info(event->udev, "LINK '%s' %s:%u\n", pos, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", pos, NULL); udev_device_add_devlink(event->dev, filename, cur->key.devlink_unique); while (isspace(next[1])) next++; pos = &next[1]; next = strchr(pos, ' '); } if (pos[0] != '\0') { info(event->udev, "LINK '%s' %s:%u\n", pos, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", pos, NULL); udev_device_add_devlink(event->dev, filename, cur->key.devlink_unique); } break; } case TK_A_ATTR: { const char *key_name = &rules->buf[cur->key.attr_off]; char attr[UTIL_PATH_SIZE]; char value[UTIL_NAME_SIZE]; FILE *f; if (util_resolve_subsys_kernel(event->udev, key_name, attr, sizeof(attr), 0) != 0) util_strscpyl(attr, sizeof(attr), udev_device_get_syspath(event->dev), "/", key_name, NULL); attr_subst_subdir(attr, sizeof(attr)); udev_event_apply_format(event, &rules->buf[cur->key.value_off], value, sizeof(value)); info(event->udev, "ATTR '%s' writing '%s' %s:%u\n", attr, value, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); f = fopen(attr, "w"); if (f != NULL) { if (fprintf(f, "%s", value) <= 0) err(event->udev, "error writing ATTR{%s}: %m\n", attr); fclose(f); } else { err(event->udev, "error opening ATTR{%s} for writing: %m\n", attr); } break; } case TK_A_RUN: { if (cur->key.op == OP_ASSIGN || cur->key.op == OP_ASSIGN_FINAL) udev_list_cleanup(&event->run_list); info(event->udev, "RUN '%s' %s:%u\n", &rules->buf[cur->key.value_off], &rules->buf[rule->rule.filename_off], rule->rule.filename_line); udev_list_entry_add(&event->run_list, &rules->buf[cur->key.value_off], NULL); break; } case TK_A_GOTO: if (cur->key.rule_goto == 0) break; cur = &rules->tokens[cur->key.rule_goto]; continue; case TK_END: return 0; case TK_M_PARENTS_MIN: case TK_M_PARENTS_MAX: case TK_M_MAX: case TK_UNSET: err(rules->udev, "wrong type %u\n", cur->type); goto nomatch; } cur++; continue; nomatch: /* fast-forward to next rule */ cur = rule + rule->rule.token_count; dbg(rules->udev, "forward to rule: %u\n", (unsigned int) (cur - rules->tokens)); } } void udev_rules_apply_static_dev_perms(struct udev_rules *rules) { struct token *cur; struct token *rule; uid_t uid = 0; gid_t gid = 0; mode_t mode = 0; if (rules->tokens == NULL) return; cur = &rules->tokens[0]; rule = cur; for (;;) { switch (cur->type) { case TK_RULE: /* current rule */ rule = cur; /* skip rules without a static_node tag */ if (!rule->rule.has_static_node) goto next; uid = 0; gid = 0; mode = 0; break; case TK_A_OWNER_ID: uid = cur->key.uid; break; case TK_A_GROUP_ID: gid = cur->key.gid; break; case TK_A_MODE_ID: mode = cur->key.mode; break; case TK_A_STATIC_NODE: { char filename[UTIL_PATH_SIZE]; struct stat stats; /* we assure, that the permissions tokens are sorted before the static token */ if (mode == 0 && uid == 0 && gid == 0) goto next; util_strscpyl(filename, sizeof(filename), udev_get_dev_path(rules->udev), "/", &rules->buf[cur->key.value_off], NULL); if (stat(filename, &stats) != 0) goto next; if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) goto next; if (mode == 0) { if (gid > 0) mode = 0660; else mode = 0600; } if (mode != (stats.st_mode & 01777)) { chmod(filename, mode); info(rules->udev, "chmod '%s' %#o\n", filename, mode); } if ((uid != 0 && uid != stats.st_uid) || (gid != 0 && gid != stats.st_gid)) { chown(filename, uid, gid); info(rules->udev, "chown '%s' %u %u\n", filename, uid, gid); } utimensat(AT_FDCWD, filename, NULL, 0); break; } case TK_END: return; } cur++; continue; next: /* fast-forward to next rule */ cur = rule + rule->rule.token_count; continue; } } udev-182/src/PaxHeaders.12492/udev.conf0000644000521600052160000000013111725700311015760 xustar000000000000000029 mtime=1331134665.82876253 30 atime=1332083869.559117627 30 ctime=1332097352.790438915 udev-182/src/udev.conf0000664000521600052160000000005411725700311014364 0ustar00kaykay00000000000000# see udev(7) for details #udev_log="info" udev-182/src/PaxHeaders.12492/udev-control.socket0000644000521600052160000000013211711107662020007 xustar000000000000000030 mtime=1327796146.962827005 30 atime=1332083868.709117607 30 ctime=1332097352.049438897 udev-182/src/udev-control.socket0000664000521600052160000000031011711107662016405 0ustar00kaykay00000000000000[Unit] Description=udev Control Socket DefaultDependencies=no ConditionCapability=CAP_MKNOD [Socket] Service=udev.service ListenSequentialPacket=/run/udev/control SocketMode=0600 PassCredentials=yes udev-182/src/PaxHeaders.12492/udevadm.xml0000644000521600052160000000013211711107662016323 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083334.919104887 30 ctime=1332097353.537438933 udev-182/src/udevadm.xml0000664000521600052160000004554511711107662014744 0ustar00kaykay00000000000000 udevadm udev udevadm 8 udevadmudev management tool udevadm udevadm info options udevadm trigger options udevadm settle options udevadm control command udevadm monitor options udevadm test options devpath udevadm test-builtin options command devpath Description udevadm expects a command and command specific options. It controls the runtime behavior of udev, requests kernel events, manages the event queue, and provides simple debugging mechanisms. OPTIONS Print debug messages to stderr. Print version number. Print help text. udevadm info <replaceable>options</replaceable> Queries the udev database for device information stored in the udev database. It can also query the properties of a device from its sysfs representation to help creating udev rules that match this device. Query the database for specified type of device data. It needs the or to identify the specified device. Valid queries are: name, symlink, path, property, all. The devpath of the device to query. The name of the device node or a symlink to query The udev root directory: /dev. If used in conjunction with a name or symlink query, the query returns the absolute path including the root directory. The udev runtime directory: /run/udev. Print all sysfs properties of the specified device that can be used in udev rules to match the specified device. It prints all devices along the chain, up to the root of sysfs that can be used in udev rules. Print output as key/value pairs. Values are enclosed in single quotes. Add a prefix to the key name of exported values. Print major/minor numbers of the underlying device, where the file lives on. Export the content of the udev database. Cleanup the udev database. Print version. Print help text. udevadm trigger <optional>options</optional> Request device events from the kernel. Primarily used to replay events at system coldplug time. Print the list of devices which will be triggered. Do not actually trigger the event. Trigger a specific type of devices. Valid types are: devices, subsystems. The default value is devices. Type of event to be triggered. The default value is change. Trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching. Do not trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching. Trigger events for devices with a matching sysfs attribute. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching. If no value is specified, the existence of the sysfs attribute is checked. This option can be specified multiple times. Do not trigger events for devices with a matching sysfs attribute. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching. If no value is specified, the existence of the sysfs attribute is checked. This option can be specified multiple times. Trigger events for devices with a matching property value. This option can be specified multiple times and supports shell style pattern matching. Trigger events for devices with a matching tag. This option can be specified multiple times. Trigger events for devices with a matching sys device name. This option can be specified multiple times and supports shell style pattern matching. Trigger events for all children of a given device. udevadm settle <optional>options</optional> Watches the udev event queue, and exits if all current events are handled. Maximum number of seconds to wait for the event queue to become empty. The default value is 120 seconds. A value of 0 will check if the queue is empty and always return immediately. Wait only for events after the given sequence number. Wait only for events before the given sequence number. Stop waiting if file exists. Do not print any output, like the remaining queue entries when reaching the timeout. Print help text. udevadm control <replaceable>command</replaceable> Modify the internal state of the running udev daemon. Signal and wait for udevd to exit. Set the internal log level of udevd. Valid values are the numerical syslog priorities or their textual representations: , and . Signal udevd to stop executing new events. Incoming events will be queued. Signal udevd to enable the execution of events. Signal udevd to reload the rules files and other databases like the kernel module index. Reloading rules and databases does not apply any changes to already existing devices; the new configuration will only be applied to new events. Set a global property for all events. value Set the maximum number of events, udevd will handle at the same time. seconds The maximum number seconds to wait for a reply from udevd. Print help text. udevadm monitor <optional>options</optional> Listens to the kernel uevents and events sent out by a udev rule and prints the devpath of the event to the console. It can be used to analyze the event timing, by comparing the timestamps of the kernel uevent and the udev event. Print the kernel uevents. Print the udev event after the rule processing. Also print the properties of the event. Filter events by subsystem[/devtype]. Only udev events with a matching subsystem value will pass. Filter events by property. Only udev events with a given tag attached will pass. Print help text. udevadm test <optional>options</optional> <replaceable>devpath</replaceable> Simulate a udev event run for the given device, and print debug output. The action string. The subsystem string. Print help text. udevadm test-builtin <optional>options</optional> <replaceable>command</replaceable> <replaceable>devpath</replaceable> Run a built-in command for the given device, and print debug output. Print help text. Author Written by Kay Sievers kay.sievers@vrfy.org. See Also udev7 udevd8 udev-182/src/PaxHeaders.12492/udev-builtin-input_id.c0000644000521600052160000000013211711107662020540 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083327.223104704 30 ctime=1332097353.320438927 udev-182/src/udev-builtin-input_id.c0000664000521600052160000002166611711107662017157 0ustar00kaykay00000000000000/* * compose persistent device path * * Copyright (C) 2009 Martin Pitt * Portions Copyright (C) 2004 David Zeuthen, * Copyright (C) 2011 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "udev.h" /* we must use this kernel-compatible implementation */ #define BITS_PER_LONG (sizeof(unsigned long) * 8) #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) #define OFF(x) ((x)%BITS_PER_LONG) #define BIT(x) (1UL<> OFF(bit)) & 1) /* * Read a capability attribute and return bitmask. * @param dev udev_device * @param attr sysfs attribute name (e. g. "capabilities/key") * @param bitmask: Output array which has a sizeof of bitmask_size */ static void get_cap_mask(struct udev_device *dev, struct udev_device *pdev, const char* attr, unsigned long *bitmask, size_t bitmask_size, bool test) { struct udev *udev = udev_device_get_udev(dev); char text[4096]; unsigned i; char* word; unsigned long val; snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr)); info(udev, "%s raw kernel attribute: %s\n", attr, text); memset (bitmask, 0, bitmask_size); i = 0; while ((word = strrchr(text, ' ')) != NULL) { val = strtoul (word+1, NULL, 16); if (i < bitmask_size/sizeof(unsigned long)) bitmask[i] = val; else info(udev, "ignoring %s block %lX which is larger than maximum size\n", attr, val); *word = '\0'; ++i; } val = strtoul (text, NULL, 16); if (i < bitmask_size / sizeof(unsigned long)) bitmask[i] = val; else info(udev, "ignoring %s block %lX which is larger than maximum size\n", attr, val); if (test) { /* printf pattern with the right unsigned long number of hex chars */ snprintf(text, sizeof(text), " bit %%4u: %%0%zilX\n", 2 * sizeof(unsigned long)); info(udev, "%s decoded bit map:\n", attr); val = bitmask_size / sizeof (unsigned long); /* skip over leading zeros */ while (bitmask[val-1] == 0 && val > 0) --val; for (i = 0; i < val; ++i) info(udev, text, i * BITS_PER_LONG, bitmask[i]); } } /* pointer devices */ static void test_pointers (struct udev_device *dev, const unsigned long* bitmask_ev, const unsigned long* bitmask_abs, const unsigned long* bitmask_key, const unsigned long* bitmask_rel, bool test) { int is_mouse = 0; int is_touchpad = 0; if (!test_bit (EV_KEY, bitmask_ev)) { if (test_bit (EV_ABS, bitmask_ev) && test_bit (ABS_X, bitmask_abs) && test_bit (ABS_Y, bitmask_abs) && test_bit (ABS_Z, bitmask_abs)) udev_builtin_add_property(dev, test, "ID_INPUT_ACCELEROMETER", "1"); return; } if (test_bit (EV_ABS, bitmask_ev) && test_bit (ABS_X, bitmask_abs) && test_bit (ABS_Y, bitmask_abs)) { if (test_bit (BTN_STYLUS, bitmask_key) || test_bit (BTN_TOOL_PEN, bitmask_key)) udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1"); else if (test_bit (BTN_TOOL_FINGER, bitmask_key) && !test_bit (BTN_TOOL_PEN, bitmask_key)) is_touchpad = 1; else if (test_bit (BTN_TRIGGER, bitmask_key) || test_bit (BTN_A, bitmask_key) || test_bit (BTN_1, bitmask_key)) udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); else if (test_bit (BTN_MOUSE, bitmask_key)) /* This path is taken by VMware's USB mouse, which has * absolute axes, but no touch/pressure button. */ is_mouse = 1; else if (test_bit (BTN_TOUCH, bitmask_key)) udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1"); } if (test_bit (EV_REL, bitmask_ev) && test_bit (REL_X, bitmask_rel) && test_bit (REL_Y, bitmask_rel) && test_bit (BTN_MOUSE, bitmask_key)) is_mouse = 1; if (is_mouse) udev_builtin_add_property(dev, test, "ID_INPUT_MOUSE", "1"); if (is_touchpad) udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHPAD", "1"); } /* key like devices */ static void test_key (struct udev_device *dev, const unsigned long* bitmask_ev, const unsigned long* bitmask_key, bool test) { struct udev *udev = udev_device_get_udev(dev); unsigned i; unsigned long found; unsigned long mask; /* do we have any KEY_* capability? */ if (!test_bit (EV_KEY, bitmask_ev)) { info(udev, "test_key: no EV_KEY capability\n"); return; } /* only consider KEY_* here, not BTN_* */ found = 0; for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) { found |= bitmask_key[i]; info(udev, "test_key: checking bit block %lu for any keys; found=%i\n", i*BITS_PER_LONG, found > 0); } /* If there are no keys in the lower block, check the higher block */ if (!found) { for (i = KEY_OK; i < BTN_TRIGGER_HAPPY; ++i) { if (test_bit (i, bitmask_key)) { info(udev, "test_key: Found key %x in high block\n", i); found = 1; break; } } } if (found > 0) udev_builtin_add_property(dev, test, "ID_INPUT_KEY", "1"); /* the first 32 bits are ESC, numbers, and Q to D; if we have all of * those, consider it a full keyboard; do not test KEY_RESERVED, though */ mask = 0xFFFFFFFE; if ((bitmask_key[0] & mask) == mask) udev_builtin_add_property(dev, test, "ID_INPUT_KEYBOARD", "1"); } static int builtin_input_id(struct udev_device *dev, int argc, char *argv[], bool test) { struct udev_device *pdev; unsigned long bitmask_ev[NBITS(EV_MAX)]; unsigned long bitmask_abs[NBITS(ABS_MAX)]; unsigned long bitmask_key[NBITS(KEY_MAX)]; unsigned long bitmask_rel[NBITS(REL_MAX)]; /* walk up the parental chain until we find the real input device; the * argument is very likely a subdevice of this, like eventN */ pdev = dev; while (pdev != NULL && udev_device_get_sysattr_value(pdev, "capabilities/ev") == NULL) pdev = udev_device_get_parent_with_subsystem_devtype(pdev, "input", NULL); /* not an "input" class device */ if (pdev == NULL) return EXIT_SUCCESS; /* Use this as a flag that input devices were detected, so that this * program doesn't need to be called more than once per device */ udev_builtin_add_property(dev, test, "ID_INPUT", "1"); get_cap_mask(dev, pdev, "capabilities/ev", bitmask_ev, sizeof(bitmask_ev), test); get_cap_mask(dev, pdev, "capabilities/abs", bitmask_abs, sizeof(bitmask_abs), test); get_cap_mask(dev, pdev, "capabilities/rel", bitmask_rel, sizeof(bitmask_rel), test); get_cap_mask(dev, pdev, "capabilities/key", bitmask_key, sizeof(bitmask_key), test); test_pointers(dev, bitmask_ev, bitmask_abs, bitmask_key, bitmask_rel, test); test_key(dev, bitmask_ev, bitmask_key, test); return EXIT_SUCCESS; } const struct udev_builtin udev_builtin_input_id = { .name = "input_id", .cmd = builtin_input_id, .help = "input device properties", }; udev-182/src/PaxHeaders.12492/libudev-util-private.c0000644000521600052160000000013211711107662020375 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083324.850104647 30 ctime=1332097353.039438921 udev-182/src/libudev-util-private.c0000664000521600052160000001541311711107662017005 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2003-2009 Kay Sievers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static int create_path(struct udev *udev, const char *path, bool selinux) { char p[UTIL_PATH_SIZE]; char *pos; struct stat stats; int err; util_strscpy(p, sizeof(p), path); pos = strrchr(p, '/'); if (pos == NULL) return 0; while (pos != p && pos[-1] == '/') pos--; if (pos == p) return 0; pos[0] = '\0'; dbg(udev, "stat '%s'\n", p); if (stat(p, &stats) == 0) { if ((stats.st_mode & S_IFMT) == S_IFDIR) return 0; else return -ENOTDIR; } err = util_create_path(udev, p); if (err != 0) return err; dbg(udev, "mkdir '%s'\n", p); if (selinux) udev_selinux_setfscreatecon(udev, p, S_IFDIR|0755); err = mkdir(p, 0755); if (err != 0) { err = -errno; if (err == -EEXIST && stat(p, &stats) == 0) { if ((stats.st_mode & S_IFMT) == S_IFDIR) err = 0; else err = -ENOTDIR; } } if (selinux) udev_selinux_resetfscreatecon(udev); return err; } int util_create_path(struct udev *udev, const char *path) { return create_path(udev, path, false); } int util_create_path_selinux(struct udev *udev, const char *path) { return create_path(udev, path, true); } int util_delete_path(struct udev *udev, const char *path) { char p[UTIL_PATH_SIZE]; char *pos; int err = 0; if (path[0] == '/') while(path[1] == '/') path++; util_strscpy(p, sizeof(p), path); pos = strrchr(p, '/'); if (pos == p || pos == NULL) return 0; for (;;) { *pos = '\0'; pos = strrchr(p, '/'); /* don't remove the last one */ if ((pos == p) || (pos == NULL)) break; err = rmdir(p); if (err < 0) { if (errno == ENOENT) err = 0; break; } } return err; } uid_t util_lookup_user(struct udev *udev, const char *user) { char *endptr; size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX); char buf[buflen]; struct passwd pwbuf; struct passwd *pw; uid_t uid; if (strcmp(user, "root") == 0) return 0; uid = strtoul(user, &endptr, 10); if (endptr[0] == '\0') return uid; errno = getpwnam_r(user, &pwbuf, buf, buflen, &pw); if (pw != NULL) return pw->pw_uid; if (errno == 0 || errno == ENOENT || errno == ESRCH) err(udev, "specified user '%s' unknown\n", user); else err(udev, "error resolving user '%s': %m\n", user); return 0; } gid_t util_lookup_group(struct udev *udev, const char *group) { char *endptr; size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX); char *buf; struct group grbuf; struct group *gr; gid_t gid = 0; if (strcmp(group, "root") == 0) return 0; gid = strtoul(group, &endptr, 10); if (endptr[0] == '\0') return gid; buf = NULL; gid = 0; for (;;) { char *newbuf; newbuf = realloc(buf, buflen); if (!newbuf) break; buf = newbuf; errno = getgrnam_r(group, &grbuf, buf, buflen, &gr); if (gr != NULL) { gid = gr->gr_gid; } else if (errno == ERANGE) { buflen *= 2; continue; } else if (errno == 0 || errno == ENOENT || errno == ESRCH) { err(udev, "specified group '%s' unknown\n", group); } else { err(udev, "error resolving group '%s': %m\n", group); } break; } free(buf); return gid; } /* handle "[/]" format */ int util_resolve_subsys_kernel(struct udev *udev, const char *string, char *result, size_t maxsize, int read_value) { char temp[UTIL_PATH_SIZE]; char *subsys; char *sysname; struct udev_device *dev; char *attr; if (string[0] != '[') return -1; util_strscpy(temp, sizeof(temp), string); subsys = &temp[1]; sysname = strchr(subsys, '/'); if (sysname == NULL) return -1; sysname[0] = '\0'; sysname = &sysname[1]; attr = strchr(sysname, ']'); if (attr == NULL) return -1; attr[0] = '\0'; attr = &attr[1]; if (attr[0] == '/') attr = &attr[1]; if (attr[0] == '\0') attr = NULL; if (read_value && attr == NULL) return -1; dev = udev_device_new_from_subsystem_sysname(udev, subsys, sysname); if (dev == NULL) return -1; if (read_value) { const char *val; val = udev_device_get_sysattr_value(dev, attr); if (val != NULL) util_strscpy(result, maxsize, val); else result[0] = '\0'; info(udev, "value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); } else { size_t l; char *s; s = result; l = util_strpcpyl(&s, maxsize, udev_device_get_syspath(dev), NULL); if (attr != NULL) util_strpcpyl(&s, l, "/", attr, NULL); info(udev, "path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); } udev_device_unref(dev); return 0; } udev-182/src/PaxHeaders.12492/udev-watch.c0000644000521600052160000000013211711107662016367 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083325.856104671 30 ctime=1332097353.238438925 udev-182/src/udev-watch.c0000664000521600052160000001277011711107662015002 0ustar00kaykay00000000000000/* * Copyright (C) 2004-2010 Kay Sievers * Copyright (C) 2009 Canonical Ltd. * Copyright (C) 2009 Scott James Remnant * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "udev.h" static int inotify_fd = -1; /* inotify descriptor, will be shared with rules directory; * set to cloexec since we need our children to be able to add * watches for us */ int udev_watch_init(struct udev *udev) { inotify_fd = inotify_init1(IN_CLOEXEC); if (inotify_fd < 0) err(udev, "inotify_init failed: %m\n"); return inotify_fd; } /* move any old watches directory out of the way, and then restore * the watches */ void udev_watch_restore(struct udev *udev) { char filename[UTIL_PATH_SIZE], oldname[UTIL_PATH_SIZE]; if (inotify_fd < 0) return; util_strscpyl(oldname, sizeof(oldname), udev_get_run_path(udev), "/watch.old", NULL); util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/watch", NULL); if (rename(filename, oldname) == 0) { DIR *dir; struct dirent *ent; dir = opendir(oldname); if (dir == NULL) { err(udev, "unable to open old watches dir '%s', old watches will not be restored: %m", oldname); return; } for (ent = readdir(dir); ent != NULL; ent = readdir(dir)) { char device[UTIL_PATH_SIZE]; char *s; size_t l; ssize_t len; struct udev_device *dev; if (ent->d_name[0] == '.') continue; s = device; l = util_strpcpy(&s, sizeof(device), udev_get_sys_path(udev)); len = readlinkat(dirfd(dir), ent->d_name, s, l); if (len <= 0 || len == (ssize_t)l) goto unlink; s[len] = '\0'; dev = udev_device_new_from_id_filename(udev, s); if (dev == NULL) goto unlink; info(udev, "restoring old watch on '%s'\n", udev_device_get_devnode(dev)); udev_watch_begin(udev, dev); udev_device_unref(dev); unlink: unlinkat(dirfd(dir), ent->d_name, 0); } closedir(dir); rmdir(oldname); } else if (errno != ENOENT) { err(udev, "unable to move watches dir '%s', old watches will not be restored: %m", filename); } } void udev_watch_begin(struct udev *udev, struct udev_device *dev) { char filename[UTIL_PATH_SIZE]; int wd; if (inotify_fd < 0) return; info(udev, "adding watch on '%s'\n", udev_device_get_devnode(dev)); wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE); if (wd < 0) { err(udev, "inotify_add_watch(%d, %s, %o) failed: %m\n", inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE); return; } snprintf(filename, sizeof(filename), "%s/watch/%d", udev_get_run_path(udev), wd); util_create_path(udev, filename); unlink(filename); symlink(udev_device_get_id_filename(dev), filename); udev_device_set_watch_handle(dev, wd); } void udev_watch_end(struct udev *udev, struct udev_device *dev) { int wd; char filename[UTIL_PATH_SIZE]; if (inotify_fd < 0) return; wd = udev_device_get_watch_handle(dev); if (wd < 0) return; info(udev, "removing watch on '%s'\n", udev_device_get_devnode(dev)); inotify_rm_watch(inotify_fd, wd); snprintf(filename, sizeof(filename), "%s/watch/%d", udev_get_run_path(udev), wd); unlink(filename); udev_device_set_watch_handle(dev, -1); } struct udev_device *udev_watch_lookup(struct udev *udev, int wd) { char filename[UTIL_PATH_SIZE]; char majmin[UTIL_PATH_SIZE]; char *s; size_t l; ssize_t len; if (inotify_fd < 0 || wd < 0) return NULL; snprintf(filename, sizeof(filename), "%s/watch/%d", udev_get_run_path(udev), wd); s = majmin; l = util_strpcpy(&s, sizeof(majmin), udev_get_sys_path(udev)); len = readlink(filename, s, l); if (len <= 0 || (size_t)len == l) return NULL; s[len] = '\0'; return udev_device_new_from_id_filename(udev, s); } udev-182/src/PaxHeaders.12492/floppy0000644000521600052160000000013211731430511015402 xustar000000000000000030 mtime=1332097353.129438921 30 atime=1332097354.349438951 30 ctime=1332097353.129438921 udev-182/src/floppy/0000775000521600052160000000000011731430511014063 5ustar00kaykay00000000000000udev-182/src/floppy/PaxHeaders.12492/60-floppy.rules0000644000521600052160000000013211711107662020275 xustar000000000000000030 mtime=1327796146.953827021 30 atime=1332083869.444117624 30 ctime=1332097352.690438912 udev-182/src/floppy/60-floppy.rules0000664000521600052160000000037211711107662016703 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update SUBSYSTEM=="block", KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", ENV{CMOS_TYPE}="$attr{cmos}", \ RUN+="create_floppy_devices -c -t $env{CMOS_TYPE} -m %M -M 0660 -G floppy $root/%k" udev-182/src/floppy/PaxHeaders.12492/create_floppy_devices.c0000644000521600052160000000013211711107662022167 xustar000000000000000030 mtime=1327796146.953827021 30 atime=1332083662.713112698 30 ctime=1332097353.129438921 udev-182/src/floppy/create_floppy_devices.c0000664000521600052160000001330611711107662020576 0ustar00kaykay00000000000000/* * Create all possible floppy device based on the CMOS type. * Based upon code from drivers/block/floppy.c * * Copyright(C) 2005, SUSE Linux Products GmbH * * Author: Hannes Reinecke * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static char *table[] = { "", "d360", "h1200", "u360", "u720", "h360", "h720", "u1440", "u2880", "CompaQ", "h1440", "u1680", "h410", "u820", "h1476", "u1722", "h420", "u830", "h1494", "u1743", "h880", "u1040", "u1120", "h1600", "u1760", "u1920", "u3200", "u3520", "u3840", "u1840", "u800", "u1600", NULL }; static int t360[] = { 1, 0 }; static int t1200[] = { 2, 5, 6, 10, 12, 14, 16, 18, 20, 23, 0 }; static int t3in[] = { 8, 9, 26, 27, 28, 7, 11, 15, 19, 24, 25, 29, 31, 3, 4, 13, 17, 21, 22, 30, 0 }; static int *table_sup[] = { NULL, t360, t1200, t3in+5+8, t3in+5, t3in, t3in }; static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { vsyslog(priority, format, args); } int main(int argc, char **argv) { struct udev *udev; char *dev; char *devname; char node[64]; int type = 0, i, fdnum, c; int major = 2, minor; uid_t uid = 0; gid_t gid = 0; mode_t mode = 0660; int create_nodes = 0; int print_nodes = 0; int is_err = 0; udev = udev_new(); if (udev == NULL) goto exit; udev_log_init("create_floppy_devices"); udev_set_log_fn(udev, log_fn); udev_selinux_init(udev); while ((c = getopt(argc, argv, "cudm:U:G:M:t:")) != -1) { switch (c) { case 'c': create_nodes = 1; break; case 'd': print_nodes = 1; break; case 'U': uid = util_lookup_user(udev, optarg); break; case 'G': gid = util_lookup_group(udev, optarg); break; case 'M': mode = strtol(optarg, NULL, 0); mode = mode & 0666; break; case 'm': major = strtol(optarg, NULL, 0); break; case 't': type = strtol(optarg, NULL, 0); break; default: is_err++; break; } } if (is_err || optind >= argc) { printf("Usage: %s [OPTION] device\n" " -c create\n" " -d debug\n" " -m Major number\n" " -t floppy type number\n" " -U device node user ownership\n" " -G device node group owner\n" " -M device node mode\n" "\n", argv[0]); return 1; } dev = argv[optind]; devname = strrchr(dev, '/'); if (devname != NULL) devname = &devname[1]; else devname = dev; if (strncmp(devname, "fd", 2) != 0) { fprintf(stderr,"Device '%s' is not a floppy device\n", dev); return 1; } fdnum = strtol(&devname[2], NULL, 10); if (fdnum < 0 || fdnum > 7) { fprintf(stderr,"Floppy device number %d out of range (0-7)\n", fdnum); return 1; } if (fdnum > 3) fdnum += 124; if (major < 1) { fprintf(stderr,"Invalid major number %d\n", major); return 1; } if (type < 0 || type >= (int) ARRAY_SIZE(table_sup)) { fprintf(stderr,"Invalid CMOS type %d\n", type); return 1; } if (type == 0) return 0; i = 0; while (table_sup[type][i]) { sprintf(node, "%s%s", dev, table[table_sup[type][i]]); minor = (table_sup[type][i] << 2) + fdnum; if (print_nodes) printf("%s b %.4o %d %d\n", node, mode, major, minor); if (create_nodes) { unlink(node); udev_selinux_setfscreatecon(udev, node, S_IFBLK | mode); mknod(node, S_IFBLK | mode, makedev(major,minor)); udev_selinux_resetfscreatecon(udev); chown(node, uid, gid); chmod(node, S_IFBLK | mode); } i++; } udev_selinux_exit(udev); udev_unref(udev); udev_log_close(); exit: return 0; } udev-182/src/PaxHeaders.12492/udev-kernel.socket0000644000521600052160000000013211711107662017607 xustar000000000000000030 mtime=1327796146.962827005 30 atime=1332083868.714117607 30 ctime=1332097352.053438897 udev-182/src/udev-kernel.socket0000664000521600052160000000030511711107662016211 0ustar00kaykay00000000000000[Unit] Description=udev Kernel Socket DefaultDependencies=no ConditionCapability=CAP_MKNOD [Socket] Service=udev.service ReceiveBuffer=134217728 ListenNetlink=kobject-uevent 1 PassCredentials=yes udev-182/src/PaxHeaders.12492/COPYING0000644000521600052160000000013211711107662015207 xustar000000000000000030 mtime=1327796146.949827028 30 atime=1332083870.281117644 30 ctime=1332097353.492438931 udev-182/src/COPYING0000664000521600052160000006363511711107662013630 0ustar00kaykay00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! udev-182/src/PaxHeaders.12492/libudev-queue-private.c0000644000521600052160000000013211711107662020544 xustar000000000000000030 mtime=1327796146.960827009 30 atime=1332083325.180104655 30 ctime=1332097353.064438921 udev-182/src/libudev-queue-private.c0000664000521600052160000003601611711107662017156 0ustar00kaykay00000000000000/* * libudev - interface to udev device information * * Copyright (C) 2008 Kay Sievers * Copyright (C) 2009 Alan Jenkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. */ /* * DISCLAIMER - The file format mentioned here is private to udev/libudev, * and may be changed without notice. * * The udev event queue is exported as a binary log file. * Each log record consists of a sequence number followed by the device path. * * When a new event is queued, its details are appended to the log. * When the event finishes, a second record is appended to the log * with the same sequence number but a devpath len of 0. * * Example: * { 0x0000000000000001 } * { 0x0000000000000001, 0x0019, "/devices/virtual/mem/null" }, * { 0x0000000000000002, 0x001b, "/devices/virtual/mem/random" }, * { 0x0000000000000001, 0x0000 }, * { 0x0000000000000003, 0x0019, "/devices/virtual/mem/zero" }, * * Events 2 and 3 are still queued, but event 1 has finished. * * The queue does not grow indefinitely. It is periodically re-created * to remove finished events. Atomic rename() makes this transparent to readers. * * The queue file starts with a single sequence number which specifies the * minimum sequence number in the log that follows. Any events prior to this * sequence number have already finished. */ #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static int rebuild_queue_file(struct udev_queue_export *udev_queue_export); struct udev_queue_export { struct udev *udev; int queued_count; /* number of unfinished events exported in queue file */ FILE *queue_file; unsigned long long int seqnum_max; /* earliest sequence number in queue file */ unsigned long long int seqnum_min; /* latest sequence number in queue file */ int waste_bytes; /* queue file bytes wasted on finished events */ }; struct udev_queue_export *udev_queue_export_new(struct udev *udev) { struct udev_queue_export *udev_queue_export; unsigned long long int initial_seqnum; if (udev == NULL) return NULL; udev_queue_export = calloc(1, sizeof(struct udev_queue_export)); if (udev_queue_export == NULL) return NULL; udev_queue_export->udev = udev; initial_seqnum = udev_get_kernel_seqnum(udev); udev_queue_export->seqnum_min = initial_seqnum; udev_queue_export->seqnum_max = initial_seqnum; udev_queue_export_cleanup(udev_queue_export); if (rebuild_queue_file(udev_queue_export) != 0) { free(udev_queue_export); return NULL; } return udev_queue_export; } struct udev_queue_export *udev_queue_export_unref(struct udev_queue_export *udev_queue_export) { if (udev_queue_export == NULL) return NULL; if (udev_queue_export->queue_file != NULL) fclose(udev_queue_export->queue_file); free(udev_queue_export); return NULL; } void udev_queue_export_cleanup(struct udev_queue_export *udev_queue_export) { char filename[UTIL_PATH_SIZE]; if (udev_queue_export == NULL) return; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev_queue_export->udev), "/queue.tmp", NULL); unlink(filename); util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev_queue_export->udev), "/queue.bin", NULL); unlink(filename); } static int skip_to(FILE *file, long offset) { long old_offset; /* fseek may drop buffered data, avoid it for small seeks */ old_offset = ftell(file); if (offset > old_offset && offset - old_offset <= BUFSIZ) { size_t skip_bytes = offset - old_offset; char buf[skip_bytes]; if (fread(buf, skip_bytes, 1, file) != skip_bytes) return -1; } return fseek(file, offset, SEEK_SET); } struct queue_devpaths { unsigned int devpaths_first; /* index of first queued event */ unsigned int devpaths_size; long devpaths[]; /* seqnum -> offset of devpath in queue file (or 0) */ }; /* * Returns a table mapping seqnum to devpath file offset for currently queued events. * devpaths[i] represents the event with seqnum = i + udev_queue_export->seqnum_min. */ static struct queue_devpaths *build_index(struct udev_queue_export *udev_queue_export) { struct queue_devpaths *devpaths; unsigned long long int range; long devpath_offset; ssize_t devpath_len; unsigned long long int seqnum; unsigned long long int n; unsigned int i; /* seek to the first event in the file */ rewind(udev_queue_export->queue_file); udev_queue_read_seqnum(udev_queue_export->queue_file, &seqnum); /* allocate the table */ range = udev_queue_export->seqnum_min - udev_queue_export->seqnum_max; if (range - 1 > INT_MAX) { err(udev_queue_export->udev, "queue file overflow\n"); return NULL; } devpaths = calloc(1, sizeof(struct queue_devpaths) + (range + 1) * sizeof(long)); if (devpaths == NULL) return NULL; devpaths->devpaths_size = range + 1; /* read all records and populate the table */ for (;;) { if (udev_queue_read_seqnum(udev_queue_export->queue_file, &seqnum) < 0) break; n = seqnum - udev_queue_export->seqnum_max; if (n >= devpaths->devpaths_size) goto read_error; devpath_offset = ftell(udev_queue_export->queue_file); devpath_len = udev_queue_skip_devpath(udev_queue_export->queue_file); if (devpath_len < 0) goto read_error; if (devpath_len > 0) devpaths->devpaths[n] = devpath_offset; else devpaths->devpaths[n] = 0; } /* find first queued event */ for (i = 0; i < devpaths->devpaths_size; i++) { if (devpaths->devpaths[i] != 0) break; } devpaths->devpaths_first = i; return devpaths; read_error: err(udev_queue_export->udev, "queue file corrupted\n"); free(devpaths); return NULL; } static int rebuild_queue_file(struct udev_queue_export *udev_queue_export) { unsigned long long int seqnum; struct queue_devpaths *devpaths = NULL; char filename[UTIL_PATH_SIZE]; char filename_tmp[UTIL_PATH_SIZE]; FILE *new_queue_file = NULL; unsigned int i; /* read old queue file */ if (udev_queue_export->queue_file != NULL) { dbg(udev_queue_export->udev, "compacting queue file, freeing %d bytes\n", udev_queue_export->waste_bytes); devpaths = build_index(udev_queue_export); if (devpaths != NULL) udev_queue_export->seqnum_max += devpaths->devpaths_first; } if (devpaths == NULL) { dbg(udev_queue_export->udev, "creating empty queue file\n"); udev_queue_export->queued_count = 0; udev_queue_export->seqnum_max = udev_queue_export->seqnum_min; } /* create new queue file */ util_strscpyl(filename_tmp, sizeof(filename_tmp), udev_get_run_path(udev_queue_export->udev), "/queue.tmp", NULL); new_queue_file = fopen(filename_tmp, "w+"); if (new_queue_file == NULL) goto error; seqnum = udev_queue_export->seqnum_max; fwrite(&seqnum, 1, sizeof(unsigned long long int), new_queue_file); /* copy unfinished events only to the new file */ if (devpaths != NULL) { for (i = devpaths->devpaths_first; i < devpaths->devpaths_size; i++) { char devpath[UTIL_PATH_SIZE]; int err; unsigned short devpath_len; if (devpaths->devpaths[i] != 0) { skip_to(udev_queue_export->queue_file, devpaths->devpaths[i]); err = udev_queue_read_devpath(udev_queue_export->queue_file, devpath, sizeof(devpath)); devpath_len = err; fwrite(&seqnum, sizeof(unsigned long long int), 1, new_queue_file); fwrite(&devpath_len, sizeof(unsigned short), 1, new_queue_file); fwrite(devpath, 1, devpath_len, new_queue_file); } seqnum++; } free(devpaths); devpaths = NULL; } fflush(new_queue_file); if (ferror(new_queue_file)) goto error; /* rename the new file on top of the old one */ util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev_queue_export->udev), "/queue.bin", NULL); if (rename(filename_tmp, filename) != 0) goto error; if (udev_queue_export->queue_file != NULL) fclose(udev_queue_export->queue_file); udev_queue_export->queue_file = new_queue_file; udev_queue_export->waste_bytes = 0; return 0; error: err(udev_queue_export->udev, "failed to create queue file: %m\n"); udev_queue_export_cleanup(udev_queue_export); if (udev_queue_export->queue_file != NULL) { fclose(udev_queue_export->queue_file); udev_queue_export->queue_file = NULL; } if (new_queue_file != NULL) fclose(new_queue_file); if (devpaths != NULL) free(devpaths); udev_queue_export->queued_count = 0; udev_queue_export->waste_bytes = 0; udev_queue_export->seqnum_max = udev_queue_export->seqnum_min; return -1; } static int write_queue_record(struct udev_queue_export *udev_queue_export, unsigned long long int seqnum, const char *devpath, size_t devpath_len) { unsigned short len; if (udev_queue_export->queue_file == NULL) { dbg(udev_queue_export->udev, "can't record event: queue file not available\n"); return -1; } if (fwrite(&seqnum, sizeof(unsigned long long int), 1, udev_queue_export->queue_file) != 1) goto write_error; len = (devpath_len < USHRT_MAX) ? devpath_len : USHRT_MAX; if (fwrite(&len, sizeof(unsigned short), 1, udev_queue_export->queue_file) != 1) goto write_error; if (len > 0) { if (fwrite(devpath, 1, len, udev_queue_export->queue_file) != len) goto write_error; } /* *must* flush output; caller may fork */ if (fflush(udev_queue_export->queue_file) != 0) goto write_error; return 0; write_error: /* if we failed half way through writing a record to a file, we should not try to write any further records to it. */ err(udev_queue_export->udev, "error writing to queue file: %m\n"); fclose(udev_queue_export->queue_file); udev_queue_export->queue_file = NULL; return -1; } enum device_state { DEVICE_QUEUED, DEVICE_FINISHED, }; static inline size_t queue_record_size(size_t devpath_len) { return sizeof(unsigned long long int) + sizeof(unsigned short int) + devpath_len; } static int update_queue(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device, enum device_state state) { unsigned long long int seqnum = udev_device_get_seqnum(udev_device); const char *devpath = NULL; size_t devpath_len = 0; int bytes; int err; /* FINISHED records have a zero length devpath */ if (state == DEVICE_QUEUED) { devpath = udev_device_get_devpath(udev_device); devpath_len = strlen(devpath); } /* recover from an earlier failed rebuild */ if (udev_queue_export->queue_file == NULL) { if (rebuild_queue_file(udev_queue_export) != 0) return -1; } /* if we're removing the last event from the queue, that's the best time to rebuild it */ if (state != DEVICE_QUEUED && udev_queue_export->queued_count == 1) { /* we don't need to read the old queue file */ fclose(udev_queue_export->queue_file); udev_queue_export->queue_file = NULL; rebuild_queue_file(udev_queue_export); return 0; } /* try to rebuild the queue files before they grow larger than one page. */ bytes = ftell(udev_queue_export->queue_file) + queue_record_size(devpath_len); if ((udev_queue_export->waste_bytes > bytes / 2) && bytes > 4096) rebuild_queue_file(udev_queue_export); /* don't record a finished event, if we already dropped the event in a failed rebuild */ if (seqnum < udev_queue_export->seqnum_max) return 0; /* now write to the queue */ if (state == DEVICE_QUEUED) { udev_queue_export->queued_count++; udev_queue_export->seqnum_min = seqnum; } else { udev_queue_export->waste_bytes += queue_record_size(devpath_len) + queue_record_size(0); udev_queue_export->queued_count--; } err = write_queue_record(udev_queue_export, seqnum, devpath, devpath_len); /* try to handle ENOSPC */ if (err != 0 && udev_queue_export->queued_count == 0) { udev_queue_export_cleanup(udev_queue_export); err = rebuild_queue_file(udev_queue_export); } return err; } static int update(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device, enum device_state state) { if (update_queue(udev_queue_export, udev_device, state) != 0) return -1; return 0; } int udev_queue_export_device_queued(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device) { return update(udev_queue_export, udev_device, DEVICE_QUEUED); } int udev_queue_export_device_finished(struct udev_queue_export *udev_queue_export, struct udev_device *udev_device) { return update(udev_queue_export, udev_device, DEVICE_FINISHED); } udev-182/src/PaxHeaders.12492/udev.pc.in0000644000521600052160000000013211711107662016050 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083662.276112688 30 ctime=1332097353.501438931 udev-182/src/udev.pc.in0000664000521600052160000000011111711107662014445 0ustar00kaykay00000000000000Name: udev Description: udev Version: @VERSION@ udevdir=@pkglibexecdir@ udev-182/src/PaxHeaders.12492/test-udev.c0000644000521600052160000000013211711107662016240 xustar000000000000000030 mtime=1327796146.961827007 30 atime=1332083662.700112698 30 ctime=1332097353.359438929 udev-182/src/test-udev.c0000664000521600052160000000752311711107662014653 0ustar00kaykay00000000000000/* * Copyright (C) 2003-2004 Greg Kroah-Hartman * Copyright (C) 2004-2008 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" void udev_main_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) {} int main(int argc, char *argv[]) { struct udev *udev; struct udev_event *event = NULL; struct udev_device *dev = NULL; struct udev_rules *rules = NULL; char syspath[UTIL_PATH_SIZE]; const char *devpath; const char *action; sigset_t mask, sigmask_orig; int err = -EINVAL; udev = udev_new(); if (udev == NULL) exit(1); info(udev, "version %s\n", VERSION); udev_selinux_init(udev); sigprocmask(SIG_SETMASK, NULL, &sigmask_orig); action = argv[1]; if (action == NULL) { err(udev, "action missing\n"); goto out; } devpath = argv[2]; if (devpath == NULL) { err(udev, "devpath missing\n"); goto out; } rules = udev_rules_new(udev, 1); util_strscpyl(syspath, sizeof(syspath), udev_get_sys_path(udev), devpath, NULL); dev = udev_device_new_from_syspath(udev, syspath); if (dev == NULL) { info(udev, "unknown device '%s'\n", devpath); goto out; } udev_device_set_action(dev, action); event = udev_event_new(dev); sigfillset(&mask); sigprocmask(SIG_SETMASK, &mask, &sigmask_orig); event->fd_signal = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC); if (event->fd_signal < 0) { fprintf(stderr, "error creating signalfd\n"); goto out; } /* do what devtmpfs usually provides us */ if (udev_device_get_devnode(dev) != NULL) { mode_t mode; if (strcmp(udev_device_get_subsystem(dev), "block") == 0) mode |= S_IFBLK; else mode |= S_IFCHR; if (strcmp(action, "remove") != 0) { util_create_path(udev, udev_device_get_devnode(dev)); mknod(udev_device_get_devnode(dev), mode, udev_device_get_devnum(dev)); } else { unlink(udev_device_get_devnode(dev)); util_delete_path(udev, udev_device_get_devnode(dev)); } } err = udev_event_execute_rules(event, rules, &sigmask_orig); if (err == 0) udev_event_execute_run(event, NULL); out: if (event != NULL && event->fd_signal >= 0) close(event->fd_signal); udev_event_unref(event); udev_device_unref(dev); udev_rules_unref(rules); udev_selinux_exit(udev); udev_unref(udev); if (err != 0) return 1; return 0; } udev-182/src/PaxHeaders.12492/udevadm-info.c0000644000521600052160000000013211711107662016676 xustar000000000000000030 mtime=1327796146.963827004 30 atime=1332083327.798104718 30 ctime=1332097353.375438929 udev-182/src/udevadm-info.c0000664000521600052160000005434111711107662015311 0ustar00kaykay00000000000000/* * Copyright (C) 2004-2009 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "udev.h" static bool skip_attribute(const char *name) { static const char const *skip[] = { "uevent", "dev", "modalias", "resource", "driver", "subsystem", "module", }; unsigned int i; for (i = 0; i < ARRAY_SIZE(skip); i++) if (strcmp(name, skip[i]) == 0) return true; return false; } static void print_all_attributes(struct udev_device *device, const char *key) { struct udev *udev = udev_device_get_udev(device); struct udev_list_entry *sysattr; udev_list_entry_foreach(sysattr, udev_device_get_sysattr_list_entry(device)) { const char *name; const char *value; size_t len; name = udev_list_entry_get_name(sysattr); if (skip_attribute(name)) continue; value = udev_device_get_sysattr_value(device, name); if (value == NULL) continue; dbg(udev, "attr '%s'='%s'\n", name, value); /* skip any values that look like a path */ if (value[0] == '/') continue; /* skip nonprintable attributes */ len = strlen(value); while (len > 0 && isprint(value[len-1])) len--; if (len > 0) { dbg(udev, "attribute value of '%s' non-printable, skip\n", name); continue; } printf(" %s{%s}==\"%s\"\n", key, name, value); } printf("\n"); } static int print_device_chain(struct udev_device *device) { struct udev_device *device_parent; const char *str; printf("\n" "Udevadm info starts with the device specified by the devpath and then\n" "walks up the chain of parent devices. It prints for every device\n" "found, all possible attributes in the udev rules key format.\n" "A rule to match, can be composed by the attributes of the device\n" "and the attributes from one single parent device.\n" "\n"); printf(" looking at device '%s':\n", udev_device_get_devpath(device)); printf(" KERNEL==\"%s\"\n", udev_device_get_sysname(device)); str = udev_device_get_subsystem(device); if (str == NULL) str = ""; printf(" SUBSYSTEM==\"%s\"\n", str); str = udev_device_get_driver(device); if (str == NULL) str = ""; printf(" DRIVER==\"%s\"\n", str); print_all_attributes(device, "ATTR"); device_parent = device; do { device_parent = udev_device_get_parent(device_parent); if (device_parent == NULL) break; printf(" looking at parent device '%s':\n", udev_device_get_devpath(device_parent)); printf(" KERNELS==\"%s\"\n", udev_device_get_sysname(device_parent)); str = udev_device_get_subsystem(device_parent); if (str == NULL) str = ""; printf(" SUBSYSTEMS==\"%s\"\n", str); str = udev_device_get_driver(device_parent); if (str == NULL) str = ""; printf(" DRIVERS==\"%s\"\n", str); print_all_attributes(device_parent, "ATTRS"); } while (device_parent != NULL); return 0; } static void print_record(struct udev_device *device) { size_t len; const char *str; int i; struct udev_list_entry *list_entry; printf("P: %s\n", udev_device_get_devpath(device)); len = strlen(udev_get_dev_path(udev_device_get_udev(device))); str = udev_device_get_devnode(device); if (str != NULL) printf("N: %s\n", &str[len+1]); i = udev_device_get_devlink_priority(device); if (i != 0) printf("L: %i\n", i); udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(device)) { len = strlen(udev_get_dev_path(udev_device_get_udev(device))); printf("S: %s\n", &udev_list_entry_get_name(list_entry)[len+1]); } udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(device)) printf("E: %s=%s\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); printf("\n"); } static int stat_device(const char *name, bool export, const char *prefix) { struct stat statbuf; if (stat(name, &statbuf) != 0) return -1; if (export) { if (prefix == NULL) prefix = "INFO_"; printf("%sMAJOR=%d\n" "%sMINOR=%d\n", prefix, major(statbuf.st_dev), prefix, minor(statbuf.st_dev)); } else printf("%d:%d\n", major(statbuf.st_dev), minor(statbuf.st_dev)); return 0; } static int export_devices(struct udev *udev) { struct udev_enumerate *udev_enumerate; struct udev_list_entry *list_entry; udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; udev_enumerate_scan_devices(udev_enumerate); udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate)) { struct udev_device *device; device = udev_device_new_from_syspath(udev, udev_list_entry_get_name(list_entry)); if (device != NULL) { print_record(device); udev_device_unref(device); } } udev_enumerate_unref(udev_enumerate); return 0; } static void cleanup_dir(DIR *dir, mode_t mask, int depth) { struct dirent *dent; if (depth <= 0) return; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { struct stat stats; if (dent->d_name[0] == '.') continue; if (fstatat(dirfd(dir), dent->d_name, &stats, AT_SYMLINK_NOFOLLOW) != 0) continue; if ((stats.st_mode & mask) != 0) continue; if (S_ISDIR(stats.st_mode)) { DIR *dir2; dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC)); if (dir2 != NULL) { cleanup_dir(dir2, mask, depth-1); closedir(dir2); } unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR); } else { unlinkat(dirfd(dir), dent->d_name, 0); } } } static void cleanup_db(struct udev *udev) { char filename[UTIL_PATH_SIZE]; DIR *dir; util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/queue.bin", NULL); unlink(filename); util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data", NULL); dir = opendir(filename); if (dir != NULL) { cleanup_dir(dir, S_ISVTX, 1); closedir(dir); } util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/links", NULL); dir = opendir(filename); if (dir != NULL) { cleanup_dir(dir, 0, 2); closedir(dir); } util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/tags", NULL); dir = opendir(filename); if (dir != NULL) { cleanup_dir(dir, 0, 2); closedir(dir); } util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/watch", NULL); dir = opendir(filename); if (dir != NULL) { cleanup_dir(dir, 0, 1); closedir(dir); } util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/firmware-missing", NULL); dir = opendir(filename); if (dir != NULL) { cleanup_dir(dir, 0, 1); closedir(dir); } } static int uinfo(struct udev *udev, int argc, char *argv[]) { struct udev_device *device = NULL; bool root = 0; bool export = 0; const char *export_prefix = NULL; char path[UTIL_PATH_SIZE]; char name[UTIL_PATH_SIZE]; struct udev_list_entry *list_entry; int rc = 0; static const struct option options[] = { { "name", required_argument, NULL, 'n' }, { "path", required_argument, NULL, 'p' }, { "query", required_argument, NULL, 'q' }, { "attribute-walk", no_argument, NULL, 'a' }, { "cleanup-db", no_argument, NULL, 'c' }, { "export-db", no_argument, NULL, 'e' }, { "root", no_argument, NULL, 'r' }, { "run", no_argument, NULL, 'R' }, { "device-id-of-file", required_argument, NULL, 'd' }, { "export", no_argument, NULL, 'x' }, { "export-prefix", required_argument, NULL, 'P' }, { "version", no_argument, NULL, 'V' }, { "help", no_argument, NULL, 'h' }, {} }; enum action_type { ACTION_NONE, ACTION_QUERY, ACTION_ATTRIBUTE_WALK, ACTION_ROOT, ACTION_DEVICE_ID_FILE, } action = ACTION_NONE; enum query_type { QUERY_NONE, QUERY_NAME, QUERY_PATH, QUERY_SYMLINK, QUERY_PROPERTY, QUERY_ALL, } query = QUERY_NONE; for (;;) { int option; struct stat statbuf; option = getopt_long(argc, argv, "aced:n:p:q:rxP:RVh", options, NULL); if (option == -1) break; dbg(udev, "option '%c'\n", option); switch (option) { case 'n': if (device != NULL) { fprintf(stderr, "device already specified\n"); rc = 2; goto exit; } /* remove /dev if given */ if (strncmp(optarg, udev_get_dev_path(udev), strlen(udev_get_dev_path(udev))) != 0) util_strscpyl(name, sizeof(name), udev_get_dev_path(udev), "/", optarg, NULL); else util_strscpy(name, sizeof(name), optarg); util_remove_trailing_chars(name, '/'); if (stat(name, &statbuf) < 0) { fprintf(stderr, "device node not found\n"); rc = 2; goto exit; } else { char type; if (S_ISBLK(statbuf.st_mode)) { type = 'b'; } else if (S_ISCHR(statbuf.st_mode)) { type = 'c'; } else { fprintf(stderr, "device node has wrong file type\n"); rc = 2; goto exit; } device = udev_device_new_from_devnum(udev, type, statbuf.st_rdev); if (device == NULL) { fprintf(stderr, "device node not found\n"); rc = 2; goto exit; } } break; case 'p': if (device != NULL) { fprintf(stderr, "device already specified\n"); rc = 2; goto exit; } /* add sys dir if needed */ if (strncmp(optarg, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) util_strscpyl(path, sizeof(path), udev_get_sys_path(udev), optarg, NULL); else util_strscpy(path, sizeof(path), optarg); util_remove_trailing_chars(path, '/'); device = udev_device_new_from_syspath(udev, path); if (device == NULL) { fprintf(stderr, "device path not found\n"); rc = 2; goto exit; } break; case 'q': action = ACTION_QUERY; if (strcmp(optarg, "property") == 0 || strcmp(optarg, "env") == 0) { query = QUERY_PROPERTY; } else if (strcmp(optarg, "name") == 0) { query = QUERY_NAME; } else if (strcmp(optarg, "symlink") == 0) { query = QUERY_SYMLINK; } else if (strcmp(optarg, "path") == 0) { query = QUERY_PATH; } else if (strcmp(optarg, "all") == 0) { query = QUERY_ALL; } else { fprintf(stderr, "unknown query type\n"); rc = 3; goto exit; } break; case 'r': if (action == ACTION_NONE) action = ACTION_ROOT; root = true; break; case 'R': printf("%s\n", udev_get_run_path(udev)); goto exit; case 'd': action = ACTION_DEVICE_ID_FILE; util_strscpy(name, sizeof(name), optarg); break; case 'a': action = ACTION_ATTRIBUTE_WALK; break; case 'e': export_devices(udev); goto exit; case 'c': cleanup_db(udev); goto exit; case 'x': export = true; break; case 'P': export_prefix = optarg; break; case 'V': printf("%s\n", VERSION); goto exit; case 'h': printf("Usage: udevadm info OPTIONS\n" " --query= query device information:\n" " name name of device node\n" " symlink pointing to node\n" " path sys device path\n" " property the device properties\n" " all all values\n" " --path= sys device path used for query or attribute walk\n" " --name= node or symlink name used for query or attribute walk\n" " --root prepend dev directory to path names\n" " --attribute-walk print all key matches while walking along the chain\n" " of parent devices\n" " --device-id-of-file= print major:minor of device containing this file\n" " --export export key/value pairs\n" " --export-prefix export the key name with a prefix\n" " --export-db export the content of the udev database\n" " --cleanup-db cleanup the udev database\n" " --help\n\n"); goto exit; default: rc = 1; goto exit; } } switch (action) { case ACTION_QUERY: if (device == NULL) { fprintf(stderr, "query needs a valid device specified by --path= or --name=\n"); rc = 4; goto exit; } switch(query) { case QUERY_NAME: { const char *node = udev_device_get_devnode(device); if (node == NULL) { fprintf(stderr, "no device node found\n"); rc = 5; goto exit; } if (root) { printf("%s\n", udev_device_get_devnode(device)); } else { size_t len = strlen(udev_get_dev_path(udev)); printf("%s\n", &udev_device_get_devnode(device)[len+1]); } break; } case QUERY_SYMLINK: list_entry = udev_device_get_devlinks_list_entry(device); while (list_entry != NULL) { if (root) { printf("%s", udev_list_entry_get_name(list_entry)); } else { size_t len; len = strlen(udev_get_dev_path(udev_device_get_udev(device))); printf("%s", &udev_list_entry_get_name(list_entry)[len+1]); } list_entry = udev_list_entry_get_next(list_entry); if (list_entry != NULL) printf(" "); } printf("\n"); break; case QUERY_PATH: printf("%s\n", udev_device_get_devpath(device)); goto exit; case QUERY_PROPERTY: list_entry = udev_device_get_properties_list_entry(device); while (list_entry != NULL) { if (export) { const char *prefix = export_prefix; if (prefix == NULL) prefix = ""; printf("%s%s='%s'\n", prefix, udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); } else { printf("%s=%s\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); } list_entry = udev_list_entry_get_next(list_entry); } break; case QUERY_ALL: print_record(device); break; default: fprintf(stderr, "unknown query type\n"); break; } break; case ACTION_ATTRIBUTE_WALK: if (device == NULL) { fprintf(stderr, "query needs a valid device specified by --path= or --name=\n"); rc = 4; goto exit; } print_device_chain(device); break; case ACTION_DEVICE_ID_FILE: if (stat_device(name, export, export_prefix) != 0) rc = 1; break; case ACTION_ROOT: printf("%s\n", udev_get_dev_path(udev)); break; default: fprintf(stderr, "missing option\n"); rc = 1; break; } exit: udev_device_unref(device); return rc; } const struct udevadm_cmd udevadm_info = { .name = "info", .cmd = uinfo, .help = "query sysfs or the udev database", }; udev-182/src/PaxHeaders.12492/keymap0000644000521600052160000000013211731430511015357 xustar000000000000000030 mtime=1332097353.645438935 30 atime=1332097354.349438951 30 ctime=1332097353.645438935 udev-182/src/keymap/0000775000521600052160000000000011731430511014040 5ustar00kaykay00000000000000udev-182/src/keymap/PaxHeaders.12492/keymap.c0000644000521600052160000000013111711107662017073 xustar000000000000000030 mtime=1327796146.957827015 29 atime=1332083333.78210486 30 ctime=1332097353.139438923 udev-182/src/keymap/keymap.c0000664000521600052160000003373311711107662015511 0ustar00kaykay00000000000000/* * keymap - dump keymap of an evdev device or set a new keymap from a file * * Based on keyfuzz by Lennart Poettering * Adapted for udev-extras by Martin Pitt * * Copyright (C) 2006, Lennart Poettering * Copyright (C) 2009, Canonical Ltd. * * keymap is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * keymap is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with keymap; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include const struct key* lookup_key (const char *str, unsigned int len); #include "keys-from-name.h" #include "keys-to-name.h" #define MAX_SCANCODES 1024 static int evdev_open(const char *dev) { int fd; char fn[PATH_MAX]; if (strncmp(dev, "/dev", 4) != 0) { snprintf(fn, sizeof(fn), "/dev/%s", dev); dev = fn; } if ((fd = open(dev, O_RDWR)) < 0) { fprintf(stderr, "error open('%s'): %m\n", dev); return -1; } return fd; } static int evdev_get_keycode(int fd, int scancode, int e) { int codes[2]; codes[0] = scancode; if (ioctl(fd, EVIOCGKEYCODE, codes) < 0) { if (e && errno == EINVAL) { return -2; } else { fprintf(stderr, "EVIOCGKEYCODE: %m\n"); return -1; } } return codes[1]; } static int evdev_set_keycode(int fd, int scancode, int keycode) { int codes[2]; codes[0] = scancode; codes[1] = keycode; if (ioctl(fd, EVIOCSKEYCODE, codes) < 0) { fprintf(stderr, "EVIOCSKEYCODE: %m\n"); return -1; } return 0; } static int evdev_driver_version(int fd, char *v, size_t l) { int version; if (ioctl(fd, EVIOCGVERSION, &version)) { fprintf(stderr, "EVIOCGVERSION: %m\n"); return -1; } snprintf(v, l, "%i.%i.%i.", version >> 16, (version >> 8) & 0xff, version & 0xff); return 0; } static int evdev_device_name(int fd, char *n, size_t l) { if (ioctl(fd, EVIOCGNAME(l), n) < 0) { fprintf(stderr, "EVIOCGNAME: %m\n"); return -1; } return 0; } /* Return a lower-case string with KEY_ prefix removed */ static const char* format_keyname(const char* key) { static char result[101]; const char* s; int len; for (s = key+4, len = 0; *s && len < 100; ++len, ++s) result[len] = tolower(*s); result[len] = '\0'; return result; } static int dump_table(int fd) { char version[256], name[256]; int scancode, r = -1; if (evdev_driver_version(fd, version, sizeof(version)) < 0) goto fail; if (evdev_device_name(fd, name, sizeof(name)) < 0) goto fail; printf("### evdev %s, driver '%s'\n", version, name); r = 0; for (scancode = 0; scancode < MAX_SCANCODES; scancode++) { int keycode; if ((keycode = evdev_get_keycode(fd, scancode, 1)) < 0) { if (keycode == -2) continue; r = -1; break; } if (keycode < KEY_MAX && key_names[keycode]) printf("0x%03x %s\n", scancode, format_keyname(key_names[keycode])); else printf("0x%03x 0x%03x\n", scancode, keycode); } fail: return r; } static void set_key(int fd, const char* scancode_str, const char* keyname) { unsigned scancode; char *endptr; char t[105] = "KEY_UNKNOWN"; const struct key *k; scancode = (unsigned) strtol(scancode_str, &endptr, 0); if (*endptr != '\0') { fprintf(stderr, "ERROR: Invalid scancode\n"); exit(1); } snprintf(t, sizeof(t), "KEY_%s", keyname); if (!(k = lookup_key(t, strlen(t)))) { fprintf(stderr, "ERROR: Unknown key name '%s'\n", keyname); exit(1); } if (evdev_set_keycode(fd, scancode, k->id) < 0) fprintf(stderr, "setting scancode 0x%2X to key code %i failed\n", scancode, k->id); else printf("setting scancode 0x%2X to key code %i\n", scancode, k->id); } static int merge_table(int fd, FILE *f) { int r = 0; int line = 0; while (!feof(f)) { char s[256], *p; int scancode, new_keycode, old_keycode; if (!fgets(s, sizeof(s), f)) break; line++; p = s+strspn(s, "\t "); if (*p == '#' || *p == '\n') continue; if (sscanf(p, "%i %i", &scancode, &new_keycode) != 2) { char t[105] = "KEY_UNKNOWN"; const struct key *k; if (sscanf(p, "%i %100s", &scancode, t+4) != 2) { fprintf(stderr, "WARNING: Parse failure at line %i, ignoring.\n", line); r = -1; continue; } if (!(k = lookup_key(t, strlen(t)))) { fprintf(stderr, "WARNING: Unknown key '%s' at line %i, ignoring.\n", t, line); r = -1; continue; } new_keycode = k->id; } if ((old_keycode = evdev_get_keycode(fd, scancode, 0)) < 0) { r = -1; goto fail; } if (evdev_set_keycode(fd, scancode, new_keycode) < 0) { r = -1; goto fail; } if (new_keycode != old_keycode) fprintf(stderr, "Remapped scancode 0x%02x to 0x%02x (prior: 0x%02x)\n", scancode, new_keycode, old_keycode); } fail: fclose(f); return r; } /* read one event; return 1 if valid */ static int read_event(int fd, struct input_event* ev) { int ret; ret = read(fd, ev, sizeof(struct input_event)); if (ret < 0) { perror("read"); return 0; } if (ret != sizeof(struct input_event)) { fprintf(stderr, "did not get enough data for event struct, aborting\n"); return 0; } return 1; } static void print_key(uint32_t scancode, uint16_t keycode, int has_scan, int has_key) { const char *keyname; /* ignore key release events */ if (has_key == 1) return; if (has_key == 0 && has_scan != 0) { fprintf(stderr, "got scan code event 0x%02X without a key code event\n", scancode); return; } if (has_scan != 0) printf("scan code: 0x%02X ", scancode); else printf("(no scan code received) "); keyname = key_names[keycode]; if (keyname != NULL) printf("key code: %s\n", format_keyname(keyname)); else printf("key code: %03X\n", keycode); } static void interactive(int fd) { struct input_event ev; uint32_t last_scan = 0; uint16_t last_key = 0; int has_scan; /* boolean */ int has_key; /* 0: none, 1: release, 2: press */ /* grab input device */ ioctl(fd, EVIOCGRAB, 1); puts("Press ESC to finish, or Control-C if this device is not your primary keyboard"); has_scan = has_key = 0; while (read_event(fd, &ev)) { /* Drivers usually send the scan code first, then the key code, * then a SYN. Some drivers (like thinkpad_acpi) send the key * code first, and some drivers might not send SYN events, so * keep a robust state machine which can deal with any of those */ if (ev.type == EV_MSC && ev.code == MSC_SCAN) { if (has_scan) { fputs("driver did not send SYN event in between key events; previous event:\n", stderr); print_key(last_scan, last_key, has_scan, has_key); has_key = 0; } last_scan = ev.value; has_scan = 1; /*printf("--- got scan %u; has scan %i key %i\n", last_scan, has_scan, has_key); */ } else if (ev.type == EV_KEY) { if (has_key) { fputs("driver did not send SYN event in between key events; previous event:\n", stderr); print_key(last_scan, last_key, has_scan, has_key); has_scan = 0; } last_key = ev.code; has_key = 1 + ev.value; /*printf("--- got key %hu; has scan %i key %i\n", last_key, has_scan, has_key);*/ /* Stop on ESC */ if (ev.code == KEY_ESC && ev.value == 0) break; } else if (ev.type == EV_SYN) { /*printf("--- got SYN; has scan %i key %i\n", has_scan, has_key);*/ print_key(last_scan, last_key, has_scan, has_key); has_scan = has_key = 0; } } /* release input device */ ioctl(fd, EVIOCGRAB, 0); } static void help(int error) { const char* h = "Usage: keymap []\n" " keymap scancode keyname [...]\n" " keymap -i \n"; if (error) { fputs(h, stderr); exit(2); } else { fputs(h, stdout); exit(0); } } int main(int argc, char **argv) { static const struct option options[] = { { "help", no_argument, NULL, 'h' }, { "interactive", no_argument, NULL, 'i' }, {} }; int fd = -1; int opt_interactive = 0; int i; while (1) { int option; option = getopt_long(argc, argv, "hi", options, NULL); if (option == -1) break; switch (option) { case 'h': help(0); case 'i': opt_interactive = 1; break; default: return 1; } } if (argc < optind+1) help (1); if ((fd = evdev_open(argv[optind])) < 0) return 3; /* one argument (device): dump or interactive */ if (argc == optind+1) { if (opt_interactive) interactive(fd); else dump_table(fd); return 0; } /* two arguments (device, mapfile): set map file */ if (argc == optind+2) { const char *filearg = argv[optind+1]; if (strchr(filearg, '/')) { /* Keymap file argument is a path */ FILE *f = fopen(filearg, "r"); if (f) merge_table(fd, f); else perror(filearg); } else { /* Keymap file argument is a filename */ /* Open override file if present, otherwise default file */ char keymap_path[PATH_MAX]; snprintf(keymap_path, sizeof(keymap_path), "%s%s", SYSCONFDIR "/udev/keymaps/", filearg); FILE *f = fopen(keymap_path, "r"); if (f) { merge_table(fd, f); } else { snprintf(keymap_path, sizeof(keymap_path), "%s%s", PKGLIBEXECDIR "/keymaps/", filearg); f = fopen(keymap_path, "r"); if (f) merge_table(fd, f); else perror(keymap_path); } } return 0; } /* more arguments (device, scancode/keyname pairs): set keys directly */ if ((argc - optind - 1) % 2 == 0) { for (i = optind+1; i < argc; i += 2) set_key(fd, argv[i], argv[i+1]); return 0; } /* invalid number of arguments */ help(1); return 1; /* not reached */ } udev-182/src/keymap/PaxHeaders.12492/keymaps0000644000521600052160000000013211731430510017027 xustar000000000000000030 mtime=1332097352.448438907 30 atime=1332097354.350438951 30 ctime=1332097352.448438907 udev-182/src/keymap/keymaps/0000775000521600052160000000000011731430510015510 5ustar00kaykay00000000000000udev-182/src/keymap/keymaps/PaxHeaders.12492/logitech-wave0000644000521600052160000000013211711107662021574 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.931117612 30 ctime=1332097352.249438901 udev-182/src/keymap/keymaps/logitech-wave0000664000521600052160000000075711711107662020211 0ustar00kaykay000000000000000x9001C scale #expo 0x9001F zoomout #zoom out 0x90020 zoomin #zoom in 0x9003D prog1 #gadget 0x90005 camera #camera 0x90018 media #media center 0x90041 wordprocessor #fn+f1 (word) 0x90042 spreadsheet #fn+f2 (excel) 0x90043 calendar #fn+f3 (calendar) 0x90044 prog2 #fn+f4 (program a) 0x90045 prog3 #fn+f5 (program b) 0x90046 prog4 #fn+f6 (program c) 0x90048 messenger #fn+f8 (msn messenger) 0x9002D find #fn+f10 (search www) 0x9004B search #fn+f11 (search pc) 0x9004C ejectclosecd #fn+f12 (eject) udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-amilo_pro_v32050000644000521600052160000000013211711107662023345 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.805117609 30 ctime=1332097352.135438899 udev-182/src/keymap/keymaps/fujitsu-amilo_pro_v32050000664000521600052160000000012211711107662021744 0ustar00kaykay000000000000000xF4 f21 # FIXME: silent-mode decrease CPU/GPU clock 0xF7 switchvideomode # Fn+F3 udev-182/src/keymap/keymaps/PaxHeaders.12492/module-lenovo0000644000521600052160000000013211711107662021623 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.010117614 30 ctime=1332097352.320438903 udev-182/src/keymap/keymaps/module-lenovo0000664000521600052160000000066711711107662020240 0ustar00kaykay000000000000000x1 screenlock # Fn+F2 0x2 battery # Fn+F3 0x3 sleep # Fn+F4 0x4 wlan # Fn+F5 0x6 switchvideomode # Fn+F7 0x7 f21 # Fn+F8 touchpadtoggle 0x8 f24 # Fn+F9 undock 0xB suspend # Fn+F12 0xF brightnessup # Fn+Home 0x10 brightnessdown # Fn+End 0x11 kbdillumtoggle # Fn+PgUp - ThinkLight 0x13 zoom # Fn+Space 0x14 volumeup 0x15 volumedown 0x16 mute 0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor") 0x1A micmute # Microphone mute udev-182/src/keymap/keymaps/PaxHeaders.12492/module-sony-old0000644000521600052160000000013211711107662022065 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.031117614 30 ctime=1332097352.340438903 udev-182/src/keymap/keymaps/module-sony-old0000664000521600052160000000002711711107662020470 0ustar00kaykay000000000000000x06 battery 0x07 mute udev-182/src/keymap/keymaps/PaxHeaders.12492/lenovo-thinkpad-usb-keyboard-trackpoint0000644000521600052160000000013211711107662026701 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.891117611 30 ctime=1332097352.209438901 udev-182/src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint0000664000521600052160000000057511711107662025314 0ustar00kaykay000000000000000x90012 screenlock # Fn+F2 0x90013 battery # Fn+F3 0x90014 wlan # Fn+F5 0x90016 switchvideomode # Fn+F7 0x90017 f21 # Fn+F8 touchpadtoggle 0x90019 suspend # Fn+F12 0x9001A brightnessup # Fn+Home 0x9001B brightnessdown # Fn+End 0x9001D zoom # Fn+Space 0x90011 prog1 # Thinkvantage button 0x90015 camera # Fn+F6 headset/camera VoIP key ?? 0x90010 micmute # Microphone mute button udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-presario-21000000644000521600052160000000013111711107662024316 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.84711761 30 ctime=1332097352.174438899 udev-182/src/keymap/keymaps/hewlett-packard-presario-21000000664000521600052160000000004611711107662022723 0ustar00kaykay000000000000000xF0 help 0xF1 screenlock 0xF3 search udev-182/src/keymap/keymaps/PaxHeaders.12492/dell-latitude-xt20000644000521600052160000000013211711107662022302 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.780117608 30 ctime=1332097352.113438899 udev-182/src/keymap/keymaps/dell-latitude-xt20000664000521600052160000000016311711107662020706 0ustar00kaykay000000000000000x9B up # tablet rocker up 0x9E enter # tablet rocker press 0x9F back # tablet back 0xA3 down # tablet rocker down udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-2510p_2530p0000644000521600052160000000013111711107662023512 xustar000000000000000030 mtime=1327796146.957827015 29 atime=1332083868.83311761 30 ctime=1332097352.160438899 udev-182/src/keymap/keymaps/hewlett-packard-2510p_2530p0000664000521600052160000000005711711107662022121 0ustar00kaykay000000000000000xD8 f23 # touchpad off 0xD9 f22 # touchpad on udev-182/src/keymap/keymaps/PaxHeaders.12492/acer-aspire_57200000644000521600052160000000013211711107662021706 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.741117608 30 ctime=1332097352.080438897 udev-182/src/keymap/keymaps/acer-aspire_57200000664000521600052160000000024311711107662020311 0ustar00kaykay000000000000000x84 bluetooth # sent when bluetooth module missing, and key pressed 0x92 media # acer arcade 0xD4 bluetooth # bluetooth on 0xD9 bluetooth # bluetooth off udev-182/src/keymap/keymaps/PaxHeaders.12492/module-asus-w3j0000644000521600052160000000013211711107662021775 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.991117613 30 ctime=1332097352.300438903 udev-182/src/keymap/keymaps/module-asus-w3j0000664000521600052160000000025611711107662020404 0ustar00kaykay000000000000000x41 nextsong 0x45 playpause 0x43 stopcd 0x40 previoussong 0x4C ejectclosecd 0x32 mute 0x31 volumedown 0x30 volumeup 0x5D wlan 0x7E bluetooth 0x8A media # high keycode: "tv" udev-182/src/keymap/keymaps/PaxHeaders.12492/acer-aspire_69200000644000521600052160000000013211711107662021711 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.757117608 30 ctime=1332097352.091438897 udev-182/src/keymap/keymaps/acer-aspire_69200000664000521600052160000000012611711107662020314 0ustar00kaykay000000000000000xD9 bluetooth # (toggle) on-to-off 0x92 media 0x9E back 0x83 rewind 0x89 fastforward udev-182/src/keymap/keymaps/PaxHeaders.12492/lenovo-30000000644000521600052160000000013211711107662020720 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.871117611 30 ctime=1332097352.199438901 udev-182/src/keymap/keymaps/lenovo-30000000664000521600052160000000022211711107662017320 0ustar00kaykay000000000000000x8B switchvideomode # Fn+F7 video 0x96 wlan # Fn+F5 wireless 0x97 sleep # Fn+F4 suspend 0x98 suspend # Fn+F12 hibernate 0xB4 prog1 # Lenovo Care udev-182/src/keymap/keymaps/PaxHeaders.12492/acer0000644000521600052160000000013211711107662017750 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.737117607 30 ctime=1332097352.076438897 udev-182/src/keymap/keymaps/acer0000664000521600052160000000121111711107662016347 0ustar00kaykay000000000000000xA5 help # Fn+F1 0xA6 setup # Fn+F2 Acer eSettings 0xA7 battery # Fn+F3 Power Management 0xA9 switchvideomode # Fn+F5 0xB3 euro 0xB4 dollar 0xCE brightnessup # Fn+Right 0xD4 bluetooth # (toggle) off-to-on 0xD5 wlan # (toggle) on-to-off 0xD6 wlan # (toggle) off-to-on 0xD7 bluetooth # (toggle) on-to-off 0xD8 bluetooth # (toggle) off-to-on 0xD9 brightnessup # Fn+Right 0xEE brightnessup # Fn+Right 0xEF brightnessdown # Fn+Left 0xF1 f22 # Fn+F7 Touchpad toggle (off-to-on) 0xF2 f23 # Fn+F7 Touchpad toggle (on-to-off) 0xF3 prog2 # "P2" programmable button 0xF4 prog1 # "P1" programmable button 0xF5 presentation 0xF8 fn 0xF9 f23 # Launch NTI shadow udev-182/src/keymap/keymaps/PaxHeaders.12492/logitech-wave-cordless0000644000521600052160000000013211711107662023410 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.939117612 30 ctime=1332097352.259438901 udev-182/src/keymap/keymaps/logitech-wave-cordless0000664000521600052160000000047411711107662022021 0ustar00kaykay000000000000000xD4 zoomin 0xCC zoomout 0xC0183 media 0xC1005 camera 0xC101F zoomout 0xC1020 zoomin 0xC1041 wordprocessor 0xC1042 spreadsheet 0xC1043 calendar 0xC1044 prog2 #fn+f4 (program a) 0xC1045 prog3 #fn+f5 (program b) 0xC1046 prog4 #fn+f6 (program c) 0xC1048 messenger 0xC104A find #fn+f10 (search www) 0xC104C ejectclosecd udev-182/src/keymap/keymaps/PaxHeaders.12492/oqo-model20000644000521600052160000000013211711107662021014 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.071117615 30 ctime=1332097352.383438905 udev-182/src/keymap/keymaps/oqo-model20000664000521600052160000000010711711107662017416 0ustar00kaykay000000000000000x8E wlan 0xF0 switchvideomode 0xF1 mute 0xF2 volumedown 0xF3 volumeup udev-182/src/keymap/keymaps/PaxHeaders.12492/lenovo-ideapad0000644000521600052160000000013211712224343021722 xustar000000000000000030 mtime=1328097507.386195891 30 atime=1332083868.881117611 30 ctime=1332097352.204438901 udev-182/src/keymap/keymaps/lenovo-ideapad0000664000521600052160000000061711712224343020332 0ustar00kaykay00000000000000# Key codes observed on S10-3, assumed valid on other IdeaPad models 0x81 rfkill # does nothing in BIOS 0x83 display_off # BIOS toggles screen state 0xB9 brightnessup # does nothing in BIOS 0xBA brightnessdown # does nothing in BIOS 0xF1 camera # BIOS toggles camera power 0xf2 f21 # touchpad toggle (key alternately emits f2 and f3) 0xf3 f21 udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-esprimo_mobile_v60000644000521600052160000000013211711107662024145 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.818117609 30 ctime=1332097352.147438899 udev-182/src/keymap/keymaps/fujitsu-esprimo_mobile_v60000664000521600052160000000004611711107662022551 0ustar00kaykay000000000000000xCE brightnessup 0xEF brightnessdown udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-tx20000644000521600052160000000013111711107662022627 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.85611761 30 ctime=1332097352.183438899 udev-182/src/keymap/keymaps/hewlett-packard-tx20000664000521600052160000000015011711107662021230 0ustar00kaykay000000000000000xC2 media 0xD8 f23 # Toggle touchpad button on tx2 (OFF) 0xD9 f22 # Toggle touchpad button on tx2 (ON) udev-182/src/keymap/keymaps/PaxHeaders.12492/module-sony-vgn0000644000521600052160000000013211711107662022101 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.046117615 30 ctime=1332097352.354438904 udev-182/src/keymap/keymaps/module-sony-vgn0000664000521600052160000000023011711107662020500 0ustar00kaykay000000000000000x00 brightnessdown # Fn+F5 0x10 brightnessup # Fn+F6 0x11 switchvideomode # Fn+F7 0x12 zoomout 0x14 zoomin 0x15 suspend # Fn+F12 0x17 prog1 0x20 media udev-182/src/keymap/keymaps/PaxHeaders.12492/lenovo-thinkpad_x6_tablet0000644000521600052160000000013211711107662024110 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.899117611 30 ctime=1332097352.216438901 udev-182/src/keymap/keymaps/lenovo-thinkpad_x6_tablet0000664000521600052160000000030311711107662022510 0ustar00kaykay000000000000000x6C f21 # rotate 0x68 screenlock # screenlock 0x6B esc # escape 0x6D right # right on d-pad 0x6E left # left on d-pad 0x71 up # up on d-pad 0x6F down # down on d-pad 0x69 enter # enter on d-pad udev-182/src/keymap/keymaps/PaxHeaders.12492/samsung-sx20s0000644000521600052160000000013211711107662021470 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.101117616 30 ctime=1332097352.410438905 udev-182/src/keymap/keymaps/samsung-sx20s0000664000521600052160000000010311711107662020066 0ustar00kaykay000000000000000x74 mute 0x75 mute 0x77 f22 # Touchpad on 0x79 f23 # Touchpad off udev-182/src/keymap/keymaps/PaxHeaders.12492/inventec-symphony_6.0_7.00000644000521600052160000000013111711107662023503 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.86511761 30 ctime=1332097352.193438901 udev-182/src/keymap/keymaps/inventec-symphony_6.0_7.00000664000521600052160000000002611711107662022106 0ustar00kaykay000000000000000xF3 prog2 0xF4 prog1 udev-182/src/keymap/keymaps/PaxHeaders.12492/acer-aspire_89300000644000521600052160000000013211711107662021714 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.746117608 30 ctime=1332097352.084438897 udev-182/src/keymap/keymaps/acer-aspire_89300000664000521600052160000000023511711107662020320 0ustar00kaykay000000000000000xCA prog3 # key 'HOLD' on cine dash media console 0x83 rewind 0x89 fastforward 0x92 media # key 'ARCADE' on cine dash media console 0x9E back udev-182/src/keymap/keymaps/PaxHeaders.12492/ibm-thinkpad-usb-keyboard-trackpoint0000644000521600052160000000013111711107662026145 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.86111761 30 ctime=1332097352.188438901 udev-182/src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint0000664000521600052160000000020111711107662024543 0ustar00kaykay000000000000000x900f0 screenlock 0x900f1 wlan 0x900f2 switchvideomode 0x900f3 suspend 0x900f4 brightnessup 0x900f5 brightnessdown 0x900f8 zoom udev-182/src/keymap/keymaps/PaxHeaders.12492/onkyo0000644000521600052160000000013211711107662020175 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.062117615 30 ctime=1332097352.379438907 udev-182/src/keymap/keymaps/onkyo0000664000521600052160000000047411711107662016606 0ustar00kaykay000000000000000xA0 mute # Fn+D 0xAE volumedown # Fn+F 0xB0 volumeup # Fn+G 0xDF sleep # Fn+W 0xE0 bluetooth # Fn+H 0xE2 cyclewindows # Fn+Esc 0xEE battery # Fn+Q 0xF0 media # Fn+R 0xF5 switchvideomode # Fn+E 0xF6 camera # Fn+T 0xF7 f21 # Fn+Y (touchpad toggle) 0xF8 brightnessup # Fn+S 0xF9 brightnessdown # Fn+A 0xFB wlan # Fn+J udev-182/src/keymap/keymaps/PaxHeaders.12492/dell0000644000521600052160000000013211711107662017756 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.776117608 30 ctime=1332097352.109438899 udev-182/src/keymap/keymaps/dell0000664000521600052160000000222111711107662016357 0ustar00kaykay000000000000000x81 playpause # Play/Pause 0x82 stopcd # Stop 0x83 previoussong # Previous song 0x84 nextsong # Next song 0x85 brightnessdown # Fn+Down arrow Brightness Down 0x86 brightnessup # Fn+Up arrow Brightness Up 0x87 battery # Fn+F3 battery icon 0x88 unknown # Fn+F2 Turn On/Off Wireless - handled in hardware 0x89 ejectclosecd # Fn+F10 Eject CD 0x8A suspend # Fn+F1 hibernate 0x8B switchvideomode # Fn+F8 CRT/LCD (high keycode: "displaytoggle") 0x8C f23 # Fn+Right arrow Auto Brightness 0x8F switchvideomode # Fn+F7 aspect ratio 0x90 previoussong # Front panel previous song 0x91 prog1 # Wifi Catcher (DELL Specific) 0x92 media # MediaDirect button (house icon) 0x93 f23 # FIXME Fn+Left arrow Auto Brightness 0x95 camera # Shutter button Takes a picture if optional camera available 0x97 email # Tablet email button 0x98 f21 # FIXME: Tablet screen rotatation 0x99 nextsong # Front panel next song 0x9A setup # Tablet tools button 0x9B switchvideomode # Display Toggle button 0x9E f21 #touchpad toggle 0xA2 playpause # Front panel play/pause 0xA4 stopcd # Front panel stop 0xED media # MediaDirect button 0xD8 screenlock # FIXME: Tablet lock button 0xD9 f21 # touchpad toggle udev-182/src/keymap/keymaps/PaxHeaders.12492/olpc-xo0000644000521600052160000000013211711107662020417 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.054117615 30 ctime=1332097352.367438905 udev-182/src/keymap/keymaps/olpc-xo0000664000521600052160000000230711711107662017025 0ustar00kaykay000000000000000x59 fn 0x81 fn_esc 0xF9 camera 0xF8 sound # Fn-CAMERA = Mic # Function key mappings, as per # http://dev.laptop.org/ticket/10213#comment:20 # # Unmodified F1-F8 produce F1-F8, so no remap necessary. # Unmodified F9-F12 control brightness and volume. 0x43 brightnessdown 0x44 brightnessup 0x57 volumedown 0x58 volumeup # fn-modified fkeys all produce the unmodified version of the key. 0xBB f1 0xBC f2 0xBD f3 0xBE f4 0xBF f5 0xC0 f6 0xC1 f7 0xC2 f8 0xC3 f9 0xC4 f10 0xD7 f11 0xD8 f12 # Using F13-F21 for the .5 F keys right now. 0xF7 f13 0xF6 f14 0xF5 f15 0xF4 f16 0xF3 f17 0xF2 f18 0xF1 f19 0xF0 f20 0xEF f21 0xEE chat 0xE4 chat # Just mapping Fn-Chat to Chat for now 0xDD menu # Frame 0xDA prog1 # Fn-Frame # The FN of some keys is other keys 0xD3 delete 0xD2 insert 0xC9 pageup 0xD1 pagedown 0xC7 home 0xCF end # Language key - don't ask what they are doing as KEY_HP 0x73 hp 0x7E hp 0xDB leftmeta # left grab 0xDC rightmeta # right grab 0x85 rightmeta # Right grab releases on a different scancode 0xD6 kbdillumtoggle # Fn-space 0x69 switchvideomode # Brightness key # Game keys 0x65 kp8 # up 0x66 kp2 # down 0x67 kp4 # left 0x68 kp6 # right 0xE5 kp9 # pgup 0xE6 kp3 # pgdn 0xE7 kp7 # home 0xE8 kp1 # end udev-182/src/keymap/keymaps/PaxHeaders.12492/samsung-sq1us0000644000521600052160000000013211711107662021565 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.089117616 30 ctime=1332097352.400438905 udev-182/src/keymap/keymaps/samsung-sq1us0000664000521600052160000000007411711107662020172 0ustar00kaykay000000000000000xD4 menu 0xD8 f1 0xD9 f10 0xD6 f3 0xD7 f9 0xE4 f5 0xEE f11 udev-182/src/keymap/keymaps/PaxHeaders.12492/medionnb-a5550000644000521600052160000000013211711107662021306 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.977117613 30 ctime=1332097352.288438903 udev-182/src/keymap/keymaps/medionnb-a5550000664000521600052160000000014711711107662017714 0ustar00kaykay000000000000000x63 www # N button 0x66 prog1 # link 1 button 0x67 email # envelope button 0x69 prog2 # link 2 button udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-esprimo_mobile_v50000644000521600052160000000013211711107662024144 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.814117609 30 ctime=1332097352.143438899 udev-182/src/keymap/keymaps/fujitsu-esprimo_mobile_v50000664000521600052160000000010611711107662022545 0ustar00kaykay000000000000000xA9 switchvideomode 0xD9 brightnessdown 0xDF sleep 0xEF brightnessup udev-182/src/keymap/keymaps/PaxHeaders.12492/zepto-znote0000644000521600052160000000013211711107662021334 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.149117617 30 ctime=1332097352.449438907 udev-182/src/keymap/keymaps/zepto-znote0000664000521600052160000000075711711107662017751 0ustar00kaykay000000000000000x93 switchvideomode # Fn+F3 Toggle Video Output 0x95 brightnessdown # Fn+F4 Brightness Down 0x91 brightnessup # Fn+F5 Brightness Up 0xA5 f23 # Fn+F6 Disable Touchpad 0xA6 f22 # Fn+F6 Enable Touchpad 0xA7 bluetooth # Fn+F10 Enable Bluetooth 0XA9 bluetooth # Fn+F10 Disable Bluetooth 0xF1 wlan # RF Switch Off 0xF2 wlan # RF Switch On 0xF4 prog1 # P1 Button 0xF3 prog2 # P2 Button udev-182/src/keymap/keymaps/PaxHeaders.12492/compaq-e_evo0000644000521600052160000000013211711107662021411 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.771117608 30 ctime=1332097352.104438899 udev-182/src/keymap/keymaps/compaq-e_evo0000664000521600052160000000006611711107662020017 0ustar00kaykay000000000000000xA3 www # I key 0x9A search 0x9E email 0x9F homepage udev-182/src/keymap/keymaps/PaxHeaders.12492/acer-aspire_5920g0000644000521600052160000000013211711107662022057 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.752117608 30 ctime=1332097352.088438897 udev-182/src/keymap/keymaps/acer-aspire_5920g0000664000521600052160000000011611711107662020461 0ustar00kaykay000000000000000x8A media 0x92 media 0xA6 setup 0xB2 www 0xD9 bluetooth # (toggle) on-to-off udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-tablet0000644000521600052160000000013111711107662023365 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.85211761 30 ctime=1332097352.178438899 udev-182/src/keymap/keymaps/hewlett-packard-tablet0000664000521600052160000000012211711107662021765 0ustar00kaykay000000000000000x82 prog2 # Funny Key 0x83 prog1 # Q 0x84 tab 0x85 esc 0x86 pageup 0x87 pagedown udev-182/src/keymap/keymaps/PaxHeaders.12492/toshiba-satellite_a1100000644000521600052160000000013211711107662023175 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.123117617 30 ctime=1332097352.429438905 udev-182/src/keymap/keymaps/toshiba-satellite_a1100000664000521600052160000000023611711107662021602 0ustar00kaykay000000000000000x92 stop 0x93 www 0x94 media 0x9E f22 # Touchpad on 0x9F f23 # Touchpad off 0xB9 nextsong 0xD9 brightnessup 0xEE screenlock 0xF4 previoussong 0xF7 playpause udev-182/src/keymap/keymaps/PaxHeaders.12492/toshiba-satellite_a1000000644000521600052160000000013211711107662023174 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.110117616 30 ctime=1332097352.419438905 udev-182/src/keymap/keymaps/toshiba-satellite_a1000000664000521600052160000000002511711107662021575 0ustar00kaykay000000000000000xA4 stopcd 0xB2 www udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-amilo_pro_edition_v35050000644000521600052160000000013211711107662025063 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.800117609 30 ctime=1332097352.131438899 udev-182/src/keymap/keymaps/fujitsu-amilo_pro_edition_v35050000664000521600052160000000014511711107662023467 0ustar00kaykay000000000000000xA5 help # Fn-F1 0xA9 switchvideomode # Fn-F3 0xD9 brightnessdown # Fn-F8 0xE0 brightnessup # Fn-F9 udev-182/src/keymap/keymaps/PaxHeaders.12492/medion-fid20600000644000521600052160000000013211711107662021361 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.968117613 30 ctime=1332097352.284438903 udev-182/src/keymap/keymaps/medion-fid20600000664000521600052160000000007411711107662017766 0ustar00kaykay000000000000000x6B channeldown # Thottle Down 0x6D channelup # Thottle Up udev-182/src/keymap/keymaps/PaxHeaders.12492/lg-x1100000644000521600052160000000013211711107662020127 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.919117612 30 ctime=1332097352.238438901 udev-182/src/keymap/keymaps/lg-x1100000664000521600052160000000050411711107662016532 0ustar00kaykay000000000000000xA0 mute # Fn-F9 0xAE volumedown # Fn-Left 0xAF search # Fn-F3 0xB0 volumeup # Fn-Right 0xB1 battery # Fn-F10 Info 0xB3 suspend # Fn-F12 0xDF sleep # Fn-F4 # 0xE2 bluetooth # satellite dish2 0xE4 f21 # Fn-F5 Touchpad disable 0xF6 wlan # Fn-F6 0xF7 reserved # brightnessdown # Fn-Down 0xF8 reserved # brightnessup # Fn-Up udev-182/src/keymap/keymaps/PaxHeaders.12492/asus0000644000521600052160000000013211711107662020011 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.767117608 30 ctime=1332097352.100438897 udev-182/src/keymap/keymaps/asus0000664000521600052160000000005011711107662016410 0ustar00kaykay000000000000000xED volumeup 0xEE volumedown 0xEF mute udev-182/src/keymap/keymaps/PaxHeaders.12492/micro-star0000644000521600052160000000013211711107662021116 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.982117613 30 ctime=1332097352.292438902 udev-182/src/keymap/keymaps/micro-star0000664000521600052160000000051311711107662017521 0ustar00kaykay000000000000000xA0 mute # Fn-F9 0xAE volumedown # Fn-F7 0xB0 volumeup # Fn-F8 0xB2 www # e button 0xDF sleep # Fn-F12 0xE2 bluetooth # satellite dish2 0xE4 f21 # Fn-F3 Touchpad disable 0xEC email # envelope button 0xEE camera # Fn-F6 camera disable 0xF6 wlan # satellite dish1 0xF7 brightnessdown # Fn-F4 0xF8 brightnessup # Fn-F5 0xF9 search udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard0000644000521600052160000000013111711107662022114 xustar000000000000000030 mtime=1327796146.957827015 29 atime=1332083868.82811761 30 ctime=1332097352.156438899 udev-182/src/keymap/keymaps/hewlett-packard0000664000521600052160000000040611711107662020521 0ustar00kaykay000000000000000x81 fn_esc 0x89 battery # FnF8 0x8A screenlock # FnF6 0x8B camera 0x8C media # music 0x8E dvd 0xB1 help 0xB3 f23 # FIXME: Auto brightness 0xD7 wlan 0x92 brightnessdown # FnF7 (FnF9 on 6730b) 0x97 brightnessup # FnF8 (FnF10 on 6730b) 0xEE switchvideomode # FnF4 udev-182/src/keymap/keymaps/PaxHeaders.12492/everex-xt50000000644000521600052160000000013211711107662021272 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.785117609 30 ctime=1332097352.118438899 udev-182/src/keymap/keymaps/everex-xt50000000664000521600052160000000021311711107662017672 0ustar00kaykay000000000000000x5C media 0x65 f21 # Fn+F5 Touchpad toggle 0x67 prog3 # Fan Speed Control button 0x6F brightnessup 0x7F brightnessdown 0xB2 www 0xEC mail udev-182/src/keymap/keymaps/PaxHeaders.12492/maxdata-pro_70000000644000521600052160000000013211711107662021721 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.962117613 30 ctime=1332097352.280438903 udev-182/src/keymap/keymaps/maxdata-pro_70000000664000521600052160000000021311711107662020321 0ustar00kaykay000000000000000x97 prog2 0x9F prog1 0xA0 mute # Fn-F5 0x82 www 0xEC email 0xAE volumedown # Fn-Down 0xB0 volumeup # Fn-Up 0xDF suspend # Fn+F2 0xF5 help udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-amilo_li_27320000644000521600052160000000013211714055743022774 xustar000000000000000030 mtime=1328569315.154640792 30 atime=1332083868.790117609 30 ctime=1332097352.122438897 udev-182/src/keymap/keymaps/fujitsu-amilo_li_27320000664000521600052160000000023011714055743021373 0ustar00kaykay000000000000000xD9 brightnessdown # Fn+F8 brightness down 0xEF brightnessup # Fn+F9 brightness up 0xA9 switchvideomode # Fn+F10 Cycle between available video outputs udev-182/src/keymap/keymaps/PaxHeaders.12492/acer-travelmate_c3000000644000521600052160000000013211711107662022637 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.762117608 30 ctime=1332097352.096438897 udev-182/src/keymap/keymaps/acer-travelmate_c3000000664000521600052160000000015611711107662021245 0ustar00kaykay000000000000000x67 f24 # FIXME: rotate screen 0x68 up 0x69 down 0x6B fn 0x6C screenlock # FIXME: lock tablet device/buttons udev-182/src/keymap/keymaps/PaxHeaders.12492/samsung-other0000644000521600052160000000013211711107662021632 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.078117616 30 ctime=1332097352.388438905 udev-182/src/keymap/keymaps/samsung-other0000664000521600052160000000073411711107662020242 0ustar00kaykay000000000000000x74 prog1 # User key 0x75 www 0x78 mail 0x82 switchvideomode # Fn+F4 CRT/LCD (high keycode: "displaytoggle") 0x83 battery # Fn+F2 0x84 prog1 # Fn+F5 backlight on/off 0x86 wlan # Fn+F9 0x88 brightnessup # Fn-Up 0x89 brightnessdown # Fn-Down 0xB1 prog2 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice) 0xB3 prog3 # Fn+F8 switch power mode (battery/dynamic/performance) 0xB4 wlan # Fn+F9 (X60P) 0xF7 f22 # Fn+F10 Touchpad on 0xF9 f23 # Fn+F10 Touchpad off udev-182/src/keymap/keymaps/PaxHeaders.12492/module-sony0000644000521600052160000000013211711107662021311 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.019117614 30 ctime=1332097352.331438903 udev-182/src/keymap/keymaps/module-sony0000664000521600052160000000027411711107662017720 0ustar00kaykay000000000000000x06 mute # Fn+F2 0x07 volumedown # Fn+F3 0x08 volumeup # Fn+F4 0x09 brightnessdown # Fn+F5 0x0A brightnessup # Fn+F6 0x0B switchvideomode # Fn+F7 0x0E zoom # Fn+F10 0x10 suspend # Fn+F12 udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-amilo_si_15200000644000521600052160000000013211711107662022770 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.809117609 30 ctime=1332097352.139438899 udev-182/src/keymap/keymaps/fujitsu-amilo_si_15200000664000521600052160000000012411711107662021371 0ustar00kaykay000000000000000xE1 wlan 0xF3 wlan 0xEE brightnessdown 0xE0 brightnessup 0xE2 bluetooth 0xF7 video udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-pavilion0000644000521600052160000000013111711107662023733 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.84211761 30 ctime=1332097352.170438899 udev-182/src/keymap/keymaps/hewlett-packard-pavilion0000664000521600052160000000011611711107662022336 0ustar00kaykay000000000000000x88 media # FIXME: quick play 0xD8 f23 # touchpad off 0xD9 f22 # touchpad on udev-182/src/keymap/keymaps/PaxHeaders.12492/logitech-wave-pro-cordless0000644000521600052160000000013211711107662024206 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.951117613 30 ctime=1332097352.272438903 udev-182/src/keymap/keymaps/logitech-wave-pro-cordless0000664000521600052160000000030611711107662022611 0ustar00kaykay000000000000000xC01B6 camera 0xC0183 media 0xC0184 wordprocessor 0xC0186 spreadsheet 0xC018E calendar 0xC0223 homepage 0xC01BC messenger 0xC018A mail 0xC0221 search 0xC00B8 ejectcd 0xC022D zoomin 0xC022E zoomout udev-182/src/keymap/keymaps/PaxHeaders.12492/module-ibm0000644000521600052160000000013211711107662021070 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.998117614 30 ctime=1332097352.310438903 udev-182/src/keymap/keymaps/module-ibm0000664000521600052160000000064211711107662017476 0ustar00kaykay000000000000000x01 battery # Fn+F2 0x02 screenlock # Fn+F3 0x03 sleep # Fn+F4 0x04 wlan # Fn+F5 0x06 switchvideomode # Fn+F7 0x07 zoom # Fn+F8 screen expand 0x08 f24 # Fn+F9 undock 0x0B suspend # Fn+F12 0x0F brightnessup # Fn+Home 0x10 brightnessdown # Fn+End 0x11 kbdillumtoggle # Fn+PgUp - ThinkLight 0x13 zoom # Fn+Space 0x14 volumeup 0x15 volumedown 0x16 mute 0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor") udev-182/src/keymap/keymaps/PaxHeaders.12492/fujitsu-amilo_pa_25480000644000521600052160000000013211711107662022770 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.795117609 30 ctime=1332097352.127438901 udev-182/src/keymap/keymaps/fujitsu-amilo_pa_25480000664000521600052160000000005111711107662021370 0ustar00kaykay000000000000000xE0 volumedown 0xE1 volumeup 0xE5 prog1 udev-182/src/keymap/keymaps/PaxHeaders.12492/hewlett-packard-compaq_elitebook0000644000521600052160000000013111711107662025427 xustar000000000000000030 mtime=1327796146.958827013 29 atime=1332083868.83811761 30 ctime=1332097352.165438899 udev-182/src/keymap/keymaps/hewlett-packard-compaq_elitebook0000664000521600052160000000007311711107662024034 0ustar00kaykay000000000000000x88 presentation 0xD9 help # I key (high keycode: "info") udev-182/src/keymap/keymaps/PaxHeaders.12492/toshiba-satellite_m30x0000644000521600052160000000013211711107662023322 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083869.140117617 30 ctime=1332097352.439438907 udev-182/src/keymap/keymaps/toshiba-satellite_m30x0000664000521600052160000000016611711107662021731 0ustar00kaykay000000000000000xef brightnessdown 0xd9 brightnessup 0xee screenlock 0x93 media 0x9e f22 #touchpad_enable 0x9f f23 #touchpad_disable udev-182/src/keymap/keymaps/PaxHeaders.12492/genius-slimstar-3200000644000521600052160000000013211711107662022466 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.823117609 30 ctime=1332097352.151438899 udev-182/src/keymap/keymaps/genius-slimstar-3200000664000521600052160000000132011711107662021066 0ustar00kaykay00000000000000# Genius SlimStar 320 # # Only buttons which are not properly mapped yet are configured below # "Scroll wheel", a circular up/down/left/right button. Aimed for scolling, # but since there are no scrollleft/scrollright, let's map to back/forward. 0x900f0 scrollup 0x900f1 scrolldown 0x900f3 back 0x900f2 forward # Multimedia buttons, left side (from left to right) # [W] 0x900f5 wordprocessor # [Ex] 0x900f6 spreadsheet # [P] 0x900f4 presentation # Other five (calculator, playpause, stop, mute and eject) are OK # Right side, from left to right # [e] 0xc0223 www # "man" 0x900f7 chat # "Y" 0x900fb prog1 # [X] 0x900f8 close # "picture" 0x900f9 graphicseditor # "two windows" 0x900fd scale # "lock" 0x900fc screenlock udev-182/src/keymap/keymaps/PaxHeaders.12492/lenovo-thinkpad_x200_tablet0000644000521600052160000000013211711107662024244 xustar000000000000000030 mtime=1327796146.958827013 30 atime=1332083868.911117612 30 ctime=1332097352.226438901 udev-182/src/keymap/keymaps/lenovo-thinkpad_x200_tablet0000664000521600052160000000021211711107662022643 0ustar00kaykay000000000000000x5D menu 0x63 fn 0x66 screenlock 0x67 cyclewindows # bezel circular arrow 0x68 setup # bezel setup / menu 0x6c direction # rotate screen udev-182/src/keymap/PaxHeaders.12492/force-release-maps0000644000521600052160000000013211731430510021030 xustar000000000000000030 mtime=1332097352.484438907 30 atime=1332097354.351438951 30 ctime=1332097352.484438907 udev-182/src/keymap/force-release-maps/0000775000521600052160000000000011731430510017511 5ustar00kaykay00000000000000udev-182/src/keymap/force-release-maps/PaxHeaders.12492/hp-other0000644000521600052160000000013211711107662022565 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083869.179117618 30 ctime=1332097352.469438907 udev-182/src/keymap/force-release-maps/hp-other0000664000521600052160000000013611711107662021171 0ustar00kaykay00000000000000# list of scancodes (hex or decimal), optional comment 0xd8 # Touchpad off 0xd9 # Touchpad on udev-182/src/keymap/force-release-maps/PaxHeaders.12492/common-volume-keys0000644000521600052160000000013211711107662024605 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083869.211117619 30 ctime=1332097352.484438907 udev-182/src/keymap/force-release-maps/common-volume-keys0000664000521600052160000000005511711107662023211 0ustar00kaykay000000000000000xa0 #mute 0xae #volume down 0xb0 #volume up udev-182/src/keymap/force-release-maps/PaxHeaders.12492/dell-touchpad0000644000521600052160000000013211711107662023564 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083869.164117618 30 ctime=1332097352.459438906 udev-182/src/keymap/force-release-maps/dell-touchpad0000664000521600052160000000000511711107662022163 0ustar00kaykay000000000000000x9E udev-182/src/keymap/force-release-maps/PaxHeaders.12492/samsung-other0000644000521600052160000000013211711107662023633 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083869.197117618 30 ctime=1332097352.479438907 udev-182/src/keymap/force-release-maps/samsung-other0000664000521600052160000000047511711107662022245 0ustar00kaykay00000000000000# list of scancodes (hex or decimal), optional comment 0x82 # Fn+F4 CRT/LCD 0x83 # Fn+F2 battery 0x84 # Fn+F5 backlight on/off 0x86 # Fn+F9 WLAN 0x88 # Fn-Up brightness up 0x89 # Fn-Down brightness down 0xB3 # Fn+F8 switch power mode (battery/dynamic/performance) 0xF7 # Fn+F10 Touchpad on 0xF9 # Fn+F10 Touchpad off udev-182/src/keymap/PaxHeaders.12492/check-keymaps.sh0000644000521600052160000000013211725701340020520 xustar000000000000000030 mtime=1331135200.504744846 30 atime=1332083870.471117649 30 ctime=1332097353.640438935 udev-182/src/keymap/check-keymaps.sh0000775000521600052160000000232011725701340017124 0ustar00kaykay00000000000000#!/bin/bash # check that all key names in keymaps/* are known in # and that all key maps listed in the rules are valid and present in # Makefile.am SRCDIR=${1:-.} KEYLIST=${2:-src/keymap/keys.txt} KEYMAPS_DIR=$SRCDIR/src/keymap/keymaps RULES=$SRCDIR/src/keymap/95-keymap.rules [ -e "$KEYLIST" ] || { echo "need $KEYLIST please build first" >&2 exit 1 } missing=$(join -v 2 <(awk '{print tolower(substr($1,5))}' $KEYLIST | sort -u) \ <(grep -hv '^#' ${KEYMAPS_DIR}/*| awk '{print $2}' | sort -u)) [ -z "$missing" ] || { echo "ERROR: unknown key names in src/keymap/keymaps/*:" >&2 echo "$missing" >&2 exit 1 } # check that all maps referred to in $RULES exist maps=$(sed -rn '/keymap \$name/ { s/^.*\$name ([^"[:space:]]+).*$/\1/; p }' $RULES) for m in $maps; do # ignore inline mappings [ "$m" = "${m#0x}" ] || continue [ -e ${KEYMAPS_DIR}/$m ] || { echo "ERROR: unknown map name in $RULES: $m" >&2 exit 1 } grep -q "src/keymap/keymaps/$m\>" $SRCDIR/Makefile.am || { echo "ERROR: map file $m is not added to Makefile.am" >&2 exit 1 } done udev-182/src/keymap/PaxHeaders.12492/95-keymap.rules0000644000521600052160000000013211714055743020244 xustar000000000000000030 mtime=1328569315.154640792 30 atime=1332083869.389117623 30 ctime=1332097352.639438911 udev-182/src/keymap/95-keymap.rules0000664000521600052160000002657311714055743016665 0ustar00kaykay00000000000000# Set model specific hotkey keycodes. # # Key map overrides can be specified by either giving scancode/keyname pairs # directly as keymap arguments (if there are just one or two to change), or as # a file name (in /usr/lib/udev/keymaps), which has to contain scancode/keyname # pairs. ACTION=="remove", GOTO="keyboard_end" KERNEL!="event*", GOTO="keyboard_end" ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end" SUBSYSTEMS=="bluetooth", GOTO="keyboard_end" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", GOTO="keyboard_usbcheck" GOTO="keyboard_modulecheck" # # The following are external USB keyboards # LABEL="keyboard_usbcheck" ENV{ID_VENDOR}=="Genius", ENV{ID_MODEL_ID}=="0708", ENV{ID_USB_INTERFACE_NUM}=="01", RUN+="keymap $name genius-slimstar-320" ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Multimedia Keyboard", RUN+="keymap $name logitech-wave" ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-cordless" # Logitech Cordless Wave Pro looks slightly weird; some hotkeys are coming through the mouse interface ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52[9b]", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-pro-cordless" ENV{ID_VENDOR}=="Lite-On_Technology_Corp*", ATTRS{name}=="Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint", RUN+="keymap $name lenovo-thinkpad-usb-keyboard-trackpoint" ENV{ID_VENDOR_ID}=="04b3", ENV{ID_MODEL_ID}=="301[89]", RUN+="keymap $name ibm-thinkpad-usb-keyboard-trackpoint" ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d zoomin 0xc022e zoomout" GOTO="keyboard_end" # # The following are exposed as separate input devices with low key codes, thus # we need to check their input device product name # LABEL="keyboard_modulecheck" ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}" ENV{DMI_VENDOR}=="", GOTO="keyboard_end" ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-lenovo" ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="Lenovo ThinkPad SL Series extra buttons", RUN+="keymap $name 0x0E bluetooth" ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Asus Extra Buttons", ATTR{[dmi/id]product_name}=="W3J", RUN+="keymap $name module-asus-w3j" ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Eee PC WMI hotkeys|Asus Laptop Support|Asus*WMI*", RUN+="keymap $name 0x6B f21" ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Eee PC Hotkey Driver", RUN+="keymap $name 0x37 f21" ENV{DMI_VENDOR}=="IBM*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-ibm" ENV{DMI_VENDOR}=="Sony*", KERNELS=="input*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony" ENV{DMI_VENDOR}=="Acer*", KERNELS=="input*", ATTRS{name}=="Acer WMI hotkeys", RUN+="keymap $name 0x82 f21" ENV{DMI_VENDOR}=="MICRO-STAR*|Micro-Star*", KERNELS=="input*", ATTRS{name}=="MSI Laptop hotkeys", RUN+="keymap $name 0x213 f22 0x214 f23" # Older Vaios have some different keys ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="*PCG-C1*|*PCG-K25*|*PCG-F1*|*PCG-F2*|*PCG-F3*|*PCG-F4*|*PCG-F5*|*PCG-F6*|*PCG-FX*|*PCG-FRV*|*PCG-GR*|*PCG-TR*|*PCG-NV*|*PCG-Z*|*VGN-S360*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-old" # Some Sony VGN models have yet another one ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="VGN-AR71*|VGN-FW*|VGN-Z21*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-vgn" # # The following rules belong to standard i8042 AT keyboard with high key codes. # DRIVERS=="atkbd", GOTO="keyboard_vendorcheck" GOTO="keyboard_end" LABEL="keyboard_vendorcheck" ENV{DMI_VENDOR}=="Dell*", RUN+="keymap $name dell" ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Inspiron 910|Inspiron 1010|Inspiron 1011|Inspiron 1012|Inspiron 1110|Inspiron 1210", RUN+="keymap $name 0x84 wlan" ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Latitude XT2", RUN+="keymap $name dell-latitude-xt2" ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N*", RUN+="keymap $name compaq-e_evo" ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*3000*", RUN+="keymap $name lenovo-3000" ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X6*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x6_tablet" ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X2[02]* Tablet*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x200_tablet" ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*IdeaPad*", RUN+="keymap $name lenovo-ideapad" ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_name}=="S10-*", RUN+="keymap $name lenovo-ideapad" ENV{DMI_VENDOR}=="LENOVO", ATTR{[dmi/id]product_version}=="*IdeaPad Y550*", RUN+="keymap $name 0x95 media 0xA3 play" ENV{DMI_VENDOR}=="Hewlett-Packard*", RUN+="keymap $name hewlett-packard" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][aA][bB][lL][eE][tT]*", RUN+="keymap $name hewlett-packard-tablet" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keymap $name hewlett-packard-pavilion" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*Compaq*|*EliteBook*|*2230s*", RUN+="keymap $name hewlett-packard-compaq_elitebook" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keymap $name hewlett-packard-2510p_2530p" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keymap $name hewlett-packard-tx2" ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*", RUN+="keymap $name hewlett-packard-presario-2100" ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www" ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill" # HP Pavillion dv6315ea has empty DMI_VENDOR ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play # Gateway clone of Acer Aspire One AOA110/AOA150 ENV{DMI_VENDOR}=="Gateway*", ATTR{[dmi/id]product_name}=="*AOA1*", RUN+="keymap $name acer" ENV{DMI_VENDOR}=="Acer*", RUN+="keymap $name acer" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name 0xEE screenlock" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*C3[01]0*", RUN+="keymap $name acer-travelmate_c300" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*|TravelMate*8471*|TravelMate*4720*|TravelMate*7720*|Aspire 1810T*|AO751h|AO531h", RUN+="keymap $name 0xD9 bluetooth" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*4720*", RUN+="keymap $name 0xB2 www 0xEE screenlock" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www 0xEE screenlock" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 6920", RUN+="keymap $name acer-aspire_6920" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5920G", RUN+="keymap $name acer-aspire_5920g" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5720*", RUN+="keymap $name acer-aspire_5720" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 8930", RUN+="keymap $name acer-aspire_8930" ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_serial}=="ZG8*", RUN+="keymap $name acer-aspire_5720" ENV{DMI_VENDOR}=="*BenQ*", ATTR{[dmi/id]product_name}=="*Joybook R22*", RUN+="keymap $name 0x6E wlan" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro V3205*", RUN+="keymap $name fujitsu-amilo_pro_v3205" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pa 2548*", RUN+="keymap $name fujitsu-amilo_pa_2548" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*ESPRIMO Mobile V5*", RUN+="keymap $name fujitsu-esprimo_mobile_v5" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*ESPRIMO Mobile V6*", RUN+="keymap $name fujitsu-esprimo_mobile_v6" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro Edition V3505*", RUN+="keymap $name fujitsu-amilo_pro_edition_v3505" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*Amilo Si 1520*", RUN+="keymap $name fujitsu-amilo_si_1520" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="AMILO*M*", RUN+="keymap $name 0x97 prog2 0x9F prog1" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="Amilo Li 1718", RUN+="keymap $name 0xD6 wlan" ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="AMILO Li 2732", RUN+="keymap $name fujitsu-amilo_li_2732" ENV{DMI_VENDOR}=="LG*", ATTR{[dmi/id]product_name}=="*X110*", RUN+="keymap $name lg-x110" ENV{DMI_VENDOR}=="MEDION*", ATTR{[dmi/id]product_name}=="*FID2060*", RUN+="keymap $name medion-fid2060" ENV{DMI_VENDOR}=="MEDIONNB", ATTR{[dmi/id]product_name}=="A555*", RUN+="keymap $name medionnb-a555" ENV{DMI_VENDOR}=="MICRO-STAR*|Micro-Star*", RUN+="keymap $name micro-star" # some MSI models generate ACPI/input events on the LNXVIDEO input devices, # plus some extra synthesized ones on atkbd as an echo of actually changing the # brightness; so ignore those atkbd ones, to avoid loops ENV{DMI_VENDOR}=="MICRO-STAR*", ATTR{[dmi/id]product_name}=="*U-100*|*U100*|*N033", RUN+="keymap $name 0xF7 reserved 0xF8 reserved" ENV{DMI_VENDOR}=="INVENTEC", ATTR{[dmi/id]product_name}=="SYMPHONY 6.0/7.0", RUN+="keymap $name inventec-symphony_6.0_7.0" ENV{DMI_VENDOR}=="MAXDATA", ATTR{[dmi/id]product_name}=="Pro 7000*", RUN+="keymap $name maxdata-pro_7000" ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", RUN+="keymap $name samsung-other" ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*SX20S*", RUN+="keymap $name samsung-sx20s" ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="SQ1US", RUN+="keymap $name samsung-sq1us" ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*700Z*", RUN+="keymap $name 0xBA ejectcd 0x96 keyboardbrightnessup 0x97 keyboardbrightnessdown" ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="SATELLITE A100", RUN+="keymap $name toshiba-satellite_a100" ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite A110", RUN+="keymap $name toshiba-satellite_a110" ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite M30X", RUN+="keymap $name toshiba-satellite_m30x" ENV{DMI_VENDOR}=="OQO Inc.*", ATTR{[dmi/id]product_name}=="OQO Model 2*", RUN+="keymap $name oqo-model2" ENV{DMI_VENDOR}=="ONKYO CORPORATION", ATTR{[dmi/id]product_name}=="ONKYOPC", RUN+="keymap $name onkyo" ENV{DMI_VENDOR}=="ASUS", RUN+="keymap $name asus" ENV{DMI_VENDOR}=="VIA", ATTR{[dmi/id]product_name}=="K8N800", ATTR{[dmi/id]product_version}=="VT8204B", RUN+="keymap $name 0x81 prog1" ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote", ATTR{[dmi/id]product_version}=="62*|63*", RUN+="keymap $name zepto-znote" ENV{DMI_VENDOR}=="Everex", ATTR{[dmi/id]product_name}=="XT5000*", RUN+="keymap $name everex-xt5000" ENV{DMI_VENDOR}=="COMPAL", ATTR{[dmi/id]product_name}=="HEL80I", RUN+="keymap $name 0x84 wlan" ENV{DMI_VENDOR}=="OLPC", ATTR{[dmi/id]product_name}=="XO", RUN+="keymap $name olpc-xo" ENV{DMI_VENDOR}=="Alienware*", ATTR{[dmi/id]product_name}=="M14xR1", RUN+="keymap $name 0x8A ejectcd" LABEL="keyboard_end" udev-182/src/keymap/PaxHeaders.12492/keyboard-force-release.sh.in0000644000521600052160000000013211711107662022715 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083334.350104874 30 ctime=1332097353.646438935 udev-182/src/keymap/keyboard-force-release.sh.in0000775000521600052160000000117711711107662021332 0ustar00kaykay00000000000000#!@rootprefix@/bin/sh -e # read list of scancodes, convert hex to decimal and # append to the atkbd force_release sysfs attribute # $1 sysfs devpath for serioX # $2 file with scancode list (hex or dec) case "$2" in /*) scf="$2" ;; *) scf="@pkglibexecdir@/keymaps/force-release/$2" ;; esac read attr <"/sys/$1/force_release" while read scancode dummy; do case "$scancode" in \#*) ;; *) scancode=$(($scancode)) attr="$attr${attr:+,}$scancode" ;; esac done <"$scf" echo "$attr" >"/sys/$1/force_release" udev-182/src/keymap/PaxHeaders.12492/README.keymap.txt0000644000521600052160000000013211711107662020425 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.692117606 30 ctime=1332097352.032438897 udev-182/src/keymap/README.keymap.txt0000664000521600052160000001012311711107662017026 0ustar00kaykay00000000000000= The udev keymap tool = == Introduction == This udev extension configures computer model specific key mappings. This is particularly necessary for the non-standard extra keys found on many laptops, such as "brightness up", "next song", "www browser", or "suspend". Often these are accessed with the Fn key. Every key produces a "scan code", which is highly vendor/model specific for the nonstandard keys. This tool maintains mappings for these scan codes to standard "key codes", which denote the "meaning" of the key. The key codes are defined in /usr/include/linux/input.h. If some of your keys on your keyboard are not working at all, or produce the wrong effect, then a very likely cause of this is that the scan code -> key code mapping is incorrect on your computer. == Structure == udev-keymap consists of the following parts: keymaps/*:: mappings of scan codes to key code names 95-keymap.rules:: udev rules for mapping system vendor/product names and input module names to one of the keymaps above keymap:: manipulate an evdev input device: * write a key map file into a device (used by udev rules) * dump current scan → key code mapping * interactively display scan and key codes of pressed keys findkeyboards:: display evdev input devices which belong to actual keyboards, i. e. those suitable for the keymap program fdi2rules.py:: convert hal keymap FDIs into udev rules and key map files (Please note that this is far from perfect, since the mapping between fdi and udev rules is not straightforward, and impossible in some cases.) == Fixing broken keys == In order to make a broken key work on your system and send it back to upstream for inclusion you need to do the following steps: 1. Find the keyboard device. Run /usr/lib/udev/findkeyboards. This should always give you an "AT keyboard" and possibly a "module". Some laptops (notably Thinkpads, Sonys, and Acers) have multimedia/function keys on a separate input device instead of the primary keyboard. The keyboard device should have a name like "input/event3". In the following commands, the name will be written as "input/eventX" (replace X with the appropriate number). 2. Find broken scan codes: sudo /usr/lib/udev/keymap -i input/eventX Press all multimedia/function keys and check if the key name that gets printed out is plausible. If it is unknown or wrong, write down the scan code (looks like "0x1E") and the intended functionality of this key. Look in /usr/include/linux/input.h for an available KEY_XXXXX constant which most closely approximates this functionality and write it down as the new key code. For example, you might press a key labeled "web browser" which currently produces "unknown". Note down this: 0x1E www # Fn+F2 web browser Repeat that for all other keys. Write the resulting list into a file. Look at /usr/lib/udev/keymaps/ for existing key map files and make sure that you use the same structure. If the key only ever works once and then your keyboard (or the entire desktop) gets stuck for a long time, then it is likely that the BIOS fails to send a corresponding "key release" event after the key press event. Please note down this case as well, as it can be worked around in /usr/lib/udev/keymaps/95-keyboard-force-release.rules . 3. Find out your system vendor and product: cat /sys/class/dmi/id/sys_vendor cat /sys/class/dmi/id/product_name 4. Generate a device dump with "udevadm info --export-db > /tmp/udev-db.txt". 6. Send the system vendor/product names, the key mapping from step 2, and /tmp/udev-db.txt from step 4 to the linux-hotplug@vger.kernel.org mailing list, so that they can be included in the next release. For local testing, copy your map file to /usr/lib/udev/keymaps/ with an appropriate name, and add an appropriate udev rule to /usr/lib/udev/rules.d/95-keymap.rules: * If you selected an "AT keyboard", add the rule to the section after 'LABEL="keyboard_vendorcheck"'. * If you selected a "module", add the rule to the top section where the "ThinkPad Extra Buttons" are. == Author == keymap is written and maintained by Martin Pitt . udev-182/src/keymap/PaxHeaders.12492/95-keyboard-force-release.rules0000644000521600052160000000013211711107662023263 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083869.401117623 30 ctime=1332097352.647438911 udev-182/src/keymap/95-keyboard-force-release.rules0000664000521600052160000000640011711107662021667 0ustar00kaykay00000000000000# Set model specific atkbd force_release quirk # # Several laptops have hotkeys which don't generate release events, # which can cause problems with software key repeat. # The atkbd driver has a quirk handler for generating synthetic # release events, which can be configured via sysfs since 2.6.32. # Simply add a file with a list of scancodes for your laptop model # in /usr/lib/udev/keymaps, and add a rule here. # If the hotkeys also need a keymap assignment you can copy the # scancodes from the keymap file, otherwise you can run # /usr/lib/udev/keymap -i /dev/input/eventX # on a Linux vt to find out. ACTION=="remove", GOTO="force_release_end" SUBSYSTEM!="serio", GOTO="force_release_end" KERNEL!="serio*", GOTO="force_release_end" DRIVER!="atkbd", GOTO="force_release_end" ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}" ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", RUN+="keyboard-force-release.sh $devpath samsung-other" ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Studio 1557|Studio 1558", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Latitude E*|Precision M*", RUN+="keyboard-force-release.sh $devpath dell-touchpad" ENV{DMI_VENDOR}=="FUJITSU SIEMENS", ATTR{[dmi/id]product_name}=="AMILO Si 1848+u|AMILO Xi 2428", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="FOXCONN", ATTR{[dmi/id]product_name}=="QBOOK", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="MTC", ATTR{[dmi/id]product_version}=="A0", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="PEGATRON CORP.", ATTR{[dmi/id]product_name}=="Spring Peak", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite [uU]300*|Satellite Pro [uU]300*|Satellite [uU]305*|SATELLITE [uU]500*", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="Viooo Corporation", ATTR{[dmi/id]product_name}=="PT17", RUN+="keyboard-force-release.sh $devpath common-volume-keys" # These are all the HP laptops that setup a touchpad toggle key ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keyboard-force-release.sh $devpath hp-other" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keyboard-force-release.sh $devpath hp-other" ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keyboard-force-release.sh $devpath hp-other" ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote 6615WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote", ATTR{[dmi/id]product_version}=="6625WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="HANNspree", ATTR{[dmi/id]product_name}=="SN10E100", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="GIGABYTE", ATTR{[dmi/id]product_name}=="i1520M", RUN+="keyboard-force-release.sh $devpath common-volume-keys" ENV{DMI_VENDOR}=="BenQ", ATTR{[dmi/id]product_name}=="*nScreen*", RUN+="keyboard-force-release.sh $devpath common-volume-keys" LABEL="force_release_end" udev-182/src/keymap/PaxHeaders.12492/findkeyboards0000644000521600052160000000013211711107662020211 xustar000000000000000030 mtime=1327796146.957827015 30 atime=1332083868.723117607 30 ctime=1332097352.063438897 udev-182/src/keymap/findkeyboards0000775000521600052160000000506511711107662016626 0ustar00kaykay00000000000000#!/bin/sh -e # Find "real" keyboard devices and print their device path. # Author: Martin Pitt # # Copyright (C) 2009, Canonical Ltd. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # returns OK if $1 contains $2 strstr() { [ "${1#*$2*}" != "$1" ] } # returns OK if $1 contains $2 at the beginning str_starts() { [ "${1#$2*}" != "$1" ] } str_line_starts() { while read a; do str_starts "$a" "$1" && return 0;done return 1; } # print a list of input devices which are keyboard-like keyboard_devices() { # standard AT keyboard for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do walk=`udevadm info --attribute-walk --path=$dev` env=`udevadm info --query=env --path=$dev` # filter out non-event devices, such as the parent input devices which have no devnode if ! echo "$env" | str_line_starts 'DEVNAME='; then continue fi if strstr "$walk" 'DRIVERS=="atkbd"'; then echo -n 'AT keyboard: ' elif echo "$env" | str_line_starts 'ID_USB_DRIVER=usbhid'; then echo -n 'USB keyboard: ' else echo -n 'Unknown type: ' fi udevadm info --query=name --path=$dev done # modules module=$(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*Extra Buttons') module="$module $(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*extra buttons')" module="$module $(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='Sony Vaio Keys')" for m in $module; do for evdev in $m/event*/dev; do if [ -e "$evdev" ]; then echo -n 'module: ' udevadm info --query=name --path=${evdev%%/dev} fi done done } keyboard_devices udev-182/src/PaxHeaders.12492/v4l_id0000644000521600052160000000013211731430511015252 xustar000000000000000030 mtime=1332097353.480438931 30 atime=1332097354.351438951 30 ctime=1332097353.480438931 udev-182/src/v4l_id/0000775000521600052160000000000011731430511013733 5ustar00kaykay00000000000000udev-182/src/v4l_id/PaxHeaders.12492/60-persistent-v4l.rules0000644000521600052160000000013211711107662021537 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083869.369117623 30 ctime=1332097352.620438911 udev-182/src/v4l_id/60-persistent-v4l.rules0000664000521600052160000000140111711107662020137 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_v4l_end" SUBSYSTEM!="video4linux", GOTO="persistent_v4l_end" ENV{MAJOR}=="", GOTO="persistent_v4l_end" IMPORT{program}="v4l_id $devnode" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}" # check for valid "index" number TEST!="index", GOTO="persistent_v4l_end" ATTR{index}!="?*", GOTO="persistent_v4l_end" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}" ENV{ID_PATH}=="?*", KERNEL=="audio*", SYMLINK+="v4l/by-path/$env{ID_PATH}-audio-index$attr{index}" LABEL="persistent_v4l_end" udev-182/src/v4l_id/PaxHeaders.12492/v4l_id.c0000644000521600052160000000013211711107662016662 xustar000000000000000030 mtime=1327796146.959827011 30 atime=1332083333.229104847 30 ctime=1332097353.480438931 udev-182/src/v4l_id/v4l_id.c0000664000521600052160000000534311711107662015273 0ustar00kaykay00000000000000/* * Copyright (C) 2009 Kay Sievers * Copyright (c) 2009 Filippo Argiolas * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details: */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main (int argc, char *argv[]) { static const struct option options[] = { { "help", no_argument, NULL, 'h' }, {} }; int fd; char *device; struct v4l2_capability v2cap; while (1) { int option; option = getopt_long(argc, argv, "h", options, NULL); if (option == -1) break; switch (option) { case 'h': printf("Usage: v4l_id [--help] \n\n"); return 0; default: return 1; } } device = argv[optind]; if (device == NULL) return 2; fd = open (device, O_RDONLY); if (fd < 0) return 3; if (ioctl (fd, VIDIOC_QUERYCAP, &v2cap) == 0) { printf("ID_V4L_VERSION=2\n"); printf("ID_V4L_PRODUCT=%s\n", v2cap.card); printf("ID_V4L_CAPABILITIES=:"); if ((v2cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) > 0) printf("capture:"); if ((v2cap.capabilities & V4L2_CAP_VIDEO_OUTPUT) > 0) printf("video_output:"); if ((v2cap.capabilities & V4L2_CAP_VIDEO_OVERLAY) > 0) printf("video_overlay:"); if ((v2cap.capabilities & V4L2_CAP_AUDIO) > 0) printf("audio:"); if ((v2cap.capabilities & V4L2_CAP_TUNER) > 0) printf("tuner:"); if ((v2cap.capabilities & V4L2_CAP_RADIO) > 0) printf("radio:"); printf("\n"); } close (fd); return 0; } udev-182/src/PaxHeaders.12492/accelerometer0000644000521600052160000000013211731430511016703 xustar000000000000000030 mtime=1332097353.089438921 30 atime=1332097354.351438951 30 ctime=1332097353.089438921 udev-182/src/accelerometer/0000775000521600052160000000000011731430511015364 5ustar00kaykay00000000000000udev-182/src/accelerometer/PaxHeaders.12492/61-accelerometer.rules0000644000521600052160000000013211711107662023100 xustar000000000000000030 mtime=1327796146.950827026 30 atime=1332083869.381117623 30 ctime=1332097352.629438912 udev-182/src/accelerometer/61-accelerometer.rules0000664000521600052160000000024611711107662021506 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update SUBSYSTEM=="input", ACTION!="remove", ENV{ID_INPUT_ACCELEROMETER}=="1", IMPORT{program}="accelerometer %p" udev-182/src/accelerometer/PaxHeaders.12492/accelerometer.c0000644000521600052160000000013211711107662021744 xustar000000000000000030 mtime=1327796146.950827026 30 atime=1332083333.478104853 30 ctime=1332097353.089438921 udev-182/src/accelerometer/accelerometer.c0000664000521600052160000002564411711107662020363 0ustar00kaykay00000000000000/* * accelerometer - exports device orientation through property * * When an "change" event is received on an accelerometer, * open its device node, and from the value, as well as the previous * value of the property, calculate the device's new orientation, * and export it as ID_INPUT_ACCELEROMETER_ORIENTATION. * * Possible values are: * undefined * * normal * * bottom-up * * left-up * * right-up * * The property will be persistent across sessions, and the new * orientations can be deducted from the previous one (it allows * for a threshold for switching between opposite ends of the * orientation). * * Copyright (C) 2011 Red Hat, Inc. * Author: * Bastien Nocera * * orientation_calc() from the sensorfw package * Copyright (C) 2009-2010 Nokia Corporation * Authors: * Üstün Ergenoglu * Timo Rongas * Lihan Guo * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with keymap; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" /* we must use this kernel-compatible implementation */ #define BITS_PER_LONG (sizeof(unsigned long) * 8) #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) #define OFF(x) ((x)%BITS_PER_LONG) #define BIT(x) (1UL<> OFF(bit)) & 1) static int debug = 0; static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { if (debug) { fprintf(stderr, "%s: ", fn); vfprintf(stderr, format, args); } else { vsyslog(priority, format, args); } } typedef enum { ORIENTATION_UNDEFINED, ORIENTATION_NORMAL, ORIENTATION_BOTTOM_UP, ORIENTATION_LEFT_UP, ORIENTATION_RIGHT_UP } OrientationUp; static const char *orientations[] = { "undefined", "normal", "bottom-up", "left-up", "right-up", NULL }; #define ORIENTATION_UP_UP ORIENTATION_NORMAL #define DEFAULT_THRESHOLD 250 #define RADIANS_TO_DEGREES 180.0/M_PI #define SAME_AXIS_LIMIT 5 #define THRESHOLD_LANDSCAPE 25 #define THRESHOLD_PORTRAIT 20 static const char * orientation_to_string (OrientationUp o) { return orientations[o]; } static OrientationUp string_to_orientation (const char *orientation) { int i; if (orientation == NULL) return ORIENTATION_UNDEFINED; for (i = 0; orientations[i] != NULL; i++) { if (strcmp (orientation, orientations[i]) == 0) return i; } return ORIENTATION_UNDEFINED; } static OrientationUp orientation_calc (OrientationUp prev, int x, int y, int z) { int rotation; OrientationUp ret = prev; /* Portrait check */ rotation = round(atan((double) x / sqrt(y * y + z * z)) * RADIANS_TO_DEGREES); if (abs(rotation) > THRESHOLD_PORTRAIT) { ret = (rotation < 0) ? ORIENTATION_LEFT_UP : ORIENTATION_RIGHT_UP; /* Some threshold to switching between portrait modes */ if (prev == ORIENTATION_LEFT_UP || prev == ORIENTATION_RIGHT_UP) { if (abs(rotation) < SAME_AXIS_LIMIT) { ret = prev; } } } else { /* Landscape check */ rotation = round(atan((double) y / sqrt(x * x + z * z)) * RADIANS_TO_DEGREES); if (abs(rotation) > THRESHOLD_LANDSCAPE) { ret = (rotation < 0) ? ORIENTATION_BOTTOM_UP : ORIENTATION_NORMAL; /* Some threshold to switching between landscape modes */ if (prev == ORIENTATION_BOTTOM_UP || prev == ORIENTATION_NORMAL) { if (abs(rotation) < SAME_AXIS_LIMIT) { ret = prev; } } } } return ret; } static OrientationUp get_prev_orientation(struct udev_device *dev) { const char *value; value = udev_device_get_property_value(dev, "ID_INPUT_ACCELEROMETER_ORIENTATION"); if (value == NULL) return ORIENTATION_UNDEFINED; return string_to_orientation(value); } #define SET_AXIS(axis, code_) if (ev[i].code == code_) { if (got_##axis == 0) { axis = ev[i].value; got_##axis = 1; } } /* accelerometers */ static void test_orientation(struct udev *udev, struct udev_device *dev, const char *devpath) { OrientationUp old, new; int fd, r; struct input_event ev[64]; int got_syn = 0; int got_x, got_y, got_z; int x = 0, y = 0, z = 0; char text[64]; old = get_prev_orientation(dev); if ((fd = open(devpath, O_RDONLY)) < 0) return; got_x = got_y = got_z = 0; while (1) { int i; r = read(fd, ev, sizeof(struct input_event) * 64); if (r < (int) sizeof(struct input_event)) return; for (i = 0; i < r / (int) sizeof(struct input_event); i++) { if (got_syn == 1) { if (ev[i].type == EV_ABS) { SET_AXIS(x, ABS_X); SET_AXIS(y, ABS_Y); SET_AXIS(z, ABS_Z); } } if (ev[i].type == EV_SYN && ev[i].code == SYN_REPORT) { got_syn = 1; } if (got_x && got_y && got_z) goto read_dev; } } read_dev: close(fd); if (!got_x || !got_y || !got_z) return; new = orientation_calc(old, x, y, z); snprintf(text, sizeof(text), "ID_INPUT_ACCELEROMETER_ORIENTATION=%s", orientation_to_string(new)); puts(text); } static void help(void) { printf("Usage: accelerometer [options] \n" " --debug debug to stderr\n" " --help print this help text\n\n"); } int main (int argc, char** argv) { struct udev *udev; struct udev_device *dev; static const struct option options[] = { { "debug", no_argument, NULL, 'd' }, { "help", no_argument, NULL, 'h' }, {} }; char devpath[PATH_MAX]; char *devnode; const char *id_path; struct udev_enumerate *enumerate; struct udev_list_entry *list_entry; udev = udev_new(); if (udev == NULL) return 1; udev_log_init("input_id"); udev_set_log_fn(udev, log_fn); /* CLI argument parsing */ while (1) { int option; option = getopt_long(argc, argv, "dxh", options, NULL); if (option == -1) break; switch (option) { case 'd': debug = 1; if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; case 'h': help(); exit(0); default: exit(1); } } if (argv[optind] == NULL) { help(); exit(1); } /* get the device */ snprintf(devpath, sizeof(devpath), "%s/%s", udev_get_sys_path(udev), argv[optind]); dev = udev_device_new_from_syspath(udev, devpath); if (dev == NULL) { fprintf(stderr, "unable to access '%s'\n", devpath); return 1; } id_path = udev_device_get_property_value(dev, "ID_PATH"); if (id_path == NULL) { fprintf (stderr, "unable to get property ID_PATH for '%s'", devpath); return 0; } /* Get the children devices and find the devnode * FIXME: use udev_enumerate_add_match_children() instead * when it's available */ devnode = NULL; enumerate = udev_enumerate_new(udev); udev_enumerate_add_match_property(enumerate, "ID_PATH", id_path); udev_enumerate_add_match_subsystem(enumerate, "input"); udev_enumerate_scan_devices(enumerate); udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(enumerate)) { struct udev_device *device; const char *node; device = udev_device_new_from_syspath(udev_enumerate_get_udev(enumerate), udev_list_entry_get_name(list_entry)); if (device == NULL) continue; /* Already found it */ if (devnode != NULL) { udev_device_unref(device); continue; } node = udev_device_get_devnode(device); if (node == NULL) { udev_device_unref(device); continue; } /* Use the event sub-device */ if (strstr(node, "/event") == NULL) { udev_device_unref(device); continue; } devnode = strdup(node); udev_device_unref(device); } if (devnode == NULL) { fprintf(stderr, "unable to get device node for '%s'\n", devpath); return 0; } info(udev, "Opening accelerometer device %s\n", devnode); test_orientation(udev, dev, devnode); free(devnode); return 0; } udev-182/src/PaxHeaders.12492/udevadm.c0000644000521600052160000000013211714243536015751 xustar000000000000000030 mtime=1328629598.900722163 30 atime=1332083327.703104715 30 ctime=1332097353.365438929 udev-182/src/udevadm.c0000664000521600052160000001171711714243536014364 0ustar00kaykay00000000000000/* * Copyright (C) 2007-2009 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "udev.h" static bool debug; void udev_main_log(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { if (debug) { fprintf(stderr, "%s: ", fn); vfprintf(stderr, format, args); } else { va_list args2; va_copy(args2, args); vfprintf(stderr, format, args2); va_end(args2); vsyslog(priority, format, args); } } static int adm_version(struct udev *udev, int argc, char *argv[]) { printf("%s\n", VERSION); return 0; } static const struct udevadm_cmd udevadm_version = { .name = "version", .cmd = adm_version, }; static int adm_help(struct udev *udev, int argc, char *argv[]); static const struct udevadm_cmd udevadm_help = { .name = "help", .cmd = adm_help, }; static const struct udevadm_cmd *udevadm_cmds[] = { &udevadm_info, &udevadm_trigger, &udevadm_settle, &udevadm_control, &udevadm_monitor, &udevadm_test, &udevadm_test_builtin, &udevadm_version, &udevadm_help, }; static int adm_help(struct udev *udev, int argc, char *argv[]) { unsigned int i; fprintf(stderr, "Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n"); for (i = 0; i < ARRAY_SIZE(udevadm_cmds); i++) if (udevadm_cmds[i]->help != NULL) printf(" %-12s %s\n", udevadm_cmds[i]->name, udevadm_cmds[i]->help); fprintf(stderr, "\n"); return 0; } static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int argc, char *argv[]) { if (cmd->debug) { debug = true; if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); } info(udev, "calling: %s\n", cmd->name); return cmd->cmd(udev, argc, argv); } int main(int argc, char *argv[]) { struct udev *udev; static const struct option options[] = { { "debug", no_argument, NULL, 'd' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, {} }; const char *command; unsigned int i; int rc = 1; udev = udev_new(); if (udev == NULL) goto out; udev_log_init("udevadm"); udev_set_log_fn(udev, udev_main_log); udev_selinux_init(udev); for (;;) { int option; option = getopt_long(argc, argv, "+dhV", options, NULL); if (option == -1) break; switch (option) { case 'd': debug = true; if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; case 'h': rc = adm_help(udev, argc, argv); goto out; case 'V': rc = adm_version(udev, argc, argv); goto out; default: goto out; } } command = argv[optind]; info(udev, "runtime dir '%s'\n", udev_get_run_path(udev)); if (command != NULL) for (i = 0; i < ARRAY_SIZE(udevadm_cmds); i++) { if (strcmp(udevadm_cmds[i]->name, command) == 0) { argc -= optind; argv += optind; optind = 0; rc = run_command(udev, udevadm_cmds[i], argc, argv); goto out; } } fprintf(stderr, "missing or unknown command\n\n"); adm_help(udev, argc, argv); rc = 2; out: udev_selinux_exit(udev); udev_unref(udev); udev_log_close(); return rc; } udev-182/src/PaxHeaders.12492/cdrom_id0000644000521600052160000000013211731430511015651 xustar000000000000000030 mtime=1332097353.109438921 30 atime=1332097354.351438951 30 ctime=1332097353.109438921 udev-182/src/cdrom_id/0000775000521600052160000000000011731430511014332 5ustar00kaykay00000000000000udev-182/src/cdrom_id/PaxHeaders.12492/60-cdrom_id.rules0000644000521600052160000000013211711555520021013 xustar000000000000000030 mtime=1327946576.526251552 30 atime=1332083869.361117622 30 ctime=1332097352.610438911 udev-182/src/cdrom_id/60-cdrom_id.rules0000664000521600052160000000120611711555520017416 0ustar00kaykay00000000000000# do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="cdrom_end" SUBSYSTEM!="block", GOTO="cdrom_end" KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end" ENV{DEVTYPE}!="disk", GOTO="cdrom_end" # unconditionally tag device as CDROM KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1" # media eject button pressed ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end" # import device and media properties and lock tray to # enable the receiving of media eject button events IMPORT{program}="cdrom_id --lock-media $devnode" KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" LABEL="cdrom_end" udev-182/src/cdrom_id/PaxHeaders.12492/cdrom_id.c0000644000521600052160000000013211711107662017660 xustar000000000000000030 mtime=1327796146.952827023 30 atime=1332083331.979104817 30 ctime=1332097353.110438922 udev-182/src/cdrom_id/cdrom_id.c0000664000521600052160000011542011711107662016267 0ustar00kaykay00000000000000/* * cdrom_id - optical drive and media information prober * * Copyright (C) 2008-2010 Kay Sievers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "libudev.h" #include "libudev-private.h" static bool debug; static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, const char *format, va_list args) { if (debug) { fprintf(stderr, "%s: ", fn); vfprintf(stderr, format, args); } else { vsyslog(priority, format, args); } } /* device info */ static unsigned int cd_cd_rom; static unsigned int cd_cd_r; static unsigned int cd_cd_rw; static unsigned int cd_dvd_rom; static unsigned int cd_dvd_r; static unsigned int cd_dvd_rw; static unsigned int cd_dvd_ram; static unsigned int cd_dvd_plus_r; static unsigned int cd_dvd_plus_rw; static unsigned int cd_dvd_plus_r_dl; static unsigned int cd_dvd_plus_rw_dl; static unsigned int cd_bd; static unsigned int cd_bd_r; static unsigned int cd_bd_re; static unsigned int cd_hddvd; static unsigned int cd_hddvd_r; static unsigned int cd_hddvd_rw; static unsigned int cd_mo; static unsigned int cd_mrw; static unsigned int cd_mrw_w; /* media info */ static unsigned int cd_media; static unsigned int cd_media_cd_rom; static unsigned int cd_media_cd_r; static unsigned int cd_media_cd_rw; static unsigned int cd_media_dvd_rom; static unsigned int cd_media_dvd_r; static unsigned int cd_media_dvd_rw; static unsigned int cd_media_dvd_rw_ro; /* restricted overwrite mode */ static unsigned int cd_media_dvd_rw_seq; /* sequential mode */ static unsigned int cd_media_dvd_ram; static unsigned int cd_media_dvd_plus_r; static unsigned int cd_media_dvd_plus_rw; static unsigned int cd_media_dvd_plus_r_dl; static unsigned int cd_media_dvd_plus_rw_dl; static unsigned int cd_media_bd; static unsigned int cd_media_bd_r; static unsigned int cd_media_bd_re; static unsigned int cd_media_hddvd; static unsigned int cd_media_hddvd_r; static unsigned int cd_media_hddvd_rw; static unsigned int cd_media_mo; static unsigned int cd_media_mrw; static unsigned int cd_media_mrw_w; static const char *cd_media_state = NULL; static unsigned int cd_media_session_next; static unsigned int cd_media_session_count; static unsigned int cd_media_track_count; static unsigned int cd_media_track_count_data; static unsigned int cd_media_track_count_audio; static unsigned long long int cd_media_session_last_offset; #define ERRCODE(s) ((((s)[2] & 0x0F) << 16) | ((s)[12] << 8) | ((s)[13])) #define SK(errcode) (((errcode) >> 16) & 0xF) #define ASC(errcode) (((errcode) >> 8) & 0xFF) #define ASCQ(errcode) ((errcode) & 0xFF) static bool is_mounted(const char *device) { struct stat statbuf; FILE *fp; int maj, min; bool mounted = false; if (stat(device, &statbuf) < 0) return -ENODEV; fp = fopen("/proc/self/mountinfo", "r"); if (fp == NULL) return -ENOSYS; while (fscanf(fp, "%*s %*s %i:%i %*[^\n]", &maj, &min) == 2) { if (makedev(maj, min) == statbuf.st_rdev) { mounted = true; break; } } fclose(fp); return mounted; } static void info_scsi_cmd_err(struct udev *udev, char *cmd, int err) { if (err == -1) { info(udev, "%s failed\n", cmd); return; } info(udev, "%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh\n", cmd, SK(err), ASC(err), ASCQ(err)); } struct scsi_cmd { struct cdrom_generic_command cgc; union { struct request_sense s; unsigned char u[18]; } _sense; struct sg_io_hdr sg_io; }; static void scsi_cmd_init(struct udev *udev, struct scsi_cmd *cmd) { memset(cmd, 0x00, sizeof(struct scsi_cmd)); cmd->cgc.quiet = 1; cmd->cgc.sense = &cmd->_sense.s; cmd->sg_io.interface_id = 'S'; cmd->sg_io.mx_sb_len = sizeof(cmd->_sense); cmd->sg_io.cmdp = cmd->cgc.cmd; cmd->sg_io.sbp = cmd->_sense.u; cmd->sg_io.flags = SG_FLAG_LUN_INHIBIT | SG_FLAG_DIRECT_IO; } static void scsi_cmd_set(struct udev *udev, struct scsi_cmd *cmd, size_t i, unsigned char arg) { cmd->sg_io.cmd_len = i + 1; cmd->cgc.cmd[i] = arg; } #define CHECK_CONDITION 0x01 static int scsi_cmd_run(struct udev *udev, struct scsi_cmd *cmd, int fd, unsigned char *buf, size_t bufsize) { int ret = 0; if (bufsize > 0) { cmd->sg_io.dxferp = buf; cmd->sg_io.dxfer_len = bufsize; cmd->sg_io.dxfer_direction = SG_DXFER_FROM_DEV; } else { cmd->sg_io.dxfer_direction = SG_DXFER_NONE; } if (ioctl(fd, SG_IO, &cmd->sg_io)) return -1; if ((cmd->sg_io.info & SG_INFO_OK_MASK) != SG_INFO_OK) { errno = EIO; ret = -1; if (cmd->sg_io.masked_status & CHECK_CONDITION) { ret = ERRCODE(cmd->_sense.u); if (ret == 0) ret = -1; } } return ret; } static int media_lock(struct udev *udev, int fd, bool lock) { int err; /* disable the kernel's lock logic */ err = ioctl(fd, CDROM_CLEAR_OPTIONS, CDO_LOCK); if (err < 0) info(udev, "CDROM_CLEAR_OPTIONS, CDO_LOCK failed\n"); err = ioctl(fd, CDROM_LOCKDOOR, lock ? 1 : 0); if (err < 0) info(udev, "CDROM_LOCKDOOR failed\n"); return err; } static int media_eject(struct udev *udev, int fd) { struct scsi_cmd sc; int err; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x1b); scsi_cmd_set(udev, &sc, 4, 0x02); scsi_cmd_set(udev, &sc, 5, 0); err = scsi_cmd_run(udev, &sc, fd, NULL, 0); if ((err != 0)) { info_scsi_cmd_err(udev, "START_STOP_UNIT", err); return -1; } return 0; } static int cd_capability_compat(struct udev *udev, int fd) { int capability; capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL); if (capability < 0) { info(udev, "CDROM_GET_CAPABILITY failed\n"); return -1; } if (capability & CDC_CD_R) cd_cd_r = 1; if (capability & CDC_CD_RW) cd_cd_rw = 1; if (capability & CDC_DVD) cd_dvd_rom = 1; if (capability & CDC_DVD_R) cd_dvd_r = 1; if (capability & CDC_DVD_RAM) cd_dvd_ram = 1; if (capability & CDC_MRW) cd_mrw = 1; if (capability & CDC_MRW_W) cd_mrw_w = 1; return 0; } static int cd_media_compat(struct udev *udev, int fd) { if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) { info(udev, "CDROM_DRIVE_STATUS != CDS_DISC_OK\n"); return -1; } cd_media = 1; return 0; } static int cd_inquiry(struct udev *udev, int fd) { struct scsi_cmd sc; unsigned char inq[128]; int err; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x12); scsi_cmd_set(udev, &sc, 4, 36); scsi_cmd_set(udev, &sc, 5, 0); err = scsi_cmd_run(udev, &sc, fd, inq, 36); if ((err != 0)) { info_scsi_cmd_err(udev, "INQUIRY", err); return -1; } if ((inq[0] & 0x1F) != 5) { info(udev, "not an MMC unit\n"); return -1; } info(udev, "INQUIRY: [%.8s][%.16s][%.4s]\n", inq + 8, inq + 16, inq + 32); return 0; } static void feature_profile_media(struct udev *udev, int cur_profile) { switch (cur_profile) { case 0x03: case 0x04: case 0x05: info(udev, "profile 0x%02x \n", cur_profile); cd_media = 1; cd_media_mo = 1; break; case 0x08: info(udev, "profile 0x%02x media_cd_rom\n", cur_profile); cd_media = 1; cd_media_cd_rom = 1; break; case 0x09: info(udev, "profile 0x%02x media_cd_r\n", cur_profile); cd_media = 1; cd_media_cd_r = 1; break; case 0x0a: info(udev, "profile 0x%02x media_cd_rw\n", cur_profile); cd_media = 1; cd_media_cd_rw = 1; break; case 0x10: info(udev, "profile 0x%02x media_dvd_ro\n", cur_profile); cd_media = 1; cd_media_dvd_rom = 1; break; case 0x11: info(udev, "profile 0x%02x media_dvd_r\n", cur_profile); cd_media = 1; cd_media_dvd_r = 1; break; case 0x12: info(udev, "profile 0x%02x media_dvd_ram\n", cur_profile); cd_media = 1; cd_media_dvd_ram = 1; break; case 0x13: info(udev, "profile 0x%02x media_dvd_rw_ro\n", cur_profile); cd_media = 1; cd_media_dvd_rw = 1; cd_media_dvd_rw_ro = 1; break; case 0x14: info(udev, "profile 0x%02x media_dvd_rw_seq\n", cur_profile); cd_media = 1; cd_media_dvd_rw = 1; cd_media_dvd_rw_seq = 1; break; case 0x1B: info(udev, "profile 0x%02x media_dvd_plus_r\n", cur_profile); cd_media = 1; cd_media_dvd_plus_r = 1; break; case 0x1A: info(udev, "profile 0x%02x media_dvd_plus_rw\n", cur_profile); cd_media = 1; cd_media_dvd_plus_rw = 1; break; case 0x2A: info(udev, "profile 0x%02x media_dvd_plus_rw_dl\n", cur_profile); cd_media = 1; cd_media_dvd_plus_rw_dl = 1; break; case 0x2B: info(udev, "profile 0x%02x media_dvd_plus_r_dl\n", cur_profile); cd_media = 1; cd_media_dvd_plus_r_dl = 1; break; case 0x40: info(udev, "profile 0x%02x media_bd\n", cur_profile); cd_media = 1; cd_media_bd = 1; break; case 0x41: case 0x42: info(udev, "profile 0x%02x media_bd_r\n", cur_profile); cd_media = 1; cd_media_bd_r = 1; break; case 0x43: info(udev, "profile 0x%02x media_bd_re\n", cur_profile); cd_media = 1; cd_media_bd_re = 1; break; case 0x50: info(udev, "profile 0x%02x media_hddvd\n", cur_profile); cd_media = 1; cd_media_hddvd = 1; break; case 0x51: info(udev, "profile 0x%02x media_hddvd_r\n", cur_profile); cd_media = 1; cd_media_hddvd_r = 1; break; case 0x52: info(udev, "profile 0x%02x media_hddvd_rw\n", cur_profile); cd_media = 1; cd_media_hddvd_rw = 1; break; default: info(udev, "profile 0x%02x \n", cur_profile); break; } } static int feature_profiles(struct udev *udev, const unsigned char *profiles, size_t size) { unsigned int i; for (i = 0; i+4 <= size; i += 4) { int profile; profile = profiles[i] << 8 | profiles[i+1]; switch (profile) { case 0x03: case 0x04: case 0x05: info(udev, "profile 0x%02x mo\n", profile); cd_mo = 1; break; case 0x08: info(udev, "profile 0x%02x cd_rom\n", profile); cd_cd_rom = 1; break; case 0x09: info(udev, "profile 0x%02x cd_r\n", profile); cd_cd_r = 1; break; case 0x0A: info(udev, "profile 0x%02x cd_rw\n", profile); cd_cd_rw = 1; break; case 0x10: info(udev, "profile 0x%02x dvd_rom\n", profile); cd_dvd_rom = 1; break; case 0x12: info(udev, "profile 0x%02x dvd_ram\n", profile); cd_dvd_ram = 1; break; case 0x13: case 0x14: info(udev, "profile 0x%02x dvd_rw\n", profile); cd_dvd_rw = 1; break; case 0x1B: info(udev, "profile 0x%02x dvd_plus_r\n", profile); cd_dvd_plus_r = 1; break; case 0x1A: info(udev, "profile 0x%02x dvd_plus_rw\n", profile); cd_dvd_plus_rw = 1; break; case 0x2A: info(udev, "profile 0x%02x dvd_plus_rw_dl\n", profile); cd_dvd_plus_rw_dl = 1; break; case 0x2B: info(udev, "profile 0x%02x dvd_plus_r_dl\n", profile); cd_dvd_plus_r_dl = 1; break; case 0x40: cd_bd = 1; info(udev, "profile 0x%02x bd\n", profile); break; case 0x41: case 0x42: cd_bd_r = 1; info(udev, "profile 0x%02x bd_r\n", profile); break; case 0x43: cd_bd_re = 1; info(udev, "profile 0x%02x bd_re\n", profile); break; case 0x50: cd_hddvd = 1; info(udev, "profile 0x%02x hddvd\n", profile); break; case 0x51: cd_hddvd_r = 1; info(udev, "profile 0x%02x hddvd_r\n", profile); break; case 0x52: cd_hddvd_rw = 1; info(udev, "profile 0x%02x hddvd_rw\n", profile); break; default: info(udev, "profile 0x%02x \n", profile); break; } } return 0; } /* returns 0 if media was detected */ static int cd_profiles_old_mmc(struct udev *udev, int fd) { struct scsi_cmd sc; int err; unsigned char header[32]; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x51); scsi_cmd_set(udev, &sc, 8, sizeof(header)); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ DISC INFORMATION", err); if (cd_media == 1) { info(udev, "no current profile, but disc is present; assuming CD-ROM\n"); cd_media_cd_rom = 1; return 0; } else { info(udev, "no current profile, assuming no media\n"); return -1; } }; cd_media = 1; if (header[2] & 16) { cd_media_cd_rw = 1; info(udev, "profile 0x0a media_cd_rw\n"); } else if ((header[2] & 3) < 2 && cd_cd_r) { cd_media_cd_r = 1; info(udev, "profile 0x09 media_cd_r\n"); } else { cd_media_cd_rom = 1; info(udev, "profile 0x08 media_cd_rom\n"); } return 0; } /* returns 0 if media was detected */ static int cd_profiles(struct udev *udev, int fd) { struct scsi_cmd sc; unsigned char features[65530]; unsigned int cur_profile = 0; unsigned int len; unsigned int i; int err; int ret; ret = -1; /* First query the current profile */ scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x46); scsi_cmd_set(udev, &sc, 8, 8); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, features, 8); if ((err != 0)) { info_scsi_cmd_err(udev, "GET CONFIGURATION", err); /* handle pre-MMC2 drives which do not support GET CONFIGURATION */ if (SK(err) == 0x5 && ASC(err) == 0x20) { info(udev, "drive is pre-MMC2 and does not support 46h get configuration command\n"); info(udev, "trying to work around the problem\n"); ret = cd_profiles_old_mmc(udev, fd); } goto out; } cur_profile = features[6] << 8 | features[7]; if (cur_profile > 0) { info(udev, "current profile 0x%02x\n", cur_profile); feature_profile_media (udev, cur_profile); ret = 0; /* we have media */ } else { info(udev, "no current profile, assuming no media\n"); } len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; info(udev, "GET CONFIGURATION: size of features buffer 0x%04x\n", len); if (len > sizeof(features)) { info(udev, "can not get features in a single query, truncating\n"); len = sizeof(features); } else if (len <= 8) { len = sizeof(features); } /* Now get the full feature buffer */ scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x46); scsi_cmd_set(udev, &sc, 7, ( len >> 8 ) & 0xff); scsi_cmd_set(udev, &sc, 8, len & 0xff); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, features, len); if ((err != 0)) { info_scsi_cmd_err(udev, "GET CONFIGURATION", err); return -1; } /* parse the length once more, in case the drive decided to have other features suddenly :) */ len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; info(udev, "GET CONFIGURATION: size of features buffer 0x%04x\n", len); if (len > sizeof(features)) { info(udev, "can not get features in a single query, truncating\n"); len = sizeof(features); } /* device features */ for (i = 8; i+4 < len; i += (4 + features[i+3])) { unsigned int feature; feature = features[i] << 8 | features[i+1]; switch (feature) { case 0x00: info(udev, "GET CONFIGURATION: feature 'profiles', with %i entries\n", features[i+3] / 4); feature_profiles(udev, &features[i]+4, features[i+3]); break; default: info(udev, "GET CONFIGURATION: feature 0x%04x , with 0x%02x bytes\n", feature, features[i+3]); break; } } out: return ret; } static int cd_media_info(struct udev *udev, int fd) { struct scsi_cmd sc; unsigned char header[32]; static const char *media_status[] = { "blank", "appendable", "complete", "other" }; int err; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x51); scsi_cmd_set(udev, &sc, 8, sizeof(header) & 0xff); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ DISC INFORMATION", err); return -1; }; cd_media = 1; info(udev, "disk type %02x\n", header[8]); info(udev, "hardware reported media status: %s\n", media_status[header[2] & 3]); /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */ if (!cd_media_cd_rom) cd_media_state = media_status[header[2] & 3]; /* fresh DVD-RW in restricted overwite mode reports itself as * "appendable"; change it to "blank" to make it consistent with what * gets reported after blanking, and what userspace expects */ if (cd_media_dvd_rw_ro && (header[2] & 3) == 1) cd_media_state = media_status[0]; /* DVD+RW discs (and DVD-RW in restricted mode) once formatted are * always "complete", DVD-RAM are "other" or "complete" if the disc is * write protected; we need to check the contents if it is blank */ if ((cd_media_dvd_rw_ro || cd_media_dvd_plus_rw || cd_media_dvd_plus_rw_dl || cd_media_dvd_ram) && (header[2] & 3) > 1) { unsigned char buffer[32 * 2048]; unsigned char result, len; int block, offset; if (cd_media_dvd_ram) { /* a write protected dvd-ram may report "complete" status */ unsigned char dvdstruct[8]; unsigned char format[12]; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0xAD); scsi_cmd_set(udev, &sc, 7, 0xC0); scsi_cmd_set(udev, &sc, 9, sizeof(dvdstruct)); scsi_cmd_set(udev, &sc, 11, 0); err = scsi_cmd_run(udev, &sc, fd, dvdstruct, sizeof(dvdstruct)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ DVD STRUCTURE", err); return -1; } if (dvdstruct[4] & 0x02) { cd_media_state = media_status[2]; info(udev, "write-protected DVD-RAM media inserted\n"); goto determined; } /* let's make sure we don't try to read unformatted media */ scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x23); scsi_cmd_set(udev, &sc, 8, sizeof(format)); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, format, sizeof(format)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ DVD FORMAT CAPACITIES", err); return -1; } len = format[3]; if (len & 7 || len < 16) { info(udev, "invalid format capacities length\n"); return -1; } switch(format[8] & 3) { case 1: info(udev, "unformatted DVD-RAM media inserted\n"); /* This means that last format was interrupted * or failed, blank dvd-ram discs are factory * formatted. Take no action here as it takes * quite a while to reformat a dvd-ram and it's * not automatically started */ goto determined; case 2: info(udev, "formatted DVD-RAM media inserted\n"); break; case 3: cd_media = 0; //return no media info(udev, "format capacities returned no media\n"); return -1; } } /* Take a closer look at formatted media (unformatted DVD+RW * has "blank" status", DVD-RAM was examined earlier) and check * for ISO and UDF PVDs or a fs superblock presence and do it * in one ioctl (we need just sectors 0 and 16) */ scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x28); scsi_cmd_set(udev, &sc, 5, 0); scsi_cmd_set(udev, &sc, 8, 32); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, buffer, sizeof(buffer)); if ((err != 0)) { cd_media = 0; info_scsi_cmd_err(udev, "READ FIRST 32 BLOCKS", err); return -1; } /* if any non-zero data is found in sector 16 (iso and udf) or * eventually 0 (fat32 boot sector, ext2 superblock, etc), disc * is assumed non-blank */ result = 0; for (block = 32768; block >= 0 && !result; block -= 32768) { offset = block; while (offset < (block + 2048) && !result) { result = buffer [offset]; offset++; } } if (!result) { cd_media_state = media_status[0]; info(udev, "no data in blocks 0 or 16, assuming blank\n"); } else { info(udev, "data in blocks 0 or 16, assuming complete\n"); } } determined: /* "other" is e. g. DVD-RAM, can't append sessions there; DVDs in * restricted overwrite mode can never append, only in sequential mode */ if ((header[2] & 3) < 2 && !cd_media_dvd_rw_ro) cd_media_session_next = header[10] << 8 | header[5]; cd_media_session_count = header[9] << 8 | header[4]; cd_media_track_count = header[11] << 8 | header[6]; return 0; } static int cd_media_toc(struct udev *udev, int fd) { struct scsi_cmd sc; unsigned char header[12]; unsigned char toc[65536]; unsigned int len, i, num_tracks; unsigned char *p; int err; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x43); scsi_cmd_set(udev, &sc, 6, 1); scsi_cmd_set(udev, &sc, 8, sizeof(header) & 0xff); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ TOC", err); return -1; } len = (header[0] << 8 | header[1]) + 2; info(udev, "READ TOC: len: %d, start track: %d, end track: %d\n", len, header[2], header[3]); if (len > sizeof(toc)) return -1; if (len < 2) return -1; /* 2: first track, 3: last track */ num_tracks = header[3] - header[2] + 1; /* empty media has no tracks */ if (len < 8) return 0; scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x43); scsi_cmd_set(udev, &sc, 6, header[2]); /* First Track/Session Number */ scsi_cmd_set(udev, &sc, 7, (len >> 8) & 0xff); scsi_cmd_set(udev, &sc, 8, len & 0xff); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, toc, len); if ((err != 0)) { info_scsi_cmd_err(udev, "READ TOC (tracks)", err); return -1; } /* Take care to not iterate beyond the last valid track as specified in * the TOC, but also avoid going beyond the TOC length, just in case * the last track number is invalidly large */ for (p = toc+4, i = 4; i < len-8 && num_tracks > 0; i += 8, p += 8, --num_tracks) { unsigned int block; unsigned int is_data_track; is_data_track = (p[1] & 0x04) != 0; block = p[4] << 24 | p[5] << 16 | p[6] << 8 | p[7]; info(udev, "track=%u info=0x%x(%s) start_block=%u\n", p[2], p[1] & 0x0f, is_data_track ? "data":"audio", block); if (is_data_track) cd_media_track_count_data++; else cd_media_track_count_audio++; } scsi_cmd_init(udev, &sc); scsi_cmd_set(udev, &sc, 0, 0x43); scsi_cmd_set(udev, &sc, 2, 1); /* Session Info */ scsi_cmd_set(udev, &sc, 8, sizeof(header)); scsi_cmd_set(udev, &sc, 9, 0); err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); if ((err != 0)) { info_scsi_cmd_err(udev, "READ TOC (multi session)", err); return -1; } len = header[4+4] << 24 | header[4+5] << 16 | header[4+6] << 8 | header[4+7]; info(udev, "last track %u starts at block %u\n", header[4+2], len); cd_media_session_last_offset = (unsigned long long int)len * 2048; return 0; } int main(int argc, char *argv[]) { struct udev *udev; static const struct option options[] = { { "lock-media", no_argument, NULL, 'l' }, { "unlock-media", no_argument, NULL, 'u' }, { "eject-media", no_argument, NULL, 'e' }, { "debug", no_argument, NULL, 'd' }, { "help", no_argument, NULL, 'h' }, {} }; bool eject = false; bool lock = false; bool unlock = false; const char *node = NULL; int fd = -1; int cnt; int rc = 0; udev = udev_new(); if (udev == NULL) goto exit; udev_log_init("cdrom_id"); udev_set_log_fn(udev, log_fn); while (1) { int option; option = getopt_long(argc, argv, "deluh", options, NULL); if (option == -1) break; switch (option) { case 'l': lock = true; break; case 'u': unlock = true; break; case 'e': eject = true; break; case 'd': debug = true; if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; case 'h': printf("Usage: cdrom_id [options] \n" " --lock-media lock the media (to enable eject request events)\n" " --unlock-media unlock the media\n" " --eject-media eject the media\n" " --debug debug to stderr\n" " --help print this help text\n\n"); goto exit; default: rc = 1; goto exit; } } node = argv[optind]; if (!node) { err(udev, "no device\n"); fprintf(stderr, "no device\n"); rc = 1; goto exit; } srand((unsigned int)getpid()); for (cnt = 20; cnt > 0; cnt--) { struct timespec duration; fd = open(node, O_RDONLY|O_NONBLOCK|(is_mounted(node) ? 0 : O_EXCL)); if (fd >= 0 || errno != EBUSY) break; duration.tv_sec = 0; duration.tv_nsec = (100 * 1000 * 1000) + (rand() % 100 * 1000 * 1000); nanosleep(&duration, NULL); } if (fd < 0) { info(udev, "unable to open '%s'\n", node); fprintf(stderr, "unable to open '%s'\n", node); rc = 1; goto exit; } info(udev, "probing: '%s'\n", node); /* same data as original cdrom_id */ if (cd_capability_compat(udev, fd) < 0) { rc = 1; goto exit; } /* check for media - don't bail if there's no media as we still need to * to read profiles */ cd_media_compat(udev, fd); /* check if drive talks MMC */ if (cd_inquiry(udev, fd) < 0) goto work; /* read drive and possibly current profile */ if (cd_profiles(udev, fd) != 0) goto work; /* at this point we are guaranteed to have media in the drive - find out more about it */ /* get session/track info */ cd_media_toc(udev, fd); /* get writable media state */ cd_media_info(udev, fd); work: /* lock the media, so we enable eject button events */ if (lock && cd_media) { info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (lock)\n"); media_lock(udev, fd, true); } if (unlock && cd_media) { info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); media_lock(udev, fd, false); } if (eject) { info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); media_lock(udev, fd, false); info(udev, "START_STOP_UNIT (eject)\n"); media_eject(udev, fd); } printf("ID_CDROM=1\n"); if (cd_cd_rom) printf("ID_CDROM_CD=1\n"); if (cd_cd_r) printf("ID_CDROM_CD_R=1\n"); if (cd_cd_rw) printf("ID_CDROM_CD_RW=1\n"); if (cd_dvd_rom) printf("ID_CDROM_DVD=1\n"); if (cd_dvd_r) printf("ID_CDROM_DVD_R=1\n"); if (cd_dvd_rw) printf("ID_CDROM_DVD_RW=1\n"); if (cd_dvd_ram) printf("ID_CDROM_DVD_RAM=1\n"); if (cd_dvd_plus_r) printf("ID_CDROM_DVD_PLUS_R=1\n"); if (cd_dvd_plus_rw) printf("ID_CDROM_DVD_PLUS_RW=1\n"); if (cd_dvd_plus_r_dl) printf("ID_CDROM_DVD_PLUS_R_DL=1\n"); if (cd_dvd_plus_rw_dl) printf("ID_CDROM_DVD_PLUS_RW_DL=1\n"); if (cd_bd) printf("ID_CDROM_BD=1\n"); if (cd_bd_r) printf("ID_CDROM_BD_R=1\n"); if (cd_bd_re) printf("ID_CDROM_BD_RE=1\n"); if (cd_hddvd) printf("ID_CDROM_HDDVD=1\n"); if (cd_hddvd_r) printf("ID_CDROM_HDDVD_R=1\n"); if (cd_hddvd_rw) printf("ID_CDROM_HDDVD_RW=1\n"); if (cd_mo) printf("ID_CDROM_MO=1\n"); if (cd_mrw) printf("ID_CDROM_MRW=1\n"); if (cd_mrw_w) printf("ID_CDROM_MRW_W=1\n"); if (cd_media) printf("ID_CDROM_MEDIA=1\n"); if (cd_media_mo) printf("ID_CDROM_MEDIA_MO=1\n"); if (cd_media_mrw) printf("ID_CDROM_MEDIA_MRW=1\n"); if (cd_media_mrw_w) printf("ID_CDROM_MEDIA_MRW_W=1\n"); if (cd_media_cd_rom) printf("ID_CDROM_MEDIA_CD=1\n"); if (cd_media_cd_r) printf("ID_CDROM_MEDIA_CD_R=1\n"); if (cd_media_cd_rw) printf("ID_CDROM_MEDIA_CD_RW=1\n"); if (cd_media_dvd_rom) printf("ID_CDROM_MEDIA_DVD=1\n"); if (cd_media_dvd_r) printf("ID_CDROM_MEDIA_DVD_R=1\n"); if (cd_media_dvd_ram) printf("ID_CDROM_MEDIA_DVD_RAM=1\n"); if (cd_media_dvd_rw) printf("ID_CDROM_MEDIA_DVD_RW=1\n"); if (cd_media_dvd_plus_r) printf("ID_CDROM_MEDIA_DVD_PLUS_R=1\n"); if (cd_media_dvd_plus_rw) printf("ID_CDROM_MEDIA_DVD_PLUS_RW=1\n"); if (cd_media_dvd_plus_rw_dl) printf("ID_CDROM_MEDIA_DVD_PLUS_RW_DL=1\n"); if (cd_media_dvd_plus_r_dl) printf("ID_CDROM_MEDIA_DVD_PLUS_R_DL=1\n"); if (cd_media_bd) printf("ID_CDROM_MEDIA_BD=1\n"); if (cd_media_bd_r) printf("ID_CDROM_MEDIA_BD_R=1\n"); if (cd_media_bd_re) printf("ID_CDROM_MEDIA_BD_RE=1\n"); if (cd_media_hddvd) printf("ID_CDROM_MEDIA_HDDVD=1\n"); if (cd_media_hddvd_r) printf("ID_CDROM_MEDIA_HDDVD_R=1\n"); if (cd_media_hddvd_rw) printf("ID_CDROM_MEDIA_HDDVD_RW=1\n"); if (cd_media_state != NULL) printf("ID_CDROM_MEDIA_STATE=%s\n", cd_media_state); if (cd_media_session_next > 0) printf("ID_CDROM_MEDIA_SESSION_NEXT=%d\n", cd_media_session_next); if (cd_media_session_count > 0) printf("ID_CDROM_MEDIA_SESSION_COUNT=%d\n", cd_media_session_count); if (cd_media_session_count > 1 && cd_media_session_last_offset > 0) printf("ID_CDROM_MEDIA_SESSION_LAST_OFFSET=%llu\n", cd_media_session_last_offset); if (cd_media_track_count > 0) printf("ID_CDROM_MEDIA_TRACK_COUNT=%d\n", cd_media_track_count); if (cd_media_track_count_audio > 0) printf("ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=%d\n", cd_media_track_count_audio); if (cd_media_track_count_data > 0) printf("ID_CDROM_MEDIA_TRACK_COUNT_DATA=%d\n", cd_media_track_count_data); exit: if (fd >= 0) close(fd); udev_unref(udev); udev_log_close(); return rc; } udev-182/PaxHeaders.12492/aclocal.m40000644000521600052160000000013211731430312015216 xustar000000000000000030 mtime=1332097226.182435898 30 atime=1332097226.463435904 30 ctime=1332097352.028438897 udev-182/aclocal.m40000664000521600052160000012400511731430312013624 0ustar00kaykay00000000000000# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT]) ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .]) ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/gtk-doc.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) udev-182/PaxHeaders.12492/COPYING0000644000521600052160000000013211711107662014420 xustar000000000000000030 mtime=1327796146.944827034 30 atime=1332083869.607117628 30 ctime=1332097352.841438915 udev-182/COPYING0000664000521600052160000004325411711107662013034 0ustar00kaykay00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. udev-182/PaxHeaders.12492/configure0000644000521600052160000000013211731430313015263 xustar000000000000000030 mtime=1332097227.002435918 30 atime=1332097285.962437322 30 ctime=1332097352.836438915 udev-182/configure0000775000521600052160000165034411731430313013707 0ustar00kaykay00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for udev 182. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: linux-hotplug@vger.kernel.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='udev' PACKAGE_TARNAME='udev' PACKAGE_VERSION='182' PACKAGE_STRING='udev 182' PACKAGE_BUGREPORT='linux-hotplug@vger.kernel.org' PACKAGE_URL='http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html' ac_unique_file="src/udevd.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_default_prefix=/usr ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS my_CFLAGS ENABLE_FLOPPY_FALSE ENABLE_FLOPPY_TRUE ENABLE_RULE_GENERATOR_FALSE ENABLE_RULE_GENERATOR_TRUE ENABLE_MTD_PROBE_FALSE ENABLE_MTD_PROBE_TRUE ENABLE_KEYMAP_FALSE ENABLE_KEYMAP_TRUE INCLUDE_PREFIX GPERF ENABLE_GUDEV_FALSE ENABLE_GUDEV_TRUE ENABLE_INTROSPECTION_FALSE ENABLE_INTROSPECTION_TRUE GIRTYPELIBDIR GIRDIR G_IR_GENERATE G_IR_COMPILER G_IR_SCANNER INTROSPECTION_LIBS INTROSPECTION_CFLAGS GLIB_LIBS GLIB_CFLAGS WITH_SYSTEMD_FALSE WITH_SYSTEMD_TRUE systemdsystemunitdir FIRMWARE_PATH PCI_DATABASE USB_DATABASE USBUTILS_LIBS USBUTILS_CFLAGS ENABLE_MANPAGES_FALSE ENABLE_MANPAGES_TRUE WITH_SELINUX_FALSE WITH_SELINUX_TRUE SELINUX_LIBS rootlib_execdir rootprefix KMOD_LIBS KMOD_CFLAGS BLKID_LIBS BLKID_CFLAGS HAVE_XSLTPROC_FALSE HAVE_XSLTPROC_TRUE XSLTPROC GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile enable_static enable_shared with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf with_rootprefix with_rootlibdir with_selinux enable_debug enable_logging enable_manpages with_usb_ids_path with_pci_ids_path with_firmware_path with_systemdsystemunitdir enable_gudev enable_introspection enable_keymap enable_mtd_probe enable_rule_generator enable_floppy ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS BLKID_CFLAGS BLKID_LIBS KMOD_CFLAGS KMOD_LIBS USBUTILS_CFLAGS USBUTILS_LIBS GLIB_CFLAGS GLIB_LIBS INTROSPECTION_CFLAGS INTROSPECTION_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures udev 182 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/udev] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of udev 182:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-largefile omit support for large files --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-debug enable debug messages [default=disabled] --disable-logging disable system logging [default=enabled] --disable-manpages disable man pages [default=enabled] --disable-gudev disable Gobject libudev support [default=enabled] --disable-introspection disable GObject introspection [default=enabled] --disable-keymap disable keymap fixup support [default=enabled] --disable-mtd_probe disable MTD support [default=enabled] --enable-rule_generator enable persistent network + cdrom links support [default=disabled] --enable-floppy enable legacy floppy support [default=disabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-html-dir=PATH path to installed docs --with-rootprefix=DIR rootfs directory prefix for config files and kernel modules --with-rootlibdir=DIR rootfs directory to install shared libraries --with-selinux enable SELinux support --with-usb-ids-path=DIR Path to usb.ids file --with-pci-ids-path=DIR Path to pci.ids file --with-firmware-path=DIR[:DIR[...]] Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware) --with-systemdsystemunitdir=DIR Directory for systemd service files Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config BLKID_CFLAGS C compiler flags for BLKID, overriding pkg-config BLKID_LIBS linker flags for BLKID, overriding pkg-config KMOD_CFLAGS C compiler flags for KMOD, overriding pkg-config KMOD_LIBS linker flags for KMOD, overriding pkg-config USBUTILS_CFLAGS C compiler flags for USBUTILS, overriding pkg-config USBUTILS_LIBS linker flags for USBUTILS, overriding pkg-config GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config INTROSPECTION_CFLAGS C compiler flags for INTROSPECTION, overriding pkg-config INTROSPECTION_LIBS linker flags for INTROSPECTION, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . udev home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF udev configure 182 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------------- ## ## Report this to linux-hotplug@vger.kernel.org ## ## -------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by udev $as_me 182, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='udev' VERSION='182' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5 $as_echo_n "checking how to create a pax tar archive... " >&6; } # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' _am_tools=${am_cv_prog_tar_pax-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x pax -w "$$tardir"' am__tar_='pax -L -x pax -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H pax -L' am__tar_='find "$tardir" -print | cpio -o -H pax -L' am__untar='cpio -i -H pax -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_pax}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_pax+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_pax=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5 $as_echo "$am_cv_prog_tar_pax" >&6; } DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_REBASE+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "You need to have gtk-doc >= 1.10 installed to build $PACKAGE_NAME" "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 $as_echo_n "checking for GTKDOC_DEPS... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0) were not met: $GTKDOC_DEPS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$XSLTPROC" != x; then HAVE_XSLTPROC_TRUE= HAVE_XSLTPROC_FALSE='#' else HAVE_XSLTPROC_TRUE='#' HAVE_XSLTPROC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "POSIX RT library not found" "$LINENO" 5 fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLKID" >&5 $as_echo_n "checking for BLKID... " >&6; } if test -n "$BLKID_CFLAGS"; then pkg_cv_BLKID_CFLAGS="$BLKID_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid >= 2.20\""; } >&5 ($PKG_CONFIG --exists --print-errors "blkid >= 2.20") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BLKID_CFLAGS=`$PKG_CONFIG --cflags "blkid >= 2.20" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$BLKID_LIBS"; then pkg_cv_BLKID_LIBS="$BLKID_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid >= 2.20\""; } >&5 ($PKG_CONFIG --exists --print-errors "blkid >= 2.20") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BLKID_LIBS=`$PKG_CONFIG --libs "blkid >= 2.20" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then BLKID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "blkid >= 2.20" 2>&1` else BLKID_PKG_ERRORS=`$PKG_CONFIG --print-errors "blkid >= 2.20" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$BLKID_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (blkid >= 2.20) were not met: $BLKID_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables BLKID_CFLAGS and BLKID_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables BLKID_CFLAGS and BLKID_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else BLKID_CFLAGS=$pkg_cv_BLKID_CFLAGS BLKID_LIBS=$pkg_cv_BLKID_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for KMOD" >&5 $as_echo_n "checking for KMOD... " >&6; } if test -n "$KMOD_CFLAGS"; then pkg_cv_KMOD_CFLAGS="$KMOD_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libkmod >= 5\""; } >&5 ($PKG_CONFIG --exists --print-errors "libkmod >= 5") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_KMOD_CFLAGS=`$PKG_CONFIG --cflags "libkmod >= 5" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$KMOD_LIBS"; then pkg_cv_KMOD_LIBS="$KMOD_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libkmod >= 5\""; } >&5 ($PKG_CONFIG --exists --print-errors "libkmod >= 5") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_KMOD_LIBS=`$PKG_CONFIG --libs "libkmod >= 5" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then KMOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libkmod >= 5" 2>&1` else KMOD_PKG_ERRORS=`$PKG_CONFIG --print-errors "libkmod >= 5" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$KMOD_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libkmod >= 5) were not met: $KMOD_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables KMOD_CFLAGS and KMOD_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables KMOD_CFLAGS and KMOD_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else KMOD_CFLAGS=$pkg_cv_KMOD_CFLAGS KMOD_LIBS=$pkg_cv_KMOD_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Check whether --with-rootprefix was given. if test "${with_rootprefix+set}" = set; then : withval=$with_rootprefix; else with_rootprefix=${ac_default_prefix} fi rootprefix=$with_rootprefix # Check whether --with-rootlibdir was given. if test "${with_rootlibdir+set}" = set; then : withval=$with_rootlibdir; else with_rootlibdir=$libdir fi rootlib_execdir=$with_rootlibdir # Check whether --with-selinux was given. if test "${with_selinux+set}" = set; then : withval=$with_selinux; else with_selinux=no fi if test "x$with_selinux" = "xyes"; then : LIBS_save=$LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprevcon in -lselinux" >&5 $as_echo_n "checking for getprevcon in -lselinux... " >&6; } if ${ac_cv_lib_selinux_getprevcon+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lselinux $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getprevcon (); int main () { return getprevcon (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_selinux_getprevcon=yes else ac_cv_lib_selinux_getprevcon=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_getprevcon" >&5 $as_echo "$ac_cv_lib_selinux_getprevcon" >&6; } if test "x$ac_cv_lib_selinux_getprevcon" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSELINUX 1 _ACEOF LIBS="-lselinux $LIBS" else as_fn_error $? "SELinux selected but libselinux not found" "$LINENO" 5 fi LIBS=$LIBS_save SELINUX_LIBS="-lselinux -lsepol" $as_echo "#define WITH_SELINUX 1 " >>confdefs.h fi if test "x$with_selinux" = "xyes"; then WITH_SELINUX_TRUE= WITH_SELINUX_FALSE='#' else WITH_SELINUX_TRUE='#' WITH_SELINUX_FALSE= fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; else enable_debug=no fi if test "x$enable_debug" = "xyes"; then : $as_echo "#define ENABLE_DEBUG 1" >>confdefs.h fi # Check whether --enable-logging was given. if test "${enable_logging+set}" = set; then : enableval=$enable_logging; else enable_logging=yes fi if test "x$enable_logging" = "xyes"; then : $as_echo "#define ENABLE_LOGGING 1" >>confdefs.h fi # Check whether --enable-manpages was given. if test "${enable_manpages+set}" = set; then : enableval=$enable_manpages; else enable_manpages=yes fi if test "x$enable_manpages" = "xyes"; then ENABLE_MANPAGES_TRUE= ENABLE_MANPAGES_FALSE='#' else ENABLE_MANPAGES_TRUE='#' ENABLE_MANPAGES_FALSE= fi if test "x$cross_compiling" = "xno" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/share/pci.ids" >&5 $as_echo_n "checking for /usr/share/pci.ids... " >&6; } if ${ac_cv_file__usr_share_pci_ids+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/usr/share/pci.ids"; then ac_cv_file__usr_share_pci_ids=yes else ac_cv_file__usr_share_pci_ids=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_share_pci_ids" >&5 $as_echo "$ac_cv_file__usr_share_pci_ids" >&6; } if test "x$ac_cv_file__usr_share_pci_ids" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__USR_SHARE_PCI_IDS 1 _ACEOF pciids=/usr/share/pci.ids fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/share/hwdata/pci.ids" >&5 $as_echo_n "checking for /usr/share/hwdata/pci.ids... " >&6; } if ${ac_cv_file__usr_share_hwdata_pci_ids+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/usr/share/hwdata/pci.ids"; then ac_cv_file__usr_share_hwdata_pci_ids=yes else ac_cv_file__usr_share_hwdata_pci_ids=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_share_hwdata_pci_ids" >&5 $as_echo "$ac_cv_file__usr_share_hwdata_pci_ids" >&6; } if test "x$ac_cv_file__usr_share_hwdata_pci_ids" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__USR_SHARE_HWDATA_PCI_IDS 1 _ACEOF pciids=/usr/share/hwdata/pci.ids fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /usr/share/misc/pci.ids" >&5 $as_echo_n "checking for /usr/share/misc/pci.ids... " >&6; } if ${ac_cv_file__usr_share_misc_pci_ids+:} false; then : $as_echo_n "(cached) " >&6 else test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "/usr/share/misc/pci.ids"; then ac_cv_file__usr_share_misc_pci_ids=yes else ac_cv_file__usr_share_misc_pci_ids=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__usr_share_misc_pci_ids" >&5 $as_echo "$ac_cv_file__usr_share_misc_pci_ids" >&6; } if test "x$ac_cv_file__usr_share_misc_pci_ids" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__USR_SHARE_MISC_PCI_IDS 1 _ACEOF pciids=/usr/share/misc/pci.ids fi fi # Check whether --with-usb-ids-path was given. if test "${with_usb_ids_path+set}" = set; then : withval=$with_usb_ids_path; USB_DATABASE=${withval} else if test -n "$usbids" ; then USB_DATABASE="$usbids" else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for USBUTILS" >&5 $as_echo_n "checking for USBUTILS... " >&6; } if test -n "$USBUTILS_CFLAGS"; then pkg_cv_USBUTILS_CFLAGS="$USBUTILS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"usbutils >= 0.82\""; } >&5 ($PKG_CONFIG --exists --print-errors "usbutils >= 0.82") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_USBUTILS_CFLAGS=`$PKG_CONFIG --cflags "usbutils >= 0.82" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$USBUTILS_LIBS"; then pkg_cv_USBUTILS_LIBS="$USBUTILS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"usbutils >= 0.82\""; } >&5 ($PKG_CONFIG --exists --print-errors "usbutils >= 0.82") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_USBUTILS_LIBS=`$PKG_CONFIG --libs "usbutils >= 0.82" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then USBUTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "usbutils >= 0.82" 2>&1` else USBUTILS_PKG_ERRORS=`$PKG_CONFIG --print-errors "usbutils >= 0.82" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$USBUTILS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (usbutils >= 0.82) were not met: $USBUTILS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables USBUTILS_CFLAGS and USBUTILS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables USBUTILS_CFLAGS and USBUTILS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else USBUTILS_CFLAGS=$pkg_cv_USBUTILS_CFLAGS USBUTILS_LIBS=$pkg_cv_USBUTILS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi USB_DATABASE=$($PKG_CONFIG --variable=usbids usbutils) fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for USB database location" >&5 $as_echo_n "checking for USB database location... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USB_DATABASE" >&5 $as_echo "$USB_DATABASE" >&6; } # Check whether --with-pci-ids-path was given. if test "${with_pci_ids_path+set}" = set; then : withval=$with_pci_ids_path; PCI_DATABASE=${withval} else if test -n "$pciids" ; then PCI_DATABASE="$pciids" else as_fn_error $? "pci.ids not found, try --with-pci-ids-path=" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PCI database location" >&5 $as_echo_n "checking for PCI database location... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCI_DATABASE" >&5 $as_echo "$PCI_DATABASE" >&6; } # Check whether --with-firmware-path was given. if test "${with_firmware_path+set}" = set; then : withval=$with_firmware_path; else with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware" fi 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 FIRMWARE_PATH=$FIRMWARE_PATH # Check whether --with-systemdsystemunitdir was given. if test "${with_systemdsystemunitdir+set}" = set; then : withval=$with_systemdsystemunitdir; else with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) fi if test "x$with_systemdsystemunitdir" != "xno"; then : systemdsystemunitdir=$with_systemdsystemunitdir fi if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != "xno" ; then WITH_SYSTEMD_TRUE= WITH_SYSTEMD_FALSE='#' else WITH_SYSTEMD_TRUE='#' WITH_SYSTEMD_FALSE= fi # ------------------------------------------------------------------------------ # GUdev - libudev gobject interface # ------------------------------------------------------------------------------ # Check whether --enable-gudev was given. if test "${enable_gudev+set}" = set; then : enableval=$enable_gudev; else enable_gudev=yes fi if test "x$enable_gudev" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0) were not met: $GLIB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Check whether --enable-introspection was given. if test "${enable_introspection+set}" = set; then : enableval=$enable_introspection; else enable_introspection=yes fi if test "x$enable_introspection" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INTROSPECTION" >&5 $as_echo_n "checking for INTROSPECTION... " >&6; } if test -n "$INTROSPECTION_CFLAGS"; then pkg_cv_INTROSPECTION_CFLAGS="$INTROSPECTION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags "gobject-introspection-1.0 >= 0.6.2" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTROSPECTION_LIBS"; then pkg_cv_INTROSPECTION_LIBS="$INTROSPECTION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTROSPECTION_LIBS=`$PKG_CONFIG --libs "gobject-introspection-1.0 >= 0.6.2" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTROSPECTION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gobject-introspection-1.0 >= 0.6.2" 2>&1` else INTROSPECTION_PKG_ERRORS=`$PKG_CONFIG --print-errors "gobject-introspection-1.0 >= 0.6.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTROSPECTION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gobject-introspection-1.0 >= 0.6.2) were not met: $INTROSPECTION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTROSPECTION_CFLAGS and INTROSPECTION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTROSPECTION_CFLAGS and INTROSPECTION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else INTROSPECTION_CFLAGS=$pkg_cv_INTROSPECTION_CFLAGS INTROSPECTION_LIBS=$pkg_cv_INTROSPECTION_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define ENABLE_INTROSPECTION 1" >>confdefs.h G_IR_SCANNER=$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0) G_IR_COMPILER=$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0) G_IR_GENERATE=$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0) GIRDIR=$($PKG_CONFIG --define-variable=datadir=${datadir} --variable=girdir gobject-introspection-1.0) GIRTYPELIBDIR=$($PKG_CONFIG --define-variable=libdir=${libdir} --variable=typelibdir gobject-introspection-1.0) fi if test "x$enable_introspection" = "xyes"; then ENABLE_INTROSPECTION_TRUE= ENABLE_INTROSPECTION_FALSE='#' else ENABLE_INTROSPECTION_TRUE='#' ENABLE_INTROSPECTION_FALSE= fi if test "x$enable_gudev" = "xyes"; then ENABLE_GUDEV_TRUE= ENABLE_GUDEV_FALSE='#' else ENABLE_GUDEV_TRUE='#' ENABLE_GUDEV_FALSE= fi # ------------------------------------------------------------------------------ # keymap - map custom hardware's multimedia keys # ------------------------------------------------------------------------------ # Check whether --enable-keymap was given. if test "${enable_keymap+set}" = set; then : enableval=$enable_keymap; else enable_keymap=yes fi if test "x$enable_keymap" = "xyes"; then : # Extract the first word of "gperf", so it can be a program name with args. set dummy gperf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GPERF+:} false; then : $as_echo_n "(cached) " >&6 else case $GPERF in [\\/]* | ?:[\\/]*) ac_cv_path_GPERF="$GPERF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GPERF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GPERF=$ac_cv_path_GPERF if test -n "$GPERF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPERF" >&5 $as_echo "$GPERF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$GPERF"; then as_fn_error $? "gperf is needed" "$LINENO" 5 fi ac_fn_c_check_header_mongrel "$LINENO" "linux/input.h" "ac_cv_header_linux_input_h" "$ac_includes_default" if test "x$ac_cv_header_linux_input_h" = xyes; then : : else as_fn_error $? "kernel headers not found" "$LINENO" 5 fi INCLUDE_PREFIX=$(echo '#include ' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}') fi if test "x$enable_keymap" = "xyes"; then ENABLE_KEYMAP_TRUE= ENABLE_KEYMAP_FALSE='#' else ENABLE_KEYMAP_TRUE='#' ENABLE_KEYMAP_FALSE= fi # ------------------------------------------------------------------------------ # mtd_probe - autoloads FTL module for mtd devices # ------------------------------------------------------------------------------ # Check whether --enable-mtd_probe was given. if test "${enable_mtd_probe+set}" = set; then : enableval=$enable_mtd_probe; else enable_mtd_probe=yes fi if test "x$enable_mtd_probe" = "xyes"; then ENABLE_MTD_PROBE_TRUE= ENABLE_MTD_PROBE_FALSE='#' else ENABLE_MTD_PROBE_TRUE='#' ENABLE_MTD_PROBE_FALSE= fi # ------------------------------------------------------------------------------ # rule_generator - persistent network and optical device rule generator # ------------------------------------------------------------------------------ # Check whether --enable-rule_generator was given. if test "${enable_rule_generator+set}" = set; then : enableval=$enable_rule_generator; else enable_rule_generator=no fi if test "x$enable_rule_generator" = "xyes"; then ENABLE_RULE_GENERATOR_TRUE= ENABLE_RULE_GENERATOR_FALSE='#' else ENABLE_RULE_GENERATOR_TRUE='#' ENABLE_RULE_GENERATOR_FALSE= fi # ------------------------------------------------------------------------------ # create_floppy_devices - historical floppy kernel device nodes (/dev/fd0h1440, ...) # ------------------------------------------------------------------------------ # Check whether --enable-floppy was given. if test "${enable_floppy+set}" = set; then : enableval=$enable_floppy; else enable_floppy=no fi if test "x$enable_floppy" = "xyes"; then ENABLE_FLOPPY_TRUE= ENABLE_FLOPPY_FALSE='#' else ENABLE_FLOPPY_TRUE='#' ENABLE_FLOPPY_FALSE= fi 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_config_headers="$ac_config_headers config.h" ac_config_files="$ac_config_files Makefile src/docs/Makefile src/docs/version.xml src/gudev/docs/Makefile src/gudev/docs/version.xml" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSLTPROC_TRUE}" && test -z "${HAVE_XSLTPROC_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSLTPROC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SELINUX_TRUE}" && test -z "${WITH_SELINUX_FALSE}"; then as_fn_error $? "conditional \"WITH_SELINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_MANPAGES_TRUE}" && test -z "${ENABLE_MANPAGES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_MANPAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SYSTEMD_TRUE}" && test -z "${WITH_SYSTEMD_FALSE}"; then as_fn_error $? "conditional \"WITH_SYSTEMD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_INTROSPECTION_TRUE}" && test -z "${ENABLE_INTROSPECTION_FALSE}"; then as_fn_error $? "conditional \"ENABLE_INTROSPECTION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GUDEV_TRUE}" && test -z "${ENABLE_GUDEV_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GUDEV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_KEYMAP_TRUE}" && test -z "${ENABLE_KEYMAP_FALSE}"; then as_fn_error $? "conditional \"ENABLE_KEYMAP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_MTD_PROBE_TRUE}" && test -z "${ENABLE_MTD_PROBE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_MTD_PROBE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_RULE_GENERATOR_TRUE}" && test -z "${ENABLE_RULE_GENERATOR_FALSE}"; then as_fn_error $? "conditional \"ENABLE_RULE_GENERATOR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FLOPPY_TRUE}" && test -z "${ENABLE_FLOPPY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FLOPPY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by udev $as_me 182, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . udev home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ udev config.status 182 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/docs/Makefile") CONFIG_FILES="$CONFIG_FILES src/docs/Makefile" ;; "src/docs/version.xml") CONFIG_FILES="$CONFIG_FILES src/docs/version.xml" ;; "src/gudev/docs/Makefile") CONFIG_FILES="$CONFIG_FILES src/gudev/docs/Makefile" ;; "src/gudev/docs/version.xml") CONFIG_FILES="$CONFIG_FILES src/gudev/docs/version.xml" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: 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} " >&5 $as_echo " $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} " >&6; } udev-182/PaxHeaders.12492/Makefile.in0000644000521600052160000000013211731430315015426 xustar000000000000000030 mtime=1332097229.193435969 30 atime=1332097294.865437534 30 ctime=1332097352.820438915 udev-182/Makefile.in0000664000521600052160000073716311731430315014053 0ustar00kaykay00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2008-2012 Kay Sievers # Copyright (C) 2009 Diego Elio 'Flameeyes' Pettenò VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WITH_SELINUX_TRUE@am__append_1 = src/libudev-selinux-private.c @WITH_SYSTEMD_TRUE@am__append_2 = \ @WITH_SYSTEMD_TRUE@ src/udev.service.in \ @WITH_SYSTEMD_TRUE@ src/udev-trigger.service.in \ @WITH_SYSTEMD_TRUE@ src/udev-settle.service.in @WITH_SYSTEMD_TRUE@am__append_3 = \ @WITH_SYSTEMD_TRUE@ src/udev.service \ @WITH_SYSTEMD_TRUE@ src/udev-trigger.service \ @WITH_SYSTEMD_TRUE@ src/udev-settle.service @WITH_SYSTEMD_TRUE@am__append_4 = systemd-install-hook bin_PROGRAMS = udevadm$(EXEEXT) pkglibexec_PROGRAMS = udevd$(EXEEXT) ata_id$(EXEEXT) cdrom_id$(EXEEXT) \ collect$(EXEEXT) scsi_id$(EXEEXT) v4l_id$(EXEEXT) \ accelerometer$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) \ $(am__EXEEXT_3) # ------------------------------------------------------------------------------ @ENABLE_MANPAGES_TRUE@am__append_5 = \ @ENABLE_MANPAGES_TRUE@ src/udev.7 \ @ENABLE_MANPAGES_TRUE@ src/udevadm.8 \ @ENABLE_MANPAGES_TRUE@ src/udevd.8 check_PROGRAMS = test-libudev$(EXEEXT) test-udev$(EXEEXT) # ------------------------------------------------------------------------------ @ENABLE_GUDEV_TRUE@am__append_6 = src/gudev/docs @ENABLE_GUDEV_TRUE@am__append_7 = libgudev-1.0.la @ENABLE_GUDEV_TRUE@am__append_8 = src/gudev/gudev-1.0.pc @ENABLE_GUDEV_TRUE@am__append_9 = src/gudev/gudev-1.0.pc.in \ @ENABLE_GUDEV_TRUE@ src/gudev/COPYING \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevmarshal.list \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.h.template \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.c.template \ @ENABLE_GUDEV_TRUE@ src/gudev/gjs-example.js \ @ENABLE_GUDEV_TRUE@ src/gudev/seed-example-enum.js \ @ENABLE_GUDEV_TRUE@ src/gudev/seed-example.js @ENABLE_GUDEV_TRUE@am__append_10 = src/gudev/gudev-1.0.pc @ENABLE_GUDEV_TRUE@am__append_11 = $(nodist_libgudev_1_0_la_SOURCES) @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@am__append_12 = $(gir_DATA) $(typelibs_DATA) @ENABLE_GUDEV_TRUE@am__append_13 = libgudev-install-move-hook @ENABLE_GUDEV_TRUE@am__append_14 = libgudev-uninstall-move-hook @ENABLE_KEYMAP_TRUE@am__append_15 = $(nodist_keymap_SOURCES) @ENABLE_KEYMAP_TRUE@am__append_16 = keymap @ENABLE_KEYMAP_TRUE@am__append_17 = \ @ENABLE_KEYMAP_TRUE@ src/keymap/95-keymap.rules \ @ENABLE_KEYMAP_TRUE@ src/keymap/95-keyboard-force-release.rules @ENABLE_KEYMAP_TRUE@am__append_18 = src/keymap/findkeyboards @ENABLE_KEYMAP_TRUE@am__append_19 = src/keymap/keyboard-force-release.sh @ENABLE_KEYMAP_TRUE@am__append_20 = \ @ENABLE_KEYMAP_TRUE@ src/keymap/check-keymaps.sh \ @ENABLE_KEYMAP_TRUE@ src/keymap/keyboard-force-release.sh.in @ENABLE_KEYMAP_TRUE@am__append_21 = \ @ENABLE_KEYMAP_TRUE@ src/keymap/keys.txt \ @ENABLE_KEYMAP_TRUE@ src/keymap/keys-from-name.gperf \ @ENABLE_KEYMAP_TRUE@ src/keymap/keyboard-force-release.sh @ENABLE_KEYMAP_TRUE@am__append_22 = keymaps-distcheck-hook @ENABLE_MTD_PROBE_TRUE@am__append_23 = src/mtd_probe/75-probe_mtd.rules @ENABLE_MTD_PROBE_TRUE@am__append_24 = mtd_probe # ------------------------------------------------------------------------------ @ENABLE_RULE_GENERATOR_TRUE@am__append_25 = \ @ENABLE_RULE_GENERATOR_TRUE@ src/rule_generator/write_cd_rules \ @ENABLE_RULE_GENERATOR_TRUE@ src/rule_generator/write_net_rules @ENABLE_RULE_GENERATOR_TRUE@am__append_26 = \ @ENABLE_RULE_GENERATOR_TRUE@ src/rule_generator/rule_generator.functions @ENABLE_RULE_GENERATOR_TRUE@am__append_27 = \ @ENABLE_RULE_GENERATOR_TRUE@ src/rule_generator/75-cd-aliases-generator.rules \ @ENABLE_RULE_GENERATOR_TRUE@ src/rule_generator/75-persistent-net-generator.rules @ENABLE_FLOPPY_TRUE@am__append_28 = create_floppy_devices @ENABLE_FLOPPY_TRUE@am__append_29 = src/floppy/60-floppy.rules subdir = . DIST_COMMON = README $(am__configure_deps) $(am__dist_doc_DATA_DIST) \ $(am__dist_noinst_DATA_DIST) \ $(am__dist_systemdsystemunit_DATA_DIST) \ $(am__dist_udevhome_DATA_DIST) \ $(am__dist_udevhome_SCRIPTS_DIST) \ $(am__dist_udevkeymap_DATA_DIST) \ $(am__dist_udevkeymapforcerel_DATA_DIST) \ $(am__dist_udevrules_DATA_DIST) \ $(am__libgudev_include_HEADERS_DIST) $(dist_man_MANS) \ $(dist_udevconf_DATA) $(include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure COPYING ChangeLog INSTALL NEWS TODO \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(udevhomedir)" \ "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(man7dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(udevconfdir)" \ "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(udevkeymapdir)" \ "$(DESTDIR)$(udevkeymapforcereldir)" \ "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(girdir)" \ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(sharepkgconfigdir)" \ "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(typelibsdir)" \ "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libgudev_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = @ENABLE_GUDEV_TRUE@libgudev_1_0_la_DEPENDENCIES = libudev.la \ @ENABLE_GUDEV_TRUE@ $(am__DEPENDENCIES_1) am__libgudev_1_0_la_SOURCES_DIST = src/gudev/gudevenums.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 am__dirstamp = $(am__leading_dot)dirstamp @ENABLE_GUDEV_TRUE@am_libgudev_1_0_la_OBJECTS = \ @ENABLE_GUDEV_TRUE@ src/gudev/libgudev_1_0_la-gudevclient.lo \ @ENABLE_GUDEV_TRUE@ src/gudev/libgudev_1_0_la-gudevdevice.lo \ @ENABLE_GUDEV_TRUE@ src/gudev/libgudev_1_0_la-gudevenumerator.lo @ENABLE_GUDEV_TRUE@nodist_libgudev_1_0_la_OBJECTS = \ @ENABLE_GUDEV_TRUE@ src/gudev/libgudev_1_0_la-gudevmarshal.lo \ @ENABLE_GUDEV_TRUE@ src/gudev/libgudev_1_0_la-gudevenumtypes.lo libgudev_1_0_la_OBJECTS = $(am_libgudev_1_0_la_OBJECTS) \ $(nodist_libgudev_1_0_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libgudev_1_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libgudev_1_0_la_CFLAGS) $(CFLAGS) $(libgudev_1_0_la_LDFLAGS) \ $(LDFLAGS) -o $@ @ENABLE_GUDEV_TRUE@am_libgudev_1_0_la_rpath = -rpath $(libdir) @WITH_SELINUX_TRUE@libudev_private_la_DEPENDENCIES = \ @WITH_SELINUX_TRUE@ $(am__DEPENDENCIES_1) am__libudev_private_la_SOURCES_DIST = 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 \ src/libudev-util-private.c src/libudev-device-private.c \ src/libudev-queue-private.c src/libudev-selinux-private.c am__objects_1 = src/libudev.lo src/libudev-list.lo src/libudev-util.lo \ src/libudev-device.lo src/libudev-enumerate.lo \ src/libudev-monitor.lo src/libudev-queue.lo @WITH_SELINUX_TRUE@am__objects_2 = src/libudev-selinux-private.lo am_libudev_private_la_OBJECTS = $(am__objects_1) \ src/libudev-util-private.lo src/libudev-device-private.lo \ src/libudev-queue-private.lo $(am__objects_2) libudev_private_la_OBJECTS = $(am_libudev_private_la_OBJECTS) libudev_la_LIBADD = am_libudev_la_OBJECTS = src/libudev.lo src/libudev-list.lo \ src/libudev-util.lo src/libudev-device.lo \ src/libudev-enumerate.lo src/libudev-monitor.lo \ src/libudev-queue.lo libudev_la_OBJECTS = $(am_libudev_la_OBJECTS) libudev_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libudev_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_KEYMAP_TRUE@am__EXEEXT_1 = keymap$(EXEEXT) @ENABLE_MTD_PROBE_TRUE@am__EXEEXT_2 = mtd_probe$(EXEEXT) @ENABLE_FLOPPY_TRUE@am__EXEEXT_3 = create_floppy_devices$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(pkglibexec_PROGRAMS) am_accelerometer_OBJECTS = src/accelerometer/accelerometer.$(OBJEXT) accelerometer_OBJECTS = $(am_accelerometer_OBJECTS) accelerometer_DEPENDENCIES = libudev-private.la am_ata_id_OBJECTS = src/ata_id/ata_id.$(OBJEXT) ata_id_OBJECTS = $(am_ata_id_OBJECTS) ata_id_DEPENDENCIES = libudev-private.la am_cdrom_id_OBJECTS = src/cdrom_id/cdrom_id.$(OBJEXT) cdrom_id_OBJECTS = $(am_cdrom_id_OBJECTS) cdrom_id_DEPENDENCIES = libudev-private.la am_collect_OBJECTS = src/collect/collect.$(OBJEXT) collect_OBJECTS = $(am_collect_OBJECTS) collect_DEPENDENCIES = libudev-private.la am__create_floppy_devices_SOURCES_DIST = \ src/floppy/create_floppy_devices.c @ENABLE_FLOPPY_TRUE@am_create_floppy_devices_OBJECTS = src/floppy/create_floppy_devices.$(OBJEXT) create_floppy_devices_OBJECTS = $(am_create_floppy_devices_OBJECTS) @ENABLE_FLOPPY_TRUE@create_floppy_devices_DEPENDENCIES = \ @ENABLE_FLOPPY_TRUE@ libudev-private.la am__keymap_SOURCES_DIST = src/keymap/keymap.c @ENABLE_KEYMAP_TRUE@am_keymap_OBJECTS = \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymap-keymap.$(OBJEXT) nodist_keymap_OBJECTS = keymap_OBJECTS = $(am_keymap_OBJECTS) $(nodist_keymap_OBJECTS) keymap_LDADD = $(LDADD) am__mtd_probe_SOURCES_DIST = src/mtd_probe/mtd_probe.c \ src/mtd_probe/mtd_probe.h src/mtd_probe/probe_smartmedia.c @ENABLE_MTD_PROBE_TRUE@am_mtd_probe_OBJECTS = src/mtd_probe/mtd_probe-mtd_probe.$(OBJEXT) \ @ENABLE_MTD_PROBE_TRUE@ src/mtd_probe/mtd_probe-probe_smartmedia.$(OBJEXT) mtd_probe_OBJECTS = $(am_mtd_probe_OBJECTS) mtd_probe_LDADD = $(LDADD) am_scsi_id_OBJECTS = src/scsi_id/scsi_id.$(OBJEXT) \ src/scsi_id/scsi_serial.$(OBJEXT) scsi_id_OBJECTS = $(am_scsi_id_OBJECTS) scsi_id_DEPENDENCIES = libudev-private.la am_test_libudev_OBJECTS = src/test-libudev.$(OBJEXT) test_libudev_OBJECTS = $(am_test_libudev_OBJECTS) test_libudev_DEPENDENCIES = libudev.la am__objects_3 = src/test_udev-udev-event.$(OBJEXT) \ src/test_udev-udev-watch.$(OBJEXT) \ src/test_udev-udev-node.$(OBJEXT) \ src/test_udev-udev-rules.$(OBJEXT) \ src/test_udev-udev-ctrl.$(OBJEXT) \ src/test_udev-udev-builtin.$(OBJEXT) \ src/test_udev-udev-builtin-blkid.$(OBJEXT) \ src/test_udev-udev-builtin-firmware.$(OBJEXT) \ src/test_udev-udev-builtin-hwdb.$(OBJEXT) \ src/test_udev-udev-builtin-input_id.$(OBJEXT) \ src/test_udev-udev-builtin-kmod.$(OBJEXT) \ src/test_udev-udev-builtin-path_id.$(OBJEXT) \ src/test_udev-udev-builtin-usb_id.$(OBJEXT) am_test_udev_OBJECTS = $(am__objects_3) \ src/test_udev-test-udev.$(OBJEXT) test_udev_OBJECTS = $(am_test_udev_OBJECTS) am__DEPENDENCIES_2 = libudev-private.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) test_udev_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_udev_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__objects_4 = src/udevadm-udev-event.$(OBJEXT) \ src/udevadm-udev-watch.$(OBJEXT) \ src/udevadm-udev-node.$(OBJEXT) \ src/udevadm-udev-rules.$(OBJEXT) \ src/udevadm-udev-ctrl.$(OBJEXT) \ src/udevadm-udev-builtin.$(OBJEXT) \ src/udevadm-udev-builtin-blkid.$(OBJEXT) \ src/udevadm-udev-builtin-firmware.$(OBJEXT) \ src/udevadm-udev-builtin-hwdb.$(OBJEXT) \ src/udevadm-udev-builtin-input_id.$(OBJEXT) \ src/udevadm-udev-builtin-kmod.$(OBJEXT) \ src/udevadm-udev-builtin-path_id.$(OBJEXT) \ src/udevadm-udev-builtin-usb_id.$(OBJEXT) am_udevadm_OBJECTS = $(am__objects_4) src/udevadm-udevadm.$(OBJEXT) \ src/udevadm-udevadm-info.$(OBJEXT) \ src/udevadm-udevadm-control.$(OBJEXT) \ src/udevadm-udevadm-monitor.$(OBJEXT) \ src/udevadm-udevadm-settle.$(OBJEXT) \ src/udevadm-udevadm-trigger.$(OBJEXT) \ src/udevadm-udevadm-test.$(OBJEXT) \ src/udevadm-udevadm-test-builtin.$(OBJEXT) udevadm_OBJECTS = $(am_udevadm_OBJECTS) udevadm_DEPENDENCIES = $(am__DEPENDENCIES_2) udevadm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(udevadm_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__objects_5 = src/udevd-udev-event.$(OBJEXT) \ src/udevd-udev-watch.$(OBJEXT) src/udevd-udev-node.$(OBJEXT) \ src/udevd-udev-rules.$(OBJEXT) src/udevd-udev-ctrl.$(OBJEXT) \ src/udevd-udev-builtin.$(OBJEXT) \ src/udevd-udev-builtin-blkid.$(OBJEXT) \ src/udevd-udev-builtin-firmware.$(OBJEXT) \ src/udevd-udev-builtin-hwdb.$(OBJEXT) \ src/udevd-udev-builtin-input_id.$(OBJEXT) \ src/udevd-udev-builtin-kmod.$(OBJEXT) \ src/udevd-udev-builtin-path_id.$(OBJEXT) \ src/udevd-udev-builtin-usb_id.$(OBJEXT) am_udevd_OBJECTS = $(am__objects_5) src/udevd-udevd.$(OBJEXT) \ src/udevd-sd-daemon.$(OBJEXT) udevd_OBJECTS = $(am_udevd_OBJECTS) udevd_DEPENDENCIES = $(am__DEPENDENCIES_2) udevd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(udevd_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_v4l_id_OBJECTS = src/v4l_id/v4l_id.$(OBJEXT) v4l_id_OBJECTS = $(am_v4l_id_OBJECTS) v4l_id_DEPENDENCIES = libudev-private.la am__dist_udevhome_SCRIPTS_DIST = src/keymap/findkeyboards \ src/rule_generator/write_cd_rules \ src/rule_generator/write_net_rules SCRIPTS = $(dist_udevhome_SCRIPTS) $(udevhome_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgudev_1_0_la_SOURCES) $(nodist_libgudev_1_0_la_SOURCES) \ $(libudev_private_la_SOURCES) $(libudev_la_SOURCES) \ $(accelerometer_SOURCES) $(ata_id_SOURCES) $(cdrom_id_SOURCES) \ $(collect_SOURCES) $(create_floppy_devices_SOURCES) \ $(keymap_SOURCES) $(nodist_keymap_SOURCES) \ $(mtd_probe_SOURCES) $(scsi_id_SOURCES) \ $(test_libudev_SOURCES) $(test_udev_SOURCES) \ $(udevadm_SOURCES) $(udevd_SOURCES) $(v4l_id_SOURCES) DIST_SOURCES = $(am__libgudev_1_0_la_SOURCES_DIST) \ $(am__libudev_private_la_SOURCES_DIST) $(libudev_la_SOURCES) \ $(accelerometer_SOURCES) $(ata_id_SOURCES) $(cdrom_id_SOURCES) \ $(collect_SOURCES) $(am__create_floppy_devices_SOURCES_DIST) \ $(am__keymap_SOURCES_DIST) $(am__mtd_probe_SOURCES_DIST) \ $(scsi_id_SOURCES) $(test_libudev_SOURCES) \ $(test_udev_SOURCES) $(udevadm_SOURCES) $(udevd_SOURCES) \ $(v4l_id_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(dist_man_MANS) am__dist_doc_DATA_DIST = src/keymap/README.keymap.txt am__dist_noinst_DATA_DIST = src/udev.html src/udevadm.html \ src/udevd.html am__dist_systemdsystemunit_DATA_DIST = src/udev-control.socket \ src/udev-kernel.socket am__dist_udevhome_DATA_DIST = \ src/rule_generator/rule_generator.functions am__dist_udevkeymap_DATA_DIST = 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-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 am__dist_udevkeymapforcerel_DATA_DIST = \ 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/common-volume-keys am__dist_udevrules_DATA_DIST = 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 src/cdrom_id/60-cdrom_id.rules \ src/v4l_id/60-persistent-v4l.rules \ src/accelerometer/61-accelerometer.rules \ src/keymap/95-keymap.rules \ src/keymap/95-keyboard-force-release.rules \ src/mtd_probe/75-probe_mtd.rules \ src/rule_generator/75-cd-aliases-generator.rules \ src/rule_generator/75-persistent-net-generator.rules \ src/floppy/60-floppy.rules DATA = $(dist_doc_DATA) $(dist_noinst_DATA) \ $(dist_systemdsystemunit_DATA) $(dist_udevconf_DATA) \ $(dist_udevhome_DATA) $(dist_udevkeymap_DATA) \ $(dist_udevkeymapforcerel_DATA) $(dist_udevrules_DATA) \ $(gir_DATA) $(pkgconfig_DATA) $(sharepkgconfig_DATA) \ $(systemdsystemunit_DATA) $(typelibs_DATA) am__libgudev_include_HEADERS_DIST = 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 HEADERS = $(include_HEADERS) $(libgudev_include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = . src/docs src/gudev/docs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" GZIP_ENV = --best DIST_ARCHIVES = $(distdir).tar.xz distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLKID_CFLAGS = @BLKID_CFLAGS@ BLKID_LIBS = @BLKID_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIRMWARE_PATH = @FIRMWARE_PATH@ GIRDIR = @GIRDIR@ GIRTYPELIBDIR = @GIRTYPELIBDIR@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GPERF = @GPERF@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ G_IR_COMPILER = @G_IR_COMPILER@ G_IR_GENERATE = @G_IR_GENERATE@ G_IR_SCANNER = @G_IR_SCANNER@ HTML_DIR = @HTML_DIR@ INCLUDE_PREFIX = @INCLUDE_PREFIX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ KMOD_CFLAGS = @KMOD_CFLAGS@ KMOD_LIBS = @KMOD_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCI_DATABASE = @PCI_DATABASE@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SED = @SED@ SELINUX_LIBS = @SELINUX_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USBUTILS_CFLAGS = @USBUTILS_CFLAGS@ USBUTILS_LIBS = @USBUTILS_LIBS@ USB_DATABASE = @USB_DATABASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ my_CFLAGS = @my_CFLAGS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ rootlib_execdir = @rootlib_execdir@ rootprefix = @rootprefix@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ systemdsystemunitdir = @systemdsystemunitdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # ------------------------------------------------------------------------------ SUBDIRS = . src/docs $(am__append_6) ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} AM_MAKEFLAGS = --no-print-directory LIBUDEV_CURRENT = 13 LIBUDEV_REVISION = 1 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 = $(am__append_11) $(am__append_15) EXTRA_DIST = src/libudev.pc.in src/COPYING src/udev.pc.in \ $(am__append_2) src/udev.xml src/udevadm.xml src/udevd.xml \ test/sys.tar.xz src/scsi_id/README $(am__append_9) \ $(am__append_20) $(TESTS) test/rule-syntax-check.py CLEANFILES = src/libudev.pc src/udev.pc $(am__append_3) \ $(am__append_10) $(am__append_12) $(am__append_21) \ $(BUILT_SOURCES) INSTALL_EXEC_HOOKS = libudev-install-move-hook $(am__append_13) INSTALL_DATA_HOOKS = udev-confdirs $(am__append_4) UNINSTALL_EXEC_HOOKS = libudev-uninstall-move-hook $(am__append_14) DISTCHECK_HOOKS = $(am__append_22) DISTCLEAN_LOCAL_HOOKS = test-sys-distclean udevhomedir = $(libexecdir)/udev udevhome_SCRIPTS = $(am__append_19) dist_udevhome_SCRIPTS = $(am__append_18) $(am__append_25) dist_udevhome_DATA = $(am__append_26) dist_man_MANS = $(am__append_5) src/scsi_id/scsi_id.8 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 $@ include_HEADERS = src/libudev.h lib_LTLIBRARIES = libudev.la $(am__append_7) 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 $(am__append_1) @WITH_SELINUX_TRUE@libudev_private_la_LIBADD = $(SELINUX_LIBS) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = src/libudev.pc $(am__append_8) 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 src/cdrom_id/60-cdrom_id.rules \ src/v4l_id/60-persistent-v4l.rules \ src/accelerometer/61-accelerometer.rules $(am__append_17) \ $(am__append_23) $(am__append_27) $(am__append_29) udevconfdir = $(sysconfdir)/udev dist_udevconf_DATA = src/udev.conf sharepkgconfigdir = $(datadir)/pkgconfig sharepkgconfig_DATA = src/udev.pc @WITH_SYSTEMD_TRUE@dist_systemdsystemunit_DATA = \ @WITH_SYSTEMD_TRUE@ src/udev-control.socket \ @WITH_SYSTEMD_TRUE@ src/udev-kernel.socket @WITH_SYSTEMD_TRUE@systemdsystemunit_DATA = \ @WITH_SYSTEMD_TRUE@ src/udev.service \ @WITH_SYSTEMD_TRUE@ src/udev-trigger.service \ @WITH_SYSTEMD_TRUE@ src/udev-settle.service 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) @HAVE_XSLTPROC_TRUE@dist_noinst_DATA = \ @HAVE_XSLTPROC_TRUE@ src/udev.html \ @HAVE_XSLTPROC_TRUE@ src/udevadm.html \ @HAVE_XSLTPROC_TRUE@ src/udevd.html # ------------------------------------------------------------------------------ TESTS = \ test/udev-test.pl \ test/rules-test.sh 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 # ------------------------------------------------------------------------------ ata_id_SOURCES = src/ata_id/ata_id.c ata_id_LDADD = libudev-private.la # ------------------------------------------------------------------------------ cdrom_id_SOURCES = src/cdrom_id/cdrom_id.c cdrom_id_LDADD = libudev-private.la # ------------------------------------------------------------------------------ collect_SOURCES = src/collect/collect.c collect_LDADD = libudev-private.la # ------------------------------------------------------------------------------ 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 # ------------------------------------------------------------------------------ v4l_id_SOURCES = src/v4l_id/v4l_id.c v4l_id_LDADD = libudev-private.la # ------------------------------------------------------------------------------ accelerometer_SOURCES = src/accelerometer/accelerometer.c accelerometer_LDADD = libudev-private.la -lm @ENABLE_GUDEV_TRUE@libgudev_includedir = $(includedir)/gudev-1.0/gudev @ENABLE_GUDEV_TRUE@libgudev_include_HEADERS = \ @ENABLE_GUDEV_TRUE@ src/gudev/gudev.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenums.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevtypes.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevclient.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevdevice.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumerator.h @ENABLE_GUDEV_TRUE@libgudev_1_0_la_SOURCES = \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenums.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.h\ @ENABLE_GUDEV_TRUE@ src/gudev/gudevtypes.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevclient.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevclient.c \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevdevice.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevdevice.c \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumerator.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumerator.c \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevprivate.h @ENABLE_GUDEV_TRUE@nodist_libgudev_1_0_la_SOURCES = \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevmarshal.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevmarshal.c \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.h \ @ENABLE_GUDEV_TRUE@ src/gudev/gudevenumtypes.c @ENABLE_GUDEV_TRUE@libgudev_1_0_la_CPPFLAGS = \ @ENABLE_GUDEV_TRUE@ $(AM_CPPFLAGS) \ @ENABLE_GUDEV_TRUE@ -I$(top_builddir)/src\ @ENABLE_GUDEV_TRUE@ -I$(top_srcdir)/src\ @ENABLE_GUDEV_TRUE@ -I$(top_builddir)/src/gudev \ @ENABLE_GUDEV_TRUE@ -I$(top_srcdir)/src/gudev \ @ENABLE_GUDEV_TRUE@ -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT \ @ENABLE_GUDEV_TRUE@ -D_GUDEV_COMPILATION \ @ENABLE_GUDEV_TRUE@ -DG_LOG_DOMAIN=\"GUdev\" @ENABLE_GUDEV_TRUE@libgudev_1_0_la_CFLAGS = \ @ENABLE_GUDEV_TRUE@ -fvisibility=default \ @ENABLE_GUDEV_TRUE@ $(GLIB_CFLAGS) @ENABLE_GUDEV_TRUE@libgudev_1_0_la_LIBADD = libudev.la $(GLIB_LIBS) @ENABLE_GUDEV_TRUE@libgudev_1_0_la_LDFLAGS = \ @ENABLE_GUDEV_TRUE@ -version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \ @ENABLE_GUDEV_TRUE@ -export-dynamic -no-undefined \ @ENABLE_GUDEV_TRUE@ -export-symbols-regex '^g_udev_.*' @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@girdir = $(GIRDIR) @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@gir_DATA = src/gudev/GUdev-1.0.gir @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@typelibsdir = $(GIRTYPELIBDIR) @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@typelibs_DATA = src/gudev/GUdev-1.0.typelib # ------------------------------------------------------------------------------ @ENABLE_KEYMAP_TRUE@keymap_SOURCES = src/keymap/keymap.c @ENABLE_KEYMAP_TRUE@keymap_CPPFLAGS = $(AM_CPPFLAGS) -I src/keymap @ENABLE_KEYMAP_TRUE@nodist_keymap_SOURCES = \ @ENABLE_KEYMAP_TRUE@ src/keymap/keys-from-name.h \ @ENABLE_KEYMAP_TRUE@ src/keymap/keys-to-name.h @ENABLE_KEYMAP_TRUE@dist_doc_DATA = src/keymap/README.keymap.txt @ENABLE_KEYMAP_TRUE@udevkeymapdir = $(libexecdir)/udev/keymaps @ENABLE_KEYMAP_TRUE@dist_udevkeymap_DATA = \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer-aspire_5720 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer-aspire_8930 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer-aspire_5920g \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer-aspire_6920 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/acer-travelmate_c300 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/asus \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/compaq-e_evo \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/dell \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/dell-latitude-xt2 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/everex-xt5000 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-amilo_li_2732 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-amilo_pa_2548 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-amilo_pro_v3205 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-amilo_si_1520 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-esprimo_mobile_v5 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/fujitsu-esprimo_mobile_v6 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/genius-slimstar-320 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-2510p_2530p \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-compaq_elitebook \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-pavilion \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-presario-2100 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-tablet \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/hewlett-packard-tx2 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/inventec-symphony_6.0_7.0 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lenovo-3000 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lenovo-ideapad \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lenovo-thinkpad_x6_tablet \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lenovo-thinkpad_x200_tablet \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/lg-x110 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/logitech-wave \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/logitech-wave-cordless \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/logitech-wave-pro-cordless \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/maxdata-pro_7000 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/medion-fid2060 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/medionnb-a555 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/micro-star \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-asus-w3j \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-ibm \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-lenovo \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-sony \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-sony-old \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/module-sony-vgn \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/olpc-xo \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/onkyo \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/oqo-model2 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/samsung-other \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/samsung-sq1us \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/samsung-sx20s \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/toshiba-satellite_a100 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/toshiba-satellite_a110 \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/toshiba-satellite_m30x \ @ENABLE_KEYMAP_TRUE@ src/keymap/keymaps/zepto-znote @ENABLE_KEYMAP_TRUE@udevkeymapforcereldir = $(libexecdir)/udev/keymaps/force-release @ENABLE_KEYMAP_TRUE@dist_udevkeymapforcerel_DATA = \ @ENABLE_KEYMAP_TRUE@ src/keymap/force-release-maps/dell-touchpad \ @ENABLE_KEYMAP_TRUE@ src/keymap/force-release-maps/hp-other \ @ENABLE_KEYMAP_TRUE@ src/keymap/force-release-maps/samsung-other \ @ENABLE_KEYMAP_TRUE@ src/keymap/force-release-maps/common-volume-keys # ------------------------------------------------------------------------------ @ENABLE_MTD_PROBE_TRUE@mtd_probe_SOURCES = \ @ENABLE_MTD_PROBE_TRUE@ src/mtd_probe/mtd_probe.c \ @ENABLE_MTD_PROBE_TRUE@ src/mtd_probe/mtd_probe.h \ @ENABLE_MTD_PROBE_TRUE@ src/mtd_probe/probe_smartmedia.c @ENABLE_MTD_PROBE_TRUE@mtd_probe_CPPFLAGS = $(AM_CPPFLAGS) # ------------------------------------------------------------------------------ @ENABLE_FLOPPY_TRUE@create_floppy_devices_SOURCES = src/floppy/create_floppy_devices.c @ENABLE_FLOPPY_TRUE@create_floppy_devices_LDADD = libudev-private.la # ------------------------------------------------------------------------------ PREVIOUS_VERSION = `expr $(VERSION) - 1` all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src/gudev/$(am__dirstamp): @$(MKDIR_P) src/gudev @: > src/gudev/$(am__dirstamp) src/gudev/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/gudev/$(DEPDIR) @: > src/gudev/$(DEPDIR)/$(am__dirstamp) src/gudev/libgudev_1_0_la-gudevclient.lo: src/gudev/$(am__dirstamp) \ src/gudev/$(DEPDIR)/$(am__dirstamp) src/gudev/libgudev_1_0_la-gudevdevice.lo: src/gudev/$(am__dirstamp) \ src/gudev/$(DEPDIR)/$(am__dirstamp) src/gudev/libgudev_1_0_la-gudevenumerator.lo: \ src/gudev/$(am__dirstamp) src/gudev/$(DEPDIR)/$(am__dirstamp) src/gudev/libgudev_1_0_la-gudevmarshal.lo: src/gudev/$(am__dirstamp) \ src/gudev/$(DEPDIR)/$(am__dirstamp) src/gudev/libgudev_1_0_la-gudevenumtypes.lo: \ src/gudev/$(am__dirstamp) src/gudev/$(DEPDIR)/$(am__dirstamp) libgudev-1.0.la: $(libgudev_1_0_la_OBJECTS) $(libgudev_1_0_la_DEPENDENCIES) $(EXTRA_libgudev_1_0_la_DEPENDENCIES) $(AM_V_CCLD)$(libgudev_1_0_la_LINK) $(am_libgudev_1_0_la_rpath) $(libgudev_1_0_la_OBJECTS) $(libgudev_1_0_la_LIBADD) $(LIBS) src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/libudev.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/libudev-list.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/libudev-util.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/libudev-device.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-enumerate.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-monitor.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-queue.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-util-private.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-device-private.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-queue-private.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/libudev-selinux-private.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) libudev-private.la: $(libudev_private_la_OBJECTS) $(libudev_private_la_DEPENDENCIES) $(EXTRA_libudev_private_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libudev_private_la_OBJECTS) $(libudev_private_la_LIBADD) $(LIBS) libudev.la: $(libudev_la_OBJECTS) $(libudev_la_DEPENDENCIES) $(EXTRA_libudev_la_DEPENDENCIES) $(AM_V_CCLD)$(libudev_la_LINK) -rpath $(libdir) $(libudev_la_OBJECTS) $(libudev_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(pkglibexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pkglibexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkglibexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkglibexecdir)" && rm -f $$files clean-pkglibexecPROGRAMS: @list='$(pkglibexec_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list src/accelerometer/$(am__dirstamp): @$(MKDIR_P) src/accelerometer @: > src/accelerometer/$(am__dirstamp) src/accelerometer/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/accelerometer/$(DEPDIR) @: > src/accelerometer/$(DEPDIR)/$(am__dirstamp) src/accelerometer/accelerometer.$(OBJEXT): \ src/accelerometer/$(am__dirstamp) \ src/accelerometer/$(DEPDIR)/$(am__dirstamp) accelerometer$(EXEEXT): $(accelerometer_OBJECTS) $(accelerometer_DEPENDENCIES) $(EXTRA_accelerometer_DEPENDENCIES) @rm -f accelerometer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(accelerometer_OBJECTS) $(accelerometer_LDADD) $(LIBS) src/ata_id/$(am__dirstamp): @$(MKDIR_P) src/ata_id @: > src/ata_id/$(am__dirstamp) src/ata_id/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/ata_id/$(DEPDIR) @: > src/ata_id/$(DEPDIR)/$(am__dirstamp) src/ata_id/ata_id.$(OBJEXT): src/ata_id/$(am__dirstamp) \ src/ata_id/$(DEPDIR)/$(am__dirstamp) ata_id$(EXEEXT): $(ata_id_OBJECTS) $(ata_id_DEPENDENCIES) $(EXTRA_ata_id_DEPENDENCIES) @rm -f ata_id$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ata_id_OBJECTS) $(ata_id_LDADD) $(LIBS) src/cdrom_id/$(am__dirstamp): @$(MKDIR_P) src/cdrom_id @: > src/cdrom_id/$(am__dirstamp) src/cdrom_id/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/cdrom_id/$(DEPDIR) @: > src/cdrom_id/$(DEPDIR)/$(am__dirstamp) src/cdrom_id/cdrom_id.$(OBJEXT): src/cdrom_id/$(am__dirstamp) \ src/cdrom_id/$(DEPDIR)/$(am__dirstamp) cdrom_id$(EXEEXT): $(cdrom_id_OBJECTS) $(cdrom_id_DEPENDENCIES) $(EXTRA_cdrom_id_DEPENDENCIES) @rm -f cdrom_id$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cdrom_id_OBJECTS) $(cdrom_id_LDADD) $(LIBS) src/collect/$(am__dirstamp): @$(MKDIR_P) src/collect @: > src/collect/$(am__dirstamp) src/collect/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/collect/$(DEPDIR) @: > src/collect/$(DEPDIR)/$(am__dirstamp) src/collect/collect.$(OBJEXT): src/collect/$(am__dirstamp) \ src/collect/$(DEPDIR)/$(am__dirstamp) collect$(EXEEXT): $(collect_OBJECTS) $(collect_DEPENDENCIES) $(EXTRA_collect_DEPENDENCIES) @rm -f collect$(EXEEXT) $(AM_V_CCLD)$(LINK) $(collect_OBJECTS) $(collect_LDADD) $(LIBS) src/floppy/$(am__dirstamp): @$(MKDIR_P) src/floppy @: > src/floppy/$(am__dirstamp) src/floppy/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/floppy/$(DEPDIR) @: > src/floppy/$(DEPDIR)/$(am__dirstamp) src/floppy/create_floppy_devices.$(OBJEXT): \ src/floppy/$(am__dirstamp) \ src/floppy/$(DEPDIR)/$(am__dirstamp) create_floppy_devices$(EXEEXT): $(create_floppy_devices_OBJECTS) $(create_floppy_devices_DEPENDENCIES) $(EXTRA_create_floppy_devices_DEPENDENCIES) @rm -f create_floppy_devices$(EXEEXT) $(AM_V_CCLD)$(LINK) $(create_floppy_devices_OBJECTS) $(create_floppy_devices_LDADD) $(LIBS) src/keymap/$(am__dirstamp): @$(MKDIR_P) src/keymap @: > src/keymap/$(am__dirstamp) src/keymap/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/keymap/$(DEPDIR) @: > src/keymap/$(DEPDIR)/$(am__dirstamp) src/keymap/keymap-keymap.$(OBJEXT): src/keymap/$(am__dirstamp) \ src/keymap/$(DEPDIR)/$(am__dirstamp) keymap$(EXEEXT): $(keymap_OBJECTS) $(keymap_DEPENDENCIES) $(EXTRA_keymap_DEPENDENCIES) @rm -f keymap$(EXEEXT) $(AM_V_CCLD)$(LINK) $(keymap_OBJECTS) $(keymap_LDADD) $(LIBS) src/mtd_probe/$(am__dirstamp): @$(MKDIR_P) src/mtd_probe @: > src/mtd_probe/$(am__dirstamp) src/mtd_probe/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/mtd_probe/$(DEPDIR) @: > src/mtd_probe/$(DEPDIR)/$(am__dirstamp) src/mtd_probe/mtd_probe-mtd_probe.$(OBJEXT): \ src/mtd_probe/$(am__dirstamp) \ src/mtd_probe/$(DEPDIR)/$(am__dirstamp) src/mtd_probe/mtd_probe-probe_smartmedia.$(OBJEXT): \ src/mtd_probe/$(am__dirstamp) \ src/mtd_probe/$(DEPDIR)/$(am__dirstamp) mtd_probe$(EXEEXT): $(mtd_probe_OBJECTS) $(mtd_probe_DEPENDENCIES) $(EXTRA_mtd_probe_DEPENDENCIES) @rm -f mtd_probe$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mtd_probe_OBJECTS) $(mtd_probe_LDADD) $(LIBS) src/scsi_id/$(am__dirstamp): @$(MKDIR_P) src/scsi_id @: > src/scsi_id/$(am__dirstamp) src/scsi_id/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/scsi_id/$(DEPDIR) @: > src/scsi_id/$(DEPDIR)/$(am__dirstamp) src/scsi_id/scsi_id.$(OBJEXT): src/scsi_id/$(am__dirstamp) \ src/scsi_id/$(DEPDIR)/$(am__dirstamp) src/scsi_id/scsi_serial.$(OBJEXT): src/scsi_id/$(am__dirstamp) \ src/scsi_id/$(DEPDIR)/$(am__dirstamp) scsi_id$(EXEEXT): $(scsi_id_OBJECTS) $(scsi_id_DEPENDENCIES) $(EXTRA_scsi_id_DEPENDENCIES) @rm -f scsi_id$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scsi_id_OBJECTS) $(scsi_id_LDADD) $(LIBS) src/test-libudev.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) test-libudev$(EXEEXT): $(test_libudev_OBJECTS) $(test_libudev_DEPENDENCIES) $(EXTRA_test_libudev_DEPENDENCIES) @rm -f test-libudev$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_libudev_OBJECTS) $(test_libudev_LDADD) $(LIBS) src/test_udev-udev-event.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-watch.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-node.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-rules.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-ctrl.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-blkid.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-firmware.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-hwdb.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-input_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-kmod.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-path_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-udev-builtin-usb_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_udev-test-udev.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) test-udev$(EXEEXT): $(test_udev_OBJECTS) $(test_udev_DEPENDENCIES) $(EXTRA_test_udev_DEPENDENCIES) @rm -f test-udev$(EXEEXT) $(AM_V_CCLD)$(test_udev_LINK) $(test_udev_OBJECTS) $(test_udev_LDADD) $(LIBS) src/udevadm-udev-event.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-watch.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-node.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-rules.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-ctrl.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-blkid.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-firmware.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-hwdb.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-input_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-kmod.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-path_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udev-builtin-usb_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-info.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-control.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-monitor.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-settle.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-trigger.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-test.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevadm-udevadm-test-builtin.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) udevadm$(EXEEXT): $(udevadm_OBJECTS) $(udevadm_DEPENDENCIES) $(EXTRA_udevadm_DEPENDENCIES) @rm -f udevadm$(EXEEXT) $(AM_V_CCLD)$(udevadm_LINK) $(udevadm_OBJECTS) $(udevadm_LDADD) $(LIBS) src/udevd-udev-event.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-watch.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-node.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-rules.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-ctrl.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-blkid.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-firmware.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-hwdb.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-input_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-kmod.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-path_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udev-builtin-usb_id.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-udevd.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/udevd-sd-daemon.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) udevd$(EXEEXT): $(udevd_OBJECTS) $(udevd_DEPENDENCIES) $(EXTRA_udevd_DEPENDENCIES) @rm -f udevd$(EXEEXT) $(AM_V_CCLD)$(udevd_LINK) $(udevd_OBJECTS) $(udevd_LDADD) $(LIBS) src/v4l_id/$(am__dirstamp): @$(MKDIR_P) src/v4l_id @: > src/v4l_id/$(am__dirstamp) src/v4l_id/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/v4l_id/$(DEPDIR) @: > src/v4l_id/$(DEPDIR)/$(am__dirstamp) src/v4l_id/v4l_id.$(OBJEXT): src/v4l_id/$(am__dirstamp) \ src/v4l_id/$(DEPDIR)/$(am__dirstamp) v4l_id$(EXEEXT): $(v4l_id_OBJECTS) $(v4l_id_DEPENDENCIES) $(EXTRA_v4l_id_DEPENDENCIES) @rm -f v4l_id$(EXEEXT) $(AM_V_CCLD)$(LINK) $(v4l_id_OBJECTS) $(v4l_id_LDADD) $(LIBS) install-dist_udevhomeSCRIPTS: $(dist_udevhome_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(udevhomedir)" || $(MKDIR_P) "$(DESTDIR)$(udevhomedir)" @list='$(dist_udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(udevhomedir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(udevhomedir)$$dir" || exit $$?; \ } \ ; done uninstall-dist_udevhomeSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(dist_udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(udevhomedir)'; $(am__uninstall_files_from_dir) install-udevhomeSCRIPTS: $(udevhome_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(udevhomedir)" || $(MKDIR_P) "$(DESTDIR)$(udevhomedir)" @list='$(udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(udevhomedir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(udevhomedir)$$dir" || exit $$?; \ } \ ; done uninstall-udevhomeSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(udevhomedir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/accelerometer/accelerometer.$(OBJEXT) -rm -f src/ata_id/ata_id.$(OBJEXT) -rm -f src/cdrom_id/cdrom_id.$(OBJEXT) -rm -f src/collect/collect.$(OBJEXT) -rm -f src/floppy/create_floppy_devices.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevclient.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevclient.lo -rm -f src/gudev/libgudev_1_0_la-gudevdevice.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevdevice.lo -rm -f src/gudev/libgudev_1_0_la-gudevenumerator.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevenumerator.lo -rm -f src/gudev/libgudev_1_0_la-gudevenumtypes.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevenumtypes.lo -rm -f src/gudev/libgudev_1_0_la-gudevmarshal.$(OBJEXT) -rm -f src/gudev/libgudev_1_0_la-gudevmarshal.lo -rm -f src/keymap/keymap-keymap.$(OBJEXT) -rm -f src/libudev-device-private.$(OBJEXT) -rm -f src/libudev-device-private.lo -rm -f src/libudev-device.$(OBJEXT) -rm -f src/libudev-device.lo -rm -f src/libudev-enumerate.$(OBJEXT) -rm -f src/libudev-enumerate.lo -rm -f src/libudev-list.$(OBJEXT) -rm -f src/libudev-list.lo -rm -f src/libudev-monitor.$(OBJEXT) -rm -f src/libudev-monitor.lo -rm -f src/libudev-queue-private.$(OBJEXT) -rm -f src/libudev-queue-private.lo -rm -f src/libudev-queue.$(OBJEXT) -rm -f src/libudev-queue.lo -rm -f src/libudev-selinux-private.$(OBJEXT) -rm -f src/libudev-selinux-private.lo -rm -f src/libudev-util-private.$(OBJEXT) -rm -f src/libudev-util-private.lo -rm -f src/libudev-util.$(OBJEXT) -rm -f src/libudev-util.lo -rm -f src/libudev.$(OBJEXT) -rm -f src/libudev.lo -rm -f src/mtd_probe/mtd_probe-mtd_probe.$(OBJEXT) -rm -f src/mtd_probe/mtd_probe-probe_smartmedia.$(OBJEXT) -rm -f src/scsi_id/scsi_id.$(OBJEXT) -rm -f src/scsi_id/scsi_serial.$(OBJEXT) -rm -f src/test-libudev.$(OBJEXT) -rm -f src/test_udev-test-udev.$(OBJEXT) -rm -f src/test_udev-udev-builtin-blkid.$(OBJEXT) -rm -f src/test_udev-udev-builtin-firmware.$(OBJEXT) -rm -f src/test_udev-udev-builtin-hwdb.$(OBJEXT) -rm -f src/test_udev-udev-builtin-input_id.$(OBJEXT) -rm -f src/test_udev-udev-builtin-kmod.$(OBJEXT) -rm -f src/test_udev-udev-builtin-path_id.$(OBJEXT) -rm -f src/test_udev-udev-builtin-usb_id.$(OBJEXT) -rm -f src/test_udev-udev-builtin.$(OBJEXT) -rm -f src/test_udev-udev-ctrl.$(OBJEXT) -rm -f src/test_udev-udev-event.$(OBJEXT) -rm -f src/test_udev-udev-node.$(OBJEXT) -rm -f src/test_udev-udev-rules.$(OBJEXT) -rm -f src/test_udev-udev-watch.$(OBJEXT) -rm -f src/udevadm-udev-builtin-blkid.$(OBJEXT) -rm -f src/udevadm-udev-builtin-firmware.$(OBJEXT) -rm -f src/udevadm-udev-builtin-hwdb.$(OBJEXT) -rm -f src/udevadm-udev-builtin-input_id.$(OBJEXT) -rm -f src/udevadm-udev-builtin-kmod.$(OBJEXT) -rm -f src/udevadm-udev-builtin-path_id.$(OBJEXT) -rm -f src/udevadm-udev-builtin-usb_id.$(OBJEXT) -rm -f src/udevadm-udev-builtin.$(OBJEXT) -rm -f src/udevadm-udev-ctrl.$(OBJEXT) -rm -f src/udevadm-udev-event.$(OBJEXT) -rm -f src/udevadm-udev-node.$(OBJEXT) -rm -f src/udevadm-udev-rules.$(OBJEXT) -rm -f src/udevadm-udev-watch.$(OBJEXT) -rm -f src/udevadm-udevadm-control.$(OBJEXT) -rm -f src/udevadm-udevadm-info.$(OBJEXT) -rm -f src/udevadm-udevadm-monitor.$(OBJEXT) -rm -f src/udevadm-udevadm-settle.$(OBJEXT) -rm -f src/udevadm-udevadm-test-builtin.$(OBJEXT) -rm -f src/udevadm-udevadm-test.$(OBJEXT) -rm -f src/udevadm-udevadm-trigger.$(OBJEXT) -rm -f src/udevadm-udevadm.$(OBJEXT) -rm -f src/udevd-sd-daemon.$(OBJEXT) -rm -f src/udevd-udev-builtin-blkid.$(OBJEXT) -rm -f src/udevd-udev-builtin-firmware.$(OBJEXT) -rm -f src/udevd-udev-builtin-hwdb.$(OBJEXT) -rm -f src/udevd-udev-builtin-input_id.$(OBJEXT) -rm -f src/udevd-udev-builtin-kmod.$(OBJEXT) -rm -f src/udevd-udev-builtin-path_id.$(OBJEXT) -rm -f src/udevd-udev-builtin-usb_id.$(OBJEXT) -rm -f src/udevd-udev-builtin.$(OBJEXT) -rm -f src/udevd-udev-ctrl.$(OBJEXT) -rm -f src/udevd-udev-event.$(OBJEXT) -rm -f src/udevd-udev-node.$(OBJEXT) -rm -f src/udevd-udev-rules.$(OBJEXT) -rm -f src/udevd-udev-watch.$(OBJEXT) -rm -f src/udevd-udevd.$(OBJEXT) -rm -f src/v4l_id/v4l_id.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-device-private.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-device.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-enumerate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-monitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-queue-private.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-queue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-selinux-private.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-util-private.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/libudev.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test-libudev.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-test-udev.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-blkid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-firmware.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-input_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-kmod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-path_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-builtin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-ctrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-node.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-rules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_udev-udev-watch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-blkid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-firmware.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-input_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-kmod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-path_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-builtin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-ctrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-node.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-rules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udev-watch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-control.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-monitor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-settle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-test-builtin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm-trigger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevadm-udevadm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-sd-daemon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-blkid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-firmware.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-hwdb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-input_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-kmod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-path_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin-usb_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-builtin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-ctrl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-node.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-rules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udev-watch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/udevd-udevd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/accelerometer/$(DEPDIR)/accelerometer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/ata_id/$(DEPDIR)/ata_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/cdrom_id/$(DEPDIR)/cdrom_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/collect/$(DEPDIR)/collect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/floppy/$(DEPDIR)/create_floppy_devices.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevclient.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevdevice.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumtypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevmarshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/keymap/$(DEPDIR)/keymap-keymap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/scsi_id/$(DEPDIR)/scsi_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/scsi_id/$(DEPDIR)/scsi_serial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/v4l_id/$(DEPDIR)/v4l_id.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< src/gudev/libgudev_1_0_la-gudevclient.lo: src/gudev/gudevclient.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -MT src/gudev/libgudev_1_0_la-gudevclient.lo -MD -MP -MF src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevclient.Tpo -c -o src/gudev/libgudev_1_0_la-gudevclient.lo `test -f 'src/gudev/gudevclient.c' || echo '$(srcdir)/'`src/gudev/gudevclient.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevclient.Tpo src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevclient.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gudev/gudevclient.c' object='src/gudev/libgudev_1_0_la-gudevclient.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -c -o src/gudev/libgudev_1_0_la-gudevclient.lo `test -f 'src/gudev/gudevclient.c' || echo '$(srcdir)/'`src/gudev/gudevclient.c src/gudev/libgudev_1_0_la-gudevdevice.lo: src/gudev/gudevdevice.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -MT src/gudev/libgudev_1_0_la-gudevdevice.lo -MD -MP -MF src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevdevice.Tpo -c -o src/gudev/libgudev_1_0_la-gudevdevice.lo `test -f 'src/gudev/gudevdevice.c' || echo '$(srcdir)/'`src/gudev/gudevdevice.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevdevice.Tpo src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevdevice.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gudev/gudevdevice.c' object='src/gudev/libgudev_1_0_la-gudevdevice.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -c -o src/gudev/libgudev_1_0_la-gudevdevice.lo `test -f 'src/gudev/gudevdevice.c' || echo '$(srcdir)/'`src/gudev/gudevdevice.c src/gudev/libgudev_1_0_la-gudevenumerator.lo: src/gudev/gudevenumerator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -MT src/gudev/libgudev_1_0_la-gudevenumerator.lo -MD -MP -MF src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumerator.Tpo -c -o src/gudev/libgudev_1_0_la-gudevenumerator.lo `test -f 'src/gudev/gudevenumerator.c' || echo '$(srcdir)/'`src/gudev/gudevenumerator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumerator.Tpo src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumerator.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gudev/gudevenumerator.c' object='src/gudev/libgudev_1_0_la-gudevenumerator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -c -o src/gudev/libgudev_1_0_la-gudevenumerator.lo `test -f 'src/gudev/gudevenumerator.c' || echo '$(srcdir)/'`src/gudev/gudevenumerator.c src/gudev/libgudev_1_0_la-gudevmarshal.lo: src/gudev/gudevmarshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -MT src/gudev/libgudev_1_0_la-gudevmarshal.lo -MD -MP -MF src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevmarshal.Tpo -c -o src/gudev/libgudev_1_0_la-gudevmarshal.lo `test -f 'src/gudev/gudevmarshal.c' || echo '$(srcdir)/'`src/gudev/gudevmarshal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevmarshal.Tpo src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevmarshal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gudev/gudevmarshal.c' object='src/gudev/libgudev_1_0_la-gudevmarshal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -c -o src/gudev/libgudev_1_0_la-gudevmarshal.lo `test -f 'src/gudev/gudevmarshal.c' || echo '$(srcdir)/'`src/gudev/gudevmarshal.c src/gudev/libgudev_1_0_la-gudevenumtypes.lo: src/gudev/gudevenumtypes.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -MT src/gudev/libgudev_1_0_la-gudevenumtypes.lo -MD -MP -MF src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumtypes.Tpo -c -o src/gudev/libgudev_1_0_la-gudevenumtypes.lo `test -f 'src/gudev/gudevenumtypes.c' || echo '$(srcdir)/'`src/gudev/gudevenumtypes.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumtypes.Tpo src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumtypes.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gudev/gudevenumtypes.c' object='src/gudev/libgudev_1_0_la-gudevenumtypes.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgudev_1_0_la_CPPFLAGS) $(CPPFLAGS) $(libgudev_1_0_la_CFLAGS) $(CFLAGS) -c -o src/gudev/libgudev_1_0_la-gudevenumtypes.lo `test -f 'src/gudev/gudevenumtypes.c' || echo '$(srcdir)/'`src/gudev/gudevenumtypes.c src/keymap/keymap-keymap.o: src/keymap/keymap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/keymap/keymap-keymap.o -MD -MP -MF src/keymap/$(DEPDIR)/keymap-keymap.Tpo -c -o src/keymap/keymap-keymap.o `test -f 'src/keymap/keymap.c' || echo '$(srcdir)/'`src/keymap/keymap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/keymap/$(DEPDIR)/keymap-keymap.Tpo src/keymap/$(DEPDIR)/keymap-keymap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/keymap/keymap.c' object='src/keymap/keymap-keymap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/keymap/keymap-keymap.o `test -f 'src/keymap/keymap.c' || echo '$(srcdir)/'`src/keymap/keymap.c src/keymap/keymap-keymap.obj: src/keymap/keymap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/keymap/keymap-keymap.obj -MD -MP -MF src/keymap/$(DEPDIR)/keymap-keymap.Tpo -c -o src/keymap/keymap-keymap.obj `if test -f 'src/keymap/keymap.c'; then $(CYGPATH_W) 'src/keymap/keymap.c'; else $(CYGPATH_W) '$(srcdir)/src/keymap/keymap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/keymap/$(DEPDIR)/keymap-keymap.Tpo src/keymap/$(DEPDIR)/keymap-keymap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/keymap/keymap.c' object='src/keymap/keymap-keymap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/keymap/keymap-keymap.obj `if test -f 'src/keymap/keymap.c'; then $(CYGPATH_W) 'src/keymap/keymap.c'; else $(CYGPATH_W) '$(srcdir)/src/keymap/keymap.c'; fi` src/mtd_probe/mtd_probe-mtd_probe.o: src/mtd_probe/mtd_probe.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mtd_probe/mtd_probe-mtd_probe.o -MD -MP -MF src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo -c -o src/mtd_probe/mtd_probe-mtd_probe.o `test -f 'src/mtd_probe/mtd_probe.c' || echo '$(srcdir)/'`src/mtd_probe/mtd_probe.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mtd_probe/mtd_probe.c' object='src/mtd_probe/mtd_probe-mtd_probe.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mtd_probe/mtd_probe-mtd_probe.o `test -f 'src/mtd_probe/mtd_probe.c' || echo '$(srcdir)/'`src/mtd_probe/mtd_probe.c src/mtd_probe/mtd_probe-mtd_probe.obj: src/mtd_probe/mtd_probe.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mtd_probe/mtd_probe-mtd_probe.obj -MD -MP -MF src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo -c -o src/mtd_probe/mtd_probe-mtd_probe.obj `if test -f 'src/mtd_probe/mtd_probe.c'; then $(CYGPATH_W) 'src/mtd_probe/mtd_probe.c'; else $(CYGPATH_W) '$(srcdir)/src/mtd_probe/mtd_probe.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo src/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mtd_probe/mtd_probe.c' object='src/mtd_probe/mtd_probe-mtd_probe.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mtd_probe/mtd_probe-mtd_probe.obj `if test -f 'src/mtd_probe/mtd_probe.c'; then $(CYGPATH_W) 'src/mtd_probe/mtd_probe.c'; else $(CYGPATH_W) '$(srcdir)/src/mtd_probe/mtd_probe.c'; fi` src/mtd_probe/mtd_probe-probe_smartmedia.o: src/mtd_probe/probe_smartmedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mtd_probe/mtd_probe-probe_smartmedia.o -MD -MP -MF src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Tpo -c -o src/mtd_probe/mtd_probe-probe_smartmedia.o `test -f 'src/mtd_probe/probe_smartmedia.c' || echo '$(srcdir)/'`src/mtd_probe/probe_smartmedia.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Tpo src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mtd_probe/probe_smartmedia.c' object='src/mtd_probe/mtd_probe-probe_smartmedia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mtd_probe/mtd_probe-probe_smartmedia.o `test -f 'src/mtd_probe/probe_smartmedia.c' || echo '$(srcdir)/'`src/mtd_probe/probe_smartmedia.c src/mtd_probe/mtd_probe-probe_smartmedia.obj: src/mtd_probe/probe_smartmedia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/mtd_probe/mtd_probe-probe_smartmedia.obj -MD -MP -MF src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Tpo -c -o src/mtd_probe/mtd_probe-probe_smartmedia.obj `if test -f 'src/mtd_probe/probe_smartmedia.c'; then $(CYGPATH_W) 'src/mtd_probe/probe_smartmedia.c'; else $(CYGPATH_W) '$(srcdir)/src/mtd_probe/probe_smartmedia.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Tpo src/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mtd_probe/probe_smartmedia.c' object='src/mtd_probe/mtd_probe-probe_smartmedia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/mtd_probe/mtd_probe-probe_smartmedia.obj `if test -f 'src/mtd_probe/probe_smartmedia.c'; then $(CYGPATH_W) 'src/mtd_probe/probe_smartmedia.c'; else $(CYGPATH_W) '$(srcdir)/src/mtd_probe/probe_smartmedia.c'; fi` src/test_udev-udev-event.o: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-event.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-event.Tpo -c -o src/test_udev-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-event.Tpo src/$(DEPDIR)/test_udev-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/test_udev-udev-event.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c src/test_udev-udev-event.obj: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-event.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-event.Tpo -c -o src/test_udev-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-event.Tpo src/$(DEPDIR)/test_udev-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/test_udev-udev-event.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` src/test_udev-udev-watch.o: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-watch.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-watch.Tpo -c -o src/test_udev-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-watch.Tpo src/$(DEPDIR)/test_udev-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/test_udev-udev-watch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c src/test_udev-udev-watch.obj: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-watch.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-watch.Tpo -c -o src/test_udev-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-watch.Tpo src/$(DEPDIR)/test_udev-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/test_udev-udev-watch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` src/test_udev-udev-node.o: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-node.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-node.Tpo -c -o src/test_udev-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-node.Tpo src/$(DEPDIR)/test_udev-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/test_udev-udev-node.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c src/test_udev-udev-node.obj: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-node.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-node.Tpo -c -o src/test_udev-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-node.Tpo src/$(DEPDIR)/test_udev-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/test_udev-udev-node.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` src/test_udev-udev-rules.o: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-rules.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-rules.Tpo -c -o src/test_udev-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-rules.Tpo src/$(DEPDIR)/test_udev-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/test_udev-udev-rules.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c src/test_udev-udev-rules.obj: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-rules.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-rules.Tpo -c -o src/test_udev-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-rules.Tpo src/$(DEPDIR)/test_udev-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/test_udev-udev-rules.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` src/test_udev-udev-ctrl.o: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-ctrl.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-ctrl.Tpo -c -o src/test_udev-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-ctrl.Tpo src/$(DEPDIR)/test_udev-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/test_udev-udev-ctrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c src/test_udev-udev-ctrl.obj: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-ctrl.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-ctrl.Tpo -c -o src/test_udev-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-ctrl.Tpo src/$(DEPDIR)/test_udev-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/test_udev-udev-ctrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` src/test_udev-udev-builtin.o: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin.Tpo -c -o src/test_udev-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin.Tpo src/$(DEPDIR)/test_udev-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/test_udev-udev-builtin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c src/test_udev-udev-builtin.obj: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin.Tpo -c -o src/test_udev-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin.Tpo src/$(DEPDIR)/test_udev-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/test_udev-udev-builtin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` src/test_udev-udev-builtin-blkid.o: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-blkid.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-blkid.Tpo -c -o src/test_udev-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-blkid.Tpo src/$(DEPDIR)/test_udev-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/test_udev-udev-builtin-blkid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c src/test_udev-udev-builtin-blkid.obj: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-blkid.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-blkid.Tpo -c -o src/test_udev-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-blkid.Tpo src/$(DEPDIR)/test_udev-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/test_udev-udev-builtin-blkid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` src/test_udev-udev-builtin-firmware.o: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-firmware.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-firmware.Tpo -c -o src/test_udev-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-firmware.Tpo src/$(DEPDIR)/test_udev-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/test_udev-udev-builtin-firmware.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c src/test_udev-udev-builtin-firmware.obj: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-firmware.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-firmware.Tpo -c -o src/test_udev-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-firmware.Tpo src/$(DEPDIR)/test_udev-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/test_udev-udev-builtin-firmware.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` src/test_udev-udev-builtin-hwdb.o: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-hwdb.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Tpo -c -o src/test_udev-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Tpo src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/test_udev-udev-builtin-hwdb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c src/test_udev-udev-builtin-hwdb.obj: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-hwdb.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Tpo -c -o src/test_udev-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Tpo src/$(DEPDIR)/test_udev-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/test_udev-udev-builtin-hwdb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` src/test_udev-udev-builtin-input_id.o: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-input_id.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-input_id.Tpo -c -o src/test_udev-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-input_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/test_udev-udev-builtin-input_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c src/test_udev-udev-builtin-input_id.obj: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-input_id.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-input_id.Tpo -c -o src/test_udev-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-input_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/test_udev-udev-builtin-input_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` src/test_udev-udev-builtin-kmod.o: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-kmod.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-kmod.Tpo -c -o src/test_udev-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-kmod.Tpo src/$(DEPDIR)/test_udev-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/test_udev-udev-builtin-kmod.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c src/test_udev-udev-builtin-kmod.obj: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-kmod.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-kmod.Tpo -c -o src/test_udev-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-kmod.Tpo src/$(DEPDIR)/test_udev-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/test_udev-udev-builtin-kmod.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` src/test_udev-udev-builtin-path_id.o: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-path_id.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-path_id.Tpo -c -o src/test_udev-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-path_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/test_udev-udev-builtin-path_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c src/test_udev-udev-builtin-path_id.obj: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-path_id.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-path_id.Tpo -c -o src/test_udev-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-path_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/test_udev-udev-builtin-path_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` src/test_udev-udev-builtin-usb_id.o: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-usb_id.o -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Tpo -c -o src/test_udev-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/test_udev-udev-builtin-usb_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c src/test_udev-udev-builtin-usb_id.obj: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-udev-builtin-usb_id.obj -MD -MP -MF src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Tpo -c -o src/test_udev-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Tpo src/$(DEPDIR)/test_udev-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/test_udev-udev-builtin-usb_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` src/test_udev-test-udev.o: src/test-udev.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-test-udev.o -MD -MP -MF src/$(DEPDIR)/test_udev-test-udev.Tpo -c -o src/test_udev-test-udev.o `test -f 'src/test-udev.c' || echo '$(srcdir)/'`src/test-udev.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-test-udev.Tpo src/$(DEPDIR)/test_udev-test-udev.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test-udev.c' object='src/test_udev-test-udev.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-test-udev.o `test -f 'src/test-udev.c' || echo '$(srcdir)/'`src/test-udev.c src/test_udev-test-udev.obj: src/test-udev.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -MT src/test_udev-test-udev.obj -MD -MP -MF src/$(DEPDIR)/test_udev-test-udev.Tpo -c -o src/test_udev-test-udev.obj `if test -f 'src/test-udev.c'; then $(CYGPATH_W) 'src/test-udev.c'; else $(CYGPATH_W) '$(srcdir)/src/test-udev.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_udev-test-udev.Tpo src/$(DEPDIR)/test_udev-test-udev.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test-udev.c' object='src/test_udev-test-udev.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_udev_CPPFLAGS) $(CPPFLAGS) $(test_udev_CFLAGS) $(CFLAGS) -c -o src/test_udev-test-udev.obj `if test -f 'src/test-udev.c'; then $(CYGPATH_W) 'src/test-udev.c'; else $(CYGPATH_W) '$(srcdir)/src/test-udev.c'; fi` src/udevadm-udev-event.o: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-event.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-event.Tpo -c -o src/udevadm-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-event.Tpo src/$(DEPDIR)/udevadm-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/udevadm-udev-event.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c src/udevadm-udev-event.obj: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-event.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-event.Tpo -c -o src/udevadm-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-event.Tpo src/$(DEPDIR)/udevadm-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/udevadm-udev-event.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` src/udevadm-udev-watch.o: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-watch.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-watch.Tpo -c -o src/udevadm-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-watch.Tpo src/$(DEPDIR)/udevadm-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/udevadm-udev-watch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c src/udevadm-udev-watch.obj: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-watch.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-watch.Tpo -c -o src/udevadm-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-watch.Tpo src/$(DEPDIR)/udevadm-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/udevadm-udev-watch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` src/udevadm-udev-node.o: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-node.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-node.Tpo -c -o src/udevadm-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-node.Tpo src/$(DEPDIR)/udevadm-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/udevadm-udev-node.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c src/udevadm-udev-node.obj: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-node.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-node.Tpo -c -o src/udevadm-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-node.Tpo src/$(DEPDIR)/udevadm-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/udevadm-udev-node.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` src/udevadm-udev-rules.o: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-rules.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-rules.Tpo -c -o src/udevadm-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-rules.Tpo src/$(DEPDIR)/udevadm-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/udevadm-udev-rules.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c src/udevadm-udev-rules.obj: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-rules.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-rules.Tpo -c -o src/udevadm-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-rules.Tpo src/$(DEPDIR)/udevadm-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/udevadm-udev-rules.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` src/udevadm-udev-ctrl.o: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-ctrl.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-ctrl.Tpo -c -o src/udevadm-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-ctrl.Tpo src/$(DEPDIR)/udevadm-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/udevadm-udev-ctrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c src/udevadm-udev-ctrl.obj: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-ctrl.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-ctrl.Tpo -c -o src/udevadm-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-ctrl.Tpo src/$(DEPDIR)/udevadm-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/udevadm-udev-ctrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` src/udevadm-udev-builtin.o: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin.Tpo -c -o src/udevadm-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin.Tpo src/$(DEPDIR)/udevadm-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/udevadm-udev-builtin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c src/udevadm-udev-builtin.obj: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin.Tpo -c -o src/udevadm-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin.Tpo src/$(DEPDIR)/udevadm-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/udevadm-udev-builtin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` src/udevadm-udev-builtin-blkid.o: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-blkid.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-blkid.Tpo -c -o src/udevadm-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-blkid.Tpo src/$(DEPDIR)/udevadm-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/udevadm-udev-builtin-blkid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c src/udevadm-udev-builtin-blkid.obj: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-blkid.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-blkid.Tpo -c -o src/udevadm-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-blkid.Tpo src/$(DEPDIR)/udevadm-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/udevadm-udev-builtin-blkid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` src/udevadm-udev-builtin-firmware.o: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-firmware.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-firmware.Tpo -c -o src/udevadm-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-firmware.Tpo src/$(DEPDIR)/udevadm-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/udevadm-udev-builtin-firmware.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c src/udevadm-udev-builtin-firmware.obj: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-firmware.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-firmware.Tpo -c -o src/udevadm-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-firmware.Tpo src/$(DEPDIR)/udevadm-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/udevadm-udev-builtin-firmware.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` src/udevadm-udev-builtin-hwdb.o: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-hwdb.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Tpo -c -o src/udevadm-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Tpo src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/udevadm-udev-builtin-hwdb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c src/udevadm-udev-builtin-hwdb.obj: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-hwdb.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Tpo -c -o src/udevadm-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Tpo src/$(DEPDIR)/udevadm-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/udevadm-udev-builtin-hwdb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` src/udevadm-udev-builtin-input_id.o: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-input_id.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-input_id.Tpo -c -o src/udevadm-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-input_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/udevadm-udev-builtin-input_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c src/udevadm-udev-builtin-input_id.obj: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-input_id.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-input_id.Tpo -c -o src/udevadm-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-input_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/udevadm-udev-builtin-input_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` src/udevadm-udev-builtin-kmod.o: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-kmod.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-kmod.Tpo -c -o src/udevadm-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-kmod.Tpo src/$(DEPDIR)/udevadm-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/udevadm-udev-builtin-kmod.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c src/udevadm-udev-builtin-kmod.obj: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-kmod.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-kmod.Tpo -c -o src/udevadm-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-kmod.Tpo src/$(DEPDIR)/udevadm-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/udevadm-udev-builtin-kmod.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` src/udevadm-udev-builtin-path_id.o: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-path_id.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-path_id.Tpo -c -o src/udevadm-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-path_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/udevadm-udev-builtin-path_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c src/udevadm-udev-builtin-path_id.obj: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-path_id.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-path_id.Tpo -c -o src/udevadm-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-path_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/udevadm-udev-builtin-path_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` src/udevadm-udev-builtin-usb_id.o: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-usb_id.o -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Tpo -c -o src/udevadm-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/udevadm-udev-builtin-usb_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c src/udevadm-udev-builtin-usb_id.obj: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udev-builtin-usb_id.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Tpo -c -o src/udevadm-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Tpo src/$(DEPDIR)/udevadm-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/udevadm-udev-builtin-usb_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` src/udevadm-udevadm.o: src/udevadm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm.Tpo -c -o src/udevadm-udevadm.o `test -f 'src/udevadm.c' || echo '$(srcdir)/'`src/udevadm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm.Tpo src/$(DEPDIR)/udevadm-udevadm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm.c' object='src/udevadm-udevadm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm.o `test -f 'src/udevadm.c' || echo '$(srcdir)/'`src/udevadm.c src/udevadm-udevadm.obj: src/udevadm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm.Tpo -c -o src/udevadm-udevadm.obj `if test -f 'src/udevadm.c'; then $(CYGPATH_W) 'src/udevadm.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm.Tpo src/$(DEPDIR)/udevadm-udevadm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm.c' object='src/udevadm-udevadm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm.obj `if test -f 'src/udevadm.c'; then $(CYGPATH_W) 'src/udevadm.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm.c'; fi` src/udevadm-udevadm-info.o: src/udevadm-info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-info.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-info.Tpo -c -o src/udevadm-udevadm-info.o `test -f 'src/udevadm-info.c' || echo '$(srcdir)/'`src/udevadm-info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-info.Tpo src/$(DEPDIR)/udevadm-udevadm-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-info.c' object='src/udevadm-udevadm-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-info.o `test -f 'src/udevadm-info.c' || echo '$(srcdir)/'`src/udevadm-info.c src/udevadm-udevadm-info.obj: src/udevadm-info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-info.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-info.Tpo -c -o src/udevadm-udevadm-info.obj `if test -f 'src/udevadm-info.c'; then $(CYGPATH_W) 'src/udevadm-info.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-info.Tpo src/$(DEPDIR)/udevadm-udevadm-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-info.c' object='src/udevadm-udevadm-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-info.obj `if test -f 'src/udevadm-info.c'; then $(CYGPATH_W) 'src/udevadm-info.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-info.c'; fi` src/udevadm-udevadm-control.o: src/udevadm-control.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-control.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-control.Tpo -c -o src/udevadm-udevadm-control.o `test -f 'src/udevadm-control.c' || echo '$(srcdir)/'`src/udevadm-control.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-control.Tpo src/$(DEPDIR)/udevadm-udevadm-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-control.c' object='src/udevadm-udevadm-control.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-control.o `test -f 'src/udevadm-control.c' || echo '$(srcdir)/'`src/udevadm-control.c src/udevadm-udevadm-control.obj: src/udevadm-control.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-control.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-control.Tpo -c -o src/udevadm-udevadm-control.obj `if test -f 'src/udevadm-control.c'; then $(CYGPATH_W) 'src/udevadm-control.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-control.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-control.Tpo src/$(DEPDIR)/udevadm-udevadm-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-control.c' object='src/udevadm-udevadm-control.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-control.obj `if test -f 'src/udevadm-control.c'; then $(CYGPATH_W) 'src/udevadm-control.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-control.c'; fi` src/udevadm-udevadm-monitor.o: src/udevadm-monitor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-monitor.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-monitor.Tpo -c -o src/udevadm-udevadm-monitor.o `test -f 'src/udevadm-monitor.c' || echo '$(srcdir)/'`src/udevadm-monitor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-monitor.Tpo src/$(DEPDIR)/udevadm-udevadm-monitor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-monitor.c' object='src/udevadm-udevadm-monitor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-monitor.o `test -f 'src/udevadm-monitor.c' || echo '$(srcdir)/'`src/udevadm-monitor.c src/udevadm-udevadm-monitor.obj: src/udevadm-monitor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-monitor.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-monitor.Tpo -c -o src/udevadm-udevadm-monitor.obj `if test -f 'src/udevadm-monitor.c'; then $(CYGPATH_W) 'src/udevadm-monitor.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-monitor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-monitor.Tpo src/$(DEPDIR)/udevadm-udevadm-monitor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-monitor.c' object='src/udevadm-udevadm-monitor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-monitor.obj `if test -f 'src/udevadm-monitor.c'; then $(CYGPATH_W) 'src/udevadm-monitor.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-monitor.c'; fi` src/udevadm-udevadm-settle.o: src/udevadm-settle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-settle.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-settle.Tpo -c -o src/udevadm-udevadm-settle.o `test -f 'src/udevadm-settle.c' || echo '$(srcdir)/'`src/udevadm-settle.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-settle.Tpo src/$(DEPDIR)/udevadm-udevadm-settle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-settle.c' object='src/udevadm-udevadm-settle.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-settle.o `test -f 'src/udevadm-settle.c' || echo '$(srcdir)/'`src/udevadm-settle.c src/udevadm-udevadm-settle.obj: src/udevadm-settle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-settle.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-settle.Tpo -c -o src/udevadm-udevadm-settle.obj `if test -f 'src/udevadm-settle.c'; then $(CYGPATH_W) 'src/udevadm-settle.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-settle.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-settle.Tpo src/$(DEPDIR)/udevadm-udevadm-settle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-settle.c' object='src/udevadm-udevadm-settle.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-settle.obj `if test -f 'src/udevadm-settle.c'; then $(CYGPATH_W) 'src/udevadm-settle.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-settle.c'; fi` src/udevadm-udevadm-trigger.o: src/udevadm-trigger.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-trigger.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-trigger.Tpo -c -o src/udevadm-udevadm-trigger.o `test -f 'src/udevadm-trigger.c' || echo '$(srcdir)/'`src/udevadm-trigger.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-trigger.Tpo src/$(DEPDIR)/udevadm-udevadm-trigger.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-trigger.c' object='src/udevadm-udevadm-trigger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-trigger.o `test -f 'src/udevadm-trigger.c' || echo '$(srcdir)/'`src/udevadm-trigger.c src/udevadm-udevadm-trigger.obj: src/udevadm-trigger.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-trigger.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-trigger.Tpo -c -o src/udevadm-udevadm-trigger.obj `if test -f 'src/udevadm-trigger.c'; then $(CYGPATH_W) 'src/udevadm-trigger.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-trigger.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-trigger.Tpo src/$(DEPDIR)/udevadm-udevadm-trigger.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-trigger.c' object='src/udevadm-udevadm-trigger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-trigger.obj `if test -f 'src/udevadm-trigger.c'; then $(CYGPATH_W) 'src/udevadm-trigger.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-trigger.c'; fi` src/udevadm-udevadm-test.o: src/udevadm-test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-test.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-test.Tpo -c -o src/udevadm-udevadm-test.o `test -f 'src/udevadm-test.c' || echo '$(srcdir)/'`src/udevadm-test.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-test.Tpo src/$(DEPDIR)/udevadm-udevadm-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-test.c' object='src/udevadm-udevadm-test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-test.o `test -f 'src/udevadm-test.c' || echo '$(srcdir)/'`src/udevadm-test.c src/udevadm-udevadm-test.obj: src/udevadm-test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-test.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-test.Tpo -c -o src/udevadm-udevadm-test.obj `if test -f 'src/udevadm-test.c'; then $(CYGPATH_W) 'src/udevadm-test.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-test.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-test.Tpo src/$(DEPDIR)/udevadm-udevadm-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-test.c' object='src/udevadm-udevadm-test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-test.obj `if test -f 'src/udevadm-test.c'; then $(CYGPATH_W) 'src/udevadm-test.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-test.c'; fi` src/udevadm-udevadm-test-builtin.o: src/udevadm-test-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-test-builtin.o -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-test-builtin.Tpo -c -o src/udevadm-udevadm-test-builtin.o `test -f 'src/udevadm-test-builtin.c' || echo '$(srcdir)/'`src/udevadm-test-builtin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-test-builtin.Tpo src/$(DEPDIR)/udevadm-udevadm-test-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-test-builtin.c' object='src/udevadm-udevadm-test-builtin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-test-builtin.o `test -f 'src/udevadm-test-builtin.c' || echo '$(srcdir)/'`src/udevadm-test-builtin.c src/udevadm-udevadm-test-builtin.obj: src/udevadm-test-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -MT src/udevadm-udevadm-test-builtin.obj -MD -MP -MF src/$(DEPDIR)/udevadm-udevadm-test-builtin.Tpo -c -o src/udevadm-udevadm-test-builtin.obj `if test -f 'src/udevadm-test-builtin.c'; then $(CYGPATH_W) 'src/udevadm-test-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-test-builtin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevadm-udevadm-test-builtin.Tpo src/$(DEPDIR)/udevadm-udevadm-test-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevadm-test-builtin.c' object='src/udevadm-udevadm-test-builtin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevadm_CPPFLAGS) $(CPPFLAGS) $(udevadm_CFLAGS) $(CFLAGS) -c -o src/udevadm-udevadm-test-builtin.obj `if test -f 'src/udevadm-test-builtin.c'; then $(CYGPATH_W) 'src/udevadm-test-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udevadm-test-builtin.c'; fi` src/udevd-udev-event.o: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-event.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-event.Tpo -c -o src/udevd-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-event.Tpo src/$(DEPDIR)/udevd-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/udevd-udev-event.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-event.o `test -f 'src/udev-event.c' || echo '$(srcdir)/'`src/udev-event.c src/udevd-udev-event.obj: src/udev-event.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-event.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-event.Tpo -c -o src/udevd-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-event.Tpo src/$(DEPDIR)/udevd-udev-event.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-event.c' object='src/udevd-udev-event.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-event.obj `if test -f 'src/udev-event.c'; then $(CYGPATH_W) 'src/udev-event.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-event.c'; fi` src/udevd-udev-watch.o: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-watch.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-watch.Tpo -c -o src/udevd-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-watch.Tpo src/$(DEPDIR)/udevd-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/udevd-udev-watch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-watch.o `test -f 'src/udev-watch.c' || echo '$(srcdir)/'`src/udev-watch.c src/udevd-udev-watch.obj: src/udev-watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-watch.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-watch.Tpo -c -o src/udevd-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-watch.Tpo src/$(DEPDIR)/udevd-udev-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-watch.c' object='src/udevd-udev-watch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-watch.obj `if test -f 'src/udev-watch.c'; then $(CYGPATH_W) 'src/udev-watch.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-watch.c'; fi` src/udevd-udev-node.o: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-node.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-node.Tpo -c -o src/udevd-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-node.Tpo src/$(DEPDIR)/udevd-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/udevd-udev-node.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-node.o `test -f 'src/udev-node.c' || echo '$(srcdir)/'`src/udev-node.c src/udevd-udev-node.obj: src/udev-node.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-node.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-node.Tpo -c -o src/udevd-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-node.Tpo src/$(DEPDIR)/udevd-udev-node.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-node.c' object='src/udevd-udev-node.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-node.obj `if test -f 'src/udev-node.c'; then $(CYGPATH_W) 'src/udev-node.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-node.c'; fi` src/udevd-udev-rules.o: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-rules.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-rules.Tpo -c -o src/udevd-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-rules.Tpo src/$(DEPDIR)/udevd-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/udevd-udev-rules.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-rules.o `test -f 'src/udev-rules.c' || echo '$(srcdir)/'`src/udev-rules.c src/udevd-udev-rules.obj: src/udev-rules.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-rules.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-rules.Tpo -c -o src/udevd-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-rules.Tpo src/$(DEPDIR)/udevd-udev-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-rules.c' object='src/udevd-udev-rules.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-rules.obj `if test -f 'src/udev-rules.c'; then $(CYGPATH_W) 'src/udev-rules.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-rules.c'; fi` src/udevd-udev-ctrl.o: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-ctrl.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-ctrl.Tpo -c -o src/udevd-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-ctrl.Tpo src/$(DEPDIR)/udevd-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/udevd-udev-ctrl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-ctrl.o `test -f 'src/udev-ctrl.c' || echo '$(srcdir)/'`src/udev-ctrl.c src/udevd-udev-ctrl.obj: src/udev-ctrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-ctrl.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-ctrl.Tpo -c -o src/udevd-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-ctrl.Tpo src/$(DEPDIR)/udevd-udev-ctrl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-ctrl.c' object='src/udevd-udev-ctrl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-ctrl.obj `if test -f 'src/udev-ctrl.c'; then $(CYGPATH_W) 'src/udev-ctrl.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-ctrl.c'; fi` src/udevd-udev-builtin.o: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin.Tpo -c -o src/udevd-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin.Tpo src/$(DEPDIR)/udevd-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/udevd-udev-builtin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin.o `test -f 'src/udev-builtin.c' || echo '$(srcdir)/'`src/udev-builtin.c src/udevd-udev-builtin.obj: src/udev-builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin.Tpo -c -o src/udevd-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin.Tpo src/$(DEPDIR)/udevd-udev-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin.c' object='src/udevd-udev-builtin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin.obj `if test -f 'src/udev-builtin.c'; then $(CYGPATH_W) 'src/udev-builtin.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin.c'; fi` src/udevd-udev-builtin-blkid.o: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-blkid.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-blkid.Tpo -c -o src/udevd-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-blkid.Tpo src/$(DEPDIR)/udevd-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/udevd-udev-builtin-blkid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-blkid.o `test -f 'src/udev-builtin-blkid.c' || echo '$(srcdir)/'`src/udev-builtin-blkid.c src/udevd-udev-builtin-blkid.obj: src/udev-builtin-blkid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-blkid.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-blkid.Tpo -c -o src/udevd-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-blkid.Tpo src/$(DEPDIR)/udevd-udev-builtin-blkid.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-blkid.c' object='src/udevd-udev-builtin-blkid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-blkid.obj `if test -f 'src/udev-builtin-blkid.c'; then $(CYGPATH_W) 'src/udev-builtin-blkid.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-blkid.c'; fi` src/udevd-udev-builtin-firmware.o: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-firmware.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-firmware.Tpo -c -o src/udevd-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-firmware.Tpo src/$(DEPDIR)/udevd-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/udevd-udev-builtin-firmware.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-firmware.o `test -f 'src/udev-builtin-firmware.c' || echo '$(srcdir)/'`src/udev-builtin-firmware.c src/udevd-udev-builtin-firmware.obj: src/udev-builtin-firmware.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-firmware.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-firmware.Tpo -c -o src/udevd-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-firmware.Tpo src/$(DEPDIR)/udevd-udev-builtin-firmware.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-firmware.c' object='src/udevd-udev-builtin-firmware.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-firmware.obj `if test -f 'src/udev-builtin-firmware.c'; then $(CYGPATH_W) 'src/udev-builtin-firmware.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-firmware.c'; fi` src/udevd-udev-builtin-hwdb.o: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-hwdb.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-hwdb.Tpo -c -o src/udevd-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-hwdb.Tpo src/$(DEPDIR)/udevd-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/udevd-udev-builtin-hwdb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-hwdb.o `test -f 'src/udev-builtin-hwdb.c' || echo '$(srcdir)/'`src/udev-builtin-hwdb.c src/udevd-udev-builtin-hwdb.obj: src/udev-builtin-hwdb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-hwdb.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-hwdb.Tpo -c -o src/udevd-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-hwdb.Tpo src/$(DEPDIR)/udevd-udev-builtin-hwdb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-hwdb.c' object='src/udevd-udev-builtin-hwdb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-hwdb.obj `if test -f 'src/udev-builtin-hwdb.c'; then $(CYGPATH_W) 'src/udev-builtin-hwdb.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-hwdb.c'; fi` src/udevd-udev-builtin-input_id.o: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-input_id.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-input_id.Tpo -c -o src/udevd-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-input_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/udevd-udev-builtin-input_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-input_id.o `test -f 'src/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev-builtin-input_id.c src/udevd-udev-builtin-input_id.obj: src/udev-builtin-input_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-input_id.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-input_id.Tpo -c -o src/udevd-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-input_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-input_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-input_id.c' object='src/udevd-udev-builtin-input_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-input_id.obj `if test -f 'src/udev-builtin-input_id.c'; then $(CYGPATH_W) 'src/udev-builtin-input_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-input_id.c'; fi` src/udevd-udev-builtin-kmod.o: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-kmod.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-kmod.Tpo -c -o src/udevd-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-kmod.Tpo src/$(DEPDIR)/udevd-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/udevd-udev-builtin-kmod.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-kmod.o `test -f 'src/udev-builtin-kmod.c' || echo '$(srcdir)/'`src/udev-builtin-kmod.c src/udevd-udev-builtin-kmod.obj: src/udev-builtin-kmod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-kmod.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-kmod.Tpo -c -o src/udevd-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-kmod.Tpo src/$(DEPDIR)/udevd-udev-builtin-kmod.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-kmod.c' object='src/udevd-udev-builtin-kmod.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-kmod.obj `if test -f 'src/udev-builtin-kmod.c'; then $(CYGPATH_W) 'src/udev-builtin-kmod.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-kmod.c'; fi` src/udevd-udev-builtin-path_id.o: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-path_id.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-path_id.Tpo -c -o src/udevd-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-path_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/udevd-udev-builtin-path_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-path_id.o `test -f 'src/udev-builtin-path_id.c' || echo '$(srcdir)/'`src/udev-builtin-path_id.c src/udevd-udev-builtin-path_id.obj: src/udev-builtin-path_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-path_id.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-path_id.Tpo -c -o src/udevd-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-path_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-path_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-path_id.c' object='src/udevd-udev-builtin-path_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-path_id.obj `if test -f 'src/udev-builtin-path_id.c'; then $(CYGPATH_W) 'src/udev-builtin-path_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-path_id.c'; fi` src/udevd-udev-builtin-usb_id.o: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-usb_id.o -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-usb_id.Tpo -c -o src/udevd-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-usb_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/udevd-udev-builtin-usb_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-usb_id.o `test -f 'src/udev-builtin-usb_id.c' || echo '$(srcdir)/'`src/udev-builtin-usb_id.c src/udevd-udev-builtin-usb_id.obj: src/udev-builtin-usb_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udev-builtin-usb_id.obj -MD -MP -MF src/$(DEPDIR)/udevd-udev-builtin-usb_id.Tpo -c -o src/udevd-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udev-builtin-usb_id.Tpo src/$(DEPDIR)/udevd-udev-builtin-usb_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev-builtin-usb_id.c' object='src/udevd-udev-builtin-usb_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udev-builtin-usb_id.obj `if test -f 'src/udev-builtin-usb_id.c'; then $(CYGPATH_W) 'src/udev-builtin-usb_id.c'; else $(CYGPATH_W) '$(srcdir)/src/udev-builtin-usb_id.c'; fi` src/udevd-udevd.o: src/udevd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udevd.o -MD -MP -MF src/$(DEPDIR)/udevd-udevd.Tpo -c -o src/udevd-udevd.o `test -f 'src/udevd.c' || echo '$(srcdir)/'`src/udevd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udevd.Tpo src/$(DEPDIR)/udevd-udevd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevd.c' object='src/udevd-udevd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udevd.o `test -f 'src/udevd.c' || echo '$(srcdir)/'`src/udevd.c src/udevd-udevd.obj: src/udevd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-udevd.obj -MD -MP -MF src/$(DEPDIR)/udevd-udevd.Tpo -c -o src/udevd-udevd.obj `if test -f 'src/udevd.c'; then $(CYGPATH_W) 'src/udevd.c'; else $(CYGPATH_W) '$(srcdir)/src/udevd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-udevd.Tpo src/$(DEPDIR)/udevd-udevd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udevd.c' object='src/udevd-udevd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-udevd.obj `if test -f 'src/udevd.c'; then $(CYGPATH_W) 'src/udevd.c'; else $(CYGPATH_W) '$(srcdir)/src/udevd.c'; fi` src/udevd-sd-daemon.o: src/sd-daemon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-sd-daemon.o -MD -MP -MF src/$(DEPDIR)/udevd-sd-daemon.Tpo -c -o src/udevd-sd-daemon.o `test -f 'src/sd-daemon.c' || echo '$(srcdir)/'`src/sd-daemon.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-sd-daemon.Tpo src/$(DEPDIR)/udevd-sd-daemon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/sd-daemon.c' object='src/udevd-sd-daemon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-sd-daemon.o `test -f 'src/sd-daemon.c' || echo '$(srcdir)/'`src/sd-daemon.c src/udevd-sd-daemon.obj: src/sd-daemon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -MT src/udevd-sd-daemon.obj -MD -MP -MF src/$(DEPDIR)/udevd-sd-daemon.Tpo -c -o src/udevd-sd-daemon.obj `if test -f 'src/sd-daemon.c'; then $(CYGPATH_W) 'src/sd-daemon.c'; else $(CYGPATH_W) '$(srcdir)/src/sd-daemon.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/udevd-sd-daemon.Tpo src/$(DEPDIR)/udevd-sd-daemon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/sd-daemon.c' object='src/udevd-sd-daemon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udevd_CPPFLAGS) $(CPPFLAGS) $(udevd_CFLAGS) $(CFLAGS) -c -o src/udevd-sd-daemon.obj `if test -f 'src/sd-daemon.c'; then $(CYGPATH_W) 'src/sd-daemon.c'; else $(CYGPATH_W) '$(srcdir)/src/sd-daemon.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf src/.libs src/_libs -rm -rf src/gudev/.libs src/gudev/_libs distclean-libtool: -rm -f libtool config.lt install-man7: $(dist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man7dir)" || $(MKDIR_P) "$(DESTDIR)$(man7dir)" @list=''; test -n "$(man7dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) install-man8: $(dist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-dist_systemdsystemunitDATA: $(dist_systemdsystemunit_DATA) @$(NORMAL_INSTALL) test -z "$(systemdsystemunitdir)" || $(MKDIR_P) "$(DESTDIR)$(systemdsystemunitdir)" @list='$(dist_systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(systemdsystemunitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(systemdsystemunitdir)" || exit $$?; \ done uninstall-dist_systemdsystemunitDATA: @$(NORMAL_UNINSTALL) @list='$(dist_systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(systemdsystemunitdir)'; $(am__uninstall_files_from_dir) install-dist_udevconfDATA: $(dist_udevconf_DATA) @$(NORMAL_INSTALL) test -z "$(udevconfdir)" || $(MKDIR_P) "$(DESTDIR)$(udevconfdir)" @list='$(dist_udevconf_DATA)'; test -n "$(udevconfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevconfdir)" || exit $$?; \ done uninstall-dist_udevconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_udevconf_DATA)'; test -n "$(udevconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevconfdir)'; $(am__uninstall_files_from_dir) install-dist_udevhomeDATA: $(dist_udevhome_DATA) @$(NORMAL_INSTALL) test -z "$(udevhomedir)" || $(MKDIR_P) "$(DESTDIR)$(udevhomedir)" @list='$(dist_udevhome_DATA)'; test -n "$(udevhomedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevhomedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevhomedir)" || exit $$?; \ done uninstall-dist_udevhomeDATA: @$(NORMAL_UNINSTALL) @list='$(dist_udevhome_DATA)'; test -n "$(udevhomedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevhomedir)'; $(am__uninstall_files_from_dir) install-dist_udevkeymapDATA: $(dist_udevkeymap_DATA) @$(NORMAL_INSTALL) test -z "$(udevkeymapdir)" || $(MKDIR_P) "$(DESTDIR)$(udevkeymapdir)" @list='$(dist_udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevkeymapdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevkeymapdir)" || exit $$?; \ done uninstall-dist_udevkeymapDATA: @$(NORMAL_UNINSTALL) @list='$(dist_udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevkeymapdir)'; $(am__uninstall_files_from_dir) install-dist_udevkeymapforcerelDATA: $(dist_udevkeymapforcerel_DATA) @$(NORMAL_INSTALL) test -z "$(udevkeymapforcereldir)" || $(MKDIR_P) "$(DESTDIR)$(udevkeymapforcereldir)" @list='$(dist_udevkeymapforcerel_DATA)'; test -n "$(udevkeymapforcereldir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevkeymapforcereldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevkeymapforcereldir)" || exit $$?; \ done uninstall-dist_udevkeymapforcerelDATA: @$(NORMAL_UNINSTALL) @list='$(dist_udevkeymapforcerel_DATA)'; test -n "$(udevkeymapforcereldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevkeymapforcereldir)'; $(am__uninstall_files_from_dir) install-dist_udevrulesDATA: $(dist_udevrules_DATA) @$(NORMAL_INSTALL) test -z "$(udevrulesdir)" || $(MKDIR_P) "$(DESTDIR)$(udevrulesdir)" @list='$(dist_udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevrulesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevrulesdir)" || exit $$?; \ done uninstall-dist_udevrulesDATA: @$(NORMAL_UNINSTALL) @list='$(dist_udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevrulesdir)'; $(am__uninstall_files_from_dir) install-girDATA: $(gir_DATA) @$(NORMAL_INSTALL) test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)" @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \ done uninstall-girDATA: @$(NORMAL_UNINSTALL) @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-sharepkgconfigDATA: $(sharepkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(sharepkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(sharepkgconfigdir)" @list='$(sharepkgconfig_DATA)'; test -n "$(sharepkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sharepkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sharepkgconfigdir)" || exit $$?; \ done uninstall-sharepkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(sharepkgconfig_DATA)'; test -n "$(sharepkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sharepkgconfigdir)'; $(am__uninstall_files_from_dir) install-systemdsystemunitDATA: $(systemdsystemunit_DATA) @$(NORMAL_INSTALL) test -z "$(systemdsystemunitdir)" || $(MKDIR_P) "$(DESTDIR)$(systemdsystemunitdir)" @list='$(systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(systemdsystemunitdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(systemdsystemunitdir)" || exit $$?; \ done uninstall-systemdsystemunitDATA: @$(NORMAL_UNINSTALL) @list='$(systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(systemdsystemunitdir)'; $(am__uninstall_files_from_dir) install-typelibsDATA: $(typelibs_DATA) @$(NORMAL_INSTALL) test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)" @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \ done uninstall-typelibsDATA: @$(NORMAL_UNINSTALL) @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typelibsdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-libgudev_includeHEADERS: $(libgudev_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(libgudev_includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgudev_includedir)" @list='$(libgudev_include_HEADERS)'; test -n "$(libgudev_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgudev_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgudev_includedir)" || exit $$?; \ done uninstall-libgudev_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libgudev_include_HEADERS)'; test -n "$(libgudev_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libgudev_includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \ $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(udevconfdir)" "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(udevkeymapdir)" "$(DESTDIR)$(udevkeymapforcereldir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(sharepkgconfigdir)" "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libgudev_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f src/accelerometer/$(DEPDIR)/$(am__dirstamp) -rm -f src/accelerometer/$(am__dirstamp) -rm -f src/ata_id/$(DEPDIR)/$(am__dirstamp) -rm -f src/ata_id/$(am__dirstamp) -rm -f src/cdrom_id/$(DEPDIR)/$(am__dirstamp) -rm -f src/cdrom_id/$(am__dirstamp) -rm -f src/collect/$(DEPDIR)/$(am__dirstamp) -rm -f src/collect/$(am__dirstamp) -rm -f src/floppy/$(DEPDIR)/$(am__dirstamp) -rm -f src/floppy/$(am__dirstamp) -rm -f src/gudev/$(DEPDIR)/$(am__dirstamp) -rm -f src/gudev/$(am__dirstamp) -rm -f src/keymap/$(DEPDIR)/$(am__dirstamp) -rm -f src/keymap/$(am__dirstamp) -rm -f src/mtd_probe/$(DEPDIR)/$(am__dirstamp) -rm -f src/mtd_probe/$(am__dirstamp) -rm -f src/scsi_id/$(DEPDIR)/$(am__dirstamp) -rm -f src/scsi_id/$(am__dirstamp) -rm -f src/v4l_id/$(DEPDIR)/$(am__dirstamp) -rm -f src/v4l_id/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local \ clean-noinstLTLIBRARIES clean-pkglibexecPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf src/$(DEPDIR) src/accelerometer/$(DEPDIR) src/ata_id/$(DEPDIR) src/cdrom_id/$(DEPDIR) src/collect/$(DEPDIR) src/floppy/$(DEPDIR) src/gudev/$(DEPDIR) src/keymap/$(DEPDIR) src/mtd_probe/$(DEPDIR) src/scsi_id/$(DEPDIR) src/v4l_id/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_docDATA \ install-dist_systemdsystemunitDATA install-dist_udevconfDATA \ install-dist_udevhomeDATA install-dist_udevhomeSCRIPTS \ install-dist_udevkeymapDATA \ install-dist_udevkeymapforcerelDATA install-dist_udevrulesDATA \ install-girDATA install-includeHEADERS \ install-libgudev_includeHEADERS install-man \ install-pkgconfigDATA install-sharepkgconfigDATA \ install-systemdsystemunitDATA install-typelibsDATA \ install-udevhomeSCRIPTS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES \ install-pkglibexecPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man7 install-man8 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf src/$(DEPDIR) src/accelerometer/$(DEPDIR) src/ata_id/$(DEPDIR) src/cdrom_id/$(DEPDIR) src/collect/$(DEPDIR) src/floppy/$(DEPDIR) src/gudev/$(DEPDIR) src/keymap/$(DEPDIR) src/mtd_probe/$(DEPDIR) src/scsi_id/$(DEPDIR) src/v4l_id/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \ uninstall-dist_systemdsystemunitDATA \ uninstall-dist_udevconfDATA uninstall-dist_udevhomeDATA \ uninstall-dist_udevhomeSCRIPTS uninstall-dist_udevkeymapDATA \ uninstall-dist_udevkeymapforcerelDATA \ uninstall-dist_udevrulesDATA uninstall-girDATA \ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-libgudev_includeHEADERS uninstall-man \ uninstall-pkgconfigDATA uninstall-pkglibexecPROGRAMS \ uninstall-sharepkgconfigDATA uninstall-systemdsystemunitDATA \ uninstall-typelibsDATA uninstall-udevhomeSCRIPTS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man7 uninstall-man8 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ check-am ctags-recursive install install-am install-data-am \ install-exec-am install-strip tags-recursive uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-TESTS check-am clean \ clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local \ clean-noinstLTLIBRARIES clean-pkglibexecPROGRAMS ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-lzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-local distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-data-hook \ install-dist_docDATA install-dist_systemdsystemunitDATA \ install-dist_udevconfDATA install-dist_udevhomeDATA \ install-dist_udevhomeSCRIPTS install-dist_udevkeymapDATA \ install-dist_udevkeymapforcerelDATA install-dist_udevrulesDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-exec-hook install-girDATA install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-libgudev_includeHEADERS \ install-man install-man7 install-man8 install-pdf \ install-pdf-am install-pkgconfigDATA \ install-pkglibexecPROGRAMS install-ps install-ps-am \ install-sharepkgconfigDATA install-strip \ install-systemdsystemunitDATA install-typelibsDATA \ install-udevhomeSCRIPTS installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-dist_docDATA \ uninstall-dist_systemdsystemunitDATA \ uninstall-dist_udevconfDATA uninstall-dist_udevhomeDATA \ uninstall-dist_udevhomeSCRIPTS uninstall-dist_udevkeymapDATA \ uninstall-dist_udevkeymapforcerelDATA \ uninstall-dist_udevrulesDATA uninstall-girDATA uninstall-hook \ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-libgudev_includeHEADERS uninstall-man uninstall-man7 \ uninstall-man8 uninstall-pkgconfigDATA \ uninstall-pkglibexecPROGRAMS uninstall-sharepkgconfigDATA \ uninstall-systemdsystemunitDATA uninstall-typelibsDATA \ uninstall-udevhomeSCRIPTS %.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 $@ # 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* # ------------------------------------------------------------------------------ udev-confdirs: -mkdir -p $(DESTDIR)$(sysconfdir)/udev/rules.d -mkdir -p $(DESTDIR)$(libexecdir)/udev/devices @WITH_SYSTEMD_TRUE@systemd-install-hook: @WITH_SYSTEMD_TRUE@ mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants @WITH_SYSTEMD_TRUE@ ln -sf ../udev-control.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-control.socket @WITH_SYSTEMD_TRUE@ ln -sf ../udev-kernel.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-kernel.socket @WITH_SYSTEMD_TRUE@ mkdir -p $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants @WITH_SYSTEMD_TRUE@ ln -sf ../udev.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev.service @WITH_SYSTEMD_TRUE@ ln -sf ../udev-trigger.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev-trigger.service @HAVE_XSLTPROC_TRUE@src/%.7 src/%.8 : src/%.xml @HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< @HAVE_XSLTPROC_TRUE@src/%.html : src/%.xml @HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/xhtml-1_1/docbook.xsl $< # 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 @ENABLE_GUDEV_TRUE@src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list @ENABLE_GUDEV_TRUE@ $(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@ @ENABLE_GUDEV_TRUE@src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list @ENABLE_GUDEV_TRUE@ $(AM_V_GEN)echo "#include \"gudevmarshal.h\"" > $@ && \ @ENABLE_GUDEV_TRUE@ glib-genmarshal $< --prefix=g_udev_marshal --body >> $@ @ENABLE_GUDEV_TRUE@src/gudev/gudevenumtypes.h: src/gudev/gudevenumtypes.h.template src/gudev/gudevenums.h @ENABLE_GUDEV_TRUE@ $(AM_V_GEN)glib-mkenums --template $^ > \ @ENABLE_GUDEV_TRUE@ $@.tmp && mv $@.tmp $@ @ENABLE_GUDEV_TRUE@src/gudev/gudevenumtypes.c: src/gudev/gudevenumtypes.c.template src/gudev/gudevenums.h @ENABLE_GUDEV_TRUE@ $(AM_V_GEN)glib-mkenums --template $^ > \ @ENABLE_GUDEV_TRUE@ $@.tmp && mv $@.tmp $@ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@src/gudev/GUdev-1.0.gir: libgudev-1.0.la $(G_IR_SCANNER) @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(AM_V_GEN)$(G_IR_SCANNER) -v \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --warn-all \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --namespace GUdev \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --nsversion=1.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --include=GObject-2.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --library=gudev-1.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --library-path=$(top_builddir)/src \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --library-path=$(top_builddir)/src/gudev \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --output $@ \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --pkg=glib-2.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --pkg=gobject-2.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --pkg-export=gudev-1.0 \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ --c-include=gudev/gudev.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ -I$(top_srcdir)/src/\ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ -I$(top_builddir)/src/\ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ -D_GUDEV_COMPILATION \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ -D_GUDEV_WORK_AROUND_DEV_T_BUG \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudev.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevtypes.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevenums.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(or $(wildcard $(top_builddir)/src/gudev/gudevenumtypes.h),$(top_srcdir)/src/gudev/gudevenumtypes.h) \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevclient.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevdevice.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevenumerator.h \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevclient.c \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevdevice.c \ @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(top_srcdir)/src/gudev/gudevenumerator.c @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@src/gudev/GUdev-1.0.typelib: src/gudev/GUdev-1.0.gir $(G_IR_COMPILER) @ENABLE_GUDEV_TRUE@@ENABLE_INTROSPECTION_TRUE@ $(AM_V_GEN)g-ir-compiler $< -o $@ # move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed @ENABLE_GUDEV_TRUE@libgudev-install-move-hook: @ENABLE_GUDEV_TRUE@ if test "$(libdir)" != "$(rootlib_execdir)"; then \ @ENABLE_GUDEV_TRUE@ mkdir -p $(DESTDIR)$(rootlib_execdir) && \ @ENABLE_GUDEV_TRUE@ so_img_name=$$(readlink $(DESTDIR)$(libdir)/libgudev-1.0.so) && \ @ENABLE_GUDEV_TRUE@ so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ @ENABLE_GUDEV_TRUE@ ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libgudev-1.0.so && \ @ENABLE_GUDEV_TRUE@ mv $(DESTDIR)$(libdir)/libgudev-1.0.so.* $(DESTDIR)$(rootlib_execdir); \ @ENABLE_GUDEV_TRUE@ fi @ENABLE_GUDEV_TRUE@libgudev-uninstall-move-hook: @ENABLE_GUDEV_TRUE@ rm -f $(DESTDIR)$(rootlib_execdir)/libgudev-1.0.so* @ENABLE_KEYMAP_TRUE@src/keymap/keys.txt: $(INCLUDE_PREFIX)/linux/input.h @ENABLE_KEYMAP_TRUE@ $(AM_V_at)mkdir -p src/keymap @ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(AWK) '/^#define.*KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' < $< | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@ @ENABLE_KEYMAP_TRUE@src/keymap/keys-from-name.gperf: src/keymap/keys.txt @ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@ @ENABLE_KEYMAP_TRUE@src/keymap/keys-from-name.h: src/keymap/keys-from-name.gperf Makefile @ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@ @ENABLE_KEYMAP_TRUE@src/keymap/keys-to-name.h: src/keymap/keys.txt Makefile @ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@ @ENABLE_KEYMAP_TRUE@keymaps-distcheck-hook: src/keymap/keys.txt @ENABLE_KEYMAP_TRUE@ $(top_srcdir)/src/keymap/check-keymaps.sh $(top_srcdir) $^ # ------------------------------------------------------------------------------ clean-local: rm -rf udev-test-install distclean-local: rm -rf autom4te.cache 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) 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 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: