-TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(S_FILE)
- ../lib-src/etags --include=TAGS-LISP --include=$(lwlibdir)/TAGS \
- --regex='/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/' \
- $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(S_FILE)
-frc:
-TAGS-LISP: frc
- $(MAKE) -f $(lispdir)/Makefile TAGS-LISP ETAGS=../lib-src/etags
+ctagsfiles1 = [xyzXYZ]*.[hc]
+ctagsfiles2 = [a-wA-W]*.[hc]
+ctagsfiles3 = [a-zA-Z]*.m
+
+## FIXME? In out-of-tree builds, should TAGS be generated in srcdir?
+
+## This does not need to depend on ../lisp and ../lwlib TAGS files,
+## because etags "--include" only includes a pointer to the file,
+## rather than the file contents.
+TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) $(srcdir)/$(ctagsfiles3)
+ "$(ETAGS)" --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
+ --regex='{c}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/' \
+ $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) \
+ --regex='{objc}/[ ]*DEFVAR_[A-Z_ (]+"\([^"]+\)"/' \
+ $(srcdir)/$(ctagsfiles3)
+
+## Arrange to make tags tables for ../lisp and ../lwlib,
+## which the above TAGS file for the C files includes by reference.
+../lisp/TAGS:
+ cd ../lisp && $(MAKE) TAGS ETAGS="$(ETAGS)"