[前][次][番号順一覧][スレッド一覧]

ruby-changes:26855

From: nobu <ko1@a...>
Date: Wed, 23 Jan 2013 16:18:11 +0900 (JST)
Subject: [ruby-changes:26855] nobu:r38907 (trunk): mkmf.rb: larger constants

nobu	2013-01-23 16:18:01 +0900 (Wed, 23 Jan 2013)

  New Revision: 38907

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38907

  Log:
    mkmf.rb: larger constants
    
    * lib/mkmf.rb (MakeMakefile#try_constant): fix for larger constants.

  Modified files:
    trunk/ChangeLog
    trunk/lib/mkmf.rb
    trunk/test/mkmf/test_constant.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 38906)
+++ ChangeLog	(revision 38907)
@@ -1,4 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
-Wed Jan 23 16:16:14 2013  Nobuyoshi Nakada  <nobu@r...>
+Wed Jan 23 16:17:59 2013  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/mkmf.rb (MakeMakefile#try_constant): fix for larger constants.
 
 	* test/mkmf/test_constant.rb: tests for try_constant.
 	  TODO: define check_constant and use it.
Index: lib/mkmf.rb
===================================================================
--- lib/mkmf.rb	(revision 38906)
+++ lib/mkmf.rb	(revision 38907)
@@ -646,8 +646,17 @@ SRC https://github.com/ruby/ruby/blob/trunk/lib/mkmf.rb#L646
       src = %{#{includes}
 #include <stdio.h>
 /*top*/
-int conftest_const = (int)(#{const});
-int main() {printf("%d\\n", conftest_const); return 0;}
+typedef
+#ifdef PRI_LL_PREFIX
+#define PRI_CONFTEST_PREFIX PRI_LL_PREFIX
+LONG_LONG
+#else
+#define PRI_CONFTEST_PREFIX "l"
+long
+#endif
+conftest_type;
+conftest_type conftest_const = (conftest_type)(#{const});
+int main() {printf("%"PRI_CONFTEST_PREFIX"d\\n", conftest_const); return 0;}
 }
       begin
         if try_link0(src, opt, &b)
Index: test/mkmf/test_constant.rb
===================================================================
--- test/mkmf/test_constant.rb	(revision 38906)
+++ test/mkmf/test_constant.rb	(revision 38907)
@@ -14,5 +14,20 @@ class TestMkmf https://github.com/ruby/ruby/blob/trunk/test/mkmf/test_constant.rb#L14
       assert_equal(config_value("SIZEOF_VOIDP").to_i, mkmf {try_constant("sizeof(void*)")}, MKMFLOG)
       assert_equal(config_value("SIZEOF_VALUE").to_i, mkmf {try_constant("sizeof(Qnil)")}, MKMFLOG)
     end
+
+    def test_long
+      sizeof_int = config_value("SIZEOF_INT").to_i
+      sizeof_long = config_value("SIZEOF_LONG").to_i
+      if sizeof_long > sizeof_int
+        type = 'long'
+      else
+        sizeof_long_long = config_value("SIZEOF_LONG_LONG").to_i
+        return if !sizeof_long_long or sizeof_long_long <= sizeof_int
+        type = 'LONG_LONG'
+      end
+
+      decl = "#define CONFTEST_VALUE (unsigned #{type})(((unsigned #{type})1)<<(CHAR_BIT*sizeof(int)))"
+      assert_operator(mkmf {try_constant("CONFTEST_VALUE", [[decl]])}, :>, 0, MKMFLOG)
+    end
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]