From 373cf7faa4873ecd8de860a1971fe0ca120f2ed1 Mon Sep 17 00:00:00 2001 From: "Ward Nakchbandi (Cosmic Fusion)" <83735213+CosmicFusion@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:30:11 +0300 Subject: [PATCH] bot --- debian/changelog | 2 +- debian/rules | 3 +- main.sh | 3 +- meson.build | 606 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 611 insertions(+), 3 deletions(-) create mode 100644 meson.build diff --git a/debian/changelog b/debian/changelog index 6ad901d..68eefc0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xwayland (2:23.2.3-100pika1) pikauwu; urgency=medium +xwayland (2:23.2.4-100pika1) pikauwu; urgency=medium * Update to pikauwu diff --git a/debian/rules b/debian/rules index f19b4d8..781f56f 100755 --- a/debian/rules +++ b/debian/rules @@ -1,5 +1,6 @@ #!/usr/bin/make -f -export DEB_CFLAGS_MAINT_APPEND = -Wno-error +export DEB_CFLAGS_MAINT_APPEND = -Wno-error +export DEB_LDFLAGS_MAINT_APPEND = -Wno-error include /usr/share/dpkg/pkg-info.mk SUPPORT = https://www.debian.org/support diff --git a/main.sh b/main.sh index f7a2147..765a291 100755 --- a/main.sh +++ b/main.sh @@ -1,6 +1,7 @@ # Clone Upstream -git clone https://gitlab.freedesktop.org/xorg/xserver.git -b xwayland-23.2.3 ./xwayland +git clone https://gitlab.freedesktop.org/xorg/xserver.git -b xwayland-23.2.4 ./xwayland cp -rvf ./debian ./xwayland/ +cp -vf ./meson.build ./xwayland/ cd ./xwayland for i in $(cat ../patches/series) ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || bash -c "echo "Applying Patch $i Failed!" && exit 2"; done diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..c7e0e99 --- /dev/null +++ b/meson.build @@ -0,0 +1,606 @@ +project('xwayland', 'c', + default_options: [ + 'buildtype=debugoptimized', + 'c_std=gnu99', + ], + version: '23.2.4', + meson_version: '>= 0.52.0', +) +release_date = '2024-01-16' + +add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc']) +cc = meson.get_compiler('c') + +add_project_arguments('-fno-strict-aliasing', language : 'c') +add_project_arguments('-fvisibility=hidden', language : 'c') + +add_project_link_arguments('-fvisibility=hidden', language : 'c') + +if cc.get_id() == 'gcc' or cc.get_id() == 'clang' + test_wflags = [ + '-Wall', + '-Wpointer-arith', + '-Wmissing-declarations', + '-Wformat=2', + '-Wstrict-prototypes', + '-Wmissing-prototypes', + '-Wnested-externs', + '-Wbad-function-cast', + '-Wold-style-definition', + '-Wunused', + '-Wuninitialized', + '-Wshadow', + '-Wmissing-noreturn', + '-Wmissing-format-attribute', + '-Wredundant-decls', + '-Wno-error', + ] +else + test_wflags = [] +endif + +common_wflags = [] +foreach wflag: test_wflags + if cc.has_argument(wflag) + common_wflags += [ wflag ] + endif +endforeach + +add_project_arguments(common_wflags, language : ['c', 'objc']) + +libdrm_req = '>= 2.4.109' +libselinux_req = '>= 2.0.86' +xext_req = '>= 1.0.99.4' +wayland_req = '>= 1.21.0' +wayland_protocols_req = '>= 1.30' +gbm_req = '>= 10.2' + +xproto_dep = dependency('xproto', version: '>= 7.0.31', fallback: ['xorgproto', 'ext_xorgproto']) +randrproto_dep = dependency('randrproto', version: '>= 1.6.0', fallback: ['xorgproto', 'ext_xorgproto']) +renderproto_dep = dependency('renderproto', version: '>= 0.11', fallback: ['xorgproto', 'ext_xorgproto']) +xextproto_dep = dependency('xextproto', version: '>= 7.2.99.901', fallback: ['xorgproto', 'ext_xorgproto']) +inputproto_dep = dependency('inputproto', version: '>= 2.3.99.1', fallback: ['xorgproto', 'ext_xorgproto']) +kbproto_dep = dependency('kbproto', version: '>= 1.0.3', fallback: ['xorgproto', 'ext_xorgproto']) +fontsproto_dep = dependency('fontsproto', version: '>= 2.1.3', fallback: ['xorgproto', 'ext_xorgproto']) +fixesproto_dep = dependency('fixesproto', version: '>= 6.0', fallback: ['xorgproto', 'ext_xorgproto']) +damageproto_dep = dependency('damageproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto']) +xcmiscproto_dep = dependency('xcmiscproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto']) +bigreqsproto_dep = dependency('bigreqsproto', version: '>= 1.1.0', fallback: ['xorgproto', 'ext_xorgproto']) +presentproto_dep = dependency('presentproto', version: '>= 1.3', fallback: ['xorgproto', 'ext_xorgproto']) +xtrans_dep = dependency('xtrans', version: '>= 1.3.5') + +videoproto_dep = dependency('videoproto', fallback: ['xorgproto', 'ext_xorgproto']) +compositeproto_dep = dependency('compositeproto', version: '>= 0.4', fallback: ['xorgproto', 'ext_xorgproto']) +recordproto_dep = dependency('recordproto', version: '>= 1.13.99.1', fallback: ['xorgproto', 'ext_xorgproto']) +scrnsaverproto_dep = dependency('scrnsaverproto', version: '>= 1.1', fallback: ['xorgproto', 'ext_xorgproto']) +resourceproto_dep = dependency('resourceproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto']) +dri3proto_dep = dependency('dri3proto', version: '>= 1.2', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('dri3') == 'true') +xineramaproto_dep = dependency('xineramaproto', fallback: ['xorgproto', 'ext_xorgproto']) +xf86bigfontproto_dep = dependency('xf86bigfontproto', version: '>= 1.2.0', fallback: ['xorgproto', 'ext_xorgproto'], required: get_option('xf86bigfont')) +xf86vidmodeproto_dep = dependency('xf86vidmodeproto', version: '>= 2.2.99.1', fallback: ['xorgproto', 'ext_xorgproto']) +xshmfence_dep = dependency('xshmfence', version: '>= 1.1', required: false) +xwaylandproto_dep = dependency('xwaylandproto', version: '>= 1.0', fallback: ['xorgproto', 'ext_xorgproto'], required: false) + +pixman_dep = dependency('pixman-1') +libbsd_dep = dependency('libbsd-overlay', required: false) +xkbcomp_dep = dependency('xkbcomp', required: false) +xkbfile_dep = dependency('xkbfile') +xfont2_dep = dependency('xfont2', version: '>= 2.0') + +# libsystemd-daemon was moved into libsystemd in version 209 +libsystemd_daemon_dep = dependency('libsystemd', version: '>= 209', required: false) +if not libsystemd_daemon_dep.found() + libsystemd_daemon_dep = dependency('libsystemd-daemon', required: false) +endif + +build_hashtable = false + +# Resolve default values of some options +xkb_dir = get_option('xkb_dir') +if xkb_dir == '' + if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig' + xkb_dir = xkbcomp_dep.get_pkgconfig_variable('xkbconfigdir') + endif + if xkb_dir == '' + xkb_dir = join_paths(get_option('prefix'), 'share/X11/xkb') + endif +endif + +xkb_output_dir = get_option('xkb_output_dir') +if xkb_output_dir == '' + xkb_output_dir = join_paths(xkb_dir, 'compiled') +endif + +xkb_bin_dir = get_option('xkb_bin_dir') +if xkb_bin_dir == '' + if xkbcomp_dep.found() and xkbcomp_dep.type_name() == 'pkgconfig' + xkb_bin_dir = xkbcomp_dep.get_pkgconfig_variable('bindir') + endif + if xkb_bin_dir == '' + xkb_bin_dir = join_paths(get_option('prefix'), get_option('bindir')) + endif +endif + +dfp = get_option('default_font_path') +if dfp == '' + fontrootdir = get_option('fontrootdir') + if fontrootdir == '' + fontutil_dep = dependency('fontutil', required: false) + if fontutil_dep.found() + fontrootdir = fontutil_dep.get_pkgconfig_variable('fontrootdir') + else + fontrootdir = join_paths(get_option('prefix'), get_option('datadir'), 'fonts', 'X11') + endif + endif + dfp_elements = [ + join_paths(fontrootdir, 'misc'), + join_paths(fontrootdir, 'TTF'), + join_paths(fontrootdir, 'OTF'), + join_paths(fontrootdir, 'Type1'), + join_paths(fontrootdir, '100dpi'), + join_paths(fontrootdir, '75dpi'), + ] + if host_machine.system() == 'darwin' + dfp_elements += [ + '/Library/Fonts', + '/System/Library/Fonts', + ] + endif + default_font_path = ','.join(dfp_elements) +else + default_font_path = dfp +endif + +build_glamor = get_option('glamor') + +with_dtrace = get_option('dtrace') +if with_dtrace + dtrace = find_program('dtrace', required: true) +endif + +build_xwayland = true + +xwayland_path = get_option('xwayland-path') +if (xwayland_path == '') + xwayland_path = join_paths(get_option('prefix'), get_option('bindir')) +endif + +xwayland_dep = [ + dependency('wayland-client', version: wayland_req, required: true), + dependency('wayland-protocols', version: wayland_protocols_req, required: true), + dependency('libxcvt', fallback: ['libxcvt', 'libxcvt_dep'], required: true), +] + +if build_glamor + xwayland_dep += dependency('libdrm', version: libdrm_req, required: true) + xwayland_dep += dependency('epoxy', required: true) +endif + +if get_option('ipv6') == 'auto' + build_ipv6 = cc.has_function('getaddrinfo') +else + build_ipv6 = get_option('ipv6') == 'true' +endif + +gbm_dep = dependency('', required: false) +epoxy_dep = dependency('', required: false) +if build_glamor + gbm_dep = dependency('gbm', version: gbm_req, required: false) + epoxy_dep = dependency('epoxy', required: false) +endif + +libdecor_dep = dependency('libdecor-0', required: false) +libdecor_option = get_option('libdecor') +if libdecor_option == 'auto' + have_libdecor = libdecor_dep.found() +else + have_libdecor = libdecor_option == 'true' + if have_libdecor and not libdecor_dep.found() + error('libdecor support requested but not found') + endif +endif + +eglstream_option = get_option('xwayland_eglstream') +if build_glamor + eglstream_dep = dependency('wayland-eglstream-protocols', required:false) + if eglstream_option == 'auto' + build_eglstream = eglstream_dep.found() + else + build_eglstream = eglstream_option == 'true' + if build_eglstream and not eglstream_dep.found() + error('glamor EGLStream support requested, but wayland-eglstream-protocols not found') + endif + endif +else + build_eglstream = false +endif + +if build_xwayland + libei_dep = dependency('libei-1.0', version: '>= 1.0.0', required: get_option('xwayland_ei') in ['portal', 'socket']) + liboeffis_dep = dependency('liboeffis-1.0', version: '>= 1.0.0', required: get_option('xwayland_ei') == 'portal') + + build_ei = libei_dep.found() and get_option('xwayland_ei') != 'false' + build_ei_portal = liboeffis_dep.found() and get_option('xwayland_ei') in ['portal', 'auto'] +else + build_ei = false + build_ei_portal = false +endif + +# Lots of sha1 options, because Linux is about choice :) + +# The idea behind the ordering here is that we should first prefer system +# builtin providers, and then smaller implementations of over larger ones. +test_sha1 = [ + 'libc', # libmd API is in libc on some BSDs + 'CommonCrypto', # darwin API + 'CryptoAPI', # windows API + 'libmd', # other BSDs & Solaris + 'libsha1', # "a tiny library providing a SHA1 implementation, created for facilitating X server compilation on embedded devices where larger libraries containing SHA1 implementations are not needed" + 'libnettle', + 'libgcrypt', # in debian base system + 'libcrypto', +] + +if get_option('sha1') != 'auto' + test_sha1 = [get_option('sha1')] +endif + +sha1_found = false +foreach t : test_sha1 + if t == 'libc' + if cc.has_function('SHA1Init') + sha1_found = true + sha1_dep = dependency('', required: false) + endif + elif t == 'CommonCrypto' + if cc.has_function('CC_SHA1_Init') + sha1_found = true + sha1_dep = dependency('', required: false) + endif + elif t == 'CryptoAPI' + if cc.has_header('wincrypt.h') + sha1_found = true + sha1_dep = dependency('', required: false) + endif + elif t == 'libmd' + md_dep = cc.find_library('md', required: false) + if md_dep.found() + sha1_found = true + sha1_dep = md_dep + endif + elif t == 'libsha1' + libsha1_dep = dependency('libsha1', required: false) + if libsha1_dep.found() + sha1_found = true + sha1_dep = libsha1_dep + endif + elif t == 'libnettle' + nettle_dep = dependency('nettle', required: false) + if nettle_dep.found() + sha1_found = true + sha1_dep = nettle_dep + endif + elif t == 'libgcrypt' + gcrypt_dep = dependency('libgcrypt', required: false) + if gcrypt_dep.found() + sha1_found = true + sha1_dep = gcrypt_dep + endif + elif t == 'libcrypto' + # we don't need all of OpenSSL, just libcrypto + libcrypto_dep = cc.find_library('crypto', required: false) + openssl_dep = dependency('openssl', required: false) + if libcrypto_dep.found() or openssl_dep.found() + sha1_found = true + if libcrypto_dep.found() + sha1_dep = libcrypto_dep + else + sha1_dep = openssl_dep + endif + endif + endif + + if sha1_found + sha1 = t + break + endif +endforeach + +if sha1_found + message('Using @0@ SHA1 functions'.format(sha1)) +else + if get_option('sha1') != 'auto' + error('@0@ SHA1 requested, but not found'.format(get_option('sha1'))) + else + error('No suitable SHA1 implementation found') + endif +endif + +xdmcp_dep = dependency('', required : false) +if get_option('xdmcp') + xdmcp_dep = dependency('xdmcp') +endif + +has_xdm_auth = get_option('xdm-auth-1') + +if not xdmcp_dep.found() + has_xdm_auth = false +endif + +build_glx = get_option('glx') +if build_glx + build_hashtable = true +endif + +libdrm_dep = dependency('libdrm', version: libdrm_req, required: false) + +if get_option('dri3') == 'auto' + build_dri3 = dri3proto_dep.found() and xshmfence_dep.found() and libdrm_dep.found() +else + build_dri3 = get_option('dri3') == 'true' + if build_dri3 + if not xshmfence_dep.found() + error('DRI3 requested, but xshmfence not found') + endif + endif +endif + +libdrm_required = build_dri3 +if not libdrm_dep.found() and libdrm_required + error('DRI requested, but LIBDRM not found') +endif + +build_dpms = get_option('dpms') + +build_xf86bigfont = get_option('xf86bigfont') +build_screensaver = get_option('screensaver') +build_res = get_option('xres') +if build_res + build_hashtable = true +endif + +build_xace = get_option('xace') +build_xinerama = get_option('xinerama') + +build_xsecurity = get_option('xcsecurity') +if build_xsecurity + if not build_xace + error('cannot build Security extension without X-ACE') + endif +endif + +build_xv = get_option('xv') + +build_mitshm = false +if get_option('mitshm') == 'auto' + build_mitshm = cc.has_header('sys/shm.h') +elif get_option('mitshm') == 'true' + build_mitshm = true +endif + +m_dep = cc.find_library('m', required : false) +dl_dep = cc.find_library('dl', required : false) + +common_dep = [ + xproto_dep, + randrproto_dep, + renderproto_dep, + xextproto_dep, + inputproto_dep, + kbproto_dep, + fontsproto_dep, + fixesproto_dep, + damageproto_dep, + xcmiscproto_dep, + bigreqsproto_dep, + presentproto_dep, + xtrans_dep, + libsystemd_daemon_dep, + + videoproto_dep, + compositeproto_dep, + recordproto_dep, + scrnsaverproto_dep, + resourceproto_dep, + dri3proto_dep, + xineramaproto_dep, + xf86bigfontproto_dep, + xf86vidmodeproto_dep, + + pixman_dep, + libbsd_dep, + xkbfile_dep, + xfont2_dep, + xdmcp_dep, +] + +inc = include_directories( + 'Xext', + 'Xi', + 'composite', + 'damageext', + 'fb', + 'glamor', + 'mi', + 'miext/damage', + 'miext/sync', + 'dbe', + 'dri3', + 'include', + 'present', + 'randr', + 'render', + 'xfixes', +) + +build_xselinux = false +if get_option('xselinux') != 'false' + dep_selinux = dependency('libselinux', version: libselinux_req, + required: get_option('xselinux') == 'true') + dep_audit = dependency('audit', required: get_option('xselinux') == 'true') + if get_option('xselinux') == 'true' + build_xselinux = true + else + build_xselinux = dep_selinux.found() and dep_audit.found() + endif + + if build_xselinux + common_dep += dep_selinux + common_dep += dep_audit + endif +endif + +socket_dep = [] +if host_machine.system() == 'windows' + socket_dep = meson.get_compiler('c').find_library('ws2_32') + common_dep += socket_dep +endif + +if get_option('libunwind') + common_dep += dependency('libunwind', required: true) +endif + +glx_inc = include_directories('glx') + +top_dir_inc = include_directories('.') + +serverconfigdir = get_option('serverconfigdir') +if serverconfigdir == '' + serverconfigdir = join_paths(get_option('prefix'), get_option('libdir'), 'xorg') +endif + +manpage_config = configuration_data() +manpage_config.set('vendorversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version())) +manpage_config.set('xorgversion', '"xorg-server @0@" "X Version 11"'.format(meson.project_version())) +manpage_config.set('xservername', 'Xorg') +manpage_config.set('xconfigfile', 'xorg.conf') +manpage_config.set('projectroot', get_option('prefix')) +manpage_config.set('apploaddir', '$(appdefaultdir)') +manpage_config.set('appmansuffix', '1') +manpage_config.set('drivermansuffix', '4') +manpage_config.set('adminmansuffix', '8') +manpage_config.set('libmansuffix', '3') +manpage_config.set('miscmansuffix', '7') +manpage_config.set('filemansuffix', '5') +manpage_config.set('datadir', join_paths(get_option('prefix'), get_option('datadir'))) +manpage_config.set('mandir', join_paths(get_option('prefix'), get_option('mandir'))) +manpage_config.set('sysconfdir', join_paths(get_option('prefix'), get_option('sysconfdir'))) +manpage_config.set('xconfigdir', 'xorg.conf.d') +manpage_config.set('xkbdir', xkb_dir) +manpage_config.set('XKB_DFLT_RULES', get_option('xkb_default_rules')) +manpage_config.set('XKB_DFLT_MODEL', get_option('xkb_default_model')) +manpage_config.set('XKB_DFLT_LAYOUT', get_option('xkb_default_layout')) +manpage_config.set('XKB_DFLT_VARIANT', get_option('xkb_default_variant')) +manpage_config.set('XKB_DFLT_OPTIONS', get_option('xkb_default_options')) +manpage_config.set('bundle_id_prefix', '...') +manpage_config.set('default_font_path', default_font_path) + +require_docs = get_option('docs') == 'true' +require_devel_docs = get_option('devel-docs') == 'true' +require_docs_pdf = (require_docs or require_devel_docs) and get_option('docs-pdf') == 'true' + +sgml_doctools_dep = dependency('xorg-sgml-doctools', + required: require_docs or require_devel_docs) +xmlto = find_program('xmlto', required: require_docs or require_devel_docs) +xsltproc = find_program('xsltproc', required: require_docs or require_devel_docs) +fop = find_program('fop', required: require_docs_pdf) + +build_docs = (get_option('docs') != 'false' and + sgml_doctools_dep.found() and + xmlto.found()) + +build_docs_devel = (get_option('devel-docs') != 'false' and + sgml_doctools_dep.found() and + xmlto.found()) + +build_docs_pdf = (get_option('docs-pdf') != 'false' and + (build_docs or build_docs_devel) and + fop.found()) + +if build_docs or build_docs_devel + doc_sgml_path = sgml_doctools_dep.get_pkgconfig_variable('sgmlrootdir') + doc_stylesheet_srcdir = join_paths(doc_sgml_path, 'X11') + + # once we bump meson dependency to 0.56.0 we can use + # meson.project_build_root() instead of meson.build_root() + + # Meson does not and will not support functions so we are copy-pasting + # documentation build code around which is unfortunate + # See https://mesonbuild.com/FAQ.html#why-doesnt-meson-have-user-defined-functionsmacros + + docs_xmlto_search_flags = [ + '--searchpath', doc_stylesheet_srcdir, + '--searchpath', meson.build_root(), + ] + + docs_xslt_search_flags = [ + '--path', doc_stylesheet_srcdir, + '--path', meson.build_root(), + ] +endif + +# Include must come first, as it sets up dix-config.h +subdir('include') + +# X server core +subdir('dix') +subdir('dri3') +subdir('glx') +subdir('fb') +subdir('mi') +subdir('os') +# X extensions +subdir('composite') +subdir('damageext') +subdir('dbe') +subdir('miext/damage') +subdir('miext/sync') +subdir('present') +subdir('randr') +subdir('record') +subdir('render') +subdir('xfixes') +subdir('xkb') +subdir('Xext') +subdir('Xi') +# other +if build_glamor + subdir('glamor') +endif +subdir('doc') + +# Common static libraries of all X servers +libxserver = [ + libxserver_mi, + libxserver_dix, + + libxserver_composite, + libxserver_damageext, + libxserver_dbe, + libxserver_randr, + libxserver_miext_damage, + libxserver_render, + libxserver_present, + libxserver_xext, + libxserver_miext_sync, + libxserver_xfixes, + libxserver_xi, + libxserver_xkb, + libxserver_record, + + libxserver_os, +] + +libxserver += libxserver_dri3 + +subdir('hw') + +if host_machine.system() != 'windows' + subdir('test') +endif + +install_man(configure_file( + input: 'man/Xserver.man', + output: 'Xserver.1', + configuration: manpage_config, +))