From aa4909766c24c17bd1d9000ca419f6dc6b32c238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Yhuel?= Date: Mon, 7 Mar 2022 14:14:41 +0100 Subject: [PATCH] Make builtin option independant from runtime one Since commit deabd4a, psl2c has been replaced by psl-make-dafsa. The builtin PSL data is always generated the same way, and the value of the builtin configure option does not matter anymore. The built-in data is now embedded by default (instead of the previous "auto"), unless explicitly disabled by --disable-builtin/-Dbuiltin=false. When not using an run-time runtime IDNA library (--disable-runtime/-Druntime=no), libpsl can now include the built-in data without any build-time dependency. --- configure.ac | 58 ++++++++++++--------------------------- contrib/check-hard | 8 +++--- contrib/mingw | 2 +- meson.build | 10 +++---- meson_options.txt | 6 ++-- msvc/build-rules-msvc.mak | 4 +-- msvc/config-msvc.mak.in | 19 +++++++------ msvc/config.h.win32.in | 10 ++----- src/psl.c | 4 +-- tests/Makefile.am | 10 +------ tests/meson.build | 2 +- 11 files changed, 49 insertions(+), 84 deletions(-) diff --git a/configure.ac b/configure.ac index 88e82ec..77ef90c 100644 --- a/configure.ac +++ b/configure.ac @@ -160,22 +160,14 @@ AC_ARG_ENABLE(runtime, # Check for enable/disable builtin PSL data AC_ARG_ENABLE(builtin, [ - --enable-builtin[[=IDNA library]] - Specify the IDNA library used for built-in data generation: - libidn2 [[default]]: IDNA2008 library (also needs libunistring) - libicu: IDNA2008 UTS#46 library - libidn: IDNA2003 library (also needs libunistring) + --enable-builtin Generate built-in PSL data --disable-builtin Do not generate built-in PSL data ], [ - if test "$enableval" = "libidn2" -o "$enableval" = "yes"; then - enable_builtin=libidn2 - AC_DEFINE([BUILTIN_GENERATOR_LIBIDN2], [1], [generate PSL data using libidn2]) - elif test "$enableval" = "libicu"; then - enable_builtin=libicu - AC_DEFINE([BUILTIN_GENERATOR_LIBICU], [1], [generate PSL data using libicu]) - elif test "$enableval" = "libidn"; then - enable_builtin=libidn - AC_DEFINE([BUILTIN_GENERATOR_LIBIDN], [1], [generate PSL data using libidn]) + if test "$enableval" = "yes"; then + enable_builtin=yes + elif test "$enableval" = "libidn" -o "$enableval" = "libidn2" -o "$enableval" = "libicu"; then + AC_MSG_WARN([--enable-builtin=$enableval is deprecated, use --enable-builtin (enabled by default)]) + enable_builtin=yes elif test "$enableval" = "no"; then enable_builtin=no else @@ -183,10 +175,14 @@ AC_ARG_ENABLE(builtin, fi ], [ # this is the default if neither --enable-builtin nor --disable-builtin were specified - enable_builtin=auto + enable_builtin=yes ]) -if test "$enable_runtime" = "libidn2" -o "$enable_builtin" = "libidn2" -o "$enable_runtime" = "auto" -o "$enable_builtin" = "auto"; then +if test "$enable_builtin" = "yes"; then + AC_DEFINE([ENABLE_BUILTIN], [1], [Generate built-in PSL data]) +fi + +if test "$enable_runtime" = "libidn2" -o "$enable_runtime" = "auto"; then # Check for libidn2 PKG_CHECK_MODULES([LIBIDN2], [libidn2], [ HAVE_LIBIDN2=yes @@ -197,7 +193,7 @@ if test "$enable_runtime" = "libidn2" -o "$enable_builtin" = "libidn2" -o "$enab ], [ AC_SEARCH_LIBS(idn2_lookup_u8, idn2, HAVE_LIBIDN2=yes, [ - if test "$enable_runtime" = "libidn2" -o "$enable_builtin" = "libidn2"; then + if test "$enable_runtime" = "libidn2"; then AC_MSG_ERROR(You requested libidn2 but it is not installed.) fi ], -lunistring) @@ -208,14 +204,10 @@ if test "$enable_runtime" = "libidn2" -o "$enable_builtin" = "libidn2" -o "$enab enable_runtime=libidn2 AC_DEFINE([WITH_LIBIDN2], [1], [generate PSL data using libidn2]) fi - if test "$enable_builtin" = "auto"; then - enable_builtin=libidn2 - AC_DEFINE([BUILTIN_GENERATOR_LIBIDN2], [1], [generate PSL data using libidn2]) - fi fi fi -if test "$enable_runtime" = "libicu" -o "$enable_builtin" = "libicu" -o "$enable_runtime" = "auto" -o "$enable_builtin" = "auto"; then +if test "$enable_runtime" = "libicu" -o "$enable_runtime" = "auto"; then # Check for libicu # using pkg-config won't work on older systems like Ubuntu 12.04 LTS Server Edition 64bit # using AC_SEARCH_LIBS also don't work since functions have the library version appended @@ -235,7 +227,7 @@ if test "$enable_runtime" = "libicu" -o "$enable_builtin" = "libicu" -o "$enable [[u_strToUTF8(NULL, 0, NULL, NULL, 0, NULL);]])], [HAVE_LIBICU=yes; LIBICU_LIBS="-licuuc"; AC_MSG_RESULT([yes])], [ AC_MSG_RESULT([no]); - if test "$enable_runtime" = "libicu" -o "$enable_builtin" = "libicu"; then + if test "$enable_runtime" = "libicu"; then AC_MSG_ERROR(You requested libicu but it is not installed.) fi LIBS=$OLDLIBS @@ -247,14 +239,10 @@ if test "$enable_runtime" = "libicu" -o "$enable_builtin" = "libicu" -o "$enable enable_runtime=libicu AC_DEFINE([WITH_LIBICU], [1], [generate PSL data using libicu]) fi - if test "$enable_builtin" = "auto"; then - enable_builtin=libicu - AC_DEFINE([BUILTIN_GENERATOR_LIBICU], [1], [generate PSL data using libicu]) - fi fi fi -if test "$enable_runtime" = "libidn" -o "$enable_builtin" = "libidn" -o "$enable_runtime" = "auto" -o "$enable_builtin" = "auto"; then +if test "$enable_runtime" = "libidn" -o "$enable_runtime" = "auto"; then # Check for libidn PKG_CHECK_MODULES([LIBIDN], [libidn], [ HAVE_LIBIDN=yes @@ -265,7 +253,7 @@ if test "$enable_runtime" = "libidn" -o "$enable_builtin" = "libidn" -o "$enable ], [ AC_SEARCH_LIBS(idna_to_ascii_8z, idn, HAVE_LIBIDN=yes, [ - if test "$enable_runtime" = "libidn" -o "$enable_builtin" = "libidn"; then + if test "$enable_runtime" = "libidn"; then AC_MSG_ERROR(You requested libidn but it is not installed.) fi ]) @@ -276,10 +264,6 @@ if test "$enable_runtime" = "libidn" -o "$enable_builtin" = "libidn" -o "$enable enable_runtime=libidn AC_DEFINE([WITH_LIBIDN], [1], [generate PSL data using libidn]) fi - if test "$enable_builtin" = "auto"; then - enable_builtin=libidn - AC_DEFINE([BUILTIN_GENERATOR_LIBIDN], [1], [generate PSL data using libidn]) - fi fi fi @@ -287,9 +271,6 @@ fi if test "$enable_runtime" = "auto"; then enable_runtime=no fi -if test "$enable_builtin" = "auto"; then - enable_builtin=no -fi if test "x$HAVE_LIBIDN2" = "xyes" -o "x$HAVE_LIBIDN" = "xyes"; then # Check for libunistring, we need it for psl_str_to_utf8lower() @@ -303,10 +284,7 @@ AM_ICONV AM_CONDITIONAL([WITH_LIBICU], test "x$enable_runtime" = "xlibicu") AM_CONDITIONAL([WITH_LIBIDN2], test "x$enable_runtime" = "xlibidn2") AM_CONDITIONAL([WITH_LIBIDN], test "x$enable_runtime" = "xlibidn") -AM_CONDITIONAL([BUILTIN_GENERATOR_LIBICU], test "x$enable_builtin" = "xlibicu") -AM_CONDITIONAL([BUILTIN_GENERATOR_LIBIDN2], test "x$enable_builtin" = "xlibidn2") -AM_CONDITIONAL([BUILTIN_GENERATOR_LIBIDN], test "x$enable_builtin" = "xlibidn") -AM_CONDITIONAL([WITH_BUILTIN], test $enable_builtin = yes) +AM_CONDITIONAL([ENABLE_BUILTIN], test "x$enable_builtin" = "xyes") # Solaris has socket in libsocket and inet_ntop in libnsl, but also needs libsocket, so the order is important here AC_CHECK_LIB([socket], [socket], [NEEDS_SOCKET=yes], []) diff --git a/contrib/check-hard b/contrib/check-hard index 6ac3b46..c3b2029 100755 --- a/contrib/check-hard +++ b/contrib/check-hard @@ -37,10 +37,10 @@ for CC in gcc clang; do rm -f $CACHEFILE for options in \ - "--enable-runtime=libicu --enable-builtin=libicu" \ - "--enable-runtime=libidn2 --enable-builtin=libidn2" \ - "--enable-runtime=libidn --enable-builtin=libidn" \ - "--disable-runtime --enable-builtin=libicu"; do + "--enable-runtime=libicu" \ + "--enable-runtime=libidn2" \ + "--enable-runtime=libidn" \ + "--disable-runtime"; do export DISTCHECK_CONFIGURE_FLAGS="-q -C --cache-file=$CACHEFILE $options" if test "$CC" = "clang"; then echo diff --git a/contrib/mingw b/contrib/mingw index 73a3770..d7e6474 100755 --- a/contrib/mingw +++ b/contrib/mingw @@ -51,7 +51,7 @@ cd .. # build libpsl export WINEPATH="$INSTALLDIR/bin;$INSTALLDIR/lib;/usr/$PREFIX/bin;/usr/$PREFIX/lib;$PWD/libpsl/.libs;$GCCLIB" ./autogen.sh -./configure --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared --disable-gtk-doc --enable-runtime=libidn2 --enable-builtin=libidn2 --prefix=$INSTALLDIR +./configure --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared --disable-gtk-doc --enable-runtime=libidn2 --prefix=$INSTALLDIR make clean make -j$(nproc) make check -j$(nproc) LOG_COMPILER=wine diff --git a/meson.build b/meson.build index 0f7c205..d3184ac 100644 --- a/meson.build +++ b/meson.build @@ -25,7 +25,7 @@ link_language = 'c' # 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) +if ['libidn2', 'auto'].contains(enable_runtime) 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) @@ -42,7 +42,7 @@ if ['libidn2', 'auto'].contains(enable_runtime) or ['libidn2', 'auto'].contains( endif endif -if ['libicu', 'auto'].contains(enable_runtime) or ['libicu', 'auto'].contains(enable_builtin) +if ['libicu', 'auto'].contains(enable_runtime) 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 @@ -71,7 +71,7 @@ if ['libicu', 'auto'].contains(enable_runtime) or ['libicu', 'auto'].contains(en endif endif -if ['libidn', 'auto'].contains(enable_runtime) or ['libidn', 'auto'].contains(enable_builtin) +if ['libidn', 'auto'].contains(enable_runtime) 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) @@ -122,9 +122,7 @@ 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('ENABLE_BUILTIN', enable_builtin) 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')) diff --git a/meson_options.txt b/meson_options.txt index fca0c17..e9d6a23 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,9 +2,9 @@ option('runtime', type : 'combo', choices : ['libidn2', 'libicu', 'libidn', 'no', 'auto'], value : 'auto', description : 'Specify the IDNA library used for libpsl run-time conversions') -option('builtin', type : 'combo', - choices : ['libidn2', 'libicu', 'libidn', 'no', 'auto'], value : 'auto', - description : 'Specify the IDNA library used for built-in data generation') +option('builtin', type : 'boolean', + value : true, + description : 'Specify whether libpsl will include built-in PSL data') option('psl_distfile', type : 'string', value : '', description : 'path to distribution-wide PSL file') diff --git a/msvc/build-rules-msvc.mak b/msvc/build-rules-msvc.mak index 3e9f9d0..38660d6 100644 --- a/msvc/build-rules-msvc.mak +++ b/msvc/build-rules-msvc.mak @@ -91,8 +91,8 @@ build-info: @echo Configuration/Platform: $(CFG)/$(PLAT) @echo Library Build Type: $(PSL_LIBTYPE) @echo Enabled Runtime: $(ENABLED_RUNTIME) - @echo Enabled Builtin: $(ENABLED_BUILTIN) - @if not "$(ENABLED_BUILTIN)" == "none" echo PSL File: $(PSL_FILE) + @echo Enabled Builtin: $(ENABLE_BUILTIN) + @if not "$(ENABLE_BUILTIN)" == "no" echo PSL File: $(PSL_FILE) clean: @if exist vs$(VSVER)\$(CFG)\$(PLAT)\psl.dafsa del vs$(VSVER)\$(CFG)\$(PLAT)\psl.dafsa diff --git a/msvc/config-msvc.mak.in b/msvc/config-msvc.mak.in index afabb61..155c3f4 100644 --- a/msvc/config-msvc.mak.in +++ b/msvc/config-msvc.mak.in @@ -13,8 +13,8 @@ PSL_TESTFILE=..\list\tests\tests.txt PSL_FILE_INPUT = $(PSL_FILE:\=/) PSL_TESTFILE_INPUT = $(PSL_TESTFILE:\=/) -# We only support using the ICU runtime and/or builtin, or no runtime -# and/or builtin for Visual Studio builds +# We only support using the ICU runtime, or no runtime +# for Visual Studio builds !if "$(CFG)" == "Release" || "$(CFG)" == "release" ICUUC_LIB = icuuc.lib !else @@ -79,9 +79,9 @@ PSL_DLL_SUFFIX = PSL_DLL = vs$(VSVER)\$(CFG)\$(PLAT)\$(PSL_DLL_PREFIX)psl$(PSL_DLL_SUFFIX).dll -# ENABLE_RUNTIME_ICU and ENABLE_BUILTIN_ICU are currently dummy arguments to NMake +# ENABLED_RUNTIME and ENABLE_BUILTIN are currently dummy arguments to NMake ENABLED_RUNTIME = -ENABLED_BUILTIN = +ENABLE_BUILTIN = !ifndef DISABLE_RUNTIME BASE_CFLAGS = $(BASE_CFLAGS) /DWITH_LIBICU=1 @@ -92,11 +92,11 @@ ENABLED_RUNTIME = none !endif !ifndef DISABLE_BUILTIN -BASE_CFLAGS = $(BASE_CFLAGS) /DBUILTIN_GENERATOR_LIBICU=1 -ENABLED_BUILTIN = libicu +BASE_CFLAGS = $(BASE_CFLAGS) /DENABLE_BUILTIN=1 +ENABLE_BUILTIN = yes !else PSL_MAKE_OPTIONS = $(PSL_MAKE_OPTIONS) DISABLE_BUILTIN^=1 -ENABLED_BUILTIN = none +ENABLE_BUILTIN = no !endif !ifdef STATIC @@ -107,8 +107,11 @@ PSL_LIBTYPE = static PSL_LIBTYPE = DLL !endif -!if "$(DISABLE_RUNTIME)" == "" || "$(DISABLE_BUILTIN)" == "" +!if "$(DISABLE_RUNTIME)" == "" PSL_ADDITIONAL_LIBS = $(PSL_ADDITIONAL_LIBS) $(ICUUC_LIB) +endif + +!if "$(DISABLE_BUILTIN)" == "" PSL_TESTS = \ $(PSL_TESTS) \ vs$(VSVER)\$(CFG)\$(PLAT)\test-is-public-builtin.exe \ diff --git a/msvc/config.h.win32.in b/msvc/config.h.win32.in index b1f2525..55a794c 100644 --- a/msvc/config.h.win32.in +++ b/msvc/config.h.win32.in @@ -1,14 +1,8 @@ /* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ -/* generate PSL data using libicu */ -/* #undef BUILTIN_GENERATOR_LIBICU */ - -/* generate PSL data using libidn */ -/* #undef BUILTIN_GENERATOR_LIBIDN */ - -/* generate PSL data using libidn2 */ -/* #undef BUILTIN_GENERATOR_LIBIDN2 */ +/* Generate built-in PSL data */ +/* #undef ENABLE_BUILTIN */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. diff --git a/src/psl.c b/src/psl.c index 5b9f470..a5896fb 100644 --- a/src/psl.c +++ b/src/psl.c @@ -166,7 +166,7 @@ struct psl_ctx_st { }; /* include the PSL data generated by psl-make-dafsa */ -#if defined(BUILTIN_GENERATOR_LIBICU) || defined(BUILTIN_GENERATOR_LIBIDN2) || defined(BUILTIN_GENERATOR_LIBIDN) +#ifdef ENABLE_BUILTIN #include "suffixes_dafsa.h" #else static const unsigned char kDafsa[] = ""; @@ -1366,7 +1366,7 @@ void psl_free(psl_ctx_t *psl) */ const psl_ctx_t *psl_builtin(void) { -#if defined(BUILTIN_GENERATOR_LIBICU) || defined(BUILTIN_GENERATOR_LIBIDN2) || defined(BUILTIN_GENERATOR_LIBIDN) +#ifdef ENABLE_BUILTIN return &builtin_psl; #else return NULL; diff --git a/tests/Makefile.am b/tests/Makefile.am index 1bd0110..5b096ce 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -13,15 +13,7 @@ AM_LDFLAGS = -no-install # Do not call test-registrable-domain here: it would fail due to missing punycode entries in PSL file. PSL_TESTS = test-is-public test-is-public-all test-is-cookie-domain-acceptable -if BUILTIN_GENERATOR_LIBICU - PSL_TESTS += test-is-public-builtin test-registrable-domain -endif - -if BUILTIN_GENERATOR_LIBIDN2 - PSL_TESTS += test-is-public-builtin test-registrable-domain -endif - -if BUILTIN_GENERATOR_LIBIDN +if ENABLE_BUILTIN PSL_TESTS += test-is-public-builtin test-registrable-domain endif diff --git a/tests/meson.build b/tests/meson.build index c6c59ad..d932166 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -23,7 +23,7 @@ tests = [ 'test-is-cookie-domain-acceptable', ] -if enable_builtin != 'no' +if enable_builtin tests += ['test-is-public-builtin', 'test-registrable-domain'] endif