# 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=\
	atan.$O\
	exp.$O\
	fabs.$O\
	floor.$O\
	fmod.$O\
	hypot.$O\
	log.$O\
	pow10.$O\
	sin.$O\
	sqrt.$O\
	tan.$O\

O2=\
	asin.$O\
	atan2.$O\
	pow.$O\
	sinh.$O\

O3=\
	tanh.$O\

math.a: a1 a2 a3

a1:	$(O1)
	$(AR) grc math.a atan.$O exp.$O fabs.$O floor.$O fmod.$O hypot.$O log.$O pow10.$O sin.$O sqrt.$O tan.$O
	rm -f $(O1)

a2:	$(O2)
	$(AR) grc math.a asin.$O atan2.$O pow.$O sinh.$O
	rm -f $(O2)

a3:	$(O3)
	$(AR) grc math.a tanh.$O
	rm -f $(O3)

newpkg: clean
	$(AR) grc math.a

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

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

packages: math.a

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

