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


#
#  Available options:
#
#    Environment variables:
#	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

GLU ?= mesa

CFLAGS = -Wall -W -pedantic
CFLAGS += -O2 -ffast-math

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)
