1require_relative 'base'
2require 'tempfile'
3
4class TestMkmf
5  class TestHaveLibrary < TestMkmf
6    LIBRARY_NAME = 'mkmftest'
7    HEADER_NAME = "#{LIBRARY_NAME}.h"
8    FUNC_NAME = 'ruby_mkmftest_foo'
9    ARPREFIX = config_string('LIBRUBY_A') {|lib| lib[/\A\w+/]}
10
11    def create_library(libname = LIBRARY_NAME)
12      lib = "#{ARPREFIX}#{libname}.#{$LIBEXT}"
13      open(HEADER_NAME, "w") do |hdr|
14        hdr.puts "void #{FUNC_NAME}(void);"
15        hdr.puts "void #{FUNC_NAME}_fake(void);"
16      end
17      create_tmpsrc("#include \"#{HEADER_NAME}\"\n""void #{FUNC_NAME}(void) {}")
18      xsystem(cc_command)
19      xsystem("#{CONFIG['AR']} #{config_string('ARFLAGS') || 'cru '}#{lib} conftest.#{$OBJEXT}")
20      File.unlink("conftest.#{$OBJEXT}")
21      config_string('RANLIB') do |ranlib|
22        xsystem("#{ranlib} #{lib}")
23      end
24    end
25
26    def assert_have_library(*args)
27      assert_equal(true, have_library(LIBRARY_NAME, *args), MKMFLOG)
28    end
29
30    def assert_not_have_library(*args)
31      assert_equal(false, have_library(LIBRARY_NAME, *args), MKMFLOG)
32    end
33
34    def test_have_library
35      create_library
36      assert_have_library
37    end
38
39    def test_have_library_with_name
40      create_library
41      assert_have_library(FUNC_NAME, HEADER_NAME)
42    end
43
44    def test_not_have_library
45      assert_not_have_library
46    end
47
48    def test_not_have_library_with_name
49      create_library
50      assert_not_have_library("#{FUNC_NAME}_fake", HEADER_NAME)
51    end
52  end
53end
54