# -*- ruby -*- # # Copyright (C) 2012-2014 Ruby-GNOME2 Project Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

$LOAD_PATH.unshift(“./../glib2/lib”) require “gnome2/rake/package-task”

package_task = GNOME2::Rake::PackageTask.new do |package|

package.summary = "Ruby/GObjectIntrospection is a Ruby binding of GObjectIntrospection."
package.description = "Ruby/GObjectIntrospection is a Ruby binding of GObjectIntrospection."
package.dependency.gem.runtime = ["glib2"]
package.dependency.gem.development = [["test-unit", ">= 2"]]
package.windows.packages = []
package.windows.dependencies = []
package.windows.build_dependencies = ["glib2"]
package.external_packages = [
  {
    :name => "glib",
    :download_site => :gnome,
    :label => "GLib",
    :version => "2.42.0",
    :compression_method => "xz",
    :windows => {
      :build => false,
    },
    :native => {
      :build => true,
      :need_autoreconf => true,
      :built_file => "lib/libglib-2.0.so",
    },
  },
  {
    :name => "gobject-introspection",
    :download_site => :gnome,
    :label => "gobject-introspection",
    :version => "1.42.0",
    :compression_method => "xz",
    :windows => {
      :configure_args => [
        "--with-g-ir-scanner=#{package.native.absolute_binary_dir}/bin/g-ir-scanner",
        "--disable-tests",
      ],
      :patches => [
        "support-external-g-ir-scanner.diff",
      ],
      :need_autoreconf => true,
      :built_file => "bin/libgirepository-1.0-1.dll",
    },
    :native => {
      :build => true,
      :patches => [
        # "cross-compilable-g-ir-scanner.diff",
      ],
      :built_file => "bin/g-ir-scanner",
    }
  },
]

end package_task.define

namespace :native do

namespace :"gobject-introspection" do
  desc "Make g-ir-scanner workable for Windows on non Windows"
  task :cross do
    g_ir_scanner_dir = package_task.native.absolute_binary_dir
    g_ir_scanner_dir += "lib/gobject-introspection/giscanner"
    Dir.chdir(g_ir_scanner_dir.to_s) do
      patch = "#{package_task.package.patches_dir}/cross-g-ir-scanner.diff"
      sh("patch -p2 < #{patch}")
      rm_f(Dir.glob("*.{pyc,pyo}"))
    end
  end
end

namespace :builder do
  task :after => "native:gobject-introspection:cross"
end

end

namespace :win32 do

namespace :"gobject-introspection" do
  desc "Use native tools"
  task :cross do
    pkg_config_dir = package_task.windows.absolute_binary_dir + "lib/pkgconfig"
    pc_path = pkg_config_dir + "gobject-introspection-1.0.pc"
    original_pc = pc_path.read
    new_pc = ""
    new_pc << "native_prefix=#{package_task.native.absolute_binary_dir}\n"
    new_pc << "native_bindir=${native_prefix}/bin\n"
    original_pc.each_line do |line|
      case line
      when /\Ag_ir_(scanner|compiler)=/
        new_pc << line.gsub(/\${bindir}/, "${native_bindir}").gsub(/\.exe/, "")
      else
        new_pc << line
      end
    end
    pc_path.open("w") do |pc_file|
      pc_file.write(new_pc)
    end
  end
end

namespace :builder do
  task :after => "win32:gobject-introspection:cross"
end

end