# -*- ruby -*- require './../glib2/lib/gnome2-raketask' require 'open-uri' package = GNOME2Package.new do |_package| _package.summary = "Ruby/GStreamer is a Ruby binding for GStreamer." _package.description = "Ruby/GStreamer is a Ruby binding for GStreamer." _package.dependency.gem.runtime = ["glib2"] _package.win32.packages = ["libsoup"] _package.win32.dependencies = ["jpeg", "libxml2"] _package.post_install_message = "This library is experimental." _package.cross_compiling do |spec| if /mingw|mswin/ =~ spec.platform.to_s spec.add_runtime_dependency("cairo", ">= 1.10.1") spec.add_runtime_dependency("pango", ">= #{_package.version}") spec.add_runtime_dependency("gdk_pixbuf2", ">= #{_package.version}") end end end package.define_tasks namespace :win32 do host = "i686-w64-mingw32" dist_dir = Pathname.new("vendor/local").expand_path license_dir = dist_dir + "share" + "license" tmp_dir = Pathname.new("tmp").expand_path download_dir = tmp_dir + "download" patch_dir = (Pathname.new(__FILE__).dirname + "patches").expand_path rcairo_win32_path = ENV["RCAIRO_WIN32_PATH"] || "../../rcairo.win32" rcairo_win32_path = File.expand_path(rcairo_win32_path) rcairo_win32_include_path = "#{rcairo_win32_path}/vendor/local/include" rcairo_win32_lib_path = "#{rcairo_win32_path}/vendor/local/lib" xiph_download_url_base = "http://downloads.xiph.org/releases" freedesktop_download_url_base = "http://gstreamer.freedesktop.org/src" sf_net_download_url_base = "http://downloads.sourceforge.net/project" libmad_version = "0.15.1b" packages = [ { :name => "libogg", :download_base_url => "#{xiph_download_url_base}/ogg", :label => "Ogg", :version => "1.3.0", :configure_args => [], }, { :name => "libvorbis", :download_base_url => "#{xiph_download_url_base}/vorbis", :label => "Vorbis", :version => "1.3.2", :configure_args => [], }, { :name => "libtheora", :download_base_url => "#{xiph_download_url_base}/theora", :label => "Theora", :version => "1.1.1", :configure_args => [], }, # { # :name => "libmad", # :download_base_url => "#{sf_net_download_url_base}/mad/libmad/#{libmad_version}", # :label => "MAD", # :version => libmad_version, # :configure_args => ["CFLAGS=-O3 -march=i686"], # :need_autoreconf => true, # :patches => ["libmad-0.15.1b-fix-mingw-build.diff"], # }, { :name => "flac", :download_base_url => "#{xiph_download_url_base}/flac", :label => "FLAC", :version => "1.2.1", :configure_args => ["--disable-cpplibs"], :need_autogen => true, :patches => ["flac-1.2.1-fix-mingw-build.diff"], }, { :name => "speex", :download_base_url => "#{xiph_download_url_base}/speex", :label => "Speex", :version => "1.2rc1", :configure_args => [], }, { :name => "gstreamer", :download_base_url => "#{freedesktop_download_url_base}/gstreamer", :label => "GStreamer", :version => "0.10.35", :configure_args => ["--enable-check"], }, { :name => "gst-plugins-base", :download_base_url => "#{freedesktop_download_url_base}/gst-plugins-base", :label => "GStreamer plugins (base)", :version => "0.10.35", :configure_args => ["--disable-gnome_vfs"], }, { :name => "gst-plugins-good", :download_base_url => "#{freedesktop_download_url_base}/gst-plugins-good", :label => "GStreamer plugins (good)", :version => "0.10.30", :configure_args => ["--disable-gconf"], }, { :name => "gst-plugins-bad", :download_base_url => "#{freedesktop_download_url_base}/gst-plugins-bad", :label => "GStreamer plugins (bad)", :version => "0.10.22", :configure_args => ["--disable-librfb"], }, # { # :name => "gst-plugins-ugly", # :download_base_url => "#{freedesktop_download_url_base}/gst-plugins-ugly", # :label => "GStreamer plugins (ugly)", # :version => "0.10.18", # :configure_args => [], # }, { :name => "gst-ffmpeg", :download_base_url => "#{freedesktop_download_url_base}/gst-ffmpeg", :label => "GStreamer ffmpeg", :version => "0.10.12", :configure_args => ["--with-ffmpeg-extra-configure=" + "--cross-prefix=#{host}- " + "--target-os=mingw32 " + "--arch=i686 " + "--pkg-config=pkg-config"], :bundled_packages => [ { :name => "libav", :path => "gst-libs/ext/libav", :license_files => ["LICENSE", "CREDITS", "COPYING.GPLv2", "COPYING.GPLv3", "COPYING.LGPLv2.1", "COPYING.LGPLv3"], } ], }, ] namespace :download do packages.each do |_package| base = "#{_package[:name]}-#{_package[:version]}" tar_gz = "#{base}.tar.gz" tar_gz_url = "#{_package[:download_base_url]}/#{tar_gz}" tar_gz_full_path = download_dir + tar_gz desc "Download #{_package[:label]} into #{download_dir}." task _package[:name] => tar_gz_full_path.to_s directory_path = tar_gz_full_path.dirname directory directory_path.to_s file tar_gz_full_path.to_s => directory_path.to_s do rake_output_message "downloading... #{tar_gz_url}" open(tar_gz_url) do |downloaded_tar_gz| tar_gz_full_path.open("wb") do |tar_gz_file| tar_gz_file.print(downloaded_tar_gz.read) end end end end end namespace :build do task :prepare do depended_packages = ["glib2", "atk", "pango", "gdk_pixbuf2", "gtk2"] pkg_config_path = (["gstreamer"] + depended_packages).collect do |_package| "../#{_package}/vendor/local/lib/pkgconfig" end ENV["PKG_CONFIG_PATH"] = pkg_config_path.collect do |path| File.expand_path(path) end.join(":") ENV["PKG_CONFIG_LIBDIR"] = "#{rcairo_win32_path}/vendor/local/lib/pkgconfig" end packages.each do |_package| desc "Build #{_package[:label]} and install it into #{dist_dir}." task _package[:name] => [:prepare, "win32:download:#{_package[:name]}"] do package_tmp_dir = tmp_dir + _package[:name] rm_rf(package_tmp_dir) mkdir_p(package_tmp_dir) base = "#{_package[:name]}-#{_package[:version]}" tar_gz = "#{base}.tar.gz" tar_gz_full_path = download_dir + tar_gz Dir.chdir(package_tmp_dir.to_s) do sh("tar", "xzf", tar_gz_full_path.to_s) or exit(false) end Dir.chdir((package_tmp_dir + base).to_s) do (_package[:patches] || []).each do |patch| sh("patch -p1 < #{patch_dir}/#{patch}") end sh("./autogen.sh") if _package[:need_autogen] sh("autoreconf -i") if _package[:need_autoreconf] sh("./configure", "CPPFLAGS=-I#{rcairo_win32_include_path} -I#{dist_dir + 'include'}", "LDFLAGS=-L#{rcairo_win32_lib_path} -L#{dist_dir + 'lib'}", "--prefix=#{dist_dir}", "--host=#{host}", *_package[:configure_args]) or exit(false) common_make_args = [] common_make_args << "GLIB_COMPILE_SCHEMAS=glib-compile-schemas" build_make_args = common_make_args.dup install_make_args = common_make_args.dup make_n_jobs = ENV["MAKE_N_JOBS"] build_make_args << "-j#{make_n_jobs}" if make_n_jobs ENV["GREP_OPTIONS"] = "--text" sh("nice", "make", *build_make_args) or exit(false) sh("make", "install", *install_make_args) or exit(false) package_license_dir = license_dir + _package[:name] mkdir_p(package_license_dir) package_license_files = ["AUTHORS", "COPYING", "COPYING.LIB"] package_license_files = package_license_files.reject do |file| not File.exist?(file) end cp(package_license_files, package_license_dir) bundled_packages = _package[:bundled_packages] || [] bundled_packages.each do |bundled_package| bundled_package_license_dir = license_dir + bundled_package[:name] mkdir_p(bundled_package_license_dir) license_files = bundled_package[:license_files].collect do |file| File.join(bundled_package[:path], file) end cp(license_files, bundled_package_license_dir) end end end end end desc "Build GStreamer binaries" task :build => packages.collect {|_package| "win32:build:#{_package[:name]}"} end