Преглед изворни кода

do not update po and pot files in the process of the build as this
causes timestamp changes for the mo files which therefore can't
be refcounted by dpkg for your M-A: same packages
(Closes: #659333, LP: #924628)

The commit also enables a top-level 'make update-po' and does
all the needed changes to let this work now that update-po might
be called in a freshly checkout tree

David Kalnischkies пре 14 година
родитељ
комит
a11afb9d0d
7 измењених фајлова са 32 додато и 24 уклоњено
  1. 4 2
      Makefile
  2. 1 1
      buildlib/defaults.mak
  3. 1 1
      buildlib/podomain.mak
  4. 6 1
      debian/changelog
  5. 3 8
      doc/makefile
  6. 15 9
      po/makefile
  7. 2 2
      test/Makefile

+ 4 - 2
Makefile

@@ -9,8 +9,8 @@ endif
 .PHONY: default
 .PHONY: default
 default: startup all
 default: startup all
 
 
-.PHONY: headers library clean veryclean all binary program doc test
-all headers library clean veryclean binary program doc dirs test:
+.PHONY: headers library clean veryclean all binary program doc test update-po
+startup all headers library clean veryclean binary program doc dirs test update-po:
 	$(MAKE) -C apt-pkg $@
 	$(MAKE) -C apt-pkg $@
 	$(MAKE) -C apt-inst $@
 	$(MAKE) -C apt-inst $@
 	$(MAKE) -C methods $@
 	$(MAKE) -C methods $@
@@ -21,6 +21,8 @@ all headers library clean veryclean binary program doc dirs test:
 	$(MAKE) -C po $@
 	$(MAKE) -C po $@
 	$(MAKE) -C test $@
 	$(MAKE) -C test $@
 
 
+update-po: startup
+
 # Some very common aliases
 # Some very common aliases
 .PHONY: maintainer-clean dist-clean distclean pristine sanity 
 .PHONY: maintainer-clean dist-clean distclean pristine sanity 
 maintainer-clean dist-clean distclean pristine sanity: veryclean
 maintainer-clean dist-clean distclean pristine sanity: veryclean

+ 1 - 1
buildlib/defaults.mak

@@ -121,7 +121,7 @@ MKDIRS := $(BIN)
 all: dirs binary doc
 all: dirs binary doc
 binary: library program
 binary: library program
 maintainer-clean dist-clean distclean pristine sanity: veryclean
 maintainer-clean dist-clean distclean pristine sanity: veryclean
-headers library clean veryclean program test:
+startup headers library clean veryclean program test update-po:
 
 
 veryclean:
 veryclean:
 	echo Very Clean done for $(SUBDIR)
 	echo Very Clean done for $(SUBDIR)

+ 1 - 1
buildlib/podomain.mak

@@ -14,7 +14,7 @@ MKDIRS += $(PO_DOMAINS)/$(MY_DOMAIN)
 $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: SRC := $(addprefix $(SUBDIR)/,$(SOURCE))
 $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: SRC := $(addprefix $(SUBDIR)/,$(SOURCE))
 $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: makefile
 $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: makefile
 	(echo $(SRC) | xargs -n1 echo) > $@
 	(echo $(SRC) | xargs -n1 echo) > $@
-binary program clean: $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list
+startup binary program clean: $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list
 
 
 veryclean: veryclean/$(LOCAL)
 veryclean: veryclean/$(LOCAL)
 veryclean/po/$(LOCAL): LIST := $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list
 veryclean/po/$(LOCAL): LIST := $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list

+ 6 - 1
debian/changelog

@@ -5,6 +5,10 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low
     - fix inconsistent clog/cout usage in the debug output
     - fix inconsistent clog/cout usage in the debug output
 
 
   [ David Kalnischkies ]
   [ David Kalnischkies ]
+  * do not update po and pot files in the process of the build as this
+    causes timestamp changes for the mo files which therefore can't
+    be refcounted by dpkg for your M-A: same packages
+    (Closes: #659333, LP: #924628)
   * debian/libapt-pkg4.12:
   * debian/libapt-pkg4.12:
     - update symbols file
     - update symbols file
   * apt-pkg/packagemanager.cc:
   * apt-pkg/packagemanager.cc:
@@ -35,7 +39,8 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low
     - do not link rred against libz anymore as FileFd handles all
     - do not link rred against libz anymore as FileFd handles all
       this transparently now
       this transparently now
 
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 20 Mar 2012 19:22:49 +0100
+
+ -- David Kalnischkies <kalnischkies@gmail.com>  Wed, 21 Mar 2012 18:50:23 +0100
 
 
 apt (0.8.16~exp13) experimental; urgency=low
 apt (0.8.16~exp13) experimental; urgency=low
 
 

+ 3 - 8
doc/makefile

@@ -67,26 +67,21 @@ veryclean-subdirs:
 		rm -rf $$dir; \
 		rm -rf $$dir; \
 	done
 	done
 
 
+.PHONY: update-po po4a stats
+
 ifdef PO4A
 ifdef PO4A
 doc: po4a
 doc: po4a
 
 
-clean: po4a-clean
-
-.PHONY: update-po po4a stats
 update-po:
 update-po:
 	po4a --previous --no-backups --force --no-translations po4a.conf
 	po4a --previous --no-backups --force --no-translations po4a.conf
 
 
-po4a-clean:
-	po4a --previous --rm-backups --rm-translations po4a.conf
-
 po4a:
 po4a:
 	po4a --previous --no-backups po4a.conf
 	po4a --previous --no-backups po4a.conf
+endif
 
 
 stats:
 stats:
 	for i in po/*.po; do echo -n "$$i: "; msgfmt --statistics $$i; done
 	for i in po/*.po; do echo -n "$$i: "; msgfmt --statistics $$i; done
 
 
-endif
-
 ifdef DOXYGEN
 ifdef DOXYGEN
 DOXYGEN_SOURCES = $(shell find $(BASE)/apt-pkg -not -name .\\\#* -and \( -name \*.cc -or -name \*.h \) )
 DOXYGEN_SOURCES = $(shell find $(BASE)/apt-pkg -not -name .\\\#* -and \( -name \*.cc -or -name \*.h \) )
 
 

+ 15 - 9
po/makefile

@@ -29,7 +29,7 @@ GETDOMAIN = $(word 1,$(subst /, ,$(1)))
 # Generate the list of files from the bits the other make files dropped 
 # Generate the list of files from the bits the other make files dropped 
 # and produce the .pot file.
 # and produce the .pot file.
 $(POTFILES) : $(PO)/%.pot :
 $(POTFILES) : $(PO)/%.pot :
-	printf "%s " "Generating POT file $@"
+	echo "Generating POT file $@"
 	echo $@ : $(wildcard $(PO)/domains/$*/*.*list) $(addprefix $(BASE)/,$(shell cat $(wildcard $(PO)/domains/$*/*.srclist))) > $@.d
 	echo $@ : $(wildcard $(PO)/domains/$*/*.*list) $(addprefix $(BASE)/,$(shell cat $(wildcard $(PO)/domains/$*/*.srclist))) > $@.d
 # From sh source
 # From sh source
 	cat $(PO)/domains/$*/*.shlist 2> /dev/null | (cd $(BASE) && xargs -n1 bash --dump-po-strings) > $(PO)/domains/$*/sh.pot
 	cat $(PO)/domains/$*/*.shlist 2> /dev/null | (cd $(BASE) && xargs -n1 bash --dump-po-strings) > $(PO)/domains/$*/sh.pot
@@ -40,22 +40,19 @@ $(POTFILES) : $(PO)/%.pot :
 	  --keyword=P_:1,2 \
 	  --keyword=P_:1,2 \
 	  --files-from=$(PO)/POTFILES_$*.in -o $(PO)/domains/$*/c.pot
 	  --files-from=$(PO)/POTFILES_$*.in -o $(PO)/domains/$*/c.pot
 	rm -f $(PO)/POTFILES_$*.in
 	rm -f $(PO)/POTFILES_$*.in
-	$(MSGCOMM) --more-than=0 $(PO)/domains/$*/c.pot $(PO)/domains/$*/sh.pot --output=$@
+	$(MSGCOMM) --omit-header --more-than=0 $(PO)/domains/$*/c.pot $(PO)/domains/$*/sh.pot --output=$@
 	# copy into the domain dirs to make rosetta happy
 	# copy into the domain dirs to make rosetta happy
 	rm -f $(PO)/domains/$*/*.pot
 	rm -f $(PO)/domains/$*/*.pot
 	cp $@ $(PO)/domains/$*
 	cp $@ $(PO)/domains/$*
 
 
-$(PACKAGE)-all.pot: $(POTFILES)
-	$(MSGCOMM) --more-than=0 $(POTFILES) --output=$@
-
 # Filter the complete translation with the domain specific file to produce
 # Filter the complete translation with the domain specific file to produce
 # only the subtext needed for this domain
 # only the subtext needed for this domain
 # We cannot express the dependencies required for this directly with a pattern
 # We cannot express the dependencies required for this directly with a pattern
 # rule, so we use the .d hack.
 # rule, so we use the .d hack.
-$(LANG_POFILES) : $(PO_DOMAINS)/%.po : $(PACKAGE)-all.pot
+$(LANG_POFILES) : $(PO_DOMAINS)/%.po : $(POTFILES)
 	printf "%s " "Generating $@"
 	printf "%s " "Generating $@"
 	echo $@ : $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot > $(PO)/$(call GETDOMAIN,$*)_$(notdir $@).d
 	echo $@ : $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot > $(PO)/$(call GETDOMAIN,$*)_$(notdir $@).d
-	$(MSGMERGE) $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot -o $@
+	$(MSGMERGE) --no-location $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot -o $@
 
 
 $(MOFILES) : $(PO_DOMAINS)/%.mo : $(PO_DOMAINS)/%.po
 $(MOFILES) : $(PO_DOMAINS)/%.mo : $(PO_DOMAINS)/%.po
 	printf "%s: " "Generating $(LOCALE)/$(notdir $*)/LC_MESSAGES/$(call GETDOMAIN,$*).mo"
 	printf "%s: " "Generating $(LOCALE)/$(notdir $*)/LC_MESSAGES/$(call GETDOMAIN,$*).mo"
@@ -66,7 +63,16 @@ $(MOFILES) : $(PO_DOMAINS)/%.mo : $(PO_DOMAINS)/%.po
 stats:
 stats:
 	for i in *.pot *.po; do echo -n "$$i: "; msgfmt --statistics $$i; done
 	for i in *.pot *.po; do echo -n "$$i: "; msgfmt --statistics $$i; done
 
 
-binary: $(POTFILES) $(PACKAGE)-all.pot $(MOFILES)
+binary: $(POTFILES) $(MOFILES)
+
+$(PACKAGE)-all.pot: $(POTFILES)
+	# we create our partial pot files without a header to avoid changing dates in *.mo files,
+	# but we want a header for our master-pot file, so we use a dummy pot with nothing but the header
+	$(XGETTEXT) --default-domain=$(PO)/$(PACKAGE)-dummy.pot --foreign --language=c \
+		-o $(PO)/$(PACKAGE)-dummy.pot --force-po --package-name=$(PACKAGE) \
+		--package-version=$(VERSION) --msgid-bugs-address=deity@lists.debian.org /dev/null
+	$(MSGCOMM) --more-than=0 $(PO)/$(PACKAGE)-dummy.pot $(POTFILES) --output=$(PACKAGE)-all.pot
+	rm -f $(PO)/$(PACKAGE)-dummy.pot
 
 
 .PHONY: update-po
 .PHONY: update-po
 update-po: $(PACKAGE)-all.pot
 update-po: $(PACKAGE)-all.pot
@@ -78,7 +84,7 @@ update-po: $(PACKAGE)-all.pot
 	done
 	done
 
 
 clean: clean/local
 clean: clean/local
-clean/local: update-po
+clean/local:
 	rm -f $(MOFILES) $(LANG_POFILES) $(PO)/*.d
 	rm -f $(MOFILES) $(LANG_POFILES) $(PO)/*.d
 
 
 # Include the dependencies that are available
 # Include the dependencies that are available

+ 2 - 2
test/Makefile

@@ -6,8 +6,8 @@ ifndef NOISY
 .SILENT:
 .SILENT:
 endif
 endif
 
 
-.PHONY: headers library clean veryclean all binary program doc test
-all clean veryclean binary program dirs test:
+.PHONY: startup headers library clean veryclean all binary program doc test update-po
+startup all clean veryclean binary program dirs test update-po:
 	$(MAKE) -C libapt $@
 	$(MAKE) -C libapt $@
 	$(MAKE) -C interactive-helper $@
 	$(MAKE) -C interactive-helper $@