require 'formula' class Msitools < Formula homepage 'https://wiki.gnome.org/msitools' url 'http://ftp.gnome.org/pub/GNOME/sources/msitools/0.93/msitools-0.93.tar.xz' sha1 'b8dcf394a1aeddd8404ae1702ce42af623f54101' depends_on 'intltool' => :build depends_on 'pkg-config' => :build depends_on 'e2fsprogs' depends_on 'gcab' depends_on 'gettext' depends_on 'glib' depends_on 'libgsf' depends_on 'vala' def install system "./configure", "--disable-debug", "--disable-dependency-tracking", "--disable-silent-rules", "--prefix=#{prefix}" system "make", "install" end test do # wixl-heat: make an xml fragment IO.popen("#{bin}/wixl-heat --prefix test", "w+") do |pipe| pipe.close_write assert pipe.read.include?("") end # wixl: build two installers 1.upto(2) do |i| (testpath/"test#{i}.txt").write "abc" (testpath/"installer#{i}.wxs").write <<-EOS.undent EOS system "#{bin}/wixl -o installer#{i}.msi installer#{i}.wxs" assert File.exist?("installer#{i}.msi") end # msidiff: diff two installers lines = `#{bin}/msidiff --list installer1.msi installer2.msi 2>/dev/null`.split("\n") assert_equal 0, $?.exitstatus assert_equal "-Program Files/test/test1.txt", lines[-2] assert_equal "+Program Files/test/test2.txt", lines[-1] # msiinfo: show info for an installer out = `#{bin}/msiinfo suminfo installer1.msi` assert_equal 0, $?.exitstatus assert out.include?("Author: BigCo") # msiextract: extract files from an installer mkdir "files" system "#{bin}/msiextract --directory files installer1.msi" assert_equal (testpath/"test1.txt").read, (testpath/"files/Program Files/test/test1.txt").read # msidump: dump tables from an installer mkdir "idt" system "#{bin}/msidump --directory idt installer1.msi" assert File.exist?("idt/File.idt") # msibuild: replace a table in an installer system "#{bin}/msibuild installer1.msi -i idt/File.idt" end end