diff --git a/Makefile.am.in b/Makefile.am.in
index c65c1cdde367a3bc51126632734b8fb1f1626bde..d8da2c8a65554933a290a31882064bb0a0df9079 100644
--- a/Makefile.am.in
+++ b/Makefile.am.in
@@ -72,28 +72,4 @@ depend:
 
 MAINTAINERCLEANFILES += $(DEP_FILES)
 
-.PHONY: ctags-recursive ctags
-
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  (cd $$subdir && $(MAKE) ctags); \
-	done
-
-ctags: ctags-recursive $(HEADERS) $(SOURCES) $(CONFIG_HEADER) $(TAGS_DEPENDENCIES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test -f $$subdir/tags && tags="$$tags $$here/$$subdir/tags"; \
-	done; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$(CONFIG_HEADER)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && ctags --langmap=c:.c.x -o $$here/tags $(CTAGS_ARGS) $$tags $(CONFIG_HEADER) $$unique $(LISP))
-# This treats .h.x files as C files rather than headers, but we can't
-# distinguish them from .c.x files with ctags.
-
-# Override the standard distclean-tags target, as this doesn't support `tags'
-distclean-tags:
-	-rm -f TAGS ID tags
+include $(top_srcdir)/misc/ctags.mk
diff --git a/include/Makefile.am.in b/include/Makefile.am.in
index f13a9be60548c52b938fced1201176aca299b642..facd52b58ceffffb4463e2127080b25d2c44cfb7 100644
--- a/include/Makefile.am.in
+++ b/include/Makefile.am.in
@@ -7,28 +7,4 @@ EXTRA_DIST = $(cvs_headers) Makefile.am.in
 Makefile.am: Makefile.am.in
 	(cd $(top_srcdir); ./make_am)
 
-.PHONY: ctags-recursive ctags
-
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  (cd $$subdir && $(MAKE) ctags); \
-	done
-
-ctags: ctags-recursive $(HEADERS) $(SOURCES) $(CONFIG_HEADER) $(TAGS_DEPENDENCIES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test -f $$subdir/tags && tags="$$tags $$here/$$subdir/tags"; \
-	done; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$(CONFIG_HEADER)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && ctags --langmap=c:.c.x -o $$here/tags $(CTAGS_ARGS) $$tags $(CONFIG_HEADER) $$unique $(LISP))
-# This treats .h.x files as C files rather than headers, but we can't
-# distinguish them from .c.x files with ctags.
-
-# Override the standard distclean-tags target, as this doesn't support `tags'
-distclean-tags:
-	-rm -f TAGS ID tags
+include $(top_srcdir)/misc/ctags.mk