You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 10:21:37 UTC

svn commit: r1131997 - in /incubator/mesos/trunk: Makefile.in src/Makefile.in src/examples/Makefile.in src/tests/Makefile.in tests/simple/simple.c tests/simple/simple_exec.c tests/simple/simple_sched.c

Author: benh
Date: Sun Jun  5 08:21:37 2011
New Revision: 1131997

URL: http://svn.apache.org/viewvc?rev=1131997&view=rev
Log:
More Makefile updates, in particular, added building into bin and lib directories.

Removed:
    incubator/mesos/trunk/tests/simple/simple.c
    incubator/mesos/trunk/tests/simple/simple_exec.c
    incubator/mesos/trunk/tests/simple/simple_sched.c
Modified:
    incubator/mesos/trunk/Makefile.in
    incubator/mesos/trunk/src/Makefile.in
    incubator/mesos/trunk/src/examples/Makefile.in
    incubator/mesos/trunk/src/tests/Makefile.in

Modified: incubator/mesos/trunk/Makefile.in
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/Makefile.in?rev=1131997&r1=1131996&r2=1131997&view=diff
==============================================================================
--- incubator/mesos/trunk/Makefile.in (original)
+++ incubator/mesos/trunk/Makefile.in Sun Jun  5 08:21:37 2011
@@ -28,15 +28,15 @@ ifeq ($(WITH_INCLUDED_ZOOKEEPER),1)
 endif
 
 install:
-	if test ! -d $(MESOS_HOME); \
-		then mkdir $(MESOS_HOME); \
+	if test ! -d $(MESOS_HOME)/bin; \
+		then mkdir -p $(MESOS_HOME)/bin; \
 	fi
-	if test ! -d $(MESOS_HOME); \
-		then mkdir $(MESOS_HOME); \
+	if test ! -d $(MESOS_HOME)/bin; \
+		then mkdir -p $(MESOS_HOME)/bin; \
 	fi
-	install -m 755 src/mesos-master $(MESOS_HOME)
-	install -m 755 src/mesos-slave $(MESOS_HOME)
-	install -m 755 src/swig/java/libmesos.so $(MESOS_HOME)
+	install -m 755 $(BINDIR)/mesos-master $(MESOS_HOME)/bin
+	install -m 755 $(BINDIR)/mesos-slave $(MESOS_HOME)/bin
+	install -m 755 $(LIBDIR)/java/libmesos.so $(MESOS_HOME)/lib/java
 	rsync -avz src/webui $(MESOS_HOME)
 	if test ! -d $(MESOS_HOME)/third_party; \
 		then mkdir $(MESOS_HOME)/third_party; \
@@ -49,7 +49,14 @@ uninstall:
 dist:
 	$(error unimplemented)
 
-all: src
+distclean:
+	$(MAKE) -C src clean
+	$(MAKE) -C $(LIBPROCESS) distclean
+	$(MAKE) -C $(GLOG) distclean
+	$(MAKE) -C $(GTEST) distclean
+ifeq ($(WITH_INCLUDED_ZOOKEEPER),1)
+	$(MAKE) -C $(ZOOKEEPER) distclean
+endif
 
 doxygen:
 	doxygen
@@ -64,6 +71,11 @@ ctags:
 #TODO(*): make the above use conditionals to handle old-school UNIX style ctags too.
 #cd src; ctags --typedefs-and-c++ -I -members --declarations ../include/*.h ../include/*.c ../include/*.hpp ../include/*.cpp -o tags
 
+test: all
+	$(MAKE) -C src test
+
+all: src
+
 clean:
 	$(MAKE) -C src clean
 	$(MAKE) -C $(LIBPROCESS) clean
@@ -73,4 +85,4 @@ ifeq ($(WITH_INCLUDED_ZOOKEEPER),1)
 	$(MAKE) -C $(ZOOKEEPER) clean
 endif
 
-.PHONY: default src third_party install uninstall dist all clean
+.PHONY: default src third_party install uninstall dist test all clean

Modified: incubator/mesos/trunk/src/Makefile.in
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/Makefile.in?rev=1131997&r1=1131996&r2=1131997&view=diff
==============================================================================
--- incubator/mesos/trunk/src/Makefile.in (original)
+++ incubator/mesos/trunk/src/Makefile.in Sun Jun  5 08:21:37 2011
@@ -2,6 +2,9 @@
 
 SHELL = '/bin/sh'
 
+BINDIR = @top_builddir@/bin
+LIBDIR = @top_builddir@/lib
+
 CC = @CC@
 CXX = @CXX@
 SWIG = @SWIG@
@@ -142,21 +145,30 @@ LAUNCHER_EXE_OBJ = launcher/launcher.o $
 
 LOCAL_EXE_OBJ = local/local.o $(MASTER_OBJ) $(SLAVE_OBJ) $(COMMON_OBJ)
 
-MESOS_EXES = mesos-master mesos-slave mesos-local mesos-launcher mesos-getconf
+MESOS_MASTER_EXE = $(BINDIR)/mesos-master
+MESOS_SLAVE_EXE = $(BINDIR)/mesos-slave
+MESOS_LOCAL_EXE = $(BINDIR)/mesos-local
+MESOS_LAUNCHER_EXE = $(BINDIR)/mesos-launcher
+MESOS_GETCONF_EXE = $(BINDIR)/mesos-getconf
+MESOS_PROJD_EXE = $(BINDIR)/mesos-projd
+
+MESOS_EXES = $(MESOS_MASTER_EXE) $(MESOS_SLAVE_EXE) $(MESOS_LOCAL_EXE)	\
+             $(MESOS_LAUNCHER_EXE) $(MESOS_GETCONF_EXE)
 
 ifeq ($(OS_NAME),solaris)
-  MESOS_EXES += mesos-projd
+  MESOS_EXES += $(MESOS_PROJD_EXE)
 endif
 
-MESOS_SCHED_LIB = libmesos_sched.a
-MESOS_EXEC_LIB = libmesos_exec.a
+MESOS_SCHED_LIB = $(LIBDIR)/libmesos_sched.a
+MESOS_EXEC_LIB = $(LIBDIR)/libmesos_exec.a
 
 # C/C++ shared library which contains both the scheduler and executor
 # libraries, in addition to libglog, libprocess, and libev.
+MESOS_LIB_OBJ = 
 ifeq ($(OS_NAME),darwin)
-  MESOS_LIB = libmesos.dylib
+  MESOS_LIB = $(LIBDIR)/libmesos.dylib
 else
-  MESOS_LIB = libmesos.so
+  MESOS_LIB = $(LIBDIR)/libmesos.so
 endif
 
 MESOS_LIBS = $(MESOS_LIB) $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB)
@@ -166,37 +178,38 @@ MESOS_LIBS = $(MESOS_LIB) $(MESOS_SCHED_
 # of the .dylib suffix on Mac OS X, but at the time Python required
 # the .so suffix even on Mac OS X).
 ifeq ($(OS_NAME),darwin)
-  MESOS_JAVA_LIB = swig/java/libmesos.dylib
+  MESOS_JAVA_LIB = $(LIBDIR)/java/libmesos.dylib
 else
-  MESOS_JAVA_LIB = swig/java/libmesos.so
+  MESOS_JAVA_LIB = $(LIBDIR)/java/libmesos.so
 endif
 
-MESOS_PYTHON_LIB = swig/python/_mesos.so
+MESOS_JAVA_JAR = $(LIBDIR)/java/mesos.jar
+
+MESOS_PYTHON_LIB = $(LIBDIR)/python/_mesos.so
+
+# We copy all the webui files into the bin directory.
+WEBUI_FILES = $(BINDIR)/webui/bottle-0.5.6		\
+              $(BINDIR)/webui/common/webui_lib.py	\
+              $(BINDIR)/webui/master/framework.tpl	\
+              $(BINDIR)/webui/master/index.tpl		\
+              $(BINDIR)/webui/master/webui.py		\
+              $(BINDIR)/webui/slave/framework.tpl	\
+              $(BINDIR)/webui/slave/index.tpl		\
+              $(BINDIR)/webui/slave/webui.py		\
+              $(BINDIR)/webui/static/stylesheet.css
+
+# Create rules for building the directories that aren't created
+# automagically by configure.
+OBJ_DIRECTORIES = common configurator detector exec launcher local	\
+                  master messaging sched slave
+
+WEBUI_DIRECTORIES = $(BINDIR)/webui/common $(BINDIR)/webui/master	\
+                    $(BINDIR)/webui/slave $(BINDIR)/webui/static	\
+                    $(BINDIR)/webui/master/swig				\
+                    $(BINDIR)/webui/slave/swig
 
-# In the event we are building in a directory other than source we
-# need to copy over the webui stuff so that the binaries can be run.
-WEBUI_FILES = webui/bottle-0.5.6 webui/common/webui_lib.py	\
-              webui/master/framework.tpl webui/master/index.tpl	\
-              webui/master/webui.py webui/slave/framework.tpl	\
-              webui/slave/index.tpl webui/slave/webui.py	\
-              webui/static/stylesheet.css
-
-# Create all the directories that we use but don't get created by
-# default because we don't have a Makefile.in in them.
-$(shell mkdir -p common)
-$(shell mkdir -p configurator)
-$(shell mkdir -p detector)
-$(shell mkdir -p exec)
-$(shell mkdir -p launcher)
-$(shell mkdir -p local)
-$(shell mkdir -p master)
-$(shell mkdir -p messaging)
-$(shell mkdir -p sched)
-$(shell mkdir -p slave)
-$(shell mkdir -p webui/common)
-$(shell mkdir -p webui/master)
-$(shell mkdir -p webui/slave)
-$(shell mkdir -p webui/static)
+DIRECTORIES = $(BINDIR) $(LIBDIR) $(LIBDIR)/java $(LIBDIR)/python	\
+              $(OBJ_DIRECTORIES) $(WEBUI_DIRECTORIES)
 
 
 default: all
@@ -204,10 +217,13 @@ default: all
 -include $(patsubst %.o, %.d, $(ALL_OBJ))
 -include $(patsubst %, %.d, $(MESOS_EXES))
 
-$(BASIC_OBJ): %.o: @srcdir@/%.cpp
+$(DIRECTORIES): %:
+	mkdir -p $@
+
+$(BASIC_OBJ): %.o: @srcdir@/%.cpp | $(OBJ_DIRECTORIES)
 	$(CXX) -c $(CXXFLAGS) -o $@ $<
 
-$(MESOS_LIBS): $(COMMON_OBJ)
+$(MESOS_LIBS): $(COMMON_OBJ) | $(LIBDIR)
 
 $(MESOS_SCHED_LIB): $(SCHED_LIB_OBJ) $(MASTER_OBJ) $(SLAVE_OBJ)
 	$(AR) rcs $@ $^
@@ -224,47 +240,49 @@ $(WEBUI_OBJ): %.o: @srcdir@/%.cpp
 $(SWIG_WEBUI_OBJ): %.o: %.cpp
 	$(CXX) -c $(CXXFLAGS) $(WEBUI_CXXFLAGS) -o $@ $<
 
-webui/master/swig/master_wrap.cpp: @srcdir@/webui/master/swig/master.i @srcdir@/master/state.hpp @srcdir@/master/webui.hpp @srcdir@/master/master.hpp config/config.hpp
+webui/master/swig/master_wrap.cpp: @srcdir@/webui/master/swig/master.i @srcdir@/master/state.hpp @srcdir@/master/webui.hpp @srcdir@/master/master.hpp config/config.hpp $(BINDIR)/webui/master/swig
 ifeq ($(WITH_WEBUI),1)
 	mkdir -p webui/master/swig
 	$(SWIG) -c++ -python -outdir webui/master/swig -I@top_srcdir@/include -I@srcdir@ -o $@ $<
+	cp -r webui/master/swig/master.py $(BINDIR)/webui/master/swig
 else
 	echo "" > $@
 endif
 
-webui/slave/swig/slave_wrap.cpp: @srcdir@/webui/slave/swig/slave.i @srcdir@/slave/state.hpp @srcdir@/slave/webui.hpp @srcdir@/slave/slave.hpp config/config.hpp
+webui/slave/swig/slave_wrap.cpp: @srcdir@/webui/slave/swig/slave.i @srcdir@/slave/state.hpp @srcdir@/slave/webui.hpp @srcdir@/slave/slave.hpp config/config.hpp $(BINDIR)/webui/slave/swig
 ifeq ($(WITH_WEBUI),1)
 	mkdir -p webui/slave/swig
 	$(SWIG) -c++ -python -outdir webui/slave/swig -I@top_srcdir@/include -I@srcdir@ -o $@ $<
+	cp -r webui/slave/swig/slave.py $(BINDIR)/webui/slave/swig
 else
 	echo "" > $@
 endif
 
-$(MESOS_EXES): $(COMMON_OBJ)
+$(MESOS_EXES): | $(BINDIR)
 
-mesos-master: @srcdir@/master/main.cpp $(MASTER_EXE_OBJ)
+$(MESOS_MASTER_EXE): @srcdir@/master/main.cpp $(MASTER_EXE_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MASTER_EXE_OBJ) $(LDFLAGS) $(WEBUI_LDFLAGS) $(LIBS)
 
-mesos-slave: @srcdir@/slave/main.cpp $(SLAVE_EXE_OBJ)
+$(MESOS_SLAVE_EXE): @srcdir@/slave/main.cpp $(SLAVE_EXE_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(SLAVE_EXE_OBJ) $(LDFLAGS) $(WEBUI_LDFLAGS) $(LIBS)
 
-mesos-launcher: @srcdir@/launcher/main.cpp $(LAUNCHER_EXE_OBJ)
+$(MESOS_LAUNCHER_EXE): @srcdir@/launcher/main.cpp $(LAUNCHER_EXE_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< launcher/launcher.o $(COMMON_OBJ) $(LDFLAGS) $(LIBS)
 
-mesos-local: @srcdir@/local/main.cpp $(LOCAL_EXE_OBJ)
+$(MESOS_LOCAL_EXE): @srcdir@/local/main.cpp $(LOCAL_EXE_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(LOCAL_EXE_OBJ) $(LDFLAGS) $(LIBS)
 
-mesos-getconf: @srcdir@/configurator/get_conf.cpp
+$(MESOS_GETCONF_EXE): @srcdir@/configurator/get_conf.cpp $(COMMON_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(COMMON_OBJ) $(LDFLAGS) $(LIBS)
 
-mesos-projd: @srcdir@/slave/projd.cpp
+$(MESOS_PROJD_EXE): @srcdir@/slave/projd.cpp $(COMMON_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(COMMON_OBJ) $(LDFLAGS) $(LIBS)
 
-java: $(MESOS_JAVA_LIB) swig/java/mesos.jar
+java: $(MESOS_JAVA_LIB) $(MESOS_JAVA_JAR)
 
 python: $(MESOS_PYTHON_LIB)
 
-swig/java/mesos.jar: $(MESOS_JAVA_LIB)
+$(MESOS_JAVA_JAR): $(MESOS_JAVA_LIB) | $(LIBDIR)/java
 ifdef JAVA_HOME
 	$(JAVA_HOME)/bin/javac -sourcepath swig/java -d swig/java swig/java/mesos/*.java
 	patch -N swig/java/mesos/mesosJNI.java < @srcdir@/swig/java/mesosJNI.java.patch1 || echo -n
@@ -272,7 +290,7 @@ ifdef JAVA_HOME
 	$(JAVA_HOME)/bin/jar cf $@ -C swig/java mesos
 endif
 
-$(MESOS_JAVA_LIB): @srcdir@/swig/mesos.i $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB)
+$(MESOS_JAVA_LIB): @srcdir@/swig/mesos.i $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB) | $(LIBDIR)/java
 ifdef JAVA_HOME
 	rm -f swig/java/mesos/*
 	mkdir -p swig/java/mesos
@@ -280,16 +298,18 @@ ifdef JAVA_HOME
 	$(CXX) $(CXXFLAGS) -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(OS_NAME) -shared -o $@ swig/java/mesos_wrap.cpp $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB) $(LDFLAGS) $(LIBS)
 endif
 
-$(MESOS_PYTHON_LIB): @srcdir@/swig/mesos.i $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB)
+$(MESOS_PYTHON_LIB): @srcdir@/swig/mesos.i $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB) | $(LIBDIR)/python
 ifdef PYTHON_HEADERS
 	mkdir -p swig/python
 	$(SWIG) -c++ -python -threads -I@top_srcdir@/include -o swig/python/mesos_wrap.cpp -outdir swig/python @srcdir@/swig/mesos.i
 	$(CXX) $(CXXFLAGS) -I$(PYTHON_HEADERS) -shared -o $@ swig/python/mesos_wrap.cpp $(MESOS_SCHED_LIB) $(MESOS_EXEC_LIB) $(LDFLAGS) $(PYTHON_LDFLAGS) $(LIBS)
 endif
 
-$(WEBUI_FILES): %: @srcdir@/%
+$(WEBUI_FILES): | $(WEBUI_DIRECTORIES)
+
+$(WEBUI_FILES): $(BINDIR)/%: @srcdir@/%
 ifeq ($(WITH_WEBUI),1)
-	cp -r @srcdir@/$@ $@
+	cp -r $< $@
 endif
 
 test: all
@@ -307,15 +327,17 @@ clean:
 	rm -rf $(patsubst %, %.dSYM, $(MESOS_EXES))
 	rm -f $(ALL_OBJ)
 	rm -f $(MESOS_EXES) $(MESOS_LIBS)
-	rm -f $(MESOS_JAVA_LIB) $(MESOS_PYTHON_LIB)
+	rm -f $(MESOS_JAVA_JAR)
+	rm -rf $(patsubst %, %.d, $(MESOS_JAVA_LIB))
+	rm -rf $(patsubst %, %.d, $(MESOS_PYTHON_LIB))
 	rm -rf $(MESOS_JAVA_LIB).dSYM $(MESOS_PYTHON_LIB).dSYM
+	rm -f $(MESOS_JAVA_LIB) $(MESOS_PYTHON_LIB)
+	rm -rf $(WEBUI_FILES)
 	rm -f swig/*/mesos_wrap.cpp
 	rm -f swig/*/mesos_wrap.h
 	rm -f swig/*/*.o
 	rm -f swig/*/*.d
-	rm -f swig/java/mesos.jar
 	rm -f swig/java/mesos/*
-	rm -f swig/java/*.class
 	rm -f swig/python/mesos.py
 	rm -f swig/python/mesos.pyc
 	rm -f webui/master/swig/master_wrap.h

Modified: incubator/mesos/trunk/src/examples/Makefile.in
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/examples/Makefile.in?rev=1131997&r1=1131996&r2=1131997&view=diff
==============================================================================
--- incubator/mesos/trunk/src/examples/Makefile.in (original)
+++ incubator/mesos/trunk/src/examples/Makefile.in Sun Jun  5 08:21:37 2011
@@ -2,6 +2,9 @@
 
 SHELL = '/bin/sh'
 
+BINDIR = @top_builddir@/bin
+LIBDIR = @top_builddir@/lib
+
 CC = @CC@
 CXX = @CXX@
 SWIG = @SWIG@
@@ -85,35 +88,53 @@ ifeq ($(WITH_ZOOKEEPER),1)
   LIBS += -lzookeeper_st
 endif
 
-EXAMPLES_EXES = test-framework test-executor cpp-test-framework \
-                cpp-test-executor memhog memhog-executor scheduled-memhog
+SCHED_EXES = $(BINDIR)/examples/test-framework		\
+             $(BINDIR)/examples/cpp-test-framework	\
+             $(BINDIR)/examples/memhog			\
+             $(BINDIR)/examples/scheduled-memhog
+
+EXEC_EXES = $(BINDIR)/examples/test-executor		\
+            $(BINDIR)/examples/cpp-test-executor	\
+            $(BINDIR)/examples/memhog-executor
+
+EXAMPLES_EXES = $(SCHED_EXES) $(EXEC_EXES)
+
+MESOS_SCHED_LIB = $(LIBDIR)/libmesos_sched.a
+MESOS_EXEC_LIB = $(LIBDIR)/libmesos_exec.a
+
+# Create rules for building the directories that aren't created
+# automagically by configure.
+DIRECTORIES = $(BINDIR)/examples
 
-MESOS_SCHED_LIB = ../libmesos_sched.a
-MESOS_EXEC_LIB = ../libmesos_exec.a
 
 default: all
 
 -include $(patsubst %, %.d, $(EXAMPLES_EXES))
 
-test-framework: @srcdir@/test_framework.cpp $(MESOS_SCHED_LIB)
+$(DIRECTORIES): %:
+	mkdir -p $@
+
+$(EXAMPLES_EXES): | $(BINDIR)/examples
+
+$(BINDIR)/examples/test-framework: @srcdir@/test_framework.cpp $(MESOS_SCHED_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_SCHED_LIB) $(LDFLAGS) $(LIBS)
 
-test-executor: @srcdir@/test_exec.cpp $(MESOS_EXEC_LIB)
+$(BINDIR)/examples/test-executor: @srcdir@/test_exec.cpp $(MESOS_EXEC_LIB)
 	g++ $(CXXFLAGS) -o $@ $< $(MESOS_EXEC_LIB) $(LDFLAGS) $(LIBS)
 
-cpp-test-framework: @srcdir@/cpp_test_framework.cpp $(MESOS_SCHED_LIB)
+$(BINDIR)/examples/cpp-test-framework: @srcdir@/cpp_test_framework.cpp $(MESOS_SCHED_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_SCHED_LIB) $(LDFLAGS) $(LIBS)
 
-cpp-test-executor: @srcdir@/cpp_test_executor.cpp $(MESOS_EXEC_LIB)
+$(BINDIR)/examples/cpp-test-executor: @srcdir@/cpp_test_executor.cpp $(MESOS_EXEC_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_EXEC_LIB) $(LDFLAGS) $(LIBS)
 
-memhog: @srcdir@/memhog.cpp $(MESOS_SCHED_LIB)
+$(BINDIR)/examples/memhog: @srcdir@/memhog.cpp $(MESOS_SCHED_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_SCHED_LIB) $(LDFLAGS) $(LIBS)
 
-memhog-executor: @srcdir@/memhog_executor.cpp $(MESOS_EXEC_LIB)
+$(BINDIR)/examples/memhog-executor: @srcdir@/memhog_executor.cpp $(MESOS_EXEC_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_EXEC_LIB) $(LDFLAGS) $(LIBS)
 
-scheduled-memhog: @srcdir@/scheduled_memhog.cpp $(MESOS_SCHED_LIB)
+$(BINDIR)/examples/scheduled-memhog: @srcdir@/scheduled_memhog.cpp $(MESOS_SCHED_LIB)
 	$(CXX) $(CXXFLAGS) -o $@ $< $(MESOS_SCHED_LIB) $(LDFLAGS) $(LIBS)
 
 all: $(EXAMPLES_EXES)

Modified: incubator/mesos/trunk/src/tests/Makefile.in
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/Makefile.in?rev=1131997&r1=1131996&r2=1131997&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/Makefile.in (original)
+++ incubator/mesos/trunk/src/tests/Makefile.in Sun Jun  5 08:21:37 2011
@@ -2,6 +2,9 @@
 
 SHELL = '/bin/sh'
 
+BINDIR = @top_builddir@/bin
+LIBDIR = @top_builddir@/lib
+
 CC = @CC@
 CXX = @CXX@
 
@@ -77,30 +80,34 @@ ifeq ($(WITH_ZOOKEEPER),1)
   LIBS += -lzookeeper_st
 endif
 
-SCHED_LIB = ../libmesos_sched.a
-EXEC_LIB = ../libmesos_exec.a
+SCHED_LIB = $(LIBDIR)/libmesos_sched.a
+EXEC_LIB = $(LIBDIR)/libmesos_exec.a
 
 TESTS_OBJ = main.o test_master.o test_resources.o external_test.o	\
 	    test_sample_frameworks.o testing_utils.o			\
 	    test_configurator.o test_string_utils.o			\
 	    test_lxc_isolation.o
 
-EXTERNAL_SCRIPTS = external/LxcIsolation/HoldMoreMemThanRequested.sh		\
-                   external/LxcIsolation/ScaleUpAndDown.sh			\
-                   external/LxcIsolation/TwoSeparateTasks.sh			\
-                   external/LxcIsolation/run_scheduled_memhog_test.sh		\
-                   external/SampleFrameworks/CFramework.sh			\
-                   external/SampleFrameworks/CFrameworkCmdlineParsing.sh	\
-                   external/SampleFrameworks/CFrameworkInvalidCmdline.sh	\
-                   external/SampleFrameworks/CFrameworkInvalidEnv.sh		\
-                   external/SampleFrameworks/CppFramework.sh			\
-                   external/SampleFrameworks/JavaExceptionFramework.sh		\
-                   external/SampleFrameworks/JavaFramework.sh			\
-                   external/SampleFrameworks/PythonFramework.sh
-
-# Create the external directories in case they aren't there.
-$(shell mkdir -p external/LxcIsolation)
-$(shell mkdir -p external/SampleFrameworks)
+ALLTESTS_EXE = $(BINDIR)/alltests
+
+EXTERNAL_SCRIPTS =							\
+  $(BINDIR)/tests/external/LxcIsolation/HoldMoreMemThanRequested.sh	\
+  $(BINDIR)/tests/external/LxcIsolation/ScaleUpAndDown.sh		\
+  $(BINDIR)/tests/external/LxcIsolation/TwoSeparateTasks.sh		\
+  $(BINDIR)/tests/external/LxcIsolation/run_scheduled_memhog_test.sh	\
+  $(BINDIR)/tests/external/SampleFrameworks/CFramework.sh		\
+  $(BINDIR)/tests/external/SampleFrameworks/CFrameworkCmdlineParsing.sh	\
+  $(BINDIR)/tests/external/SampleFrameworks/CFrameworkInvalidCmdline.sh	\
+  $(BINDIR)/tests/external/SampleFrameworks/CFrameworkInvalidEnv.sh	\
+  $(BINDIR)/tests/external/SampleFrameworks/CppFramework.sh		\
+  $(BINDIR)/tests/external/SampleFrameworks/JavaExceptionFramework.sh	\
+  $(BINDIR)/tests/external/SampleFrameworks/JavaFramework.sh		\
+  $(BINDIR)/tests/external/SampleFrameworks/PythonFramework.sh
+
+# Create rules for building the directories that aren't created
+# automagically by configure.
+DIRECTORIES = $(BINDIR)/tests/external/LxcIsolation		\
+              $(BINDIR)/tests/external/SampleFrameworks
 
 
 default: all
@@ -108,24 +115,30 @@ default: all
 -include $(patsubst %.o, %.d, $(TESTS_OBJ))
 -include $(patsubst %, %.d, alltests)
 
+$(DIRECTORIES): %:
+	mkdir -p $@
+
 $(TESTS_OBJ): %.o: @srcdir@/%.cpp
 	$(CXX) -c $(CXXFLAGS) -o $@ $<
 
-$(EXTERNAL_SCRIPTS): %: @srcdir@/%
-	cp @srcdir@/$@ $@
+$(EXTERNAL_SCRIPTS): | $(BINDIR)/tests/external/LxcIsolation
+$(EXTERNAL_SCRIPTS): | $(BINDIR)/tests/external/SampleFrameworks
+$(EXTERNAL_SCRIPTS): $(BINDIR)/tests/%: @srcdir@/%
+	cp $< $@
 
-alltests: $(TESTS_OBJ)
+$(ALLTESTS_EXE): $(TESTS_OBJ)
 	$(CXX) $(CXXFLAGS) -o $@ $(TESTS_OBJ) $(SCHED_LIB) $(EXEC_LIB) $(LDFLAGS) $(LIBS)
 
 test: all
+	cd $(BINDIR)
 	./alltests
 
-all: alltests $(EXTERNAL_SCRIPTS) 
+all: $(ALLTESTS_EXE) $(EXTERNAL_SCRIPTS) 
 
 clean:
 	rm -f $(patsubst %.o, %.d, $(TESTS_OBJ))
 	rm -f $(TESTS_OBJ)
-	rm -f alltests
+	rm -f $(ALLTESTS_EXE)
 	rm -f TAGS
 
-.PHONY: default all clean test
+.PHONY: default all test clean