git.mk 5.21 KB
Newer Older
Behdad Esfahbod's avatar
Behdad Esfahbod committed
1 2
# git.mk
#
3
# Copyright 2009, Red Hat, Inc.
Behdad Esfahbod's avatar
Behdad Esfahbod committed
4 5
# Written by Behdad Esfahbod
#
6 7 8 9
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
#
Behdad Esfahbod's avatar
Behdad Esfahbod committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
# The canonical source for this file is pango/git.mk, or whereever the
# header of pango/git.mk suggests in the future.
#
# To use in your project, import this file in your git repo's toplevel,
# then do "make -f git.mk".  This modifies all Makefile.am files in
# your project to include git.mk.
#
# This enables automatic .gitignore generation.  If you need to ignore
# more files, add them to the GITIGNOREFILES variable in your Makefile.am.
# But think twice before doing that.  If a file has to be in .gitignore,
# chances are very high that it's a generated file and should be in one
# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES.
#
# The only case that you need to manually add a file to GITIGNOREFILES is
# when remove files in one of mostlyclean-local, clean-local, distclean-local,
# or maintainer-clean-local.
#
# Note that for files like editor backup, etc, there are better places to
# ignore them.  See "man gitignore".
#
# If "make maintainer-clean" removes the files but they are not recognized
Behdad Esfahbod's avatar
Behdad Esfahbod committed
31 32
# by this script (that is, if "git status" shows untracked files still), send
# me the output of "git status" as well as your Makefile.am and Makefile for
Behdad Esfahbod's avatar
Behdad Esfahbod committed
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
# the directories involved.
#
# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
# pango/Makefile.am.
#
# Don't EXTRA_DIST this file.  It is supposed to only live in git clones,
# not tarballs.  It serves no useful purpose in tarballs and clutters the
# build dir.
#
# This file knows how to handle autoconf, automake, libtool, gtk-doc,
# gnome-doc-utils, intltool.
#
#
# KNOWN ISSUES:
#
# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the
#   submodule doesn't find us.  If you have configure.{in,ac} files in
#   subdirs, add a proxy git.mk file in those dirs that simply does:
#   "include $(top_srcdir)/../git.mk".  Add more ..'s to your taste.
#   And add those files to git.  See vte/gnome-pty-helper/git.mk for
#   example.
#

git-all: git-mk-install

git-mk-install:
	@echo Installing git makefile
	@any_failed=; find $(top_srcdir) -name Makefile.am | while read x; do \
		if grep 'include .*/git.mk' $$x >/dev/null; then \
			echo $$x already includes git.mk; \
		else \
			failed=; \
			echo "Updating $$x"; \
			{ cat $$x; \
			  echo ''; \
			  echo '-include $$(top_srcdir)/git.mk'; \
			} > $$x.tmp || failed=1; \
			if test x$$failed = x; then \
				mv $$x.tmp $$x || failed=1; \
			fi; \
			if test x$$failed = x; then : else \
				echo Failed updating $$x; >&2 \
				any_failed=1; \
			fi; \
	fi; done; test -z "$$any_failed"

.PHONY: git-all git-mk-install


### .gitignore generation

84
$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk
Behdad Esfahbod's avatar
Behdad Esfahbod committed
85
	@echo Generating $@; \
Behdad Esfahbod's avatar
Behdad Esfahbod committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
	{ \
		if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \
			for x in \
				$(DOC_MODULE)-decl-list.txt \
				$(DOC_MODULE)-decl.txt \
				tmpl/$(DOC_MODULE)-unused.sgml \
				"tmpl/*.bak" \
				xml html \
			; do echo /$$x; done; \
		fi; \
		if test "x$(DOC_MODULE)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \
			for x in \
				$(_DOC_C_DOCS) \
				$(_DOC_LC_DOCS) \
				$(_DOC_OMF_ALL) \
				$(_DOC_DSK_ALL) \
				$(_DOC_HTML_ALL) \
				$(_DOC_POFILES) \
				"*/.xml2po.mo" \
				"*/*.omf.out" \
			; do echo /$$x; done; \
		fi; \
		if test -f $(srcdir)/po/Makefile.in.in; then \
			for x in \
				po/Makefile.in.in \
				po/Makefile.in \
				po/Makefile \
				po/POTFILES \
				po/stamp-it \
				po/.intltool-merge-cache \
				"po/*.gmo" \
				"po/*.mo" \
				intltool-extract.in \
				intltool-merge.in \
				intltool-update.in \
			; do echo /$$x; done; \
		fi; \
		if test -f $(srcdir)/configure; then \
			for x in \
				autom4te.cache \
				configure \
				config.h \
				stamp-h1 \
				libtool \
				config.lt \
			; do echo /$$x; done; \
		fi; \
		for x in \
			.gitignore \
			$(GITIGNOREFILES) \
			$(CLEANFILES) \
			$(PROGRAMS) \
			$(EXTRA_PROGRAMS) \
			$(LTLIBRARIES) \
			so_locations \
			.libs _libs \
			$(MOSTLYCLEANFILES) \
			"*.$(OBJEXT)" \
			"*.lo" \
			$(DISTCLEANFILES) \
			$(am__CONFIG_DISTCLEAN_FILES) \
			$(CONFIG_CLEAN_FILES) \
			TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
			"*.tab.c" \
			$(MAINTAINERCLEANFILES) \
			$(BUILT_SOURCES) \
			$(DEPDIR) \
			Makefile \
			Makefile.in \
			"*.orig" \
			"*.rej" \
			"*.bak" \
			"*~" \
			".*.sw[nop]" \
		; do echo /$$x; done; \
	} | \
162
	sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \
Behdad Esfahbod's avatar
Behdad Esfahbod committed
163 164 165 166
	sed 's@/[.]/@/@g' | \
	LANG=C sort | uniq > $@.tmp && \
	mv $@.tmp $@;

Behdad Esfahbod's avatar
Behdad Esfahbod committed
167 168
all: $(srcdir)/.gitignore gitignore-recurse-maybe
gitignore-recurse-maybe:
Behdad Esfahbod's avatar
Behdad Esfahbod committed
169
	@if test "x$(SUBDIRS)" = "x$(DIST_SUBDIRS)"; then :; else \
Behdad Esfahbod's avatar
Behdad Esfahbod committed
170
		$(MAKE) $(AM_MAKEFLAGS) gitignore-recurse; \
Behdad Esfahbod's avatar
Behdad Esfahbod committed
171
	fi;
Behdad Esfahbod's avatar
Behdad Esfahbod committed
172 173 174 175 176 177
gitignore-recurse:
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse); \
	done
gitignore: $(srcdir)/.gitignore gitignore-recurse

Behdad Esfahbod's avatar
Behdad Esfahbod committed
178
maintainer-clean: gitignore-clean
Behdad Esfahbod's avatar
Behdad Esfahbod committed
179
gitignore-clean:
Behdad Esfahbod's avatar
Behdad Esfahbod committed
180
	-rm -f $(srcdir)/.gitignore
Behdad Esfahbod's avatar
Behdad Esfahbod committed
181

Behdad Esfahbod's avatar
Behdad Esfahbod committed
182
.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe