summaryrefslogtreecommitdiff
path: root/rakelib/dmd_tools.rake
blob: d0d54a3fd5eee47a1c3417d0f8575244d6c8a95d (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 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 'rake'
require_relative '../lib/download'

module SlackBuilder
  module DmdTools
    extend Rake::FileUtilsExt

    def self.update_dmd(version)
      tarball_name = "dmd.#{version}.linux.tar.xz"

      uri = URI "http://downloads.dlang.org/releases/2.x/#{version}/#{tarball_name}"
      checksum = SlackBuilder.download(uri, "slackbuilds/development/dmd/#{tarball_name}")

      package = Package.new 'development/dmd', version: version,
        homepage: 'https://dlang.org'

      write_info package, downloads: [Download.new(uri.to_s, checksum.hexdigest)]

      update_slackbuild_version 'development/dmd', package.version
      commit 'development/dmd', version
    end

    def self.update_tools(version, dub_version, dscanner_version, dcd_version)
      checksum = collect_checksums(version, dub_version, dscanner_version, dcd_version)

      package = Package.new 'development/d-tools',
        version: version,
        homepage: 'https://dlang.org',
        requires: ['dmd']

      write_tools_info package, dub_version, dscanner_version, dcd_version, checksum
      update_tools_versions dub_version, dscanner_version, dcd_version

      update_slackbuild_version 'development/d-tools', package.version
      commit 'development/d-tools', package.version
    end

    private_class_method def self.write_tools_info(package, dub_version, dscanner_version, dcd_version, checksum)
      write_info package,
        downloads: [
          Download.new(SlackBuilder.hosted_sources("/d-tools/dub-#{dub_version}.tar.gz"), checksum[:dub]),
          Download.new(SlackBuilder.hosted_sources("/d-tools/tools-#{package.version}.tar.gz"), checksum[:tools]),
          Download.new(
            SlackBuilder.hosted_sources("/d-tools/D-Scanner-#{dscanner_version}.tar.xz"), checksum[:dscanner]
          ),
          Download.new(SlackBuilder.hosted_sources("/d-tools/DCD-#{dcd_version}.tar.xz"), checksum[:dcd])
        ]
    end

    private_class_method def self.collect_checksums(version, dub_version, dscanner_version, dcd_version)
      checksum = {}

      uri = URI "https://codeload.github.com/dlang/tools/tar.gz/v#{version}"
      checksum[:tools] = SlackBuilder.download_and_deploy uri, "development/d-tools/tools-#{version}.tar.gz"

      uri = URI "https://codeload.github.com/dlang/dub/tar.gz/v#{dub_version}"
      checksum[:dub] = SlackBuilder.download_and_deploy uri, "development/d-tools/dub-#{dub_version}.tar.gz"

      checksum[:dscanner] = SlackBuilder.clone 'https://github.com/dlang-community/D-Scanner.git',
        "development/d-tools/D-Scanner-#{dscanner_version}.tar.xz"
      checksum[:dcd] = SlackBuilder.clone 'https://github.com/dlang-community/DCD.git',
        "development/d-tools/DCD-#{dcd_version}.tar.xz"

      checksum
    end

    private_class_method def self.update_tools_versions(dub_version, dscanner_version, dcd_version)
      slackbuild_filename = 'slackbuilds/development/d-tools/d-tools.SlackBuild'
      slackbuild_contents = File.read(slackbuild_filename)
        .gsub(/^DUB_VERSION=\${DUB_VERSION:-.+/,
          "DUB_VERSION=${DUB_VERSION:-#{dub_version}}")
        .gsub(/^DSCANNER_VERSION=\${DSCANNER_VERSION:-.+/,
          "DSCANNER_VERSION=${DSCANNER_VERSION:-#{dscanner_version}}")
        .gsub(/^DCD_VERSION=\${DCD_VERSION:-.+/,
          "DCD_VERSION=${DCD_VERSION:-#{dcd_version}}")
      File.open(slackbuild_filename, 'w') { |file| file.puts slackbuild_contents }
    end
  end
end