# Mesa 3-D graphics library
# Version:  4.0
# 
# Copyright (C) 1999  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.

# DOS/DJGPP glu makefile v1.5 for Mesa
#
#  Copyright (C) 2002 - Daniel Borca
#  Email : dborca@users.sourceforge.net
#  Web   : http://www.geocities.com/dborca


#
#  Available options:
#
#    Environment variables:
#	CFLAGS
#
#    Targets:
#	all:		build GLU
#	clean:		remove object files
#



.PHONY: all clean

TOP = ../../..
LIBDIR = $(TOP)/lib
GLU_LIB = libglu.a
GLU_DXE = glu.dxe
GLU_IMP = libiglu.a

export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib

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

AR = ar
ARFLAGS = crus

HAVEDXE3 = $(wildcard $(DJDIR)/bin/dxe3gen.exe)

ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
UNLINK = del $(subst /,\,$(1))
else
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)/$(GLU_LIB) $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP)

$(LIBDIR)/$(GLU_LIB): $(OBJECTS)
	$(AR) $(ARFLAGS) $@ $^

$(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
ifeq ($(HAVEDXE3),)
	$(warning Missing DXE3 package... Skipping $(GLU_DXE))
else
	-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -Y $(LIBDIR)/$(GLU_IMP) -D "MesaGLU/SGI DJGPP" -E _glu -P gl.dxe -U $^
endif

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