# # 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@ # # Compiler flags: # # -fno-optimize-sibling-calls seems to work around a bug where sending # a SIGWINCH to fish on NetBSD causes fish to exit. This is probably # either a compiler bug or a libc bug, but this seems to fix things for # now. Long term, this should be tracked down and truly fixed, at which # point we can remove this silly flag. # # -fno-strict-aliasing was sent in in a patch from James Vega. The # specific problem that this fixes has been lost to me. # # -Wall is there to keep me on my toes # CFLAGS:=@CFLAGS@ -Wall -fno-strict-aliasing -fno-optimize-sibling-calls 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.c builtin_complete.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 # 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 COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish) 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 debug: make fish CFLAGS="-O0 -Wno-unused -Werror -g -Wall -fno-strict-aliasing -fno-optimize-sibling-calls" .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 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 " >>$@ echo "#include " >>$@ echo >>$@ echo "void print_help()" >>$@ echo "{" >>$@ echo ' printf( "%s",' >>$@ chmod 755 gen_hdr.sh ./gen_hdr.sh $*.doxygen >>$@ echo ");" >>$@ echo "}" >>$@ #man -- doc_src/builtin_doc/man/man1/`basename $@ .c`.1 | cat -s | ./gen_hdr2 >>$@ # # 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: force-install # 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 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.c $(CC) ${MIME_OBJS} doc_src/mimedb.c $(LDFLAGS) -o $@ set_color: set_color.o doc_src/set_color.c $(CC) set_color.o doc_src/set_color.c $(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 common.o env_universal.o env_universal_common.o util.o wutil.o $(CC) key_reader.o input_common.o common.o env_universal.o env_universal_common.o util.o wutil.o $(LDFLAGS) -o $@ # # Update dependencies # depend: makedepend -fMakefile.in -Y *.c .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@ 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 # Create .rpm file for the current systems architecture and an # .src.rpm file. rpm: fish-@PACKAGE_VERSION@.tar.bz2 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 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 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 util.h wutil.h builtin.h function.h complete.h proc.h builtin.o: io.h parser.h event.h reader.h env.h common.h wgetopt.h sanity.h builtin.o: tokenizer.h builtin_help.h wildcard.h input_common.h input.h builtin.o: intern.h signal.h translate.h halloc.h halloc_util.h parse_util.h builtin.o: expand.h builtin_commandline.o: signal.h config.h util.h wutil.h builtin.h common.h builtin_commandline.o: wgetopt.h reader.h proc.h io.h parser.h event.h builtin_commandline.o: tokenizer.h input_common.h input.h translate.h builtin_commandline.o: parse_util.h builtin_complete.o: signal.h config.h util.h wutil.h builtin.h common.h builtin_complete.o: complete.h wgetopt.h parser.h proc.h io.h event.h builtin_complete.o: reader.h translate.h builtin_help.o: config.h util.h common.h builtin_help.h builtin_set.o: signal.h config.h util.h wutil.h builtin.h env.h expand.h builtin_set.o: common.h wgetopt.h proc.h io.h parser.h event.h translate.h builtin_ulimit.o: config.h util.h builtin.h common.h wgetopt.h translate.h common.o: config.h util.h wutil.h common.h expand.h proc.h io.h wildcard.h common.o: parser.h event.h complete.o: signal.h config.h util.h tokenizer.h wildcard.h proc.h io.h complete.o: parser.h event.h function.h complete.h builtin.h env.h exec.h complete.o: expand.h common.h reader.h history.h intern.h translate.h complete.o: parse_util.h halloc_util.h wutil.h env.o: config.h signal.h util.h wutil.h proc.h io.h common.h env.h sanity.h env.o: 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 util.h common.h wutil.h env_universal.o: env_universal_common.h env_universal.h env_universal_common.o: config.h signal.h util.h common.h wutil.h env_universal_common.o: env_universal_common.h event.o: signal.h config.h util.h wutil.h function.h proc.h io.h parser.h event.o: event.h common.h translate.h halloc_util.h exec.o: signal.h config.h util.h common.h wutil.h proc.h io.h exec.h parser.h exec.o: event.h builtin.h function.h env.h wildcard.h sanity.h expand.h exec.o: env_universal.h env_universal_common.h translate.h halloc.h exec.o: halloc_util.h parse_util.h expand.o: signal.h config.h util.h common.h wutil.h env.h proc.h io.h expand.o: parser.h event.h expand.h wildcard.h exec.h tokenizer.h complete.h expand.o: translate.h parse_util.h halloc_util.h fishd.o: config.h signal.h util.h common.h wutil.h env_universal_common.h fish_pager.o: config.h signal.h util.h wutil.h common.h complete.h output.h fish_pager.o: input_common.h env_universal.h env_universal_common.h halloc.h fish_pager.o: halloc_util.h fish_tests.o: config.h signal.h util.h common.h proc.h io.h reader.h fish_tests.o: builtin.h function.h complete.h wutil.h env.h expand.h parser.h fish_tests.o: event.h tokenizer.h output.h exec.h halloc_util.h function.o: signal.h config.h wutil.h util.h function.h proc.h io.h parser.h function.o: event.h common.h intern.h reader.h parse_util.h env.h expand.h halloc.o: config.h util.h common.h halloc.h halloc_util.o: config.h util.h common.h halloc.h highlight.o: signal.h config.h util.h wutil.h highlight.h tokenizer.h proc.h highlight.o: io.h parser.h event.h parse_util.h builtin.h function.h env.h highlight.o: expand.h sanity.h common.h complete.h output.h history.o: config.h util.h wutil.h history.h common.h reader.h env.h sanity.h history.o: signal.h input.o: config.h signal.h util.h wutil.h reader.h proc.h io.h common.h input.o: 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 util.h common.h wutil.h input_common.h input_common.o: env_universal.h env_universal_common.h intern.o: config.h util.h wutil.h common.h intern.h io.o: config.h util.h wutil.h exec.h proc.h io.h common.h translate.h io.o: halloc.h key_reader.o: input_common.h kill.o: signal.h config.h util.h wutil.h kill.h proc.h io.h sanity.h common.h kill.o: env.h exec.h parser.h event.h main.o: config.h signal.h util.h common.h reader.h builtin.h function.h main.o: complete.h wutil.h env.h sanity.h proc.h io.h parser.h event.h main.o: expand.h intern.h exec.h output.h translate.h halloc_util.h mimedb.o: config.h xdgmime.h util.h output.o: config.h signal.h util.h wutil.h expand.h common.h output.h output.o: halloc_util.h highlight.h parser.o: signal.h config.h util.h common.h wutil.h proc.h io.h parser.h parser.o: 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 util.h wutil.h common.h tokenizer.h parse_util.h parse_util.o: expand.h intern.h exec.h proc.h io.h env.h halloc_util.h proc.o: config.h signal.h util.h wutil.h proc.h io.h common.h reader.h proc.o: sanity.h env.h parser.h event.h translate.h halloc.h halloc_util.h proc.o: output.h reader.o: config.h signal.h util.h wutil.h highlight.h reader.h proc.h io.h reader.o: parser.h event.h complete.h history.h common.h sanity.h env.h reader.o: 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 util.h wutil.h common.h refcount.h sanity.o: signal.h config.h util.h common.h sanity.h proc.h io.h history.h sanity.o: reader.h kill.h wutil.h translate.h set_color.o: config.h signal.o: config.h signal.h common.h util.h wutil.h event.h reader.h proc.h signal.o: io.h translate.h tokenizer.o: config.h util.h wutil.h tokenizer.h common.h wildcard.h tokenizer.o: translate.h translate.o: config.h common.h util.h halloc_util.h util.o: config.h util.h common.h wutil.h wgetopt.o: config.h wgetopt.h wutil.h translate.h wildcard.o: config.h util.h wutil.h complete.h common.h wildcard.h reader.h wildcard.o: expand.h translate.h wutil.o: config.h util.h common.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