# # EMULAB-COPYRIGHT # Copyright (c) 2000-2007 University of Utah and the Flux Group. # All rights reserved. # # Testbed Makefile # SRCDIR = @srcdir@ OBJDIR = . SUBDIR = TESTBED_SRCDIR = @top_srcdir@ DISTCLEAN_FILES = @DISTCLEAN_FILES@ EVENTSYS = @EVENTSYS@ PELABSUPPORT = @PELABSUPPORT@ SYSTEM := $(shell uname -s) include Makeconf # # Ordering here matters! # Things with no dependencies go first: # assign db lib www # Things that may have dependencies go next: # @optional_subdirs@ (has event) # ipod os security sensors # Then things that only depend on stuff we've done: # pxe tbsetup tmcd utils www tip capture vis # Then things that depend on stuff we just did: # SUBDIRS = lib db assign www @optional_subdirs@ ipod security sensors \ pxe tbsetup account tmcd utils tip capture ipod vis \ sensors os xmlrpc install/newnode_sshkeys mote tools/whol \ tools/svn wiki bugdb collab all: all-subdirs install: @echo "Choose either boss-install, ops-install or fs-install" @echo "Choose opsfs-install instead of ops-install for a combined ops/fs machine" @echo "Choose tipserv-install for dedicated tip server machines." # # For installation on boss node # boss-install: install-schemacheck install-sitevarscheck install-dbfillcheck \ install-subdirs install-mkdirs install-setbuildinfo # # Same target, with the install-schemacheck dependency omitted # boss-install-force: install-subdirs install-mkdirs install-setbuildinfo post-install: @$(MAKE) -C db post-install @$(MAKE) -C ipod post-install @$(MAKE) -C tbsetup post-install @$(MAKE) -C account post-install @$(MAKE) -C security post-install @$(MAKE) -C vis post-install @$(MAKE) -C www post-install ifeq ($(EVENTSYS),1) @$(MAKE) -C event post-install endif @$(MAKE) -C mote post-install @$(MAKE) -C tools post-install @$(MAKE) -C wiki post-install @$(MAKE) -C bugdb post-install @$(MAKE) -C collab post-install @$(MAKE) -C utils post-install # # For installation on the 'ops' or 'users' node (okay, plastic) # ops-install: -mkdir -p $(INSTALL_TOPDIR)/log -mkdir -p $(INSTALL_TOPDIR)/log/mysql -chmod 770 $(INSTALL_TOPDIR)/log/mysql -chown mysql.mysql $(INSTALL_TOPDIR)/log/mysql @$(MAKE) -C tbsetup control-install @$(MAKE) -C security control-install @$(MAKE) -C tip control-install # @$(MAKE) -C os control-install @$(MAKE) -C db control-install @$(MAKE) -C tbsetup control-install @$(MAKE) -C utils control-install @$(MAKE) -C lib control-install ifeq ($(EVENTSYS),1) @$(MAKE) -C event control-install endif @$(MAKE) -C sensors control-install @$(MAKE) -C xmlrpc control-install @$(MAKE) -C tmcd control-install @$(MAKE) -C account control-install ifeq ($(PELABSUPPORT),1) @$(MAKE) -C pelab control-install endif fs-install: @$(MAKE) -C tbsetup fs-install @$(MAKE) -C sensors fs-install opsfs-install: ops-install fs-install @echo "Combined ops/fs install done." install-mkdirs: -mkdir -p $(INSTALL_TOPDIR)/opsdir -mkdir -p $(INSTALL_TOPDIR)/locks -mkdir -p $(INSTALL_TOPDIR)/log -mkdir -p $(INSTALL_TOPDIR)/log/mysql -mkdir -p $(INSTALL_TOPDIR)/log/exports -mkdir -p $(INSTALL_TOPDIR)/lists -mkdir -p $(INSTALL_TOPDIR)/backup -mkdir -p $(INSTALL_TOPDIR)/etc -mkdir -p $(INSTALL_TOPDIR)/expwork -mkdir -p $(INSTALL_TOPDIR)/batch -chmod 777 $(INSTALL_TOPDIR)/batch -mkdir -p $(INSTALL_TOPDIR)/expinfo -chmod 777 $(INSTALL_TOPDIR)/expinfo -mkdir -p $(INSTALL_TOPDIR)/exparchive -chmod 777 $(INSTALL_TOPDIR)/exparchive -mkdir -p $(INSTALL_TOPDIR)/exparchive/Archive -chmod 777 $(INSTALL_TOPDIR)/exparchive/Archive -mkdir -p $(INSTALL_TOPDIR)/images -chmod 775 $(INSTALL_TOPDIR)/images -ln -s /usr/testbed/bin/nse $(INSTALL_TOPDIR)/bin -mkdir -p $(INSTALL_TOPDIR)/ssl -chmod 770 $(INSTALL_TOPDIR)/ssl tipserv-install: -mkdir -p $(INSTALL_TOPDIR)/log/tiplogs -mkdir -p $(INSTALL_TOPDIR)/etc @$(MAKE) -C tip tipserv-install @$(MAKE) -C capture tipserv-install @$(MAKE) -C tbsetup tipserv-install client-mkdirs: -mkdir -p $(DESTDIR)$(CLIENT_BINDIR) -mkdir -p $(DESTDIR)$(CLIENT_MANDIR) client: @$(MAKE) -C lib/libtb client ifeq ($(EVENTSYS),1) @$(MAKE) -C event client endif @$(MAKE) -C os client ifneq ($(SYSTEM),CYGWIN_NT-5.1) @$(MAKE) -C capture client @$(MAKE) -C tip client @$(MAKE) -C tools client endif @$(MAKE) -C sensors client @$(MAKE) -C tmcd client client-install: client client-mkdirs ifeq ($(EVENTSYS),1) @$(MAKE) -C event client-install endif @$(MAKE) -C os client-install ifneq ($(SYSTEM),CYGWIN_NT-5.1) @$(MAKE) -C capture client-install @$(MAKE) -C tip client-install @$(MAKE) -C tools client-install endif @$(MAKE) -C sensors client-install @$(MAKE) -C tmcd client-install TARBALLDESTDIR = /var/tmp/emulab-client client-tarball: @if [ `id -u` -ne 0 ]; then \ echo '*** Must run as root!'; \ false; \ fi @if [ -d "$(TARBALLDESTDIR)" ]; then \ echo "$(TARBALLDESTDIR) already exists."; \ echo "Remove it and try again."; \ false; \ fi echo "Building and installing client-side in $(TARBALLDESTDIR)..." DESTDIR=$(TARBALLDESTDIR) $(MAKE) client-install echo "Creating tarball..." tar czf emulab-client.tar.gz -C $(TARBALLDESTDIR) . destdircheck: @if [ -z "$(DESTDIR)" ]; then \ echo "You must define DESTDIR for this target!"; \ false; \ fi @if [ "$(DESTDIR)" = "/" ]; then \ echo "DESTDIR is '/', really really bad idea!"; \ false; \ fi mfsoscheck: @if [ `uname -s` != "FreeBSD" ]; then \ echo "Must build MFS files on a FreeBSD system!"; \ false; \ fi mfs: mfsoscheck @$(MAKE) -C os mfs @$(MAKE) -C sensors mfs @$(MAKE) -C tmcd mfs mfs-nostatic: mfsoscheck @NOSTATIC=1 $(MAKE) -C os mfs @NOSTATIC=1 $(MAKE) -C sensors mfs @NOSTATIC=1 $(MAKE) -C tmcd mfs mfs-install: destdircheck mfs client-mkdirs @$(MAKE) -C os mfs-install @$(MAKE) -C sensors mfs-install @$(MAKE) -C tmcd mfs-install mfs-nostatic-install: destdircheck mfs-nostatic client-mkdirs @$(MAKE) -C os mfs-install @$(MAKE) -C sensors mfs-install @$(MAKE) -C tmcd mfs-install frisbee-mfs: mfsoscheck @$(MAKE) -C cdrom/groklilo client @$(MAKE) -C os frisbee-mfs @$(MAKE) -C tmcd frisbee-mfs frisbee-mfs-nostatic: mfsoscheck @NOSTATIC=1 $(MAKE) -C cdrom/groklilo client @NOSTATIC=1 $(MAKE) -C os frisbee-mfs @NOSTATIC=1 $(MAKE) -C tmcd frisbee-mfs frisbee-mfs-install: destdircheck frisbee-mfs @CLIENT_BINDIR=/etc/testbed $(MAKE) -e -C cdrom/groklilo client-install @$(MAKE) -C os frisbee-mfs-install @$(MAKE) -C tmcd frisbee-mfs-install frisbee-mfs-nostatic-install: destdircheck frisbee-mfs-nostatic @CLIENT_BINDIR=/etc/testbed $(MAKE) -e -C cdrom/groklilo client-install @$(MAKE) -C os frisbee-mfs-install @$(MAKE) -C tmcd frisbee-mfs-install # # A check to see if this is a 'real' install. Kinda hacky, but as far as I can # tell, you can't put ifeq()'s inside of targets # ifeq ($(TBROOT),/usr/testbed) SCHEMACHECK= cd $(OBJDIR)/db && perl schemacheck else SCHEMACHECK= @echo "Skipping schema check, since prefix isn't /usr/testbed" endif install-schemacheck: @echo "Checking DB schema..." $(SCHEMACHECK) ifeq ($(TBROOT),/usr/testbed) SITEVARSCHECK= cd $(OBJDIR)/db && perl sitevarscheck else SITEVARSCHECK= @echo "Skipping sitevars check, since prefix isn't /usr/testbed" endif install-sitevarscheck: @echo "Checking Site variables..." $(SITEVARSCHECK) ifeq ($(TBROOT),/usr/testbed) DBFILLCHECK= cd $(OBJDIR)/db && perl dbfillcheck else DBFILLCHECK= @echo "Skipping DB fill check, since prefix isn't /usr/testbed" endif install-dbfillcheck: @echo "Checking Initial DB Fill ..." $(DBFILLCHECK) ifeq ($(TBROOT),/usr/testbed) SETBUILDINFO= cd $(OBJDIR)/utils && perl setbuildinfo else SETBUILDINFO= @echo "Skipping setbuildinfo, since prefix isn't /usr/testbed" endif install-setbuildinfo: @echo "Setting the Build and Version info" $(SETBUILDINFO) clean: clean-subdirs distclean: distclean-subdirs rm -f Makeconf GNUmakefile config.h config.status config.cache config.log rm -f $(DISTCLEAN_FILES) elabinelab: -mkdir -p $(INSTALL_TOPDIR)/src rm -f $(INSTALL_TOPDIR)/src/emulab-src.tar.gz tar czf $(INSTALL_TOPDIR)/src/emulab-src.tar.gz -C $(SRCDIR) . # How to recursively descend into subdirectories to make general # targets such as `all'. %.MAKE: @$(MAKE) -C $(dir $@) $(basename $(notdir $@)) %-subdirs: $(addsuffix /%.MAKE,$(SUBDIRS)) ; # By default, make any target by descending into subdirectories. %: %-subdirs ; .PHONY: post-install install-mkdirs # Get rid of a bunch of nasty built-in implicit rules. .SUFFIXES: