ruby-changes:21688
From: nobu <ko1@a...>
Date: Sun, 13 Nov 2011 23:46:14 +0900 (JST)
Subject: [ruby-changes:21688] nobu:r33737 (trunk): * lib/mkmf.rb (checking_for): should not modify the result.
nobu 2011-11-13 23:46:01 +0900 (Sun, 13 Nov 2011) New Revision: 33737 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33737 Log: * lib/mkmf.rb (checking_for): should not modify the result. * lib/mkmf.rb (have_struct_member): accept compiler opttions. * lib/mkmf.rb (convertible_int): add restricted support of struct member, and TYPEOF_ macro. Modified files: trunk/ChangeLog trunk/README.EXT trunk/lib/mkmf.rb Index: README.EXT =================================================================== --- README.EXT (revision 33736) +++ README.EXT (revision 33737) @@ -750,9 +750,23 @@ at the top of the file. You can use the functions below to check various conditions. - have_library(lib, func): check whether library containing function exists. - have_func(func, header): check whether function exists - have_header(header): check whether header file exists + have_macro(macro[, headers[, opt]]): check whether macro is defined + have_library(lib[, func[, headers[, opt]]]): check whether library containing function exists + find_library(lib[, func, *paths]): find library from paths + have_func(func[, headers[, opt]): check whether function exists + have_var(var[, headers[, opt]]): check whether variable exists + have_header(header[, preheaders[, opt]]): check whether header file exists + find_header(header, *paths): find header from paths + have_framework(fw): check whether framework exists (for MacOS X) + have_struct_member(type, member[, headers]): check whether struct has member + have_type(type[, headers[, opt]]): check whether type exists + find_type(type, opt, *headers): check whether type exists in headers + have_const(const[, headers[, opt]]): check whether constant is defined + check_sizeof(type[, headers[, opts]]): check size of type + check_signedness(type[, headers[, opts]]): check signedness of type + convertible_int(type[, headers[, opts]]): find convertible integer type + find_executable(bin[, path]): find excutable file path + create_header(header): generate configured header create_makefile(target): generate Makefile The value of the variables below will affect the Makefile. @@ -1379,12 +1393,12 @@ These functions are available in extconf.rb: - have_macro(macro, headers) + have_macro(macro, headers, opt) Checks whether macro is defined with header. Returns true if the macro is defined. - have_library(lib, func) + have_library(lib, func, opt) Checks whether the library exists, containing the specified function. Returns true if the library exists. @@ -1394,19 +1408,23 @@ Checks whether a library which contains the specified function exists in path. Returns true if the library exists. - have_func(func, header) + have_func(func, headers, opt) Checks whether func exists with header. Returns true if the function exists. To check functions in an additional library, you need to check that library first using have_library(). +The func shall be either mere function name or function name with +arguments. +Example: + have_func("LONG2NUM(0)") - have_var(var, header) + have_var(var, header, opt) Checks whether var exists with header. Returns true if the variable exists. To check variables in an additional library, you need to check that library first using have_library(). - have_header(header) + have_header(header, preheaders, opt) Checks whether header exists. Returns true if the header file exists. @@ -1415,12 +1433,12 @@ Checks whether header exists in path. Returns true if the header file exists. - have_struct_member(type, member, header) + have_struct_member(type, member, headers, opt) Checks whether type has member with header. Returns true if the type is defined and has the member. - have_type(type, header, opt) + have_type(type, headers, opt) Checks whether type is defined with header. Returns true if the type is defined. Index: ChangeLog =================================================================== --- ChangeLog (revision 33736) +++ ChangeLog (revision 33737) @@ -1,3 +1,12 @@ +Sun Nov 13 23:45:57 2011 Nobuyoshi Nakada <nobu@r...> + + * lib/mkmf.rb (checking_for): should not modify the result. + + * lib/mkmf.rb (have_struct_member): accept compiler opttions. + + * lib/mkmf.rb (convertible_int): add restricted support of struct + member, and TYPEOF_ macro. + Sun Nov 13 23:21:24 2011 Tanaka Akira <akr@f...> * ext/gdbm/gdbm.c (fgdbm_reorganize): set close-on-exec flag after Index: lib/mkmf.rb =================================================================== --- lib/mkmf.rb (revision 33736) +++ lib/mkmf.rb (revision 33737) @@ -811,7 +811,7 @@ a = r = nil Logging::postpone do r = yield - a = (fmt ? fmt % r : r ? "yes" : "no") << "\n" + a = (fmt ? "#{fmt % r}" : r ? "yes" : "no") << "\n" "#{f}#{m}-------------------- #{a}\n" end message(a) @@ -1020,9 +1020,9 @@ # # HAVE_ST_BAR is also defined for backward compatibility. # -def have_struct_member(type, member, headers = nil, &b) +def have_struct_member(type, member, headers = nil, opt = "", &b) checking_for checking_message("#{type}.#{member}", headers) do - if try_compile(<<"SRC", &b) + if try_compile(<<"SRC", opt, &b) #{cpp_include(headers)} /*top*/ #{MAIN_DOES_NOTHING} @@ -1237,17 +1237,26 @@ type else typedef, member, prelude = typedef_expr(type, headers, &b) - next unless signed = try_signedness(typedef, member, [prelude]) - u = "unsigned " if signed > 0 - prelude << "extern rbcv_typedef_ foo();" - compat = UNIVERSAL_INTS.find {|t| - try_compile([prelude, "extern #{u}#{t} foo();"].join("\n"), opts, :werror=>true, &b) - } + if member + prelude << "static rbcv_typedef_ rbcv_var;" + compat = UNIVERSAL_INTS.find {|t| + try_static_assert("sizeof(rbcv_var.#{member}) == sizeof(#{t})", [prelude], opts, &b) + } + else + next unless signed = try_signedness(typedef, member, [prelude]) + u = "unsigned " if signed > 0 + prelude << "extern rbcv_typedef_ foo();" + compat = UNIVERSAL_INTS.find {|t| + try_compile([prelude, "extern #{u}#{t} foo();"].join("\n"), opts, :werror=>true, &b) + } + end if compat macname ||= type.sub(/_(?=t\z)/, '').tr_cpp conv = (compat == "long long" ? "LL" : compat.upcase) compat = "#{u}#{compat}" - $defs.push(format("-DTYPEOF_%s=%s", type.tr_cpp, compat.quote)) + typename = type.tr_cpp + $defs.push(format("-DSIZEOF_%s=SIZEOF_%s", typename, compat.tr_cpp)) + $defs.push(format("-DTYPEOF_%s=%s", typename, compat.quote)) $defs.push(format("-DPRI_%s_PREFIX=PRI_%s_PREFIX", macname, conv)) conv = (u ? "U" : "") + conv $defs.push(format("-D%s2NUM=%s2NUM", macname, conv)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/