xf86-input-acecad 1.2.1

This commit is contained in:
matthieu 2007-11-24 21:02:37 +00:00
parent c57cdcb660
commit 5212aa9d2c
9 changed files with 1658 additions and 725 deletions

View File

@ -1,45 +1,488 @@
2006-04-06 Adam Jackson <ajax@freedesktop.org> commit 38ba390f775e2f6001c8887328c5b925f623308a
Author: Julien Cristau <jcristau@debian.org>
Date: Fri Sep 7 02:17:29 2007 +0200
* configure.ac: Bump to 1.2.1
* src/acecad.c:
Unlibcwrap and bump server version requirement. Bump to 1.1.0.
2005-12-20 Kevin E. Martin <kem-at-freedesktop-dot-org> commit 8bcc6d22889cc40c6b7d1582f87d4b2a816167ab
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date: Tue Aug 28 17:31:54 2007 -0700
Make compatible with new input ABI
commit 171d4c8dc6136aa8c14aedd0ee107d6ba957de04
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Mon Jul 9 11:03:00 2007 +0200
Don't crash X when the tablet wasn't found.
X would crash when switching to console if the acecad module was loaded but the tablet had not been configured.
Fix by properly freeing structures before returning NULL in PreInit()
commit c69e2c95b9eb2381709c9de14957d24ab919b5bc
Author: Matthieu Herrb <matthieu@deville.herrb.com>
Date: Wed May 30 23:34:13 2007 -0600
fix build on BSD systems.
commit 62bce174e7a3c896fabe40813639e479d9652452
Author: Matthieu Herrb <matthieu@deville.herrb.com>
Date: Wed May 30 23:33:56 2007 -0600
Add .gitignore
commit 1af7e022be2bcbcf50d12c0c3847a853a911347c
Author: Paul Vojta <vojta@Math.Berkeley.EDU>
Date: Mon Apr 30 11:45:53 2007 -0700
Off-by-one (and comment) fix.
Just a quick patch:
commit cc6bc3b848dfa312baf0cf4037b3e600d59a8f7e
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sun Apr 29 05:09:41 2007 +0200
Bump to 1.2.0.
commit 405fac1dd34bbbfa8a2dd1a0ac2664871d914e1f
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sun Apr 29 05:02:03 2007 +0200
Simplify flag setup.
commit ac08aacf4693e2ed824c15c9d243e7e9c5750cc3
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sun Apr 29 04:44:27 2007 +0200
More whitespace/coding style cleanups.
commit 9b9b1d03609996dc3220870fa6e226c46c888c83
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sun Apr 29 04:42:04 2007 +0200
Centralize the success code for the probe routine.
commit 93736ac2bf92ad342255a64120c2685f4074a0e9
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 15:32:32 2007 +0200
Keep track of device availability.
Don't spam the log with errors about the device not being available, just inform the user when the device is available again.
commit c471639adfba3e7c24c95b24da287147f86bd3d1
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 15:10:25 2007 +0200
NOTAVAIL macro to check if errno means device not available.
Define (and use) a NOTAVAIL macro that checks errno against ENODEV, ENXIO and ENOENT, instead of checking manually against ENODEV only.
commit 81e37b4b042b824654b4bf2353732741cf49bce7
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 14:42:20 2007 +0200
Make acecadAutoDev into a flag.
Introduce AUTODEV_FLAG for the flags field in AceCadPrivateRec to tell if we are autodetecting devices or not, instead of having a separate acecadAutoDev field.
commit bda0ee988acbae97dc908574c1247cf1ceb5b3c9
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 14:36:12 2007 +0200
Make acecadUSB into a flag.
Introduce USB_FLAG for the flags field in AceCadPrivateRec to tell if we have a USB device or not, instead of having a separate acecadUSB field.
commit 2b88cc3642a94a58e777d8a931f7bbe9f16e9b93
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 14:27:58 2007 +0200
More whitespace cleanup.
commit 1d8e61f461fef959212d5a05cac70a590927ec20
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 14:25:22 2007 +0200
More coding style cleanups.
commit e5704a3484bb8cc3f295431ff2e50e3e628db0c7
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 14:19:49 2007 +0200
Add missing newlines in a couple of messages.
commit a8350a018d50f2a0e2adcf6ec8c76f6ab412dd16
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 05:29:41 2007 +0200
Whitespace cleanup.
commit 46b34bec71949b815b1372464b887da134378ae8
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 05:10:39 2007 +0200
De-spammify AceCadAutoDevProbe().
Demote X_ERRORs in AceCadAutoDevProbe() to X_WARNINGs, and add an X-style
verbosity parameter. This is set to 0 during initial probe, and to 4 during
runtime probes.
commit 41941cb9e2365b27196805c22424dc9ad694806f
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 04:55:26 2007 +0200
Re-probe on device not found on input if auto-dev is active.
If USBReadInput() fails because the device is not being found, and auto-dev is
active, try re-probing for the device. The only downside of this procedure is
that the log may get spammed a lot as long as no device can be found.
commit 838980da1cf5073ce0d532f94358cfc951e3b1c4
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 03:43:04 2007 +0200
Re-probe for device if DeviceOn fails and auto-dev is active.
If DeviceOn does not find the device and auto-dev is active, run the probe
again to try to find the new location of the device (if present).
commit dba3190cb5e5c041c6b5811fa9efd1f0a5931fb6
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Apr 28 03:09:17 2007 +0200
Device autodetection via sysfs.
If support for sysfs is compiled in and the libsysfs library is found, the
acecad driver will now try to autodetect the device via sysfs at first. If this
fails, it will probe /dev/input/eventX devices.
Currently the Name option is ignored during sysfs detection: the first possibly
valid candidate is accepted without further checks.
commit 4f738d5eee947d5e4bd27f4ecdf198c5718ca53a
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Fri Apr 27 14:40:43 2007 +0200
"Name" option to configure autodev detection string.
The string we look for when probing event devices can now be configured with
the "Name" option.
commit 947aa75cf284b651c77ae1f0431cae0c3c3d3d05
Merge: 581635e... 805ccfb...
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Fri Apr 27 12:23:44 2007 +0200
Merge branch 'master' into autodev
commit 805ccfb003d7e8d71da18210186217583df710b1
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Fri Apr 27 00:30:58 2007 +0200
Add autogen.sh and autogenerate ChangeLog to dist
Get rid of the manually maintained ChangeLog and put in some rules to
autogenerate it from git logs, following the xorg/lib/libXi example.
Also add ChangeLog and autogen.sh to the dist files.
commit 558f80d3d4c21ddd5fa1981574c449bc4d86ddfa
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Fri Apr 27 00:01:54 2007 +0200
Add autoconf check for linux/input.h
Since X went modular, we cannot rely on LINUX_INPUT being defined even when the
Linux input subsystem is available. Fix: add an autoconf rule that checks for
linux/input.h and define LINUX_INPUT if the header is found.
commit 581635e2fc5563b2697d51e3aeec046918d8caee
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Thu Apr 26 13:33:51 2007 +0200
Initial support for device autodetection.
When the "Device" option is missing or set to "auto-dev" the acecad module will
attempt autodetection of the correct device.
Currently, it will probe all /dev/input/eventX nodes until one is found that
reports a device name that begins with "ACECAD".
commit c6b21d102908104ffe9b6103894f8c8fcf2ae7f4
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Thu Apr 26 03:04:06 2007 +0200
Uniformize messages.
Use xf86Msg, prepending local->name when possible and upcasing ACECAD (as per
their site, and to differentiate from the software company).
Also reduce verbosity by using xf86MsgVerb with verbosity 4 for messages which
are not of interest for users.
commit 4fb81ff8b0828294b3e1d0c63c67dca318ee7959
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Thu Apr 26 02:16:10 2007 +0200
We always have config.h.
Quoting Alan Coopersmith from http://lists.x.org/archives/xorg/2007-April/024058.html
> Now that we are no longer sharing source with the monolith, should
> all the #ifdef HAVE_CONFIG_H's be removed and just always include
> config.h now?
commit e3499189b91725e09e25a468f21612e805dfa89d
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Tue Apr 24 22:00:47 2007 +0200
Use autoconfigured package version if possible.
commit 7fe06dc37595a39e0298d9123a669d06df934c35
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Tue Apr 24 15:28:51 2007 +0200
Bump to 1.1.1.
commit 7665457d70a37c3187b3dfcc54a7f15058e8acba
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Tue Apr 24 13:35:52 2007 +0200
Support 2.6.x kernels.
commit 1eae0e35655ffddb8a203a51bb1e2aa53928a87e
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Tue Apr 24 12:44:58 2007 +0200
Use the proper MessageType for probed, default, info and error messages.
commit 9ab58ae1001a399907458d236b1f725e3503ee90
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Tue Apr 24 12:38:38 2007 +0200
Clean up defines, and add an include to fix compilation when LINUX_INPUT is defined
commit 190e38f513ed645b1662441a4b90eaf778878316
Author: Adam Jackson <ajax@nwnk.net>
Date: Fri Apr 7 16:16:33 2006 +0000
Bump to 1.1.0.
commit a128e04d9240409cf8c9a9c92671f374959c60d0
Author: Adam Jackson <ajax@nwnk.net>
Date: Fri Apr 7 16:13:56 2006 +0000
Unlibcwrap and bump server version requirement.
commit aaec49a8e42193e0d7f68132f01e8d802ecee27c
Author: Kevin E Martin <kem@kem.org>
Date: Wed Dec 21 02:29:55 2005 +0000
* configure.ac:
Update package version for X11R7 release. Update package version for X11R7 release.
2005-12-14 Kevin E. Martin <kem-at-freedesktop-dot-org> commit e5dd84c88172873a99f12798cc00e59c5185afc7
Author: Adam Jackson <ajax@nwnk.net>
Date: Mon Dec 19 16:25:49 2005 +0000
Stub COPYING files
commit 2e050d849b72a5119790641fe6b7a83f5e6f15f0
Author: Kevin E Martin <kem@kem.org>
Date: Thu Dec 15 00:24:13 2005 +0000
* configure.ac:
Update package version number for final X11R7 release candidate. Update package version number for final X11R7 release candidate.
2005-12-06 Kevin E. Martin <kem-at-freedesktop-dot-org> commit 8df008ad5451a0afc4576be121e112ae43c5a4bf
Author: Kevin E Martin <kem@kem.org>
Date: Tue Dec 6 22:48:27 2005 +0000
* man/Makefile.am:
Change *man_SOURCES ==> *man_PRE to fix autotools warnings. Change *man_SOURCES ==> *man_PRE to fix autotools warnings.
2005-12-03 Kevin E. Martin <kem-at-freedesktop-dot-org> commit a3e290213ce7ce920145a4a7368e052f09768164
Author: Kevin E Martin <kem@kem.org>
Date: Sat Dec 3 05:49:29 2005 +0000
* configure.ac:
Update package version number for X11R7 RC3 release. Update package version number for X11R7 RC3 release.
2005-12-01 Kevin E. Martin <kem-at-freedesktop-dot-org> commit 31963eae0d36ca43f103a885430b39626021aa94
Author: Kevin E Martin <kem@kem.org>
Date: Fri Dec 2 02:16:04 2005 +0000
* configure.ac:
Remove extraneous AC_MSG_RESULT. Remove extraneous AC_MSG_RESULT.
2005-11-29 Adam Jackson <ajax@freedesktop.org> commit 295f696a950f0883c040969a7381be1b16275674
Author: Adam Jackson <ajax@nwnk.net>
Date: Tue Nov 29 23:29:53 2005 +0000
* configure.ac:
Only build dlloader modules by default. Only build dlloader modules by default.
2005-11-09 Kevin E. Martin <kem-at-freedesktop-dot-org> commit b8075ef13db08347876dd74b06bd5d05be00d9ff
Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
Date: Mon Nov 28 22:04:05 2005 +0000
Change *mandir targets to use new *_MAN_DIR variables set by xorg-macros.m4
update to fix bug #5167 (Linux prefers *.1x man pages in man1 subdir)
commit cab1f00c4f2d2b2a12260c078b06a30bd03b8d35
Author: Eric Anholt <anholt@freebsd.org>
Date: Mon Nov 21 10:49:00 2005 +0000
Add .cvsignores for drivers.
commit 9f164337b4c0ff7f3189f50033f5635550fbe598
Author: Kevin E Martin <kem@kem.org>
Date: Wed Nov 9 21:15:10 2005 +0000
* configure.ac:
Update package version number for X11R7 RC2 release. Update package version number for X11R7 RC2 release.
2005-11-01 Kevin E. Martin <kem-at-freedesktop-dot-org> commit 37f29b066c955b9ef85b95f39ed4ca9c4c799da9
Author: Kevin E Martin <kem@kem.org>
Date: Tue Nov 1 15:08:48 2005 +0000
* configure.ac:
Update pkgcheck depedencies to work with separate build roots. Update pkgcheck depedencies to work with separate build roots.
commit 0d5c65828cbda96688234ca98de51748cc6a7a9c
Author: Kevin E Martin <kem@kem.org>
Date: Wed Oct 19 02:47:59 2005 +0000
Update package version number for RC1 release.
commit 48e99a4438d6e4c869cae23f2bcf17504b36f12b
Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
Date: Tue Oct 18 00:01:50 2005 +0000
Use @DRIVER_MAN_SUFFIX@ instead of $(DRIVER_MAN_SUFFIX) in macro
substitutions to work better with BSD make
commit 9cd8523d3047eb00e9d1f90158d932c8c9c8d511
Author: Adam Jackson <ajax@nwnk.net>
Date: Mon Oct 17 22:57:25 2005 +0000
More 1.7 braindamage: define EXTRA_DIST in terms of @DRIVER_NAME@ instead
of indirectly
commit 33d7ef77bdc4d55c01f50f9a29ac660703c0e380
Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
Date: Mon Oct 17 00:08:53 2005 +0000
Use sed & cpp to substitute variables in driver man pages
commit 262151fd3f961ee1dc065943eff62e7c27823340
Author: Daniel Stone <daniel@fooishbar.org>
Date: Thu Aug 18 09:03:36 2005 +0000
Update autogen.sh to one that does objdir != srcdir.
commit 3e83d76e4315468df9c85b7a917508e5e0adc8e6
Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
Date: Wed Aug 10 14:07:21 2005 +0000
Don\'t lose existing CFLAGS in all the input drivers and some of the video
drivers
commit 81612155b583e3fbaff7af662edf7353cfb0da8e
Author: Kevin E Martin <kem@kem.org>
Date: Fri Jul 29 21:22:39 2005 +0000
Various changes preparing packages for RC0:
- Verify and update package version numbers as needed
- Implement versioning scheme
- Change bug address to point to bugzilla bug entry form
- Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to
reenable it)
- Fix makedepend to use pkgconfig and pass distcheck
- Update build script to build macros first
- Update modular Xorg version
commit 01f7b4b23a52439aab8262d3a500f3339be04eb3
Author: Kevin E Martin <kem@kem.org>
Date: Wed Jul 13 20:03:20 2005 +0000
Make the module dir configurable
commit b458a723e098531da7dbfac39747dc34df431831
Author: Kevin E Martin <kem@kem.org>
Date: Wed Jul 13 02:20:57 2005 +0000
Update all input drivers to pass distcheck
commit f603ac2e59944b7f75ff82803c67f2ce02321646
Author: Adam Jackson <ajax@nwnk.net>
Date: Tue Jul 12 06:15:07 2005 +0000
Build skeletons for input drivers. Should basically work.
commit 0b74a6722cf7c0e24bf31720cfa4ce0eb1a479d2
Author: Adam Jackson <ajax@nwnk.net>
Date: Mon Jul 11 02:37:58 2005 +0000
Prep input drivers for modularizing by adding guarded #include "config.h"
commit a02a441079feb7cc208c4d4e190d3c47819fd59f
Author: Adam Jackson <ajax@nwnk.net>
Date: Tue Jun 28 20:54:21 2005 +0000
Bug #1565: Don't delete the driver twice. (Stéphane VOLTZ)
commit 0702e4b5b996f7ce959d2252318c5da86f6138a2
Author: Adam Jackson <ajax@nwnk.net>
Date: Sat Jun 25 21:17:00 2005 +0000
Bug #3626: _X_EXPORT tags for video and input drivers.
commit cb1938aa46fcab41ec663568fea22a89b32afe45
Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
Date: Sat Dec 4 00:43:10 2004 +0000
Encoding of numerous files changed to UTF-8
commit 08ad8a93ee169525543da9aa044939024122e67f
Author: Egbert Eich <eich@suse.de>
Date: Fri Apr 23 19:54:02 2004 +0000
Merging XORG-CURRENT into trunk
commit eeeab6dfebe29f84947449a2123afcf673f74cbf
Author: Egbert Eich <eich@suse.de>
Date: Sun Mar 14 08:33:47 2004 +0000
Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004
commit f45bf39ec0655879f922e30ce40a4d848bbe5c53
Author: Egbert Eich <eich@suse.de>
Date: Wed Mar 3 12:12:30 2004 +0000
Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004
commit a4df6cf595d031007f7126d321350de13d6aaac2
Author: Egbert Eich <eich@suse.de>
Date: Thu Feb 26 13:36:00 2004 +0000
readding XFree86's cvs IDs
commit 0a754ffa019f081a194cb28b3d12968bf4522bab
Author: Egbert Eich <eich@suse.de>
Date: Thu Feb 26 09:23:33 2004 +0000
Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004
commit e50d70f38e90bde903c91dcd6f47cf01165fe977
Author: Kaleb Keithley <kaleb@freedesktop.org>
Date: Tue Nov 25 19:28:46 2003 +0000
XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks
commit 350b2d1c6157e75ab8e5374164cd68f9b6b5eea7
Author: Kaleb Keithley <kaleb@freedesktop.org>
Date: Fri Nov 14 16:48:56 2003 +0000
XFree86 4.3.0.1
commit 249fcdd8f49a8a922ee1eb88cbd8a01e8929328f
Author: Kaleb Keithley <kaleb@freedesktop.org>
Date: Fri Nov 14 16:48:56 2003 +0000
Initial revision

View File

@ -20,3 +20,14 @@
AUTOMAKE_OPTIONS = foreign AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man SUBDIRS = src man
EXTRA_DIST = autogen.sh ChangeLog
CLEANFILES = ChangeLog
.PHONY: ChangeLog
ChangeLog:
(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
dist-hook: ChangeLog

View File

@ -0,0 +1,12 @@
#! /bin/sh
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
ORIGDIR=`pwd`
cd $srcdir
autoreconf -v --install || exit 1
cd $ORIGDIR || exit $?
$srcdir/configure --enable-maintainer-mode "$@"

View File

@ -22,7 +22,7 @@
AC_PREREQ(2.57) AC_PREREQ(2.57)
AC_INIT([xf86-input-acecad], AC_INIT([xf86-input-acecad],
1.1.0, 1.2.1,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-input-acecad) xf86-input-acecad)
@ -85,6 +85,12 @@ AC_SUBST([CFLAGS])
# Checks for header files. # Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
AC_HEADER_CHECK([linux/input.h],
[AC_DEFINE([LINUX_INPUT], [1], [Using the Linux input subsystem])]
)
AC_HEADER_CHECK([sysfs/libsysfs.h],
[AC_DEFINE([LINUX_SYSFS], [1], [Using sysfs to probe devices])]
)
XORG_MANPAGE_SECTIONS XORG_MANPAGE_SECTIONS
XORG_RELEASE_VERSION XORG_RELEASE_VERSION

View File

@ -1,9 +1,10 @@
#! /bin/sh #! /bin/sh
# depcomp - compile a program generating dependencies as side-effects # depcomp - compile a program generating dependencies as side-effects
scriptversion=2005-07-09.11 scriptversion=2006-10-15.18
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
# Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -91,7 +92,20 @@ gcc3)
## gcc 3 implements dependency tracking that does exactly what ## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm. ## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile" ## 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=$? stat=$?
if test $stat -eq 0; then : if test $stat -eq 0; then :
else else
@ -276,6 +290,46 @@ icc)
rm -f "$tmpdepfile" 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) tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side # The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
@ -288,13 +342,13 @@ tru64)
if test "$libtool" = yes; then if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a # With Tru64 cc, shared objects can also be used to make a
# static library. This mecanism is used in libtool 1.4 series to # static library. This mechanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation. # 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.4, dependencies were output in $dir.libs/$base.lo.d.
# #
# With libtool 1.5 this exception was removed, and libtool now # With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two # generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in in $dir.libs/$base.o.d and # compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because # in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer # 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 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# install - install a program, script, or datafile # install - install a program, script, or datafile
scriptversion=2005-05-14.22 scriptversion=2006-10-14.15
# This originates from X11R5 (mit/util/scripts/install.sh), which was # This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the # later released in X11R6 (xc/config/util/install.sh) with the
@ -39,15 +39,24 @@ scriptversion=2005-05-14.22
# when there is no Makefile. # when there is no Makefile.
# #
# This script is compatible with the BSD install script, but was written # This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction # from scratch.
# shared with many OS's install programs.
nl='
'
IFS=" "" $nl"
# set DOITPROG to echo to test this script # set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it. # Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}" doit="${DOITPROG-}"
if test -z "$doit"; then
doit_exec=exec
else
doit_exec=$doit
fi
# put in absolute paths if you don't have them in your path; or use env. vars. # Put in absolute file names if you don't have them in your path;
# or use environment vars.
mvprog="${MVPROG-mv}" mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}" cpprog="${CPPROG-cp}"
@ -58,7 +67,13 @@ stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}" rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}" mkdirprog="${MKDIRPROG-mkdir}"
chmodcmd="$chmodprog 0755" posix_glob=
posix_mkdir=
# Desired mode of installed file.
mode=0755
chmodcmd=$chmodprog
chowncmd= chowncmd=
chgrpcmd= chgrpcmd=
stripcmd= stripcmd=
@ -95,7 +110,7 @@ Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
" "
while test -n "$1"; do while test $# -ne 0; do
case $1 in case $1 in
-c) shift -c) shift
continue;; continue;;
@ -111,9 +126,15 @@ while test -n "$1"; do
--help) echo "$usage"; exit $?;; --help) echo "$usage"; exit $?;;
-m) chmodcmd="$chmodprog $2" -m) mode=$2
shift shift
shift shift
case $mode in
*' '* | *' '* | *'
'* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
continue;; continue;;
-o) chowncmd="$chownprog $2" -o) chowncmd="$chownprog $2"
@ -136,9 +157,19 @@ while test -n "$1"; do
--version) echo "$0 $scriptversion"; exit $?;; --version) echo "$0 $scriptversion"; exit $?;;
*) # When -d is used, all remaining arguments are directories to create. --) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
done
if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified. # When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@. # Otherwise, the last argument is the destination. Remove it from $@.
for arg for arg
do do
@ -150,11 +181,9 @@ while test -n "$1"; do
shift # arg shift # arg
dstarg=$arg dstarg=$arg
done done
break;; fi
esac
done
if test -z "$1"; then if test $# -eq 0; then
if test -z "$dir_arg"; then if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2 echo "$0: no input file specified." >&2
exit 1 exit 1
@ -164,6 +193,33 @@ if test -z "$1"; then
exit 0 exit 0
fi fi
if test -z "$dir_arg"; then
trap '(exit $?); exit' 1 2 13 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 for src
do do
# Protect names starting with `-'. # Protect names starting with `-'.
@ -173,15 +229,11 @@ do
if test -n "$dir_arg"; then if test -n "$dir_arg"; then
dst=$src dst=$src
src= dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
if test -d "$dst"; then
mkdircmd=:
chmodcmd=
else
mkdircmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad # might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'. # if $src (and thus $dsttmp) contains '*'.
@ -208,53 +260,188 @@ do
echo "$0: $dstarg: Is a directory" >&2 echo "$0: $dstarg: Is a directory" >&2
exit 1 exit 1
fi fi
dst=$dst/`basename "$src"` 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
fi fi
# This sed command emulates the dirname command. obsolete_mkdir_used=false
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
# Make sure that the destination directory exists. 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;;
# Skip lots of stat calls in the usual case. *[0-7])
if test ! -d "$dstdir"; then mkdir_umask=`expr $umask + 22 \
defaultIFS=' - $umask % 100 % 40 + $umask % 20 \
' - $umask % 10 % 4 + $umask % 2
IFS="${IFS-$defaultIFS}" `;;
*) 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
case $posix_glob in
'')
if (set -f) 2>/dev/null; then
posix_glob=true
else
posix_glob=false
fi ;;
esac
oIFS=$IFS oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason. IFS=/
IFS='%' $posix_glob && set -f
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` set fnord $dstdir
shift shift
$posix_glob && set +f
IFS=$oIFS IFS=$oIFS
pathcomp= prefixes=
while test $# -ne 0 ; do for d
pathcomp=$pathcomp$1 do
shift test -z "$d" && continue
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp" prefix=$prefix$d
# mkdir can fail with a `File exist' error in case several if test -d "$prefix"; then
# install-sh are creating the directory concurrently. This prefixes=
# is OK. else
test -d "$pathcomp" || exit 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
pathcomp=$pathcomp/ fi
prefix=$prefix/
done 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 fi
if test -n "$dir_arg"; then if test -n "$dir_arg"; then
$doit $mkdircmd "$dst" \ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else else
dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory. # Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_ dsttmp=$dstdir/_inst.$$_
@ -262,10 +449,9 @@ do
# Trap to clean up those temp files at exit. # Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name. # Copy the file name to the temp name.
$doit $cpprog "$src" "$dsttmp" && (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits. # and set any options; do chmod last to preserve setuid bits.
# #
@ -276,10 +462,10 @@ do
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# Now rename the file to the real destination. # Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
|| { || {
# The rename failed, perhaps because mv can't rename something else # The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not # to itself, or perhaps because mv is so ancient that it does not
@ -291,11 +477,12 @@ do
# reasons. In this case, the final cleanup might fail but the new # reasons. In this case, the final cleanup might fail but the new
# file should still install successfully. # file should still install successfully.
{ {
if test -f "$dstdir/$dstfile"; then if test -f "$dst"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ $doit $rmcmd -f "$dst" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
&& { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
|| { || {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1 (exit 1); exit 1
} }
else else
@ -304,16 +491,13 @@ do
} && } &&
# Now rename the file to the real destination. # Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile" $doit $mvcmd "$dsttmp" "$dst"
} }
} } || exit 1
fi || { (exit 1); exit 1; }
done
# The final little trick to "correctly" pass the exit status to the exit trap. trap '' 0
{ fi
(exit 0); exit 0 done
}
# Local variables: # Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-hooks 'time-stamp)

View File

@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# Common stub for a few missing GNU programs while installing. # Common stub for a few missing GNU programs while installing.
scriptversion=2005-06-08.21 scriptversion=2006-05-10.23
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
@ -33,6 +33,8 @@ if test $# -eq 0; then
fi fi
run=: 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 # In the cases where this matters, `missing' is being run in the
# srcdir already. # srcdir already.
@ -44,7 +46,7 @@ fi
msg="missing on your system" msg="missing on your system"
case "$1" in case $1 in
--run) --run)
# Try to run requested program, and just exit if it succeeds. # Try to run requested program, and just exit if it succeeds.
run= run=
@ -77,6 +79,7 @@ Supported PROGRAM values:
aclocal touch file \`aclocal.m4' aclocal touch file \`aclocal.m4'
autoconf touch file \`configure' autoconf touch file \`configure'
autoheader touch file \`config.h.in' autoheader touch file \`config.h.in'
autom4te touch the output file, or create a stub one
automake touch all \`Makefile.in' files automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch] bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c flex create \`lex.yy.c', if possible, from existing .c
@ -106,7 +109,7 @@ esac
# Now exit if we have it, but it failed. Also exit now if we # 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 # don't have it and --version was passed (most likely to detect
# the program). # the program).
case "$1" in case $1 in
lex|yacc) lex|yacc)
# Not GNU programs, they don't have --version. # Not GNU programs, they don't have --version.
;; ;;
@ -135,7 +138,7 @@ esac
# If it does not exist, or fails to run (possibly an outdated version), # If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it. # try to emulate it.
case "$1" in case $1 in
aclocal*) aclocal*)
echo 1>&2 "\ echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if WARNING: \`$1' is $msg. You should only need it if
@ -164,7 +167,7 @@ WARNING: \`$1' is $msg. You should only need it if
test -z "$files" && files="config.h" test -z "$files" && files="config.h"
touch_files= touch_files=
for f in $files; do for f in $files; do
case "$f" in case $f in
*:*) touch_files="$touch_files "`echo "$f" | *:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;; sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";; *) touch_files="$touch_files $f.in";;
@ -192,8 +195,8 @@ WARNING: \`$1' is needed, but is $msg.
You can get \`$1' as part of \`Autoconf' from any GNU You can get \`$1' as part of \`Autoconf' from any GNU
archive site." archive site."
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -f "$file"; then if test -f "$file"; then
touch $file touch $file
else else
@ -214,25 +217,25 @@ WARNING: \`$1' $msg. You should only need it if
in order for those modifications to take effect. You can get in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site." \`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then if test $# -ne 1; then
eval LASTARG="\${$#}" eval LASTARG="\${$#}"
case "$LASTARG" in case $LASTARG in
*.y) *.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.c cp "$SRCFILE" y.tab.c
fi fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.h cp "$SRCFILE" y.tab.h
fi fi
;; ;;
esac esac
fi fi
if [ ! -f y.tab.h ]; then if test ! -f y.tab.h; then
echo >y.tab.h echo >y.tab.h
fi fi
if [ ! -f y.tab.c ]; then if test ! -f y.tab.c; then
echo 'main() { return 0; }' >y.tab.c echo 'main() { return 0; }' >y.tab.c
fi fi
;; ;;
@ -244,18 +247,18 @@ WARNING: \`$1' is $msg. You should only need it if
in order for those modifications to take effect. You can get in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site." \`Flex' from any GNU archive site."
rm -f lex.yy.c rm -f lex.yy.c
if [ $# -ne 1 ]; then if test $# -ne 1; then
eval LASTARG="\${$#}" eval LASTARG="\${$#}"
case "$LASTARG" in case $LASTARG in
*.l) *.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then if test -f "$SRCFILE"; then
cp "$SRCFILE" lex.yy.c cp "$SRCFILE" lex.yy.c
fi fi
;; ;;
esac esac
fi fi
if [ ! -f lex.yy.c ]; then if test ! -f lex.yy.c; then
echo 'main() { return 0; }' >lex.yy.c echo 'main() { return 0; }' >lex.yy.c
fi fi
;; ;;
@ -267,11 +270,9 @@ WARNING: \`$1' is $msg. You should only need it if
\`Help2man' package in order for those modifications to take \`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site." effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` file=`echo "$*" | sed -n "$sed_output"`
if test -z "$file"; then test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` if test -f "$file"; then
fi
if [ -f "$file" ]; then
touch $file touch $file
else else
test -z "$file" || exec >$file test -z "$file" || exec >$file
@ -289,11 +290,17 @@ WARNING: \`$1' is $msg. You should only need it if
DU, IRIX). You might want to install the \`Texinfo' package or DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site." the \`GNU make' package. Grab either from any GNU archive site."
# The file to touch is that specified with -o ... # The file to touch is that specified with -o ...
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -z "$file"; then if test -z "$file"; then
# ... or it is the one specified with @setfilename ... # ... or it is the one specified with @setfilename ...
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` file=`sed -n '
/^@setfilename/{
s/.* \([^ ]*\) *$/\1/
p
q
}' $infile`
# ... or it is derived from the source name (dir/f.texi becomes f.info) # ... or it is derived from the source name (dir/f.texi becomes f.info)
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
fi fi
@ -317,13 +324,13 @@ WARNING: \`$1' is $msg. You should only need it if
fi fi
firstarg="$1" firstarg="$1"
if shift; then if shift; then
case "$firstarg" in case $firstarg in
*o*) *o*)
firstarg=`echo "$firstarg" | sed s/o//` firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0 tar "$firstarg" "$@" && exit 0
;; ;;
esac esac
case "$firstarg" in case $firstarg in
*h*) *h*)
firstarg=`echo "$firstarg" | sed s/h//` firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0 tar "$firstarg" "$@" && exit 0

View File

@ -25,9 +25,7 @@
*/ */
/* $XFree86: xc/programs/Xserver/hw/xfree86/input/acecad/acecad.c,v 1.4 2003/10/30 00:40:45 dawes Exp $ */ /* $XFree86: xc/programs/Xserver/hw/xfree86/input/acecad/acecad.c,v 1.4 2003/10/30 00:40:45 dawes Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif
#define _ACECAD_C_ #define _ACECAD_C_
/***************************************************************************** /*****************************************************************************
@ -37,6 +35,10 @@
#ifdef LINUX_INPUT #ifdef LINUX_INPUT
#include <asm/types.h> #include <asm/types.h>
#include <linux/input.h> #include <linux/input.h>
#ifndef EV_SYN
#define EV_SYN EV_RST
#define SYN_REPORT 0
#endif
#ifdef BUS_PCI #ifdef BUS_PCI
#undef BUS_PCI #undef BUS_PCI
#endif #endif
@ -47,7 +49,9 @@
#include <misc.h> #include <misc.h>
#include <xf86.h> #include <xf86.h>
#ifndef NEED_XF86_TYPES
#define NEED_XF86_TYPES #define NEED_XF86_TYPES
#endif
#include <xf86_OSproc.h> #include <xf86_OSproc.h>
#include <xisb.h> #include <xisb.h>
#include <xf86Xinput.h> #include <xf86Xinput.h>
@ -57,6 +61,21 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <errno.h>
#ifdef LINUX_INPUT
#include <fcntl.h>
#ifdef LINUX_SYSFS
#include <sysfs/libsysfs.h>
#include <dlfcn.h>
#endif
#endif
/* Previously found in xf86Xinput.h */
#ifdef DBG
#undef DBG
#endif
#define DBG(lvl, f) {if ((lvl) <= xf86GetVerbosity()) f;}
/***************************************************************************** /*****************************************************************************
* Local Headers * Local Headers
****************************************************************************/ ****************************************************************************/
@ -70,7 +89,6 @@
* Local Variables * Local Variables
****************************************************************************/ ****************************************************************************/
#define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
#undef read #undef read
#define read(a,b,c) xf86ReadSerial((a),(b),(c)) #define read(a,b,c) xf86ReadSerial((a),(b),(c))
@ -96,7 +114,7 @@ static XF86ModuleVersionInfo VersionRec =
MODINFOSTRING1, MODINFOSTRING1,
MODINFOSTRING2, MODINFOSTRING2,
XORG_VERSION_CURRENT, XORG_VERSION_CURRENT,
1, 1, 0, PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
ABI_CLASS_XINPUT, ABI_CLASS_XINPUT,
ABI_XINPUT_VERSION, ABI_XINPUT_VERSION,
MOD_CLASS_XINPUT, MOD_CLASS_XINPUT,
@ -164,13 +182,160 @@ IsUSBLine(int fd)
SYSCALL(err = ioctl(fd, EVIOCGVERSION, &version)); SYSCALL(err = ioctl(fd, EVIOCGVERSION, &version));
if (!err) { if (!err) {
xf86Msg(X_CONFIG,"Kernel Input driver version is %d.%d.%d\n", xf86MsgVerb(X_PROBED, 4, "Kernel Input driver version is %d.%d.%d\n",
version >> 16, (version >> 8) & 0xff, version & 0xff); version >> 16, (version >> 8) & 0xff, version & 0xff);
return 1; return 1;
} else { } else {
xf86MsgVerb(X_PROBED, 4, "No Kernel Input driver found\n");
return 0; return 0;
} }
} }
/* Heavily inspired by synaptics/eventcomm.c */
#define DEV_INPUT_EVENT "/dev/input/event"
#define EV_DEV_NAME_MAXLEN 64
#define SET_EVENT_NUM(str, num) \
snprintf(str, EV_DEV_NAME_MAXLEN, "%s%d", DEV_INPUT_EVENT, num)
static Bool
fd_query_acecad(int fd, char *ace_name) {
char name[256] = "Unknown";
int cmp_at = strlen(ace_name);
if (cmp_at > 255)
cmp_at = 255;
ioctl(fd, EVIOCGNAME(sizeof(name)), name);
name[cmp_at] = '\0';
if (xf86NameCmp(name, ace_name) == 0)
return TRUE;
return FALSE;
}
static char ace_name_default[7] = "acecad";
#ifdef LINUX_SYSFS
static char usb_bus_name[4] = "usb";
static char acecad_driver_name[11] = "usb_acecad";
#endif
static Bool
AceCadAutoDevProbe(LocalDevicePtr local, int verb)
{
/* We are trying to find the right eventX device */
int i = 0;
Bool have_evdev = FALSE;
int noent_cnt = 0;
const int max_skip = 10;
char *ace_name = xf86FindOptionValue(local->options, "Name");
char fname[EV_DEV_NAME_MAXLEN];
int np;
#ifdef LINUX_SYSFS
struct sysfs_bus *usb_bus = NULL;
struct sysfs_driver *acecad_driver = NULL;
struct sysfs_device *candidate = NULL;
char *link = NULL;
struct dlist *devs = NULL;
struct dlist *links = NULL;
unsigned int major = 0, minor = 0;
void *libsysfs = NULL;
if (libsysfs = dlopen("libsysfs.so", RTLD_NOW | RTLD_GLOBAL)) {
xf86MsgVerb(X_INFO, verb, "%s: querying sysfs for Acecad tablets\n", local->name);
usb_bus = sysfs_open_bus(usb_bus_name);
if (usb_bus) {
xf86MsgVerb(X_PROBED, 4, "%s: usb bus opened\n", local->name);
acecad_driver = sysfs_get_bus_driver(usb_bus, acecad_driver_name);
if (acecad_driver) {
xf86MsgVerb(X_PROBED, 4, "%s: usb_acecad driver opened\n", local->name);
devs = sysfs_get_driver_devices(acecad_driver);
if (devs) {
xf86MsgVerb(X_PROBED, 4, "%s: usb_acecad devices retrieved\n", local->name);
dlist_for_each_data(devs, candidate, struct sysfs_device) {
xf86MsgVerb(X_PROBED, 4, "%s: device %s at %s\n", local->name, candidate->name, candidate->path);
links = sysfs_open_link_list(candidate->path);
dlist_for_each_data(links, link, char) {
if (sscanf(link, "input:event%d", &i) == 1) {
xf86MsgVerb(X_PROBED, 4, "%s: device %s at %s: %s\n", local->name, candidate->name, candidate->path, link);
break;
}
}
sysfs_close_list(links);
if (i > 0) /* We found something */
break;
}
} else
xf86MsgVerb(X_WARNING, 4, "%s: no usb_acecad devices found\n", local->name);
} else
xf86MsgVerb(X_WARNING, 4, "%s: usb_acecad driver not found\n", local->name);
} else
xf86MsgVerb(X_WARNING, 4, "%s: usb bus not found\n", local->name);
sysfs_close_bus(usb_bus);
dlclose(libsysfs);
if (i > 0) {
/* We found something */
np = SET_EVENT_NUM(fname, i);
if (np < 0 || np >= EV_DEV_NAME_MAXLEN) {
xf86MsgVerb(X_WARNING, verb, "%s: unable to manage event device %d\n", local->name, i);
} else {
goto ProbeFound;
}
} else
xf86MsgVerb(X_WARNING, verb, "%s: no Acecad devices found via sysfs\n", local->name);
} else
xf86MsgVerb(X_WARNING, 4, "%s: libsysfs not found\n", local->name);
#endif
if (!ace_name)
ace_name = ace_name_default;
xf86MsgVerb(X_INFO, verb, "%s: probing event devices for Acecad tablets\n", local->name);
for (i = 0; ; i++) {
int fd = -1;
Bool is_acecad;
np = SET_EVENT_NUM(fname, i);
if (np < 0 || np >= EV_DEV_NAME_MAXLEN) {
xf86MsgVerb(X_WARNING, verb, "%s: too many devices, giving up %d\n", local->name, i);
break;
}
SYSCALL(fd = open(fname, O_RDONLY));
if (fd < 0) {
if (errno == ENOENT) {
if (++noent_cnt >= max_skip)
break;
else
continue;
} else {
continue;
}
}
noent_cnt = 0;
have_evdev = TRUE;
is_acecad = fd_query_acecad(fd, ace_name);
SYSCALL(close(fd));
if (is_acecad) {
goto ProbeFound;
}
}
xf86MsgVerb(X_WARNING, verb, "%s: no Acecad event device found (checked %d nodes, no device name started with '%s')\n",
local->name, i + 1, ace_name);
if (i <= max_skip)
xf86MsgVerb(X_WARNING, verb, "%s: The /dev/input/event* device nodes seem to be missing\n",
local->name);
if (i > max_skip && !have_evdev)
xf86MsgVerb(X_WARNING, verb, "%s: The evdev kernel module seems to be missing\n", local->name);
return FALSE;
ProbeFound:
xf86Msg(X_PROBED, "%s auto-dev sets device to %s\n",
local->name, fname);
xf86ReplaceStrOption(local->options, "Device", fname);
return TRUE;
}
#endif #endif
static InputInfoPtr static InputInfoPtr
@ -179,6 +344,7 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
LocalDevicePtr local = xf86AllocateInput(drv, 0); LocalDevicePtr local = xf86AllocateInput(drv, 0);
AceCadPrivatePtr priv = xcalloc (1, sizeof(AceCadPrivateRec)); AceCadPrivatePtr priv = xcalloc (1, sizeof(AceCadPrivateRec));
int speed; int speed;
int msgtype;
char *s; char *s;
if ((!local) || (!priv)) if ((!local) || (!priv))
@ -187,9 +353,11 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
memset(priv, 0, sizeof(AceCadPrivateRec)); memset(priv, 0, sizeof(AceCadPrivateRec));
local->name = dev->identifier; local->name = dev->identifier;
local->type_name = "AceCad Tablet"; local->type_name = "ACECAD Tablet";
local->flags = XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS; local->flags = XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS;
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
local->motion_history_proc = xf86GetMotionEvents; local->motion_history_proc = xf86GetMotionEvents;
#endif
local->control_proc = NULL; local->control_proc = NULL;
local->close_proc = CloseProc; local->close_proc = CloseProc;
local->switch_mode = NULL; local->switch_mode = NULL;
@ -208,33 +376,52 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
priv->acecadInc = xf86SetIntOption(local->options, "Increment", 0 ); priv->acecadInc = xf86SetIntOption(local->options, "Increment", 0 );
s = xf86FindOptionValue(local->options, "Device");
if (!s || (s && (xf86NameCmp(s, "auto-dev") == 0))) {
#ifdef LINUX_INPUT
priv->flags |= AUTODEV_FLAG;
if (!AceCadAutoDevProbe(local, 0))
{
xf86Msg(X_ERROR, "%s: unable to find device\n", local->name);
goto SetupProc_fail;
}
#else
xf86Msg(X_NOT_IMPLEMENTED, "%s: device autodetection not implemented, sorry\n", local->name);
goto SetupProc_fail;
#endif
}
local->fd = xf86OpenSerial (local->options); local->fd = xf86OpenSerial (local->options);
if (local->fd == -1) if (local->fd == -1)
{ {
xf86Msg(X_ERROR,"AceCad driver unable to open device\n"); xf86Msg(X_ERROR, "%s: unable to open device\n", local->name);
goto SetupProc_fail; goto SetupProc_fail;
} }
xf86ErrorFVerb( 6, "tty port opened successfully\n" ); xf86ErrorFVerb( 6, "tty port opened successfully\n" );
#ifdef LINUX_INPUT #ifdef LINUX_INPUT
if (IsUSBLine(local->fd)) { if (IsUSBLine(local->fd)) {
priv->acecadUSB=1; priv->flags |= USB_FLAG;
local->read_input = USBReadInput; local->read_input = USBReadInput;
if (USBQueryHardware(local) != Success) if (USBQueryHardware(local) != Success)
{ {
ErrorF ("Unable to query/initialize AceCad hardware.\n"); xf86Msg(X_ERROR, "%s: unable to query/initialize hardware (not an %s?).\n", local->name, local->type_name);
goto SetupProc_fail; goto SetupProc_fail;
} }
} else } else
#endif #endif
{ {
priv->acecadUSB=0;
local->read_input = ReadInput; local->read_input = ReadInput;
msgtype = X_DEFAULT;
if (xf86FindOptionValue(local->options, "ReportSpeed")) {
msgtype = X_CONFIG;
speed = xf86SetIntOption(local->options, "ReportSpeed", 85 ); speed = xf86SetIntOption(local->options, "ReportSpeed", 85 );
} else {
speed = 85;
}
switch (speed) switch (speed)
{ {
@ -253,10 +440,11 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
default: default:
priv->acecadReportSpeed = 'R'; priv->acecadReportSpeed = 'R';
speed = 85; speed = 85;
xf86Msg(X_CONFIG, "Acecad Tablet: ReportSpeed possible values:\n 120, 85, 10, 2 \n"); xf86Msg(X_ERROR, "%s: ReportSpeed value %d invalid. Possible values: 120, 85, 10, 2. Defaulting to 85\n", local->name, speed);
msgtype = X_DEFAULT;
} }
xf86Msg(X_CONFIG, "Acecad Tablet report %d points/s\n", speed); xf86Msg(msgtype, "%s report %d points/s\n", local->name, speed);
priv->buffer = XisbNew (local->fd, 200); priv->buffer = XisbNew (local->fd, 200);
@ -265,22 +453,19 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
*/ */
if (QueryHardware(priv) != Success) if (QueryHardware(priv) != Success)
{ {
xf86Msg(X_ERROR,"Unable to query/initialize AceCad hardware.\n"); xf86Msg(X_ERROR, "%s: unable to query/initialize hardware (not an %s?).\n", local->name, local->type_name);
goto SetupProc_fail; goto SetupProc_fail;
} }
} }
s = xf86FindOptionValue(local->options, "Mode"); s = xf86FindOptionValue(local->options, "Mode");
if (s && (xf86NameCmp(s, "Relative") == 0)) msgtype = s ? X_CONFIG : X_DEFAULT;
if (!(s && (xf86NameCmp(s, "relative") == 0)))
{ {
priv->flags = priv->flags & ~ABSOLUTE_FLAG; priv->flags |= ABSOLUTE_FLAG;
}
else
{
priv->flags = priv->flags | ABSOLUTE_FLAG;
} }
xf86Msg(X_CONFIG, "Acecad Tablet is in %s mode\n",(priv->flags & ABSOLUTE_FLAG) ? "absolute" : "relative"); xf86Msg(msgtype, "%s is in %s mode\n", local->name, (priv->flags & ABSOLUTE_FLAG) ? "absolute" : "relative");
DBG (9, XisbTrace (priv->buffer, 1)); DBG (9, XisbTrace (priv->buffer, 1));
local->history_size = xf86SetIntOption(local->options , "HistorySize", 0); local->history_size = xf86SetIntOption(local->options , "HistorySize", 0);
@ -301,7 +486,7 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
} }
RemoveEnabledDevice (local->fd); RemoveEnabledDevice (local->fd);
local->fd = -1; local->fd = -1;
return (local); return local;
/* /*
* If something went wrong, cleanup and return NULL * If something went wrong, cleanup and return NULL
@ -311,9 +496,13 @@ AceCadPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
xf86CloseSerial (local->fd); xf86CloseSerial (local->fd);
if ((priv) && (priv->buffer)) if ((priv) && (priv->buffer))
XisbFree (priv->buffer); XisbFree (priv->buffer);
if (priv) if (priv) {
xfree (priv); xfree (priv);
return (NULL); if (local)
local->private = NULL;
}
xf86DeleteInput(local, 0);
return NULL;
} }
static Bool static Bool
@ -340,7 +529,7 @@ DeviceControl (DeviceIntPtr dev, int mode)
RetValue = BadValue; RetValue = BadValue;
} }
return( RetValue ); return RetValue;
} }
static Bool static Bool
@ -350,23 +539,30 @@ DeviceOn (DeviceIntPtr dev)
LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate; LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private); AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private);
xf86Msg(X_CONFIG, "Acecad Tablet Device On\n"); xf86MsgVerb(X_INFO, 4, "%s Device On\n", local->name);
local->fd = xf86OpenSerial(local->options); local->fd = xf86OpenSerial(local->options);
if (local->fd == -1) if (local->fd == -1)
{ {
xf86Msg(X_WARNING, "%s: cannot open input device\n", local->name); xf86Msg(X_WARNING, "%s: cannot open input device %s: %s\n", local->name, xf86FindOptionValue(local->options, "Device"), strerror(errno));
return (!Success); priv->flags &= ~AVAIL_FLAG;
#ifdef LINUX_INPUT
if ((priv->flags & AUTODEV_FLAG) && AceCadAutoDevProbe(local, 4))
local->fd = xf86OpenSerial(local->options);
if (local->fd == -1)
#endif
return !Success;
} }
priv->flags |= AVAIL_FLAG;
if (priv->acecadUSB==0){ if (!(priv->flags & USB_FLAG)) {
priv->buffer = XisbNew(local->fd, 200); priv->buffer = XisbNew(local->fd, 200);
if (!priv->buffer) if (!priv->buffer)
{ {
xf86CloseSerial(local->fd); xf86CloseSerial(local->fd);
local->fd = -1; local->fd = -1;
return (!Success); return !Success;
} }
/* Rets qu'a l'envoyer a la tablette */ /* Rets qu'a l'envoyer a la tablette */
@ -377,7 +573,7 @@ DeviceOn (DeviceIntPtr dev)
xf86FlushInput(local->fd); xf86FlushInput(local->fd);
xf86AddEnabledDevice (local); xf86AddEnabledDevice (local);
dev->public.on = TRUE; dev->public.on = TRUE;
return (Success); return Success;
} }
static Bool static Bool
@ -386,6 +582,7 @@ DeviceOff (DeviceIntPtr dev)
LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate; LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private); AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private);
xf86MsgVerb(X_INFO, 4, "%s Device Off\n", local->name);
if (local->fd != -1) if (local->fd != -1)
{ {
@ -401,21 +598,25 @@ DeviceOff (DeviceIntPtr dev)
xf86RemoveEnabledDevice (local); xf86RemoveEnabledDevice (local);
dev->public.on = FALSE; dev->public.on = FALSE;
return (Success); return Success;
} }
static Bool static Bool
DeviceClose (DeviceIntPtr dev) DeviceClose (DeviceIntPtr dev)
{ {
xf86Msg(X_CONFIG, "Acecad Tablet Device Close\n"); LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
return (Success);
xf86MsgVerb(X_INFO, 4, "%s Device Close\n", local->name);
return Success;
} }
static void static void
ControlProc(DeviceIntPtr device, ControlProc(DeviceIntPtr dev, PtrCtrl *ctrl)
PtrCtrl *ctrl)
{ {
xf86Msg(X_CONFIG, "Acecad Tablet Control Proc\n"); LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate;
xf86MsgVerb(X_INFO, 4, "%s Control Proc\n", local->name);
} }
static Bool static Bool
@ -427,24 +628,23 @@ DeviceInit (DeviceIntPtr dev)
unsigned char map[] = unsigned char map[] =
{0, 1, 2, 3}; {0, 1, 2, 3};
xf86Msg(X_CONFIG, "Acecad Tablet Device Init\n"); xf86MsgVerb(X_INFO, 4, "%s Init\n", local->name);
/* 3 boutons */ /* 3 boutons */
if (InitButtonClassDeviceStruct (dev, 3, map) == FALSE) if (InitButtonClassDeviceStruct (dev, 3, map) == FALSE)
{ {
ErrorF ("Unable to allocate AceCad ButtonClassDeviceStruct\n"); xf86Msg(X_ERROR, "%s: unable to allocate ButtonClassDeviceStruct\n", local->name);
return !Success; return !Success;
} }
if (InitFocusClassDeviceStruct (dev) == FALSE) if (InitFocusClassDeviceStruct (dev) == FALSE)
{ {
ErrorF("Unable to allocate AceCad FocusClassDeviceStruct\n"); xf86Msg(X_ERROR, "%s: unable to allocate FocusClassDeviceStruct\n", local->name);
return !Success; return !Success;
} }
if (InitPtrFeedbackClassDeviceStruct(dev, if (InitPtrFeedbackClassDeviceStruct(dev, ControlProc) == FALSE) {
ControlProc) == FALSE) { xf86Msg(X_ERROR, "%s: unable to init ptr feedback\n", local->name);
ErrorF("unable to init ptr feedback\n");
return !Success; return !Success;
} }
@ -455,7 +655,7 @@ DeviceInit (DeviceIntPtr dev)
((priv->flags & ABSOLUTE_FLAG)? Absolute: Relative)|OutOfProximity) ((priv->flags & ABSOLUTE_FLAG)? Absolute: Relative)|OutOfProximity)
== FALSE) == FALSE)
{ {
ErrorF ("Unable to allocate AceCad ValuatorClassDeviceStruct\n"); xf86Msg(X_ERROR, "%s: unable to allocate ValuatorClassDeviceStruct\n", local->name);
return !Success; return !Success;
} }
else else
@ -487,7 +687,7 @@ DeviceInit (DeviceIntPtr dev)
if (InitProximityClassDeviceStruct (dev) == FALSE) if (InitProximityClassDeviceStruct (dev) == FALSE)
{ {
ErrorF ("Unable to allocate ProximityClassDeviceStruct\n"); xf86Msg(X_ERROR, "%s: unable to allocate ProximityClassDeviceStruct\n", local->name);
return !Success; return !Success;
} }
@ -512,9 +712,9 @@ DeviceInit (DeviceIntPtr dev)
priv->acecadInc = 1; priv->acecadInc = 1;
} }
xf86Msg(X_CONFIG, "Acecad Tablet Increment: %d\n",priv->acecadInc); xf86Msg(X_INFO, "%s Increment: %d\n", local->name, priv->acecadInc);
return (Success); return Success;
} }
static void static void
@ -525,7 +725,7 @@ ReadInput (LocalDevicePtr local)
int is_core_pointer, is_absolute; int is_core_pointer, is_absolute;
AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private); AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private);
/*xf86Msg(X_CONFIG, "Acecad Tablet Read Input\n");*/ /*xf86Msg(X_INFO, "ACECAD Tablet Read Input\n");*/
is_absolute = (priv->flags & ABSOLUTE_FLAG); is_absolute = (priv->flags & ABSOLUTE_FLAG);
is_core_pointer = xf86IsCorePointer(local->dev); is_core_pointer = xf86IsCorePointer(local->dev);
@ -568,7 +768,7 @@ ReadInput (LocalDevicePtr local)
if (!(priv->acecadOldProximity)) if (!(priv->acecadOldProximity))
if (!is_core_pointer) if (!is_core_pointer)
{ {
/*xf86Msg(X_CONFIG, "Acecad Tablet ProxIN %d %d %d\n",x, y, z);*/ /*xf86Msg(X_INFO, "ACECAD Tablet ProxIN %d %d %d\n",x, y, z);*/
xf86PostProximityEvent(local->dev, 1, 0, 3 , x, y, z); xf86PostProximityEvent(local->dev, 1, 0, 3 , x, y, z);
} }
@ -577,24 +777,20 @@ ReadInput (LocalDevicePtr local)
{ {
if (is_absolute || priv->acecadOldProximity) if (is_absolute || priv->acecadOldProximity)
{ {
/*xf86Msg(X_CONFIG, "Acecad Tablet Motion %d %d %d\n", x, y, z);*/ /*xf86Msg(X_INFO, "ACECAD Tablet Motion %d %d %d\n", x, y, z);*/
xf86PostMotionEvent(local->dev, is_absolute, 0, 3, x, y, z); xf86PostMotionEvent(local->dev, is_absolute, 0, 3, x, y, z);
} }
} }
if (priv->acecadOldButtons != buttons) if (priv->acecadOldButtons != buttons)
{ {
int delta; int delta = buttons ^ priv->acecadOldButtons;
delta = buttons ^ priv->acecadOldButtons;
while (delta) while (delta)
{ {
int id; int id = ffs(delta);
id=ffs(delta);
delta &= ~(1 << (id-1)); delta &= ~(1 << (id-1));
/*xf86Msg(X_CONFIG, "Acecad Tablet Button %d 0x%x\n",id,(buttons&(1<<(id-1))));*/ /*xf86Msg(X_INFO, "ACECAD Tablet Button %d 0x%x\n",id,(buttons&(1<<(id-1))));*/
xf86PostButtonEvent(local->dev, is_absolute, id, (buttons&(1<<(id-1))), 0, 3, x, y,z); xf86PostButtonEvent(local->dev, is_absolute, id, (buttons&(1<<(id-1))), 0, 3, x, y,z);
} }
} }
@ -610,13 +806,13 @@ ReadInput (LocalDevicePtr local)
if (!is_core_pointer) if (!is_core_pointer)
if (priv->acecadOldProximity) if (priv->acecadOldProximity)
{ {
/*xf86Msg(X_CONFIG, "Acecad Tablet ProxOUT %d %d %d\n",x, y, z);*/ /*xf86Msg(X_INFO, "ACECAD Tablet ProxOUT %d %d %d\n",x, y, z);*/
xf86PostProximityEvent(local->dev, 0, 0, 3, x,y,z); xf86PostProximityEvent(local->dev, 0, 0, 3, x,y,z);
} }
priv->acecadOldProximity = 0; priv->acecadOldProximity = 0;
} }
} }
/*xf86Msg(X_CONFIG, "Acecad Tablet Sortie Read Input\n");*/ /*xf86Msg(X_INFO, "ACECAD Tablet Sortie Read Input\n");*/
} }
#ifdef LINUX_INPUT #ifdef LINUX_INPUT
@ -633,21 +829,44 @@ USBReadInput (LocalDevicePtr local)
int z = priv->acecadOldZ; int z = priv->acecadOldZ;
int prox = priv->acecadOldProximity; int prox = priv->acecadOldProximity;
int buttons = priv->acecadOldButtons; int buttons = priv->acecadOldButtons;
int is_core_pointer; int is_core_pointer = xf86IsCorePointer(local->dev);
/* Is autodev active? */
is_core_pointer = xf86IsCorePointer(local->dev); int autodev = priv->flags & AUTODEV_FLAG;
/* Was the device available last time we checked? */
int avail = priv->flags & AVAIL_FLAG;
SYSCALL(len = read(local->fd, eventbuf, sizeof(eventbuf))); SYSCALL(len = read(local->fd, eventbuf, sizeof(eventbuf)));
if (len <= 0) { if (len <= 0) {
ErrorF("Error reading wacom device : %s\n", strerror(errno)); if (avail) {
xf86Msg(X_ERROR, "%s: error reading device %s: %s\n", local->name, xf86FindOptionValue(local->options, "Device"), strerror(errno));
}
if (NOTAVAIL) {
priv->flags &= ~AVAIL_FLAG;
if(autodev) {
if (AceCadAutoDevProbe(local, 4)) {
DeviceOff(local->dev);
DeviceOn(local->dev);
}
}
}
return; return;
} else {
if (!avail) {
/* If the device wasn't available last time we checked */
xf86Msg(X_INFO, "%s: device %s is available again\n", local->name, xf86FindOptionValue(local->options, "Device"));
priv->flags |= AVAIL_FLAG;
}
} }
for (event = (struct input_event *)eventbuf; for (event = (struct input_event *)eventbuf;
event < (struct input_event *)(eventbuf+len); event++) { event < (struct input_event *)(eventbuf+len); event++) {
switch (event->type) { switch (event->type) {
case EV_SYN: /* 2.6.x */
if (event->code != SYN_REPORT)
xf86Msg(X_ERROR, "%s: unknown EV_SYN code %d\n", local->name, event->code);
break;
case EV_ABS: case EV_ABS:
switch (event->code) { switch (event->code) {
case ABS_X: case ABS_X:
@ -688,11 +907,15 @@ USBReadInput (LocalDevicePtr local)
} }
break; /* EV_KEY */ break; /* EV_KEY */
default: default:
xf86Msg(X_ERROR, "UNKNOWN event->code=%d\n", event->code); xf86Msg(X_ERROR, "%s: unknown event type/code %d/%d\n", local->name, event->type, event->code);
} /* switch event->type */ } /* switch event->type */
/* ABS_MISC is the event terminator */ /* Linux Kernel 2.6.x sends EV_SYN/SYN_REPORT as an event terminator,
if (event->type != EV_ABS || event->code != ABS_MISC) { * whereas 2.4.x sends EV_ABS/ABS_MISC. We have to support both.
*/
if (!( (event->type == EV_SYN && event->code == SYN_REPORT) ||
(event->type == EV_ABS && event->code == ABS_MISC)
)) {
continue; continue;
} }
@ -709,14 +932,10 @@ USBReadInput (LocalDevicePtr local)
if (priv->acecadOldButtons != buttons) if (priv->acecadOldButtons != buttons)
{ {
int delta; int delta = buttons ^ priv->acecadOldButtons;
delta = buttons ^ priv->acecadOldButtons;
while (delta) while (delta)
{ {
int id; int id = ffs(delta);
id=ffs(delta);
delta &= ~(1 << (id-1)); delta &= ~(1 << (id-1));
xf86PostButtonEvent(local->dev, 1, id, (buttons&(1<<(id-1))), 0, 3, x, y,z); xf86PostButtonEvent(local->dev, 1, id, (buttons&(1<<(id-1))), 0, 3, x, y,z);
@ -739,7 +958,7 @@ USBReadInput (LocalDevicePtr local)
priv->acecadOldZ = z; priv->acecadOldZ = z;
priv->acecadOldProximity = prox; priv->acecadOldProximity = prox;
} }
/*xf86Msg(X_CONFIG, "Acecad Tablet Sortie Read Input\n");*/ /*xf86Msg(X_INFO, "ACECAD Tablet Sortie Read Input\n");*/
} }
#endif #endif
@ -754,17 +973,9 @@ CloseProc (LocalDevicePtr local)
* to simulate mouse events. * to simulate mouse events.
*/ */
static Bool static Bool
ConvertProc (LocalDevicePtr local, ConvertProc (LocalDevicePtr local, int first, int num,
int first, int v0, int v1, int v2, int v3, int v4, int v5,
int num, int *x, int *y)
int v0,
int v1,
int v2,
int v3,
int v4,
int v5,
int *x,
int *y)
{ {
AceCadPrivatePtr priv = (AceCadPrivatePtr)(local->private); AceCadPrivatePtr priv = (AceCadPrivatePtr)(local->private);
@ -776,8 +987,7 @@ ConvertProc (LocalDevicePtr local,
static Bool static Bool
ReverseConvertProc (LocalDevicePtr local, ReverseConvertProc (LocalDevicePtr local,
int x, int x, int y,
int y,
int *valuators) int *valuators)
{ {
AceCadPrivatePtr priv = (AceCadPrivatePtr)(local->private); AceCadPrivatePtr priv = (AceCadPrivatePtr)(local->private);
@ -816,20 +1026,20 @@ QueryHardware (AceCadPrivatePtr priv)
XisbBlockDuration (priv->buffer, 1000000); XisbBlockDuration (priv->buffer, 1000000);
NewPacket (priv); NewPacket (priv);
/*xf86Msg(X_CONFIG, "Acecad Tablet init envoyé \n");*/ /*xf86Msg(X_CONFIG, "ACECAD Tablet init envoyé \n");*/
if ((AceCadGetPacket (priv) == Success)) if ((AceCadGetPacket (priv) == Success))
{ {
priv->acecadMaxX = (int)priv->packet[1] + ((int)priv->packet[2] << 7); priv->acecadMaxX = (int)priv->packet[1] + ((int)priv->packet[2] << 7);
priv->acecadMaxY = (int)priv->packet[3] + ((int)priv->packet[4] << 7); priv->acecadMaxY = (int)priv->packet[3] + ((int)priv->packet[4] << 7);
priv->acecadMaxZ = 512; priv->acecadMaxZ = 512;
xf86Msg(X_CONFIG, "Acecad Tablet MaxX:%d MaxY:%d\n",priv->acecadMaxX,priv->acecadMaxY); xf86Msg(X_PROBED, "ACECAD Tablet MaxX:%d MaxY:%d\n", priv->acecadMaxX, priv->acecadMaxY);
} }
else else
return (!Success); return !Success;
/*xf86Msg(X_CONFIG, "Acecad Tablet query hardware fini \n");*/ /*xf86Msg(X_INFO, "ACECAD Tablet query hardware fini \n");*/
return (Success); return Success;
} }
#define BITS_PER_LONG (sizeof(long) * 8) #define BITS_PER_LONG (sizeof(long) * 8)
@ -849,7 +1059,7 @@ USBQueryHardware (LocalDevicePtr local)
char name[256] = "Unknown"; char name[256] = "Unknown";
ioctl(local->fd, EVIOCGNAME(sizeof(name)), name); ioctl(local->fd, EVIOCGNAME(sizeof(name)), name);
xf86Msg(X_CONFIG, "Kernel Input device name: \"%s\"\n", name); xf86MsgVerb(X_PROBED, 4, "Kernel Input device name: \"%s\"\n", name);
memset(bit, 0, sizeof(bit)); memset(bit, 0, sizeof(bit));
ioctl(local->fd, EVIOCGBIT(0, EV_MAX), bit[0]); ioctl(local->fd, EVIOCGBIT(0, EV_MAX), bit[0]);
@ -878,8 +1088,8 @@ USBQueryHardware (LocalDevicePtr local)
} }
} }
xf86Msg(X_CONFIG, "Acecad Tablet MaxX:%d MaxY:%d MaxZ:%d\n",priv->acecadMaxX,priv->acecadMaxY,priv->acecadMaxZ); xf86Msg(X_PROBED, "ACECAD Tablet MaxX:%d MaxY:%d MaxZ:%d\n", priv->acecadMaxX, priv->acecadMaxY, priv->acecadMaxZ);
return (Success); return Success;
} }
#endif #endif
@ -905,7 +1115,7 @@ AceCadGetPacket (AceCadPrivatePtr priv)
if (count++ > 500) if (count++ > 500)
{ {
NewPacket (priv); NewPacket (priv);
return (!Success); return !Success;
} }
if (c & PHASING_BIT) if (c & PHASING_BIT)
@ -918,13 +1128,13 @@ AceCadGetPacket (AceCadPrivatePtr priv)
count = ACECAD_PACKET_SIZE - 1; count = ACECAD_PACKET_SIZE - 1;
while (count-- && (c = XisbRead(priv->buffer)) >= 0) while (count-- && (c = XisbRead(priv->buffer)) >= 0)
{ {
/*xf86Msg(X_CONFIG, "Push %2.2x\n",(char) c);*/ /*xf86Msg(X_INFO, "Push %2.2x\n",(char) c);*/
priv->packet[priv->packeti++] = c; priv->packet[priv->packeti++] = c;
} }
XisbBlockDuration (priv->buffer, 0); XisbBlockDuration (priv->buffer, 0);
if(c > 0) if(c > 0)
return (Success); return Success;
} }
} }
return (!Success); return !Success;
} }

View File

@ -57,6 +57,11 @@
#define COORD_BITS 0x7f #define COORD_BITS 0x7f
#define ABSOLUTE_FLAG 1 #define ABSOLUTE_FLAG 1
#define USB_FLAG 2
#define AUTODEV_FLAG 4
#define AVAIL_FLAG 8
#define NOTAVAIL ((errno == ENODEV) || (errno == ENXIO) || (errno == ENOENT))
#define milisleep(ms) xf86usleep (ms * 1000) #define milisleep(ms) xf86usleep (ms * 1000)
@ -77,7 +82,6 @@ typedef struct
int acecadMaxY; /* max Y value */ int acecadMaxY; /* max Y value */
int acecadMaxZ; /* max Y value */ int acecadMaxZ; /* max Y value */
char acecadReportSpeed; /* report speed */ char acecadReportSpeed; /* report speed */
int acecadUSB; /*USB flag*/
int flags; /* various flags */ int flags; /* various flags */
int packeti; /* number of bytes read */ int packeti; /* number of bytes read */
int PacketSize; /* number of bytes read */ int PacketSize; /* number of bytes read */
@ -109,6 +113,8 @@ static InputInfoPtr AceCadPreInit(InputDriverPtr, IDevPtr , int);
static void USBReadInput (LocalDevicePtr); static void USBReadInput (LocalDevicePtr);
static Bool USBQueryHardware (LocalDevicePtr); static Bool USBQueryHardware (LocalDevicePtr);
static int IsUSBLine(int); static int IsUSBLine(int);
static Bool fd_query_acecad(int, char*);
static Bool AceCadAutoDevProbe(LocalDevicePtr, int);
#endif #endif