# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# DO NOT EDIT.  Automatically generated by gobuild.
# gobuild -m >Makefile
O=6
GC=$(O)g
CC=$(O)c -w
AS=$(O)a
AR=$(O)ar

default: packages

clean:
	rm -f *.$O *.a $O.out

test: packages
	gotest

coverage: packages
	gotest
	6cov -g `pwd` | grep -v '_test\.go:'

%.$O: %.go
	$(GC) $*.go

%.$O: %.c
	$(CC) $*.c

%.$O: %.s
	$(AS) $*.s

O1=\
	status.$O\
	url.$O\

O2=\
	request.$O\

O3=\
	server.$O\

O4=\
	fs.$O\

http.a: a1 a2 a3 a4

a1:	$(O1)
	$(AR) grc http.a status.$O url.$O
	rm -f $(O1)

a2:	$(O2)
	$(AR) grc http.a request.$O
	rm -f $(O2)

a3:	$(O3)
	$(AR) grc http.a server.$O
	rm -f $(O3)

a4:	$(O4)
	$(AR) grc http.a fs.$O
	rm -f $(O4)

newpkg: clean
	$(AR) grc http.a

$(O1): newpkg
$(O2): a1
$(O3): a2
$(O4): a3

nuke: clean
	rm -f $(GOROOT)/pkg/http.a

packages: http.a

install: packages
	cp http.a $(GOROOT)/pkg/http.a

