From 0ecc7887971972d8c3952d8c998fac7d9b4592d2 Mon Sep 17 00:00:00 2001 From: Alexey Rochev Date: Thu, 6 Jan 2022 02:08:32 +0300 Subject: [PATCH 1/3] Remove meson.build generation and separate project and library versions in their own files Project and library version are now stored in version.txt and libtool_version_info.txt files respectively. Both autotools and meson get their versioning information from this files. Meson additionally automatically transforms library version from libtool's own format. Also raise meson version requirement from 0.47 to 0.57 which is required by these changes. --- configure.ac | 6 +- libtool_version_info.txt | 1 + meson.build | 7 +- meson.build.in | 153 --------------------------------------- src/meson.build | 9 ++- version.txt | 1 + 6 files changed, 14 insertions(+), 163 deletions(-) create mode 100644 libtool_version_info.txt delete mode 100644 meson.build.in create mode 100644 version.txt diff --git a/configure.ac b/configure.ac index 769e9a6..a597188 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,4 @@ - -AC_INIT([libpsl], [0.21.1], [tim.ruehsen@gmx.de], [libpsl], [https://github.com/rockdaboot/libpsl]) +AC_INIT([libpsl], m4_normalize(m4_include([version.txt])), [tim.ruehsen@gmx.de], [libpsl], [https://github.com/rockdaboot/libpsl]) AC_PREREQ([2.59]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.10 no-define foreign dist-lzip]) @@ -115,7 +114,7 @@ AC_ARG_ENABLE([asan], # 4. If any interfaces have been added, removed, or changed since the last update, increment current, and set revision to 0. # 5. If any interfaces have been added since the last public release, then increment age. # 6. If any existing interfaces have been removed or changed since the last public release, then set age to 0. -AC_SUBST([LIBPSL_SO_VERSION], [8:3:3]) +AC_SUBST([LIBPSL_SO_VERSION], m4_normalize(m4_include([libtool_version_info.txt]))) AC_SUBST([LIBPSL_VERSION], $VERSION) # Check for enable/disable runtime PSL data @@ -387,7 +386,6 @@ AC_CONFIG_FILES([Makefile tests/Makefile docs/libpsl/Makefile docs/libpsl/version.xml libpsl.pc:libpsl.pc.in - meson.build msvc/Makefile msvc/config.h.win32 msvc/config-msvc.mak]) diff --git a/libtool_version_info.txt b/libtool_version_info.txt new file mode 100644 index 0000000..fc0a817 --- /dev/null +++ b/libtool_version_info.txt @@ -0,0 +1 @@ +8:3:3 diff --git a/meson.build b/meson.build index 7cc2bb5..ccb3d48 100644 --- a/meson.build +++ b/meson.build @@ -1,9 +1,6 @@ project('libpsl', 'c', - version : '0.21.1', - meson_version : '>=0.47.0') - -# Derived from LIBPSL_SO_VERSION in configure.ac -lt_version = '5.3.2' + version : files('version.txt'), + meson_version : '>=0.57.0') cc = meson.get_compiler('c') diff --git a/meson.build.in b/meson.build.in deleted file mode 100644 index 41166a4..0000000 --- a/meson.build.in +++ /dev/null @@ -1,153 +0,0 @@ -project('libpsl', 'c', - version : '@LIBPSL_VERSION_MAJOR@.@LIBPSL_VERSION_MINOR@.@LIBPSL_VERSION_PATCH@', - meson_version : '>=0.47.0') - -# Derived from LIBPSL_SO_VERSION in configure.ac -lt_version = '5.3.2' - -cc = meson.get_compiler('c') - -enable_runtime = get_option('runtime') -enable_builtin = get_option('builtin') - -# We need to know the build type to determine what .lib files we need on Visual Studio -# for dependencies that don't normally come with pkg-config files for Visual Studio builds -buildtype = get_option('buildtype') - -notfound = dependency('', required : false) -libidn2_dep = notfound -libicu_dep = notfound -libidn_dep = notfound -libunistring = notfound -networking_deps = notfound - -# FIXME: Cleanup this when Meson gets 'feature-combo': -# https://github.com/mesonbuild/meson/issues/4566 -# Dependency fallbacks would help too: -# https://github.com/mesonbuild/meson/pull/4595 -if ['libidn2', 'auto'].contains(enable_runtime) or ['libidn2', 'auto'].contains(enable_builtin) - libidn2_dep = dependency('libidn2', required : false) - if not libidn2_dep.found() and cc.has_header('idn2.h') - libidn2_dep = cc.find_library('idn2', required : false) - endif - if libidn2_dep.found() - if enable_runtime == 'auto' - enable_runtime = 'libidn2' - endif - if enable_builtin == 'auto' - enable_builtin = 'libidn2' - endif - elif [enable_runtime, enable_builtin].contains('libidn2') - error('You requested libidn2 but it is not installed.') - endif -endif - -if ['libicu', 'auto'].contains(enable_runtime) or ['libicu', 'auto'].contains(enable_builtin) - libicu_dep = dependency('icu-uc', required : false) - if not libicu_dep.found() and cc.has_header('unicode/ustring.h') - # MSVC: the debug configuration of ICU generated the libraries with d suffix - # we must handle this and search for the right library depending on the - # build type. Note debugoptimized is just a release build with .pdb files enabled - if cc.get_id() == 'msvc' and buildtype == 'debug' - libicu_dep = cc.find_library('icuucd', required : false) - else - libicu_dep = cc.find_library('icuuc', required : false) - endif - endif - if libicu_dep.found() - if enable_runtime == 'auto' - enable_runtime = 'libicu' - endif - if enable_builtin == 'auto' - enable_builtin = 'libicu' - endif - elif [enable_runtime, enable_builtin].contains('libicu') - error('You requested libicu but it is not installed.') - endif -endif - -if ['libidn', 'auto'].contains(enable_runtime) or ['libidn', 'auto'].contains(enable_builtin) - libidn_dep = dependency('libidn', required : false) - if not libidn_dep.found() and cc.has_header('idna.h') - libidn_dep = cc.find_library('idn', required : false) - endif - if libidn_dep.found() - if enable_runtime == 'auto' - enable_runtime = 'libidn' - endif - if enable_builtin == 'auto' - enable_builtin = 'libidn' - endif - elif [enable_runtime, enable_builtin].contains('libidn') - error('You requested libidn but it is not installed.') - endif -endif - -if libidn2_dep.found() or libidn_dep.found() - # Check for libunistring, we need it for psl_str_to_utf8lower() - libunistring = cc.find_library('unistring') -endif - -if host_machine.system() == 'windows' - networking_deps = cc.find_library('ws2_32') -endif - -if enable_runtime == 'auto' - enable_runtime = 'no' -endif -if enable_builtin == 'auto' - enable_builtin = 'no' -endif - -config = configuration_data() -config.set_quoted('PACKAGE_VERSION', meson.project_version()) -config.set('WITH_LIBIDN2', enable_runtime == 'libidn2') -config.set('WITH_LIBICU', enable_runtime == 'libicu') -config.set('WITH_LIBIDN', enable_runtime == 'libidn') -config.set('BUILTIN_GENERATOR_LIBIDN2', enable_builtin == 'libidn2') -config.set('BUILTIN_GENERATOR_LIBICU', enable_builtin == 'libicu') -config.set('BUILTIN_GENERATOR_LIBIDN', enable_builtin == 'libidn') -config.set('HAVE_UNISTD_H', cc.check_header('unistd.h')) -config.set('HAVE_STDINT_H', cc.check_header('stdint.h')) -config.set('HAVE_ALLOCA_H', cc.check_header('alloca.h')) -config.set('HAVE_DIRENT_H', cc.check_header('dirent.h')) -config.set('HAVE_ALLOCA', cc.has_function('alloca')) -config.set('HAVE_STRNDUP', cc.has_function('strndup')) -config.set('HAVE_CLOCK_GETTIME', cc.has_function('clock_gettime')) -config.set('HAVE_FMEMOPEN', cc.has_function('fmemopen')) -config.set('HAVE_NL_LANGINFO', cc.has_function('nl_langinfo')) -configure_file(output : 'config.h', configuration : config) - -configinc = include_directories('.') -includedir = include_directories('include') - -psl_distfile = get_option('psl_distfile') -psl_file = get_option('psl_file') -if psl_file == '' - psl_file = join_paths(meson.current_source_dir(), 'list', 'public_suffix_list.dat') -endif -psl_test_file = get_option('psl_testfile') -if psl_test_file == '' - psl_test_file = join_paths(meson.current_source_dir(), 'list', 'tests', 'tests.txt') -endif - -python = import('python').find_installation() -pkgconfig = import('pkgconfig') - -if cc.get_id() == 'msvc' - if not cc.has_header_symbol('stdio.h', 'snprintf') - if cc.has_header_symbol('stdio.h', '_snprintf') - add_project_arguments('-Dsnprintf=_snprintf', language: 'c') - endif - endif - if cc.has_header_symbol('malloc.h', '_alloca') - add_project_arguments('-Dalloca=_alloca', language: 'c') - endif -endif - -subdir('include') -subdir('src') -subdir('tools') -subdir('tests') -subdir('fuzz') -subdir(join_paths('docs', 'libpsl')) diff --git a/src/meson.build b/src/meson.build index 00cbb61..1d2b38f 100644 --- a/src/meson.build +++ b/src/meson.build @@ -16,11 +16,18 @@ cargs = [ '-DPSL_DISTFILE="@0@"'.format(psl_distfile), ] +fs = import('fs') +libtool_version_info = fs.read(meson.project_source_root() / 'libtool_version_info.txt').strip().split(':') +libtool_version_current = libtool_version_info[0].to_int() +libtool_version_revision = libtool_version_info[1].to_int() +libtool_version_age = libtool_version_info[2].to_int() +library_version = '@0@.@1@.@2@'.format(libtool_version_current - libtool_version_age, libtool_version_age, libtool_version_revision) + libpsl = library('psl', sources, suffixes_dafsa_h, include_directories : [configinc, includedir], c_args : cargs, dependencies : [libidn2_dep, libidn_dep, libicu_dep, libunistring, networking_deps, libiconv_dep], - version: lt_version, + version: library_version, install: true, ) diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..a67ceba --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +0.21.1 From 43fc4f0631f7dbfa4656cc40f06f780b60ffeb3c Mon Sep 17 00:00:00 2001 From: Alexey Rochev Date: Tue, 4 Jan 2022 15:49:58 +0300 Subject: [PATCH 2/3] meson: bring back libiconv dependency lookup --- meson.build | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/meson.build b/meson.build index ccb3d48..2263e31 100644 --- a/meson.build +++ b/meson.build @@ -17,6 +17,7 @@ libicu_dep = notfound libidn_dep = notfound libunistring = notfound networking_deps = notfound +libiconv_dep = notfound # FIXME: Cleanup this when Meson gets 'feature-combo': # https://github.com/mesonbuild/meson/issues/4566 @@ -83,6 +84,19 @@ endif if libidn2_dep.found() or libidn_dep.found() # Check for libunistring, we need it for psl_str_to_utf8lower() libunistring = cc.find_library('unistring') + found_iconv = false + if cc.has_function('iconv_open') + libiconv_dep = [] + found_iconv = true + endif + if not found_iconv and cc.has_header_symbol('iconv.h', 'iconv_open') + libiconv_dep = [cc.find_library('iconv')] + found_iconv = true + endif + + if not found_iconv + error('iconv implementation not found') + endif endif if host_machine.system() == 'windows' From 5a29a6444431c3449387d6efbebfd77819ebed0d Mon Sep 17 00:00:00 2001 From: Alexey Rochev Date: Tue, 4 Jan 2022 16:07:26 +0300 Subject: [PATCH 3/3] Remove libicu includes from test-registrable-domain.c It doesn't seem like they are used, and they cause build failures with meson. --- tests/test-registrable-domain.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/test-registrable-domain.c b/tests/test-registrable-domain.c index a4f755c..b4efff8 100644 --- a/tests/test-registrable-domain.c +++ b/tests/test-registrable-domain.c @@ -39,11 +39,6 @@ # include #endif -#ifdef WITH_LIBICU -# include -# include -#endif - #include static int