# 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

D=

include $(GOROOT)/src/Make.$(GOARCH)
AR=gopack

default: packages

clean:
	rm -rf *.[$(OS)] *.a [$(OS)].out _obj

test: packages
	gotest

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

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

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

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

O1=\
	decimal.$O\
	itoa.$O\
	quote.$O\

O2=\
	atoi.$O\
	ftoa.$O\

O3=\
	atof.$O\


phases: a1 a2 a3
_obj$D/strconv.a: phases

a1: $(O1)
	$(AR) grc _obj$D/strconv.a decimal.$O itoa.$O quote.$O
	rm -f $(O1)

a2: $(O2)
	$(AR) grc _obj$D/strconv.a atoi.$O ftoa.$O
	rm -f $(O2)

a3: $(O3)
	$(AR) grc _obj$D/strconv.a atof.$O
	rm -f $(O3)


newpkg: clean
	mkdir -p _obj$D
	$(AR) grc _obj$D/strconv.a

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

nuke: clean
	rm -f $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D/strconv.a

packages: _obj$D/strconv.a

install: packages
	test -d $(GOROOT)/pkg && mkdir -p $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D
	cp _obj$D/strconv.a $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D/strconv.a
