# 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 for Mesa
#
#  Author: Daniel Borca
#  Email : dborca@users.sourceforge.net
#  Web   : http://www.geocities.com/dborca


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

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/sgi
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)
