From 68e74d37b99f56bbd1a5f2fb8cb4ad6116f27bd3 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 20 Jun 2023 15:46:23 -0700 Subject: 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. --- .gitlab-ci.yml | 74 +++++++++++++++++++++++++++++++++++++++--- Makefile.am | 2 ++ man/Makefile.am | 2 +- man/meson.build | 22 +++++++++++++ meson.build | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ meson_options.txt | 9 ++++++ 6 files changed, 199 insertions(+), 6 deletions(-) create mode 100644 man/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt 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 -- cgit v1.2.3