Issue #7907: work around possible outdated data in meson tarball.

`meson dist` don't imply a reconfigure or a rebuild which is actually
not great as it means a wrong order of commands may create tarballs with
outdated data (typically: build, then pull new code, then dist).

Of course for our official tarballs, it should be fine as we don't
generate tarballs manually anymore, but through the CI. Yet, just to be
on the safe side, force-trigger a reconfigure then a build (which would
likely be very fast anyway in the common use case where we just did a
build right before).

Additionally the INSTALL.in file is not copied anymore in the tarball
and INSTALL will only be generated in git repositories.
This commit is contained in:
Jehan 2022-08-02 15:21:55 +02:00
parent 3648e6d3be
commit ef85c51a58
2 changed files with 43 additions and 9 deletions

View File

@ -1557,11 +1557,14 @@ install_conf.set('WEBP_REQUIRED_VERSION', webp_minver)
install_conf.set('WMF_REQUIRED_VERSION', wmf_minver)
install_conf.set('XGETTEXT_REQUIRED_VERSION', '0.19')
INSTALL = configure_file(
input : 'INSTALL.in',
output: 'INSTALL',
configuration: install_conf
)
if is_git_repository
# Tarballs won't have INSTALL.in, only the generated INSTALL.
INSTALL = configure_file(
input : 'INSTALL.in',
output: 'INSTALL',
configuration: install_conf
)
endif
configure_file(
@ -1635,7 +1638,9 @@ custom_target('Changelog',
build_by_default: false,
)
meson.add_dist_script('meson_dist_script.sh', generate_version_h ? gitversion_h.full_path() : gitversion_h)
meson.add_dist_script('meson_dist_script.sh',
generate_version_h ? gitversion_h.full_path() : gitversion_h,
meson.source_root(), meson.build_root())
################################################################################

View File

@ -1,6 +1,35 @@
#!/usr/bin/env bash
cp -f 'INSTALL' "${MESON_DIST_ROOT}"
# rm -f "${MESON_DIST_ROOT}/INSTALL.in"
GIT_VERSION_H="$1"
cp "$1" "${MESON_DIST_ROOT}"
# MESON_SOURCE_ROOT and MESON_BUILD_ROOT environment variables are
# passed since meson 0.54.0 but we depend on 0.53.0 so I also pass them
# as script arguments. When we bump out meson requirement, this test may
# go away.
if [ -z "$MESON_SOURCE_ROOT" ]; then
MESON_SOURCE_ROOT="$2"
fi
if [ -z "$MESON_BUILD_ROOT" ]; then
MESON_BUILD_ROOT="$3"
fi
# `meson dist` doesn't trigger a build, which is a problem because we
# need to add some configured/built files. The case where we didn't
# build at all is the less annoying (we'd get a failure, which is
# actually acceptable as it warns us). But the case where we would copy
# outdated data is much more insidious (such as wrong INSTALL
# information or wrong git information) as it would be silent.
# See: https://github.com/mesonbuild/meson/issues/10650
# And: https://gitlab.gnome.org/GNOME/gimp/-/issues/7907
# This is why we manually trigger, not only a reconfigure, but also a
# rebuild of the main project before copying data around.
# INSTALL file is generated at configure time.
meson --reconfigure $MESON_SOURCE_ROOT
# git-version.h is generated at build time.
meson compile
cp -f 'INSTALL' "${MESON_DIST_ROOT}"
rm -f "${MESON_DIST_ROOT}/INSTALL.in"
cp "$GIT_VERSION_H" "${MESON_DIST_ROOT}"