# 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 makefile v1.5 for Mesa
#
#  Copyright (C) 2002 - Borca Daniel
#  Email : dborca@users.sourceforge.net
#  Web   : http://www.geocities.com/dborca


#
#  Available options:
#
#    Environment variables:
#	CPU		optimize for the given processor.
#			default = pentium
#	GLU=[mesa|sgi]	specify GLU directory; can be `sgi' (requires GNU/C++)
#			or `mesa'.
#			default = mesa
#	GLIDE		path to Glide3 SDK; used with FX.
#			default = $(TOP)/glide3
#	FX=1		build for 3dfx Glide3. Note that this disables
#			compilation of most DMesa code and requires fxMesa.
#			As a consequence, you'll need the DJGPP Glide3
#			library to build any application.
#			default = no
#	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow).
#			default = no
#
#    Targets:
#	all:		build everything
#	libgl:		build GL
#	libglu:		build GLU
#	libglut:	build GLUT
#	clean:		remove object files
#	realclean:	remove all generated files
#



.PHONY : all libgl libglu libglut clean realclean

CPU ?= pentium

GLU ?= mesa

CFLAGS = -Wall -W -pedantic
CFLAGS += -O2 -ffast-math -mcpu=$(CPU)

export CFLAGS

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

all: libgl libglu libglut

libgl: lib
	$(MAKE) -f Makefile.DJ -C src/mesa
libglu: lib
	$(MAKE) -f Makefile.DJ -C src/glu/$(GLU)
libglut: lib
	$(MAKE) -f Makefile.DJ -C src/glut/dos

lib:
	mkdir lib

clean:
	$(MAKE) -f Makefile.DJ clean -C src/mesa
	$(MAKE) -f Makefile.DJ clean -C src/glu/mesa
	$(MAKE) -f Makefile.DJ clean -C src/glu/sgi
	$(MAKE) -f Makefile.DJ clean -C src/glut/dos

realclean: clean
	-$(call UNLINK,lib/*.a)
	-$(call UNLINK,lib/*.dxe)
