Module: Tebako::Packager::PatchHelpers

Defined in:
lib/tebako/packager/patch_helpers.rb

Overview

Ruby patching helpers (pass2)

Class Method Summary collapse

Class Method Details

.get_prefix_linux(package) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/tebako/packager/patch_helpers.rb', line 55

def get_prefix_linux(package)
  out, st = Open3.capture2("pkg-config --variable=libdir #{package}")
  unless st.exitstatus.zero?
    raise Tebako::Error,
          "pkg-config --variable=libdir #{package} failed with code #{st.exitstatus}"
  end

  out
end

.get_prefix_macos(package) ⇒ Object

Raises:



48
49
50
51
52
53
# File 'lib/tebako/packager/patch_helpers.rb', line 48

def get_prefix_macos(package)
  out, st = Open3.capture2("brew --prefix #{package}")
  raise Tebako::Error, "brew --prefix #{package} failed with code #{st.exitstatus}" unless st.exitstatus.zero?

  out
end

.patch_c_file_post(pattern) ⇒ Object



71
72
73
74
75
# File 'lib/tebako/packager/patch_helpers.rb', line 71

def patch_c_file_post(pattern)
  {
    pattern => "#{pattern}\n\n#{PatchLiterals::C_FILE_SUBST}"
  }
end

.patch_c_file_pre(pattern) ⇒ Object



65
66
67
68
69
# File 'lib/tebako/packager/patch_helpers.rb', line 65

def patch_c_file_pre(pattern)
  {
    pattern => "#{PatchLiterals::C_FILE_SUBST}\n#{pattern}"
  }
end

.patch_file(fname, mapping) ⇒ Object

Raises:



37
38
39
40
41
42
43
44
45
46
# File 'lib/tebako/packager/patch_helpers.rb', line 37

def patch_file(fname, mapping)
  raise Tebako::Error, "Could not patch #{fname} because it does not exist." unless File.exist?(fname)

  puts "   ... patching #{fname}"
  restore_and_save(fname)
  contents = File.read(fname)

  mapping.each { |pattern, subst| contents.sub!(pattern, subst) }
  File.open(fname, "w") { |file| file << contents }
end

.recreate(dirname) ⇒ Object



77
78
79
80
# File 'lib/tebako/packager/patch_helpers.rb', line 77

def recreate(dirname)
  FileUtils.rm_rf(dirname, noop: nil, verbose: nil, secure: true)
  FileUtils.mkdir(dirname)
end

.restore_and_save(fname, strict: true) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/tebako/packager/patch_helpers.rb', line 82

def restore_and_save(fname, strict: true)
  unless File.exist?(fname)
    return unless strict

    raise Tebako::Error, "Could not save #{fname} because it does not exist."
  end

  old_fname = "#{fname}.old"
  if File.exist?(old_fname)
    FileUtils.rm_f(fname)
    File.rename(old_fname, fname)
  end
  FileUtils.cp(fname, old_fname)
end

.restore_and_save_files(files, ruby_source_dir, strict: true) ⇒ Object



97
98
99
100
101
# File 'lib/tebako/packager/patch_helpers.rb', line 97

def restore_and_save_files(files, ruby_source_dir, strict: true)
  files.each do |fname|
    restore_and_save("#{ruby_source_dir}/#{fname}", strict: strict)
  end
end

.yaml_reference(ruby_ver) ⇒ Object



103
104
105
# File 'lib/tebako/packager/patch_helpers.rb', line 103

def yaml_reference(ruby_ver)
  ruby_ver.ruby32? ? "-l:libyaml.a" : ""
end