From: Kazuhiro NISHIYAMA Date: 2008-05-29T13:53:22+09:00 Subject: [ruby-dev:34883] [#19002] RUBY_* constants 西山和広です。 http://rubyforge.org/tracker/index.php?func=detail&aid=19002&group_id=426&atid=22040 のパッチです。 r14469を元にしています。 error.cの変更で[ruby-dev:34826]も直ります。 バックポートのパッチを作成していて気になったのですが、 trunkの方でconst int ruby_patchlevelはあるのに const int ruby_revisionがないのはいいのでしょうか? 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 Index: version.c =================================================================== --- version.c (revision 16676) +++ version.c (working copy) @@ -14,22 +14,29 @@ #include "version.h" #include +#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 Matsumoto\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 Matsumoto" +#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 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)