Makeconfig: Fix time64-compat.mk target
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
The time64-compat.i needed for the time64-compat.mk Makeconfig include
ends up trying to include libc-modules.h, which is not generated until
later. This results in an error during build which is not noticed
because it somehow does not terminate the build.
Exclude the modules cppflags from the pre-processing command and fix
up the time64-compat.mk target so that the build runs without issues.
---
Makeconfig | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Comments
On Jun 17 2021, Siddhesh Poyarekar via Libc-alpha wrote:
> The time64-compat.i needed for the time64-compat.mk Makeconfig include
> ends up trying to include libc-modules.h, which is not generated until
> later. This results in an error during build which is not noticed
> because it somehow does not terminate the build.
>
> Exclude the modules cppflags from the pre-processing command and fix
> up the time64-compat.mk target so that the build runs without issues.
Ok.
Andreas.
On 17/06/2021 02:44, Siddhesh Poyarekar wrote:
> The time64-compat.i needed for the time64-compat.mk Makeconfig include
> ends up trying to include libc-modules.h, which is not generated until
> later. This results in an error during build which is not noticed
> because it somehow does not terminate the build.
>
> Exclude the modules cppflags from the pre-processing command and fix
> up the time64-compat.mk target so that the build runs without issues.
Thanks for catching it. Out of curiosity, how do you trigger this issue?
I am building it glibc and tests with this patch for some time and I didn't
see it.
On 6/17/21 4:08 PM, Adhemerval Zanella wrote:
> Thanks for catching it. Out of curiosity, how do you trigger this issue?
> I am building it glibc and tests with this patch for some time and I didn't
> see it.
It happens all the time, just that it does not terminate the build and
hence would be nearly impossible to notice unless you read the full
build messages line by line. However, I have this curious habit of
running the build as `make -j16 > /dev/null` due to which only stderr
gets printed on the terminal. The bright red error from gcc complaining
about missing libc-modules.h was hard to miss :)
Siddhesh
@@ -970,7 +970,7 @@ module-cppflags-real = -include $(common-objpfx)libc-modules.h \
# facility. In fact, shlib-versions should not use it because that will
# create a circular dependency as libc-modules.h is generated from
# shlib-versions.
-module-cppflags = $(if $(filter %.v.i,$(@F)),,$(module-cppflags-real))
+module-cppflags = $(if $(filter %.mk.i %.v.i,$(@F)),,$(module-cppflags-real))
# These are the variables that the implicit compilation rules use.
# Note that we can't use -std=* in CPPFLAGS, because it overrides
@@ -1239,11 +1239,11 @@ endif # $(build-shared) = yes
-include $(common-objpfx)time64-compat.mk
postclean-generated += time64-compat.mk
-$(common-objpfx)time64-compat.mk: $(sysd-versions-force) \
- $(common-objpfx)time64-compat.i
+$(common-objpfx)time64-compat.mk: $(common-objpfx)time64-compat.mk.i \
+ $(sysd-versions-force)
sed '/^[ ]*#/d;/^[ ]*$$/d' $< > $@T
mv -f $@T $@
-$(common-objpfx)time64-compat.i: $(..)Makeconfig
+$(common-objpfx)time64-compat.mk.i: $(..)Makeconfig
printf "#include <time64-compat.h>\n#ifdef TIME64_NON_DEFAULT\nhave-time64-compat = yes\n#endif" \
| $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - > $@T
mv -f $@T $@