Integrate the TrIPE server into the Java edifice.
[tripe-android] / Makefile
index e00445f..5edb29a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -30,15 +30,17 @@ VERSION                     := $(shell ./auto-version)
 ###--------------------------------------------------------------------------
 ### Build parameters.
 
+abs_builddir           := $(shell pwd)
+
 ## Where to put the object files.
-OUTDIR                  = out/
+OUTDIR                  = out
 
 ## Native C compiler.
 CC                      = gcc
 CFLAGS                  = -O2 -g -Wall -pedantic -Werror
 
 ## Native linker.
-LD                      = gcc
+LD                      = gcc -Wl,-z,defs
 LDFLAGS.so              = -shared
 
 ## External `pkg-config' packages required.
@@ -105,14 +107,30 @@ V_AT_0                     = @
 ###--------------------------------------------------------------------------
 ### External native packages.
 
-PKGS_CFLAGS            := $(foreach p,$(PKGS),$(shell pkg-config --cflags $p))
-PKGS_LIBS              := $(foreach p,$(PKGS),$(shell pkg-config --libs $p))
+EXTPREFIX               = $(abs_builddir)/$(OUTDIR)/inst
+
+join-paths              = $(if $(filter /%,$2),$2,$1/$2)
+ext-srcdir              = $(or $($1_SRCDIR),../$1)
+
+PKG_CONFIG              = PKG_CONFIG_LIBDIR=$(OUTDIR)/inst/lib/pkgconfig \
+                               pkg-config --static
+
+PKGS_CFLAGS            := $(foreach p,$(PKGS),$(shell $(PKG_CONFIG) --cflags $p))
+PKGS_LIBS              := $(foreach p,$(PKGS),$(shell $(PKG_CONFIG) --libs $p))
 
 ALL_CFLAGS              = $(CFLAGS) -fPIC \
                                $(addprefix -I,$(JNI_INCLUDES)) \
+                               -I$(OUTDIR)/inst/include \
+                               -I$(call ext-srcdir,tripe)/common \
+                               -I$(call ext-srcdir,tripe)/priv \
+                               -I$(call ext-srcdir,tripe)/server \
+                               -I$(OUTDIR)/build/tripe/config \
                                $(PKGS_CFLAGS)
 
-LIBS                    = $(PKGS_LIBS)
+LIBS                    = $(OUTDIR)/build/tripe/server/libtripe.a \
+                               $(OUTDIR)/build/tripe/priv/libpriv.a \
+                               $(OUTDIR)/build/tripe/common/libcommon.a \
+                               -L$(OUTDIR)/inst/lib $(PKGS_LIBS)
 
 ###--------------------------------------------------------------------------
 ### Various other tweaks and overrides.
@@ -134,14 +152,14 @@ clean::
 ### Native C code.
 
 out/%.o: %.c
-       $(call v_tag,CC)mkdir -p $(OUTDIR) && \
+       $(call v_tag,CC)mkdir -p $(OUTDIR)/ && \
                $(CC) -c $(ALL_CFLAGS) -MMD -o$@ $<
 
 ALL_SOURCES             =
 DISTFILES              += $(ALL_SOURCES)
 
-objects                         = $(patsubst %.c,$(OUTDIR)%$2,$1)
-CLEANFILES             += $(OUTDIR)*.o $(OUTDIR)*.d
+objects                         = $(patsubst %.c,$(OUTDIR)/%$2,$1)
+CLEANFILES             += $(OUTDIR)/*.o $(OUTDIR)/*.d
 
 ###--------------------------------------------------------------------------
 ### Java classes.
@@ -150,40 +168,42 @@ CLEANFILES                += $(OUTDIR)*.o $(OUTDIR)*.d
 ## unpredictable names.  Rather than try to guess stable outputs for these
 ## sources, we make artificial `timestamp' files and uses these in our
 ## dependencies.
-CLASSDIR                = $(OUTDIR)cls/
-stamps                  = $(patsubst %,$(OUTDIR)%.stamp,$1)
+CLASSDIR                = $(OUTDIR)/cls
+stamps                  = $(patsubst %,$(OUTDIR)/%.$1-stamp,$2)
 
 clean::; rm -rf $(CLASSDIR)
-CLEANFILES             += $(OUTDIR)*.stamp
+CLEANFILES             += $(OUTDIR)/*.class-stamp
 
 ## Compiling actual Java code.  Note that this confuses the resident Scala
 ## compiler, so we have to reset it here.
 CLSISH                 += java
-$(OUTDIR)%.stamp: %.java
-       $(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \
+$(OUTDIR)/%.class-stamp: %.java
+       $(call v_tag,JAVAC)mkdir -p $(CLASSDIR)/ && \
                $(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \
                echo built >$@
        $(V_AT)$(SCALAC_RESET)
 
 ## Compiling Scala code.
 CLSEXT                 += scala
-$(OUTDIR)%.stamp: %.scala
-       $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \
+$(OUTDIR)/%.class-stamp: %.scala
+       $(call v_tag,SCALAC)mkdir -p $(CLASSDIR)/ && \
                $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \
                echo built >$@
 
 ###--------------------------------------------------------------------------
 ### Native-code libraries.
 
-SHLIBS                 += toy
-toy_SOURCES             = jni.c
+SHLIBS                 += tripe
+tripe_SOURCES           = jni.c
 
-shlibfile               = $(patsubst %,$(OUTDIR)lib%.so,$1)
+shlibfile               = $(patsubst %,$(OUTDIR)/lib%.so,$1)
 SHLIBFILES              = $(call shlibfile,$(SHLIBS))
 TARGETS                        += $(SHLIBFILES)
 ALL_SOURCES            += $(foreach l,$(SHLIBS),$($l_SOURCES))
 
-$(SHLIBFILES): $(OUTDIR)lib%.so: $$(call objects,$$($$*_SOURCES),.o)
+$(call objects,$(tripe_SOURCES),.o): $(call stamps,ext,tripe)
+
+$(SHLIBFILES): $(OUTDIR)/lib%.so: $$(call objects,$$($$*_SOURCES),.o)
        $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS)
 
 ###--------------------------------------------------------------------------
@@ -198,8 +218,9 @@ CLASSES                     += util
 CLASSES                        += sys:util
 CLASSES                        += admin:sys,util
 CLASSES                        += tar:util
-CLASSES                        += keys:tar,sys,util
-CLASSES                        += main:sys
+CLASSES                        += progress:sys,util
+CLASSES                        += keys:progress,tar,sys,util
+CLASSES                        += terminal:progress,sys,util
 
 ## Machinery for parsing the `CLASSES' list.
 COMMA                   = ,
@@ -208,16 +229,54 @@ class-deps                 = $(subst $(COMMA), ,$(word 2,$(subst :, ,$1)))
 
 CLASS_NAMES             = $(foreach c,$(CLASSES),$(call class-name,$c))
 
-all:: $(call stamps,$(CLASS_NAMES))
+all:: $(call stamps,class,$(CLASS_NAMES))
 
-$(foreach c,$(CLASSES),$(eval $(call stamps,$(call class-name,$c)): \
-       $(call stamps,$(call class-deps,$c))))
+$(foreach c,$(CLASSES),$(eval $(call stamps,class,$(call class-name,$c)): \
+       $(call stamps,class,$(call class-deps,$c))))
 
 DISTFILES              += $(foreach c,$(CLASSES),\
                                $(foreach e,$(CLSEXT),\
                                  $(wildcard $(call class-name,$c).$e)))
 
 ###--------------------------------------------------------------------------
+### External packages.
+
+EXTERNALS              += adns
+adns_CONFIG             = --disable-dynamic
+
+EXTERNALS              += mLib
+mLib_DEPS               = adns
+mLib_CONFIG             = --enable-static --disable-shared --with-adns
+
+EXTERNALS              += catacomb
+catacomb_DEPS           = mLib
+catacomb_CONFIG                 = --enable-static --disable-shared
+
+EXTERNALS              += tripe
+tripe_DEPS              = mLib catacomb
+tripe_CONFIG            = --without-wireshark --with-adns --with-tunnel=slip
+
+all:: $(call stamps,ext,$(EXTERNALS))
+CLEANFILES             += $(OUTDIR)/*.ext-stamp
+clean::; rm -rf $(OUTDIR)/inst $(OUTDIR)/build
+
+$(call stamps,ext,$(EXTERNALS)): \
+               $(OUTDIR)/%.ext-stamp: $$(call stamps,ext,$$($$*_DEPS))
+       $(V_AT)rm -rf $(OUTDIR)/build/$*/
+       $(V_AT)mkdir -p $(OUTDIR)/build/$*/
+       cd $(OUTDIR)/build/$*/ && \
+       $(call join-paths,../../..,$(call ext-srcdir,$*))/configure \
+               --prefix=$(EXTPREFIX) \
+               $($*_CONFIG) \
+               CFLAGS="-O2 -g -fPIC -Wall -I$(EXTPREFIX)/include" \
+               LDFLAGS="-L$(EXTPREFIX)/lib" \
+               PKG_CONFIG="pkg-config --static" \
+               PKG_CONFIG_LIBDIR=$(EXTPREFIX)/lib/pkgconfig
+       $(MAKE) -C$(OUTDIR)/build/$*/
+       $(MAKE) -C$(OUTDIR)/build/$*/ -s install
+       $(V_AT)echo done >$@
+
+###--------------------------------------------------------------------------
 ### Distribution arrangements.
 
 DISTFILES              += COPYING
@@ -228,17 +287,17 @@ distdir                    = $(PACKAGE)-$(VERSION)
 DISTTAR                         = $(distdir).tar.gz
 
 distdir:
-       rm -rf $(OUTDIR)$(distdir)
-       mkdir $(OUTDIR)$(distdir)
-       echo $(VERSION) >$(OUTDIR)$(distdir)/RELEASE
+       rm -rf $(OUTDIR)/$(distdir)
+       mkdir $(OUTDIR)/$(distdir)/
+       echo $(VERSION) >$(OUTDIR)/$(distdir)/RELEASE
        set -e; for i in $(DISTFILES); do \
-         case $$i in */*) mkdir -p $(OUTDIR)$(distdir)/$${i%/*} ;; esac; \
-         cp $$i $(OUTDIR)$(distdir)/; \
+         case $$i in */*) mkdir -p $(OUTDIR)/$(distdir)/$${i%/*}/ ;; esac; \
+         cp $$i $(OUTDIR)/$(distdir)/; \
        done
 .PHONY: distdir
 
 dist: distdir
-       set -e; cd $(OUTDIR); tar chozf ../$(DISTTAR) $(distdir)
+       set -e; cd $(OUTDIR)/; tar chozf ../$(DISTTAR) $(distdir)
        rm -rf $(distdir)
 .PHONY: dist
 
@@ -249,7 +308,7 @@ all:: $(TARGETS)
 
 clean::; rm -f $(CLEANFILES) $(TARGETS)
 
-repl: $(TARGETS)
+repl: all
        $(SCALA_REPL) -cp $(CLASSDIR) -Djava.library.path=$(OUTDIR)
 .PHONY: repl