#!/usr/bin/env ruby

require 'build/configure.rb'
require 'ostruct'
require 'optparse'
require 'pp'

puts <<EOT
Battle of Antargis - Configuration
-------------------------------------------------------------------------------
EOT

NEEDED_PROGRAMS=["gcc","g++","swig","ruby"]
POSSIBLE_PROGRAMS=["ccache","sdl-config"]

def allPrograms
	POSSIBLE_PROGRAMS+NEEDED_PROGRAMS
end

class ConfigureOptions
	def self.parse(args)
		options={}
		options[:use_mkmf]=true
		options[:debug]=false
		options[:gcdebug]=false
		options[:profile]=false
		options[:version]="0.2.1.4"

		options[:programs]={}
		allPrograms.each{|p|
			options[:programs][p]=p
		}
	
		opts=OptionParser.new do |opts|
		  opts.banner = "Usage: configure [options]"

			opts.separator ""
			opts.separator "Specific options:"

			opts.on("-d", "--enable-debug",
							"enable debugging") do 
				options[:debug]=true
			end

			opts.on("-g","--enable-gc-debug",
							"enable debugging of garbage collector") do
				options[:gcdebug]=true
			end

			opts.on("-p","--enable-profile",
							"enable c++ profiling") do 
				options[:profile]=true
			end

			opts.on("--prefix PREFIXDIR",
							"set prefix directory PREFIXDIR") do |dir|
				options[:prefix]=dir
			end

			opts.on("--drmuser DRMUSER",
				"set user for DRM") do |v|
					options[:drmuser]=v
			end
			
			opts.on("--drmpw DRMPASSWORD",
				"set password for DRM") do |v|
					options[:drmpass]=v
			end
			
			opts.on("-v","--version",
				"set release version of BoA") do |v|
					options[:version]=v
			end

			opts.on("--ext-config CONFIG",
				"use user-defined config instead of ruby's mkmf","CONFIG maybe in mingw32 or unix") do |extconfig|
					options[:extconfig]=extconfig
			end

			allPrograms.each{|program|
				opts.on("--path-"+program+" PATH",
					"set path to program '#{program}'") do |d|
					CFG.set(program,d)
				end
			}


		end
		opts.parse!(args)
		options
	end
end
		
options = ConfigureOptions.parse(ARGV)


NEEDED_PROGRAMS.each{|program|
	CFG.checkProgram(program,true)
}
POSSIBLE_PROGRAMS.each{|program|
	CFG.checkProgram(program,false)
}

CFG.setOptions(options)


CFG.addCheck("sdl-config --libs",false) do
	libs=nil
	begin
		call="#{CFG.get("sdl-config")} --libs"
		libs=`#{call}`.gsub("\n","")
	rescue
	end
	CFG.set("LIBS",libs) if libs        
	true if libs
end

CFG.addCheck("sdl-config --cflags",false) do
	libs=nil
	begin
			libs=`#{CFG.get("sdl-config")} --cflags`.gsub("\n","")
	rescue
	end
	CFG.set("CFLAGS",libs) if libs        
	true if libs
end

CFG.includeConfig
CFG.gatherMkmfInfo if options[:use_mkmf]

CFG.checkLibrary("opengl32","OpenGL library (win32)",false)
CFG.checkLibrary("glu32","OpenGL Utility library (win32)",false)
#puts foundGL
CFG.checkLibrary("GL","OpenGL library",false)
CFG.checkLibrary("GLU","OpenGL Utility library",false)

CFG.run

if (not (CFG.hasLibrary("opengl32") or CFG.hasLibrary("GL")))
	puts "NO opengl-library found. Please install one - including dev-packages!"
end
if (not (CFG.hasLibrary("glu32") or CFG.hasLibrary("GLU")))
	puts "NO glu-library found. Please install one - including dev-packages!"
end

puts
puts "You should run '>rant clean && rant' to let changes take effect!"
puts 
