On Mon, May 23 2022, Ævar Arnfjörð Bjarmason wrote: > On Mon, May 23 2022, Jiang Xin wrote: > >> From: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> >> >> A workflow change for translators are being proposed. >> >> Changes since v2: >> >> 1. Patch 1/9: reword. >> 2. Patch 2/9: reword. >> 3. Patch 3/9: reword, and add "FORCE" to prerequisites of "po/git.pot". >> 4. Patch 6/9: remove "FORCE" from prerequisites of "po/git.pot". >> 5. Patch 8/9: reword, and reuse "$(gen_pot_header)" to prepare pot >> header for "po/git-core.pot". >> 6. Patch 9/9: various updates on po/README.md. > > From skimming this the *.c.po v.s. *.c extension is still left in > comments. I'm not saying you need to go for my suggestions, but it would > be very useful in CL's to note things that were suggested but not > changed, such as that. > > Right now I haven't paged that v2 discussion into my brain again, so I > don't know if that was the only thing, it's the only thing I remember > right now... This fix-up below implements what I suggested on v2, so now the comments in the generated file are correct, and don't refer to our intermediate files: $ grep '#-#' po/git.pot #. #-#-#-#-# git-add--interactive.perl #-#-#-#-# #. #-#-#-#-# add-patch.c #-#-#-#-# #. #-#-#-#-# git-add--interactive.perl #-#-#-#-# #. #-#-#-#-# branch.c #-#-#-#-# #. #-#-#-#-# object-name.c #-#-#-#-# #. #-#-#-#-# grep.c #-#-#-#-# I gathered that the reason you preferred the whole "grep -q PRItime" was because you wanted to mitigate the effects of your IDE discovering these files. With the below you can define AGGRESSIVE_INTERMEDIATE and when you "make pot" the generated *.c files will only exist for as long as they're needed to generate the next step. But if you do a subsequent "make pot" will be slower, as we'll of course need to generate them again. I think it's better to go in this direction, and rename that AGGRESSIVE_INTERMEDIATE to something like MAKE_AVOID_REAL_EXTENSIONS_IN_GITIGNORED_FILES or whatever. I.e. our correctness shouldn't suffer because we're trying to work around some issue in a specific (and optional) developer tooling. There's also the fix there for the "header" dependency, but as noted in another reply it should probably be dropped altogether... diff --git a/Makefile b/Makefile index d3eae150de9..0b96b55b63f 100644 --- a/Makefile +++ b/Makefile @@ -2736,6 +2736,7 @@ endif ## "po/git.pot" file. LOCALIZED_ALL_GEN_PO = +LOCALIZED_C_GEN_C = $(LOCALIZED_C:%=.build/pot/po-munged/%) LOCALIZED_C_GEN_PO = $(LOCALIZED_C:%=.build/pot/po/%.po) LOCALIZED_ALL_GEN_PO += $(LOCALIZED_C_GEN_PO) @@ -2745,26 +2746,19 @@ LOCALIZED_ALL_GEN_PO += $(LOCALIZED_SH_GEN_PO) LOCALIZED_PERL_GEN_PO = $(LOCALIZED_PERL:%=.build/pot/po/%.po) LOCALIZED_ALL_GEN_PO += $(LOCALIZED_PERL_GEN_PO) -## Gettext tools cannot work with our own custom PRItime type, so -## we replace PRItime with PRIuMAX. We need to update this to -## PRIdMAX if we switch to a signed type later. -$(LOCALIZED_C_GEN_PO): .build/pot/po/%.po: % +ifdef AGGRESSIVE_INTERMEDIATE +.INTERMEDIATE: $(LOCALIZED_C_GEN_C) +endif +$(LOCALIZED_C_GEN_C): .build/pot/po-munged/%: % $(call mkdir_p_parent_template) - $(QUIET_XGETTEXT) \ - if grep -q PRItime $<; then \ - (\ - sed -e 's|PRItime|PRIuMAX|g' <$< \ - >.build/pot/po/$< && \ - cd .build/pot/po && \ - $(XGETTEXT) --omit-header \ - -o $(@:.build/pot/po/%=%) \ - $(XGETTEXT_FLAGS_C) $< && \ - rm $<; \ - ); \ - else \ - $(XGETTEXT) --omit-header \ - -o $@ $(XGETTEXT_FLAGS_C) $<; \ - fi + $(QUIET_GEN)sed -e 's|PRItime|PRIuMAX|g' <$< >$@ + +$(LOCALIZED_C_GEN_PO): .build/pot/po/%.po: .build/pot/po-munged/% + $(call mkdir_p_parent_template) + $(QUIET_XGETTEXT)( \ + cd $(<D) && \ + $(XGETTEXT) $(XGETTEXT_FLAGS_C) --omit-header -o - $(<F) \ + ) >$@ $(LOCALIZED_SH_GEN_PO): .build/pot/po/%.po: % $(call mkdir_p_parent_template) @@ -2786,11 +2780,24 @@ sed -e 's|charset=CHARSET|charset=UTF-8|' \ echo '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"' >>$@ endef -.build/pot/git.header: $(LOCALIZED_ALL_GEN_PO) +.build/pot/git.header: $(call mkdir_p_parent_template) $(QUIET_GEN)$(gen_pot_header) -po/git.pot: .build/pot/git.header $(LOCALIZED_ALL_GEN_PO) +# We go through this dance of having a prepared +# e.g. .build/pot/po/grep.c.po and copying it to +# .build/pot/to-cat/grep.c only because some IDEs (e.g. VSCode) pick +# up on the "real" extension for the purposes of auto-completion, even +# if the .build directiory is in .gitignore. +LOCALIZED_ALL_GEN_TO_CAT = $(LOCALIZED_ALL_GEN_PO:.build/pot/po/%.po=.build/pot/to-cat/%) +ifdef AGGRESSIVE_INTERMEDIATE +.INTERMEDIATE: $(LOCALIZED_ALL_GEN_TO_CAT) +endif +$(LOCALIZED_ALL_GEN_TO_CAT): .build/pot/to-cat/%: .build/pot/po/%.po + $(call mkdir_p_parent_template) + $(QUIET_GEN)cat $< >$@ + +po/git.pot: .build/pot/git.header $(LOCALIZED_ALL_GEN_TO_CAT) $(QUIET_GEN)$(MSGCAT) $(MSGCAT_FLAGS) $^ >$@ .PHONY: pot