Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64432 - in trunk/tools/build/v2: build engine/src tools
From: ghost_at_[hidden]
Date: 2010-07-29 07:37:09


Author: vladimir_prus
Date: 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
New Revision: 64432
URL: http://svn.boost.org/trac/boost/changeset/64432

Log:
Redo naming of actions again. Return values from Python to Jamfiles.

Text files modified:
   trunk/tools/build/v2/build/engine.py | 14 +++++++++++---
   trunk/tools/build/v2/build/project.py | 5 +++--
   trunk/tools/build/v2/build/property.py | 32 +++-----------------------------
   trunk/tools/build/v2/build/toolset.py | 4 ++--
   trunk/tools/build/v2/engine/src/compile.c | 34 +++++-----------------------------
   trunk/tools/build/v2/tools/common.py | 4 ++--
   6 files changed, 26 insertions(+), 67 deletions(-)

Modified: trunk/tools/build/v2/build/engine.py
==============================================================================
--- trunk/tools/build/v2/build/engine.py (original)
+++ trunk/tools/build/v2/build/engine.py 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -11,7 +11,8 @@
 
 import b2.build.property_set as property_set
 
-_extract_jamfile_and_rule = re.compile("@(Jamfile<.*>)%(.*)")
+_indirect_rule = re.compile("^([^%]*)%([^%]+)$")
+_extract_jamfile_and_rule = re.compile("(Jamfile<.*>)%(.*)")
 
 class BjamAction:
     """Class representing bjam action defined from Python."""
@@ -41,8 +42,7 @@
         if property_set:
             p = property_set.raw()
 
- # FIXME: whazzup?
- m = None #_extract_jamfile_and_rule.match(self.action_name)
+ m = _extract_jamfile_and_rule.match(self.action_name)
         if m:
             bjam_interface.call("set-update-action-in-module",
                                 m.group(1), m.group(2),
@@ -137,6 +137,14 @@
 
         self.actions[action_name] = BjamAction(action_name, function)
 
+ def qualify_bjam_action(self, action_name, context_module):
+
+ if _indirect_rule.match(action_name):
+ # Rule is already in indirect format
+ return action_name
+ else:
+ return context_module + '%' + action_name
+
     def register_bjam_action (self, action_name):
         """Informs self that 'action_name' is declared in bjam.
 

Modified: trunk/tools/build/v2/build/project.py
==============================================================================
--- trunk/tools/build/v2/build/project.py (original)
+++ trunk/tools/build/v2/build/project.py 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -849,7 +849,7 @@
                 e.report()
         finally:
             self.manager_.errors().pop_jamfile_context()
-
+
         return result
 
     def make_wrapper(self, callable):
@@ -857,7 +857,7 @@
         callable that will call 'callable' and report all exceptins,
         using 'call_and_report_errors'."""
         def wrapper(*args, **kw):
- self.call_and_report_errors(callable, *args, **kw)
+ return self.call_and_report_errors(callable, *args, **kw)
         return wrapper
 
     def init_project(self, project_module):
@@ -1011,6 +1011,7 @@
 
         for f in m.__dict__:
             v = m.__dict__[f]
+ f = f.replace("_", "-")
             if callable(v):
                 self._import_rule(jamfile_module, name + "." + f, v)
                 self.reverse.setdefault(jamfile_module, {})[name + "." + f] = v

Modified: trunk/tools/build/v2/build/property.py
==============================================================================
--- trunk/tools/build/v2/build/property.py (original)
+++ trunk/tools/build/v2/build/property.py 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -21,7 +21,6 @@
 __re_colon = re.compile (':')
 __re_has_condition = re.compile (r':<')
 __re_separate_condition_and_property = re.compile (r'(.*):(<.*)')
-__re_indirect_rule = re.compile("^([^%]*)%([^%]+)$")
 
 class Property(object):
 
@@ -213,34 +212,9 @@
     result = []
     for p in properties:
         if p.value()[0] == '@':
- v = None
- m = p.value()[1:]
- if __re_indirect_rule.match(m):
- # Rule is already in indirect format
- # FIXME: it's not clear if this is necessary.
- v = m
- else:
-
- if not '.' in m:
- # This is unqualified rule name. The user might want
- # to set flags on this rule name, and toolset.flag
- # auto-qualifies the rule name. Need to do the same
- # here so set flag setting work.
- # We can arrange for toolset.flag to *not* auto-qualify
- # the argument, but then two rules defined in two Jamfiles
- # will conflict.
- m = context_module + "." + m
-
- # FIXME: now sure if we should register name with '@'
- # or without.
- #v = '@' + context_module + '%' + m
- #print "REGISTER",
- get_manager().engine().register_bjam_action(m)
- ## FIXME: whatsup?
- #get_manager().engine().register_bjam_action(v)
- v = '@' + m
-
- result.append(Property(p.feature(), v, p.condition()))
+ q = get_manager().engine().qualify_bjam_action(p.value()[1:], context_module)
+ get_manager().engine().register_bjam_action(q)
+ result.append(Property(p.feature(), '@' + q, p.condition()))
         else:
             result.append(p)
 

Modified: trunk/tools/build/v2/build/toolset.py
==============================================================================
--- trunk/tools/build/v2/build/toolset.py (original)
+++ trunk/tools/build/v2/build/toolset.py 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -115,14 +115,14 @@
                           is specified, then the value of 'feature'
                           will be added.
     """
- caller = bjam.caller()
+ caller = bjam.caller()[:-1]
     if not '.' in rule_or_module and caller.startswith("Jamfile"):
         # Unqualified rule name, used inside Jamfile. Most likely used with
         # 'make' or 'notfile' rules. This prevents setting flags on the entire
         # Jamfile module (this will be considered as rule), but who cares?
         # Probably, 'flags' rule should be split into 'flags' and
         # 'flags-on-module'.
- rule_or_module = caller + rule_or_module
+ rule_or_module = get_manager().engine().qualify_bjam_action(rule_or_module, caller)
     else:
         # FIXME: revive checking that we don't set flags for a different
         # module unintentionally

Modified: trunk/tools/build/v2/engine/src/compile.c
==============================================================================
--- trunk/tools/build/v2/engine/src/compile.c (original)
+++ trunk/tools/build/v2/engine/src/compile.c 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -846,35 +846,9 @@
                 }
             }
         }
- else if ( PyInstance_Check( py_result ) )
+ else if (PyString_Check(py_result))
         {
- static char instance_name[1000];
- static char imported_method_name[1000];
- module_t * m;
- PyObject * method;
- PyObject * method_name = PyString_FromString("foo");
- RULE * r;
-
- fprintf(stderr, "Got instance!\n");
-
- snprintf(instance_name, 1000,
- "pyinstance%d", python_instance_number);
- snprintf(imported_method_name, 1000,
- "pyinstance%d.foo", python_instance_number);
- ++python_instance_number;
-
- m = bindmodule(instance_name);
-
- /* This is expected to get bound method. */
- method = PyObject_GetAttr(py_result, method_name);
-
- r = bindrule( imported_method_name, root_module() );
-
- r->python_function = method;
-
- result = list_new(0, newstr(instance_name));
-
- Py_DECREF( method_name );
+ result = list_new (0, newstr (PyString_AsString(py_result)));
         }
         else if ( py_result == Py_None )
         {
@@ -882,7 +856,9 @@
         }
         else
         {
- fprintf(stderr, "Non-list object returned by Python call\n");
+ /* Do nothing. There are cases, e.g. feature.feature function that
+ should return value for the benefit of Python code and which
+ also can be called by Jam code. */
         }
 
         Py_DECREF( py_result );

Modified: trunk/tools/build/v2/tools/common.py
==============================================================================
--- trunk/tools/build/v2/tools/common.py (original)
+++ trunk/tools/build/v2/tools/common.py 2010-07-29 07:37:07 EDT (Thu, 29 Jul 2010)
@@ -513,9 +513,9 @@
         already exists is unspecified.
     """
     if os_name() == 'NT':
- return "echo. > "
+ return ["echo. > "]
     else:
- return "touch "
+ return ["touch "]
 
 #FIXME: global variable
 __mkdir_set = set()


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk