#
# Copyright (C) 2005 Axel Liljencrantz
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#

#
# @configure_input@
#

#
# Makefile for the fish shell. Can build fish and associated
# applications, install them, recalculate dependencies and also create
# binary distributions in tar.bz2 tar.gz and rpm formats.
#

#
# The fish buildprocess is quite complex. Do not stare directly into
# the Makefile. Doing so may cause nausea, dizziness and
# hallucinations.
#

# Programs
CC := @CC@
INSTALL:=@INSTALL@

CFLAGS:=@CFLAGS@
CPPFLAGS=@CPPFLAGS@
LDFLAGS:= @LIBS@ @LDFLAGS@ 

# Installation directories
prefix = @prefix@
exec_prefix = @exec_prefix@
datadir = @datadir@
bindir = @bindir@
mandir = @mandir@
sysconfdir = @sysconfdir@
fishinputfile = @fishinputfile@
docdir = @docdir@

#etc files to install
ETC_DIR_INSTALL = etc/fish_interactive.fish 

# Set to 1 if we have gettext
HAVE_GETTEXT=@HAVE_GETTEXT@

CORE_OBJS := util.o common.o halloc.o halloc_util.o fallback.o

# All objects used by fish, that are compiled from an ordinary .c file
# using an ordinary .h file.
COMMON_OBJS := function.o builtin.o complete.o env.o exec.o	\
	expand.o highlight.o history.o kill.o parser.o proc.o reader.o		\
	sanity.o tokenizer.o wildcard.o wgetopt.o wutil.o input.o	\
	output.o intern.o env_universal.o env_universal_common.o			\
	input_common.o event.o signal.o io.o translate.o parse_util.o		\
	$(CORE_OBJS)

# builtin_help.h exists, but builtin_help.c is autogenerated
COMMON_OBJS_WITH_HEADER := builtin_help.o

# main.c exists, but main.h does not, etc.
COMMON_OBJS_WITH_CODE := builtin_set.o builtin_commandline.o	\
	builtin_ulimit.o builtin_complete.o builtin_jobs.o

# All objects that the system needs to build fish
FISH_OBJS := $(COMMON_OBJS) $(COMMON_OBJS_WITH_CODE)	\
	$(COMMON_OBJS_WITH_HEADER) main.o

# All objects that the system needs to build fish_pager
FISH_PAGER_OBJS := fish_pager.o output.o wutil.o		\
	tokenizer.o input_common.o env_universal.o env_universal_common.o	\
	translate.o $(CORE_OBJS)

# All objects that the system needs to build fish_tests
FISH_TESTS_OBJS := $(COMMON_OBJS) $(COMMON_OBJS_WITH_CODE)	\
	$(COMMON_OBJS_WITH_HEADER) fish_tests.o

# All objects that the system needs to build fishd
FISHD_OBJS := fishd.o env_universal_common.o wutil.o	\
	doc_src/fishd.o $(CORE_OBJS)

# All objects needed to build mimedb
MIME_OBJS := mimedb.o xdgmimealias.o xdgmime.o xdgmimeglob.o		\
	xdgmimeint.o xdgmimemagic.o xdgmimeparent.o wutil.o $(CORE_OBJS)

#
# Files containing documentation for builtins. Should be listed
# alphabetically, since this is the order in which they will be written
# in the help file.
#
BUILTIN_DOC_SRC := doc_src/source.txt doc_src/and.txt					\
	doc_src/begin.txt doc_src/bg.txt doc_src/bind.txt					\
	doc_src/block.txt doc_src/break.txt doc_src/builtin.txt				\
	doc_src/case.txt doc_src/cd.txt doc_src/command.txt					\
	doc_src/commandline.txt doc_src/complete.txt doc_src/continue.txt	\
	doc_src/else.txt doc_src/end.txt doc_src/eval.txt doc_src/exec.txt	\
	doc_src/exit.txt doc_src/fg.txt doc_src/for.txt						\
	doc_src/function.txt doc_src/functions.txt doc_src/if.txt			\
	doc_src/jobs.txt doc_src/not.txt doc_src/or.txt doc_src/random.txt	\
	doc_src/return.txt doc_src/read.txt doc_src/set.txt					\
	doc_src/status.txt doc_src/switch.txt doc_src/ulimit.txt			\
	doc_src/while.txt

#
# Files generated by running doxygen on the files in $(BUILTIN_DOC_SRC)
#
BUILTIN_DOC_HDR := $(BUILTIN_DOC_SRC:.txt=.doxygen)

#
# Files containing documentation for external commands. Should be listed
# alphabetically, since this is the order in which they will be written
# in the help file.
#
CMD_DOC_SRC := doc_src/contains.txt doc_src/count.txt doc_src/dirh.txt	\
	doc_src/dirs.txt doc_src/fish_pager.txt doc_src/fishd.txt			\
	doc_src/help.txt doc_src/mimedb.txt doc_src/nextd.txt				\
	doc_src/open.txt doc_src/popd.txt doc_src/prevd.txt					\
	doc_src/psub.txt doc_src/pushd.txt doc_src/set_color.txt			\
	doc_src/trap.txt doc_src/type.txt doc_src/umask.txt					\
	doc_src/vared.txt

#
# Files generated by running doxygen on the files in $(CMD_DOC_SRC)
#
CMD_DOC_HDR := $(CMD_DOC_SRC:.txt=.doxygen)

#
# Files in the test directory
#
TEST_IN := $(wildcard tests/test*.in)

#
# Files that should be added to the tar archives
#

# Files in ./doc_src/
DOC_SRC_DIR_FILES := doc_src/Doxyfile.in doc_src/doc.hdr	\
	$(BUILTIN_DOC_SRC) $(CMD_DOC_SRC) doc_src/fish.1.in

# Files in ./
MAIN_DIR_FILES := Doxyfile Doxyfile.user Makefile.in configure			\
    configure.ac config.h.in install-sh set_color.c count.c				\
    key_reader.c gen_hdr.sh gen_hdr2.c $(MIME_OBJS:.o=.h)				\
    $(MIME_OBJS:.o=.c) $(COMMON_OBJS_WITH_HEADER:.o=.h)					\
    $(COMMON_OBJS:.o=.h) $(COMMON_OBJS_WITH_CODE:.o=.c)					\
    $(COMMON_OBJS:.o=.c) builtin_help.hdr fish.spec.in INSTALL README	\
    user_doc.head.html xsel-0.9.6.tar ChangeLog config.sub				\
    config.guess fish_tests.c main.c fish_pager.c fishd.c seq.in

# Files in ./etc/
ETC_DIR_FILES :=etc/fish.in etc/fish_inputrc	\
	etc/fish_interactive.fish.in

# Files in ./share/
SHARE_DIR_FILES :=share/fish.in

# Files in ./tests/
TESTS_DIR_FILES := $(TEST_IN) $(TEST_IN:.in=.out) $(TEST_IN:.in=.err)	\
	$(TEST_IN:.in=.status) tests/test.fish tests/gen_output.fish

# Files in ./share/completions/
COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish)

# Files in ./share/functions/
FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish)

# Programs to build
PROGRAMS:=fish set_color @XSEL@ @SEQ_FALLBACK@ mimedb count fish_pager fishd

# Manuals to install
MANUALS:=doc_src/fish.1 @XSEL_MAN_PATH@			\
	doc_src/builtin_doc/man/man1/mimedb.1		\
	doc_src/builtin_doc/man/man1/set_color.1	\
	doc_src/builtin_doc/man/man1/count.1 \
	doc_src/builtin_doc/man/man1/fishd.1 \
	doc_src/builtin_doc/man/man1/fish_pager.1

#All translation message catalogs
TRANSLATIONS_SRC := $(wildcard po/*.po)
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)

#Make everything needed for installing fish
all: $(PROGRAMS) user_doc
	@echo fish has now been built. 
	@echo Use \'make install\' to install fish.
.PHONY: all

configure: configure.ac
	./config.status --recheck

Makefile: Makefile.in configure
	./config.status

debug:
	make fish CFLAGS="@CFLAGS@ -O0 -Wno-unused -Werror -g"
.PHONY: debug

# User documentation, describing the features of the fish shell.
user_doc: doc.h Doxyfile.user user_doc.head.html
	doxygen Doxyfile.user

# Source code documentation. Also includes user documentation.
doc: *.h *.c doc.h Doxyfile builtin_help.c
	doxygen; 

# PDF version of the source code documentation.
doc/refman.pdf: doc 
	cd doc/latex; 
	make; 
	mv refman.pdf ..; 
	cd ../..; 
	rm -r doc/latex;

test: $(PROGRAMS) fish_tests
	./fish_tests; cd tests; ../fish <test.fish;
.PHONY: test

xsel-0.9.6:
	tar -xf xsel-0.9.6.tar

xsel-0.9.6/xsel: xsel-0.9.6
	cd xsel-0.9.6; ./configure; make

# doc.h is a compilation of the various snipptes of text used both for
# the user documentation and for internal help functions into a single
# file that can be parsed dy Doxygen to generate the user
# documentation.
doc.h:$(BUILTIN_DOC_SRC) $(CMD_DOC_SRC) doc_src/doc.hdr
	cat doc_src/doc.hdr >doc.h; 
	echo "/** \page builtins Builtin commands" >>doc.h; 
	cat $(BUILTIN_DOC_SRC) >>doc.h; 
	echo "*/" >>doc.h
	echo "/** \page commands External commands" >>doc.h; 
	echo "\c fish is shipped with commands which do not use any internal parts of the shell, and are therefore not written as builtins, but separate commands." >>doc.h
	cat $(CMD_DOC_SRC) >>doc.h; 
	echo "*/" >>doc.h

# This rule creates complete doxygen headers from each of the various
# snipptes of text used both for the user documentation and for
# internal help functions, that can be parsed to Doxygen to generate
# the internal help function text.
%.doxygen:%.txt
	echo  "/** \page " `basename $*` >$@; 
	cat $*.txt >>$@; 
	echo "*/" >>$@

# Compile translation file
%.gmo:
	if test $(HAVE_GETTEXT) = 1; then \
		msgfmt $*.po -o $*.gmo; \
	fi

# Update existing po file or copy messages.pot
%.po:messages.pot
	if test $(HAVE_GETTEXT) = 1;then \
		if test -f $*.po; then \
			msgmerge -U --backup=existing $*.po messages.pot;\
		else \
			cp messages.pot $*.po;\
		fi; \
	fi

# Create a template translation object
messages.pot: *.c *.h etc/*.in share/fish share/completions/*.fish share/functions/*.fish seq
	if test $(HAVE_GETTEXT) = 1;then \
		xgettext -k_ -kN_ *.c *.h -o messages.pot; \
		if ! xgettext -j -k_ -kN_ -LShell etc/*.in share/fish share/completions/*.fish share/functions/*.fish seq -o messages.pot; then \
			echo "Your xgettext version is too old to build the messages.pot file"\
			rm messages.pot\
			false;\
		fi; \
	fi

# Generate the internal help functions by making doxygen create
# man-pages which are then converted into C code. The convertion path
# looks like this: 
#
#   .txt file
#       ||
#     (make)
#       ||
#       \/
#  .doxygen file
#       ||
#    (doxygen)
#       ||
#       \/
#    man file
#       ||
#      (man)
#       ||
#       \/
#   formated text 
#   with escape 
#    sequences
#       ||
#       \/
#   (gen_hdr2)
#       ||
#       \/
#    .c file
#
# Which is an awful, clunky and ugly way of producing
# documentation. There ought to be something simpler.

builtin_help.c: $(BUILTIN_DOC_HDR) doc_src/count.doxygen gen_hdr2 gen_hdr.sh builtin_help.hdr $(CMD_DOC_HDR)
	cd doc_src; doxygen; cd ..; 
	cp builtin_help.hdr builtin_help.c; 
	chmod 755 gen_hdr.sh
	for i in $(BUILTIN_DOC_HDR) doc_src/count.doxygen ; do \
		echo '    hash_put( &tbl, L"'`basename $$i .doxygen`'",' >>$@; \
		./gen_hdr.sh $$i >>$@; \
		echo " );" >>$@; \
		echo >>$@; \
	done;
	echo "}" >>builtin_help.c

#
# Generate help texts for external fish commands, like set_color and
# mimedb. Depends on builtin_help.c to make sure doxygen gets run to
# generate the man files.
#
%.c : %.doxygen gen_hdr2 builtin_help.c
	echo "// This file was automatically generated, do not edit" >$@
	echo "#include <stdlib.h>" >>$@
	echo "#include <stdio.h>" >>$@
	echo >>$@
	echo "void print_help()" >>$@
	echo "{" >>$@
	echo '    printf( "%s",' >>$@
	chmod 755 gen_hdr.sh
	./gen_hdr.sh $*.doxygen >>$@
	echo ");" >>$@
	echo "}" >>$@

#
# The build rules for installing/uninstalling fish
#

# Check for an incompatible installed fish version, and fail with an
# error if found

check-uninstall:
	if test -f $(DESTDIR)$(sysconfdir)/fish.d/fish_function.fish -o -f $(DESTDIR)$(sysconfdir)/fish.d/fish_complete.fish; then \
		echo;\
		echo ERROR;\
		echo;\
		echo An older fish installation using an incompatible filesystem hierarchy was detected;\
		echo You must uninstall this fish version before installing proceeding;\
		echo type \'make uninstall-legacy\' to uninstall these files,;\
		echo or type \'make force-install\' to force installation.;\
		echo The latter may result in a broken installation.;\
		echo;\
		false;\
	fi;
.PHONY: check-uninstall

# Try to install after checking for incompatible installed versions
install: all check-uninstall install-force
.PHONY: install

# Force installation, even in presense of incompatible previous
# version
install-force: all install-translations
	$(INSTALL) -m 755 -d $(DESTDIR)$(bindir) 
	for i in $(PROGRAMS); do\
		$(INSTALL) -m 755 $$i $(DESTDIR)$(bindir) ; \
	done;
	$(INSTALL) -m 755 -d $(DESTDIR)$(sysconfdir)/fish.d
	$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish
	$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/completions
	$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/functions
	$(INSTALL) -m 644 etc/fish $(DESTDIR)$(sysconfdir)/fish
	$(INSTALL) -m 644 share/fish $(DESTDIR)$(datadir)/fish
	for i in $(ETC_DIR_INSTALL); do \
		$(INSTALL) -m 644 $$i $(DESTDIR)$(sysconfdir)/fish.d; \
	done;
	for i in $(COMPLETIONS_DIR_FILES); do \
		$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/completions/; \
	done;
	for i in $(FUNCTIONS_DIR_FILES); do \
		$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/functions/; \
	done;
	$(INSTALL) -m 644 etc/fish_inputrc $(DESTDIR)$(sysconfdir)/fish_inputrc;
	$(INSTALL) -m 755 -d $(DESTDIR)$(docdir)
	for i in user_doc/html/* ChangeLog; do \
		if test -f $$i; then \
			$(INSTALL) -m 644 $$i $(DESTDIR)$(docdir); \
		fi; \
	done;
	$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
	for i in $(MANUALS); do \
		$(INSTALL) -m 644 $$i $(DESTDIR)$(mandir)/man1/; \
	done;
	@echo fish is now installed on your system. 
	@echo To run fish, type \'fish\' in your terminal.
	@echo
	@echo To use fish as your login shell:
	@echo \* add the line \'$(DESTDIR)$(bindir)/fish\' to the file \'/etc/shells\'.
	@echo \* use the command \'chsh -s $(DESTDIR)$(bindir)/fish\'.
	@echo
	@echo Have fun!
.PHONY: install-force


# Uninstall this fish version

uninstall: uninstall-translations
	for i in $(PROGRAMS); do \
		rm -f $(DESTDIR)$(bindir)/$$i; \
	done;
	rm -f $(DESTDIR)$(bindir)/xsel
	rm -f $(DESTDIR)$(sysconfdir)/fish
	rm -f $(DESTDIR)$(sysconfdir)/fish_inputrc
	if test -d $(DESTDIR)$(datadir)/fish; then \
		rm -r $(DESTDIR)$(datadir)/fish; \
	fi
	if test -d $(DESTDIR)$(docdir); then \
		rm -r $(DESTDIR)$(docdir);\
	fi
	for i in fish.1 @XSEL_MAN@ mimedb.1 fishd.1 set_color.1 count.1; do \
		rm -f $(DESTDIR)$(mandir)/man1/$$i*; \
	done;
.PHONY: uninstall

# Uninstall older fish release. This is not the default uninstall
# since there is a slight chance that it removes a file put in place by
# the sysadmin.

uninstall-legacy: uninstall
	rm -f $(DESTDIR)$(sysconfdir)/fish.d/fish_interactive.fish
	rm -f $(DESTDIR)$(sysconfdir)/fish.d/fish_complete.fish
	rm -f $(DESTDIR)$(sysconfdir)/fish.d/fish_function.fish
	if test -d $(DESTDIR)$(sysconfdir)/fish.d/completions; then \
		for i in $(COMPLETIONS_DIR_FILES); do \
			basename=`basename $$i`; \
			if test -f $(DESTDIR)$(sysconfdir)/fish.d/completions/$$basename; then \
				rm $(DESTDIR)$(sysconfdir)/fish.d/completions/$$basename; \
			fi; \
		done; \
	fi;
	rmdir $(DESTDIR)$(sysconfdir)/fish.d/completions; true
	rmdir $(DESTDIR)$(sysconfdir)/fish.d; true
	@echo The previous fish installation has been removed. 
.PHONY: uninstall-legacy

install-translations: $(TRANSLATIONS)
	if test $(HAVE_GETTEXT) = 1; then \
		for i in $(TRANSLATIONS); do \
			$(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES; \
			$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES/fish.mo; \
			echo $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES/fish.mo;\
		done; \
	fi;
.PHONY: install-translations

uninstall-translations: 
	if test $(HAVE_GETTEXT) = 1; then \
		for i in $(TRANSLATIONS_SRC); do \
			rm -f $(DESTDIR)$(datadir)/locale/*/LC_MESSAGES/fish.mo; \
		done; \
	fi
.PHONY: uninstall-translations

#
# The build rules for all the commands
#

fish: $(FISH_OBJS) 
	$(CC) $(FISH_OBJS) $(LDFLAGS) -o $@

fish_pager: $(FISH_PAGER_OBJS)
	$(CC) $(FISH_PAGER_OBJS) $(LDFLAGS) -o $@

fishd: $(FISHD_OBJS) 
	$(CC) $(FISHD_OBJS) $(LDFLAGS) -o $@

fish_tests: $(FISH_TESTS_OBJS)
	$(CC) $(FISH_TESTS_OBJS) $(LDFLAGS) -o $@


mimedb: $(MIME_OBJS) doc_src/mimedb.o
	$(CC) ${MIME_OBJS} doc_src/mimedb.o $(LDFLAGS) -o $@

set_color: set_color.o doc_src/set_color.o 
	$(CC) set_color.o doc_src/set_color.o $(LDFLAGS) -o $@

# Test program for the tokenizer library
tokenizer_test: tokenizer.c tokenizer.h util.o wutil.o common.o
	$(CC) ${CFLAGS} tokenizer.c util.o wutil.o common.o -D TOKENIZER_TEST $(LDFLAGS) -o $@

# Neat little program to show output from terminal
key_reader: key_reader.o input_common.o $(CORE_OBJS) env_universal.o env_universal_common.o wutil.o
	$(CC) key_reader.o input_common.o $(CORE_OBJS) env_universal.o env_universal_common.o wutil.o $(LDFLAGS) -o $@

#
# Update dependencies
#
depend:
	makedepend -fMakefile.in -Y *.c 
	./config.status
.PHONY: depend

# Copy all the source files into a new directory and use tar to create
# an archive from it. Simplest way I could think of to make an archive
# witout backups, autogenerated files, etc.
#
# Uses install instead of mkdir so build won't fail if the directory 
# exists
fish-@PACKAGE_VERSION@.tar: $(DOC_SRC_DIR_FILES) $(MAIN_DIR_FILES) $(ETC_DIR_FILES) $(TEST_DIR_FILES) $(SHARE_DIR_FILES) $(FUNCTIONS_DIR_FILES) $(COMPLETIONS_DIR_FILES) ChangeLog 
	rm -rf fish-@PACKAGE_VERSION@
	$(INSTALL) -d fish-@PACKAGE_VERSION@
	$(INSTALL) -d fish-@PACKAGE_VERSION@/doc_src
	$(INSTALL) -d fish-@PACKAGE_VERSION@/etc
	$(INSTALL) -d fish-@PACKAGE_VERSION@/share
	$(INSTALL) -d fish-@PACKAGE_VERSION@/share/completions
	$(INSTALL) -d fish-@PACKAGE_VERSION@/share/functions
	$(INSTALL) -d fish-@PACKAGE_VERSION@/tests
	$(INSTALL) -d fish-@PACKAGE_VERSION@/po
	cp -f $(DOC_SRC_DIR_FILES) fish-@PACKAGE_VERSION@/doc_src
	cp -f $(MAIN_DIR_FILES) fish-@PACKAGE_VERSION@/
	cp -f $(ETC_DIR_FILES) fish-@PACKAGE_VERSION@/etc/
	cp -f $(SHARE_DIR_FILES) fish-@PACKAGE_VERSION@/share/
	cp -f $(COMPLETIONS_DIR_FILES) fish-@PACKAGE_VERSION@/share/completions/
	cp -f $(FUNCTIONS_DIR_FILES) fish-@PACKAGE_VERSION@/share/functions/
	cp -f $(TESTS_DIR_FILES) fish-@PACKAGE_VERSION@/tests/
	cp -f $(TRANSLATIONS_SRC) fish-@PACKAGE_VERSION@/po/
	tar -c fish-@PACKAGE_VERSION@ >fish-@PACKAGE_VERSION@.tar
	rm -rf fish-@PACKAGE_VERSION@

tar: fish-@PACKAGE_VERSION@.tar
.PHONY: tar

fish-@PACKAGE_VERSION@.tar.gz: fish-@PACKAGE_VERSION@.tar
	gzip -f --best -c fish-@PACKAGE_VERSION@.tar >fish-@PACKAGE_VERSION@.tar.gz

fish-@PACKAGE_VERSION@.tar.bz2: fish-@PACKAGE_VERSION@.tar
	bzip2 -f --best -k fish-@PACKAGE_VERSION@.tar

dist: fish-@PACKAGE_VERSION@.tar.bz2
.PHONY: dist

# Create .rpm file for the current systems architecture and an
# .src.rpm file.
rpm: fish-@PACKAGE_VERSION@.tar.bz2
	@if ! which rpmbuild; then \
		echo Could not find the rpmbuild command, needed to build an rpm; \
		echo You may be able to install it using the following command:; \
		echo \'yum install rpm-build\'; \
		false; \
	fi
	cp fish.spec /usr/src/redhat/SPECS/
	cp fish-@PACKAGE_VERSION@.tar.bz2 /usr/src/redhat/SOURCES/
	rpmbuild -ba --clean /usr/src/redhat/SPECS/fish.spec
	mv /usr/src/redhat/RPMS/*/fish*@PACKAGE_VERSION@*.rpm .
	mv /usr/src/redhat/SRPMS/fish*@PACKAGE_VERSION@*.src.rpm .
.PHONY: rpm

#
# Cleanup targets
#

distclean: clean
	rm -f fish.spec doc_src/fish.1 doc_src/Doxyfile 
	rm -f etc/fish etc/fish_interactive.fish seq
	rm -f config.status config.log config.h Makefile
.PHONY: distclean

clean:
	rm -f *.o doc.h doc_src/*.doxygen doc_src/*.c builtin_help.c doc_src/*.o
	rm -f tests/tmp.err tests/tmp.out tests/tmp.status tests/foo.txt
	rm -f tokenizer_test fish key_reader set_color gen_hdr2 mimedb
	rm -f fishd fish_pager count fish_tests 
	rm -f fish-@PACKAGE_VERSION@.tar 
	rm -f fish-@PACKAGE_VERSION@.tar.gz 
	rm -f fish-@PACKAGE_VERSION@.tar.bz2
	rm -rf doc; 
	rm -rf user_doc; 
	rm -rf doc_src/builtin_doc
	rm -rf fish-@PACKAGE_VERSION@
	rm -rf xsel-0.9.6/
	rm -f $(TRANSLATIONS)
.PHONY: clean

# DO NOT DELETE THIS LINE -- make depend depends on it.

builtin.o: config.h fallback.h common.h util.h wutil.h builtin.h function.h
builtin.o: complete.h proc.h io.h parser.h event.h reader.h env.h wgetopt.h
builtin.o: sanity.h tokenizer.h builtin_help.h wildcard.h input_common.h
builtin.o: input.h intern.h signal.h translate.h halloc.h halloc_util.h
builtin.o: parse_util.h expand.h
builtin_commandline.o: signal.h config.h fallback.h common.h util.h wutil.h
builtin_commandline.o: builtin.h wgetopt.h reader.h proc.h io.h parser.h
builtin_commandline.o: event.h tokenizer.h input_common.h input.h translate.h
builtin_commandline.o: parse_util.h
builtin_complete.o: signal.h config.h fallback.h common.h util.h wutil.h
builtin_complete.o: builtin.h complete.h wgetopt.h parser.h proc.h io.h
builtin_complete.o: event.h reader.h translate.h
builtin_help.o: config.h util.h common.h builtin_help.h
builtin_set.o: signal.h config.h fallback.h common.h util.h wutil.h builtin.h
builtin_set.o: env.h expand.h wgetopt.h proc.h io.h parser.h event.h
builtin_set.o: translate.h
builtin_ulimit.o: config.h fallback.h common.h util.h builtin.h wgetopt.h
builtin_ulimit.o: translate.h
common.o: config.h fallback.h common.h util.h wutil.h expand.h proc.h io.h
common.o: wildcard.h parser.h event.h
complete.o: signal.h config.h fallback.h common.h util.h tokenizer.h
complete.o: wildcard.h proc.h io.h parser.h event.h function.h complete.h
complete.o: builtin.h env.h exec.h expand.h reader.h history.h intern.h
complete.o: translate.h parse_util.h halloc_util.h wutil.h
env.o: config.h signal.h fallback.h common.h util.h wutil.h proc.h io.h env.h
env.o: sanity.h expand.h history.h reader.h parser.h event.h env_universal.h
env.o: env_universal_common.h input_common.h translate.h complete.h
env_universal.o: config.h signal.h fallback.h common.h util.h wutil.h
env_universal.o: env_universal_common.h env_universal.h
env_universal_common.o: config.h signal.h fallback.h common.h util.h wutil.h
env_universal_common.o: env_universal_common.h
event.o: signal.h config.h fallback.h common.h util.h wutil.h function.h
event.o: proc.h io.h parser.h event.h translate.h halloc_util.h
exec.o: signal.h config.h fallback.h common.h util.h wutil.h proc.h io.h
exec.o: exec.h parser.h event.h builtin.h function.h env.h wildcard.h
exec.o: sanity.h expand.h env_universal.h env_universal_common.h translate.h
exec.o: halloc.h halloc_util.h parse_util.h
expand.o: signal.h config.h fallback.h common.h util.h wutil.h env.h proc.h
expand.o: io.h parser.h event.h expand.h wildcard.h exec.h tokenizer.h
expand.o: complete.h translate.h parse_util.h halloc_util.h
fallback.o: config.h fallback.h common.h util.h
fishd.o: config.h signal.h fallback.h common.h util.h wutil.h
fishd.o: env_universal_common.h
fish_pager.o: config.h signal.h fallback.h common.h util.h wutil.h complete.h
fish_pager.o: output.h input_common.h env_universal.h env_universal_common.h
fish_pager.o: halloc.h halloc_util.h
fish_tests.o: config.h signal.h fallback.h common.h util.h proc.h io.h
fish_tests.o: reader.h builtin.h function.h complete.h wutil.h env.h expand.h
fish_tests.o: parser.h event.h tokenizer.h output.h exec.h halloc_util.h
function.o: signal.h config.h wutil.h fallback.h common.h util.h function.h
function.o: proc.h io.h translate.h parser.h event.h intern.h reader.h
function.o: parse_util.h env.h expand.h
halloc.o: config.h fallback.h common.h util.h halloc.h
halloc_util.o: config.h fallback.h common.h util.h halloc.h
highlight.o: signal.h config.h fallback.h common.h util.h wutil.h highlight.h
highlight.o: tokenizer.h proc.h io.h parser.h event.h parse_util.h builtin.h
highlight.o: function.h env.h expand.h sanity.h complete.h output.h
history.o: config.h fallback.h common.h util.h wutil.h history.h reader.h
history.o: env.h sanity.h signal.h
input.o: config.h signal.h fallback.h common.h util.h wutil.h reader.h proc.h
input.o: io.h sanity.h input_common.h input.h parser.h event.h env.h expand.h
input.o: translate.h output.h
input_common.o: config.h fallback.h common.h util.h wutil.h input_common.h
input_common.o: env_universal.h env_universal_common.h
intern.o: config.h fallback.h common.h util.h wutil.h intern.h
io.o: config.h fallback.h common.h util.h wutil.h exec.h proc.h io.h
io.o: translate.h halloc.h
key_reader.o: fallback.h common.h util.h input_common.h
kill.o: signal.h config.h fallback.h common.h util.h wutil.h kill.h proc.h
kill.o: io.h sanity.h env.h exec.h parser.h event.h
main.o: config.h signal.h fallback.h common.h util.h reader.h builtin.h
main.o: function.h complete.h wutil.h env.h sanity.h proc.h io.h parser.h
main.o: event.h expand.h intern.h exec.h output.h translate.h halloc_util.h
main.o: history.h
mimedb.o: config.h xdgmime.h fallback.h common.h util.h
output.o: config.h signal.h fallback.h common.h util.h wutil.h expand.h
output.o: output.h halloc_util.h highlight.h
parser.o: signal.h config.h fallback.h common.h util.h wutil.h proc.h io.h
parser.o: parser.h event.h tokenizer.h exec.h wildcard.h function.h builtin.h
parser.o: builtin_help.h env.h expand.h reader.h sanity.h env_universal.h
parser.o: env_universal_common.h translate.h intern.h parse_util.h halloc.h
parser.o: halloc_util.h
parse_util.o: config.h fallback.h common.h util.h wutil.h tokenizer.h
parse_util.o: parse_util.h expand.h intern.h exec.h proc.h io.h env.h
parse_util.o: wildcard.h halloc_util.h
proc.o: config.h signal.h fallback.h common.h util.h wutil.h proc.h io.h
proc.o: reader.h sanity.h env.h parser.h event.h translate.h halloc.h
proc.o: halloc_util.h output.h
reader.o: config.h signal.h fallback.h common.h util.h wutil.h highlight.h
reader.o: reader.h proc.h io.h parser.h event.h complete.h history.h sanity.h
reader.o: env.h exec.h expand.h tokenizer.h kill.h input_common.h input.h
reader.o: function.h output.h translate.h parse_util.h
refcount.o: config.h fallback.h common.h util.h wutil.h refcount.h
sanity.o: signal.h config.h fallback.h common.h util.h sanity.h proc.h io.h
sanity.o: history.h reader.h kill.h wutil.h translate.h
set_color.o: config.h
signal.o: config.h signal.h common.h util.h fallback.h wutil.h event.h
signal.o: reader.h proc.h io.h translate.h
tokenizer.o: config.h fallback.h common.h util.h wutil.h tokenizer.h
tokenizer.o: wildcard.h translate.h
translate.o: config.h common.h util.h fallback.h halloc_util.h
util.o: config.h fallback.h common.h util.h wutil.h
wgetopt.o: config.h wgetopt.h wutil.h fallback.h common.h util.h translate.h
wildcard.o: config.h fallback.h common.h util.h wutil.h complete.h wildcard.h
wildcard.o: reader.h expand.h translate.h
wutil.o: config.h fallback.h common.h util.h wutil.h
xdgmimealias.o: xdgmimealias.h xdgmime.h xdgmimeint.h
xdgmime.o: xdgmime.h xdgmimeint.h xdgmimeglob.h xdgmimemagic.h xdgmimealias.h
xdgmime.o: xdgmimeparent.h
xdgmimeglob.o: xdgmimeglob.h xdgmime.h xdgmimeint.h
xdgmimeint.o: xdgmimeint.h xdgmime.h
xdgmimemagic.o: xdgmimemagic.h xdgmime.h xdgmimeint.h
xdgmimeparent.o: xdgmimeparent.h xdgmime.h xdgmimeint.h