# Mesa 3-D graphics library
# Version:  5.1
# 
# Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
# 
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# MinGW core makefile v1.4 for Mesa
#
#  Copyright (C) 2002 - Daniel Borca
#  Email : dborca@users.sourceforge.net
#  Web   : http://www.geocities.com/dborca

# MinGW core-glu makefile updated for Mesa 7.0
#
#  Updated : by Heromyth, on 2007-7-21
#  Email   : zxpmyth@yahoo.com.cn
#  Bugs    : 1) All the default settings work fine. But the setting X86=1 can't work. 
#            The others havn't been tested yet.
#            2) The generated DLLs are *not* compatible with the ones built
#            with the other compilers like VC8, especially for GLUT. 
#            3) Although more tests are needed, it can be used individually!

#
#  Available options:
#
#    Environment variables:
#	CFLAGS
#
#	GLIDE		path to Glide3 SDK; used with FX.
#			default = $(TOP)/glide3
#	FX=1		build for 3dfx Glide3. Note that this disables
#			compilation of most WMesa code and requires fxMesa.
#			As a consequence, you'll need the Win32 Glide3
#			library to build any application.
#			default = no
#	ICD=1		build the installable client driver interface
#			(windows opengl driver interface)
#			default = no
#	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow).
#			default = no
#
#    Targets:
#	all:		build GL
#	clean:		remove object files
#



.PHONY: all clean
.INTERMEDIATE: x86/gen_matypes.exe
.SUFFIXES: .rc .res

# Set this to the prefix of your build tools, i.e. mingw32-
TOOLS_PREFIX = mingw32-

TOP = ../../..
LIBDIR = $(TOP)/lib

LIB_NAME = glu32
DLL_EXT = .dll
IMP_EXT = .a
LIB_PRE = lib
STRIP = -s

AR = ar
ARFLAGS = crus
DLLTOOL = dlltool

GLU_DLL = $(LIB_NAME)$(DLL_EXT)
GLU_IMP = $(LIB_PRE)$(LIB_NAME)$(IMP_EXT)
GLU_DEF = $(LIB_NAME).def

LDLIBS = -L$(LIBDIR) -lopengl32
LDFLAGS = $(STRIP) -shared -fPIC -Wl,--kill-at

CFLAGS += -DBUILD_GLU32 -D_DLL


CC = $(TOOLS_PREFIX)gcc
CFLAGS += -DNDEBUG -DLIBRARYBUILD -I$(TOP)/include -Iinclude
CXX = $(TOOLS_PREFIX)g++
CXXFLAGS = $(CFLAGS) -Ilibnurbs/internals -Ilibnurbs/interface -Ilibnurbs/nurbtess

AR = ar
ARFLAGS = crus

UNLINK = del $(subst /,\,$(1))
ifneq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
UNLINK = $(RM) $(1)
endif
ifneq ($(wildcard $(addsuffix /rm,$(subst :, ,$(PATH)))),)
UNLINK = $(RM) $(1)
endif

C_SOURCES = \
	libutil/error.c \
	libutil/glue.c \
	libutil/mipmap.c \
	libutil/project.c \
	libutil/quad.c \
	libutil/registry.c \
	libtess/dict.c \
	libtess/geom.c \
	libtess/memalloc.c \
	libtess/mesh.c \
	libtess/normal.c \
	libtess/priorityq.c \
	libtess/render.c \
	libtess/sweep.c \
	libtess/tess.c \
	libtess/tessmono.c

CC_SOURCES = \
	libnurbs/interface/bezierEval.cc \
	libnurbs/interface/bezierPatch.cc \
	libnurbs/interface/bezierPatchMesh.cc \
	libnurbs/interface/glcurveval.cc \
	libnurbs/interface/glinterface.cc \
	libnurbs/interface/glrenderer.cc \
	libnurbs/interface/glsurfeval.cc \
	libnurbs/interface/incurveeval.cc \
	libnurbs/interface/insurfeval.cc \
	libnurbs/internals/arc.cc \
	libnurbs/internals/arcsorter.cc \
	libnurbs/internals/arctess.cc \
	libnurbs/internals/backend.cc \
	libnurbs/internals/basiccrveval.cc \
	libnurbs/internals/basicsurfeval.cc \
	libnurbs/internals/bin.cc \
	libnurbs/internals/bufpool.cc \
	libnurbs/internals/cachingeval.cc \
	libnurbs/internals/ccw.cc \
	libnurbs/internals/coveandtiler.cc \
	libnurbs/internals/curve.cc \
	libnurbs/internals/curvelist.cc \
	libnurbs/internals/curvesub.cc \
	libnurbs/internals/dataTransform.cc \
	libnurbs/internals/displaylist.cc \
	libnurbs/internals/flist.cc \
	libnurbs/internals/flistsorter.cc \
	libnurbs/internals/hull.cc \
	libnurbs/internals/intersect.cc \
	libnurbs/internals/knotvector.cc \
	libnurbs/internals/mapdesc.cc \
	libnurbs/internals/mapdescv.cc \
	libnurbs/internals/maplist.cc \
	libnurbs/internals/mesher.cc \
	libnurbs/internals/monoTriangulationBackend.cc \
	libnurbs/internals/monotonizer.cc \
	libnurbs/internals/mycode.cc \
	libnurbs/internals/nurbsinterfac.cc \
	libnurbs/internals/nurbstess.cc \
	libnurbs/internals/patch.cc \
	libnurbs/internals/patchlist.cc \
	libnurbs/internals/quilt.cc \
	libnurbs/internals/reader.cc \
	libnurbs/internals/renderhints.cc \
	libnurbs/internals/slicer.cc \
	libnurbs/internals/sorter.cc \
	libnurbs/internals/splitarcs.cc \
	libnurbs/internals/subdivider.cc \
	libnurbs/internals/tobezier.cc \
	libnurbs/internals/trimline.cc \
	libnurbs/internals/trimregion.cc \
	libnurbs/internals/trimvertpool.cc \
	libnurbs/internals/uarray.cc \
	libnurbs/internals/varray.cc \
	libnurbs/nurbtess/directedLine.cc \
	libnurbs/nurbtess/gridWrap.cc \
	libnurbs/nurbtess/monoChain.cc \
	libnurbs/nurbtess/monoPolyPart.cc \
	libnurbs/nurbtess/monoTriangulation.cc \
	libnurbs/nurbtess/partitionX.cc \
	libnurbs/nurbtess/partitionY.cc \
	libnurbs/nurbtess/polyDBG.cc \
	libnurbs/nurbtess/polyUtil.cc \
	libnurbs/nurbtess/primitiveStream.cc \
	libnurbs/nurbtess/quicksort.cc \
	libnurbs/nurbtess/rectBlock.cc \
	libnurbs/nurbtess/sampleComp.cc \
	libnurbs/nurbtess/sampleCompBot.cc \
	libnurbs/nurbtess/sampleCompRight.cc \
	libnurbs/nurbtess/sampleCompTop.cc \
	libnurbs/nurbtess/sampleMonoPoly.cc \
	libnurbs/nurbtess/sampledLine.cc \
	libnurbs/nurbtess/searchTree.cc

SOURCES = $(C_SOURCES) $(CC_SOURCES)

OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))

.c.o:
	$(CC) -o $@ $(CFLAGS) -c $<
.cc.o:
	$(CXX) -o $@ $(CXXFLAGS) -c $<


all: $(LIBDIR) $(LIBDIR)/$(GLU_DLL) $(LIBDIR)/$(GLU_IMP)

$(LIBDIR):
	mkdir -p $(LIBDIR)

$(LIBDIR)/$(GLU_DLL) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
	$(CXX) $(LDFLAGS) -o $(LIBDIR)/$(GLU_DLL) $^ $(LDLIBS)
	$(DLLTOOL) --as=as --dllname $(LIB_NAME) --output-def $(LIBDIR)/$(GLU_DEF) $^
	$(DLLTOOL) --as=as -k --dllname $(LIB_NAME) --output-lib $(LIBDIR)/$(GLU_IMP) --def $(LIBDIR)/$(GLU_DEF)


clean:
	-$(call UNLINK,libutil/*.o)
	-$(call UNLINK,libtess/*.o)
	-$(call UNLINK,libnurbs/interface/*.o)
	-$(call UNLINK,libnurbs/internals/*.o)
	-$(call UNLINK,libnurbs/nurbtess/*.o)
