#!/usr/bin/env ruby # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. # frozen_string_literal: true # This script creates a debug PackageKit build used for development. # For the script to work PackageKit source should be in the ./PackageKit # directory alongside this script. require 'fileutils' require 'pathname' require 'open3' CWD = Pathname.new Dir.pwd SOURCE = CWD + 'PackageKit' TMP = CWD + 'tmp' DESTINATION = CWD + 'package' BUILD = 1 ARCH = `uname -m`.strip FileUtils.rm_rf [TMP, DESTINATION] Dir.mkdir TMP version = `git -C #{SOURCE} describe --tags --abbrev=0` .strip .delete_prefix('PACKAGEKIT_') .gsub('_', '.') exec_result = system 'meson', '--buildtype=debug', '--prefix=/usr', '--libdir=/usr/lib64', '--localstatedir=/var', '--mandir=/usr/man', '--sysconfdir=/etc', '-Dsystemd=false', '-Doffline_update=false', '-Dbash_completion=false', '-Dbash_completion_not_found=false', '-Dpackaging_backend=slack', '-Ddaemon_tests=true', TMP.to_s, SOURCE.to_s raise 'Meson build failed' unless exec_result exec_result = system({'DESTDIR' => DESTINATION.to_s}, 'ninja', '-C', TMP.to_s, 'install') raise 'Ninja installation failed' unless exec_result actual_mandir = DESTINATION + 'usr/share/man/man1' mandir = DESTINATION + 'usr/man/man1' FileUtils.mkdir_p mandir Dir.new(actual_mandir).each_child do |entry| manpage = actual_mandir + entry Open3.popen3 'gzip', '--stdout', '-9', manpage.to_s do |stdin, stdout, stderr, wait_thr| File.open (mandir + "#{entry}.gz").to_s, 'wb' do |file| stdin.close IO.copy_stream stdout, file IO.copy_stream stderr, $stderr stdout.close stderr.close wait_thr.value end end end FileUtils.rm_rf (DESTINATION + 'usr/share/man').to_s Dir.chdir DESTINATION package_path = CWD + "PackageKit-#{version}-#{ARCH}-#{BUILD}_debug.txz" puts "Building #{package_path}" system '/sbin/makepkg', '-l', 'y', '-c', 'n', package_path.to_s