mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
3d7af74ce5
Apparently the OS X linker can't resolve symbols when linking a program (notmuch) against a library (libnotmuch) when the library depends on another library (libgmime) that the program doesn't depend on directly. For this case, we need to link the program directly against both libraries, but we don't want to do this on Linux, where the linker can do this on its own and the explicit, unneeded link would cause problems.
234 lines
7.8 KiB
Makefile
234 lines
7.8 KiB
Makefile
# -*- makefile -*-
|
|
|
|
# Here's the (hopefully simple) versioning scheme.
|
|
#
|
|
# Releases of notmuch have a two-digit version (0.1, 0.2, etc.). We
|
|
# increment the second digit for each release and increment the first
|
|
# digit when we reach particularly major milestones of usability.
|
|
#
|
|
# Between releases, (such as when compiling notmuch from the git
|
|
# repository), we let git to append identification of the actual
|
|
# commit.
|
|
PACKAGE=notmuch
|
|
VERSION:=$(shell if [ -f version ]; then cat version; else git describe --match '[0-9].[0-9]*'; fi)
|
|
|
|
RELEASE_HOST=notmuchmail.org
|
|
RELEASE_DIR=/srv/notmuchmail.org/www/releases
|
|
RELEASE_URL=http://notmuchmail.org/releases
|
|
TAR_FILE=$(PACKAGE)-$(VERSION).tar.gz
|
|
SHA1_FILE=$(TAR_FILE).sha1
|
|
GPG_FILE=$(SHA1_FILE).asc
|
|
|
|
# Smash together user's values with our extra values
|
|
FINAL_CFLAGS = -DNOTMUCH_VERSION=$(VERSION) $(CFLAGS) $(WARN_CFLAGS) $(CONFIGURE_CFLAGS) $(extra_cflags)
|
|
FINAL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(CONFIGURE_CXXFLAGS) $(extra_cflags) $(extra_cxxflags)
|
|
FINAL_NOTMUCH_LDFLAGS = $(LDFLAGS) -Llib -lnotmuch
|
|
ifneq ($(LINKER_RESOLVES_LIBRARY_DEPENDENCIES),1)
|
|
FINAL_NOTMUCH_LDFLAGS += $(CONFIGURE_LDFLAGS)
|
|
endif
|
|
FINAL_LIBNOTMUCH_LDFLAGS = $(LDFLAGS) $(CONFIGURE_LDFLAGS)
|
|
|
|
.PHONY: all
|
|
all: notmuch notmuch-shared notmuch.1.gz
|
|
ifeq ($(MAKECMDGOALS),)
|
|
ifeq ($(shell cat .first-build-message),)
|
|
@NOTMUCH_FIRST_BUILD=1 $(MAKE) --no-print-directory all
|
|
@echo ""
|
|
@echo "Compilation of notmuch is now complete. You can install notmuch with:"
|
|
@echo ""
|
|
@echo " make install"
|
|
@echo ""
|
|
@echo "Note that depending on the prefix to which you are installing"
|
|
@echo "you may need root permission (such as \"sudo make install\")."
|
|
@echo "See \"./configure --help\" for help on setting an alternate prefix."
|
|
@echo Printed > .first-build-message
|
|
endif
|
|
endif
|
|
|
|
$(TAR_FILE):
|
|
git archive --format=tar --prefix=$(PACKAGE)-$(VERSION)/ HEAD > $(TAR_FILE).tmp
|
|
echo $(VERSION) > version
|
|
tar --append -f $(TAR_FILE).tmp --transform s_^_$(PACKAGE)-$(VERSION)/_ version
|
|
rm version
|
|
gzip < $(TAR_FILE).tmp > $(TAR_FILE)
|
|
@echo "Source is ready for release in $(TAR_FILE)"
|
|
|
|
$(SHA1_FILE): $(TAR_FILE)
|
|
sha1sum $^ > $@
|
|
|
|
$(GPG_FILE): $(SHA1_FILE)
|
|
@echo "Please enter your GPG password to sign the checksum."
|
|
gpg --armor --sign $^
|
|
|
|
.PHONY: dist
|
|
dist: $(TAR_FILE)
|
|
|
|
# We invoke make recursively only to force ordering of our phony
|
|
# targets in the case of parallel invocation of make (-j).
|
|
.PHONY: release
|
|
release: release-verify-newer
|
|
$(MAKE) release-upload
|
|
@echo "Please send a release announcement as follows:"
|
|
@echo ""
|
|
$(MAKE) release-message
|
|
$(MAKE) release-message > $(PACKAGE)-$(VERSION).announce
|
|
@echo "(This message is also available in $(PACKAGE)-$(VERSION).announce"
|
|
|
|
.PHONY: release-upload
|
|
release-upload: $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE)
|
|
mkdir -p releases
|
|
scp $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) $(RELEASE_HOST):$(RELEASE_DIR)
|
|
mv $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) releases
|
|
ssh $(RELEASE_HOST) "rm -f $(RELEASE_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(TAR_FILE) $(RELEASE_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
|
|
git tag -s -m "$(PACKAGE) $(VERSION) release" $(VERSION)
|
|
git push origin $(VERSION)
|
|
|
|
.PHONY: release-message
|
|
release-message:
|
|
@echo "To: notmuch@notmuchmail.org"
|
|
@echo "Subject: $(PACKAGE) release $(VERSION) now available"
|
|
@echo ""
|
|
@echo "Where to obtain notmuch $(VERSION)"
|
|
@echo "==========================="
|
|
@echo " $(RELEASE_URL)/$(TAR_FILE)"
|
|
@echo ""
|
|
@echo "Which can be verified with:"
|
|
@echo ""
|
|
@echo " $(RELEASE_URL)/$(SHA1_FILE)"
|
|
@echo -n " "
|
|
@cat releases/$(SHA1_FILE)
|
|
@echo ""
|
|
@echo " $(RELEASE_URL)/$(GPG_FILE)"
|
|
@echo " (signed by `getent passwd "$$USER" | cut -d: -f 5 | cut -d, -f 1`)"
|
|
@echo ""
|
|
@echo "What's new in notmuch $(VERSION)"
|
|
@echo "========================="
|
|
@sed -ne '/^[Nn]otmuch 0.1/{n;n;b NEWS}; d; :NEWS /^===/q; {p;n;b NEWS}' < NEWS | head -n -2
|
|
@echo ""
|
|
@echo "What is notmuch"
|
|
@echo "==============="
|
|
@echo "Notmuch is a system for indexing, searching, reading, and tagging"
|
|
@echo "large collections of email messages in maildir or mh format. It uses"
|
|
@echo "the Xapian library to provide fast, full-text search with a convenient"
|
|
@echo "search syntax."
|
|
@echo ""
|
|
@echo "For more about notmuch, see http://notmuchmail.org"
|
|
|
|
|
|
.PHONY: release-verify-version
|
|
release-verify-version:
|
|
@echo -n "Checking that $(VERSION) is a two-component version..."
|
|
@if echo $(VERSION) | grep -q -v -x '[0-9]*\.[0-9]*'; then \
|
|
(echo "Ouch." && \
|
|
echo "Before releasing the notmuch version should be a two-component value." && false);\
|
|
else :; fi
|
|
@echo "Good."
|
|
|
|
.PHONY: release-verify-newer
|
|
release-verify-newer: release-verify-version
|
|
@echo -n "Checking that no $(VERSION) release already exists..."
|
|
@ssh $(RELEASE_HOST) test ! -e $(RELEASE_DIR)/$(TAR_FILE) \
|
|
|| (echo "Ouch." && echo "Found: $(RELEASE_HOST):$(RELEASE_DIR)/$(TAR_FILE)" \
|
|
&& echo "Refusing to replace an existing release." && false)
|
|
@echo "Good."
|
|
|
|
# The user has not set any verbosity, default to quiet mode and inform the
|
|
# user how to enable verbose compiles.
|
|
ifeq ($(V),)
|
|
quiet_DOC := "Use \"$(MAKE) V=1\" to see the verbose compile lines.\n"
|
|
quiet = @printf $(quiet_DOC)$(eval quiet_DOC:=)"$1 $@\n"; $($(shell echo $1 | sed -e s'/ .*//'))
|
|
endif
|
|
# The user has explicitly enabled quiet compilation.
|
|
ifeq ($(V),0)
|
|
quiet = @printf "$1 $@\n"; $($(shell echo $1 | sed -e s'/ .*//'))
|
|
endif
|
|
# Otherwise, print the full command line.
|
|
quiet ?= $($(shell echo $1 | sed -e s'/ .*//'))
|
|
|
|
%.o: %.cc $(global_deps)
|
|
$(call quiet,CXX $(CXXFLAGS)) -c $(FINAL_CXXFLAGS) $< -o $@
|
|
|
|
%.o: %.c $(global_deps)
|
|
$(call quiet,CC $(CFLAGS)) -c $(FINAL_CFLAGS) $< -o $@
|
|
|
|
.deps/%.d: %.c $(global_deps)
|
|
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
|
|
$(CC) -M $(CPPFLAGS) $(FINAL_CFLAGS) $< > $@.$$$$ 2>/dev/null ; \
|
|
sed 's,'$$(basename $*)'\.o[ :]*,$*.o $@ : ,g' < $@.$$$$ > $@; \
|
|
rm -f $@.$$$$
|
|
|
|
.deps/%.d: %.cc $(global_deps)
|
|
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
|
|
$(CXX) -M $(CPPFLAGS) $(FINAL_CXXFLAGS) $< > $@.$$$$ 2>/dev/null ; \
|
|
sed 's,'$$(basename $*)'\.o[ :]*,$*.o $@ : ,g' < $@.$$$$ > $@; \
|
|
rm -f $@.$$$$
|
|
|
|
DEPS := $(SRCS:%.c=.deps/%.d)
|
|
DEPS := $(DEPS:%.cc=.deps/%.d)
|
|
-include $(DEPS)
|
|
|
|
.PHONY : clean
|
|
clean:
|
|
rm -f $(CLEAN); rm -rf .deps
|
|
|
|
# We don't (yet) have any distributed files not in the upstream repository.
|
|
# So distclean is currently identical to clean.
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
|
|
notmuch_client_srcs = \
|
|
debugger.c \
|
|
gmime-filter-reply.c \
|
|
gmime-filter-headers.c \
|
|
notmuch.c \
|
|
notmuch-config.c \
|
|
notmuch-count.c \
|
|
notmuch-dump.c \
|
|
notmuch-new.c \
|
|
notmuch-reply.c \
|
|
notmuch-restore.c \
|
|
notmuch-search.c \
|
|
notmuch-search-tags.c \
|
|
notmuch-setup.c \
|
|
notmuch-show.c \
|
|
notmuch-tag.c \
|
|
notmuch-time.c \
|
|
query-string.c \
|
|
show-message.c \
|
|
json.c
|
|
|
|
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
|
|
|
|
notmuch: $(notmuch_client_modules) lib/libnotmuch.a
|
|
$(call quiet,CXX $(CFLAGS)) $^ $(FINAL_LIBNOTMUCH_LDFLAGS) -o $@
|
|
|
|
notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME)
|
|
$(call quiet,CXX $(CFLAGS)) $(notmuch_client_modules) $(FINAL_NOTMUCH_LDFLAGS) -o $@
|
|
|
|
notmuch.1.gz: notmuch.1
|
|
gzip --stdout $^ > $@
|
|
|
|
.PHONY: install
|
|
install: all notmuch.1.gz
|
|
mkdir -p $(DESTDIR)$(mandir)/man1
|
|
install -m0644 notmuch.1.gz $(DESTDIR)$(mandir)/man1/
|
|
mkdir -p $(DESTDIR)$(prefix)/bin/
|
|
install notmuch-shared $(DESTDIR)$(prefix)/bin/notmuch
|
|
ifeq ($(MAKECMDGOALS), install)
|
|
@echo ""
|
|
@echo "Notmuch is now installed to $(DESTDIR)$(prefix)"
|
|
@echo ""
|
|
@echo "To run notmuch from emacs, each user should add the following line to ~/.emacs:"
|
|
@echo ""
|
|
@echo " (require 'notmuch)"
|
|
@echo ""
|
|
@echo "And should then run \"M-x notmuch\" from within emacs or run \"emacs -f notmuch\""
|
|
endif
|
|
|
|
.PHONY: install-desktop
|
|
install-desktop:
|
|
mkdir -p $(DESTDIR)$(desktop_dir)
|
|
desktop-file-install --mode 0644 --dir $(DESTDIR)$(desktop_dir) notmuch.desktop
|
|
|
|
SRCS := $(SRCS) $(notmuch_client_srcs)
|
|
CLEAN := $(CLEAN) notmuch notmuch-shared $(notmuch_client_modules) notmuch.elc notmuch.1.gz
|