2015-11-03 16:05:12 -02:00
# git.mk, a small Makefile to autogenerate .gitignore files
# for autotools-based projects.
2012-03-30 02:43:26 +02:00
#
2015-11-05 14:22:35 +00:00
# Copyright (C) 2009 Red Hat, Inc.
2015-11-03 16:05:12 -02:00
# Copyright 2010,2011,2012,2013 Behdad Esfahbod
2012-03-30 02:43:26 +02:00
# Written by Behdad Esfahbod
#
# Copying and distribution of this file, with or without modification,
# is permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
#
2015-11-03 16:05:12 -02:00
# The latest version of this file can be downloaded from:
GIT_MK_URL = https://raw.githubusercontent.com/behdad/git.mk/master/git.mk
#
# Bugs, etc, should be reported upstream at:
# https://github.com/behdad/git.mk
2012-03-30 02:43:26 +02:00
#
# 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. Remember to add that line to new
# Makefile.am files you create in your project, or just rerun the
# "make -f 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 make targets.
#
# 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
# 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
# the directories involved and I'll diagnose.
#
# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
# Makefile.am.sample in the git.mk git repo.
#
# 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,
2015-11-03 16:05:12 -02:00
# gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu, appdata,
# appstream.
#
# This makefile provides the following targets:
2012-03-30 02:43:26 +02:00
#
2015-11-03 16:05:12 -02:00
# - all: "make all" will build all gitignore files.
# - gitignore: makes all gitignore files in the current dir and subdirs.
# - .gitignore: make gitignore file for the current dir.
# - gitignore-recurse: makes all gitignore files in the subdirs.
2012-03-30 02:43:26 +02:00
#
# 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.
#
2015-11-03 16:05:12 -02:00
###############################################################################
# Variables user modules may want to add to toplevel MAINTAINERCLEANFILES:
###############################################################################
#
# Most autotools-using modules should be fine including this variable in their
# toplevel MAINTAINERCLEANFILES:
GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL = \
$( srcdir) /aclocal.m4 \
$( srcdir) /autoscan.log \
$( srcdir) /configure.scan \
` AUX_DIR = $( srcdir) /$$ ( cd $( top_srcdir) ; $( AUTOCONF) --trace 'AC_CONFIG_AUX_DIR:$$1' ./configure.ac) ; \
test " x $$ AUX_DIR " = " x $( srcdir) / " && AUX_DIR = $( srcdir) ; \
for x in \
ar-lib \
compile \
config.guess \
config.sub \
depcomp \
install-sh \
ltmain.sh \
missing \
mkinstalldirs \
test-driver \
ylwrap \
; do echo " $$ AUX_DIR/ $$ x " ; done ` \
` cd $( top_srcdir) ; $( AUTOCONF) --trace 'AC_CONFIG_HEADERS:$$1' ./configure.ac | \
head -n 1 | while read f; do echo " $( srcdir) / $$ f.in " ; done `
#
# All modules should also be fine including the following variable, which
# removes automake-generated Makefile.in files:
GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN = \
` cd $( top_srcdir) ; $( AUTOCONF) --trace 'AC_CONFIG_FILES:$$1' ./configure.ac | \
while read f; do \
case $$ f in Makefile| */Makefile) \
test -f " $( srcdir) / $$ f.am " && echo " $( srcdir) / $$ f.in " ; ; esac ; \
done `
#
# Modules that use libtool and use AC_CONFIG_MACRO_DIR() may also include this,
# though it's harmless to include regardless.
GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL = \
` MACRO_DIR = $( srcdir) /$$ ( cd $( top_srcdir) ; $( AUTOCONF) --trace 'AC_CONFIG_MACRO_DIR:$$1' ./configure.ac) ; \
if test " x $$ MACRO_DIR " != " x $( srcdir) / " ; then \
for x in \
libtool.m4 \
ltoptions.m4 \
ltsugar.m4 \
ltversion.m4 \
lt~obsolete.m4 \
; do echo " $$ MACRO_DIR/ $$ x " ; done ; \
fi `
###############################################################################
# Default rule is to install ourselves in all Makefile.am files:
###############################################################################
2012-03-30 02:43:26 +02:00
git-all : git -mk -install
git-mk-install :
2015-11-03 16:05:12 -02:00
@echo "Installing git makefile"
2012-03-30 02:43:26 +02:00
@any_failed= ; \
find "`test -z " $( top_srcdir) " && echo . || echo " $( top_srcdir) "`" -name Makefile.am | while read x; do \
if grep 'include .*/git.mk' $$ x >/dev/null; then \
2015-11-03 16:05:12 -02:00
echo " $$ x already includes git.mk " ; \
2012-03-30 02:43:26 +02:00
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 \
2015-11-03 16:05:12 -02:00
echo " Failed updating $$ x " ; >& 2 \
2012-03-30 02:43:26 +02:00
any_failed = 1; \
fi ; \
fi ; done ; test -z " $$ any_failed "
2015-11-03 16:05:12 -02:00
git-mk-update :
wget $( GIT_MK_URL) -O $( top_srcdir) /git.mk
.PHONY : git -all git -mk -install git -mk -update
2012-03-30 02:43:26 +02:00
2015-11-03 16:05:12 -02:00
###############################################################################
# Actual .gitignore generation:
###############################################################################
2012-03-30 02:43:26 +02:00
$(srcdir)/.gitignore : Makefile .am $( top_srcdir ) /git .mk
2015-11-03 16:05:12 -02:00
@echo " git.mk: Generating $@ "
@{ \
2015-11-05 14:22:35 +00:00
if test " x $( DOC_MODULE) " = x || test " x $( DOC_MAIN_SGML_FILE) " = x; then :; else \
2012-03-30 02:43:26 +02:00
for x in \
$( DOC_MODULE) -decl-list.txt \
$( DOC_MODULE) -decl.txt \
tmpl/$( DOC_MODULE) -unused.sgml \
"tmpl/*.bak" \
2015-11-03 16:05:12 -02:00
$( REPORT_FILES) \
$( DOC_MODULE) .pdf \
2012-03-30 02:43:26 +02:00
xml html \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x " ; done ; \
FLAVOR = $$ ( cd $( top_srcdir) ; $( AUTOCONF) --trace 'GTK_DOC_CHECK:$$2' ./configure.ac) ; \
case $$ FLAVOR in *no-tmpl*) echo /tmpl; ; esac ; \
if echo " $( SCAN_OPTIONS) " | grep -q "\-\-rebuild-types" ; then \
echo " / $( DOC_MODULE) .types " ; \
fi ; \
if echo " $( SCAN_OPTIONS) " | grep -q "\-\-rebuild-sections" ; then \
echo " / $( DOC_MODULE) -sections.txt " ; \
fi ; \
if test " $( abs_srcdir) " != " $( abs_builddir) " ; then \
for x in \
$( SETUP_FILES) \
$( DOC_MODULE) .types \
; do echo " / $$ x " ; done ; \
fi ; \
2012-03-30 02:43:26 +02:00
fi ; \
2015-11-05 14:22:35 +00:00
if test " x $( DOC_MODULE) $( DOC_ID) " = x || test " x $( DOC_LINGUAS) " = x; then :; else \
2015-11-03 16:05:12 -02:00
for lc in $( DOC_LINGUAS) ; do \
for x in \
$( if $( DOC_MODULE) ,$( DOC_MODULE) .xml) \
$( DOC_PAGES) \
$( DOC_INCLUDES) \
; do echo " / $$ lc/ $$ x " ; done ; \
done ; \
2012-03-30 02:43:26 +02:00
for x in \
$( _DOC_OMF_ALL) \
$( _DOC_DSK_ALL) \
$( _DOC_HTML_ALL) \
$( _DOC_MOFILES) \
$( DOC_H_FILE) \
"*/.xml2po.mo" \
"*/*.omf.out" \
; do echo /$$ x; done ; \
fi ; \
2015-11-05 14:22:35 +00:00
if test " x $( HELP_ID) " = x || test " x $( HELP_LINGUAS) " = x; then :; else \
2015-11-03 16:05:12 -02:00
for lc in $( HELP_LINGUAS) ; do \
for x in \
$( HELP_FILES) \
" $$ lc.stamp " \
" $$ lc.mo " \
; do echo " / $$ lc/ $$ x " ; done ; \
done ; \
2012-03-30 02:43:26 +02:00
fi ; \
if test " x $( gsettings_SCHEMAS) " = x; then :; else \
for x in \
$( gsettings_SCHEMAS:.xml= .valid) \
$( gsettings__enum_file) \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x " ; done ; \
fi ; \
if test " x $( appdata_XML) " = x; then :; else \
for x in \
$( appdata_XML:.xml= .valid) \
; do echo " / $$ x " ; done ; \
fi ; \
if test " x $( appstream_XML) " = x; then :; else \
for x in \
$( appstream_XML:.xml= .valid) \
; do echo " / $$ x " ; done ; \
2012-03-30 02:43:26 +02:00
fi ; \
if test -f $( srcdir) /po/Makefile.in.in; then \
for x in \
po/Makefile.in.in \
2015-11-03 16:05:12 -02:00
po/Makefile.in.in~ \
2012-03-30 02:43:26 +02:00
po/Makefile.in \
po/Makefile \
2015-11-03 16:05:12 -02:00
po/Makevars.template \
2012-03-30 02:43:26 +02:00
po/POTFILES \
2015-11-03 16:05:12 -02:00
po/Rules-quot \
2012-03-30 02:43:26 +02:00
po/stamp-it \
po/.intltool-merge-cache \
"po/*.gmo" \
2015-11-03 16:05:12 -02:00
"po/*.header" \
2012-03-30 02:43:26 +02:00
"po/*.mo" \
2015-11-03 16:05:12 -02:00
"po/*.sed" \
"po/*.sin" \
2012-03-30 02:43:26 +02:00
po/$( GETTEXT_PACKAGE) .pot \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x " ; done ; \
2012-03-30 02:43:26 +02:00
fi ; \
if test -f $( srcdir) /configure; then \
for x in \
autom4te.cache \
configure \
config.h \
stamp-h1 \
libtool \
config.lt \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x " ; done ; \
2012-03-30 02:43:26 +02:00
fi ; \
if test " x $( DEJATOOL) " = x; then :; else \
for x in \
$( DEJATOOL) \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x.sum " ; echo " / $$ x.log " ; done ; \
2012-03-30 02:43:26 +02:00
echo /site.exp; \
fi ; \
2015-11-03 16:05:12 -02:00
if test " x $( am__dirstamp) " = x; then :; else \
echo " $( am__dirstamp) " ; \
fi ; \
2015-11-05 14:22:35 +00:00
if test " x $( LTCOMPILE) " = x && test " x $( LTCXXCOMPILE) " = x && test " x $( GTKDOC_RUN) " = x; then :; else \
2015-11-03 16:05:12 -02:00
for x in \
"*.lo" \
".libs" "_libs" \
; do echo " $$ x " ; done ; \
fi ; \
2012-03-30 02:43:26 +02:00
for x in \
.gitignore \
$( GITIGNOREFILES) \
$( CLEANFILES) \
2015-11-03 16:05:12 -02:00
$( PROGRAMS) $( check_PROGRAMS) $( EXTRA_PROGRAMS) \
$( LIBRARIES) $( check_LIBRARIES) $( EXTRA_LIBRARIES) \
$( LTLIBRARIES) $( check_LTLIBRARIES) $( EXTRA_LTLIBRARIES) \
2012-03-30 02:43:26 +02:00
so_locations \
$( MOSTLYCLEANFILES) \
2015-11-03 16:05:12 -02:00
$( TEST_LOGS) \
$( TEST_LOGS:.log= .trs) \
$( TEST_SUITE_LOG) \
$( TESTS:= .test) \
"*.gcda" \
"*.gcno" \
2012-03-30 02:43:26 +02:00
$( DISTCLEANFILES) \
$( am__CONFIG_DISTCLEAN_FILES) \
$( CONFIG_CLEAN_FILES) \
TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
"*.tab.c" \
$( MAINTAINERCLEANFILES) \
$( BUILT_SOURCES) \
2015-11-03 16:05:12 -02:00
$( patsubst %.vala,%.c,$( filter %.vala,$( SOURCES) ) ) \
$( filter %_vala.stamp,$( DIST_COMMON) ) \
$( filter %.vapi,$( DIST_COMMON) ) \
$( filter $( addprefix %,$( notdir $( patsubst %.vapi,%.h,$( filter %.vapi,$( DIST_COMMON) ) ) ) ) ,$( DIST_COMMON) ) \
2012-03-30 02:43:26 +02:00
Makefile \
Makefile.in \
"*.orig" \
"*.rej" \
"*.bak" \
"*~" \
".*.sw[nop]" \
".dirstamp" \
2015-11-03 16:05:12 -02:00
; do echo " / $$ x " ; done ; \
for x in \
" *. $( OBJEXT) " \
$( DEPDIR) \
; do echo " $$ x " ; done ; \
2012-03-30 02:43:26 +02:00
} | \
sed "s@^/`echo " $( srcdir) " | sed 's/\(.\)/[\1]/g'`/@/@" | \
sed 's@/[.]/@/@g' | \
LC_ALL = C sort | uniq > $@ .tmp && \
mv $@ .tmp $@ ;
all : $( srcdir ) /.gitignore gitignore -recurse -maybe
2015-11-03 16:05:12 -02:00
gitignore : $( srcdir ) /.gitignore gitignore -recurse
2012-03-30 02:43:26 +02:00
gitignore-recurse-maybe :
@for subdir in $( DIST_SUBDIRS) ; do \
case " $( SUBDIRS) " in \
*" $$ subdir " *) :; ; \
2015-11-05 14:22:35 +00:00
*) test " $$ subdir " = . || test -e " $$ subdir/.git " || ( cd $$ subdir && $( MAKE) $( AM_MAKEFLAGS) gitignore || echo " Skipping $$ subdir " ) ; ; \
2012-03-30 02:43:26 +02:00
esac ; \
done
2015-11-03 16:05:12 -02:00
gitignore-recurse :
@for subdir in $( DIST_SUBDIRS) ; do \
2015-11-05 14:22:35 +00:00
test " $$ subdir " = . || test -e " $$ subdir/.git " || ( cd $$ subdir && $( MAKE) $( AM_MAKEFLAGS) gitignore || echo " Skipping $$ subdir " ) ; \
2015-11-03 16:05:12 -02:00
done
2012-03-30 02:43:26 +02:00
maintainer-clean : gitignore -clean
gitignore-clean :
-rm -f $( srcdir) /.gitignore
.PHONY : gitignore -clean gitignore gitignore -recurse gitignore -recurse -maybe