| # Make the TAGS files. |
| |
| # Copyright (C) 1992, 1994, 1995, 1996, 1998 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. |
| |
| # 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. |
| |
| # 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., 59 Temple Place - Suite 330, |
| # Boston, MA 02111-1307, USA. |
| |
| # Make this the default goal. |
| TAGS: |
| |
| ifdef subdir |
| .. := ../ |
| endif |
| |
| include $(..)Makeconfig |
| |
| 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) $(all-dist) |
| else # Not ctype. |
| tags_sources = $(all-sources) $(all-headers) $(all-dist) |
| endif # ctype |
| endif # No tags_sources |
| |
| sysdep-dirs := $(full-config-sysdirs) |
| |
| ifndef sysdep_dirs |
| # Find all sysdep directories. |
| sysdep_dirs := $(shell find $(..)sysdeps \ |
| $(wildcard \ |
| $(patsubst %,$(..)%/sysdeps,$(add-ons))) \ |
| -type d ! -name RCS ! -name CVS -print) |
| endif |
| |
| # Find all sysdep dirs there are, but putting the ones |
| # we are configured to use first and preserving their order. |
| all-dirs := $(subdir-dirs) \ |
| $(objdir) \ |
| $(sysdep-dirs) \ |
| $(source_dirs) \ |
| $(filter-out $(sysdep-dirs),$(sysdep_dirs)) |
| |
| # Find all the subdirs there are, but putting the ones |
| # we are configured to use first and preserving their order. |
| ifndef subdir |
| subdirs := $(subdirs) \ |
| $(filter-out $(subdirs),\ |
| $(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. |
| # 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) $(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)) |
| |
| TAGS: $(tags_sources) |
| ifdef subdir |
| ifdef tags_sources |
| $(ETAGS) -o $@ $^ |
| else |
| # No sources. Create a dummy file. |
| touch $@ |
| endif # tags_sources |
| else # parent |
| TAGS: subdir_TAGS |
| # Note that this uses the -i switch, and thus requires v19 etags. |
| $(ETAGS) -o $@ \ |
| $(subdirs:%=-i %/TAGS) \ |
| $(filter-out subdir_TAGS,$^) |
| |
| .PHONY: subdir_TAGS $(subdirs:%=%/TAGS) |
| subdir_TAGS: $(subdirs:%=%/TAGS) |
| $(subdirs:%=%/TAGS): |
| $(MAKE) -C $(@D) no_deps=t $(@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-output \ |
| --omit-header -n -d - $(XGETTEXTFLAGS-$(@F)) > $@.new $^ |
| mv -f $@.new $@ |
| endef |
| |
| text-srcs := $(filter %.c %.h %.cc %.C,$(tags_sources)) |
| $P/$(domain).pot: $(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 -n -s $^ >> $@.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 $* no_deps=t ../$@ |
| FORCE: |
| endif |