diff --git a/ext/libv8/compiler.rb b/ext/libv8/compiler.rb deleted file mode 100644 index 086717c..0000000 --- a/ext/libv8/compiler.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'rbconfig' -require File.expand_path '../compiler/generic_compiler', __FILE__ -require File.expand_path '../compiler/gcc', __FILE__ -require File.expand_path '../compiler/clang', __FILE__ -require File.expand_path '../compiler/apple_llvm', __FILE__ - -module Libv8 - module Compiler - module_function - - def type_of(compiler) - case version_string_of(compiler) - when /^Apple LLVM\b/ then AppleLLVM - when /\bclang\b/i then Clang - when /^gcc/i then GCC - else GenericCompiler - end - end - - def version_string_of(compiler) - command_result = execute_command "env LC_ALL=C LANG=C #{compiler} -v 2>&1" - - unless command_result.status.success? - raise "Could not get version string of compiler #{compiler}" - end - - command_result.output - end - - def execute_command(command) - output = `#{command}` - status = $? - ExecutionResult.new output, status - end - - class ExecutionResult < Struct.new(:output, :status) - end - end -end diff --git a/ext/libv8/compiler/apple_llvm.rb b/ext/libv8/compiler/apple_llvm.rb deleted file mode 100644 index 2a39f7e..0000000 --- a/ext/libv8/compiler/apple_llvm.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Libv8 - module Compiler - class AppleLLVM < Clang - LLVM_VERSION_REGEXP = /Apple LLVM version (\d+\.\d+(\.\d+)*) \(/i - REQUIRED_VERSION = '4.3' - - def name - 'Apple LLVM' - end - - private - - def required_version - REQUIRED_VERSION - end - - def version_regexp - LLVM_VERSION_REGEXP - end - end - end -end diff --git a/ext/libv8/compiler/clang.rb b/ext/libv8/compiler/clang.rb deleted file mode 100644 index 43b6b10..0000000 --- a/ext/libv8/compiler/clang.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Libv8 - module Compiler - class Clang < GenericCompiler - CLANG_VERSION_REGEXP = /clang version (\d+\.\d+(\.\d+)*) \(/i - REQUIRED_VERSION = '3.1' - - def name - 'clang' - end - - private - - def required_version - REQUIRED_VERSION - end - - def version_regexp - CLANG_VERSION_REGEXP - end - end - end -end diff --git a/ext/libv8/compiler/gcc.rb b/ext/libv8/compiler/gcc.rb deleted file mode 100644 index f7a74c0..0000000 --- a/ext/libv8/compiler/gcc.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Libv8 - module Compiler - class GCC < GenericCompiler - GCC_VERSION_REGEXP = /gcc version (\d+\.\d+(\.\d+)*)/i - REQUIRED_VERSION = '4.7' - - def name - 'GCC' - end - - private - - def required_version - REQUIRED_VERSION - end - - def version_regexp - GCC_VERSION_REGEXP - end - end - end -end diff --git a/ext/libv8/compiler/generic_compiler.rb b/ext/libv8/compiler/generic_compiler.rb deleted file mode 100644 index 12e8ffa..0000000 --- a/ext/libv8/compiler/generic_compiler.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Libv8 - module Compiler - class GenericCompiler - GENERIC_VERSION_REGEXP = /(\d+\.\d+(\.\d+)*)/ - GENERIC_TARGET_REGEXP = /Target: ([a-z0-9\-_.]*)/ - - def initialize(command) - @command = command - end - - def name - File.basename @command - end - - def to_s - @command - end - - def version - version_string =~ version_regexp - $1 - end - - def target - version_string =~ target_regexp - $1 - end - - def compatible? - return false unless required_version && !version.nil? - - (string_to_semver(version) <=> string_to_semver(required_version)) > -1 - end - - def call(*arguments) - Compiler::execute_command arguments.unshift(@command).join(' ') - end - - private - - def version_string - begin - Compiler::version_string_of @command - rescue StandardError - nil - end - end - - def version_regexp - GENERIC_VERSION_REGEXP - end - - def target_regexp - GENERIC_TARGET_REGEXP - end - - def required_version - nil - end - - def string_to_semver(version) - version.split('.').map(&:to_i) - end - end - end -end diff --git a/spec/compiler/apple_llvm_spec.rb b/spec/compiler/apple_llvm_spec.rb deleted file mode 100644 index 43fc796..0000000 --- a/spec/compiler/apple_llvm_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' -require 'compiler' - -module Libv8::Compiler - describe AppleLLVM do - subject { AppleLLVM.new 'c++' } - - describe '#name' do - it 'returns Apple LLVM' do - expect(subject.name).to eq 'Apple LLVM' - end - end - - describe '#version' do - it 'returns the version of the compiler' do - stub_as_available 'c++', :apple_llvm, '4.20' - expect(subject.version).to eq '4.20' - end - end - - describe '#compatible?' do - context 'when Apple LLVM\'s version is >= 4.3' do - it 'returns true' do - stub_as_available 'c++', :apple_llvm, '4.20' - expect(subject).to be_compatible - end - end - - context 'when Apple LLVM\'s version is < 4.3' do - it 'returns false' do - stub_as_available 'c++', :apple_llvm, '4.2' - expect(subject).to_not be_compatible - end - end - end - end -end diff --git a/spec/compiler/clang_spec.rb b/spec/compiler/clang_spec.rb deleted file mode 100644 index 1e3448f..0000000 --- a/spec/compiler/clang_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' -require 'compiler' - -module Libv8::Compiler - describe Clang do - subject { Clang.new 'c++' } - - describe '#name' do - it 'returns clang' do - expect(subject.name).to eq 'clang' - end - end - - describe '#version' do - it 'returns the version of the compiler' do - stub_as_available 'c++', :clang, '3.4.1' - expect(subject.version).to eq '3.4.1' - end - end - - describe '#compatible?' do - context 'when clang\'s version is >= 3.1' do - it 'returns true' do - stub_as_available 'c++', :clang, '3.4.1' - expect(subject).to be_compatible - end - end - - context 'when clang\'s version is < 3.1' do - it 'returns false' do - stub_as_available 'c++', :clang, '3.0.9' - expect(subject).to_not be_compatible - end - end - end - end -end diff --git a/spec/compiler/gcc_spec.rb b/spec/compiler/gcc_spec.rb deleted file mode 100644 index 8196564..0000000 --- a/spec/compiler/gcc_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' -require 'compiler' - -module Libv8::Compiler - describe GCC do - subject { GCC.new 'c++' } - - describe '#name' do - it 'returns GCC' do - expect(subject.name).to eq 'GCC' - end - end - - describe '#version' do - it 'returns the version of the compiler' do - stub_as_available 'c++', :gcc, '4.9.0' - expect(subject.version).to eq '4.9.0' - end - end - - describe '#compatible?' do - context 'when GCC\'s version is >= 4.8' do - it 'returns true' do - stub_as_available 'c++', :gcc, '4.9.0' - expect(subject).to be_compatible - end - end - - context 'when GCC\'s version is < 4.3' do - it 'returns false' do - stub_as_available 'c++', :gcc, '4.2.1-freebsd' - expect(subject).to_not be_compatible - end - end - end - end -end diff --git a/spec/compiler/generic_compiler_spec.rb b/spec/compiler/generic_compiler_spec.rb deleted file mode 100644 index 8a3e0fd..0000000 --- a/spec/compiler/generic_compiler_spec.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'spec_helper' -require 'compiler' - -module Libv8::Compiler - describe GenericCompiler do - subject { GenericCompiler.new 'c++' } - - describe '#name' do - it 'returns just the base name of the command' do - expect(GenericCompiler.new('/usr/sbin/c++').name).to eq 'c++' - end - end - - describe '#to_s' do - it 'should be the command used to call the compiler' do - expect(subject.to_s).to eq 'c++' - end - end - - describe '#version' do - it 'returns the version of the compiler' do - stub_as_available 'c++', :clang, '3.4.1' - expect(subject.version).to eq '3.4.1' - end - - it 'returns nil when determining the version fails' do - stub_as_unavailable 'c++' - expect(subject.version).to be_nil - end - end - - describe '#target' do - it 'returns the target of the compiler' do - stub_as_available 'c++', :clang, '3.4.1' - expect(subject.target).to eq 'x86_64-unknown-linux-gnu' - end - - it 'returns nil when determining the target fails' do - stub_as_unavailable 'c++' - expect(subject.target).to be_nil - end - end - - describe '#compatible?' do - it 'returns false' do - expect(GenericCompiler.new('c++')).to_not be_compatible - end - end - end -end diff --git a/spec/compiler_spec.rb b/spec/compiler_spec.rb deleted file mode 100644 index 3a39fe9..0000000 --- a/spec/compiler_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'spec_helper' -require 'compiler' - -module Libv8 - describe Compiler do - describe '::type_of' do - it 'recognises correctly GCC' do - stub_as_available 'c++', :gcc, '4.9.0' - expect(Compiler.type_of('c++').new('c++')).to be_a Compiler::GCC - - stub_as_available 'g++', :gcc, '4.2.1-freebsd' - expect(Compiler.type_of('g++').new('g++')).to be_a Compiler::GCC - end - - it 'recognises correctly Clang' do - stub_as_available 'c++', :clang, '3.4.1' - expect(Compiler.type_of('c++').new('c++')).to be_a Compiler::Clang - - stub_as_available 'freebsd-clang++', :clang, '3.3-freebsd' - expect(Compiler.type_of('freebsd-clang++').new('freebsd-clang++')).to be_a Compiler::Clang - end - - it 'recognises correctly Apple\'s LLVM' do - stub_as_available 'c++', :apple_llvm, '4.20' - expect(Compiler.type_of('c++').new('c++')).to be_a Compiler::AppleLLVM - end - end - - describe '::version_string_of' do - context 'when calling the compiler command succedes' do - it 'returns the version string of the compiler' do - stub_as_available 'c++', :clang, '3.4.1' - expect(Compiler.version_string_of('c++')).to eq version_output_of(:clang, '3.4.1') - end - end - - context 'when calling the compiler command fails' do - it 'raises an exception' do - stub_as_unavailable 'c++' - expect { Compiler.version_string_of('c++') }.to raise_exception(RuntimeError, /Could not get version string of compiler/) - end - end - end - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9dec079..a3ed125 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,4 +2,3 @@ $:.unshift File.expand_path '../../ext/libv8', __FILE__ $:.unshift File.expand_path '../../lib', __FILE__ require 'rspec' require 'libv8' -require File.expand_path '../support/compiler_helpers', __FILE__ diff --git a/spec/support/compiler_helpers.rb b/spec/support/compiler_helpers.rb deleted file mode 100644 index 29bc130..0000000 --- a/spec/support/compiler_helpers.rb +++ /dev/null @@ -1,47 +0,0 @@ -module CompilerHelpers - VERSION_OUTPUTS = { - :gcc => { - "4.2.1-freebsd" => %Q{Using built-in specs.\nTarget: i386-undermydesk-freebsd\nConfigured with: FreeBSD/i386 system compiler\nThread model: posix\ngcc version 4.2.1 20070831 patched [FreeBSD]\n}, - "4.9.0" => %Q{Using built-in specs.\nCOLLECT_GCC=c++\nCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper\nTarget: x86_64-unknown-linux-gnu\nConfigured with: /build/gcc-multilib/src/gcc-4.9-20140604/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --disable-cloog-version-check --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-multilib --disable-werror --enable-checking=release\nThread model: posix\ngcc version 4.9.0 20140604 (prerelease) (GCC)\n} - }, - :clang => { - "3.0.9" => %Q{clang version 3.0.9 (tags/RELEASE_34/dot1-final)\nTarget: x86_64-unknown-linux-gnu\nThread model: posix\nFound candidate GCC installation: /usr/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\nSelected GCC installation: /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\n}, - "3.3-freebsd" => %Q{FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610\nTarget: i386-unknown-freebsd9.2\nThread model: posix}, - "3.4.1" => %Q{clang version 3.4.1 (tags/RELEASE_34/dot1-final)\nTarget: x86_64-unknown-linux-gnu\nThread model: posix\nFound candidate GCC installation: /usr/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0\nFound candidate GCC installation: /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\nSelected GCC installation: /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0\n}, - }, - :apple_llvm => { - '4.20' => %Q{Configured with: --prefix=/Applications/Xcode.app/Contents/Developer//usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1\nApple LLVM version 4.20 (clang-503.0.38) (based on LLVM 3.4svn)\nTarget: x86_64-apple-darwin14.0.0\nThread model: posix\n}, - '4.2' => %Q{Configured with: --prefix=/Applications/Xcode.app/Contents/Developer//usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1\nApple LLVM version 4.2 (clang-503.0.38) (based on LLVM 3.4svn)\nTarget: x86_64-apple-darwin14.0.0\nThread model: posix\n} - } - } - - def version_output_of(name, version) - VERSION_OUTPUTS[name][version] - end - - def success_status - double :success? => true - end - - def failure_status - double :success? => false - end - - def stub_shell_command(command, output, status) - allow(Libv8::Compiler).to receive(:execute_command).with(command) do - double :output => output, :status => status - end - end - - def stub_as_available(command, name, version) - stub_shell_command "env LC_ALL=C LANG=C #{command} -v 2>&1", version_output_of(name, version), success_status - end - - def stub_as_unavailable(command) - stub_shell_command(/^env LC_ALL=C LANG=C #{Regexp.escape(command)}/, '', failure_status) - end -end - -RSpec.configure do |c| - c.include CompilerHelpers -end