summaryrefslogtreecommitdiff
path: root/rakelib/hhvm.rake
blob: cb6fc16b7d24dcdbd5ff6154f23f699cee37eeb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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

namespace :hhvm do
  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
      set_hhvm_start = contents.index 'SET_HHVM_THIRD_PARTY_SOURCE_ARGS('
      next if set_hhvm_start.nil?

      line = contents[..set_hhvm_start].count "\n"
      in_lines = contents.lines
      4.times { in_lines.delete_at(line + 2) }

      puts Open3.capture2('diff', '-Nur', c_make_lists.to_path, '-', stdin_data: in_lines.join).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