if $(OS) = NT {

Echo Building for Windows! ;

#CC = gcc ;
#C++ = g++ ;
#LINK = g++ ;

#CCFLAGS = -I$(TOP) -Wall -Werror -g ;

C++FLAGS = /EHsc /W3 /WX /MD /D_USE_MATH_DEFINES /DWINDOWS /I$(TOP) /GR /GS ;

CCFLAGS = $(C++FLAGS) ;

SDLDIR = C:/lib/SDL-1.2.11 ;
PNGDIR = C:/lib/libpng-1.2.16 ;

SDLC++FLAGS = /I$(SDLDIR)/include ;

LINKLIBS = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib SDLmain.lib SDL.lib OpenGL32.lib GlU32.lib libpng13.lib ;

LINKFLAGS = /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /MACHINE:X86 /INCREMENTAL:NO /NOLOGO /LIBPATH:"$(SDLDIR)/lib" /LIBPATH:"$(PNGDIR)/lib" /NODEFAULTLIB:LIBC ;

SDLLINKLIBS = ;

SEP = \\ ;

} else {

if $(IS_GAME) = 1 {
	if $(OS) = MACOSX {
		CC = gcc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc ;
		C++ = g++ -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc ;
		LINK = g++ -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc ;
	} else {
		CC = gcc -m32 ;
		C++ = g++ -m32 ;
		LINK = g++ -m32 ;
	}
} else {
	CC = gcc ;
	C++ = g++ ;
	LINK = g++ ;
}

CCFLAGS = -I$(TOP) -Wall -Werror -g ;

C++FLAGS = -I$(TOP) -Wall -Werror -g ;

#SDLC++FLAGS = `sdl-config --cflags` ;

#SDLLINKLIBS = `sdl-config --libs` ;

MAGICKLDFLAGS = `Magick++-config --ldflags` ;

MAGICKLINKLIBS = `Magick++-config --libs` ;

if $(OS) = LINUX { #SDLLINKLIBS += -lGL -lGLU ;
Echo Building for Linux ; }

if $(OS) = MACOSX { C++FLAGS += -DBIG_ENDIAN -DMACOSX ; SDLLINKLIBS += -framework OpenGL ; Echo Building for MacOS (BIG_ENDIAN and MACOSX defined) ; }

SEP = / ;

}

rule MkDirBulk {
	MkDir $(<) ;
	DEPENDS $(>) : $(<) ;
	Bulk $(<) : $(>) ;
}

rule MyObjects {
	for FILE in $(1:S=$(SUFOBJ)) {
		Depends $(FILE:D=$(SUBDIR)) : $(FILE:G=$(SOURCE_GRIST)) ;
	}
	Objects $(1) ;
}

DISTDIR = dist_unknown ;

if $(OS) = LINUX {
	DISTDIR = dist_linux ;

	rule GraphicsFlags {
		if $(IS_GAME) = 1 {
			ObjectC++Flags $(<) : "`/home/Chicken1/game_libs/SDL_nosound/bin/sdl-config --cflags`" ;
		} else {
			ObjectC++Flags $(<) : "`sdl-config --cflags`" ;
		}

	}

	rule GraphicsC++Flags {
		GraphicsFlags $(<) ;
	}

	rule GraphicsCFlags {
		if $(IS_GAME) = 1 {
			ObjectCcFlags $(<) : "`/home/Chicken1/game_libs/SDL_nosound/bin/sdl-config --cflags`" ;
		} else {
			ObjectCcFlags $(<) : "`sdl-config --cflags`" ;
		}

	}

	rule GraphicsLibs {
		if $(IS_GAME) = 1 {
			LINKLIBS on $(DISTDIR)$(SEP)$(<) += "`/home/Chicken1/game_libs/SDL_nosound/bin/sdl-config --libs`" -lGL -lGLU $(GRAPHICS_LIBS) ;
		} else {
			LINKLIBS on $(DISTDIR)$(SEP)$(<) += "`sdl-config --libs`" -lGL -lGLU $(GRAPHICS_LIBS) ;
		}
	}

	rule Executable {
		Echo Executable: $(<) ;
		DEPENDS $(DISTDIR)$(SEP)$(<) : $(DISTDIR) ;
		MainFromObjects $(DISTDIR)$(SEP)$(<) : $(>) ;
	}

}

#-------------------------------
if $(OS) = MACOSX {
	DISTDIR = dist_osx ;

	if $(IS_GAME) = 1 {
		ObjectCcFlags SDLMain : -I/Library/Frameworks/SDL.framework/Headers ;
		Cc SDLMain.o : Basis/osx/SDLMain.m ;
	}

	rule GraphicsFlags {
		if $(IS_GAME) = 1 {
			ObjectC++Flags $(<) : -I/Library/Frameworks/SDL.framework/Headers -I/System/Library/Frameworks/OpenGL.framework/Headers ;
		} else {
			ObjectC++Flags $(<) : "`sdl-config --cflags`" ;
		}

	}

	rule GraphicsC++Flags {
		GraphicsFlags $(<) ;
	}

	rule GraphicsCFlags {
		if $(IS_GAME) = 1 {
			ObjectCcFlags $(<) : -I/Library/Frameworks/SDL.framework/Headers -I/System/Library/Frameworks/OpenGL.framework/Headers ;
		} else {
			ObjectCcFlags $(<) : "`sdl-config --cflags`" ;
		}

	}

	rule GraphicsLibs {
		if $(IS_GAME) = 1 {
			LINKLIBS on $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)MacOS$(SEP)$(<) += -framework SDL -framework OpenGL ;
		} else {
			LINKLIBS on $(DISTDIR)$(SEP)$(<) += "`sdl-config --libs`" -lGL -lGLU $(GRAPHICS_LIBS) ;
		}
	}

	actions DoCopySDL {
		echo I\'m copying SDL.framework to $(>)
		cp -r /Library/Frameworks/SDL.framework $(>)/SDL.framework
	}
	rule CopySDL {
		DEPENDS all : $(<)/SDL.framework ;
		DEPENDS $(<)/SDL.framework : $(<) ;
		DoCopySDL $(<)/SDL.framework : $(<) ;
	}

	rule Executable {
		Echo Executable: $(<) ;
		if $(IS_GAME) = 1 {
			MkDir $(DISTDIR)$(SEP)$(<).app ;
			MkDir $(DISTDIR)$(SEP)$(<).app$(SEP)Contents ;
			MkDir $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Resources ;
			MkDir $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Frameworks ;
			CopySDL $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Frameworks ;
			MkDir $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)MacOS ;
			FILE = $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)MacOS$(SEP)$(<) ;
			DEPENDS $(FILE) : $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)MacOS ;
			LINKLIBS on $(FILE) += -framework Cocoa ;
			MainFromObjects $(FILE) : $(>) SDLMain.o ;
			if $(INFOPLIST) = "" {
				Echo You should really define INFOPLIST, or your .app isn't going to work. ;
			} else {
				DEPENDS $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Info.plist : $(DISTDIR)$(SEP)$(<).app$(SEP)Contents ;
				File $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Info.plist : $(INFOPLIST) ;
			}
			if $(ICNS) = "" {
				Echo You should really define ICNS, so I can copy over an OSX icon for you ;
			} else {
				DEPENDS $(ICNS) : $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Resources ;
				Bulk $(DISTDIR)$(SEP)$(<).app$(SEP)Contents$(SEP)Resources : $(ICNS) ;
			}
		} else {
			DEPENDS $(DISTDIR)$(SEP)$(<) : $(DISTDIR) ;
			MainFromObjects $(DISTDIR)$(SEP)$(<) : $(>) ;
		}
	}

}

#----------------------
#These are pretty OS-Neurtral:
MkDir $(DISTDIR) ;



rule Datafile {
	Echo Datafile: $(<) ;
	DEPENDS $(DISTDIR)$(SEP)$(<) : $(DISTDIR) ;
	File $(DISTDIR)$(SEP)$(<) : $(>) ;
}

rule Datafiles {
	Echo Datafiles: $(<) ;
	DEPENDS $(DISTDIR)$(SEP)$(<) : $(DISTDIR) ;
	MkDir $(DISTDIR)$(SEP)$(<) ;
	DEPENDS $(>) : $(DISTDIR)$(SEP)$(<) ;
	Bulk $(DISTDIR)$(SEP)$(<) : $(>) ;
}

#Below is from http://maillist.perforce.com/pipermail/jamming/2000-October/001065.html

# Resource : builds a resource file
#
rule Resource
{
     SEARCH on $(>) = $(SEARCH_SOURCE) ;
     MakeLocate $(<) : $(LOCATE_TARGET) ;

     DEPENDS $(<) : $(>) ;
     Clean clean : $(<) ;

     RCFLAGS on $(<) = $(RCFLAGS) /d$(RCDEFINES) ;
}

actions Resource
{
     RC $(RCFLAGS) /Fo$(<) $(>)
}

#
# LinkResource : Links the resource file into an executable
#
rule LinkResource
{
     local t r ;

     if $(<:S)
     {
         t = $(<) ;
     } else {
         t = $(<:S=$(SUFEXE)) ;
     }

     r = $(>:S=.res) ;

     DEPENDS $(t) : $(r) ;
     NEEDLIBS on $(t) += $(r) ;
}

