summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2023-06-20 15:46:23 -0700
committerDylan Baker <dylan@pnwbakers.com>2023-07-13 15:26:17 -0700
commit68e74d37b99f56bbd1a5f2fb8cb4ad6116f27bd3 (patch)
treeaab43287eff02394981c905bfef7b30f7d8fdb60
parentdf1bf4fe528a5a9eef420f78efb225e4696ac467 (diff)
add Meson build system
This is, I think, equal to the autotools build-system in every practical way. The man pages have hardcoded numbers. I think this is okay, as all modern operating systems seem to use the same man page numbering now. I've also chosen to not generate a config.h file with Meson. This makes using libXau as a subproject safer, since we don't have to worry about conflicting config.h files, plus there are only a couple of declarations that are actually used. This also saves some configure time in writing out an additional file.
-rw-r--r--.gitlab-ci.yml74
-rw-r--r--Makefile.am2
-rw-r--r--man/Makefile.am2
-rw-r--r--man/meson.build22
-rw-r--r--meson.build96
-rw-r--r--meson_options.txt9
6 files changed, 199 insertions, 6 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c85d2e4..074c23d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,5 @@
# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
-#
+
# This CI uses the freedesktop.org ci-templates.
# Please see the ci-templates documentation for details:
# https://freedesktop.pages.freedesktop.org/ci-templates/
@@ -30,8 +30,8 @@ variables:
# The tag should be updated each time the list of packages is updated.
# Changing a tag forces the associated image to be rebuilt.
# Note: the tag has no meaning, we use a date format purely for readability
- FDO_DISTRIBUTION_TAG: '2022-07-09.1'
- FDO_DISTRIBUTION_PACKAGES: 'git gcc pkgconf autoconf automake libtool make xorg-util-macros xorgproto'
+ FDO_DISTRIBUTION_TAG: '2023-06-21'
+ FDO_DISTRIBUTION_PACKAGES: 'git gcc pkgconf autoconf automake libtool make xorg-util-macros xorgproto meson ninja jq'
#
@@ -81,9 +81,9 @@ container-prep:
#
-# The default build, runs on the image built above.
+# The autotools build, runs on the image built above.
#
-build:
+autotools:
stage: build
extends:
- .fdo.distribution-image@arch
@@ -95,4 +95,68 @@ build:
- make
- make check
- make distcheck
+ - mv libXau*.tar.gz ..
- popd > /dev/null
+ artifacts:
+ paths:
+ - libXau*.tar.gz
+
+#
+# The meson build, runs on the image built above.
+#
+meson:
+ stage: build
+ extends:
+ - .fdo.distribution-image@arch
+ script:
+ - meson setup _builddir --prefix="$PWD/_install"
+ - meson configure _builddir
+ - ninja -C _builddir test
+ - ninja -C _builddir install
+
+meson from tarball:
+ extends:
+ - .fdo.distribution-image@arch
+ stage: test
+ script:
+ - mkdir -p _tarball_build
+ - tar xf libXau-*.tar.gz -C _tarball_build
+ - cd _tarball_build/libXau-*
+ - meson setup _builddir
+ - meson configure _builddir
+ - ninja -C _builddir test
+ needs:
+ - autotools
+
+compare meson and autotools:
+ extends:
+ - .fdo.distribution-image@arch
+ stage: test
+ script:
+ - mkdir -p $PWD/_meson_inst
+ - mkdir -p $PWD/_autotools_inst
+ # the prefix ends up in the pkgconfig files, so we use a symlink
+ # to use the same --prefix for meson and autotools
+ - ln -sf $PWD/_meson_inst $PWD/_inst
+ - meson setup builddir
+ - meson configure builddir --prefix=$PWD/_inst
+ - ninja -C builddir install
+ - ls -R _inst > _meson_inst.ls
+ - rm $PWD/_inst
+ - ln -sf $PWD/_autotools_inst $PWD/_inst
+ - autoreconf -ivf
+ - ./configure --prefix=$PWD/_inst --enable-shared --disable-static
+ - make && make install
+ - rm -f $PWD/_inst/lib/lib*.la
+ - ls -R _inst > _autotools_inst.ls
+ - diff -u $PWD/_meson_inst.ls $PWD/_autotools_inst.ls
+
+check versions are in sync:
+ extends:
+ - .fdo.distribution-image@arch
+ stage: test
+ script:
+ - autoreconf -ivf
+ - ./configure --version | head -n 1 | sed -e 's/libXau configure //' > autotools.version
+ - meson introspect meson.build --projectinfo | jq -r '.version' > meson.version
+ - diff -u autotools.version meson.version || (echo "ERROR - autotools and meson versions not in sync" && false)
diff --git a/Makefile.am b/Makefile.am
index ced8684..cb3adbe 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -63,3 +63,5 @@ ChangeLog:
dist-hook: ChangeLog INSTALL
ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST = meson.build meson_options.txt \ No newline at end of file
diff --git a/man/Makefile.am b/man/Makefile.am
index 24c7aa3..0938fd2 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -36,7 +36,7 @@ libman_PRE = \
libman_DATA = $(libman_PRE:man=$(LIB_MAN_SUFFIX))
-EXTRA_DIST = $(libman_PRE)
+EXTRA_DIST = $(libman_PRE) meson.build
CLEANFILES = $(libman_DATA)
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 0000000..003e9be
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: MIT
+# Copyright © 2023 Intel Corporation
+
+prog_sed = find_program('sed')
+
+foreach man : ['Xau', 'XauDisposeAuth', 'XauFileName', 'XauGetAuthByAddr',
+ 'XauGetBestAuthByAddr', 'XauLockAuth', 'XauReadAuth', 'XauUnlockAuth',
+ 'XauWriteAuth']
+ custom_target(
+ f'@man@.man',
+ input : f'@man@.man',
+ output : f'@man@.3',
+ command : [
+ prog_sed, '@INPUT@',
+ '-e', 's/__xorgversion__/"libXau @0@" "X Version 11"/'.format(meson.project_version()),
+ '-e', 's/__libmansuffix__/3/',
+ ],
+ capture : true,
+ install : true,
+ install_dir : get_option('prefix') / get_option('mandir') / 'man3',
+ )
+endforeach \ No newline at end of file
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..6ca975a
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,96 @@
+# SPDX-License-Identifier: MIT
+# Copyright © 2023 Intel Corporation
+
+project(
+ 'libXau',
+ 'c',
+ version : '1.0.11',
+ license : 'MIT',
+ meson_version : '>= 0.60.0',
+)
+
+add_project_arguments(
+ '-D_GNU_SOURCE',
+ '-D__EXTENSIONS__',
+ language : 'c'
+)
+
+cc = meson.get_compiler('c')
+
+lib_args = []
+
+foreach f : ['explicit_bzero', 'pathconf']
+ if cc.has_function(f)
+ lib_args += '-DHAVE_@0@'.format(f.to_upper())
+ endif
+endforeach
+
+if cc.has_header('unistd.h')
+ lib_args += '-DHAVE_UNISTD_H'
+endif
+
+dep_xproto = dependency('xproto')
+
+if get_option('xthreads')
+ lib_args += '-DXTHREADS'
+ # This define is not in libXau specific code, but is part of the xproto header
+ # This may be only required by HP-UX.
+ if cc.has_function('gethostbyname_r') or \
+ cc.has_function('gethostbyname_r', dependencies : cc.find_library('nls'))
+ lib_args += '-DXUSE_MTSAFE_API=1'
+ endif
+ if host_machine.system() == 'sunos'
+ lib_args += ['-D_REENETRANT', '-D_POSIX_PTHREAD_SEMANTICS']
+ endif
+endif
+
+lib = library(
+ 'Xau',
+ [
+ 'AuDispose.c',
+ 'AuFileName.c',
+ 'AuGetAddr.c',
+ 'AuGetBest.c',
+ 'AuLock.c',
+ 'AuRead.c',
+ 'AuUnlock.c',
+ 'AuWrite.c',
+ ],
+ c_args : lib_args,
+ include_directories : 'include',
+ dependencies : dep_xproto,
+ version : '6.0.0',
+ install : true,
+)
+
+test(
+ 'autest',
+ executable(
+ 'autest',
+ 'Autest.c',
+ link_with : lib,
+ include_directories : 'include',
+ )
+)
+
+libxau = declare_dependency(
+ link_with : lib,
+ include_directories : 'include',
+)
+
+meson.override_dependency('xau', libxau)
+
+install_headers(
+ 'include/X11/Xauth.h',
+ subdir : 'X11',
+)
+
+pkg = import('pkgconfig')
+pkg.generate(
+ lib,
+ description : 'X authorization file management library',
+ filebase : 'xau',
+ requires : 'xproto',
+)
+
+subdir('man') \ No newline at end of file
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..42f9cc2
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: MIT
+# Copyright © 2023 Intel Corporation
+
+option(
+ 'xthreads',
+ type : 'boolean',
+ value : true,
+ description : 'Whether libXau should be compiled with thread support.'
+) \ No newline at end of file