|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r83858 - trunk/tools/build/v2/engine
From: steven_at_[hidden]
Date: 2013-04-12 16:36:53
Author: steven_watanabe
Date: 2013-04-12 16:36:52 EDT (Fri, 12 Apr 2013)
New Revision: 83858
URL: http://svn.boost.org/trac/boost/changeset/83858
Log:
Separate the code for recording explicit bindings from search.
Text files modified:
trunk/tools/build/v2/engine/rules.c | 10 +----
trunk/tools/build/v2/engine/search.c | 68 +++++++++++++++++++++++++--------------
trunk/tools/build/v2/engine/search.h | 1
3 files changed, 47 insertions(+), 32 deletions(-)
Modified: trunk/tools/build/v2/engine/rules.c
==============================================================================
--- trunk/tools/build/v2/engine/rules.c (original)
+++ trunk/tools/build/v2/engine/rules.c 2013-04-12 16:36:52 EDT (Fri, 12 Apr 2013)
@@ -183,15 +183,9 @@
SETTINGS * s = t->settings;
for ( ; s ; s = s->next )
{
- if ( strcmp( object_str( s->symbol ), "LOCATE" ) == 0 )
+ if ( object_equal( s->symbol, constant_LOCATE ) && ! list_empty( s->value ) )
{
- pushsettings( root_module(), t->settings );
- /* We are binding a target with explicit LOCATE. So third
- * argument is of no use: nothing will be returned through it.
- */
- object_free( t->boundname );
- t->boundname = search( t->name, &t->time, 0, 0 );
- popsettings( root_module(), t->settings );
+ set_explicit_binding( t->name, list_front( s->value ) );
break;
}
}
Modified: trunk/tools/build/v2/engine/search.c
==============================================================================
--- trunk/tools/build/v2/engine/search.c (original)
+++ trunk/tools/build/v2/engine/search.c 2013-04-12 16:36:52 EDT (Fri, 12 Apr 2013)
@@ -69,6 +69,50 @@
}
}
+/* Records the binding of a target with an explicit LOCATE. */
+void set_explicit_binding( OBJECT * target, OBJECT * locate )
+{
+ OBJECT * boundname;
+ OBJECT * key;
+ PATHNAME f[ 1 ];
+ string buf[ 1 ];
+ int found;
+ BINDING * ba;
+
+ if ( !explicit_bindings )
+ explicit_bindings = hashinit( sizeof( BINDING ), "explicitly specified "
+ "locations" );
+
+ string_new( buf );
+
+ /* Parse the filename. */
+ path_parse( object_str( target ), f );
+
+ /* Ignore the grist. */
+ f->f_grist.ptr = 0;
+ f->f_grist.len = 0;
+
+ /* Root the target path at the given location. */
+ f->f_root.ptr = object_str( locate );
+ f->f_root.len = strlen( object_str( locate ) );
+
+ path_build( f, buf );
+ boundname = object_new( buf->value );
+ if ( DEBUG_SEARCH )
+ printf( "explicit locate %s: %s\n", object_str( target ), buf->value );
+ string_free( buf );
+ key = path_as_key( boundname );
+ object_free( boundname );
+
+ ba = (BINDING *)hash_insert( explicit_bindings, key, &found );
+ if ( !found )
+ {
+ ba->binding = key;
+ ba->target = target;
+ }
+ else
+ object_free( key );
+}
/*
* search.c - find a target along $(SEARCH) or $(LOCATE).
@@ -96,9 +140,6 @@
int found = 0;
OBJECT * boundname = 0;
- /* Set to 1 if target location is specified via LOCATE. */
- int explicitly_located = 0;
-
if ( another_target )
*another_target = 0;
@@ -126,8 +167,6 @@
if ( DEBUG_SEARCH )
printf( "locate %s: %s\n", object_str( target ), buf->value );
- explicitly_located = 1;
-
key = object_new( buf->value );
timestamp_from_path( time, key );
object_free( key );
@@ -209,25 +248,6 @@
boundname = object_new( buf->value );
string_free( buf );
- if ( explicitly_located )
- {
- int found;
- BINDING * ba;
- OBJECT * const key = path_as_key( boundname );
- /* CONSIDER: We should probably issue a warning if another file is
- * explicitly bound to the same location. This might break
- * compatibility, though.
- */
- ba = (BINDING *)hash_insert( explicit_bindings, key, &found );
- if ( !found )
- {
- ba->binding = key;
- ba->target = target;
- }
- else
- object_free( key );
- }
-
/* Prepare a call to BINDRULE if the variable is set. */
call_bind_rule( target, boundname );
Modified: trunk/tools/build/v2/engine/search.h
==============================================================================
--- trunk/tools/build/v2/engine/search.h (original)
+++ trunk/tools/build/v2/engine/search.h 2013-04-12 16:36:52 EDT (Fri, 12 Apr 2013)
@@ -14,6 +14,7 @@
#include "object.h"
#include "timestamp.h"
+void set_explicit_binding( OBJECT * target, OBJECT * locate );
OBJECT * search( OBJECT * target, timestamp * const time,
OBJECT * * another_target, int const file );
void search_done( void );
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