Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent
fall-outs, when they contain space.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Syncs the invocation of configure with the one from the server.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
configure.ac:22: warning: AC_OUTPUT should be used without arguments.
configure.ac:22: You should run autoupdate.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Added by 17ab095 ("add libdir/exec_prefix to xcb-xproto.pc") with the
rationale of using it to find the python path, but later commits bd7a481
("pkg-config: Add sysroot prefix") and be9c255 ("Adjust to automake
1.16.4 changes") make this directly accessible.
By removing libdir from the pkgconfig file, the file becomes identical
for different ABIs.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Adjacent lists of char should not have any automatic padding added,
since the alignment requirements for both are the same. Add explicit
padding where it is required.
Signed-off-by: Peter Harris <pharris@opentext.com>
This makes the code added in the previous commit consistent with the
rest of the code base. From Björn's suggestion:
This should import xml.etree.{,c}ElementTree conditionally on the
version of the Python interpreter used to import this module.
xml.etree.ElementTree is preferred for Python >= 3.3, as it uses the
fastest possible implementation automatically. Earlier versions of
Python need xml.etree.cElementTree as they may not have an
implementation that can be used in a platform generic way.
Suggested-by: Björn Esser <besser82@fedoraproject.org>
All X11 errors have the same fields. There are no differences.
In a perfect world, the XML could thus just say "define an error" and
xcbgen would do all the rest. However, the world is imperfect and we
already have a mixture of fields defined in the XML. Some of the XML
even defines trailing padding, while most does not.
This commit makes xcbgen add all fields to X11 errors, but those that
are already defined in the XML are skipped and left as-is. Due to the
structure of the code, this requires pretending that a different XML was
read, i.e. the code now modifies the in-memory structure of ElementTree
to add the missing fields to the in-memory representation of the XML.
This is the simplest way that I found to append elements. The existing
mechanisms can only prepend fields.
The approach taken by this commit was suggested by Peter Harris. Thanks
a lot for this idea, it's a lot simpler than my previous approach.
Fixes: https://gitlab.freedesktop.org/xorg/proto/xcbproto/-/issues/16
Signed-off-by: Uli Schlachter <psychon@znc.in>
Currently the layout of a struct is used to compute its size. This works
fine in case of structs of fixed size. However this introduces
forwards-compatibility problems in cases when the struct has multiple
variants and the exact variant is specified by the value of some field
(e.g. in the case of <switch> elements). Future revisions of protocols
may introduce new layout variants, in which case the old code does not
know the size of the struct variant and can't parse the incoming byte
stream.
Instead of relying on knowledge about the layout of data structures we
should instead use the length field for length information. This way
when old client libxcb communicates with newer server it can at least
ignore unknown struct variants.
The Xserver itself is capable of terminating itself once all X11 clients
are gone, yet in a typical full session, there are a number of X11
clients running continuously (e.g. the Xsettings daemon, IBus, etc.).
Those always-running clients will prevent the Xserver from terminating,
because the actual number of X11 clients will never drop to 0.
To solve this issue directly at the Xserver level, this add new entries
to the XFixes extension to let the X11 clients themselves specify the
disconnect mode they expect.
Typically, those X11 daemon clients would specify the disconnect mode
XFixesClientDisconnectFlagTerminate to let the Xserver know that they
should not be accounted for when checking the remaining clients prior
to terminate.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
In commit 7d58eed95f we started
to use xml.etree.ElementTree for Python >= 3.9. In fact the
xml.etree.cElementTree module has already been deprecated
since Python 3.3.
Given this fact, we should start to use the xml.etree.ElementTree
module beginning with Python 3.3.
See: a72a98f24a
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
fractions.gcd() has been deprecated since Python 3.5, and
was finally dropped in Python 3.9. It is recommended to
use math.gcd() instead.
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
In xv.xml, there is something like this:
<struct name="ImageFormatInfo">
[...]
<field type="CARD8" name="byte_order" enum="ImageOrder" />
<pad bytes="2" />
<list type="CARD8" name="guid">
<value>16</value>
</list>
[...]
</struct>
When parsing this, the Field instance for "guid" ended up with .enum ==
"ImageOrder". This is because the loop that parses complex type did not
unset a variable across iterations, meaning that the last "enum"
property "stuck" and was also used for all following fields.
Fix this by simply moving the initialisation of the "enum" variable
inside of the loop.
Signed-off-by: Uli Schlachter <psychon@znc.in>
xcbgen 'helpfully' transforms things to C types already so that libxcb
does not have to do so. Thus, even though the XML says that a field has
type CARD8, xcbgen will claim uint8_t. This might be a bit weird, but is
so far totally fine.
However, the type mapping that xcbgen uses is not injective. All of
CARD8, BYTE and BOOL get turned into uint8_t and the original type is
lost.
This is totally fine for libxcb, but programming languages other than C
do have built in boolean types. My personal problem is with Rust, where
providing a boolean for an integer argument causes a compiler error.
This results in (relatively) ugly "0 / 1" instead of "false / true".
This commit adds a new xml_type member to SimpleType. This type contains
the original string that appeared in the XML file.
Since libxcb creates instances of SimpleType itself and to avoid
breaking the API, the new argument to SimpleType.__init__ defaults to
None.
Signed-off-by: Uli Schlachter <psychon@znc.in>
XFixes contains a CreateRegion request:
<request name="CreateRegion" opcode="5">
<field type="REGION" name="region" />
<list type="RECTANGLE" name="rectangles" />
</request>
This request contains a list of type RECTANGLE. This struct comes from
xproto and is thus not contained in xfixes itself.
Normal "Struct"s have their resolve() method called early, because they
appear in the module itself. However, in the CreateRegion case, this
struct is imported and thus does not get resolved. Instead, ListType's
resolve() method calls self.member.resolve(module). Thus, only at this
point is the struct resolved.
Why is this important? Struct.resolve() is the same as
ComplexType.resolve() and this function does self.calc_size() at the
end. Thus, only after the struct was resolved is its size known. Before
that, the size is just set to 0 (this happens in ComplexType.__init__).
However, ListType.__init__ already computes its size member based on its
member. At this point, this is still 0 so the list ends up believing its
size to be zero.
Fix this by recomputing self.size in ListType.resolve().
Signed-off-by: Uli Schlachter <psychon@znc.in>
xcb-proto's pkg-config file exports static file paths for where to find
its Python files and the XML definitions.
When used to discover cflags, library paths, etc, pkg-config will
prepend ${PKG_CONFIG_SYSROOT_DIR}, if any, to those paths. This makes
the use of a sysroot prefix transparent to users. However, since it
doesn't know about paths in custom variables, it cannot automatically
prefix this.
Adding ${pc_sysrootdir} to these absolute paths makes the behaviour
match, and XCB builds work out of the box in a sysroot.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This was set to BOOL, but the protocol headers used Bool, presumably a
32-bit type. We're switching everything to CARD32 as the best option
for compatibility.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Mihai Moldovan <ionic@ionic.de>
This release adds support for variable-sized lists of FDs (e.g. sized
by a field in the request/event), as well as several other cleanups and
fixes in the core code.
DRI3 has been bumped to v1.2, using the new support to support
multi-planar buffers and DRM modifiers.
Present has also been bumped to v1.2, adding a new token for the server
to indicate to the client that it should reallocate its buffers.
RandR has been updated to 1.6, adding support for DRM leases to allow
clients to directly control outputs.
Signed-off-by: Daniel Stone <daniels@collabora.com>
This flag (returned with PresentCompleteNotify event) indicates
that the window could have been flipped instead of copied if
the buffer format/modifier was different. Clients must indicate
that they support the flag by adding option PresentOptionSuboptimal
when calling PresentPixmap.
v2: Add PresentOptionSuboptimal
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Bumping to version 1.2, add support for:
- querying formats and modifiers supported by the server
- creating (and receiving) multi-planar buffers
- creating (and receiving) buffers with modifiers
v2: Fix alignment
v3: Bump to version 1.2 rather than 1.1. The old dri3proto had a '1.1'
release for non-functional changes, so we avoid that version and
skip directly to 1.2.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Add a special case in ListType to support lists of file descriptors,
which also requires explicit support within clients.
File descriptors are not supported as children of other complex types,
e.g. switch.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Use the eventstruct element to define the SendExtensionEvent request
instead of using a byte-array.
This has the advantage that the structure of the data to be sent
is now defined in the xml definition.
This can be used by generators to make sending events safer.
Such as avoiding type-casts in C.
It can also be useful for protocol analyzers and tools like that
because the structure of the sent events is now defined in the xml-definition.
Tested-by: Christian Linhart <chris@demorecorder.com>
Signed-off-by: Christian Linhart <chris@demorecorder.com>
eventstruct is a new xml element that allows to use events
as part of requests.
This is, e.g., needed by the SendExtensionEvent request
of the XINPUT extension.
Signed-off-by: Christian Linhart <chris@demorecorder.com>
member event_type_base in struct InputClassInfo is a CARD8.
This patch replaces the type with the new typedef EventTypeBase
which is defined as a CARD8.
This does not alter the ABI or API for that struct because
typedefs do not appear in the ABI.
And C handles typedefs as aliases.
So there'll be no API issues as well.
The libxcb generator adds additional functions that implement
an iterator over this type.
This is harmless because adding code is ABI/API compatible.
The purpose of this change is to add more semantic info to this
member variable of this struct.
This helps with xcb-based generators or automatic code-checkers
and things like that.
Signed-off-by: Christian Linhart <chris@demorecorder.com>
Set the lenfield of a sumof expression object, so that
libxcb or other generators won't need to look it up.
This object is trivially available in the parser but
needs a complex lookup in generators.
Signed-off-by: Christian Linhart <chris@demorecorder.com>
Fields AuthorizationProtocolName and AuthorizationProtocolData of
SetupRequest should be padded:
http://www.x.org/releases/current/doc/xproto/x11protocol.html#Encoding::Connection_Setup
The problem was discovered by github user pphaneuf while trying to use xgb
to write his own implementation of the connection handshake. Neither xgb
nor xcb actually use code generated for SetupRequest for the handshake,
which is why this bug went unnoticed.
https://github.com/BurntSushi/xgb/issues/24
Alessandro Arzilli.
Reviewed-by: Christian Linhart <chris@demorecorder.com>