X-Git-Url: https://sourceware.org/git/?a=blobdiff_plain;f=MakeTAGS;h=1ffdd64000fad19e20aba0f08e9fe1590d90a238;hb=6b77644416f1bad2915a8fd72fee1aa1ac101b51;hp=acea142bf6c7af0f912d8fd1260cdd5b55538ae9;hpb=28f540f45bbacd939bfd07f213bcad2bf730b1bf;p=glibc.git diff --git a/MakeTAGS b/MakeTAGS index acea142bf6..1ffdd64000 100644 --- a/MakeTAGS +++ b/MakeTAGS @@ -1,22 +1,22 @@ # Make the TAGS files. - -# Copyright (C) 1992, 1994 Free Software Foundation, Inc. +# Copyright (C) 1992,1994,1995,1996,1998,2002,2003,2005 +# Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public License -# as published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. +# Lesser General Public License for more details. -# You should have received a copy of the GNU Library General Public -# License along with the GNU C Library; see the file COPYING.LIB. If -# not, write to the Free Software Foundation, Inc., 675 Mass Ave, -# Cambridge, MA 02139, USA. +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA. # Make this the default goal. TAGS: @@ -27,28 +27,36 @@ endif include $(..)Makeconfig +# Pass these to $(MAKE) calls to avoid source generation and such. +sub-make-vars = generating=t no_deps=t + ifndef tags_sources ifeq ($(subdir),ctype) # In most cases, we want the C source files to come before # the header files so tags for optimizing #define's in the # headers won't be put in the tags files, but for ctype, # the functions are just backup for the #define's in the header. -tags_sources = $(all-headers) $(all-sources) +tags_sources = $(all-headers) $(all-sources) $(all-dist) else # Not ctype. -tags_sources = $(all-sources) $(all-headers) +tags_sources = $(all-sources) $(all-headers) $(all-dist) endif # ctype endif # No tags_sources -sysdep-dirs := $(addprefix $(sysdep_dir)/,$(sysdirs)) +sysdep-dirs := $(full_config_sysdirs) ifndef sysdep_dirs # Find all sysdep directories. -sysdep_dirs := $(shell find $(..)sysdeps -type d ! -name RCS -print) +sysdep_dirs := $(shell find $(..)sysdeps \ + $(wildcard \ + $(patsubst %,$(..)%/sysdeps,$(add-ons))) \ + -type d ! -name RCS ! -name CVS \ + ! -name SCCS -print) endif # Find all sysdep dirs there are, but putting the ones # we are configured to use first and preserving their order. -all-dirs := $(objdir) \ +all-dirs := $(subdir-dirs) \ + $(objdir) \ $(sysdep-dirs) \ $(source_dirs) \ $(filter-out $(sysdep-dirs),$(sysdep_dirs)) @@ -58,29 +66,46 @@ all-dirs := $(objdir) \ ifndef subdir subdirs := $(subdirs) \ $(filter-out $(subdirs),\ - $(shell sed -e 's/\#.*$$//' \ - $(wildcard $(addsuffix /Subdirs,\ - $(all-dirs)))\ - /dev/null)) + $(sort \ + $(shell sed -e 's/\#.*$$//' \ + $(wildcard $(addsuffix /Subdirs,\ + $(all-dirs)))\ + /dev/null))) all-dist = $(foreach Dist,$(wildcard $(all-dirs:%=%/Dist)),\ $(addprefix $(Dist:%/Dist=%)/,\ $(filter %.c %.h %.S %.s,\ $(shell cat $(Dist))))) tags_sources = $(all-sources) $(all-headers) $(all-dist) +else +all-dist = $(distribute) endif +# sources and headers must be simply expanded variables +sources := $(sources) $(filter %.c %.s %.S,$(all-dist)) +headers := $(headers) $(filter %.h,$(all-dist)) +all-dist := $(filter-out %.h %.c %.s %.S,$(all-dist)) + +sources += $(foreach lib,$(extra-libs),$($(lib)-routines:=.c)) + # All different versions of $(sources), preserving the configured sysdep # directory order. -all-sources = $(wildcard $(foreach file,$(sources),\ - $(file) \ - $(foreach dir,$(all-dirs),\ - $(dir)/$(file) \ - $(dir)/$(file:.c=.S) \ - $(dir)/$(file:.c=.s)))) - -all-headers = $(wildcard $(foreach file,$(headers),\ - $(file) \ - $(foreach dir,$(all-dirs),$(dir)/$(file)))) +# Files that are found in the current directory cannot occur in +# sysdep directories, so don't bother searching them. +sysdep-sources := $(filter-out $(wildcard $(sources)), $(sources)) +all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) $(sources:.c=.s) \ + $(others:=.c) $(tests:=.c) $(xtests:=.c) \ + $(test-srcs:=.c))) \ + $(foreach dir,$(all-dirs),\ + $(wildcard \ + $(addprefix $(dir)/,\ + $(sort $(sysdep-sources) \ + $(sysdep-sources:.c=.S) \ + $(sysdep-sources:.c=.s))))) + +sysdep-headers := $(filter-out $(wildcard $(headers)), $(headers)) +all-headers = $(wildcard $(headers)) \ + $(foreach dir,$(all-dirs),\ + $(wildcard $(addprefix $(dir)/,$(sysdep-headers)))) tags_sources := $(strip $(tags_sources)) @@ -89,7 +114,7 @@ ifdef subdir ifdef tags_sources $(ETAGS) -o $@ $^ else -# No sources. Create a dummy file. +# No sources. Create a dummy file. touch $@ endif # tags_sources else # parent @@ -102,6 +127,65 @@ TAGS: subdir_TAGS .PHONY: subdir_TAGS $(subdirs:%=%/TAGS) subdir_TAGS: $(subdirs:%=%/TAGS) $(subdirs:%=%/TAGS): - $(MAKE) -C $(@D) no_deps=t $(@F) + $(MAKE) -C $(@D) $(sub-make-vars) $(@F) endif # subdir + +ifndef XGETTEXT +XGETTEXT = xgettext +endif + +P = $(..)po + +ifdef subdir +domain = $(subdir) +else +domain = libc-top +endif + +define extract +@rm -f $@.new +$(XGETTEXT) --keyword=_ --keyword=N_ --add-comments=TRANS --sort-by-file \ + --omit-header -E -n -d - --flag=error:3:c-format \ + $(XGETTEXTFLAGS-$(@F)) > $@.new \ + $(filter-out tst-%,$(filter-out $(objpfx)distinfo,$^)) /dev/null +mv -f $@.new $@ +endef + +text-srcs := $(filter %.c %.h %.cc %.C %.bash.in,$(tags_sources)) +$P/$(domain).pot: $(objpfx)distinfo $(text-srcs) +ifeq (,$(text-srcs)) + cp /dev/null $@ +else + $(extract) +endif + +all-pot = $P/libc-top.pot $P/subdirs.pot + +ifndef subdir +# Collect all the subdir messages, massaging the file names in comments +# to include the subdir name. +$P/subdirs.pot: $(subdirs:%=$P/%.pot) + @rm -f $@.new + (for d in $(subdirs); \ + do sed "/^#:/s% % $$d/%g" $P/$$d.pot; done) > $@.new + mv -f $@.new $@ + +# Combine all the messages into the final sorted template translation file. +# The following code requires GNU date. +$P/libc.pot: $(all-pot) + @rm -f $@.new + set `date -R`; disp="$$6"; \ + sed -e 's/VERSION/$(version)/' \ + -e "s/DATE/`date +'%Y-%m-%d %H:%M'$$disp`/" \ + po/header.pot > $@.new + $(XGETTEXT) -d - --omit-header -E -n $^ >> $@.new + mv -f $@.new $@ +ifeq ($(with-cvs),yes) + test ! -d CVS || cvs $(CVSOPTS) ci -m'Regenerated from source files' $@ +endif + +$(subdirs:%=$P/%.pot): $P/%.pot: FORCE + $(MAKE) -C $* $(sub-make-vars) ../$@ +FORCE: +endif