GNUmakefile.in 7.69 KB
Newer Older
1
#
2 3 4 5
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2006 University of Utah and the Flux Group.
# All rights reserved.
#
6 7
# Testbed Makefile
#
8 9 10 11 12
SRCDIR		= @srcdir@
OBJDIR		= .
SUBDIR		= 
TESTBED_SRCDIR  = @top_srcdir@
DISTCLEAN_FILES = @DISTCLEAN_FILES@ 
13
EVENTSYS	= @EVENTSYS@
Christopher Alfeld's avatar
Christopher Alfeld committed
14

15 16
SYSTEM	       := $(shell uname -s)

17 18
include Makeconf

19 20 21
#
# Ordering here matters!
# Things with no dependencies go first: 
22
#   assign db lib www
23 24
# Things that may have dependencies go next:
#   @optional_subdirs@ (has event)
25
#   ipod os security sensors 
26 27 28 29
# 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:
#
30 31
SUBDIRS = lib db assign www @optional_subdirs@ ipod security sensors \
		pxe tbsetup account tmcd utils tip capture ipod vis \
32
		sensors os xmlrpc install/newnode_sshkeys mote tools/whol \
33
		tools/svn wiki bugdb collab
Christopher Alfeld's avatar
Christopher Alfeld committed
34

35
all:		all-subdirs 
36

37
install:	
38 39
	@echo "Choose either boss-install, ops-install or fs-install"
	@echo "Choose opsfs-install instead of ops-install for a combined ops/fs machine"
40
	@echo "Choose tipserv-install for dedicated tip server machines."
41 42

#
43
# For installation on boss node
44
# 
45
boss-install:	install-schemacheck install-sitevarscheck install-dbfillcheck \
46
		install-subdirs install-mkdirs install-setbuildinfo
47 48 49 50 51
	@echo "DON'T FORGET TO RUN A POST-INSTALL AS ROOT"

#
# Same target, with the install-schemacheck dependency omitted
# 
52
boss-install-force:	install-subdirs install-mkdirs install-setbuildinfo
53
	@echo "DON'T FORGET TO RUN A POST-INSTALL AS ROOT"
54

55
post-install:
56
	@$(MAKE) -C db post-install
Mike Hibler's avatar
Mike Hibler committed
57
	@$(MAKE) -C ipod post-install
58
	@$(MAKE) -C tbsetup post-install
59
	@$(MAKE) -C account post-install
60
	@$(MAKE) -C security post-install
61 62
	@$(MAKE) -C vis post-install
	@$(MAKE) -C www post-install
63
ifeq ($(EVENTSYS),1)
64
	@$(MAKE) -C event post-install
65
endif
66
	@$(MAKE) -C mote post-install
67
	@$(MAKE) -C tools post-install
68
	@$(MAKE) -C wiki post-install
69
	@$(MAKE) -C bugdb post-install
70
	@$(MAKE) -C collab post-install
71
	@$(MAKE) -C utils post-install
72

73
#
74
# For installation on the 'ops' or 'users' node (okay, plastic)
75
# 
76
ops-install:
77 78 79 80
	-mkdir -p $(INSTALL_TOPDIR)/log
	-mkdir -p $(INSTALL_TOPDIR)/log/mysql
	-chmod 770 $(INSTALL_TOPDIR)/log/mysql
	-chown mysql.mysql $(INSTALL_TOPDIR)/log/mysql
81 82
	@$(MAKE) -C tbsetup control-install
	@$(MAKE) -C security control-install
83
	@$(MAKE) -C tip control-install
Leigh B. Stoller's avatar
Leigh B. Stoller committed
84
#	@$(MAKE) -C os control-install
85 86
	@$(MAKE) -C db control-install
	@$(MAKE) -C tbsetup control-install
Mac Newbold's avatar
Mac Newbold committed
87
	@$(MAKE) -C utils control-install
88
	@$(MAKE) -C lib control-install
89
ifeq ($(EVENTSYS),1)
90
	@$(MAKE) -C event control-install
91
endif
92
	@$(MAKE) -C sensors control-install
93
	@$(MAKE) -C xmlrpc control-install
94
	@$(MAKE) -C tmcd control-install
Leigh B. Stoller's avatar
Leigh B. Stoller committed
95
	@$(MAKE) -C account control-install
96

97 98
fs-install:
	@$(MAKE) -C tbsetup fs-install
Timothy Stack's avatar
 
Timothy Stack committed
99
	@$(MAKE) -C sensors fs-install
100 101 102 103

opsfs-install: ops-install fs-install
	@echo "Combined ops/fs install done."

104
install-mkdirs:
105
	-mkdir -p $(INSTALL_TOPDIR)/opsdir
106 107
	-mkdir -p $(INSTALL_TOPDIR)/locks
	-mkdir -p $(INSTALL_TOPDIR)/log
108 109
	-mkdir -p $(INSTALL_TOPDIR)/log/mysql
	-mkdir -p $(INSTALL_TOPDIR)/log/exports
110
	-mkdir -p $(INSTALL_TOPDIR)/lists
111
	-mkdir -p $(INSTALL_TOPDIR)/backup
112
	-mkdir -p $(INSTALL_TOPDIR)/etc
113
	-mkdir -p $(INSTALL_TOPDIR)/expwork
114 115
	-mkdir -p $(INSTALL_TOPDIR)/batch
	-chmod 777 $(INSTALL_TOPDIR)/batch
116 117
	-mkdir -p $(INSTALL_TOPDIR)/expinfo
	-chmod 777 $(INSTALL_TOPDIR)/expinfo
118 119
	-mkdir -p $(INSTALL_TOPDIR)/exparchive
	-chmod 777 $(INSTALL_TOPDIR)/exparchive
120 121
	-mkdir -p $(INSTALL_TOPDIR)/exparchive/Archive
	-chmod 777 $(INSTALL_TOPDIR)/exparchive/Archive
122 123
	-mkdir -p $(INSTALL_TOPDIR)/images
	-chmod 775 $(INSTALL_TOPDIR)/images
124
	-ln -s /usr/testbed/bin/nse $(INSTALL_TOPDIR)/bin
125 126
	-mkdir -p $(INSTALL_TOPDIR)/ssl
	-chmod 770 $(INSTALL_TOPDIR)/ssl
127

128 129
tipserv-install:
	-mkdir -p $(INSTALL_TOPDIR)/log/tiplogs
130
	-mkdir -p $(INSTALL_TOPDIR)/etc
131 132 133 134
	@$(MAKE) -C tip tipserv-install
	@$(MAKE) -C capture tipserv-install
	@$(MAKE) -C tbsetup tipserv-install

135 136
client-mkdirs:
	-mkdir -p $(DESTDIR)$(CLIENT_BINDIR)
137
	-mkdir -p $(DESTDIR)$(CLIENT_MANDIR)
138 139

client:
140
	@$(MAKE) -C lib/libtb client
141
ifeq ($(EVENTSYS),1)
142
	@$(MAKE) -C event client
143
endif
144
	@$(MAKE) -C os client
145
ifneq ($(SYSTEM),CYGWIN_NT-5.1)
Timothy Stack's avatar
 
Timothy Stack committed
146 147
	@$(MAKE) -C capture client
	@$(MAKE) -C tip client
148
	@$(MAKE) -C tools client
149
endif
150 151 152 153
	@$(MAKE) -C sensors client
	@$(MAKE) -C tmcd client

client-install: client client-mkdirs
154
ifeq ($(EVENTSYS),1)
155
	@$(MAKE) -C event client-install
156
endif
157
	@$(MAKE) -C os client-install
158
ifneq ($(SYSTEM),CYGWIN_NT-5.1)
Timothy Stack's avatar
 
Timothy Stack committed
159 160
	@$(MAKE) -C capture client-install
	@$(MAKE) -C tip client-install
161
	@$(MAKE) -C tools client-install
162
endif
163
	@$(MAKE) -C sensors client-install
164 165
	@$(MAKE) -C tmcd client-install

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
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) .

183 184 185 186
destdircheck:
	@if [ -z "$(DESTDIR)" ]; then \
	    echo "You must define DESTDIR for this target!"; \
	    false; \
187 188 189 190
	fi
	@if [ "$(DESTDIR)" = "/" ]; then \
	    echo "DESTDIR is '/', really really bad idea!"; \
	    false; \
191 192
	fi

193 194 195 196 197 198 199
mfsoscheck:
	@if [ `uname -s` != "FreeBSD" ]; then \
	    echo "Must build MFS files on a FreeBSD system!"; \
	    false; \
	fi

mfs: mfsoscheck
200 201 202 203
	@$(MAKE) -C os mfs
	@$(MAKE) -C sensors mfs
	@$(MAKE) -C tmcd mfs

204
mfs-install: destdircheck mfs client-mkdirs
205 206 207 208
	@$(MAKE) -C os mfs-install
	@$(MAKE) -C sensors mfs-install
	@$(MAKE) -C tmcd mfs-install

209 210 211 212 213 214 215 216 217 218
frisbee-mfs: mfsoscheck
	@$(MAKE) -C cdrom/groklilo client
	@$(MAKE) -C os frisbee-mfs
	@$(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

219 220 221 222 223
#
# 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)
224
SCHEMACHECK= cd $(OBJDIR)/db && perl schemacheck
225 226 227 228 229 230 231
else
SCHEMACHECK= @echo "Skipping schema check, since prefix isn't /usr/testbed"
endif
install-schemacheck:
	@echo "Checking DB schema..."
	$(SCHEMACHECK)

Chad Barb's avatar
 
Chad Barb committed
232 233 234 235 236 237 238 239 240
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)

241 242 243 244 245 246 247 248 249
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)

250 251 252 253 254 255 256 257 258
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)

259 260
clean:		clean-subdirs
distclean:	distclean-subdirs
Mike Hibler's avatar
Mike Hibler committed
261
	rm -f Makeconf GNUmakefile config.h config.status config.cache config.log
262
	rm -f $(DISTCLEAN_FILES)
263

264 265 266 267 268
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) .

269 270 271 272 273
# How to recursively descend into subdirectories to make general
# targets such as `all'.
%.MAKE:
	@$(MAKE) -C $(dir $@) $(basename $(notdir $@))
%-subdirs: $(addsuffix /%.MAKE,$(SUBDIRS)) ;
274

275 276
# By default, make any target by descending into subdirectories.
%: %-subdirs ;
277

278
.PHONY: post-install install-mkdirs
279 280 281

# Get rid of a bunch of nasty built-in implicit rules.
.SUFFIXES: