diff options
Diffstat (limited to 'Rakefile')
| -rw-r--r-- | Rakefile | 108 |
1 files changed, 87 insertions, 21 deletions
@@ -4,40 +4,106 @@ # frozen_string_literal: true +require 'pathname' require 'digest/md5' require 'net/http' -require 'open3' require_relative 'config/config' require_relative 'lib/package' require_relative 'lib/download' -task :dmd, [:version] do |_, arguments| - raise 'Version is not specified.' unless arguments.key? :version +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 - dub_version = '1.33.0' - dscanner_version = '0.15.2' - dcd_version = '0.15.2' + allowed_arguments + .flatten + .prepend(" #{args}") + .join("\n ") + end - SlackBuilder::DmdTools.update_dmd arguments[:version] - SlackBuilder::DmdTools.update_tools arguments[:version], dub_version, dscanner_version, dcd_version -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? -task :hhvm, [:version] do |_, arguments| - raise 'Version is not specified.' unless arguments.key? :version + puts Open3.capture2('diff', '-Nur', c_make_lists.to_path, '-', stdin_data: rewritten_cmake).first + end + end - checksum = {} - checksum[:hhvm] = SlackBuilder.clone 'https://github.com/facebook/hhvm.git', - "development/hhvm/hhvm-#{arguments[:version]}.tar.xz", 'HHVM-' + 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: arguments[:version], + 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-' - write_info package, - downloads: [ - Download.new(SlackBuilder.hosted_sources("/hhvm/hhvm-#{package.version}.tar.xz"), checksum[:hhvm], is64: true) - ] - - update_slackbuild_version 'development/hhvm', package.version + (repository + 'third-party').each_child do |third_party| + block.call third_party + end end |
