On Sun, Mar 14, 2021 at 07:49:13PM +0100, Pierre Labastie wrote:
> After sending the first version of the patch, I realized that it
> was flawed, because of some formatting by the MUA. It took me
> some time to set up an MTA so that git send-email works. Now the
> patch should apply cleanly. Please remove the present paragraph by using
> git am -c. Apologies for the inconvenience(s).
> -- >8 --
> Commit b3df561fbf has introduced the ability to convert extended
> inode time precision on ext4, but this breaks builds on older distros,
> where ext4 does not have the nsec time precision.
>
> Commit c615287cc tried to fix that by testing the availability of
> the EXT4_EPOCH_MASK macro, but the test is not complete.
>
> This patch aims at fixing the macro test, and changes the
> name of the associated HAVE_ macro, since the logic is reverted.
>
> This fixes #353 when ext4 has nsec time precision. Note that
> the test fails when ext4 does not have the nsec time precision.
> Maybe the test shouldn't be run in that case?
>
> Issue: #353
> Signed-off-by: Pierre Labastie <[email protected]>
> ---
> configure.ac | 8 ++++----
> convert/source-ext2.c | 6 +++---
> 2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 612a3f87..dd6a5de7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -251,10 +251,10 @@ else
> AC_DEFINE([HAVE_OWN_FIEMAP_EXTENT_SHARED_DEFINE], [0], [We did not define
> FIEMAP_EXTENT_SHARED])
> fi
>
> -HAVE_OWN_EXT4_EPOCH_MASK_DEFINE=0
> -AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK], [],
> - [HAVE_OWN_EXT4_EPOCH_MASK_DEFINE=1
> - AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably
> old e2fsprogs, will use own definition, no 64bit time precision of converted
> images])])
> +AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK],
> + [AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1],
> + [Define to 1 if e2fsprogs defines EXT4_EPOCH_MASK])],
> + [AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably
> old e2fsprogs, will use own definition, no 64bit time precision of converted
> images])])
Inlining the AC_DEFINE to the check will skip defining the macro in case
the EXT4_EPOCH_MASK does not exist and then the C #if won't work.
HAVE_EXT4_EPOCH_MASK_DEFINE=0
AX_CHECK_DEFINE(...
HAVE_EXT4_EPOCH_MASK_DEFINE=1,...)
if x"$HAVE_EXT4_EPOCH_MASK_DEFINE"; then
AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1])
else
AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [0])
fi
This should work, maybe it's not the shortest way to write that but I
can't find anything better.