fish-shell/Makefile.in
ridiculousfish df4b03d859 Fix CMake documentation build path
This fixes a variety of issues related to building the documentation
with CMake. In particular it cleans up the dependency management and
fixes some issues where the documentation build was using generated
files from the source directory.
2018-03-05 12:13:34 -08:00

1220 lines
52 KiB
Makefile

# Copyright (C) 2005-2006 Axel Liljencrantz
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
#
# @configure_input@
#
#
# Makefile for the fish shell. Can build fish and associated
# applications, install them, and recalculate dependencies.
#
# Verbosity
# make V=1 causes a noisy make, V=0 is silent/quiet. If one uses (lower case v)
# $v as a substitute for @, it will be replaced with an empty string for the
# default (V=1) case and replaced with @ in the V=0 case. You can use a bare @
# for things that should almost never print.
V := 0
#
# Used by docdir
#
PACKAGE_TARNAME := @PACKAGE_TARNAME@
# The default: /bin/sh
# Fish won't work.
SHELL := @SHELL@
# Programs
#
CXX := @CXX@
CC := @CC@
INSTALL := @INSTALL@
LN_S := @LN_S@
SED := @SED@
MKDIR_P := @MKDIR_P@
AWK := @AWK@
GREP := @GREP@
FGREP := @FGREP@
#
# Installation directories
#
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
datadir = @datadir@
bindir = @bindir@
mandir = @mandir@
sysconfdir = @sysconfdir@
docdir = @docdir@
localedir = @localedir@
extra_completionsdir = @extra_completionsdir@
extra_functionsdir = @extra_functionsdir@
extra_confdir = @extra_confdir@
#
# pcre2
#
PCRE2_WIDTH = @WCHAR_T_BITS@
PCRE2_DIR = pcre2-10.22
PCRE2_LIBDIR = $(PCRE2_DIR)/.libs
PCRE2_LIB = $(PCRE2_LIBDIR)/libpcre2-$(PCRE2_WIDTH).a
PCRE2_H = $(PCRE2_DIR)/src/pcre2.h
EXTRA_PCRE2 = @EXTRA_PCRE2@
#
# Various flags
#
CXXFLAGS = @CXXFLAGS@ $(EXTRA_CXXFLAGS)
CFLAGS = @CFLAGS@
CPPFLAGS = -D_UNICODE=1 -DLOCALEDIR=\"$(localedir)\" -DPREFIX=L\"$(prefix)\" -DDATADIR=L\"$(datadir)\" -DSYSCONFDIR=L\"$(sysconfdir)\" -DBINDIR=L\"$(bindir)\" -DDOCDIR=L\"$(docdir)\" -iquote. -iquote./src/
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
LDFLAGS_FISH = ${LDFLAGS} @LDFLAGS_FISH@
#
# Set to 1 if we have gettext
#
HAVE_GETTEXT=@HAVE_GETTEXT@
#
# Set to 1 if we have doxygen
#
HAVE_DOXYGEN=@HAVE_DOXYGEN@
#
# All objects that the system needs to build fish, except fish.o
#
FISH_OBJS := obj/autoload.o obj/builtin.o obj/builtin_bg.o obj/builtin_bind.o obj/builtin_block.o \
obj/builtin_builtin.o obj/builtin_cd.o obj/builtin_command.o \
obj/builtin_commandline.o obj/builtin_complete.o obj/builtin_contains.o \
obj/builtin_disown.o obj/builtin_echo.o obj/builtin_emit.o \
obj/builtin_exit.o obj/builtin_fg.o obj/builtin_function.o \
obj/builtin_functions.o obj/builtin_argparse.o obj/builtin_history.o \
obj/builtin_jobs.o obj/builtin_math.o obj/builtin_printf.o obj/builtin_pwd.o \
obj/builtin_random.o obj/builtin_read.o obj/builtin_realpath.o \
obj/builtin_return.o obj/builtin_set.o obj/builtin_set_color.o \
obj/builtin_source.o obj/builtin_status.o obj/builtin_string.o \
obj/builtin_test.o obj/builtin_ulimit.o obj/builtin_wait.o obj/color.o obj/common.o \
obj/complete.o obj/env.o obj/env_universal_common.o obj/event.o obj/exec.o \
obj/expand.o obj/fallback.o obj/fish_version.o obj/function.o obj/highlight.o \
obj/history.o obj/input.o obj/input_common.o obj/intern.o obj/io.o \
obj/iothread.o obj/kill.o obj/output.o obj/pager.o obj/parse_execution.o \
obj/parse_productions.o obj/parse_tree.o obj/parse_util.o obj/parser.o \
obj/parser_keywords.o obj/path.o obj/postfork.o obj/proc.o obj/reader.o \
obj/sanity.o obj/screen.o obj/signal.o obj/tinyexpr.o obj/tokenizer.o obj/tnode.o obj/utf8.o \
obj/util.o obj/wcstringutil.o obj/wgetopt.o obj/wildcard.o obj/wutil.o
FISH_INDENT_OBJS := obj/fish_indent.o obj/print_help.o $(FISH_OBJS)
FISH_KEYREAD_OBJS := obj/fish_key_reader.o obj/print_help.o $(FISH_OBJS)
#
# All objects that the system needs to build fish_tests
#
FISH_TESTS_OBJS := $(FISH_OBJS) obj/fish_tests.o
#
# All of the sources that produce object files
# (that is, are not themselves #included in other source files)
#
FISH_ALL_OBJS := $(sort $(FISH_OBJS) $(FISH_INDENT_OBJS) $(FISH_TESTS_OBJS) $(FISH_KEYREAD_OBJS) obj/fish.o)
#
# Files containing user documentation
#
#
# These files are the source files, they contain a few @FOO@-style substitutions
# Note that this order defines the order that they appear in the documentation
#
HDR_FILES_SRC := doc_src/index.hdr.in doc_src/tutorial.hdr doc_src/design.hdr doc_src/license.hdr doc_src/commands.hdr.in doc_src/faq.hdr
#
# These are the generated result files
#
HDR_FILES := $(HDR_FILES_SRC:.hdr.in=.hdr)
# Use a pattern rule so that Make knows to only issue one invocation
# per http://www.gnu.org/software/make/manual/make.html#Pattern-Intro
#
# Files containing documentation for external commands.
#
HELP_SRC := $(wildcard doc_src/*.txt)
#
# HTML includes needed for HTML help
#
HTML_SRC := doc_src/user_doc.header.html doc_src/user_doc.footer.html doc_src/user_doc.css
#
# Files in the test directory
#
TEST_IN := $(wildcard tests/test*.in)
#
# Files in ./share/completions/
#
COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish)
#
# Files in ./share/functions/
#
FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish)
#
# Programs to install
#
PROGRAMS := fish fish_indent fish_key_reader
#
# Manual pages to install
#
MANUALS := $(addsuffix .1, $(addprefix share/man/man1/, $(PROGRAMS)))
HELP_MANPAGES = $(wildcard share/man/man1/*.1)
# Determine which man pages we don't want to install
# On OS X, don't install a man page for open, since we defeat fish's open
# function on OS X.
# This is also done in build_tools/build_documentation.sh, but because the
# tarball includes this page, we need to skip it in the Makefile too (see
# https://github.com/fish-shell/fish-shell/issues/2561).
ifeq ($(shell uname), Darwin)
CONDEMNED_PAGES := open.1
HELP_MANPAGES = $(filter-out share/man/man1/open.1, $(wildcard share/man/man1/*.1))
endif
#
# All translation message catalogs, filter files based on LINGUAS.
#
TRANSLATIONS_SRC := $(wildcard po/*.po)
ifeq ($(HAVE_GETTEXT), 1)
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)
ifdef LINGUAS
TRANSLATIONS_ALL := $(TRANSLATIONS)
TRANSLATIONS_WANTED = $(patsubst %,po/%.gmo,$(LINGUAS))
TRANSLATIONS = $(filter $(TRANSLATIONS_WANTED),$(TRANSLATIONS_ALL))
endif
else
TRANSLATIONS :=
endif
#
# If Doxygen is not available, don't attempt to build the documentation
#
ifeq ($(HAVE_DOXYGEN), 1)
user_doc=doc
share_man=share/man
else
user_doc=
share_man=
endif
t_co:=$(shell tput colors || echo '') 2> /dev/null
green := $(shell ( tput setaf 2 || tput AF 2 ) 2> /dev/null )
yellow := $(shell ( tput setaf 3 || tput AF 3 ) 2> /dev/null )
cyan := $(shell ( tput setaf 6 || tput AF 6 ) 2> /dev/null )
red := $(shell ( tput setaf 1 || tput AF 1 ) 2> /dev/null )
bo := $(shell ( tput bold || tput md ) 2> /dev/null )
# * Italic: Rarely defined - it's common for it to work despite
# terminfo entries and isn't known to cause any recent > 256-color terminals
# to explode. If terminfo says a terminal supports 256 colors - it's fancy enough
# and won't have trouble the escape.
ifeq ($(t_co), 256)
em := $(shell ( tput sitm || tput ZH || echo "\\033[3m" ) 2> /dev/null )
# * Half-bright/faint 'dim' mode - rarely works - rarely in terminfo when it does
# but it's cool. Use it with one of the basic colors to get a fainter version
# of it. We use this to shade the output from any reconfigures we trigger.
dim := $(shell ( tput dim || tput mh || [ $(TERM_PROGRAM) = Apple_Terminal ] && echo "\\033[2m") 2> /dev/null )
else
em := $(shell ( tput sitm || tput ZH ) 2> /dev/null )
dim := $(shell ( tput dim || tput mh) 2> /dev/null )
endif
sgr0 := $(shell ( tput sgr0 || tput me) 2> /dev/null )
#
# A target that shows VAR='$(VAR)' (properly escaped)
# Cool trick: `make show-$var` (e.g. make show-HAVE_DOXYGEN) to quickly see what $var is.
#
show-%:
-@echo " $* = $(em)$(cyan)'$(subst ',''',$($*))'$(sgr0)"
#
# Make everything needed for installing fish
#
all: show-CXX show-CXXFLAGS $(PROGRAMS) $(user_doc) $(share_man) $(TRANSLATIONS) fish.pc share/__fish_build_paths.fish
ifneq (,$(findstring install,$(MAKECMDGOALS)))
# Fish has been built, but if the goal was 'install', we aren't done yet and this output isnt't desirable
@echo "$(green)fish has now been built.$(sgr0)"
@echo "Run $(yellow)$(notdir $(MAKE)) install$(sgr0) to install fish.$(sgr0)"
endif
.PHONY: all
#
# Pull version information
#
FISH-BUILD-VERSION-FILE: FORCE | show-FISH_BUILD_VERSION
$v build_tools/git_version_gen.sh 2> /dev/null
-include FISH-BUILD-VERSION-FILE
CPPFLAGS += -DFISH_BUILD_VERSION=\"$(FISH_BUILD_VERSION)\"
.PHONY: FORCE
obj/fish_version.o: FISH-BUILD-VERSION-FILE
#
# These dependencies make sure that autoconf and configure are run
# when the source code for the build configuration has changed.
#
configure: configure.ac
@echo "Rechecking config.status; rerunning ./configure if necessary...$(dim)"
$v ./config.status --recheck
@echo "$(sgr0)"
Makefile: Makefile.in configure
@echo "Checking config.status...$(dim)"
$v ./config.status
@echo "$(sgr0)"
#
# Build fish with some debug flags specified. This is GCC specific,
# and should only be used when debugging fish.
#
prof: EXTRA_CXXFLAGS += -pg
prof: LDFLAGS += -pg
prof: all
.PHONY: prof
#
# User documentation, describing the features of the fish shell.
#
# Depend on the sources (*.hdr.in) and manually make the intermediate *.hdr
# and doc.h files if needed. The sed command deletes everything including and
# after the first -, for simpler version numbers. Cleans up the user_doc/html
# directory once Doxygen is done.
#
doc: $(HDR_FILES_SRC) Doxyfile.user $(HTML_SRC) $(HELP_SRC) doc.h $(HDR_FILES) lexicon_filter
@echo " doxygen $(em)user_doc$(sgr0)"
$v env FISH_BUILD_VERSION=$(FISH_BUILD_VERSION) ./build_tools/build_user_doc.sh Doxyfile.user ./lexicon_filter
#
# PDF version of the source code documentation.
#
doc/refman.pdf: doc
@echo " MAKE $(em)doc/latex$(sgr0)"
$v cd doc/latex
$v $(MAKE) V=$(V)
$v mv refman.pdf ..
#
# Prep the environment for running the unit tests. When specifying DESTDIR on
# the command line (e.g., `make DESTDIR=/usr/local/`) you must have previously
# installed fish using the same prefix; e.g., `./configure --prefix=/usr/local`
# followed by `make install`.
#
test-prep: show-DESTDIR show-LN_S show-FISH_VERSION
$v rm -rf test
$v $(MKDIR_P) test/data test/home test/temp
ifdef DESTDIR
$v $(LN_S) $(DESTDIR) test/root
else
$v $(MKDIR_P) test/root
endif
.PHONY: test-prep
#
# The test target runs both the low level code tests and the high level script
# tests.
#
# Note that doing `make DESTDIR=/some/path/ test` overrides this assignment.
#
test: DESTDIR = $(PWD)/test/root/
test: prefix = .
test: test-prep install-force test_low_level test_high_level
$v rm -f /tmp/file_truncation_test.txt /tmp/tee_test.txt /tmp/fish_foo.txt
$v rm -rf /tmp/is_potential_path_test
.PHONY: test
#
# We want the various tests to run serially so their output doesn't mix
# We can do that by adding ordering dependencies based on what goals are being used.
#
test_goals := test_low_level test_fishscript test_interactive test_invocation
#
# The following variables define targets that depend on the tests. If any more targets
# are added that depend, directly or indirectly, on tests, they need to be recorded here.
#
test_test_deps = test_low_level $(test_high_level_test_deps)
test_high_level_test_deps = test_fishscript test_interactive test_invocation
active_test_goals = $(filter $(test_goals),$(foreach a,$(or $(MAKECMDGOALS),$(.DEFAULT_GOAL)),$(a) $($(a)_test_deps)))
filter_up_to = $(eval b:=1)$(foreach a,$(2),$(and $(b),$(if $(subst $(1),,$(a)),$(a),$(eval b:=))))
# The values for XDG_DATA_HOME and XDG_CONFIG_HOME mimic those from tests/test_util.fish.
test_low_level: fish_tests $(call filter_up_to,test_low_level,$(active_test_goals))
$v rm -rf test/data test/home
$(MKDIR_P) test/data test/home
env XDG_DATA_HOME=test/data XDG_CONFIG_HOME=test/home ./fish_tests
.PHONY: test_low_level
test_high_level: DESTDIR = $(PWD)/test/root/
test_high_level: prefix = .
test_high_level: test-prep install-force test_fishscript test_interactive test_invocation
.PHONY: test_high_level
test_invocation: $(call filter_up_to,test_invocation,$(active_test_goals))
cd tests; ./invocation.sh
.PHONY: test_invocation
test_fishscript: $(call filter_up_to,test_fishscript,$(active_test_goals))
cd tests; ../test/root/bin/fish test.fish
.PHONY: test_fishscript
test_interactive: $(call filter_up_to,test_interactive,$(active_test_goals))
cd tests; ../test/root/bin/fish interactive.fish
.PHONY: test_interactive
#
# commands.hdr collects documentation on all commands, functions and
# builtins
#
doc_src/commands.hdr:$(HELP_SRC) doc_src/commands.hdr.in build_tools/build_commands_hdr.sh
build_tools/build_commands_hdr.sh ${HELP_SRC} < doc_src/commands.hdr.in > $@
toc.txt: $(HDR_FILES:index.hdr=index.hdr.in) build_tools/build_toc_txt.sh | show-SED
FISH_BUILD_VERSION=${FISH_BUILD_VERSION} build_tools/build_toc_txt.sh \
$(HDR_FILES:index.hdr=index.hdr.in) > toc.txt
doc_src/index.hdr: toc.txt doc_src/index.hdr.in | show-AWK
@echo " AWK CAT $(em)$@$(sgr0)"
$v build_tools/build_index_hdr.sh toc.txt < $@.in > $@
#
# Compile Doxygen Input Filter from the lexicon. This is an executable sed
# script as Doxygen opens it via popen()(3) Input (doc.h) is piped through and
# matching words inside /fish../endfish blocks are marked up, contextually,
# with custom Doxygen commands in the form of @word_type{content}. These are
# trapped by ALIASES in the various Doxyfiles, allowing the content to be
# transformed depending on output type (HTML, man page, developer docs). In
# HTML, a style context can be applied through the /fish{style} block and
# providing suitable CSS in user_doc.css.in
#
lexicon_filter: doc_src/commands.hdr $(FUNCTIONS_DIR_FILES) $(COMPLETIONS_DIR_FILES) \
lexicon_filter.in build_tools/build_lexicon_filter.sh \
share/functions/__fish_config_interactive.fish
$v build_tools/build_lexicon_filter.sh share/functions/ share/completions/ lexicon_filter.in $(SED) > $@
$v chmod a+x lexicon_filter
#
# 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 by Doxygen to generate the user
# documentation.
#
doc.h: $(HDR_FILES)
@echo " HDR_FILES $(em)$@$(sgr0)"
$v cat $(HDR_FILES) >$@
#
# 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 " cat * $(em)$@$(sgr0)"
$v echo "/** \page " `basename $*` >$@;
$v cat $*.txt >>$@;
$v echo "*/" >>$@
#
# Depend on Makefile because I don't see a better way of rebuilding
# if any of the paths change.
#
%: %.in Makefile FISH-BUILD-VERSION-FILE | show-prefix show-sysconfdir show-docdir show-extra_completionsdir show-extra_functionsdir show-extra_confdir show-prefix show-FISH_BUILD_VERSION
@echo " SED $(em)$@$(sgr0)"
$v $(SED) <$< >$@ \
-e "s,@sysconfdir\@,$(sysconfdir),g" \
-e "s,@datadir\@,$(datadir),g" \
-e "s,@docdir\@,$(docdir),g" \
-e "s,@extra_completionsdir\@,$(extra_completionsdir),g" \
-e "s,@extra_functionsdir\@,$(extra_functionsdir),g" \
-e "s,@extra_confdir\@,$(extra_confdir),g" \
-e "s|@configure_input\@|$@, generated from $@.in by the Makefile. DO NOT MANUALLY EDIT THIS FILE!|g" \
-e "s,@prefix\@,$(prefix),g" \
-e "s,@fish_build_version\@,$(FISH_BUILD_VERSION),g" \
#
# Compile translation files to binary format.
#
%.gmo:
@echo " msgfmt $(em)$@$(sgr0)"
$v msgfmt --use-fuzzy -o $@ $*.po
#
# Update existing po file or copy messages.pot
#
%.po:messages.pot
@echo " msgmerge $(em)$@$(sgr0)"
$v if test -f $*.po; then \
msgmerge -U --backup=existing $*.po messages.pot;\
else \
cp messages.pot $*.po;\
fi
#
# Create a template translation object
#
messages.pot: fish $(wildcard src/*.cpp src/*.h share/completions/*.fish share/functions/*.fish)
@echo " xgettext $(em)$@$(sgr0)"
$v xgettext -k -k_ -kN_ -LC++ --no-wrap -o messages.pot src/*.cpp src/*.h
$v rm -rf /tmp/fish
$v ./fish build_tools/fish_xgettext.fish
$v xgettext -j -k -kN_ -LShell --from-code=UTF-8 -cDescription --no-wrap -o messages.pot /tmp/fish/explicit/share/*.fish /tmp/fish/explicit/share/*/*.fish
$v xgettext -j -k -kN_ -LShell --from-code=UTF-8 -cDescription --no-wrap -o messages.pot /tmp/fish/implicit/share/*.fish /tmp/fish/implicit/share/*/*.fish
$v rm -rf /tmp/fish
ifdef EXTRA_PCRE2
src/builtin_string.cpp: $(PCRE2_H)
endif
#
# Generate the internal help functions by making doxygen create
# man-pages. The convertion path looks like this:
#
# .txt file
# ||
# (make)
# ||
# \/
# .doxygen file
# ||
# (doxygen)
# ||
# \/
# roff file
# ||
# (__fish_print_help)
# ||
# \/
# formated text
# with escape
# sequences
#
#
# There ought to be something simpler.
#
share/man: $(HELP_SRC) lexicon_filter | show-FISH_BUILD_VERSION show-SED
-$v $(MKDIR_P) share/man
@echo " doxygen $(em)$@$(sgr0)"
$v touch share/man
-$v rm -Rf share/man/man1
$v echo "$(dim)" && FISH_BUILD_VERSION=${FISH_BUILD_VERSION} INPUT_FILTER=./lexicon_filter \
build_tools/build_documentation.sh Doxyfile.help ./doc_src ./share;
#
# The build rules for installing/uninstalling fish
#
check-legacy-binaries:
@echo "Checking for legacy binaries..."
$v KR_LOC=$(prefix)/bin/key_reader;\
if test -x "$$KR_LOC" && env TERM=dumb "$$KR_LOC" cr | grep -q 26; then\
echo "$(red)A key_reader binary was found. You might want to remove this, and use 'fish_key_reader':";\
echo " '$$KR_LOC'$(sgr0)";\
fi;
$v SEQLOC=$(prefix)/bin/seq;\
if test -f "$$SEQLOC" && grep -q '\(^#!/.*/fish\|^#!/usr/bin/env fish\)' "$$SEQLOC"; then\
echo "$(red)An outdated seq from a previous fish install was found. You should remove it with:";\
echo " rm '$$SEQLOC'$(sgr0)";\
fi;
$v SETCOLOR_LOC=$(prefix)/bin/set_color;\
if test -x "$$SETCOLOR_LOC" && $$SETCOLOR_LOC -v 2>&1 >/dev/null | grep -q "^set_color, version "; then\
echo "$(red)An outdated set_color from a previous fish install was found. You should remove it with:";\
echo " rm '$$SETCOLOR_LOC'$(sgr0)";\
fi;
$v MIMEDB_LOC=$(prefix)/bin/mimedb;\
if test -x "$$MIMEDB_LOC" && $$MIMEDB_LOC --version 2>&1 | grep -q "^mimedb, version "; then\
echo "$(red)An outdated mimedb binary from a previous fish install was found. You should remove it with:";\
echo " rm '$$MIMEDB_LOC'$(sgr0)";\
fi;
$v FISHD_LOC=$(prefix)/bin/fishd;\
if test -x "$$FISHD_LOC" && $$FISHD_LOC --version 2>&1 | grep -q "^fishd: fishd, version "; then\
echo "$(red)An outdated fishd binary from a previous fish install was found. You should remove it with:";\
echo " rm '$$FISHD_LOC'$(sgr0)";\
fi;
$v true;
.PHONY: check-legacy-binaries
install: all install-force | check-legacy-binaries
@echo
@echo "$(bo)fish is now installed on your system.$(sgr0)"
@echo "To run fish, type $(bo)$(green)fish$(sgr0) in your terminal."
@echo "$(T_YELLOW)Even if you are already in fish, you should now start a new fish session.$(sgr0)"
@echo
@if type chsh >/dev/null 2>&1; then \
echo To use fish as your login shell:; \
grep -q -- "$(DESTDIR)$(bindir)/fish" /etc/shells || echo -e " * add the line '$(DESTDIR)$(bindir)/fish' to the file '/etc/shells':" \
"\n echo '$(DESTDIR)$(bindir)/fish' | sudo tee -a /etc/shells > /dev/null"; \
echo " * run '$(yellow)chsh -s $(DESTDIR)$(bindir)/fish$(sgr0)'"; \
echo; \
fi;
@if type chcon >/dev/null 2>&1; then \
echo If you have SELinux enabled, you may need to manually update the security policy:; \
echo \ \* use the command \'chcon -t shell_exec_t $(DESTDIR)$(bindir)/fish\'; \
echo; \
fi;
@echo "To set your colors, run $(green)$(bo)fish_config$(sgr0)"
@echo "To scan your man pages for completions, run $(green)$(bo)fish_update_completions$(sgr0)"
@echo "To accept autosuggestions (in $(dim)grey$(sgr0)) as you type, hit $(bo)ctrl-F$(sgr0) or right arrow key."
@echo
@echo "$(bo)Have fun! <><$(sgr0)"
.PHONY: install
#
# Xcode install
#
xcode-install:
rm -Rf /tmp/fish_build
xcrun xcodebuild install DSTROOT=/tmp/fish_build
ditto /tmp/fish_build /
.PHONY: xcode-install
#
# Actually do the installation.
#
install-force: all install-translations install-doc | show-datadir show-sysconfdir show-extra_completionsdir show-extra_functionsdir show-extra_confdir show-mandir
$v $(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
$v for i in $(PROGRAMS); do\
$(INSTALL) -m 755 $$i $(DESTDIR)$(bindir);\
echo " Installing $(bo)$$i$(sgr0)";\
true ;\
done;
@echo "Creating sysconfdir tree"
$v $(INSTALL) -m 755 -d $(DESTDIR)$(sysconfdir)/fish
$v $(INSTALL) -m 755 -d $(DESTDIR)$(sysconfdir)/fish/conf.d
$v $(INSTALL) -m 644 etc/config.fish $(DESTDIR)$(sysconfdir)/fish/
@echo "Creating datadir tree"
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/completions
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/functions
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/groff
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/man/man1
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/js
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/partials
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config/sample_prompts
$v $(INSTALL) -m 644 share/config.fish $(DESTDIR)$(datadir)/fish/
$v $(INSTALL) -m 644 share/__fish_build_paths.fish $(DESTDIR)$(datadir)/fish/
$v $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/pkgconfig
@echo "Creating placeholder vendor/'extra_' directories"
-$v $(INSTALL) -m 755 -d $(DESTDIR)$(extra_completionsdir)
-$v $(INSTALL) -m 755 -d $(DESTDIR)$(extra_functionsdir)
-$v $(INSTALL) -m 755 -d $(DESTDIR)$(extra_confdir)
@echo "Installing pkgconfig file"
$v $(INSTALL) -m 644 fish.pc $(DESTDIR)$(datadir)/pkgconfig
@echo "Installing the $(bo)fish completion library$(sgr0)...";
$v $(INSTALL) -m 644 $(COMPLETIONS_DIR_FILES:%='%') $(DESTDIR)$(datadir)/fish/completions/
@echo "Installing $(bo)fish functions$(sgr0)";
$v $(INSTALL) -m 644 $(FUNCTIONS_DIR_FILES:%='%') $(DESTDIR)$(datadir)/fish/functions/
@echo "Installing $(bo)man pages$(sgr0)";
$v $(INSTALL) -m 644 share/groff/* $(DESTDIR)$(datadir)/fish/groff/
$v test -z "$(wildcard share/man/man1/*.1)" || $(INSTALL) -m 644 $(filter-out $(addprefix share/man/man1/, $(CONDEMNED_PAGES)), $(wildcard share/man/man1/*.1)) $(DESTDIR)$(datadir)/fish/man/man1/
@echo "Installing helper tools";
$v $(INSTALL) -m 755 share/tools/*.py $(DESTDIR)$(datadir)/fish/tools/
$v $(INSTALL) -m 644 share/tools/web_config/*.* $(DESTDIR)$(datadir)/fish/tools/web_config/
$v $(INSTALL) -m 644 share/tools/web_config/js/*.* $(DESTDIR)$(datadir)/fish/tools/web_config/js/
$v $(INSTALL) -m 644 share/tools/web_config/partials/* $(DESTDIR)$(datadir)/fish/tools/web_config/partials/
$v $(INSTALL) -m 644 share/tools/web_config/sample_prompts/*.fish $(DESTDIR)$(datadir)/fish/tools/web_config/sample_prompts/
$v $(INSTALL) -m 755 share/tools/web_config/*.py $(DESTDIR)$(datadir)/fish/tools/web_config/
@echo "Installing more man pages";
$v $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1;
$v for i in $(MANUALS); do \
$(INSTALL) -m 644 $$i $(DESTDIR)$(mandir)/man1/; \
true; \
done;
@echo "Installing miscellaneous helper resources";
$v $(INSTALL) -m 644 share/lynx.lss $(DESTDIR)$(datadir)/fish/
.PHONY: install-force
#
# Uninstall this fish version
#
uninstall: uninstall-translations | show-prefix show-bindir show-sysconfdir show-datadir show-docdir show-mandir
@echo
@echo "$(bo)$(yellow)Uninstalling fish$(sgr0) from configured \$$prefix: $(bo)$(prefix)$(sgr0)"
@echo
@echo "In 5 seconds, $(red)all data$(sgr0) (includes functions, completions, tools) in"
@echo $$'\t$(bo)$(DESTDIR)$(datadir)/fish$(sgr0) will be deleted!'
@echo
@echo "If you put things there, $(red)stop now!$(sgr0)"
@echo "$(bo)5$(sgr0)"
@sleep 1
@echo "$(bo)4$(sgr0)"
@sleep 1
@echo "$(bo)3$(sgr0)"
@sleep 1
@echo "$(bo)2$(sgr0)"
@sleep 1
@echo "$(bo)1$(sgr0)"
@sleep 1
@echo ...
@sleep 2
@echo "... deleting $(bo)$(DESTDIR)$(datadir)/fish/*$(sgr0)"
-$v if test -d $(DESTDIR)$(datadir)/fish; then \
rm -rf $(DESTDIR)$(datadir)/fish; \
fi
@echo "Deleting programs: [ $(bo)$(PROGRAMS)$(sgr0) ] in $(em)$(bindir)$(sgr0)"
-$v for i in $(PROGRAMS); do \
rm -f $(DESTDIR)$(bindir)/$$i; \
done;
@echo "Deleting configuration: $(bo)$(DESTDIR)$(sysconfdir)/fish/*$(sgr0)"
-$v rm -rf $(DESTDIR)$(sysconfdir)/fish
@echo "Deleting documentation: $(bo)$(DESTDIR)$(docdir)/*$(sgr0)"
-$v if test -d $(DESTDIR)$(docdir); then \
rm -rf $(DESTDIR)$(docdir);\
fi
@echo "Deleting pkgconfig file: $(bo)$(DESTDIR)$(datadir)/pkgconfig/fish.pc$(sgr0)"
-$v if test -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc; then \
rm -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc;\
fi
@echo "Deleting [ $(bo)"$(notdir $(MANUALS))"$(sgr0) ] in $(em)$(mandir)/man1$(sgr0)"
-$v for i in $(notdir $(MANUALS)); do \
rm -f "$(DESTDIR)$(mandir)/man1/$$i" ;\
done
@echo
@echo "$(green)Fish (likely) uninstalled$(sgr0)"
@echo
@echo "$(bo)./configure --prefix=$(sgr0) to uninstall fish from a different prefix"
.PHONY: uninstall
install-translations: $(TRANSLATIONS) | show-HAVE_GETTEXT
ifeq ($(HAVE_GETTEXT), 1)
@echo "Installing translations..."
$v for i in $(TRANSLATIONS); do \
$(INSTALL) -m 755 -d $(DESTDIR)$(localedir)/`basename $$i .gmo`/LC_MESSAGES; \
$(INSTALL) -m 644 $$i $(DESTDIR)$(localedir)/`basename $$i .gmo`/LC_MESSAGES/fish.mo; \
done
endif
.PHONY: install-translations
uninstall-translations: show-DESTDIR show-localedir
$v rm -f $(DESTDIR)$(localedir)/*/LC_MESSAGES/fish.mo
.PHONY: uninstall-translations
install-doc: $(user_doc)
@echo "Installing online user documentation";
$v $(INSTALL) -m 755 -d $(DESTDIR)$(docdir)
$v for i in user_doc/html/* CHANGELOG.md; do \
if test -f $$i; then \
$(INSTALL) -m 644 $$i $(DESTDIR)$(docdir); \
fi; \
done;
#
# The build rules for all the commands
#
#
# How basic files get compiled
#
obj/%.o: src/%.cpp | show-CXX show-CXXFLAGS show-CPPFLAGS obj
@echo " CXX $(em)$@$(sgr0)"
$v $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
obj/tinyexpr.o: src/tinyexpr.c | obj
@echo " CC $(em)$@$(sqr0)"
$v $(CC) $(CFLAGS) -c $< -o $@
#
# obj directory
#
obj: | show-MKDIR_P
@echo " MKDIR_P $(em)$@$(sgr0)"
$v $(MKDIR_P) obj
#
# Build the fish program.
#
fish: obj/fish.o $(FISH_OBJS) $(EXTRA_PCRE2)
@echo " CXX LD $(em)$@$(sgr0)"
$v $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_OBJS) obj/fish.o $(LIBS) -o $@
$(PCRE2_LIB): $(PCRE2_H)
@echo " MAKE $(em)$@$(sgr0)"
$v $(MAKE) V=$(V) -C $(PCRE2_DIR) libpcre2-$(PCRE2_WIDTH).la
$(PCRE2_H):
@echo " autoconf $(em)$@$(sgr0)"
$v (cd $(PCRE2_DIR) && ./config.status)
#
# Build the fish_tests program.
#
fish_tests: $(FISH_TESTS_OBJS) $(EXTRA_PCRE2)
@echo " CXX LD $(em)$@$(sgr0)"
$v $(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_TESTS_OBJS) $(LIBS) -o $@
#
# Build the fish_indent program.
#
fish_indent: $(FISH_INDENT_OBJS) $(EXTRA_PCRE2)
@echo " CXX LD $(em)$@$(sgr0)"
$v $(CXX) $(CXXFLAGS) $(LDFLAGS) $(FISH_INDENT_OBJS) $(LIBS) -o $@
#
# Build the fish_key_reader program to show input from the terminal.
#
fish_key_reader: $(FISH_KEYREAD_OBJS) $(EXTRA_PCRE2)
@echo " CXX LD $(em)$@$(sgr0)"
$v $(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $^ $(LIBS) -o $@
#
# Update dependencies
# Unfortunately makedepend cannot handle source files in one directory
# and object files in another. So we have to cons up a fake directory
# tree and run it there. Note that some .cpp files do not result in
# objects because they are #include'd directly. In that case we need to
# leave them in the 'header' directory, so they get picked up by the
# dependencies. So we put everything in the header directory and move out
# exactly the files that result in objects, leaving the #include'd files
# behind.
#
depend: | show-MKDIR_P
@echo " CXX LD $(em)$@$(sgr0)"
$v $(MKDIR_P) /tmp/fish_make_depend/src
# This is ran only once in a blue moon - full verbosity so we are reminded what it does.
cp $(wildcard src/*.cpp src/*.h) /tmp/fish_make_depend/src
cp config.h /tmp/fish_make_depend/
mv $(subst obj/,/tmp/fish_make_depend/src/,$(FISH_ALL_OBJS:.o=.cpp)) /tmp/fish_make_depend/
cd /tmp/fish_make_depend && makedepend -f$(CURDIR)/Makefile.in -pobj/ -Y -Isrc *.cpp
rm -Rf /tmp/fish_make_depend
$v ./config.status
.PHONY: depend
#
# Lint the code. This only deals with C++
# TODO - why not have the Makefile run lint.fish on actual files itself (generate a report target?)
#
lint:
$v build_tools/lint.fish "$(CXX)" $(CXXFLAGS) $(CPPFLAGS)
lint-all:
$v build_tools/lint.fish "$(CXX)" --all $(CXXFLAGS) $(CPPFLAGS)
.PHONY: lint lint-all
#
# Run the code through the style refomatter. This handles both C++ files and
# fish scripts (*.fish).
#
style:
$v build_tools/style.fish
style-all:
$v build_tools/style.fish --all
.PHONY: style style-all
#
# Restore the source tree to the state right after extracting a tarball.
#
distclean: clean
-$v test ! -f $(PCRE2_DIR)/Makefile || \
$(MAKE) V=$(V) -C $(PCRE2_DIR) distclean
$v rm -rf config.status config.log config.h Makefile autom4te.cache aclocal.m4
.PHONY: distclean
#
# Remove everything built by the Makefile, but not things that are created by
# the configure script.
#
# Don't delete the docs unless we have Doxygen installed We provide pre-built
# docs in the tarball, and if they get deleted we won't be able to regenerate
# them.
#
clean:
@echo "$(bo)Removing everything built by the Makefile...$(sgr0)"
# PCRE's make clean has a few slightly annoying exceptions to the V= rule. If V=0
# send all output to /dev/null - unless there's an error, in which case run it again not silenced.
ifeq ($(V), 0 )
-@test ! -f $(PCRE2_DIR)/Makefile || \
$(MAKE) -C $(PCRE2_DIR) clean
else
-@test ! -f $(PCRE2_DIR)/Makefile || \
$(MAKE) -s -C $(PCRE2_DIR) clean > /dev/null || \
$(MAKE) -s -C $(PCRE2_DIR) clean
endif
$v rm -f obj/*.o *.o doc.h doc.tmp
$v rm -f doc_src/*.doxygen doc_src/*.cpp doc_src/*.o doc_src/commands.hdr
$v rm -f tests/tmp.err tests/tmp.out tests/tmp.status tests/foo.txt
$v rm -f $(PROGRAMS) fish_tests fish_key_reader
$v rm -f command_list.txt command_list_toc.txt toc.txt
$v rm -f doc_src/index.hdr doc_src/commands.hdr
$v rm -f lexicon_filter lexicon.txt lexicon.log
$v rm -f compile_commands.json xcodebuild.log
$v rm -f FISH-BUILD-VERSION-FILE fish.pc share/__fish_build_paths.fish
$v if test "$(HAVE_DOXYGEN)" = 1; then \
rm -rf doc user_doc share/man; \
fi
$v rm -f po/*.gmo
$v rm -rf obj build test
.PHONY: clean
# For silent build
# These rules need to stay at the end - $v won't work after this.
# if V=0:
# $v cmd ⇒ @cmd
V0 := @
# if V=1
# $v cmd ⇒ cmd
V1 :=
v = $(V$(V))
# DO NOT DELETE THIS LINE -- `make depend` depends on it.
obj/autoload.o: config.h src/autoload.h src/common.h src/fallback.h
obj/autoload.o: src/signal.h src/env.h src/lru.h src/exec.h src/wutil.h
obj/builtin.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin.o: src/signal.h src/builtin_argparse.h src/builtin_bg.h
obj/builtin.o: src/builtin_bind.h src/builtin_block.h src/builtin_builtin.h
obj/builtin.o: src/builtin_cd.h src/builtin_command.h
obj/builtin.o: src/builtin_commandline.h src/builtin_complete.h
obj/builtin.o: src/builtin_contains.h src/builtin_disown.h src/builtin_echo.h
obj/builtin.o: src/builtin_emit.h src/builtin_exit.h src/builtin_fg.h
obj/builtin.o: src/builtin_functions.h src/builtin_history.h
obj/builtin.o: src/builtin_jobs.h src/builtin_math.h src/builtin_printf.h
obj/builtin.o: src/builtin_pwd.h src/builtin_random.h src/builtin_read.h
obj/builtin.o: src/builtin_realpath.h src/builtin_return.h src/builtin_set.h
obj/builtin.o: src/builtin_set_color.h src/builtin_source.h
obj/builtin.o: src/builtin_status.h src/builtin_string.h src/builtin_test.h
obj/builtin.o: src/builtin_ulimit.h src/complete.h src/exec.h src/intern.h
obj/builtin.o: src/io.h src/env.h src/parse_constants.h src/parse_util.h
obj/builtin.o: src/tokenizer.h src/parser.h src/event.h src/expand.h
obj/builtin.o: src/parse_tree.h src/proc.h src/reader.h src/highlight.h
obj/builtin.o: src/color.h src/wgetopt.h src/wutil.h
obj/builtin_argparse.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_argparse.o: src/signal.h src/builtin_argparse.h src/env.h
obj/builtin_argparse.o: src/exec.h src/io.h src/wgetopt.h src/wutil.h
obj/builtin_bg.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_bg.o: src/signal.h src/builtin_bg.h src/io.h src/env.h src/proc.h
obj/builtin_bg.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/builtin_bg.o: src/wutil.h
obj/builtin_bind.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_bind.o: src/signal.h src/builtin_bind.h src/input.h src/io.h
obj/builtin_bind.o: src/env.h src/wgetopt.h src/wutil.h
obj/builtin_block.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_block.o: src/signal.h src/builtin_block.h src/event.h src/io.h
obj/builtin_block.o: src/env.h src/parser.h src/expand.h
obj/builtin_block.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/builtin_block.o: src/proc.h src/wgetopt.h src/wutil.h
obj/builtin_builtin.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_builtin.o: src/signal.h src/builtin_builtin.h src/io.h src/env.h
obj/builtin_builtin.o: src/wgetopt.h src/wutil.h
obj/builtin_cd.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_cd.o: src/signal.h src/builtin_cd.h src/env.h src/io.h
obj/builtin_cd.o: src/parser.h src/event.h src/expand.h src/parse_constants.h
obj/builtin_cd.o: src/parse_tree.h src/tokenizer.h src/proc.h src/path.h
obj/builtin_cd.o: src/wutil.h
obj/builtin_command.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_command.o: src/signal.h src/builtin_command.h src/io.h src/env.h
obj/builtin_command.o: src/path.h src/wgetopt.h src/wutil.h
obj/builtin_commandline.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_commandline.o: src/signal.h src/input.h src/builtin_bind.h
obj/builtin_commandline.o: src/io.h src/env.h src/parse_util.h
obj/builtin_commandline.o: src/parse_constants.h src/tokenizer.h src/proc.h
obj/builtin_commandline.o: src/parse_tree.h src/reader.h src/complete.h
obj/builtin_commandline.o: src/highlight.h src/color.h src/util.h
obj/builtin_commandline.o: src/wgetopt.h src/wutil.h
obj/builtin_complete.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_complete.o: src/signal.h src/complete.h src/env.h src/io.h
obj/builtin_complete.o: src/parse_constants.h src/parse_util.h
obj/builtin_complete.o: src/tokenizer.h src/parser.h src/event.h src/expand.h
obj/builtin_complete.o: src/parse_tree.h src/proc.h src/reader.h
obj/builtin_complete.o: src/highlight.h src/color.h src/wgetopt.h src/wutil.h
obj/builtin_contains.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_contains.o: src/signal.h src/builtin_contains.h src/io.h
obj/builtin_contains.o: src/env.h src/wgetopt.h src/wutil.h
obj/builtin_disown.o: config.h src/signal.h src/builtin.h src/common.h
obj/builtin_disown.o: src/fallback.h src/builtin_disown.h src/io.h src/env.h
obj/builtin_disown.o: src/parser.h src/event.h src/expand.h
obj/builtin_disown.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/builtin_disown.o: src/proc.h src/wutil.h
obj/builtin_echo.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_echo.o: src/signal.h src/builtin_echo.h src/io.h src/env.h
obj/builtin_echo.o: src/wgetopt.h src/wutil.h
obj/builtin_emit.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_emit.o: src/signal.h src/builtin_emit.h src/event.h src/io.h
obj/builtin_emit.o: src/env.h src/wutil.h
obj/builtin_exit.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_exit.o: src/signal.h src/builtin_exit.h src/io.h src/env.h
obj/builtin_exit.o: src/proc.h src/parse_tree.h src/parse_constants.h
obj/builtin_exit.o: src/tokenizer.h src/reader.h src/complete.h
obj/builtin_exit.o: src/highlight.h src/color.h src/wgetopt.h src/wutil.h
obj/builtin_fg.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_fg.o: src/signal.h src/builtin_fg.h src/env.h src/io.h src/proc.h
obj/builtin_fg.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/builtin_fg.o: src/reader.h src/complete.h src/highlight.h src/color.h
obj/builtin_fg.o: src/wutil.h
obj/builtin_function.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_function.o: src/signal.h src/builtin_function.h src/complete.h
obj/builtin_function.o: src/event.h src/function.h src/env.h src/io.h
obj/builtin_function.o: src/parser.h src/expand.h src/parse_constants.h
obj/builtin_function.o: src/parse_tree.h src/tokenizer.h src/proc.h
obj/builtin_function.o: src/parser_keywords.h src/wgetopt.h src/wutil.h
obj/builtin_functions.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_functions.o: src/signal.h src/builtin_functions.h src/env.h
obj/builtin_functions.o: src/event.h src/function.h src/io.h
obj/builtin_functions.o: src/parser_keywords.h src/proc.h src/parse_tree.h
obj/builtin_functions.o: src/parse_constants.h src/tokenizer.h src/wgetopt.h
obj/builtin_functions.o: src/wutil.h
obj/builtin_history.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_history.o: src/signal.h src/builtin_history.h src/history.h
obj/builtin_history.o: src/wutil.h src/io.h src/env.h src/reader.h
obj/builtin_history.o: src/complete.h src/highlight.h src/color.h
obj/builtin_history.o: src/parse_constants.h src/wgetopt.h
obj/builtin_jobs.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_jobs.o: src/signal.h src/io.h src/env.h src/proc.h
obj/builtin_jobs.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/builtin_jobs.o: src/wgetopt.h src/wutil.h
obj/builtin_math.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_math.o: src/signal.h src/builtin_math.h src/io.h src/env.h
obj/builtin_math.o: src/tinyexpr.h src/wgetopt.h src/wutil.h
obj/builtin_printf.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_printf.o: src/signal.h src/io.h src/env.h src/wutil.h
obj/builtin_pwd.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_pwd.o: src/signal.h src/builtin_pwd.h src/io.h src/env.h
obj/builtin_pwd.o: src/wutil.h
obj/builtin_random.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_random.o: src/signal.h src/builtin_random.h src/io.h src/env.h
obj/builtin_random.o: src/wutil.h
obj/builtin_read.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_read.o: src/signal.h src/builtin_read.h src/complete.h src/env.h
obj/builtin_read.o: src/event.h src/highlight.h src/color.h src/history.h
obj/builtin_read.o: src/wutil.h src/io.h src/proc.h src/parse_tree.h
obj/builtin_read.o: src/parse_constants.h src/tokenizer.h src/reader.h
obj/builtin_read.o: src/wcstringutil.h src/wgetopt.h
obj/builtin_realpath.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_realpath.o: src/signal.h src/builtin_realpath.h src/io.h
obj/builtin_realpath.o: src/env.h src/wutil.h
obj/builtin_return.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_return.o: src/signal.h src/builtin_return.h src/io.h src/env.h
obj/builtin_return.o: src/parser.h src/event.h src/expand.h
obj/builtin_return.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/builtin_return.o: src/proc.h src/wgetopt.h src/wutil.h
obj/builtin_set.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_set.o: src/signal.h src/env.h src/expand.h src/parse_constants.h
obj/builtin_set.o: src/io.h src/proc.h src/parse_tree.h src/tokenizer.h
obj/builtin_set.o: src/wgetopt.h src/wutil.h
obj/builtin_set_color.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_set_color.o: src/signal.h src/color.h src/env.h src/io.h
obj/builtin_set_color.o: src/output.h src/wgetopt.h src/wutil.h
obj/builtin_source.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_source.o: src/signal.h src/builtin_source.h src/env.h
obj/builtin_source.o: src/intern.h src/io.h src/parser.h src/event.h
obj/builtin_source.o: src/expand.h src/parse_constants.h src/parse_tree.h
obj/builtin_source.o: src/tokenizer.h src/proc.h src/reader.h src/complete.h
obj/builtin_source.o: src/highlight.h src/color.h src/wutil.h
obj/builtin_status.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_status.o: src/signal.h src/builtin_status.h src/io.h src/env.h
obj/builtin_status.o: src/parser.h src/event.h src/expand.h
obj/builtin_status.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/builtin_status.o: src/proc.h src/wgetopt.h src/wutil.h
obj/builtin_string.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_string.o: src/signal.h src/io.h src/env.h src/parse_util.h
obj/builtin_string.o: src/parse_constants.h src/tokenizer.h
obj/builtin_string.o: src/wcstringutil.h src/wgetopt.h src/wildcard.h
obj/builtin_string.o: src/complete.h src/expand.h src/wutil.h
obj/builtin_test.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_test.o: src/signal.h src/io.h src/env.h src/wutil.h
obj/builtin_ulimit.o: config.h src/builtin.h src/common.h src/fallback.h
obj/builtin_ulimit.o: src/signal.h src/io.h src/env.h src/util.h
obj/builtin_ulimit.o: src/wgetopt.h src/wutil.h
obj/color.o: config.h src/color.h src/common.h src/fallback.h src/signal.h
obj/common.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/common.o: src/expand.h src/parse_constants.h src/proc.h src/io.h
obj/common.o: src/parse_tree.h src/tokenizer.h src/wildcard.h src/complete.h
obj/common.o: src/wutil.h
obj/complete.o: config.h src/autoload.h src/common.h src/fallback.h
obj/complete.o: src/signal.h src/env.h src/lru.h src/builtin.h src/complete.h
obj/complete.o: src/exec.h src/expand.h src/parse_constants.h src/function.h
obj/complete.o: src/event.h src/iothread.h src/parse_tree.h src/tokenizer.h
obj/complete.o: src/parse_util.h src/parser.h src/proc.h src/io.h src/path.h
obj/complete.o: src/util.h src/wildcard.h src/wutil.h
obj/env.o: config.h src/builtin_bind.h src/common.h src/fallback.h
obj/env.o: src/signal.h src/env.h src/env_universal_common.h src/wutil.h
obj/env.o: src/event.h src/expand.h src/parse_constants.h src/fish_version.h
obj/env.o: src/history.h src/input.h src/input_common.h src/output.h
obj/env.o: src/color.h src/path.h src/proc.h src/io.h src/parse_tree.h
obj/env.o: src/tokenizer.h src/reader.h src/complete.h src/highlight.h
obj/env.o: src/sanity.h src/screen.h
obj/env_universal_common.o: config.h src/common.h src/fallback.h src/signal.h
obj/env_universal_common.o: src/env.h src/env_universal_common.h src/wutil.h
obj/env_universal_common.o: src/path.h src/utf8.h src/util.h
obj/event.o: config.h src/signal.h src/common.h src/fallback.h src/event.h
obj/event.o: src/input_common.h src/io.h src/env.h src/parser.h src/expand.h
obj/event.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/event.o: src/proc.h src/wutil.h
obj/exec.o: config.h src/signal.h src/builtin.h src/common.h src/fallback.h
obj/exec.o: src/env.h src/exec.h src/function.h src/event.h src/io.h
obj/exec.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/exec.o: src/parser.h src/expand.h src/proc.h src/postfork.h src/reader.h
obj/exec.o: src/complete.h src/highlight.h src/color.h src/wutil.h
obj/expand.o: config.h src/common.h src/fallback.h src/signal.h
obj/expand.o: src/complete.h src/env.h src/exec.h src/expand.h
obj/expand.o: src/parse_constants.h src/iothread.h src/parse_util.h
obj/expand.o: src/tokenizer.h src/path.h src/proc.h src/io.h src/parse_tree.h
obj/expand.o: src/wildcard.h src/wutil.h
obj/fallback.o: config.h src/signal.h src/common.h src/fallback.h src/util.h
obj/fish.o: config.h src/builtin.h src/common.h src/fallback.h src/signal.h
obj/fish.o: src/env.h src/event.h src/expand.h src/parse_constants.h
obj/fish.o: src/fish_version.h src/function.h src/history.h src/wutil.h
obj/fish.o: src/io.h src/parser.h src/parse_tree.h src/tokenizer.h src/proc.h
obj/fish.o: src/path.h src/reader.h src/complete.h src/highlight.h
obj/fish.o: src/color.h
obj/fish_indent.o: config.h src/color.h src/common.h src/fallback.h
obj/fish_indent.o: src/signal.h src/env.h src/fish_version.h src/highlight.h
obj/fish_indent.o: src/output.h src/parse_constants.h src/parse_tree.h
obj/fish_indent.o: src/tokenizer.h src/print_help.h src/wutil.h
obj/fish_key_reader.o: config.h src/signal.h src/common.h src/fallback.h
obj/fish_key_reader.o: src/env.h src/fish_version.h src/input.h
obj/fish_key_reader.o: src/builtin_bind.h src/input_common.h src/print_help.h
obj/fish_key_reader.o: src/proc.h src/io.h src/parse_tree.h
obj/fish_key_reader.o: src/parse_constants.h src/tokenizer.h src/reader.h
obj/fish_key_reader.o: src/complete.h src/highlight.h src/color.h src/wutil.h
obj/fish_tests.o: config.h src/signal.h src/builtin.h src/common.h
obj/fish_tests.o: src/fallback.h src/color.h src/complete.h src/env.h
obj/fish_tests.o: src/env_universal_common.h src/wutil.h src/event.h
obj/fish_tests.o: src/expand.h src/parse_constants.h src/function.h
obj/fish_tests.o: src/highlight.h src/history.h src/input.h
obj/fish_tests.o: src/builtin_bind.h src/input_common.h src/io.h
obj/fish_tests.o: src/iothread.h src/lru.h src/pager.h src/reader.h
obj/fish_tests.o: src/screen.h src/parse_tree.h src/tokenizer.h
obj/fish_tests.o: src/parse_util.h src/parser.h src/proc.h src/path.h
obj/fish_tests.o: src/utf8.h src/util.h src/wcstringutil.h src/wildcard.h
obj/fish_version.o: src/fish_version.h
obj/function.o: config.h src/autoload.h src/common.h src/fallback.h
obj/function.o: src/signal.h src/env.h src/lru.h src/event.h src/function.h
obj/function.o: src/intern.h src/parser_keywords.h src/reader.h
obj/function.o: src/complete.h src/highlight.h src/color.h
obj/function.o: src/parse_constants.h src/wutil.h
obj/highlight.o: config.h src/builtin.h src/common.h src/fallback.h
obj/highlight.o: src/signal.h src/color.h src/env.h src/expand.h
obj/highlight.o: src/parse_constants.h src/function.h src/event.h
obj/highlight.o: src/highlight.h src/history.h src/wutil.h src/output.h
obj/highlight.o: src/parse_tree.h src/tokenizer.h src/parse_util.h src/path.h
obj/highlight.o: src/wildcard.h src/complete.h
obj/history.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/history.o: src/history.h src/wutil.h src/io.h src/iothread.h src/lru.h
obj/history.o: src/parse_constants.h src/parse_tree.h src/tokenizer.h
obj/history.o: src/parse_util.h src/path.h src/reader.h src/complete.h
obj/history.o: src/highlight.h src/color.h
obj/input.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/input.o: src/event.h src/input.h src/builtin_bind.h src/input_common.h
obj/input.o: src/io.h src/parser.h src/expand.h src/parse_constants.h
obj/input.o: src/parse_tree.h src/tokenizer.h src/proc.h src/reader.h
obj/input.o: src/complete.h src/highlight.h src/color.h src/wutil.h
obj/input_common.o: config.h src/common.h src/fallback.h src/signal.h
obj/input_common.o: src/env.h src/env_universal_common.h src/wutil.h
obj/input_common.o: src/input_common.h src/iothread.h src/util.h
obj/intern.o: config.h src/common.h src/fallback.h src/signal.h src/intern.h
obj/io.o: config.h src/common.h src/fallback.h src/signal.h src/exec.h
obj/io.o: src/io.h src/env.h src/wutil.h
obj/iothread.o: config.h src/signal.h src/common.h src/fallback.h
obj/iothread.o: src/iothread.h src/wutil.h
obj/kill.o: config.h src/common.h src/fallback.h src/signal.h
obj/output.o: config.h src/color.h src/common.h src/fallback.h src/signal.h
obj/output.o: src/env.h src/output.h src/wutil.h
obj/pager.o: config.h src/common.h src/fallback.h src/signal.h src/complete.h
obj/pager.o: src/highlight.h src/color.h src/env.h src/pager.h src/reader.h
obj/pager.o: src/parse_constants.h src/screen.h src/util.h src/wutil.h
obj/parse_execution.o: config.h src/builtin.h src/common.h src/fallback.h
obj/parse_execution.o: src/signal.h src/builtin_function.h src/complete.h
obj/parse_execution.o: src/env.h src/event.h src/exec.h src/expand.h
obj/parse_execution.o: src/parse_constants.h src/function.h src/io.h
obj/parse_execution.o: src/parse_execution.h src/parse_tree.h src/tokenizer.h
obj/parse_execution.o: src/proc.h src/parse_util.h src/parser.h src/path.h
obj/parse_execution.o: src/reader.h src/highlight.h src/color.h src/util.h
obj/parse_execution.o: src/wildcard.h src/wutil.h
obj/parse_productions.o: config.h src/common.h src/fallback.h src/signal.h
obj/parse_productions.o: src/parse_constants.h src/parse_productions.h
obj/parse_productions.o: src/parse_tree.h src/tokenizer.h
obj/parse_tree.o: config.h src/common.h src/fallback.h src/signal.h
obj/parse_tree.o: src/parse_constants.h src/parse_productions.h
obj/parse_tree.o: src/parse_tree.h src/tokenizer.h src/proc.h src/io.h
obj/parse_tree.o: src/env.h src/wutil.h
obj/parse_util.o: config.h src/builtin.h src/common.h src/fallback.h
obj/parse_util.o: src/signal.h src/expand.h src/parse_constants.h
obj/parse_util.o: src/parse_tree.h src/tokenizer.h src/parse_util.h
obj/parse_util.o: src/util.h src/wildcard.h src/complete.h src/wutil.h
obj/parser.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/parser.o: src/event.h src/expand.h src/parse_constants.h src/function.h
obj/parser.o: src/intern.h src/parse_execution.h src/io.h src/parse_tree.h
obj/parser.o: src/tokenizer.h src/proc.h src/parse_util.h src/parser.h
obj/parser.o: src/reader.h src/complete.h src/highlight.h src/color.h
obj/parser.o: src/sanity.h src/wutil.h
obj/parser_keywords.o: config.h src/common.h src/fallback.h src/signal.h
obj/parser_keywords.o: src/parser_keywords.h
obj/path.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/path.o: src/expand.h src/parse_constants.h src/path.h src/wutil.h
obj/postfork.o: config.h src/signal.h src/common.h src/fallback.h src/exec.h
obj/postfork.o: src/io.h src/env.h src/iothread.h src/postfork.h src/proc.h
obj/postfork.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/postfork.o: src/wutil.h
obj/print_help.o: config.h src/common.h src/fallback.h src/signal.h
obj/print_help.o: src/print_help.h
obj/proc.o: config.h src/signal.h src/common.h src/fallback.h src/event.h
obj/proc.o: src/io.h src/env.h src/output.h src/color.h src/parse_tree.h
obj/proc.o: src/parse_constants.h src/tokenizer.h src/parser.h src/expand.h
obj/proc.o: src/proc.h src/reader.h src/complete.h src/highlight.h
obj/proc.o: src/sanity.h src/util.h src/wutil.h
obj/reader.o: config.h src/signal.h src/color.h src/common.h src/fallback.h
obj/reader.o: src/complete.h src/env.h src/event.h src/exec.h src/expand.h
obj/reader.o: src/parse_constants.h src/function.h src/highlight.h
obj/reader.o: src/history.h src/wutil.h src/input.h src/builtin_bind.h
obj/reader.o: src/input_common.h src/intern.h src/io.h src/iothread.h
obj/reader.o: src/kill.h src/output.h src/pager.h src/reader.h src/screen.h
obj/reader.o: src/parse_tree.h src/tokenizer.h src/parse_util.h src/parser.h
obj/reader.o: src/proc.h src/sanity.h src/util.h
obj/sanity.o: config.h src/common.h src/fallback.h src/signal.h src/history.h
obj/sanity.o: src/wutil.h src/kill.h src/proc.h src/io.h src/env.h
obj/sanity.o: src/parse_tree.h src/parse_constants.h src/tokenizer.h
obj/sanity.o: src/reader.h src/complete.h src/highlight.h src/color.h
obj/sanity.o: src/sanity.h
obj/screen.o: config.h src/common.h src/fallback.h src/signal.h src/env.h
obj/screen.o: src/highlight.h src/color.h src/output.h src/pager.h
obj/screen.o: src/complete.h src/reader.h src/parse_constants.h src/screen.h
obj/screen.o: src/util.h
obj/signal.o: config.h src/signal.h src/common.h src/fallback.h src/event.h
obj/signal.o: src/proc.h src/io.h src/env.h src/parse_tree.h
obj/signal.o: src/parse_constants.h src/tokenizer.h src/reader.h
obj/signal.o: src/complete.h src/highlight.h src/color.h src/wutil.h
obj/tokenizer.o: config.h src/common.h src/fallback.h src/signal.h
obj/tokenizer.o: src/tokenizer.h src/wutil.h
obj/utf8.o: config.h src/common.h src/fallback.h src/signal.h src/utf8.h
obj/util.o: config.h src/common.h src/fallback.h src/signal.h src/util.h
obj/util.o: src/wutil.h
obj/wcstringutil.o: config.h src/common.h src/fallback.h src/signal.h
obj/wcstringutil.o: src/wcstringutil.h
obj/wgetopt.o: config.h src/common.h src/fallback.h src/signal.h
obj/wgetopt.o: src/wgetopt.h src/wutil.h
obj/wildcard.o: config.h src/common.h src/fallback.h src/signal.h
obj/wildcard.o: src/complete.h src/expand.h src/parse_constants.h
obj/wildcard.o: src/reader.h src/highlight.h src/color.h src/env.h
obj/wildcard.o: src/wildcard.h src/wutil.h
obj/wutil.o: config.h src/common.h src/fallback.h src/signal.h src/wutil.h