diff --git a/Rakefile b/Rakefile index 08dcbf48..1a288a84 100644 --- a/Rakefile +++ b/Rakefile @@ -8,7 +8,7 @@ task default: %i[compile rubocop spec] desc 'Compile all the extensions' task :compile do - sh 'rake', '-C', 'ext/sass', 'clobber', 'install' + sh 'rake', '-C', 'ext/sass', 'clobber', 'install', 'embedded_sass_pb.rb' if ENV.key?('ext_platform') && ENV['ext_platform'] != 'ruby' host_cpu, host_os = ENV['ext_platform'].split('-', 2) diff --git a/exe/sass b/exe/sass index afba0b84..3a0111d2 100755 --- a/exe/sass +++ b/exe/sass @@ -1,7 +1,7 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require_relative '../ext/sass/cli' +require 'sass/cli' module Sass # The `sass` command line interface diff --git a/ext/sass/Rakefile b/ext/sass/Rakefile index 772ed32d..38f08be9 100644 --- a/ext/sass/Rakefile +++ b/ext/sass/Rakefile @@ -1,5 +1,9 @@ # frozen_string_literal: true +dest = File.absolute_path('sass', ENV.fetch('RUBYARCHDIR', File.absolute_path('../../lib', __dir__))) +FileUtils.mkdir_p(dest) +Dir.chdir(dest) + require 'rake/clean' require_relative '../../lib/sass/elf' @@ -8,9 +12,7 @@ ELF = Sass.const_get(:ELF) task default: %i[install clean] -task install: %w[cli.rb] do - Rake::Task['embedded_sass_pb.rb'].invoke unless File.exist?('embedded_sass_pb.rb') -end +task install: %w[cli.rb] CLEAN.include %w[ protoc.exe @@ -57,6 +59,11 @@ rescue StandardError end file 'node_modules/sass' do + cp File.absolute_path('package.json', __dir__), './' + + # TODO: remove after https://github.com/sass/dart-sass/pull/2413 + cp File.absolute_path("sass-#{SassConfig.dart_sass_version}.tgz", __dir__), './' + sh 'npm', 'install' rescue StandardError begin @@ -135,7 +142,7 @@ file 'cli.rb' => %w[dart-sass] do |t| File.write(t.name, <<~CLI_RB) # frozen_string_literal: true - require_relative '../../lib/sass/elf' + require 'sass/elf' module Sass module CLI @@ -487,7 +494,7 @@ module SassConfig end def dart_sass_version - package_json['dependencies']['sass'] + package_json(__dir__)['dependencies']['sass'] # TODO: remove after https://github.com/sass/dart-sass/pull/2413 .delete_prefix('file:sass-').delete_suffix('.tgz') end diff --git a/ext/sass/.gitignore b/lib/sass/.gitignore similarity index 100% rename from ext/sass/.gitignore rename to lib/sass/.gitignore diff --git a/lib/sass/compiler/connection.rb b/lib/sass/compiler/connection.rb index 81f37529..50c722a7 100644 --- a/lib/sass/compiler/connection.rb +++ b/lib/sass/compiler/connection.rb @@ -2,7 +2,7 @@ require 'open3' -require_relative '../../../ext/sass/cli' +require 'sass/cli' module Sass class Compiler diff --git a/lib/sass/embedded_protocol.rb b/lib/sass/embedded_protocol.rb index 1031afb0..0923d4a7 100644 --- a/lib/sass/embedded_protocol.rb +++ b/lib/sass/embedded_protocol.rb @@ -3,7 +3,7 @@ module Sass # @see https://github.com/sass/sass/blob/HEAD/spec/embedded-protocol.md module EmbeddedProtocol - require_relative '../../ext/sass/embedded_sass_pb' + require_relative 'embedded_sass_pb' end private_constant :EmbeddedProtocol diff --git a/sass-embedded.gemspec b/sass-embedded.gemspec index 4097d8dd..8f740aff 100644 --- a/sass-embedded.gemspec +++ b/sass-embedded.gemspec @@ -21,19 +21,16 @@ Gem::Specification.new do |spec| spec.bindir = 'exe' spec.executables = ['sass'] - spec.files = Dir['exe/**/*', 'ext/**/*_pb.rb', 'lib/**/*.rb'] + ['LICENSE', 'README.md'] + spec.files = Dir['exe/**/*', 'lib/**/*.rb'] + ['LICENSE', 'README.md'] spec.platform = ENV.fetch('gem_platform', 'ruby') if spec.platform == Gem::Platform::RUBY spec.extensions = ['ext/sass/Rakefile'] - spec.files += Dir['ext/sass/sass-*.tgz'] # TODO: remove after https://github.com/sass/dart-sass/pull/2413 - spec.files += [ - 'ext/sass/Rakefile', - 'ext/sass/package.json' - ] + spec.files += Dir['ext/**/*'] + spec.files -= ['lib/sass/cli.rb'] spec.add_dependency 'rake', '>= 13' else - spec.files += Dir['ext/sass/dart-sass/**/*'] + ['ext/sass/cli.rb'] + spec.files += Dir['lib/sass/dart-sass/**/*'] end spec.required_ruby_version = if spec.platform == Gem::Platform::RUBY || spec.platform.os != 'linux'