solenv/gbuild/LinkTarget.mk         |    5 ++++-
 solenv/gbuild/PrecompiledHeaders.mk |   20 +++++++++++++-------
 solenv/gbuild/TargetLocations.mk    |    1 +
 3 files changed, 18 insertions(+), 8 deletions(-)

New commits:
commit 5e7421b3895aa69ea874fc2ccf0f615b1163fbda
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Nov 12 11:34:41 2021 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Fri Nov 12 13:21:19 2021 +0100

    rebuild a PCH when the flags it was built with change
    
    We already store the flags in a .flags file for another use, so just
    handle the file as another make rule before the PCH rule and
    if the file changes then the PCH rule will depend on something
    that has changed.
    
    Change-Id: Ic43068273a40c0337b77221660f370780a21340c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125094
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index fe40fcbaf4ac..71be0790b59b 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -1853,6 +1853,7 @@ define gb_LinkTarget__set_precompiled_header_impl
 $(call gb_LinkTarget_get_clean_target,$(1)) : $(call 
gb_PrecompiledHeader_get_clean_target,$(3))
 $(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call 
gb_CxxObject_get_source,$(SRCDIR),$(2))
 $(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(patsubst 
%.cxx,%.hxx,$(call gb_CxxObject_get_source,$(SRCDIR),$(2)))
+$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call 
gb_PrecompiledHeader_get_flags_file,$(3),$(4))
 
 $(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call 
gb_LinkTarget_get_headers_target,$(1))
 
@@ -1912,7 +1913,9 @@ $(call gb_LinkTarget_get_pch_timestamp,$(4)) : $(call 
gb_LinkTarget_get_pch_reus
 # Depending directly on the PCH could cause that PCH to be built with this 
linktarget's flags.
 $(call gb_LinkTarget_get_pch_reuse_timestamp,$(4)) : $(call 
gb_PrecompiledHeader_get_for_reuse_target,$(3),$(4))
        $(call gb_PrecompiledHeader_check_flags,$(4),$(2),\
-               $(call 
gb_PrecompiledHeader_get_target,$(3),$(4)),$$(PCH_CXXFLAGS) $$(PCH_DEFS) 
$$(gb_LinkTarget_EXCEPTIONFLAGS))
+               $(call gb_PrecompiledHeader_get_target,$(3),$(4)),\
+               $(call gb_PrecompiledHeader_get_flags_file,$(3),$(4)),\
+               $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS))
        $$(call gb_PrecompiledHeader__copy_reuse_files,$(1),$(3),$(4))
        mkdir -p $$(dir $$@) && touch $$@
 
diff --git a/solenv/gbuild/PrecompiledHeaders.mk 
b/solenv/gbuild/PrecompiledHeaders.mk
index 60c56950350f..28f2308c8e92 100644
--- a/solenv/gbuild/PrecompiledHeaders.mk
+++ b/solenv/gbuild/PrecompiledHeaders.mk
@@ -44,6 +44,13 @@ $(call gb_PrecompiledHeader_get_dep_target,$(1),$(3)) :
                mkdir -p $$(dir $$@) && \
                echo "$$(call gb_PrecompiledHeader_get_target,$(1),$(3)) : 
$$(gb_Helper_PHONY)" > $$@)
 
+# keep the flags the PCH was built with in a separate file, update the file if 
and only if the flags
+# change, and make the PCH depend on it => the PCH will be rebuilt on any 
flags change
+.PHONY: force
+$(call gb_PrecompiledHeader_get_flags_file,$(1),$(3)) : force
+       echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) | cmp -s - $$@ \
+       || echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) > $$@
+
 # despite this being only one .d file, need to run concat-deps on it to
 # re-write external headers from UnpackedTarball
 $(call gb_PrecompiledHeader_get_target,$(1),$(3)) :
@@ -52,7 +59,6 @@ $(call gb_PrecompiledHeader_get_target,$(1),$(3)) :
        rm -f $$@
        $$(call 
gb_PrecompiledHeader__command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(3),$(5))
        $$(call 
gb_PrecompiledHeader__sum_command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(3))
-       echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) > $$(call 
gb_PrecompiledHeader_get_target,$(1),$(3)).flags
 ifeq ($(gb_FULLDEPS),$(true))
        $$(call gb_Helper_abbreviate_dirs,\
                RESPONSEFILE=$$(call gb_var2file,$$(shell 
$$(gb_MKTEMP)),200,$$(call gb_PrecompiledHeader_get_dep_target_tmp,$(1),$(3))) 
&& \
@@ -73,8 +79,8 @@ $(call gb_PrecompiledHeader_get_clean_target,$(1)) :
                        $$(call gb_PrecompiledHeader_get_target,$(1),$(3)).obj \
                        $$(call gb_PrecompiledHeader_get_target,$(1),$(3)).pdb \
                        $$(call gb_PrecompiledHeader_get_target,$(1),$(3)).sum \
-                       $$(call 
gb_PrecompiledHeader_get_target,$(1),$(3)).flags \
-                       $$(call 
gb_PrecompiledHeader_get_target,$(1),$(3)).reuse \
+                       $$(call gb_PrecompiledHeader_get_flags_file,$(1),$(3)) \
+                       $$(call 
gb_PrecompiledHeader_get_for_reuse_target,$(1),$(3)) \
                        $$(call gb_PrecompiledHeader_get_dep_target,$(1),$(3)))
 
 endef
@@ -85,12 +91,12 @@ endef
 # This complements the check in gb_CxxObject__set_pchflags.
 define gb_PrecompiledHeader_check_flags
 $$(call gb_Helper_abbreviate_dirs,\
-       $$(if $$(strip $$(call 
gb_PrecompiledHeader_check_flags_internal,$$(shell cat 
$(3).flags),$(4),$(2))),false,true) || ( \
+       $$(if $$(strip $$(call 
gb_PrecompiledHeader_check_flags_internal,$$(shell cat 
$(4)),$(5),$(2))),false,true) || ( \
                echo Error reusing $(2) by $(1). >&2 && \
                echo -n " precompiled header flags : ">&2 && \
-               cat $(3).flags >&2 && \
-               echo    "            object flags  : "$$(sort $(4)) >&2 && \
-               echo    " reason : $$(call 
gb_PrecompiledHeader_check_flags_internal,$$(shell cat $(3).flags),$(4),$(2))" 
>&2 && \
+               cat $(4) >&2 && \
+               echo    "            object flags  : "$$(sort $(5)) >&2 && \
+               echo    " reason : $$(call 
gb_PrecompiledHeader_check_flags_internal,$$(shell cat $(4)),$(5),$(2))" >&2 && 
\
                echo Incorrect precompiled header setup or internal gbuild 
error. >&2 ; \
                exit 1) \
 )
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 2559dddd46ef..e65e0759a2ab 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -157,6 +157,7 @@ gb_PackageInfo_get_target = $(WORKDIR)/PackageInfo
 gb_Postprocess_get_target = $(WORKDIR)/Postprocess/$(1)
 gb_PrecompiledHeader_get_dep_target = $(WORKDIR)/Dep/PrecompiledHeader/$(call 
gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx$(gb_PrecompiledHeader_EXT).d
 gb_PrecompiledHeader_get_dep_target_tmp = $(call 
gb_PrecompiledHeader_get_dep_target,$(1),$(2)).tmp
+gb_PrecompiledHeader_get_flags_file = $(WORKDIR)/PrecompiledHeader/$(call 
gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx$(gb_PrecompiledHeader_EXT).flags
 gb_PrecompiledHeader_get_for_reuse_target = 
$(WORKDIR)/PrecompiledHeader/$(call 
gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx$(gb_PrecompiledHeader_EXT).reuse
 gb_PrecompiledHeader_get_target = $(WORKDIR)/PrecompiledHeader/$(call 
gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx$(gb_PrecompiledHeader_EXT)
 gb_PropertiesTranslateTarget_get_target = 
$(WORKDIR)/PropertiesTranslateTarget/$(1).properties

Reply via email to