mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 04:48:36 +00:00
tools: Support building Wayland protocol source files.
Wayland protocol descriptions are distributed as source XML files that need to be transformed to C source and header files with a version of the wayland-scanner tool compatible with the used libwayland library. This commit enhances the makedep build tool to support building such Wayland protocol XML files. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
This commit is contained in:
parent
fcaed00a03
commit
8570016783
63
configure
vendored
63
configure
vendored
|
@ -702,6 +702,7 @@ INOTIFY_LIBS
|
|||
INOTIFY_CFLAGS
|
||||
PCSCLITE_LIBS
|
||||
PCAP_LIBS
|
||||
WAYLAND_SCANNER
|
||||
WAYLAND_CLIENT_LIBS
|
||||
WAYLAND_CLIENT_CFLAGS
|
||||
X_EXTRA_LIBS
|
||||
|
@ -15614,14 +15615,13 @@ fi
|
|||
rm -f conftest.err
|
||||
ac_save_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS $WAYLAND_CLIENT_CFLAGS"
|
||||
ac_fn_c_check_header_compile "$LINENO" "wayland-client.h" "ac_cv_header_wayland_client_h" "$ac_includes_default"
|
||||
for ac_header in wayland-client.h
|
||||
do :
|
||||
ac_fn_c_check_header_compile "$LINENO" "wayland-client.h" "ac_cv_header_wayland_client_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_wayland_client_h" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_WAYLAND_CLIENT_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wl_display_connect in -lwayland-client" >&5
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wl_display_connect in -lwayland-client" >&5
|
||||
printf %s "checking for wl_display_connect in -lwayland-client... " >&6; }
|
||||
if test ${ac_cv_lib_wayland_client_wl_display_connect+y}
|
||||
then :
|
||||
|
@ -15658,15 +15658,63 @@ fi
|
|||
printf "%s\n" "$ac_cv_lib_wayland_client_wl_display_connect" >&6; }
|
||||
if test "x$ac_cv_lib_wayland_client_wl_display_connect" = xyes
|
||||
then :
|
||||
:
|
||||
# Extract the first word of "wayland-scanner", so it can be a program name with args.
|
||||
set dummy wayland-scanner; ac_word=$2
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
printf %s "checking for $ac_word... " >&6; }
|
||||
if test ${ac_cv_path_WAYLAND_SCANNER+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
case $WAYLAND_SCANNER in
|
||||
[\\/]* | ?:[\\/]*)
|
||||
ac_cv_path_WAYLAND_SCANNER="$WAYLAND_SCANNER" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
case $as_dir in #(((
|
||||
'') as_dir=./ ;;
|
||||
*/) ;;
|
||||
*) as_dir=$as_dir/ ;;
|
||||
esac
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
|
||||
ac_cv_path_WAYLAND_SCANNER="$as_dir$ac_word$ac_exec_ext"
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
test -z "$ac_cv_path_WAYLAND_SCANNER" && ac_cv_path_WAYLAND_SCANNER="`test -n "$PKG_CONFIG" && $PKG_CONFIG --variable=wayland_scanner wayland-scanner 2>/dev/null`"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
WAYLAND_SCANNER=$ac_cv_path_WAYLAND_SCANNER
|
||||
if test -n "$WAYLAND_SCANNER"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WAYLAND_SCANNER" >&5
|
||||
printf "%s\n" "$WAYLAND_SCANNER" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
else $as_nop
|
||||
WAYLAND_CLIENT_LIBS=""
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
CPPFLAGS=$ac_save_CPPFLAGS
|
||||
|
||||
fi
|
||||
if test -z "$WAYLAND_CLIENT_LIBS"
|
||||
if test -z "$WAYLAND_CLIENT_LIBS" -o -z "$WAYLAND_SCANNER"
|
||||
then :
|
||||
case "x$with_wayland" in
|
||||
x) as_fn_append wine_notices "|Wayland ${notice_platform}development files not found, the Wayland driver won't be supported." ;;
|
||||
|
@ -23178,6 +23226,7 @@ X_LIBS = $X_LIBS
|
|||
X_EXTRA_LIBS = $X_EXTRA_LIBS
|
||||
WAYLAND_CLIENT_CFLAGS = $WAYLAND_CLIENT_CFLAGS
|
||||
WAYLAND_CLIENT_LIBS = $WAYLAND_CLIENT_LIBS
|
||||
WAYLAND_SCANNER = $WAYLAND_SCANNER
|
||||
PCAP_LIBS = $PCAP_LIBS
|
||||
PCSCLITE_LIBS = $PCSCLITE_LIBS
|
||||
INOTIFY_CFLAGS = $INOTIFY_CFLAGS
|
||||
|
|
10
configure.ac
10
configure.ac
|
@ -1340,11 +1340,13 @@ fi
|
|||
if test "x$with_wayland" != "xno"
|
||||
then
|
||||
WINE_PACKAGE_FLAGS(WAYLAND_CLIENT,[wayland-client],,,,
|
||||
[AC_CHECK_HEADERS([wayland-client.h])
|
||||
AC_CHECK_LIB(wayland-client,wl_display_connect,[:],
|
||||
[WAYLAND_CLIENT_LIBS=""],[$WAYLAND_CLIENT_LIBS])])
|
||||
[AC_CHECK_HEADERS([wayland-client.h],
|
||||
[AC_CHECK_LIB(wayland-client,wl_display_connect,
|
||||
[AC_PATH_PROG(WAYLAND_SCANNER,wayland-scanner,
|
||||
[`test -n "$PKG_CONFIG" && $PKG_CONFIG --variable=wayland_scanner wayland-scanner 2>/dev/null`])],
|
||||
[WAYLAND_CLIENT_LIBS=""],[$WAYLAND_CLIENT_LIBS])])])
|
||||
fi
|
||||
WINE_NOTICE_WITH(wayland, [test -z "$WAYLAND_CLIENT_LIBS"],
|
||||
WINE_NOTICE_WITH(wayland, [test -z "$WAYLAND_CLIENT_LIBS" -o -z "$WAYLAND_SCANNER"],
|
||||
[Wayland ${notice_platform}development files not found, the Wayland driver won't be supported.],
|
||||
[enable_winewayland_drv])
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@ UNIXLIB = winewayland.so
|
|||
UNIX_CFLAGS = $(WAYLAND_CLIENT_CFLAGS)
|
||||
UNIX_LIBS = -lwin32u $(WAYLAND_CLIENT_LIBS)
|
||||
|
||||
C_SRCS = \
|
||||
SOURCES = \
|
||||
display.c \
|
||||
dllmain.c \
|
||||
version.rc \
|
||||
wayland.c \
|
||||
wayland_output.c \
|
||||
waylanddrv_main.c
|
||||
|
||||
RC_SRCS = version.rc
|
||||
waylanddrv_main.c \
|
||||
xdg-output-unstable-v1.xml
|
||||
|
|
220
dlls/winewayland.drv/xdg-output-unstable-v1.xml
Normal file
220
dlls/winewayland.drv/xdg-output-unstable-v1.xml
Normal file
|
@ -0,0 +1,220 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<protocol name="xdg_output_unstable_v1">
|
||||
|
||||
<copyright>
|
||||
Copyright © 2017 Red Hat Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next
|
||||
paragraph) shall be included in all copies or substantial portions of the
|
||||
Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
</copyright>
|
||||
|
||||
<description summary="Protocol to describe output regions">
|
||||
This protocol aims at describing outputs in a way which is more in line
|
||||
with the concept of an output on desktop oriented systems.
|
||||
|
||||
Some information are more specific to the concept of an output for
|
||||
a desktop oriented system and may not make sense in other applications,
|
||||
such as IVI systems for example.
|
||||
|
||||
Typically, the global compositor space on a desktop system is made of
|
||||
a contiguous or overlapping set of rectangular regions.
|
||||
|
||||
Some of the information provided in this protocol might be identical
|
||||
to their counterparts already available from wl_output, in which case
|
||||
the information provided by this protocol should be preferred to their
|
||||
equivalent in wl_output. The goal is to move the desktop specific
|
||||
concepts (such as output location within the global compositor space,
|
||||
the connector name and types, etc.) out of the core wl_output protocol.
|
||||
|
||||
Warning! The protocol described in this file is experimental and
|
||||
backward incompatible changes may be made. Backward compatible
|
||||
changes may be added together with the corresponding interface
|
||||
version bump.
|
||||
Backward incompatible changes are done by bumping the version
|
||||
number in the protocol and interface names and resetting the
|
||||
interface version. Once the protocol is to be declared stable,
|
||||
the 'z' prefix and the version number in the protocol and
|
||||
interface names are removed and the interface version number is
|
||||
reset.
|
||||
</description>
|
||||
|
||||
<interface name="zxdg_output_manager_v1" version="3">
|
||||
<description summary="manage xdg_output objects">
|
||||
A global factory interface for xdg_output objects.
|
||||
</description>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the xdg_output_manager object">
|
||||
Using this request a client can tell the server that it is not
|
||||
going to use the xdg_output_manager object anymore.
|
||||
|
||||
Any objects already created through this instance are not affected.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<request name="get_xdg_output">
|
||||
<description summary="create an xdg output from a wl_output">
|
||||
This creates a new xdg_output object for the given wl_output.
|
||||
</description>
|
||||
<arg name="id" type="new_id" interface="zxdg_output_v1"/>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</request>
|
||||
</interface>
|
||||
|
||||
<interface name="zxdg_output_v1" version="3">
|
||||
<description summary="compositor logical output region">
|
||||
An xdg_output describes part of the compositor geometry.
|
||||
|
||||
This typically corresponds to a monitor that displays part of the
|
||||
compositor space.
|
||||
|
||||
For objects version 3 onwards, after all xdg_output properties have been
|
||||
sent (when the object is created and when properties are updated), a
|
||||
wl_output.done event is sent. This allows changes to the output
|
||||
properties to be seen as atomic, even if they happen via multiple events.
|
||||
</description>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the xdg_output object">
|
||||
Using this request a client can tell the server that it is not
|
||||
going to use the xdg_output object anymore.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<event name="logical_position">
|
||||
<description summary="position of the output within the global compositor space">
|
||||
The position event describes the location of the wl_output within
|
||||
the global compositor space.
|
||||
|
||||
The logical_position event is sent after creating an xdg_output
|
||||
(see xdg_output_manager.get_xdg_output) and whenever the location
|
||||
of the output changes within the global compositor space.
|
||||
</description>
|
||||
<arg name="x" type="int"
|
||||
summary="x position within the global compositor space"/>
|
||||
<arg name="y" type="int"
|
||||
summary="y position within the global compositor space"/>
|
||||
</event>
|
||||
|
||||
<event name="logical_size">
|
||||
<description summary="size of the output in the global compositor space">
|
||||
The logical_size event describes the size of the output in the
|
||||
global compositor space.
|
||||
|
||||
For example, a surface without any buffer scale, transformation
|
||||
nor rotation set, with the size matching the logical_size will
|
||||
have the same size as the corresponding output when displayed.
|
||||
|
||||
Most regular Wayland clients should not pay attention to the
|
||||
logical size and would rather rely on xdg_shell interfaces.
|
||||
|
||||
Some clients such as Xwayland, however, need this to configure
|
||||
their surfaces in the global compositor space as the compositor
|
||||
may apply a different scale from what is advertised by the output
|
||||
scaling property (to achieve fractional scaling, for example).
|
||||
|
||||
For example, for a wl_output mode 3840×2160 and a scale factor 2:
|
||||
|
||||
- A compositor not scaling the surface buffers will advertise a
|
||||
logical size of 3840×2160,
|
||||
|
||||
- A compositor automatically scaling the surface buffers will
|
||||
advertise a logical size of 1920×1080,
|
||||
|
||||
- A compositor using a fractional scale of 1.5 will advertise a
|
||||
logical size of 2560×1440.
|
||||
|
||||
For example, for a wl_output mode 1920×1080 and a 90 degree rotation,
|
||||
the compositor will advertise a logical size of 1080x1920.
|
||||
|
||||
The logical_size event is sent after creating an xdg_output
|
||||
(see xdg_output_manager.get_xdg_output) and whenever the logical
|
||||
size of the output changes, either as a result of a change in the
|
||||
applied scale or because of a change in the corresponding output
|
||||
mode(see wl_output.mode) or transform (see wl_output.transform).
|
||||
</description>
|
||||
<arg name="width" type="int"
|
||||
summary="width in global compositor space"/>
|
||||
<arg name="height" type="int"
|
||||
summary="height in global compositor space"/>
|
||||
</event>
|
||||
|
||||
<event name="done">
|
||||
<description summary="all information about the output have been sent">
|
||||
This event is sent after all other properties of an xdg_output
|
||||
have been sent.
|
||||
|
||||
This allows changes to the xdg_output properties to be seen as
|
||||
atomic, even if they happen via multiple events.
|
||||
|
||||
For objects version 3 onwards, this event is deprecated. Compositors
|
||||
are not required to send it anymore and must send wl_output.done
|
||||
instead.
|
||||
</description>
|
||||
</event>
|
||||
|
||||
<!-- Version 2 additions -->
|
||||
|
||||
<event name="name" since="2">
|
||||
<description summary="name of this output">
|
||||
Many compositors will assign names to their outputs, show them to the
|
||||
user, allow them to be configured by name, etc. The client may wish to
|
||||
know this name as well to offer the user similar behaviors.
|
||||
|
||||
The naming convention is compositor defined, but limited to
|
||||
alphanumeric characters and dashes (-). Each name is unique among all
|
||||
wl_output globals, but if a wl_output global is destroyed the same name
|
||||
may be reused later. The names will also remain consistent across
|
||||
sessions with the same hardware and software configuration.
|
||||
|
||||
Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do
|
||||
not assume that the name is a reflection of an underlying DRM
|
||||
connector, X11 connection, etc.
|
||||
|
||||
The name event is sent after creating an xdg_output (see
|
||||
xdg_output_manager.get_xdg_output). This event is only sent once per
|
||||
xdg_output, and the name does not change over the lifetime of the
|
||||
wl_output global.
|
||||
</description>
|
||||
<arg name="name" type="string" summary="output name"/>
|
||||
</event>
|
||||
|
||||
<event name="description" since="2">
|
||||
<description summary="human-readable description of this output">
|
||||
Many compositors can produce human-readable descriptions of their
|
||||
outputs. The client may wish to know this description as well, to
|
||||
communicate the user for various purposes.
|
||||
|
||||
The description is a UTF-8 string with no convention defined for its
|
||||
contents. Examples might include 'Foocorp 11" Display' or 'Virtual X11
|
||||
output via :1'.
|
||||
|
||||
The description event is sent after creating an xdg_output (see
|
||||
xdg_output_manager.get_xdg_output) and whenever the description
|
||||
changes. The description is optional, and may not be sent at all.
|
||||
|
||||
For objects of version 2 and lower, this event is only sent once per
|
||||
xdg_output, and the description does not change over the lifetime of
|
||||
the wl_output global.
|
||||
</description>
|
||||
<arg name="description" type="string" summary="output description"/>
|
||||
</event>
|
||||
|
||||
</interface>
|
||||
</protocol>
|
|
@ -387,6 +387,11 @@ sub assign_sources_to_makefiles(@)
|
|||
{
|
||||
push @nls_files, $name if $dir eq "nls";
|
||||
}
|
||||
elsif ($name =~ /\.xml$/ && $dir eq "dlls/winewayland.drv")
|
||||
{
|
||||
push @{${$make}{"=SOURCES"}}, $name;
|
||||
next;
|
||||
}
|
||||
elsif ($dir ne "loader") # loader dir contains misc files
|
||||
{
|
||||
next;
|
||||
|
|
|
@ -157,6 +157,7 @@ static const char *icotool;
|
|||
static const char *msgfmt;
|
||||
static const char *ln_s;
|
||||
static const char *sed_cmd;
|
||||
static const char *wayland_scanner;
|
||||
/* per-architecture global variables */
|
||||
static const char *arch_dirs[MAX_ARCHS];
|
||||
static const char *arch_pe_dirs[MAX_ARCHS];
|
||||
|
@ -1428,6 +1429,7 @@ static struct file *open_include_file( const struct makefile *make, struct incl_
|
|||
if ((file = open_local_generated_file( make, pFile, ".cur", ".svg" ))) return file;
|
||||
if ((file = open_local_generated_file( make, pFile, ".ico", ".svg" ))) return file;
|
||||
}
|
||||
if ((file = open_local_generated_file( make, pFile, "-client-protocol.h", ".xml" ))) return file;
|
||||
|
||||
/* check for extra targets */
|
||||
if (strarray_exists( &make->extra_targets, pFile->name ))
|
||||
|
@ -1915,6 +1917,21 @@ static void add_generated_sources( struct makefile *make )
|
|||
strarray_addall_uniq( &make->extra_imports,
|
||||
get_expanded_file_local_var( make, obj, "IMPORTS" ));
|
||||
}
|
||||
if (strendswith( source->name, ".xml" ))
|
||||
{
|
||||
char *code_name = replace_extension( source->name , ".xml", "-protocol.c" );
|
||||
char *header_name = replace_extension( source->name , ".xml", "-client-protocol.h" );
|
||||
|
||||
file = add_generated_source( make, code_name, NULL, 0 );
|
||||
file->file->flags |= FLAG_C_UNIX;
|
||||
file->use_msvcrt = 0;
|
||||
file = add_generated_source( make, header_name, NULL, 0 );
|
||||
file->file->flags |= FLAG_C_UNIX;
|
||||
file->use_msvcrt = 0;
|
||||
|
||||
free( code_name );
|
||||
free( header_name );
|
||||
}
|
||||
}
|
||||
if (make->testdll)
|
||||
{
|
||||
|
@ -3102,6 +3119,21 @@ static void output_source_spec( struct makefile *make, struct incl_file *source,
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* output_source_xml
|
||||
*/
|
||||
static void output_source_xml( struct makefile *make, struct incl_file *source, const char *obj )
|
||||
{
|
||||
if (wayland_scanner)
|
||||
{
|
||||
output( "%s-protocol.c: %s\n", obj_dir_path( make, obj ), source->filename );
|
||||
output( "\t%s%s private-code %s $@\n", cmd_prefix( "GEN" ), wayland_scanner, source->filename );
|
||||
output( "%s-client-protocol.h: %s\n", obj_dir_path( make, obj ), source->filename );
|
||||
output( "\t%s%s client-header %s $@\n", cmd_prefix( "GEN" ), wayland_scanner, source->filename );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* output_source_one_arch
|
||||
*/
|
||||
|
@ -3240,6 +3272,7 @@ static const struct
|
|||
{ "in", output_source_in },
|
||||
{ "x", output_source_x },
|
||||
{ "spec", output_source_spec },
|
||||
{ "xml", output_source_xml },
|
||||
{ NULL, output_source_default }
|
||||
};
|
||||
|
||||
|
@ -4383,6 +4416,7 @@ int main( int argc, char *argv[] )
|
|||
msgfmt = get_expanded_make_variable( top_makefile, "MSGFMT" );
|
||||
sed_cmd = get_expanded_make_variable( top_makefile, "SED_CMD" );
|
||||
ln_s = get_expanded_make_variable( top_makefile, "LN_S" );
|
||||
wayland_scanner = get_expanded_make_variable( top_makefile, "WAYLAND_SCANNER" );
|
||||
|
||||
if (root_src_dir && !strcmp( root_src_dir, "." )) root_src_dir = NULL;
|
||||
if (tools_dir && !strcmp( tools_dir, "." )) tools_dir = NULL;
|
||||
|
|
Loading…
Reference in a new issue