pcsx2/build.rb
2009-07-11 17:21:23 +00:00

174 lines
4.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# Usage: ruby build.rb [option] [pcsx2, plugins, <plugin name>] [dev,debug,release] [all, install, clean]
# If you don't specify pcsx2, plugins, or a plugin name, it will assume you want to rebuild everything.
# If you don't specify dev or debug, it assumes a release build.
# If it isn't all, install, or clean, it assumes install.
# If you want other options, add them to $pcsx2_build_types. This is still a work in progress...
# --arcum42
require "fileutils.rb"
include FileUtils
$main_dir = Dir.pwd
$pcsx2_install_dir = "#{$main_dir}/bin"
$plugin_install_dir = "#{$main_dir}/bin/plugins"
$pcsx2_dir = "#{$main_dir}/pcsx2"
$plugins_dir = "#{$main_dir}/plugins"
$pcsx2_prefix = " --prefix #{$main_dir}"
$plugins_prefix = " --prefix #{$plugin_install_dir}"
$plugin_list=["CDVDnull", "dev9null", "FWnull", "USBnull", "SPU2null", "zerogs", "zzogl", "zeropad", "zerospu2", "PeopsSPU2", "CDVDiso", "CDVDisoEFP", "CDVDlinuz"]
$full_plugin_list=["CDVDnull", "dev9null", "FWnull", "USBnull", "SPU2null", "zerogs", "zzogl", "zeropad", "zerospu2", "PeopsSPU2", "CDVDiso", "CDVDisoEFP", "CDVDlinuz","GSnull","PadNull","onepad"]
$pcsx2_build_types = {
"dev" => " --enable-devbuild ",
"debug" => " --enable-debug ",
"release" => " "
}
$pcsx2_release_params=["dev","debug","release"]
$make_params=["all", "clean","install"]
$build_report =""
$build_counter = 0
def plugin_src_dir(plugin_name)
name = "#{$plugins_dir}/#{plugin_name}/"
case plugin_name
when "CDVDiso" then
name += "src"
when "CDVDisoEFP" then
name += "src/Linux"
when "CDVDlinuz"
name += "Src/Linux"
when "zerogs", "zzogl"
name += "opengl"
end
return name
end
def announce(my_program)
print "---------------\n"
print "Building #{my_program}\n"
print "---------------\n"
end
def make(options)
system("make #{options}")
($? == 0)
end
def rebuild(options)
system("aclocal")
system("automake")
system("autoconf")
system("chmod +x configure")
system("./configure #{options}")
make "clean"
end
def install(build_name)
ret = make "install"
case build_name
# If the package isn't inclined to obey simple instructions...
when "CDVDisoEFP" then
system("cp #{plugin_src_dir(build_name)}/cfgCDVDisoEFP #{$plugin_install_dir}")
system("cp #{plugin_src_dir(build_name)}/libCDVDisoEFP.so #{$plugin_install_dir}")
when "CDVDlinuz" then
system("cp #{plugin_src_dir(build_name)}/cfgCDVDlinuz #{$plugin_install_dir}")
system("cp #{plugin_src_dir(build_name)}/libCDVDlinuz.so #{$plugin_install_dir}")
when "PeopsSPU2" then
system("cp #{plugin_src_dir(build_name)}/libspu2Peops*.so* #{$plugin_install_dir}")
# Copy the shaders over. Shouldn't the makefile do this?
when "zzogl","zerogs" then
system("cp #{plugin_src_dir(build_name)}/Win32/ps2hw.dat #{$plugin_install_dir}")
#And while we have the opportunity...
when "pcsx2" then
svn_revision = `svn info | grep Revision:`
svn_revision = /[0-9]+/.match(svn_revision)
system("cp #{$pcsx2_install_dir}/pcsx2 #{$pcsx2_install_dir}/pcsx2-#{svn_revision}")
end
ret
end
def build(build_name, make_parameter)
completed = true
announce "#{build_name.capitalize}"
if build_name != "pcsx2" then
build_dir = plugin_src_dir(build_name)
else
build_dir = "#{$pcsx2_dir}"
end
Dir.chdir build_dir
case make_parameter
when "all" then
if build_name == "pcsx2"
rebuild($pcsx2_prefix)
else
rebuild($plugins_prefix)
end
completed = install(build_name)
when "clean" then
make "clean"
else
completed = install(build_name)
end
Dir.chdir $main_dir
if completed then
$build_report += "#{build_name} was built successfully.\n"
$build_counter += 1
else
$build_report += "#{build_name} was not built successfully.\n"
end
end
build_parameter = "all"
make_parameter = ""
build_items = Array.new([])
ARGV.each do |x|
make_parameter = x if $make_params.include?(x)
build_items.push(x) if $full_plugin_list.include?(x) or (x == "pcsx2")
$pcsx2_prefix = $pcsx2_build_types[x] + $pcsx2_prefix if $pcsx2_release_params.include?(x)
if (x == "plugins") then
x = $plugin_list
build_items.push(x)
end
end
if build_items.empty? then
build_items.push($plugin_list)
build_items.push("pcsx2")
end
build_items.flatten!
build_items.each do |x|
build(x,make_parameter)
end
print "\n--\n"
print "Build Summary:\n"
print $build_report
print "\n"
print "#{$build_counter}/#{build_items.count} Successful.\n"