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
[1] https://github.com/truthly/magicmake
[2] https://github.com/truthly/magicmake/raw/master/magicmake.gif
add-configure-cache-checkpoints.patch
Description: Binary data
