[#19002] RUBY_* constants

e$B@>;3OB9-$G$9!#e(B

http://rubyforge.org/tracker/index.php?func=detail&aid=19002&group_id=426&atid=22040
e$B$N%Q%C%A$G$9!#e(B

r14469e$B$r85$K$7$F$$$^$9!#e(B
error.ce$B$NJQ99$Ge(B[ruby-dev:34826]e$B$bD>$j$^$9!#e(B

e$B%P%C%/%]!<%H$N%Q%C%A$r:n@.$7$F$$$F5$$K$J$C$?$N$G$9$,!“e(B
trunke$B$NJ}$Ge(Bconst int ruby_patchlevele$B$O$”$k$N$Ke(B
const int ruby_revisione$B$,$J$$$N$O$$$$$N$G$7$g$&$+e(B?

Index: error.c

— error.c (revision 16676)
+++ error.c (working copy)
@@ -29,8 +29,7 @@
#define EXIT_SUCCESS 0
#endif

-extern const char ruby_version[], ruby_release_date[], ruby_platform[];
-extern const int ruby_patchlevel;
+extern const char ruby_description[];

int ruby_nerrs;

@@ -209,8 +208,7 @@
va_init_list(args, fmt);
vfprintf(out, fmt, args);
va_end(args);

  • fprintf(out, “\nruby %s (%s patchlevel %d) [%s]\n\n”,
  • ruby_version, ruby_release_date, ruby_patchlevel, ruby_platform);
  • fprintf(out, “\n%s\n\n”, ruby_description);
    }
    abort();
    }
    Index: configure.in
    ===================================================================
    — configure.in (revision 16676)
    +++ configure.in (working copy)
    @@ -290,6 +290,41 @@
    AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
    fi

+AC_CACHE_CHECK(stringization, rb_cv_stringization, [

  • rb_cv_stringization=no
  • for string in “#expr” ‘“expr”’; do
  • AC_COMPILE_IFELSE([
  •  AC_LANG_BOOL_COMPILE_TRY([
    

+#define STRINGIZE0(expr) $string
+#define STRINGIZE(expr) STRINGIZE0(expr)
+#undef real_test_for_stringization
+#define test_for_stringization -.real_test_for_stringization.-
+const char stringized[[]] = STRINGIZE(test_for_stringization);
+], [sizeof(stringized) == 32])],

  •  [rb_cv_stringization="$string"; break],
    
  •  [rb_cv_stringization=no])
    
  • done]
    +)
    +AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr))
    +if test x"$rb_cv_stringization" != xno -a “$rb_cv_stringization” !=
    #expr”; then
  • AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization)
  • AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1)
    +fi

+AC_CACHE_CHECK([string literal concatenation],

  • rb_cv_string_literal_concatenation, [
  • AC_COMPILE_IFELSE([
  • AC_LANG_BOOL_COMPILE_TRY([
    +const char concatenated_literal[[]] = “literals” “to”
  • “be” “concatenated.”;
    +], [sizeof(concatenated_literal) == 26])],
  • [rb_cv_string_literal_concatenation=yes],
  • [rb_cv_string_literal_concatenation=no])]
    +)
    +if test “$rb_cv_string_literal_concatenation” = no; then
  • AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1)
    +fi

AC_CACHE_CHECK(for variable length prototypes and stdarg.h,
rb_cv_stdarg,
[AC_TRY_COMPILE([
#include <stdarg.h>
Index: version.c

— version.c (revision 16676)
+++ version.c (working copy)
@@ -14,22 +14,29 @@
#include “version.h”
#include <stdio.h>

+#define PRINT(type) puts(ruby_##type)
+#define MKSTR(type) rb_obj_freeze(rb_str_new(ruby_##type,
sizeof(ruby_##type)-1))
+
const char ruby_version[] = RUBY_VERSION;
const char ruby_release_date[] = RUBY_RELEASE_DATE;
const char ruby_platform[] = RUBY_PLATFORM;
const int ruby_patchlevel = RUBY_PATCHLEVEL;
+const char ruby_description[] = RUBY_DESCRIPTION;
+const char ruby_copyright[] = RUBY_COPYRIGHT;

void
Init_version()
{

  • VALUE v = rb_obj_freeze(rb_str_new2(ruby_version));
  • VALUE d = rb_obj_freeze(rb_str_new2(ruby_release_date));
  • VALUE p = rb_obj_freeze(rb_str_new2(ruby_platform));
  • VALUE v = MKSTR(version);

  • VALUE d = MKSTR(release_date);

  • VALUE p = MKSTR(platform);

    rb_define_global_const(“RUBY_VERSION”, v);
    rb_define_global_const(“RUBY_RELEASE_DATE”, d);
    rb_define_global_const(“RUBY_PLATFORM”, p);
    rb_define_global_const(“RUBY_PATCHLEVEL”,
    INT2FIX(RUBY_PATCHLEVEL));

  • rb_define_global_const(“RUBY_DESCRIPTION”, MKSTR(description));

  • rb_define_global_const(“RUBY_COPYRIGHT”, MKSTR(copyright));

    /* obsolete constants */
    rb_define_global_const(“VERSION”, v);
    @@ -40,13 +47,13 @@
    void
    ruby_show_version()
    {

  • printf(“ruby %s (%s patchlevel %d) [%s]\n”, RUBY_VERSION,
    RUBY_RELEASE_DATE, RUBY_PATCHLEVEL, RUBY_PLATFORM);
  • PRINT(description);
    fflush(stdout);
    }

void
ruby_show_copyright()
{

  • printf(“ruby - Copyright (C) 1993-%d Yukihiro M.\n”,
    RUBY_RELEASE_YEAR);
  • PRINT(copyright);
    exit(0);
    }
    Index: version.h
    ===================================================================
    — version.h (revision 16676)
    +++ version.h (working copy)
    @@ -1,7 +1,7 @@
    #define RUBY_VERSION “1.8.7”
    -#define RUBY_RELEASE_DATE “2008-05-28”
    +#define RUBY_RELEASE_DATE “2008-05-29”
    #define RUBY_VERSION_CODE 187
    -#define RUBY_RELEASE_CODE 20080528
    +#define RUBY_RELEASE_CODE 20080529
    #define RUBY_PATCHLEVEL 5000

#define RUBY_VERSION_MAJOR 1
@@ -9,11 +9,33 @@
#define RUBY_VERSION_TEENY 7
#define RUBY_RELEASE_YEAR 2008
#define RUBY_RELEASE_MONTH 5
-#define RUBY_RELEASE_DAY 28
+#define RUBY_RELEASE_DAY 29

#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];
RUBY_EXTERN const char ruby_release_date[];
RUBY_EXTERN const char ruby_platform[];
RUBY_EXTERN const int ruby_patchlevel;
+RUBY_EXTERN const char ruby_description[];
+RUBY_EXTERN const char ruby_copyright[];
#endif
+
+#define RUBY_AUTHOR “Yukihiro M.”
+#define RUBY_BIRTH_YEAR 1993
+#define RUBY_BIRTH_MONTH 2
+#define RUBY_BIRTH_DAY 24
+
+#define RUBY_RELEASE_STR “patchlevel”
+#define RUBY_RELEASE_NUM RUBY_PATCHLEVEL
+
+# define RUBY_DESCRIPTION \

  • "ruby "RUBY_VERSION \
  • " (“RUBY_RELEASE_DATE” " \
  • RUBY_RELEASE_STR" " \
  • STRINGIZE(RUBY_RELEASE_NUM)") " \
  • “[“RUBY_PLATFORM”]”
    +# define RUBY_COPYRIGHT \
  • "ruby - Copyright (C) " \
  • STRINGIZE(RUBY_BIRTH_YEAR)“-” \
  • STRINGIZE(RUBY_RELEASE_YEAR)" " \
  • RUBY_AUTHOR
    Index: defines.h
    ===================================================================
    — defines.h (revision 16676)
    +++ defines.h (working copy)
    @@ -51,6 +51,11 @@
    void xrealloc _((void,long));
    void xfree _((void*));

+#define STRINGIZE(expr) STRINGIZE0(expr)
+#ifndef STRINGIZE0
+#define STRINGIZE0(expr) #expr
+#endif
+
#if SIZEOF_LONG_LONG > 0

define LONG_LONG long long

#elif SIZEOF___INT64 > 0

e$B$J$+$@$G$9!#e(B

At Thu, 29 May 2008 13:53:22 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:34883]:

e$B@>;3OB9-$G$9!#e(B

http://rubyforge.org/tracker/index.php?func=detail&aid=19002&group_id=426&atid=22040
e$B$N%Q%C%A$G$9!#e(B

r14469e$B$r85$K$7$F$$$^$9!#e(B
error.ce$B$NJQ99$Ge(B[ruby-dev:34826]e$B$bD>$j$^$9!#e(B

STRINGIZEe$B$O$H$b$+$/!"e(BNO_STRING_LITERAL_CONCATENATIONe$B$N>l9g$O$I$&e(B
e$B$J$k$s$G$7$g$&!#e(B

e$B%P%C%/%]!<%H$N%Q%C%A$r:n@.$7$F$$$F5$$K$J$C$?$N$G$9$,!“e(B
trunke$B$NJ}$Ge(Bconst int ruby_patchlevele$B$O$”$k$N$Ke(B
const int ruby_revisione$B$,$J$$$N$O$$$$$N$G$7$g$&$+e(B?

e$B$$$j$^$9e(B?

e$B@>;3OB9-$G$9!#e(B

At Thu, 29 May 2008 15:50:09 +0900,
Nobuyoshi N. wrote:

STRINGIZEe$B$O$H$b$+$/!"e(BNO_STRING_LITERAL_CONCATENATIONe$B$N>l9g$O$I$&e(B
e$B$J$k$s$G$7$g$&!#e(B

1.9e$B$NJ}$O2?$b$7$F$$$J$$$h$&$G$9$,!"e(B1.8e$B$O$=$&$$$&4D6-$bBP1~$7$F$$$ke(B
e$B$N$G$7$g$&$+e(B?

e$B%P%C%/%]!<%H$N%Q%C%A$r:n@.$7$F$$$F5$$K$J$C$?$N$G$9$,!“e(B
trunke$B$NJ}$Ge(Bconst int ruby_patchlevele$B$O$”$k$N$Ke(B
const int ruby_revisione$B$,$J$$$N$O$$$$$N$G$7$g$&$+e(B?

e$B$$$j$^$9e(B?

RUBY_REVISIONe$B$G$H$l$k$N$G$J$/$F$bNI$5$=$&$J5$$,$7$^$9!#e(B

e$B$J$+$@$G$9!#e(B

At Thu, 29 May 2008 18:14:35 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:34887]:

STRINGIZEe$B$O$H$b$+$/!"e(BNO_STRING_LITERAL_CONCATENATIONe$B$N>l9g$O$I$&e(B
e$B$J$k$s$G$7$g$&!#e(B

1.9e$B$NJ}$O2?$b$7$F$$$J$$$h$&$G$9$,!"e(B1.8e$B$O$=$&$$$&4D6-$bBP1~$7$F$$$ke(B
e$B$N$G$7$g$&$+e(B?

e$B4pK\E*$Oe(BK&Re$B$G$9$+$i!#e(Bstringizatione$B$O8E$$%3%s%Q%$%i$G$bBeBX<jCJ$,e(B
e$B$"$k2DG=@-$,$"$j$^$9$,!"e(Bstring literal
concatenatione$B$Oe(BC89e$B$+$i$7e(B
e$B$+$J$$$G$9$h$M$’!#e(B

e$B@>;3OB9-$G$9!#e(B

At Fri, 30 May 2008 11:27:21 +0900,
Nobuyoshi N. wrote:

e$B4pK\E*$Oe(BK&Re$B$G$9$+$i!#e(Bstringizatione$B$O8E$$%3%s%Q%$%i$G$bBeBX<jCJ$,e(B
e$B$"$k2DG=@-$,$"$j$^$9$,!"e(Bstring literal concatenatione$B$Oe(BC89e$B$+$i$7e(B
e$B$+$J$$$G$9$h$M$’!#e(B

snprintfe$B$G@8@.$9$k$h$&$K$7$F$_$^$7$?!#e(B

Index: error.c

— error.c (revision 16703)
+++ error.c (working copy)
@@ -29,8 +29,7 @@
#define EXIT_SUCCESS 0
#endif

-extern const char ruby_version[], ruby_release_date[], ruby_platform[];
-extern const int ruby_patchlevel;
+extern const char *ruby_description;

int ruby_nerrs;

@@ -209,8 +208,7 @@
va_init_list(args, fmt);
vfprintf(out, fmt, args);
va_end(args);

  • fprintf(out, “\nruby %s (%s patchlevel %d) [%s]\n\n”,
  • ruby_version, ruby_release_date, ruby_patchlevel, ruby_platform);
  • fprintf(out, “\n%s\n\n”, ruby_description);
    }
    abort();
    }
    Index: version.c
    ===================================================================
    — version.c (revision 16703)
    +++ version.c (working copy)
    @@ -14,23 +14,44 @@
    #include “version.h”
    #include <stdio.h>

+#define PRINT(type) puts(ruby_##type)
+#define MKSTR(type) rb_obj_freeze(rb_str_new(ruby_##type,
sizeof(ruby_##type)-1))
+
const char ruby_version[] = RUBY_VERSION;
const char ruby_release_date[] = RUBY_RELEASE_DATE;
const char ruby_platform[] = RUBY_PLATFORM;
const int ruby_patchlevel = RUBY_PATCHLEVEL;
+const char *ruby_description;
+const char *ruby_copyright;

void
Init_version()
{

  • VALUE v = rb_obj_freeze(rb_str_new2(ruby_version));
  • VALUE d = rb_obj_freeze(rb_str_new2(ruby_release_date));
  • VALUE p = rb_obj_freeze(rb_str_new2(ruby_platform));
  • static char description[128];

  • static char copyright[128];

  • VALUE v = MKSTR(version);

  • VALUE d = MKSTR(release_date);

  • VALUE p = MKSTR(platform);

  • VALUE tmp;

    rb_define_global_const(“RUBY_VERSION”, v);
    rb_define_global_const(“RUBY_RELEASE_DATE”, d);
    rb_define_global_const(“RUBY_PLATFORM”, p);
    rb_define_global_const(“RUBY_PATCHLEVEL”,
    INT2FIX(RUBY_PATCHLEVEL));

  • snprintf(description, sizeof(description), “ruby %s (%s %s %d)
    [%s]”,

  •         RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_RELEASE_STR,
    
  •         RUBY_RELEASE_NUM, RUBY_PLATFORM);
    
  • ruby_description = description;

  • tmp = rb_obj_freeze(rb_str_new2(description));

  • rb_define_global_const(“RUBY_DESCRIPTION”, tmp);

  • snprintf(copyright, sizeof(copyright), “ruby - Copyright © %d-%d
    %s”,

  •         RUBY_BIRTH_YEAR, RUBY_RELEASE_YEAR, RUBY_AUTHOR);
    
  • ruby_copyright = copyright;

  • tmp = rb_obj_freeze(rb_str_new2(copyright));

  • rb_define_global_const(“RUBY_COPYRIGHT”, tmp);

  • /* obsolete constants */
    rb_define_global_const(“VERSION”, v);
    rb_define_global_const(“RELEASE_DATE”, d);
    @@ -40,13 +61,13 @@
    void
    ruby_show_version()
    {

  • printf(“ruby %s (%s patchlevel %d) [%s]\n”, RUBY_VERSION,
    RUBY_RELEASE_DATE, RUBY_PATCHLEVEL, RUBY_PLATFORM);
  • PRINT(description);
    fflush(stdout);
    }

void
ruby_show_copyright()
{

  • printf(“ruby - Copyright © 1993-%d Yukihiro M.\n”,
    RUBY_RELEASE_YEAR);
  • PRINT(copyright);
    exit(0);
    }
    Index: version.h
    ===================================================================
    — version.h (revision 16703)
    +++ version.h (working copy)
    @@ -16,4 +16,14 @@
    RUBY_EXTERN const char ruby_release_date[];
    RUBY_EXTERN const char ruby_platform[];
    RUBY_EXTERN const int ruby_patchlevel;
    +RUBY_EXTERN const char *ruby_description;
    +RUBY_EXTERN const char *ruby_copyright;
    #endif

+#define RUBY_AUTHOR “Yukihiro M.”
+#define RUBY_BIRTH_YEAR 1993
+#define RUBY_BIRTH_MONTH 2
+#define RUBY_BIRTH_DAY 24
+
+#define RUBY_RELEASE_STR “patchlevel”
+#define RUBY_RELEASE_NUM RUBY_PATCHLEVEL