[PATCH synaptics 15/17] Add basic framework for unit-testing.
Gaetan Nadon
memsize at videotron.ca
Mon Mar 21 14:58:37 PDT 2011
On Mon, 2011-03-21 at 12:08 +1000, Peter Hutterer wrote:
> Also adds a bunch of fake symbols so we can link. Note that any of these
> symbols will return false, 0 or whatever the zero value for the symbol is.
> Care must be taken when writing test that this doesn't screw up the test.
>
> Tests are always built but only run on make check.
Even when configuring with --disable-unit-tests?
An interesting choice. The default is "auto" so it would always get
build.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> Makefile.am | 2 +-
> configure.ac | 3 +
> test/Makefile.am | 14 ++
> test/eventcomm-test.c | 37 ++++
> test/fake-symbols.c | 446 +++++++++++++++++++++++++++++++++++++++++++++++++
> test/fake-symbols.h | 177 +++++++++++++++++++
> 6 files changed, 678 insertions(+), 1 deletions(-)
> create mode 100644 test/Makefile.am
> create mode 100644 test/eventcomm-test.c
> create mode 100644 test/fake-symbols.c
> create mode 100644 test/fake-symbols.h
Missing .gitignore new file with evencomm-test
>
> diff --git a/Makefile.am b/Makefile.am
> index 538bbc5..edd28a6 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -18,7 +18,7 @@
> # 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.
>
> -SUBDIRS = include src man tools conf
> +SUBDIRS = include src man tools conf test
> MAINTAINERCLEANFILES = ChangeLog INSTALL
>
> pkgconfigdir = $(libdir)/pkgconfig
> diff --git a/configure.ac b/configure.ac
> index fd2d0c3..dc47c3e 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -61,6 +61,8 @@ AC_SUBST([sdkdir])
> DRIVER_NAME=synaptics
> AC_SUBST([DRIVER_NAME])
>
> +XORG_ENABLE_UNIT_TESTS
I typically put these together following XORG_DEFAULT_OPTIONS.
> +
> # -----------------------------------------------------------------------------
> # Configuration options
> # -----------------------------------------------------------------------------
> @@ -149,6 +151,7 @@ AC_CONFIG_FILES([Makefile
> tools/Makefile
> conf/Makefile
> include/Makefile
> + test/Makefile
> xorg-synaptics.pc])
> AC_OUTPUT
>
> diff --git a/test/Makefile.am b/test/Makefile.am
> new file mode 100644
> index 0000000..aaa160d
> --- /dev/null
> +++ b/test/Makefile.am
> @@ -0,0 +1,14 @@
> +INCLUDES = -I$(top_srcdir)/src
Deprecated. Use AM_CPPFLAGS.
> +AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
> +fake_syms = fake-symbols.c fake-symbols.h
> +
> +if BUILD_EVENTCOMM
> +noinst_PROGRAMS = eventcomm-test
> +
> +eventcomm_test_SOURCES = eventcomm-test.c\
> + $(fake_syms)
> +endif
> +
> +if ENABLE_UNIT_TESTS
> +TESTS = $(noinst_PROGRAMS)
> +endif
> diff --git a/test/eventcomm-test.c b/test/eventcomm-test.c
> new file mode 100644
> index 0000000..ac24640
> --- /dev/null
> +++ b/test/eventcomm-test.c
> @@ -0,0 +1,37 @@
> +/*
> + * Copyright © 2011 Red Hat, Inc.
> + *
> + * Permission to use, copy, modify, distribute, and sell this software
> + * and its documentation for any purpose is hereby granted without
> + * fee, provided that the above copyright notice appear in all copies
> + * and that both that copyright notice and this permission notice
> + * appear in supporting documentation, and that the name of Red Hat
> + * not be used in advertising or publicity pertaining to distribution
> + * of the software without specific, written prior permission. Red
> + * Hat makes no representations about the suitability of this software
> + * for any purpose. It is provided "as is" without express or implied
> + * warranty.
> + *
> + * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
> + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
> + * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
> + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
> + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
> + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
> + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + *
> + * Authors:
> + * Peter Hutterer
> + */
> +
> +#if HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <stdio.h>
> +#include <assert.h>
> +
> +int main (int argc, char **argv)
> +{
> + return 0;
> +}
> diff --git a/test/fake-symbols.c b/test/fake-symbols.c
> new file mode 100644
> index 0000000..9657bab
> --- /dev/null
> +++ b/test/fake-symbols.c
> @@ -0,0 +1,446 @@
> +#include "fake-symbols.h"
> +
> +_X_EXPORT
> +int xf86ReadSerial (int fd, void *buf, int count)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT int
> +xf86WriteSerial (int fd, const void *buf, int count)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT int
> +xf86CloseSerial (int fd)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT int
> +xf86WaitForInput (int fd, int timeout)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT int
> +xf86OpenSerial (pointer options)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT int
> +xf86SetSerialSpeed (int fd, int speed)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT pointer
> +xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT char *
> +xf86SetStrOption(pointer optlist, const char *name, char *deflt)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT int
> +xf86SetBoolOption(pointer optlist, const char *name, int deflt)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT pointer
> +xf86AddNewOption(pointer head, const char *name, const char *val)
> +{
> + return NULL;
> +}
> +_X_EXPORT char *
> +xf86FindOptionValue(pointer options, const char *name)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT char *
> +xf86OptionName(pointer opt)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT char *
> +xf86OptionValue(pointer opt)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT int
> +xf86NameCmp(const char *s1, const char *s2)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT char *
> +xf86CheckStrOption(pointer optlist, const char *name, char *deflt)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT void
> +xf86AddEnabledDevice(InputInfoPtr pInfo)
> +{
> + return;
> +}
> +
> +_X_EXPORT void
> +xf86RemoveEnabledDevice(InputInfoPtr pInfo)
> +{
> + return;
> +}
> +
> +_X_EXPORT Atom
> +XIGetKnownProperty(char *name)
> +{
> + return None;
> +}
> +
> +_X_EXPORT void
> +xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags)
> +{
> + return;
> +}
> +
> +_X_EXPORT int
> +xf86ScaleAxis(int Cx,
> + int to_max,
> + int to_min,
> + int from_max,
> + int from_min )
> +{
> + int X;
> + int64_t to_width = to_max - to_min;
> + int64_t from_width = from_max - from_min;
> +
> + if (from_width) {
> + X = (int)(((to_width * (Cx - from_min)) / from_width) + to_min);
> + }
> + else {
> + X = 0;
> + /*ErrorF ("Divide by Zero in xf86ScaleAxis\n");*/
> + }
> +
> + if (X > to_max)
> + X = to_max;
> + if (X < to_min)
> + X = to_min;
> +
> + return X;
> +}
> +
> +
> +_X_EXPORT void
> +DeleteInputDeviceRequest(DeviceIntPtr pDev)
> +{
> + return;
> +}
> +
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> +_X_EXPORT void
> +FreeInputAttributes(InputAttributes *attrs)
> +{
> + return;
> +}
> +#endif
> +
> +_X_EXPORT void
> +xf86PostButtonEvent(DeviceIntPtr device,
> + int is_absolute,
> + int button,
> + int is_down,
> + int first_valuator,
> + int num_valuators,
> + ...)
> +{
> + return;
> +}
> +
> +_X_EXPORT int
> +Xasprintf(char ** ret, const char * format, ...)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT int
> +XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT InputInfoPtr
> +xf86FirstLocalDevice(void)
> +{
> + return NULL;
> +}
> +
> +
> +_X_EXPORT void
> +xf86DeleteInput(InputInfoPtr pInp, int flags)
> +{
> + return;
> +}
> +
> +_X_EXPORT pointer
> +xf86OptionListDuplicate(pointer options)
> +{
> + return NULL;
> +}
> +
> +_X_EXPORT Bool
> +InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
> + CARD8 *map)
> +{
> + return FALSE;
> +}
> +
> +_X_EXPORT void
> +InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
> + int resolution, int min_res, int max_res, int mode)
> +{
> + return;
> +}
> +
> +_X_EXPORT void
> +xf86PostKeyboardEvent(DeviceIntPtr device,
> + unsigned int key_code,
> + int is_down)
> +{
> + return;
> +}
> +
> +_X_EXPORT int
> +xf86SetIntOption(pointer optlist, const char *name, int deflt)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT void
> +xf86PostButtonEventP(DeviceIntPtr device,
> + int is_absolute,
> + int button,
> + int is_down,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators)
> +{
> + return;
> +}
> +
> +_X_EXPORT Bool
> +InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
> +{
> + return FALSE;
> +}
> +
> +_X_EXPORT int
> +XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
> + int format, int mode, unsigned long len,
> + pointer value, Bool sendevent)
> +{
> + return 0;
> +}
> +
> +_X_EXPORT CARD32
> +GetTimeInMillis (void)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT int
> +NewInputDeviceRequest (InputOption *options,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> + InputAttributes *attrs,
> +#endif
> + DeviceIntPtr *pdev)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT Bool
> +InitLedFeedbackClassDeviceStruct (DeviceIntPtr dev, LedCtrlProcPtr controlProc)
> +{
> + return FALSE;
> +}
> +
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> +_X_EXPORT InputAttributes*
> +DuplicateInputAttributes(InputAttributes *attrs)
> +{
> + return NULL;
> +}
> +#endif
> +
> +_X_EXPORT int
> +ValidAtom(Atom atom)
> +{
> + return None;
> +}
> +
> +_X_EXPORT Bool
> +InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
> + BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func)
> +{
> + return FALSE;
> +}
> +
> +_X_EXPORT long
> +XIRegisterPropertyHandler(DeviceIntPtr dev,
> + int (*SetProperty) (DeviceIntPtr dev,
> + Atom property,
> + XIPropertyValuePtr prop,
> + BOOL checkonly),
> + int (*GetProperty) (DeviceIntPtr dev,
> + Atom property),
> + int (*DeleteProperty) (DeviceIntPtr dev,
> + Atom property))
> +{
> + return 0;
> +}
> +
> +_X_EXPORT int
> +InitProximityClassDeviceStruct(DeviceIntPtr dev)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT void
> +xf86Msg(MessageType type, const char *format, ...)
> +{
> + return;
> +}
> +
> +_X_EXPORT void
> +xf86MsgVerb(MessageType type, int verb, const char *format, ...)
> +{
> + return;
> +}
> +
> +
> +_X_EXPORT void
> +xf86PostMotionEventP(DeviceIntPtr device,
> + int is_absolute,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators)
> +{
> + return;
> +}
> +
> +
> +_X_EXPORT Bool
> +InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
> + int numMotionEvents, int mode)
> +{
> + return FALSE;
> +}
> +
> +
> +_X_EXPORT pointer
> +xf86ReplaceStrOption(pointer optlist, const char *name, const char* val)
> +{
> + return NULL;
> +}
> +
> +
> +_X_EXPORT pointer
> +xf86NextOption(pointer list)
> +{
> + return NULL;
> +}
> +
> +
> +_X_EXPORT int
> +XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT Atom
> +MakeAtom(const char *string, unsigned len, Bool makeit)
> +{
> + return None;
> +}
> +
> +
> +_X_EXPORT int
> +GetMotionHistorySize(void)
> +{
> + return 0;
> +}
> +
> +
> +_X_EXPORT void
> +xf86PostProximityEventP(DeviceIntPtr device,
> + int is_in,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators)
> +{
> + return;
> +}
> +
> +
> +_X_EXPORT Bool
> +InitFocusClassDeviceStruct(DeviceIntPtr dev)
> +{
> + return FALSE;
> +}
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
> +void
> +xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list)
> +{
> +}
> +
> +void
> +xf86CollectInputOptions(InputInfoPtr pInfo,
> + const char **defaultOpts,
> + pointer extraOpts)
> +{
> +}
> +
> +InputInfoPtr xf86AllocateInput(InputDriverPtr drv, int flags)
> +{
> + return NULL;
> +}
> +
> +#endif
> +
> +ClientPtr serverClient;
> +
> +Bool QueueWorkProc (
> + Bool (*function)(ClientPtr /* pClient */, pointer /* closure */),
> + ClientPtr client, pointer closure)
> +{
> + return FALSE;
> +}
> diff --git a/test/fake-symbols.h b/test/fake-symbols.h
> new file mode 100644
> index 0000000..cc62679
> --- /dev/null
> +++ b/test/fake-symbols.h
> @@ -0,0 +1,177 @@
> +#include <xorg-server.h>
> +#include <xf86Xinput.h>
> +
> +extern int xf86ReadSerial (int fd, void *buf, int count);
> +extern int xf86WriteSerial (int fd, const void *buf, int count);
> +extern int xf86CloseSerial (int fd);
> +extern int xf86WaitForInput (int fd, int timeout);
> +extern int xf86OpenSerial (pointer options);
> +extern int xf86SetSerialSpeed (int fd, int speed);
> +
> +extern pointer xf86ReplaceIntOption(pointer optlist, const char *name, const int val);
> +extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
> +extern char* xf86OptionName(pointer opt);
> +extern char* xf86FindOptionValue(pointer options, const char *name);
> +extern int xf86NameCmp(const char *s1, const char *s2);
> +extern char* xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
> +
> +
> +extern char * xf86SetStrOption(pointer optlist, const char *name, char *deflt);
> +extern int xf86SetBoolOption(pointer optlist, const char *name, int deflt);
> +extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
> +extern char* xf86FindOptionValue(pointer options, const char *name);
> +extern char* xf86OptionName(pointer opt);
> +extern char *xf86OptionValue(pointer opt);
> +extern int xf86NameCmp(const char *s1, const char *s2);
> +extern char * xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
> +extern void xf86AddEnabledDevice(InputInfoPtr pInfo);
> +extern void xf86RemoveEnabledDevice(InputInfoPtr pInfo);
> +extern Atom XIGetKnownProperty(char *name);
> +extern void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags);
> +extern int
> +xf86ScaleAxis(int Cx,
> + int to_max,
> + int to_min,
> + int from_max,
> + int from_min );
> +
> +extern void DeleteInputDeviceRequest(DeviceIntPtr pDev);
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> +extern void FreeInputAttributes(InputAttributes *attrs);
> +#endif
> +extern void
> +xf86PostButtonEvent(DeviceIntPtr device,
> + int is_absolute,
> + int button,
> + int is_down,
> + int first_valuator,
> + int num_valuators,
> + ...);
> +extern int Xasprintf(char ** ret, const char *format, ...);
> +extern int
> +XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable);
> +
> +extern InputInfoPtr xf86FirstLocalDevice(void);
> +extern void xf86DeleteInput(InputInfoPtr pInp, int flags);
> +extern pointer xf86OptionListDuplicate(pointer options);
> +extern Bool
> +InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
> + CARD8 *map);
> +extern void
> +InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
> + int resolution, int min_res, int max_res, int mode);
> +extern void
> +xf86PostKeyboardEvent(DeviceIntPtr device,
> + unsigned int key_code,
> + int is_down);
> +extern int
> +xf86SetIntOption(pointer optlist, const char *name, int deflt);
> +extern void
> +xf86PostButtonEventP(DeviceIntPtr device,
> + int is_absolute,
> + int button,
> + int is_down,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators);
> +extern Bool
> +InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc);
> +
> +extern int
> +XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
> + int format, int mode, unsigned long len,
> + pointer value, Bool sendevent);
> +extern CARD32 GetTimeInMillis (void);
> +
> +extern int
> +NewInputDeviceRequest (InputOption *options,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> + InputAttributes *attrs,
> +#endif
> + DeviceIntPtr *pdev);
> +
> +extern Bool
> +InitLedFeedbackClassDeviceStruct (DeviceIntPtr dev, LedCtrlProcPtr controlProc);
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
> +extern InputAttributes* DuplicateInputAttributes(InputAttributes *attrs);
> +#endif
> +extern int ValidAtom(Atom atom);
> +extern Bool
> +InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
> + BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func);
> +extern long
> +XIRegisterPropertyHandler(DeviceIntPtr dev,
> + int (*SetProperty) (DeviceIntPtr dev,
> + Atom property,
> + XIPropertyValuePtr prop,
> + BOOL checkonly),
> + int (*GetProperty) (DeviceIntPtr dev,
> + Atom property),
> + int (*DeleteProperty) (DeviceIntPtr dev,
> + Atom property));
> +extern int InitProximityClassDeviceStruct(DeviceIntPtr dev);
> +extern void xf86Msg(MessageType type, const char *format, ...);
> +extern void xf86MsgVerb(MessageType type, int verb, const char *format, ...);
> +
> +extern void
> +xf86PostMotionEventP(DeviceIntPtr device,
> + int is_absolute,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators);
> +
> +extern Bool
> +InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
> + int numMotionEvents, int mode);
> +
> +extern pointer
> +xf86ReplaceStrOption(pointer optlist, const char *name, const char* val);
> +
> +extern pointer xf86NextOption(pointer list);
> +
> +extern int
> +XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value);
> +
> +extern Atom MakeAtom(const char *string, unsigned len, Bool makeit);
> +
> +extern int GetMotionHistorySize(void);
> +
> +extern void
> +xf86PostProximityEventP(DeviceIntPtr device,
> + int is_in,
> + int first_valuator,
> + int num_valuators,
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
> + const
> +#endif
> + int *valuators);
> +
> +extern Bool InitFocusClassDeviceStruct(DeviceIntPtr dev);
> +
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
> +extern void
> +xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list);
> +
> +extern void
> +xf86CollectInputOptions(InputInfoPtr pInfo,
> + const char **defaultOpts,
> + pointer extraOpts);
> +
> +extern InputInfoPtr
> +xf86AllocateInput(InputDriverPtr drv, int flags);
> +
> +
> +extern ClientPtr serverClient;
> +
> +extern Bool QueueWorkProc (
> + Bool (*function)(ClientPtr /* pClient */, pointer /* closure */),
> + ClientPtr client, pointer closure);
> +#endif
> --
> 1.7.4
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-devel/attachments/20110321/77dea55a/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg-devel/attachments/20110321/77dea55a/attachment-0001.pgp>
More information about the xorg-devel
mailing list