diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dmd_tools.rb | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/dmd_tools.rb b/lib/dmd_tools.rb new file mode 100644 index 0000000..124fbaa --- /dev/null +++ b/lib/dmd_tools.rb @@ -0,0 +1,83 @@ +# 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 '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 = 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(hosted_sources("/d-tools/dub-#{dub_version}.tar.gz"), checksum[:dub]), + Download.new(hosted_sources("/d-tools/tools-#{package.version}.tar.gz"), checksum[:tools]), + Download.new(hosted_sources("/d-tools/D-Scanner-#{dscanner_version}.tar.xz"), checksum[:dscanner]), + Download.new(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] = 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] = download_and_deploy uri, "development/d-tools/dub-#{dub_version}.tar.gz" + + checksum[:dscanner] = clone 'https://github.com/dlang-community/D-Scanner.git', + "development/d-tools/D-Scanner-#{dscanner_version}.tar.xz" + checksum[:dcd] = 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 |
