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

ruby-changes:22696

From: akr <ko1@a...>
Date: Wed, 22 Feb 2012 20:44:36 +0900 (JST)
Subject: [ruby-changes:22696] akr:r34745 (trunk): * ext/curses/extconf.rb: try to distinguish curses_version is a

akr	2012-02-22 20:44:26 +0900 (Wed, 22 Feb 2012)

  New Revision: 34745

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

  Log:
    * ext/curses/extconf.rb: try to distinguish curses_version is a
      function or variable.

  Modified files:
    trunk/ChangeLog
    trunk/ext/curses/curses.c
    trunk/ext/curses/extconf.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34744)
+++ ChangeLog	(revision 34745)
@@ -1,3 +1,10 @@
+Wed Feb 22 20:42:28 2012  Tanaka Akira  <akr@f...>
+
+	* ext/curses/extconf.rb: try to distinguish curses_version is a
+	  function or variable.
+
+	* ext/curses/curses.c (Init_curses): refine Curses::VERSION.
+
 Wed Feb 22 19:47:03 2012  Tanaka Akira  <akr@f...>
 
 	* ext/curses/extconf.rb: show the chosen header and library.
Index: ext/curses/curses.c
===================================================================
--- ext/curses/curses.c	(revision 34744)
+++ ext/curses/curses.c	(revision 34745)
@@ -2768,8 +2768,14 @@
     rb_define_module_function(mCurses, "def_prog_mode", curses_def_prog_mode, 0);
     rb_define_module_function(mCurses, "reset_prog_mode", curses_reset_prog_mode, 0);
 
-#ifdef NCURSES_VERSION
+#ifdef HAVE_FUNC_CURSES_VERSION
     rb_define_const(mCurses, "VERSION", rb_str_new2(curses_version()));
+#elif HAVE_VAR_CURSES_VERSION
+    {
+        /* SVR4 curses has an undocumented and undeclared variable, curses_version. */
+        RUBY_EXTERN char *curses_version;
+        rb_define_const(mCurses, "VERSION", rb_sprintf("curses (%s)", curses_version));
+    }
 #else
     rb_define_const(mCurses, "VERSION", rb_str_new2("unknown"));
 #endif
Index: ext/curses/extconf.rb
===================================================================
--- ext/curses/extconf.rb	(revision 34744)
+++ ext/curses/extconf.rb	(revision 34745)
@@ -72,5 +72,44 @@
   have_var("TABSIZE", curses)
   have_var("COLORS", curses)
   have_var("COLOR_PAIRS", curses)
+
+  # SVR4 curses has a (undocumented) variable char *curses_version.
+  # ncurses and PDcurses has a function char *curses_version().
+  # Note that the original BSD curses doesn't provide version information.
+
+  prolog = cpp_include(curses)
+  if checking_for(checking_message('function curses_version', curses)) {
+      try_run(<<-"End")
+        #{prolog}
+        int main(int argc, char *argv[])
+        {
+            curses_version();
+            return EXIT_SUCCESS;
+        }
+      End
+    }
+    $defs << '-DHAVE_FUNC_CURSES_VERSION'
+  end
+
+  if checking_for(checking_message('variable curses_version', curses)) {
+      try_run(<<-"End")
+        #{prolog}
+        extern char *curses_version;
+        int main(int argc, char *argv[])
+        {
+            int i = 0;
+            for (i = 0; i < 100; i++) {
+                if (curses_version[i] == 0)
+                    return 0 < i ? EXIT_SUCCESS : EXIT_FAILURE;
+                if (curses_version[i] & 0x80)
+                    return EXIT_FAILURE;
+            }
+            return EXIT_FAILURE;
+        }
+      End
+    }
+    $defs << '-DHAVE_VAR_CURSES_VERSION'
+  end
+
   create_makefile("curses")
 end

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

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