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

ruby-changes:28706

From: nobu <ko1@a...>
Date: Wed, 15 May 2013 16:58:38 +0900 (JST)
Subject: [ruby-changes:28706] nobu:r40758 (trunk): configure.in: shvar_to_cpp in ruby

nobu	2013-05-15 16:58:28 +0900 (Wed, 15 May 2013)

  New Revision: 40758

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

  Log:
    configure.in: shvar_to_cpp in ruby
    
    * configure.in: save configured load path values into verconf.in.
    * common.mk (verconf.h): create from verconf.in with shvar_to_cpp.rb.
    * tool/shvar_to_cpp.rb: turn shell variables into C macros.
      [Bug #7959]

  Added files:
    trunk/tool/shvar_to_cpp.rb
  Modified files:
    trunk/ChangeLog
    trunk/common.mk
    trunk/configure.in
    trunk/loadpath.c

Index: configure.in
===================================================================
--- configure.in	(revision 40757)
+++ configure.in	(revision 40758)
@@ -3475,59 +3475,6 @@ AS_CASE(["$target_os"], https://github.com/ruby/ruby/blob/trunk/configure.in#L3475
     rubyw_install_name='$(RUBYW_INSTALL_NAME)'
     ])
 
-shvar_to_cpp() {
-    var="$1" val="$2"
-    exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`"
-    arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`"
-    sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`"
-    val="`echo '\"'\"${val}\"'\"' |
-	sed \
-	    -e 's/\${\([[A-Z][A-Z_]]*\)}/\"\1\"/g' \
-	    -e 's|\${sitearchlibdir}|'\"${sitearchlibdir}|g\" \
-	    -e 's|\${sitearchincludedir}|'\"${sitearchincludedir}|g\" \
-	    -e 's|\${archlibdir}|'\"${archlibdir}|g\" \
-	    -e 's|\${archincludedir}|'\"${archincludedir}|g\" \
-	    -e 's|\${libdir}|'\"${libdir}|g\" \
-	    -e 's/\${ruby_version}/\"RUBY_LIB_VERSION\"/g' \
-	    -e 's/\${arch}/\"arch\"/g' \
-	    -e 's/\${sitearch}/\"arch\"/g' \
-	    -e 's/\${vendorarchdir}/\"RUBY_VENDOR_ARCH_LIB\"/g' \
-	    -e 's/\${sitearchdir}/\"RUBY_SITE_ARCH_LIB\"/g' \
-	    -e 's/\${vendorlibdir}/\"RUBY_VENDOR_LIB2\"/g' \
-	    -e 's/\${sitelibdir}/\"RUBY_SITE_LIB2\"/g' \
-	    -e 's/\${vendordir}/\"RUBY_VENDOR_LIB\"/g' \
-	    -e 's/\${sitedir}/\"RUBY_SITE_LIB\"/g' \
-	    -e 's/\${rubylibdir}/\"RUBY_LIB\"/g' \
-	    -e 's/\${rubylibprefix}/\"RUBY_LIB_PREFIX\"/g' \
-	    -e 's/\${rubyarchprefix}/\"RUBY_ARCH_PREFIX_FOR(arch)\"/g' \
-	    -e 's/\${rubysitearchprefix}/\"RUBY_SITEARCH_PREFIX_FOR(arch)\"/g' \
-	    -e 's/\${exec_prefix}/\"RUBY_EXEC_PREFIX\"/g' \
-	    -e \"s|${exec_prefix_pat}/|\"'\"RUBY_EXEC_PREFIX\"/|g' \
-	    -e \"s|${arch_pat}|\"'\"arch\"|g' \
-	    -e \"s|${sitearch_pat}|\"'\"sitearch\"|g' \
-	    -e 's|^\\\"NONE/|RUBY_EXEC_PREFIX\\\"/|' \
-	    -e 's|^\\\"NONE\\\"|\\\"'\"${prefix}\"'\\\"|' \
-	    -e 's/^\\\"\\\"\(.\)/\1/;s/\(.\)\\\"\\\"$/\1/'
-	`"
-    eval $var='"$val"'
-}
-
-unexpand_shvar() {
-    var=$1 n="" v="" expr=""
-    shift
-    test "$#" -eq 0 && return
-    for n do
-        eval v='"$'$n'"'
-	v="`echo \"$v\" | sed -e ['s/\${[^${}\"]*}/\"&\"/g'] -e ['s/[][$|.\\?*]/\\\\&/g']`"
-	if test -n "$v"; then
-	    expr=["${expr};s|"'\("[^$"]*\)'"$v|\\1\${$n}\"|g"]
-	    AS_CASE(["$v"], [*'${'*'}'*], [expr=["$expr;s|$v|\"\${$n}\"|g"]])
-	fi
-    done
-    expr=['s/\${[^${}"]*}/"&"/g;'"${expr};"'s/"\(\${[^${}"]*}\)"/\1/g']
-    eval $var='"`echo \"\\\"${'$var'}\\\"\" | sed \"$expr;s/\\\"//g\"`"'
-}
-
 rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
 AC_ARG_WITH(rubylibprefix,
 	    AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]),
@@ -3612,52 +3559,36 @@ AC_ARG_WITH(vendorarchdir, https://github.com/ruby/ruby/blob/trunk/configure.in#L3559
             [vendorarchdir=$withval],
             [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
 
-unexpand_shvar rubylibprefix       exec_prefix libdir RUBY_BASE_NAME
-unexpand_shvar rubyarchprefix      exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix
-unexpand_shvar rubysitearchprefix  exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix
 if test "${LOAD_RELATIVE+set}"; then
     AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
-    RUBY_EXEC_PREFIX='""'
+    RUBY_EXEC_PREFIX=''
 else
-    shvar_to_cpp RUBY_EXEC_PREFIX "${exec_prefix}"
+    RUBY_EXEC_PREFIX="${exec_prefix}"
 fi
-shvar_to_cpp RUBY_LIB_PREFIX "${rubylibprefix}"
-shvar_to_cpp RUBY_ARCH_PREFIX_FOR "${rubyarchprefix}"
-shvar_to_cpp RUBY_SITEARCH_PREFIX_FOR "${rubysitearchprefix}"
-shvar_to_cpp RIDIR "${ridir}"
-unexpand_shvar exec_prefix         prefix
 
 if test ${RUBY_LIB_VERSION_STYLE+set}; then
     AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !<verconf>!)
 else
-    AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION] !<verconf>!)
+    AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, "$RUBY_LIB_VERSION" !<verconf>!)
 fi
-AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX} !<verconf>!)
-AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !<verconf>!)
-AC_DEFINE_UNQUOTED(RUBY_ARCH_PREFIX_FOR(arch), ${RUBY_ARCH_PREFIX_FOR} !<verconf>!)
-AC_DEFINE_UNQUOTED(RUBY_SITEARCH_PREFIX_FOR(arch), ${RUBY_SITEARCH_PREFIX_FOR} !<verconf>!)
-
-shvar_to_cpp RUBY_LIB "${rubylibdir}"
-if test "x${RUBY_LIB}" != 'xRUBY_LIB_PREFIX"/"RUBY_LIB_VERSION'; then
-    AC_DEFINE_UNQUOTED(RUBY_LIB, ${RUBY_LIB} !<verconf>!)
-fi
-shvar_to_cpp RUBY_ARCH_LIB_FOR "${rubyarchdir}"
-AC_DEFINE_UNQUOTED(RUBY_ARCH_LIB_FOR(arch), ${RUBY_ARCH_LIB_FOR} !<verconf>!)
+AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}" !<verconf>!)
+AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, "${rubylibprefix}" !<verconf>!)
+AC_DEFINE_UNQUOTED(RUBY_ARCH_PREFIX_FOR(arch), "${rubyarchprefix}" !<verconf>!)
+AC_DEFINE_UNQUOTED(RUBY_SITEARCH_PREFIX_FOR(arch), "${rubysitearchprefix}" !<verconf>!)
+
+AC_DEFINE_UNQUOTED(RUBY_LIB, "${rubylibdir}" !<verconf>!)
+AC_DEFINE_UNQUOTED(RUBY_ARCH_LIB_FOR(arch), "${rubyarchdir}" !<verconf>!)
 if test "x$sitedir" = xno; then
     AC_DEFINE(NO_RUBY_SITE_LIB, [] !<verconf>!)
 else
-    shvar_to_cpp RUBY_SITE_LIB "${sitedir}"
-    AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB} !<verconf>!)
-    shvar_to_cpp RUBY_SITE_ARCH_LIB_FOR "${sitearchdir}"
-    AC_DEFINE_UNQUOTED(RUBY_SITE_ARCH_LIB_FOR(arch), ${RUBY_SITE_ARCH_LIB_FOR} !<verconf>!)
+    AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${sitedir}" !<verconf>!)
+    AC_DEFINE_UNQUOTED(RUBY_SITE_ARCH_LIB_FOR(arch), "${sitearchdir}" !<verconf>!)
 fi
 if test "x$vendordir" = xno; then
     AC_DEFINE(NO_RUBY_VENDOR_LIB, [] !<verconf>!)
 else
-    shvar_to_cpp RUBY_VENDOR_LIB "${vendordir}"
-    AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB} !<verconf>!)
-    shvar_to_cpp RUBY_VENDOR_ARCH_LIB_FOR "${vendorarchdir}"
-    AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCH_LIB_FOR(arch), ${RUBY_VENDOR_ARCH_LIB_FOR} !<verconf>!)
+    AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, "${vendordir}" !<verconf>!)
+    AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCH_LIB_FOR(arch), "${vendorarchdir}" !<verconf>!)
 fi
 
 AC_SUBST(libdirname, ${multiarch+arch}libdir)
@@ -3796,7 +3727,8 @@ guard=INCLUDE_RUBY_CONFIG_H https://github.com/ruby/ruby/blob/trunk/configure.in#L3727
   echo "#endif /* $guard */"
 } | tr -d '\015' |
 ${srcdir}/tool/ifchange "${config_h}" -
-sed -n 's/ !<verconf>!$//p' confdefs.h | ${srcdir}/tool/ifchange verconf.h -
+sed -n 's/ !<verconf>!$//p' confdefs.h | ${srcdir}/tool/ifchange verconf.in -
+rm -f verconf.h
 tr -d '\015' < largefile.h > confdefs.h
 rm largefile.h
 
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 40757)
+++ ChangeLog	(revision 40758)
@@ -1,4 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
-Wed May 15 16:56:34 2013  Nobuyoshi Nakada  <nobu@r...>
+Wed May 15 16:58:24 2013  Nobuyoshi Nakada  <nobu@r...>
+
+	* configure.in: save configured load path values into verconf.in.
+
+	* common.mk (verconf.h): create from verconf.in with shvar_to_cpp.rb.
+
+	* tool/shvar_to_cpp.rb: turn shell variables into C macros.
+	  [Bug #7959]
 
 	* loadpath.c: split load path staffs from version.c.
 
Index: common.mk
===================================================================
--- common.mk	(revision 40757)
+++ common.mk	(revision 40758)
@@ -834,6 +834,10 @@ newline.$(OBJEXT): $(NEWLINE_C) {$(VPATH https://github.com/ruby/ruby/blob/trunk/common.mk#L834
   {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \
   {$(VPATH)}transcode_data.h {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}subst.h
 
+verconf.h: verconf.in $(PREP) $(srcdir)/tool/verconf.rb $(RBCONFIG)
+	$(ECHO) creating $@
+	$(Q) $(MINIRUBY) "$(srcdir)/tool/shvar_to_cpp.rb" $< > $@
+
 DTRACE_DEPENDENT_OBJS = array.$(OBJEXT) \
 		eval.$(OBJEXT) \
 		gc.$(OBJEXT) \
Index: tool/shvar_to_cpp.rb
===================================================================
--- tool/shvar_to_cpp.rb	(revision 0)
+++ tool/shvar_to_cpp.rb	(revision 40758)
@@ -0,0 +1,25 @@ https://github.com/ruby/ruby/blob/trunk/tool/shvar_to_cpp.rb#L1
+#!/usr/bin/ruby
+
+require './rbconfig'
+C = RbConfig::MAKEFILE_CONFIG.dup
+C["ruby_version"] = '"RUBY_LIB_VERSION"'
+C["arch"] = '"arch"'
+C["sitearch"] = '"arch"'
+C["vendorarchdir"] = '"RUBY_VENDOR_ARCH_LIB"'
+C["sitearchdir"] = '"RUBY_SITE_ARCH_LIB"'
+C["vendorlibdir"] = '"RUBY_VENDOR_LIB2"'
+C["sitelibdir"] = '"RUBY_SITE_LIB2"'
+C["vendordir"] = '"RUBY_VENDOR_LIB"'
+C["sitedir"] = '"RUBY_SITE_LIB"'
+C["rubylibdir"] = '"RUBY_LIB"'
+C["rubylibprefix"] = '"RUBY_LIB_PREFIX"'
+C["rubyarchprefix"] = '"RUBY_ARCH_PREFIX_FOR(arch)"'
+C["rubysitearchprefix"] = '"RUBY_SITEARCH_PREFIX_FOR(arch)"'
+C["exec_prefix"] = '"RUBY_EXEC_PREFIX"'
+
+verconf = File.read(ARGV[0])
+verconf.gsub!(/^(#define\s+\S+\s+)(.*)/) {
+  $1 + RbConfig.expand($2, C).gsub(/^""(?!$)|(.)""$/, '\1')
+}
+
+puts verconf

Property changes on: tool/shvar_to_cpp.rb
___________________________________________________________________
Added: svn:eol-style
   + LF
Added: svn:executable
   + *

Index: loadpath.c
===================================================================
--- loadpath.c	(revision 40757)
+++ loadpath.c	(revision 40758)
@@ -37,7 +37,9 @@ https://github.com/ruby/ruby/blob/trunk/loadpath.c#L37
 
 typedef char ruby_lib_version_string[(int)sizeof(RUBY_LIB_VERSION) - 2];
 
+#ifndef RUBY_LIB
 #define RUBY_LIB                    RUBY_LIB_PREFIX  "/"RUBY_LIB_VERSION
+#endif
 #define RUBY_SITE_LIB2              RUBY_SITE_LIB    "/"RUBY_LIB_VERSION
 #define RUBY_VENDOR_LIB2            RUBY_VENDOR_LIB  "/"RUBY_LIB_VERSION
 #ifndef RUBY_ARCH_LIB_FOR

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

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