[PATCH] Add configure cache checkpoints before fatal checks - Mailing list pgsql-hackers

From Joel Jacobson
Subject [PATCH] Add configure cache checkpoints before fatal checks
Date
Msg-id 0df977b9-04e4-4f1f-8a8b-41a7fe416d5d@www.fastmail.com
Whole thread Raw
List pgsql-hackers
Hi,

Enabling optional ./configure features/packages using --enable-* / --with-*
will and should cause fatal errors aborting the configure process
if some dependencies are missing, letting the user install such packages,
before proceeding and resuming ./configure.

However, ./configure currently only saves config.cache at the very end upon success.

This means the manual loop below can take quite a few iterations,
until the user have encountered all errors for their distribution,
and installed all required packages:

loop
   ./configure --with-... --enable-...
   if error occured then
       figure out which distro package should be installed using apt-file or google
       install the package
    else
         break
    end
end loop

To speed-up the resuming of ./configure, I propose adding AC_CACHE_SAVE entires
at a few positions *before* possibly executing some fatal checks (AC_MSG_ERROR).

It's important not to run AC_CACHE_SAVE in between the actual check and AC_MSG_ERROR,
as that would cache the "no" value, causing the package later installed by the user to go undetected.

Attached is a patch adding AC_CACHE_SAVE at places where I think it makes most sense.
Since it's a macro that expanded causes configure to grow quite a bit,
I only added it at the 10 places where we get most bang for the bucks, in terms of speed-up.

Just for fun, I also created a little helper-tool, magicmake [1], to automate the pseudo-code loop above,
to verify all packages could be found, after installation, so that no undesired "no" values were cached.
The gif animation [2] shows the building of PostgreSQL with these configure flags:

magicmake ./configure --config-cache --prefix="$HOME/pg-head" --enable-nls --with-perl --with-python --with-tcl --with-icu --with-llvm --with-ssl=openssl --with-gssapi --with-ldap --with-pam --with-systemd --with-libxml --with-libxslt --with-lz4 --with-pgport=54321 --enable-debug --enable-cassert --enable-tap-tests --enable-depend --enable-coverage --enable-profiling --enable-dtrace

The following packages were detected and installed by magicmake to make it possible to build PostgreSQL with all those options:

liblog-agent-perl lcov systemtap-sdt-dev llvm clang pkg-config libicu-dev libxml2-dev liblz4-dev libreadline-dev bison flex python-is-python3 zlib1g-dev libkrb5-dev libssl-dev libgss-dev libpam0g-dev libxslt1-dev libldap2-dev libsystemd-dev gettext tcl tcl-dev libperl-dev libpython3.8-dev libipc-run-perl dbtoepub fop libxml2-utils xsltproc libterm-table-perl libterm-readkey-perl libterm-size-any-perl

(I only attached the patch for configure.ac, you have to run autoconf to also update configure.)

Thoughts?

/Joel




Attachment

pgsql-hackers by date:

Previous
From: James Coleman
Date:
Subject: Parallelize correlated subqueries that execute within each worker
Next
From: Matthias van de Meent
Date:
Subject: Re: Draft back-branch release notes are up