# Makefile for project cURL
# Generated on Sun,13 Jan 2002.17:11:10 by EasyGCC (0.1.3 [beta 2] (3 Jan 2002))
# Manually updated
# Contact: easygcc@melotech.co.uk

# Project objects:
objs =	o.hugehelp o.main o.urlglob o.writeout o.writeenv o.rawstr o.nonblock
	

# Compile options:
linkopts	= ../lib/libcurl openldap:libraries/libldap/libldap -o curl
compileropts	= -mpoke-function-name -IUtilLib: -mthrowback

# Project target:
curl:		$(objs)
		gcc $(linkopts) $(objs)

# Static dependancies:
o.hugehelp:	c.hugehelp
		gcc $(compileropts) -c -o hugehelp.o c.hugehelp

o.main:	c.main
		gcc $(compileropts) -c -o main.o c.main

o.os-specific:	c.os-specific
		gcc $(compileropts) -c -o os-specific.o c.os-specific

o.urlglob:	c.urlglob
		gcc $(compileropts) -c -o urlglob.o c.urlglob

o.writeout:	c.writeout
		gcc $(compileropts) -c -o writeout.o c.writeout

o.writeenv:	c.writeenv
		gcc $(compileropts) -c -o writeenv.o c.writeenv

o.rawstr:	../lib/c.rawstr
		gcc $(compileropts) -c -o rawstr.o ../lib/c.rawstr

o.nonblock:	../lib/c.nonblock
		gcc $(compileropts) -c -o nonblock.o ../lib/c.nonblock

# Dynamic dependancies:
o.hugehelp:	c.hugehelp

o.main:	c.main
o.main:	h.setup
o.main:	h.os-specific
o.main:	h.urlglob
o.main:	h.writeout
o.main:	h.version

o.os-specific:	c.os-specific
o.os-specific:	h.setup
o.os-specific:	h.os-specific

o.urlglob:	c.urlglob
o.urlglob:	h.setup
o.urlglob:	h.os-specific
o.urlglob:	h.urlglob

o.writeout:	c.writeout
o.writeout:	h.writeout

