build: integrate building ruby bindings into notmuch build process

Because ruby generates a Makefile, we have to use recursive make.
Because mkmf.rb hardcodes the name Makefile, put our Makefile{.local}
in the parent directory.
This commit is contained in:
David Bremner 2015-06-01 09:08:59 +02:00
parent 32fd74b7aa
commit d038b93209
6 changed files with 51 additions and 2 deletions

View file

@ -59,7 +59,7 @@ endif
FINAL_LIBNOTMUCH_LDFLAGS = $(LDFLAGS) $(AS_NEEDED_LDFLAGS) $(CONFIGURE_LDFLAGS) FINAL_LIBNOTMUCH_LDFLAGS = $(LDFLAGS) $(AS_NEEDED_LDFLAGS) $(CONFIGURE_LDFLAGS)
.PHONY: all .PHONY: all
all: notmuch notmuch-shared build-man all: notmuch notmuch-shared build-man ruby-bindings
ifeq ($(MAKECMDGOALS),) ifeq ($(MAKECMDGOALS),)
ifeq ($(shell cat .first-build-message 2>/dev/null),) ifeq ($(shell cat .first-build-message 2>/dev/null),)
@NOTMUCH_FIRST_BUILD=1 $(MAKE) --no-print-directory all @NOTMUCH_FIRST_BUILD=1 $(MAKE) --no-print-directory all

7
bindings/Makefile Normal file
View file

@ -0,0 +1,7 @@
# See Makefile.local for the list of files to be compiled in this
# directory.
all:
$(MAKE) -C .. all
.DEFAULT:
$(MAKE) -C .. $@

18
bindings/Makefile.local Normal file
View file

@ -0,0 +1,18 @@
# -*- makefile -*-
dir := bindings
# force the shared library to be built
ruby-bindings: lib/libnotmuch.so
ifeq ($(HAVE_RUBY_DEV),1)
cd $(dir)/ruby && ruby extconf.rb --vendor
$(MAKE) -C $(dir)/ruby
else
@echo Missing dependency, skipping ruby bindings
endif
CLEAN += $(patsubst %,$(dir)/ruby/%, \
.RUBYARCHDIR.time \
Makefile database.o directory.o filenames.o\
init.o message.o messages.o mkmf.log notmuch.so query.o \
status.o tags.o thread.o threads.o)

7
bindings/ruby/README Normal file
View file

@ -0,0 +1,7 @@
To build the the notmuch ruby extension, run the following commands
from the *top level* notmuch source directory:
% ./configure
% make ruby-bindings
The generic documentation about building notmuch also applies.

18
configure vendored
View file

@ -21,6 +21,7 @@ srcdir=$(dirname "$0")
subdirs="util compat lib parse-time-string completion doc emacs" subdirs="util compat lib parse-time-string completion doc emacs"
subdirs="${subdirs} performance-test test test/test-databases" subdirs="${subdirs} performance-test test test/test-databases"
subdirs="${subdirs} bindings"
# For a non-srcdir configure invocation (such as ../configure), create # For a non-srcdir configure invocation (such as ../configure), create
# the directory structure and copy Makefiles. # the directory structure and copy Makefiles.
@ -474,6 +475,15 @@ else
have_doxygen=0 have_doxygen=0
fi fi
printf "Checking for ruby development files... "
if ruby -e "require 'mkmf'"> /dev/null 2>&1; then
printf "Yes.\n"
have_ruby_dev=1
else
printf "No (skipping ruby bindings)\n"
have_ruby_dev=0
fi
printf "Checking if sphinx is available and supports nroff output... " printf "Checking if sphinx is available and supports nroff output... "
if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then if command -v sphinx-build > /dev/null && ${python} -m sphinx.writers.manpage > /dev/null 2>&1 ; then
printf "Yes.\n" printf "Yes.\n"
@ -887,6 +897,10 @@ HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
# build its own version) # build its own version)
HAVE_GETLINE = ${have_getline} HAVE_GETLINE = ${have_getline}
# Are the ruby development files (and ruby) available? If not skip
# building/testing ruby bindings.
HAVE_RUBY_DEV = ${have_ruby_dev}
# Whether the strcasestr function is available (if not, then notmuch will # Whether the strcasestr function is available (if not, then notmuch will
# build its own version) # build its own version)
HAVE_STRCASESTR = ${have_strcasestr} HAVE_STRCASESTR = ${have_strcasestr}
@ -999,6 +1013,10 @@ NOTMUCH_HAVE_MAN=$((have_sphinx))
# Name of python interpreter # Name of python interpreter
NOTMUCH_PYTHON=${python} NOTMUCH_PYTHON=${python}
# Are the ruby development files (and ruby) available? If not skip
# building/testing ruby bindings.
NOTMUCH_HAVE_RUBY_DEV=${have_ruby_dev}
EOF EOF
# Finally, after everything configured, inform the user how to continue. # Finally, after everything configured, inform the user how to continue.

1
debian/rules vendored
View file

@ -19,7 +19,6 @@ override_dh_auto_build:
dh_auto_build -- V=1 dh_auto_build -- V=1
dh_auto_build --sourcedirectory bindings/python dh_auto_build --sourcedirectory bindings/python
cd bindings/python && $(python3_all) setup.py build cd bindings/python && $(python3_all) setup.py build
cd bindings/ruby && ruby extconf.rb --vendor && make
$(MAKE) -C contrib/notmuch-mutt $(MAKE) -C contrib/notmuch-mutt
override_dh_auto_clean: override_dh_auto_clean: