mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +00:00
f0125734d0
Show the gist of what is going on during uninstall. I had overlooked the uninstall target, with it mislabled as having to do translations. Give make uninstall the full treatment here. In addition to showing what is going on, give the user a 5^H7 second warning before we blast away /usr/local/share/fish/ - it's not unthinkable they might have a script or two in there.
1157 lines
47 KiB
Makefile
1157 lines
47 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
|
|
|
|
#
|
|
# This is the default value for SHELL but I like to be explicit about such
|
|
# things. Especially in a project like fish where someone might otherwise
|
|
# think fish will be used to execute make recipes.
|
|
#
|
|
SHELL = /bin/sh
|
|
|
|
#
|
|
# Used by docdir
|
|
#
|
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
|
|
|
#
|
|
# Programs
|
|
#
|
|
CXX = @CXX@
|
|
INSTALL := @INSTALL@
|
|
SED := @SED@
|
|
|
|
#
|
|
# 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.21
|
|
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)
|
|
CPPFLAGS = -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_commandline.o \
|
|
obj/builtin_complete.o obj/builtin_jobs.o obj/builtin_printf.o \
|
|
obj/builtin_set.o obj/builtin_set_color.o obj/builtin_string.o \
|
|
obj/builtin_test.o obj/builtin_ulimit.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/tokenizer.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) 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)))
|
|
|
|
#
|
|
# All translation message catalogs
|
|
#
|
|
TRANSLATIONS_SRC := $(wildcard po/*.po)
|
|
ifdef HAVE_GETTEXT
|
|
TRANSLATIONS := $(TRANSLATIONS_SRC:.po=.gmo)
|
|
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_COLORS:=$(shell tput colors || echo 0 2> /dev/null)
|
|
#
|
|
# Functions for status output
|
|
#
|
|
T_GREEN := $(shell ( tput setaf 2 || tput AF 2 ) 2> /dev/null )
|
|
T_YELLOWB := $(shell ( tput setaf 3 || tput AF 3 ) 2> /dev/null )
|
|
T_CYAN := $(shell ( tput setaf 6 || tput AF 6 ) 2> /dev/null )
|
|
T_RED := $(shell ( tput setaf 1 || tput AF 1 ) 2> /dev/null )
|
|
T_BOLD := $(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_COLORS), 256)
|
|
T_ITALIC := $(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.
|
|
T_DIM := $(shell ( tput dim || tput mh || [ $(TERM_PROGRAM) = Apple_Terminal ] && echo "\\033[2m") 2> /dev/null )
|
|
else
|
|
T_ITALIC := $(shell ( tput sitm || tput ZH ) 2> /dev/null )
|
|
T_DIM := $(shell ( tput dim || tput mh) 2> /dev/null )
|
|
endif
|
|
|
|
T_RESET := $(shell ( tput sgr0 || tput me) 2> /dev/null )
|
|
|
|
#
|
|
# A target that prettily shows VAR='$(VAR)' (properly escaped)
|
|
# Cool trick: `make show-$var` (e.g. make show-HAVE_DOXYGEN) to quickly see what $var is.
|
|
#
|
|
show-%:
|
|
@echo " $* = $(T_ITALIC)$(T_CYAN)'$(subst ',''',$($*))'$(T_RESET)" ||:
|
|
|
|
#
|
|
# Make everything needed for installing fish
|
|
#
|
|
all: show-CXX show-CXXFLAGS $(PROGRAMS) $(user_doc) $(share_man) $(TRANSLATIONS) fish.pc share/__fish_build_paths.fish
|
|
@echo $(MAKECMDGOALS) | grep -vq install && echo "$(T_GREEN)fish has now been built.$(T_RESET)" ||:
|
|
@echo "Run $(T_YELLOWB)$(notdir $(MAKE)) install$(T_RESET) to install fish.$(T_RESET)" ||:
|
|
.PHONY: all
|
|
|
|
#
|
|
# Pull version information
|
|
#
|
|
FISH-BUILD-VERSION-FILE: FORCE |
|
|
$(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..."$(T_DIM)
|
|
$(v) ./config.status --recheck
|
|
@echo $(T_RESET)
|
|
|
|
Makefile: Makefile.in configure
|
|
@echo "Checking config.status..."$(T_DIM)
|
|
$(v) ./config.status
|
|
@echo $(T_RESET)
|
|
|
|
#
|
|
# 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 | show-SED
|
|
@echo " doxygen $(T_ITALIC)user_doc$(T_RESET)"
|
|
$(v)(cat Doxyfile.user; echo INPUT_FILTER=./lexicon_filter; \
|
|
echo PROJECT_NUMBER=$(FISH_BUILD_VERSION) | $(SED) "s/-.*//") | \
|
|
doxygen - && touch user_doc
|
|
$(v)cd user_doc/html && rm -f arrow*.png bc_s.png bdwn.png closed.png \
|
|
doc.png folder*.png ftv2*.png nav*.png open.png splitbar.png \
|
|
sync_*.png tab*.* doxygen.* dynsections.js jquery.js pages.html
|
|
|
|
#
|
|
# PDF version of the source code documentation.
|
|
#
|
|
doc/refman.pdf: doc
|
|
$(v)cd doc/latex && $(MAKE) V=$(V) && mv refman.pdf ..
|
|
$(v)rm -rf doc/latex
|
|
|
|
#
|
|
# 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:
|
|
$(v)rm -rf test
|
|
$(v)mkdir test test/data test/home test/temp
|
|
ifdef DESTDIR
|
|
$(v)ln -s $(DESTDIR) test/root
|
|
else
|
|
$(v)mkdir 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
|
|
|
|
#
|
|
# 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
|
|
|
|
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))
|
|
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: test_fishscript test_interactive
|
|
.PHONY: test_high_level
|
|
|
|
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
|
|
$(v)rm -f command_list.tmp command_list_toc.tmp $@
|
|
$(v)for i in `printf "%s\n" $(HELP_SRC)|sort`; do \
|
|
echo "<hr>" >>command_list.tmp; \
|
|
cat $$i >>command_list.tmp; \
|
|
echo >>command_list.tmp; \
|
|
echo >>command_list.tmp; \
|
|
NAME=`basename $$i .txt`; \
|
|
echo '- <a href="#'$$NAME'">'$$NAME'</a>' >> command_list_toc.tmp; \
|
|
echo "Back to <a href='index.html#toc-commands'>index</a>". >>command_list.tmp; \
|
|
done
|
|
$(v)mv command_list.tmp command_list.txt
|
|
$(v)mv command_list_toc.tmp command_list_toc.txt
|
|
$(v)cat $@.in | awk '{if ($$0 ~ /@command_list_toc@/) { system("cat command_list_toc.txt"); } else if ($$0 ~ /@command_list@/){ system("cat command_list.txt");} else{ print $$0;}}' >$@
|
|
|
|
toc.txt: $(HDR_FILES:index.hdr=index.hdr.in)
|
|
$(v)rm -f toc.tmp $@
|
|
# Ugly hack to set the toc initial title for the main page
|
|
$(v)echo '- <a href="index.html" id="toc-index">Documentation</a>' > toc.tmp
|
|
# The first sed command captures the page name, followed by the description
|
|
# The second sed command captures the command name \1 and the description \2, but only up to a dash
|
|
# This is to reduce the size of the TOC in the command listing on the main page
|
|
$(v)for i in $(HDR_FILES:index.hdr=index.hdr.in); do\
|
|
NAME=`basename $$i .hdr`; \
|
|
NAME=`basename $$NAME .hdr.in`; \
|
|
$(SED) <$$i >>toc.tmp -n \
|
|
-e 's,.*\\page *\([^ ]*\) *\(.*\)$$,- <a href="'$$NAME'.html" id="toc-'$$NAME'">\2</a>,p' \
|
|
-e 's,.*\\section *\([^ ]*\) *\([^-]*\)\(.*\)$$, - <a href="'$$NAME'.html#\1">\2</a>,p'; \
|
|
done
|
|
$(v)mv toc.tmp $@
|
|
|
|
doc_src/index.hdr: toc.txt doc_src/index.hdr.in
|
|
$(v)cat $@.in | awk '{if ($$0 ~ /@toc@/){ system("cat toc.txt");} else{ print $$0;}}' >$@
|
|
|
|
#
|
|
# To enable the lexicon filter, we first need to be aware of what fish
|
|
# considers to be a command, function, or external binary. We use
|
|
# command_list_toc.txt for the base commands. Scan the share/functions
|
|
# directory for other functions, some of which are mentioned in the docs, and
|
|
# use /share/completions to find a good selection of binaries. Additionally,
|
|
# colour defaults from __fish_config_interactive to set the docs colours when
|
|
# used in a 'cli' style context.
|
|
#
|
|
lexicon.txt: doc_src/commands.hdr $(FUNCTIONS_DIR_FILES) $(COMPLETIONS_DIR_FILES) share/functions/__fish_config_interactive.fish | show-SED
|
|
$(v)rm -f lexicon.tmp lexicon_catalog.tmp lexicon_catalog.txt $@
|
|
# Scan sources for commands/functions/binaries/colours. If GNU sed was portable, this could be much smarter.
|
|
@echo " SED $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)$(SED) <command_list_toc.txt >>lexicon.tmp -n \
|
|
-e "s|^.*>\([a-z][a-z_]*\)</a>|'\1'|w lexicon_catalog.tmp" \
|
|
-e "s|'\(.*\)'|bltn \1|p"; mv lexicon_catalog.tmp lexicon_catalog.txt; \
|
|
printf "%s\n" $(COMPLETIONS_DIR_FILES) | $(SED) -n \
|
|
-e "s|[^ ]*/\([a-z][a-z_-]*\).fish|'\1'|p" | fgrep -vx -f lexicon_catalog.txt | $(SED) >>lexicon.tmp -n \
|
|
-e 'w lexicon_catalog.tmp' \
|
|
-e "s|'\(.*\)'|cmnd \1|p"; cat lexicon_catalog.tmp >> lexicon_catalog.txt; \
|
|
printf "%s\n" $(FUNCTIONS_DIR_FILES) | $(SED) -n \
|
|
-e "s|[^ ]*/\([a-z][a-z_-]*\).fish|'\1'|p" | fgrep -vx -f lexicon_catalog.txt | $(SED) >>lexicon.tmp -n \
|
|
-e 'w lexicon_catalog.tmp' \
|
|
-e "s|'\(.*\)'|func \1|p"; \
|
|
$(SED) <share/functions/__fish_config_interactive.fish >>lexicon.tmp -n \
|
|
-e '/set_default/s/.*\(fish_[a-z][a-z_]*\).*$$/clrv \1/p'; \
|
|
$(SED) <lexicon_filter.in >>lexicon.tmp -n \
|
|
-e '/^#.!#/s/^#.!# \(.... [a-z][a-z_]*\)/\1/p'; \
|
|
mv lexicon.tmp lexicon.txt; rm -f lexicon_catalog.tmp lexicon_catalog.txt;
|
|
|
|
#
|
|
# 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: lexicon.txt lexicon_filter.in | show-SED
|
|
$(v)rm -f $@.tmp $@
|
|
@echo " SED $(T_ITALIC)$@$(T_RESET)"
|
|
# Set the shebang as sed can reside in multiple places.
|
|
$(v)$(SED) <$@.in >$@.tmp -e 's|@sed@|'$(SED)'|'
|
|
# Scan through the lexicon, transforming each line to something useful to Doxygen.
|
|
$(v)if echo x | $(SED) "/[[:<:]]x/d" 2>/dev/null; then \
|
|
WORDBL='[[:<:]]'; WORDBR='[[:>:]]'; \
|
|
else \
|
|
WORDBL='\\<'; WORDBR='\\>'; \
|
|
fi; \
|
|
$(SED) <lexicon.txt >>$@.tmp -n \
|
|
-e "s|^\([a-z][a-z][a-z][a-z]\) \([a-z_-]*\)$$|s,$$WORDBL\2$$WORDBR,@\1{\2},g|p" \
|
|
-e '$$G;s/.*\n/b tidy/p'; \
|
|
mv $@.tmp $@; if test -x $@; then true; else chmod a+x $@; fi
|
|
|
|
#
|
|
# 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)
|
|
$(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 "/** \page " `basename $*` >$@;
|
|
cat $*.txt >>$@;
|
|
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
|
|
$(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 $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)msgfmt -o $@ $*.po
|
|
|
|
#
|
|
# Update existing po file or copy messages.pot
|
|
#
|
|
%.po:messages.pot
|
|
@echo " msgmerge $(T_ITALIC)$@$(T_RESET)"
|
|
$(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: src/*.cpp src/*.h share/completions/*.fish share/functions/*.fish
|
|
@echo " xgettext $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)xgettext -k_ -kN_ src/*.cpp src/*.h -o messages.pot
|
|
$(v)xgettext -j -k_ -kN_ -k--description -LShell --from-code=UTF-8 share/completions/*.fish share/functions/*.fish -o messages.pot
|
|
|
|
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 $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)touch share/man
|
|
-$(v)rm -Rf share/man/man1
|
|
$(v)echo "$(T_DIM)" && \
|
|
PROJECT_NUMBER=`echo $(FISH_BUILD_VERSION)| $(SED) "s/-.*//"` INPUT_FILTER=./lexicon_filter \
|
|
build_tools/build_documentation.sh Doxyfile.help ./doc_src ./share; echo "$(T_RESET)";
|
|
|
|
#
|
|
# 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 "$(T_RED)A key_reader binary was found. You might want to remove this, and use 'fish_key_reader':";\
|
|
echo " '$$KR_LOC'$(T_RESET)";\
|
|
fi;
|
|
$(v)SEQLOC=$(prefix)/bin/seq;\
|
|
if test -f "$$SEQLOC" && grep -q '\(^#!/.*/fish\|^#!/usr/bin/env fish\)' "$$SEQLOC"; then\
|
|
echo "$(T_RED)An outdated seq from a previous fish install was found. You should remove it with:";\
|
|
echo " rm '$$SEQLOC'$(T_RESET)";\
|
|
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 "$(T_RED)An outdated set_color from a previous fish install was found. You should remove it with:";\
|
|
echo " rm '$$SETCOLOR_LOC'$(T_RESET)";\
|
|
fi;
|
|
$(v)MIMEDB_LOC=$(prefix)/bin/mimedb;\
|
|
if test -x "$$MIMEDB_LOC" && $$MIMEDB_LOC --version 2>&1 | grep -q "^mimedb, version "; then\
|
|
echo "$(T_RED)An outdated mimedb binary from a previous fish install was found. You should remove it with:";\
|
|
echo " rm '$$MIMEDB_LOC'$(T_RESET)";\
|
|
fi;
|
|
$(v)FISHD_LOC=$(prefix)/bin/fishd;\
|
|
if test -x "$$FISHD_LOC" && $$FISHD_LOC --version 2>&1 | grep -q "^fishd: fishd, version "; then\
|
|
echo "$(T_RED)An outdated fishd binary from a previous fish install was found. You should remove it with:";\
|
|
echo " rm '$$FISHD_LOC'$(T_RESET)";\
|
|
fi;
|
|
$(v)true;
|
|
.PHONY: check-legacy-binaries
|
|
|
|
install: all install-force | check-legacy-binaries
|
|
@echo
|
|
@echo "$(T_BOLD)fish is now installed on your system.$(T_RESET)"
|
|
@echo "To run fish, type $(T_BOLD)$(T_GREEN)fish$(T_RESET) in your terminal."
|
|
@echo "$(T_YELLOW)Even if you are already in fish, you should now start a new fish session.$(T_RESET)"
|
|
@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 \* add the line \'$(DESTDIR)$(bindir)/fish\' to the file \'/etc/shells\'; \
|
|
echo " * run $(T_YELLOWB)chsh -s $(DESTDIR)$(bindir)/fish$(T_RESET)"; \
|
|
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 $(T_GREEN)$(T_BOLD)fish_config$(T_RESET)"
|
|
@echo "To scan your man pages for completions, run $(T_GREEN)$(T_BOLD)fish_update_completions$(T_RESET)"
|
|
@echo "To accept autosuggestions (in $(T_DIM)grey$(T_RESET)) as you type, hit $(T_BOLD)ctrl-F$(T_RESET) or right arrow key."
|
|
@echo
|
|
@echo "$(T_BOLD)Have fun! <><$(T_RESET)"
|
|
.PHONY: install
|
|
|
|
#
|
|
# Xcode install
|
|
#
|
|
xcode-install:
|
|
rm -Rf /tmp/fish_build
|
|
xcodebuild install DSTROOT=/tmp/fish_build
|
|
ditto /tmp/fish_build
|
|
.PHONY: xcode-install
|
|
|
|
#
|
|
# Actually do the installation. These '||true', '||:' lines are to prevent installs
|
|
# from failing for (e.g.) missing man pages or extra_dirs outside the
|
|
# writeable prefix.
|
|
#
|
|
install-force: all install-translations | 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 $(T_BOLD)$$i$(T_RESET)";\
|
|
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/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 empty 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 $(T_BOLD)fish completion libraryn$(T_RESET)...";
|
|
$(v)for i in $(COMPLETIONS_DIR_FILES:%='%'); do \
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/completions/; \
|
|
true; \
|
|
done;
|
|
@echo "Installing $(T_BOLD)fish functions$(T_RESET)";
|
|
$(v)for i in $(FUNCTIONS_DIR_FILES:%='%'); do \
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/functions/; \
|
|
true; \
|
|
done;
|
|
@echo "Installing $(T_BOLD)man pages$(T_RESET)";
|
|
$(v)for i in share/man/man1/*.1; do \
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/man/man1/; \
|
|
true; \
|
|
done;
|
|
@echo "Installing $(T_BOLD)fish tools$(T_RESET)";
|
|
$(v)for i in share/tools/*.py; do\
|
|
$(INSTALL) -m 755 $$i $(DESTDIR)$(datadir)/fish/tools/; \
|
|
true; \
|
|
done;
|
|
$(v)for i in share/tools/web_config/*.*; do\
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/; \
|
|
true; \
|
|
done;
|
|
$(v)for i in share/tools/web_config/js/*.*; do\
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/js/; \
|
|
true; \
|
|
done;
|
|
$(v)for i in share/tools/web_config/partials/*; do\
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/partials/; \
|
|
true; \
|
|
done;
|
|
$(v)for i in share/tools/web_config/sample_prompts/*.fish; do\
|
|
$(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/sample_prompts/; \
|
|
true; \
|
|
done;
|
|
$(v)for i in share/tools/web_config/*.py; do\
|
|
$(INSTALL) -m 755 $$i $(DESTDIR)$(datadir)/fish/tools/web_config/; \
|
|
true; \
|
|
done;
|
|
@echo "Installing HTML 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;
|
|
@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;
|
|
.PHONY: install-force
|
|
|
|
#
|
|
# Uninstall this fish version
|
|
#
|
|
uninstall: uninstall-translations | show-prefix show-bindir show-sysconfdir show-datadir show-docdir show-mandir
|
|
@echo
|
|
@echo "$(T_BOLD)$(T_YELLOWB)Uninstalling fish$(T_RESET) from configured \$$prefix: $(T_BOLD)$(prefix)$(T_RESET)"
|
|
@echo
|
|
@echo "Deleting programs: [ $(T_BOLD)$(PROGRAMS)$(T_RESET) ] in $(T_ITALIC)$(bindir)$(T_RESET)"
|
|
-$(v)for i in $(PROGRAMS); do \
|
|
rm -f $(DESTDIR)$(bindir)/$$i; \
|
|
done;
|
|
@echo "Deleting configuration: $(T_BOLD)$(DESTDIR)$(sysconfdir)/fish/*$(T_RESET)"
|
|
-$(v)rm -rf $(DESTDIR)$(sysconfdir)/fish
|
|
@echo
|
|
@echo "In 5 seconds, $(T_RED)all data$(T_RESET) (includes functions, completions, tools) in"
|
|
@echo $$"\t$(T_BOLD)$(DESTDIR)$(datadir)/fish$(T_RESET) will be deleted!"
|
|
@echo
|
|
@echo $$"If you put things there, $(T_RED)stop now!$(T_RESET) $(T_BOLD)\\c"
|
|
@echo $$"$(T_BOLD)5$(T_RESET) \\c"
|
|
@sleep 1
|
|
@echo $$"$(T_BOLD)4$(T_RESET) \\c"
|
|
@sleep 1
|
|
@echo $$"$(T_BOLD)3$(T_RESET) \\c"
|
|
@sleep 1
|
|
@echo $$"$(T_BOLD)2$(T_RESET) \\c"
|
|
@sleep 1
|
|
@echo $$"$(T_BOLD)1$(T_RESET) \\c"
|
|
@sleep 1
|
|
@echo ...
|
|
@sleep 2
|
|
@echo "... deleting $(T_BOLD)$(DESTDIR)$(datadir)/fish/*$(T_RESET)"
|
|
-$(v) if test -d $(DESTDIR)$(datadir)/fish; then \
|
|
rm -rf $(DESTDIR)$(datadir)/fish; \
|
|
fi
|
|
@echo
|
|
@echo "Deleting documentation: $(T_BOLD)$(DESTDIR)$(docdir)/*$(T_RESET)"
|
|
-$(v) if test -d $(DESTDIR)$(docdir); then \
|
|
rm -rf $(DESTDIR)$(docdir);\
|
|
fi
|
|
@echo
|
|
@echo "Deleting pkgconfig file: $(T_BOLD)$(DESTDIR)$(datadir)/pkgconfig/fish.pc$(T_RESET)"
|
|
-$(v) if test -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc; then \
|
|
rm -f $(DESTDIR)$(datadir)/pkgconfig/fish.pc;\
|
|
fi
|
|
@echo
|
|
@echo $$"Deleting \\c"
|
|
@echo "[ $(T_BOLD)"`basename $(MANUALS)`$(T_RESET) $$"] in \\c"
|
|
@echo "$(T_ITALIC)$(mandir)/man1$(T_RESET)"
|
|
-$(v) for i in $(MANUALS); do \
|
|
rm -rf $(DESTDIR)$(mandir)/man1/`basename $$i`*; \
|
|
done;
|
|
@echo
|
|
@echo "$(T_GREEN)Fish (likely) unintalled$(T_RESET)"
|
|
@echo
|
|
@echo "$(T_BOLD)./configure --prefix=$(T_RESET) to uninstall fish from a different prefix"
|
|
.PHONY: uninstall
|
|
|
|
install-translations: $(TRANSLATIONS)
|
|
ifdef HAVE_GETTEXT
|
|
@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:
|
|
$(v)rm -f $(DESTDIR)$(localedir)/*/LC_MESSAGES/fish.mo
|
|
.PHONY: uninstall-translations
|
|
|
|
#
|
|
# The build rules for all the commands
|
|
#
|
|
|
|
#
|
|
# How basic files get compiled
|
|
#
|
|
obj/%.o: src/%.cpp | obj
|
|
@echo " CXX $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
|
|
|
|
#
|
|
# obj directory
|
|
#
|
|
obj:
|
|
$(v)mkdir obj
|
|
|
|
#
|
|
# Build the fish program.
|
|
#
|
|
fish: obj/fish.o $(FISH_OBJS) $(EXTRA_PCRE2)
|
|
@echo " CXXLD $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_OBJS) obj/fish.o $(LIBS) -o $@
|
|
|
|
$(PCRE2_LIB): $(PCRE2_H)
|
|
@echo " MAKE $(T_ITALIC)$@$(T_RESET)"
|
|
@$(MAKE) V=$(V) -C $(PCRE2_DIR) libpcre2-$(PCRE2_WIDTH).la
|
|
|
|
$(PCRE2_H):
|
|
$(v)(cd $(PCRE2_DIR) && ./config.status)
|
|
|
|
#
|
|
# Build the fish_tests program.
|
|
#
|
|
fish_tests: $(FISH_TESTS_OBJS) $(EXTRA_PCRE2)
|
|
@echo " CXXLD $(T_ITALIC)$@$(T_RESET)"
|
|
$(v)$(CXX) $(CXXFLAGS) $(LDFLAGS_FISH) $(FISH_TESTS_OBJS) $(LIBS) -o $@
|
|
|
|
#
|
|
# Build the fish_indent program.
|
|
#
|
|
fish_indent: $(FISH_INDENT_OBJS) $(EXTRA_PCRE2)
|
|
@echo " CXXLD $(T_ITALIC)$@$(T_RESET)"
|
|
$(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 " CXXLD $(T_ITALIC)$@$(T_RESET)"
|
|
$(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:
|
|
@echo $(T_ITALIC)"Running makedepend..."$(T_RESET)
|
|
$(v)mkdir -p /tmp/fish_make_depend/src
|
|
$(v)cp src/*.cpp src/*.h /tmp/fish_make_depend/src
|
|
$(v)cp config.h /tmp/fish_make_depend/
|
|
$(v)mv $(subst obj/,/tmp/fish_make_depend/src/,$(FISH_ALL_OBJS:.o=.cpp)) /tmp/fish_make_depend/
|
|
$(v)cd /tmp/fish_make_depend && makedepend -f$(CURDIR)/Makefile.in -pobj/ -Y -Isrc *.cpp
|
|
$(v)rm -Rf /tmp/fish_make_depend
|
|
$(v)./config.status
|
|
.PHONY: depend
|
|
|
|
#
|
|
# Lint the code. This only deals with C++
|
|
#
|
|
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)$(MAKE) V=$(V) -C $(PCRE2_DIR) distclean ||:
|
|
$(v)rm -f config.status config.log config.h Makefile
|
|
.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 "$(T_BOLD)Removing everything built by the Makefile...$(T_RESET)"
|
|
# 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 )
|
|
$(MAKE) -C $(PCRE2_DIR) clean ||:
|
|
else
|
|
@$(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/lru.h src/env.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_commandline.h src/builtin_complete.h
|
|
obj/builtin.o: src/builtin_jobs.h src/builtin_printf.h src/builtin_set.h
|
|
obj/builtin.o: src/builtin_set_color.h src/builtin_string.h
|
|
obj/builtin.o: src/builtin_test.h src/builtin_ulimit.h src/complete.h
|
|
obj/builtin.o: src/env.h src/event.h src/exec.h src/expand.h
|
|
obj/builtin.o: src/parse_constants.h src/function.h src/highlight.h
|
|
obj/builtin.o: src/color.h src/history.h src/wutil.h src/input.h src/intern.h
|
|
obj/builtin.o: src/io.h src/parse_util.h src/tokenizer.h src/parser.h
|
|
obj/builtin.o: src/parse_tree.h src/proc.h src/parser_keywords.h src/path.h
|
|
obj/builtin.o: src/reader.h src/wcstringutil.h src/wgetopt.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/env.h src/io.h
|
|
obj/builtin_commandline.o: src/parse_util.h src/parse_constants.h
|
|
obj/builtin_commandline.o: src/tokenizer.h src/proc.h src/parse_tree.h
|
|
obj/builtin_commandline.o: src/reader.h src/complete.h src/highlight.h
|
|
obj/builtin_commandline.o: src/color.h src/util.h 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_jobs.o: config.h src/builtin.h src/common.h src/fallback.h
|
|
obj/builtin_jobs.o: src/signal.h src/io.h src/proc.h src/parse_tree.h
|
|
obj/builtin_jobs.o: src/parse_constants.h src/tokenizer.h src/wgetopt.h
|
|
obj/builtin_jobs.o: 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/proc.h src/parse_tree.h
|
|
obj/builtin_printf.o: src/parse_constants.h src/tokenizer.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/io.h src/output.h
|
|
obj/builtin_set_color.o: src/proc.h src/parse_tree.h src/parse_constants.h
|
|
obj/builtin_set_color.o: src/tokenizer.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/parse_util.h
|
|
obj/builtin_string.o: src/parse_constants.h src/tokenizer.h src/wgetopt.h
|
|
obj/builtin_string.o: src/wildcard.h 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/proc.h src/parse_tree.h
|
|
obj/builtin_test.o: src/parse_constants.h src/tokenizer.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/util.h src/wgetopt.h
|
|
obj/builtin_ulimit.o: 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/signal.h src/common.h src/fallback.h src/expand.h
|
|
obj/common.o: src/parse_constants.h src/wildcard.h src/complete.h src/wutil.h
|
|
obj/complete.o: config.h src/autoload.h src/common.h src/fallback.h
|
|
obj/complete.o: src/signal.h src/lru.h src/builtin.h src/complete.h src/env.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/common.h src/fallback.h src/signal.h src/env.h
|
|
obj/env.o: src/env_universal_common.h src/wutil.h src/event.h src/expand.h
|
|
obj/env.o: src/parse_constants.h src/fish_version.h src/history.h src/input.h
|
|
obj/env.o: src/input_common.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/color.h src/sanity.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/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/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/util.h src/wildcard.h src/wutil.h
|
|
obj/fallback.o: config.h src/signal.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/input.h src/input_common.h src/io.h src/parser.h
|
|
obj/fish.o: src/parse_tree.h src/tokenizer.h src/proc.h src/path.h
|
|
obj/fish.o: src/reader.h src/complete.h src/highlight.h src/color.h
|
|
obj/fish.o: src/wildcard.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/input.h src/output.h src/parse_constants.h
|
|
obj/fish_indent.o: src/parse_tree.h src/tokenizer.h src/print_help.h
|
|
obj/fish_indent.o: 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/input.h src/input_common.h
|
|
obj/fish_key_reader.o: src/print_help.h 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/input_common.h src/io.h src/iothread.h src/lru.h
|
|
obj/fish_tests.o: src/pager.h src/reader.h src/screen.h src/parse_tree.h
|
|
obj/fish_tests.o: src/tokenizer.h src/parse_util.h src/parser.h src/proc.h
|
|
obj/fish_tests.o: src/path.h src/utf8.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/lru.h src/env.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/path.h src/reader.h src/complete.h src/highlight.h
|
|
obj/history.o: 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/input_common.h src/io.h src/output.h
|
|
obj/input.o: src/color.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/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/wutil.h
|
|
obj/iothread.o: config.h src/signal.h src/common.h src/fallback.h
|
|
obj/iothread.o: src/iothread.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/complete.h src/env.h src/event.h
|
|
obj/parse_execution.o: src/exec.h src/expand.h src/parse_constants.h
|
|
obj/parse_execution.o: src/function.h src/io.h src/parse_execution.h
|
|
obj/parse_execution.o: src/parse_tree.h src/tokenizer.h src/proc.h
|
|
obj/parse_execution.o: src/parse_util.h src/parser.h src/path.h src/reader.h
|
|
obj/parse_execution.o: src/highlight.h src/color.h src/util.h src/wildcard.h
|
|
obj/parse_execution.o: 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/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/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/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 src/env.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/input_common.h
|
|
obj/reader.o: src/intern.h src/io.h src/iothread.h src/kill.h src/output.h
|
|
obj/reader.o: src/pager.h src/reader.h src/screen.h src/parse_tree.h
|
|
obj/reader.o: src/tokenizer.h src/parse_util.h src/parser.h src/proc.h
|
|
obj/reader.o: 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/parse_tree.h
|
|
obj/sanity.o: src/parse_constants.h src/tokenizer.h src/reader.h
|
|
obj/sanity.o: src/complete.h src/highlight.h src/color.h src/env.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/parse_tree.h src/parse_constants.h
|
|
obj/signal.o: src/tokenizer.h src/reader.h src/complete.h src/highlight.h
|
|
obj/signal.o: src/color.h src/env.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/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
|