spec/unit/software_spec.rb in omnibus-4.0.0.rc.1 vs spec/unit/software_spec.rb in omnibus-4.0.0.rc.2

- old
+ new

@@ -49,35 +49,48 @@ it "sets the defaults" do expect(subject.with_standard_compiler_flags).to eq( 'LDFLAGS' => '-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib', 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end it 'ovesrride LDFLAGS' do expect(subject.with_standard_compiler_flags('LDFLAGS' => 'foo')).to eq( 'LDFLAGS' => '-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib', 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end it 'ovesrride CFLAGS' do expect(subject.with_standard_compiler_flags('CFLAGS'=>'foo')).to eq( 'LDFLAGS' => '-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib', 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end + it 'ovesrride CXXFLAGS' do + expect(subject.with_standard_compiler_flags('CXXFLAGS'=>'foo')).to eq( + 'LDFLAGS' => '-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib', + 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', + 'LD_RUN_PATH' => '/opt/project/embedded/lib', + 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' + ) + end it 'presserve anything else' do expect(subject.with_standard_compiler_flags('numberwang'=>4)).to eq( 'numberwang' => 4, 'LDFLAGS' => '-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib', 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end end @@ -90,12 +103,14 @@ end end it 'sets the defaults' do expect(subject.with_standard_compiler_flags).to eq( + 'CC' => 'gcc -static-libgcc', 'LDFLAGS' => '-R/opt/project/embedded/lib -L/opt/project/embedded/lib -static-libgcc', 'CFLAGS' => '-I/opt/project/embedded/include', + "CXXFLAGS" => "-I/opt/project/embedded/include", 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'LD_OPTIONS' => '-R/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end @@ -106,10 +121,11 @@ it 'sets the defaults' do expect(subject.with_standard_compiler_flags).to eq( 'LDFLAGS' => '-L/opt/project/embedded/lib', 'CFLAGS' => '-I/opt/project/embedded/include', + "CXXFLAGS" => "-I/opt/project/embedded/include", 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end end @@ -122,116 +138,130 @@ end end it 'sets the defaults' do expect(subject.with_standard_compiler_flags).to eq( - 'CC' => 'xlc -q64', - 'CXX' => 'xlC -q64', - 'CFLAGS' => '-q64 -I/opt/project/embedded/include -O', + 'CC' => 'xlc_r -q64', + 'CXX' => 'xlC_r -q64', + 'CFLAGS' => '-q64 -I/opt/project/embedded/include -D_LARGE_FILES -O', + "CXXFLAGS" => "-q64 -I/opt/project/embedded/include -D_LARGE_FILES -O", 'LDFLAGS' => '-q64 -L/opt/project/embedded/lib -Wl,-blibpath:/opt/project/embedded/lib:/usr/lib:/lib', 'LD' => 'ld -b64', 'OBJECT_MODE' => '64', 'ARFLAGS' => '-X64 cru', 'LD_RUN_PATH' => '/opt/project/embedded/lib', 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' ) end end - context 'on aix with gcc' do + context 'on freebsd' do before do - # There's no AIX in Fauxhai :( - stub_ohai(platform: 'solaris2', version: '5.11') do |data| - data['platform'] = 'aix' - end + stub_ohai(platform: 'freebsd', version: '9.2') end it 'sets the defaults' do - expect(subject.with_standard_compiler_flags(nil, aix: { use_gcc: true })).to eq( - 'CC' => 'gcc -maix64', - 'CXX' => 'g++ -maix64', - 'CFLAGS' => '-maix64 -O -I/opt/project/embedded/include', - 'LDFLAGS' => '-L/opt/project/embedded/lib -Wl,-blibpath:/opt/project/embedded/lib:/usr/lib:/lib', - 'LD' => 'ld -b64', - 'OBJECT_MODE' => '64', - 'ARFLAGS' => '-X64 cru', - 'LD_RUN_PATH' => '/opt/project/embedded/lib', - 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig' + expect(subject.with_standard_compiler_flags).to eq( + 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', + 'LDFLAGS' => '-L/opt/project/embedded/lib', + 'LD_RUN_PATH' => '/opt/project/embedded/lib', + 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig', ) end + + context 'on freebsd' do + before do + stub_ohai(platform: 'freebsd', version: '10.0') + end + + it 'Clang as the default compiler' do + expect(subject.with_standard_compiler_flags).to eq( + 'CC' => 'clang', + 'CXX' => 'clang++', + 'CFLAGS' => '-I/opt/project/embedded/include', + 'CXXFLAGS' => '-I/opt/project/embedded/include', + 'LDFLAGS' => '-L/opt/project/embedded/lib', + 'LD_RUN_PATH' => '/opt/project/embedded/lib', + 'PKG_CONFIG_PATH' => '/opt/project/embedded/lib/pkgconfig', + ) + end + end end + end describe 'path helpers' do + before do stub_const('File::PATH_SEPARATOR', separator) stub_env('PATH', path) + allow(project).to receive(:install_dir).and_return(install_dir) end - context 'on *NIX' do + let(:prepended_path) do + ["#{install_dir}/bin", separator, "#{install_dir}/embedded/bin", separator, path].join + end + + context 'on *Nix' do let(:separator) { ':' } let(:path) { '/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin' } + let(:install_dir) { '/opt/project' } it 'prepends a path to PATH' do expect(subject.prepend_path('/foo/bar')).to eq( - '/foo/bar:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin' + ['/foo/bar', separator, path].join ) end it 'prepends the embedded bin to PATH' do expect(subject.with_embedded_path).to eq( - 'PATH' => '/opt/project/bin:/opt/project/embedded/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin' + 'PATH' => prepended_path ) end it 'with_embedded_path merges with a hash argument' do expect(subject.with_embedded_path('numberwang' => 4)).to eq( 'numberwang' => 4, - 'PATH' => '/opt/project/bin:/opt/project/embedded/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin' + 'PATH' => prepended_path ) end it 'prepends multiple paths to PATH' do expect(subject.prepend_path('/foo/bar', '/foo/baz')).to eq( - '/foo/bar:/foo/baz:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin' + ['/foo/bar', separator, '/foo/baz', separator, path].join ) end end context 'on Windows' do before do stub_ohai(platform: 'windows', version: '2012') - allow(project).to receive(:install_dir).and_return('c:/opt/project') - stub_env('Path', windows_path) end let(:separator) { ';' } let(:path) { 'c:/Ruby193/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' } - let(:windows_path) { 'c:/Ruby999/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' } + let(:install_dir) { 'c:/opt/project' } - it "prepends a path to PATH" do - expect(subject.prepend_path('c:/foo/bar')).to eq( - 'c:/foo/bar;c:/Ruby999/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' - ) - end + context '`Path` exists in the environment' do + before do + stub_env('Path', path) + allow(ENV).to receive(:keys).and_return(%w( Path PATH )) + end - it 'prepends the embedded bin to PATH' do - expect(subject.with_embedded_path).to eq( - 'Path' => 'c:/opt/project/bin;c:/opt/project/embedded/bin;c:/Ruby999/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' - ) + it 'returns a path key of `Path`' do + expect(subject.with_embedded_path).to eq( + 'Path' => prepended_path + ) + end end - it 'with_embedded_path merges with a hash argument' do - expect(subject.with_embedded_path('numberwang' => 4)).to eq( - 'numberwang' => 4, - 'Path' => 'c:/opt/project/bin;c:/opt/project/embedded/bin;c:/Ruby999/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' - ) - end - - it 'prepends multiple paths to PATH' do - expect(subject.prepend_path('c:/foo/bar', 'c:/foo/baz')).to eq( - 'c:/foo/bar;c:/foo/baz;c:/Ruby999/bin;c:/Windows/system32;c:/Windows;c:/Windows/System32/Wbem' - ) + context '`Path` does not exist in the environment' do + it 'returns a path key of `PATH`' do + expect(subject.with_embedded_path).to eq( + 'PATH' => prepended_path + ) + end end end end describe '#ohai' do