slackbuilder/rakelib/hhvm.rake

105 lines
3.4 KiB
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
require 'pathname'
namespace :hhvm do
def filter_set_hhvm_third_party_source_args(tokens)
args = tokens[0]
allowed_arguments = tokens[1..].each_slice(2)
.filter do |key, _value|
!key.end_with?('_URL') && !key.end_with?('_HASH')
end
allowed_arguments
.flatten
.prepend(" #{args}")
.join("\n ")
end
def split_set_hhvm_third_party_source_args(section_content)
section_content
.split("\n")
.map do |line|
hash_index = line.index '#'
line = line[...hash_index] unless hash_index.nil?
line.strip
end
end
def rewrite_set_hhvm_third_party_source_args(contents)
set_hhvm_start = contents.index 'SET_HHVM_THIRD_PARTY_SOURCE_ARGS('
return nil if set_hhvm_start.nil?
section_contents = contents[set_hhvm_start + 'SET_HHVM_THIRD_PARTY_SOURCE_ARGS('.length..]
set_hhvm_end = section_contents.index ')'
lines = split_set_hhvm_third_party_source_args section_contents[...set_hhvm_end]
new_cmake_section = filter_set_hhvm_third_party_source_args lines.reject(&:blank?).join(' ').split
contents[...set_hhvm_start] +
"SET_HHVM_THIRD_PARTY_SOURCE_ARGS(\n#{new_cmake_section}\n)\n" +
section_contents[set_hhvm_end..]
end
desc 'Generates diffs with removed download URLs'
task :bundled_dependencies, [:version] do |_, arguments|
run_on_source arguments[:version] do |third_party|
c_make_lists = third_party + 'CMakeLists.txt'
next unless c_make_lists.exist?
contents = c_make_lists.read
rewritten_cmake = rewrite_set_hhvm_third_party_source_args contents
next if rewritten_cmake.nil?
puts Open3.capture2('diff', '-Nur', c_make_lists.to_path, '-', stdin_data: rewritten_cmake).first
end
end
desc 'Generated SlackBuild code to prepare bundled dependencies'
task :bundled_code, [:version] do |_, arguments|
run_on_source arguments[:version] do |third_party|
c_make_lists = third_party + 'CMakeLists.txt'
next unless c_make_lists.exist?
contents = c_make_lists.read
set_hhvm_start = contents.index 'SET_HHVM_THIRD_PARTY_SOURCE_ARGS('
next if set_hhvm_start.nil?
set_hhvm_end = contents.index ')', set_hhvm_start
set_hhvm_start += 'SET_HHVM_THIRD_PARTY_SOURCE_ARGS('.length
set_hhvm_end -= 1
contents = contents[set_hhvm_start..set_hhvm_end].split[1..].map(&:strip)
src = Pathname.new('third-party') +
third_party.basename +
"bundled_#{third_party.basename}-prefix" + 'src'
bundled = src + "bundled_#{third_party.basename}"
archive_name = contents[1][contents[1].rindex('/') + 1..-2]
puts "mkdir -p #{bundled}"
puts "install -m 0644 -D $CWD/#{archive_name} #{src + archive_name}"
puts "tar -zxvf $CWD/#{archive_name} -C #{bundled}"
puts
end
end
end
private
def run_on_source(version, &block)
package = Package.new 'development/hhvm',
version: version,
homepage: 'https://hhvm.com/',
requires: %w[tbb glog libdwarf libmemcached dobule-conversion]
repository = SlackBuilder.clone 'https://github.com/facebook/hhvm.git', package, 'HHVM-'
(repository + 'third-party').each_child do |third_party|
block.call third_party
end
end