http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/order.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/order.c b/ext/kenlm/jam-files/engine/modules/order.c deleted file mode 100644 index 3a83d38..0000000 --- a/ext/kenlm/jam-files/engine/modules/order.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright 2004. Vladimir Prus - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "../lists.h" -#include "../mem.h" -#include "../native.h" -#include "../object.h" -#include "../strings.h" -#include "../variable.h" - - -/* Use quite klugy approach: when we add order dependency from 'a' to 'b', just - * append 'b' to of value of variable 'a'. - */ -LIST * add_pair( FRAME * frame, int flags ) -{ - LIST * arg = lol_get( frame->args, 0 ); - LISTITER iter = list_begin( arg ); - LISTITER const end = list_end( arg ); - var_set( frame->module, list_item( iter ), list_copy_range( arg, list_next( - iter ), end ), VAR_APPEND ); - return L0; -} - - -/* Given a list and a value, returns position of that value in the list, or -1 - * if not found. - */ -int list_index( LIST * list, OBJECT * value ) -{ - int result = 0; - LISTITER iter = list_begin( list ); - LISTITER const end = list_end( list ); - for ( ; iter != end; iter = list_next( iter ), ++result ) - if ( object_equal( list_item( iter ), value ) ) - return result; - return -1; -} - -enum colors { white, gray, black }; - - -/* Main routine for topological sort. Calls itself recursively on all adjacent - * vertices which were not yet visited. After that, 'current_vertex' is added to - * '*result_ptr'. - */ -void do_ts( int * * graph, int current_vertex, int * colors, int * * result_ptr - ) -{ - int i; - - colors[ current_vertex ] = gray; - for ( i = 0; graph[ current_vertex ][ i ] != -1; ++i ) - { - int adjacent_vertex = graph[ current_vertex ][ i ]; - if ( colors[ adjacent_vertex ] == white ) - do_ts( graph, adjacent_vertex, colors, result_ptr ); - /* The vertex is either black, in which case we do not have to do - * anything, or gray, in which case we have a loop. If we have a loop, - * it is not clear what useful diagnostic we can emit, so we emit - * nothing. - */ - } - colors[ current_vertex ] = black; - **result_ptr = current_vertex; - ( *result_ptr )++; -} - - -void topological_sort( int * * graph, int num_vertices, int * result ) -{ - int i; - int * colors = ( int * )BJAM_CALLOC( num_vertices, sizeof( int ) ); - for ( i = 0; i < num_vertices; ++i ) - colors[ i ] = white; - - for ( i = 0; i < num_vertices; ++i ) - if ( colors[ i ] == white ) - do_ts( graph, i, colors, &result ); - - BJAM_FREE( colors ); -} - - -LIST * order( FRAME * frame, int flags ) -{ - LIST * arg = lol_get( frame->args, 0 ); - LIST * result = L0; - int src; - LISTITER iter = list_begin( arg ); - LISTITER const end = list_end( arg ); - - /* We need to create a graph of order dependencies between the passed - * objects. We assume there are no duplicates passed to 'add_pair'. - */ - int length = list_length( arg ); - int * * graph = ( int * * )BJAM_CALLOC( length, sizeof( int * ) ); - int * order = ( int * )BJAM_MALLOC( ( length + 1 ) * sizeof( int ) ); - - for ( src = 0; iter != end; iter = list_next( iter ), ++src ) - { - /* For all objects this one depends upon, add elements to 'graph'. */ - LIST * dependencies = var_get( frame->module, list_item( iter ) ); - int index = 0; - LISTITER dep_iter = list_begin( dependencies ); - LISTITER const dep_end = list_end( dependencies ); - - graph[ src ] = ( int * )BJAM_CALLOC( list_length( dependencies ) + 1, - sizeof( int ) ); - for ( ; dep_iter != dep_end; dep_iter = list_next( dep_iter ) ) - { - int const dst = list_index( arg, list_item( dep_iter ) ); - if ( dst != -1 ) - graph[ src ][ index++ ] = dst; - } - graph[ src ][ index ] = -1; - } - - topological_sort( graph, length, order ); - - { - int index = length - 1; - for ( ; index >= 0; --index ) - { - int i; - LISTITER iter = list_begin( arg ); - LISTITER const end = list_end( arg ); - for ( i = 0; i < order[ index ]; ++i, iter = list_next( iter ) ); - result = list_push_back( result, object_copy( list_item( iter ) ) ); - } - } - - /* Clean up */ - { - int i; - for ( i = 0; i < length; ++i ) - BJAM_FREE( graph[ i ] ); - BJAM_FREE( graph ); - BJAM_FREE( order ); - } - - return result; -} - - -void init_order() -{ - { - char const * args[] = { "first", "second", 0 }; - declare_native_rule( "class@order", "add-pair", args, add_pair, 1 ); - } - - { - char const * args[] = { "objects", "*", 0 }; - declare_native_rule( "class@order", "order", args, order, 1 ); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/path.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/path.c b/ext/kenlm/jam-files/engine/modules/path.c deleted file mode 100644 index f8dedac..0000000 --- a/ext/kenlm/jam-files/engine/modules/path.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright Vladimir Prus 2003. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "../constants.h" -#include "../frames.h" -#include "../lists.h" -#include "../native.h" -#include "../timestamp.h" - - -LIST * path_exists( FRAME * frame, int flags ) -{ - return file_query( list_front( lol_get( frame->args, 0 ) ) ) ? - list_new( object_copy( constant_true ) ) : L0; -} - - -void init_path() -{ - char const * args[] = { "location", 0 }; - declare_native_rule( "path", "exists", args, path_exists, 1 ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/property-set.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/property-set.c b/ext/kenlm/jam-files/engine/modules/property-set.c deleted file mode 100644 index 21e35d5..0000000 --- a/ext/kenlm/jam-files/engine/modules/property-set.c +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright 2013 Steven Watanabe - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "../object.h" -#include "../lists.h" -#include "../modules.h" -#include "../rules.h" -#include "../variable.h" -#include "../native.h" -#include "../compile.h" -#include "../mem.h" -#include "../constants.h" -#include "string.h" - -struct ps_map_entry -{ - struct ps_map_entry * next; - LIST * key; - OBJECT * value; -}; - -struct ps_map -{ - struct ps_map_entry * * table; - size_t table_size; - size_t num_elems; -}; - -static unsigned list_hash(LIST * key) -{ - unsigned int hash = 0; - LISTITER iter = list_begin( key ), end = list_end( key ); - for ( ; iter != end; ++iter ) - { - hash = hash * 2147059363 + object_hash( list_item( iter ) ); - } - return hash; -} - -static int list_equal( LIST * lhs, LIST * rhs ) -{ - LISTITER lhs_iter, lhs_end, rhs_iter; - if ( list_length( lhs ) != list_length( rhs ) ) - { - return 0; - } - lhs_iter = list_begin( lhs ); - lhs_end = list_end( lhs ); - rhs_iter = list_begin( rhs ); - for ( ; lhs_iter != lhs_end; ++lhs_iter, ++rhs_iter ) - { - if ( ! object_equal( list_item( lhs_iter ), list_item( rhs_iter ) ) ) - { - return 0; - } - } - return 1; -} - -static void ps_map_init( struct ps_map * map ) -{ - size_t i; - map->table_size = 2; - map->num_elems = 0; - map->table = BJAM_MALLOC( map->table_size * sizeof( struct ps_map_entry * ) ); - for ( i = 0; i < map->table_size; ++i ) - { - map->table[ i ] = NULL; - } -} - -static void ps_map_destroy( struct ps_map * map ) -{ - size_t i; - for ( i = 0; i < map->table_size; ++i ) - { - struct ps_map_entry * pos; - for ( pos = map->table[ i ]; pos; ) - { - struct ps_map_entry * tmp = pos->next; - BJAM_FREE( pos ); - pos = tmp; - } - } - BJAM_FREE( map->table ); -} - -static void ps_map_rehash( struct ps_map * map ) -{ - struct ps_map old = *map; - size_t i; - map->table = BJAM_MALLOC( map->table_size * 2 * sizeof( struct ps_map_entry * ) ); - map->table_size *= 2; - for ( i = 0; i < map->table_size; ++i ) - { - map->table[ i ] = NULL; - } - for ( i = 0; i < old.table_size; ++i ) - { - struct ps_map_entry * pos; - for ( pos = old.table[ i ]; pos; ) - { - struct ps_map_entry * tmp = pos->next; - - unsigned hash_val = list_hash( pos->key ); - unsigned bucket = hash_val % map->table_size; - pos->next = map->table[ bucket ]; - map->table[ bucket ] = pos; - - pos = tmp; - } - } - BJAM_FREE( old.table ); -} - -static struct ps_map_entry * ps_map_insert(struct ps_map * map, LIST * key) -{ - unsigned hash_val = list_hash( key ); - unsigned bucket = hash_val % map->table_size; - struct ps_map_entry * pos; - for ( pos = map->table[bucket]; pos ; pos = pos->next ) - { - if ( list_equal( pos->key, key ) ) - return pos; - } - - if ( map->num_elems >= map->table_size ) - { - ps_map_rehash( map ); - bucket = hash_val % map->table_size; - } - pos = BJAM_MALLOC( sizeof( struct ps_map_entry ) ); - pos->next = map->table[bucket]; - pos->key = key; - pos->value = 0; - map->table[bucket] = pos; - ++map->num_elems; - return pos; -} - -static struct ps_map all_property_sets; - -LIST * property_set_create( FRAME * frame, int flags ) -{ - LIST * properties = lol_get( frame->args, 0 ); - LIST * sorted = list_sort( properties ); - LIST * unique = list_unique( sorted ); - struct ps_map_entry * pos = ps_map_insert( &all_property_sets, unique ); - list_free( sorted ); - if ( pos->value ) - { - list_free( unique ); - return list_new( object_copy( pos->value ) ); - } - else - { - OBJECT * rulename = object_new( "new" ); - OBJECT * varname = object_new( "self.raw" ); - LIST * val = call_rule( rulename, frame, - list_new( object_new( "property-set" ) ), 0 ); - LISTITER iter, end; - object_free( rulename ); - pos->value = list_front( val ); - var_set( bindmodule( pos->value ), varname, unique, VAR_SET ); - object_free( varname ); - - for ( iter = list_begin( unique ), end = list_end( unique ); iter != end; ++iter ) - { - const char * str = object_str( list_item( iter ) ); - if ( str[ 0 ] != '<' || ! strchr( str, '>' ) ) - { - string message[ 1 ]; - string_new( message ); - string_append( message, "Invalid property: '" ); - string_append( message, str ); - string_append( message, "'" ); - rulename = object_new( "errors.error" ); - call_rule( rulename, frame, - list_new( object_new( message->value ) ), 0 ); - /* unreachable */ - string_free( message ); - object_free( rulename ); - } - } - - return val; - } -} - -/* binary search for the property value */ -LIST * property_set_get( FRAME * frame, int flags ) -{ - OBJECT * varname = object_new( "self.raw" ); - LIST * props = var_get( frame->module, varname ); - const char * name = object_str( list_front( lol_get( frame->args, 0 ) ) ); - size_t name_len = strlen( name ); - LISTITER begin, end; - LIST * result = L0; - object_free( varname ); - - /* Assumes random access */ - begin = list_begin( props ), end = list_end( props ); - - while ( 1 ) - { - ptrdiff_t diff = (end - begin); - LISTITER mid = begin + diff / 2; - int res; - if ( diff == 0 ) - { - return L0; - } - res = strncmp( object_str( list_item( mid ) ), name, name_len ); - if ( res < 0 ) - { - begin = mid + 1; - } - else if ( res > 0 ) - { - end = mid; - } - else /* We've found the property */ - { - /* Find the beginning of the group */ - LISTITER tmp = mid; - while ( tmp > begin ) - { - --tmp; - res = strncmp( object_str( list_item( tmp ) ), name, name_len ); - if ( res != 0 ) - { - ++tmp; - break; - } - } - begin = tmp; - /* Find the end of the group */ - tmp = mid + 1; - while ( tmp < end ) - { - res = strncmp( object_str( list_item( tmp ) ), name, name_len ); - if ( res != 0 ) break; - ++tmp; - } - end = tmp; - break; - } - } - - for ( ; begin != end; ++begin ) - { - result = list_push_back( result, - object_new( object_str( list_item( begin ) ) + name_len ) ); - } - - return result; -} - -/* binary search for the property value */ -LIST * property_set_contains_features( FRAME * frame, int flags ) -{ - OBJECT * varname = object_new( "self.raw" ); - LIST * props = var_get( frame->module, varname ); - LIST * features = lol_get( frame->args, 0 ); - LIST * result = L0; - LISTITER features_iter = list_begin( features ); - LISTITER features_end = list_end( features ) ; - object_free( varname ); - - for ( ; features_iter != features_end; ++features_iter ) - { - const char * name = object_str( list_item( features_iter ) ); - size_t name_len = strlen( name ); - LISTITER begin, end; - /* Assumes random access */ - begin = list_begin( props ), end = list_end( props ); - - while ( 1 ) - { - ptrdiff_t diff = (end - begin); - LISTITER mid = begin + diff / 2; - int res; - if ( diff == 0 ) - { - /* The feature is missing */ - return L0; - } - res = strncmp( object_str( list_item( mid ) ), name, name_len ); - if ( res < 0 ) - { - begin = mid + 1; - } - else if ( res > 0 ) - { - end = mid; - } - else /* We've found the property */ - { - break; - } - } - } - return list_new( object_copy( constant_true ) ); -} - -void init_property_set() -{ - { - char const * args[] = { "raw-properties", "*", 0 }; - declare_native_rule( "property-set", "create", args, property_set_create, 1 ); - } - { - char const * args[] = { "feature", 0 }; - declare_native_rule( "class@property-set", "get", args, property_set_get, 1 ); - } - { - char const * args[] = { "features", "*", 0 }; - declare_native_rule( "class@property-set", "contains-features", args, property_set_contains_features, 1 ); - } - ps_map_init( &all_property_sets ); -} - -void property_set_done() -{ - ps_map_destroy( &all_property_sets ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/readme.txt ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/readme.txt b/ext/kenlm/jam-files/engine/modules/readme.txt deleted file mode 100644 index 2edf6e1..0000000 --- a/ext/kenlm/jam-files/engine/modules/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ - -This directory constains sources which declare native -rules for Boost.Build modules. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/regex.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/regex.c b/ext/kenlm/jam-files/engine/modules/regex.c deleted file mode 100644 index d9f8177..0000000 --- a/ext/kenlm/jam-files/engine/modules/regex.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2003. Vladimir Prus - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "../mem.h" -#include "../native.h" -#include "../strings.h" -#include "../subst.h" - -/* -rule split ( string separator ) -{ - local result ; - local s = $(string) ; - - local match = 1 ; - while $(match) - { - match = [ MATCH ^(.*)($(separator))(.*) : $(s) ] ; - if $(match) - { - match += "" ; # in case 3rd item was empty - works around MATCH bug - result = $(match[3]) $(result) ; - s = $(match[1]) ; - } - } - return $(s) $(result) ; -} -*/ - -LIST * regex_split( FRAME * frame, int flags ) -{ - LIST * args = lol_get( frame->args, 0 ); - OBJECT * s; - OBJECT * separator; - regexp * re; - const char * pos; - LIST * result = L0; - LISTITER iter = list_begin( args ); - s = list_item( iter ); - separator = list_item( list_next( iter ) ); - - re = regex_compile( separator ); - - pos = object_str( s ); - while ( regexec( re, pos ) ) - { - result = list_push_back( result, object_new_range( pos, re->startp[ 0 ] - pos ) ); - pos = re->endp[ 0 ]; - } - - result = list_push_back( result, object_new( pos ) ); - - return result; -} - -/* -rule replace ( - string # The string to modify. - match # The characters to replace. - replacement # The string to replace with. - ) -{ - local result = "" ; - local parts = 1 ; - while $(parts) - { - parts = [ MATCH ^(.*)($(match))(.*) : $(string) ] ; - if $(parts) - { - parts += "" ; - result = "$(replacement)$(parts[3])$(result)" ; - string = $(parts[1]) ; - } - } - string ?= "" ; - result = "$(string)$(result)" ; - return $(result) ; -} -*/ - -LIST * regex_replace( FRAME * frame, int flags ) -{ - LIST * args = lol_get( frame->args, 0 ); - OBJECT * s; - OBJECT * match; - OBJECT * replacement; - regexp * re; - const char * pos; - string buf[ 1 ]; - LIST * result; - LISTITER iter = list_begin( args ); - s = list_item( iter ); - iter = list_next( iter ); - match = list_item( iter ); - iter = list_next( iter ); - replacement = list_item(iter ); - - re = regex_compile( match ); - - string_new( buf ); - - pos = object_str( s ); - while ( regexec( re, pos ) ) - { - string_append_range( buf, pos, re->startp[ 0 ] ); - string_append( buf, object_str( replacement ) ); - pos = re->endp[ 0 ]; - } - string_append( buf, pos ); - - result = list_new( object_new( buf->value ) ); - - string_free( buf ); - - return result; -} - -/* -rule transform ( list * : pattern : indices * ) -{ - indices ?= 1 ; - local result ; - for local e in $(list) - { - local m = [ MATCH $(pattern) : $(e) ] ; - if $(m) - { - result += $(m[$(indices)]) ; - } - } - return $(result) ; -} -*/ - -LIST * regex_transform( FRAME * frame, int flags ) -{ - LIST * const l = lol_get( frame->args, 0 ); - LIST * const pattern = lol_get( frame->args, 1 ); - LIST * const indices_list = lol_get( frame->args, 2 ); - int * indices = 0; - int size; - LIST * result = L0; - - if ( !list_empty( indices_list ) ) - { - int * p; - LISTITER iter = list_begin( indices_list ); - LISTITER const end = list_end( indices_list ); - size = list_length( indices_list ); - indices = (int *)BJAM_MALLOC( size * sizeof( int ) ); - for ( p = indices; iter != end; iter = list_next( iter ) ) - *p++ = atoi( object_str( list_item( iter ) ) ); - } - else - { - size = 1; - indices = (int *)BJAM_MALLOC( sizeof( int ) ); - *indices = 1; - } - - { - /* Result is cached and intentionally never freed */ - regexp * const re = regex_compile( list_front( pattern ) ); - - LISTITER iter = list_begin( l ); - LISTITER const end = list_end( l ); - - string buf[ 1 ]; - string_new( buf ); - - for ( ; iter != end; iter = list_next( iter ) ) - { - if ( regexec( re, object_str( list_item( iter ) ) ) ) - { - int i = 0; - for ( ; i < size; ++i ) - { - int const index = indices[ i ]; - /* Skip empty submatches. Not sure it is right in all cases, - * but surely is right for the case for which this routine - * is optimized -- header scanning. - */ - if ( re->startp[ index ] != re->endp[ index ] ) - { - string_append_range( buf, re->startp[ index ], - re->endp[ index ] ); - result = list_push_back( result, object_new( buf->value - ) ); - string_truncate( buf, 0 ); - } - } - } - } - string_free( buf ); - } - - BJAM_FREE( indices ); - return result; -} - - -void init_regex() -{ - { - char const * args[] = { "string", "separator", 0 }; - declare_native_rule( "regex", "split", args, regex_split, 1 ); - } - { - char const * args[] = { "string", "match", "replacement", 0 }; - declare_native_rule( "regex", "replace", args, regex_replace, 1 ); - } - { - char const * args[] = { "list", "*", ":", "pattern", ":", "indices", "*", 0 }; - declare_native_rule( "regex", "transform", args, regex_transform, 2 ); - } -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/sequence.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/sequence.c b/ext/kenlm/jam-files/engine/modules/sequence.c deleted file mode 100644 index 08ed305..0000000 --- a/ext/kenlm/jam-files/engine/modules/sequence.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright Vladimir Prus 2003. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "../native.h" -#include "../object.h" -#include "../lists.h" -#include "../compile.h" - -#include <stdlib.h> - - -#ifndef max -# define max(a,b) ((a)>(b)?(a):(b)) -#endif - - -LIST * sequence_select_highest_ranked( FRAME * frame, int flags ) -{ - /* Returns all of 'elements' for which corresponding element in parallel */ - /* list 'rank' is equal to the maximum value in 'rank'. */ - - LIST * const elements = lol_get( frame->args, 0 ); - LIST * const rank = lol_get( frame->args, 1 ); - - LIST * result = L0; - int highest_rank = -1; - - { - LISTITER iter = list_begin( rank ); - LISTITER const end = list_end( rank ); - for ( ; iter != end; iter = list_next( iter ) ) - { - int const current = atoi( object_str( list_item( iter ) ) ); - highest_rank = max( highest_rank, current ); - } - } - - { - LISTITER iter = list_begin( rank ); - LISTITER const end = list_end( rank ); - LISTITER elements_iter = list_begin( elements ); - LISTITER const elements_end = list_end( elements ); - for ( ; iter != end; iter = list_next( iter ), elements_iter = - list_next( elements_iter ) ) - if ( atoi( object_str( list_item( iter ) ) ) == highest_rank ) - result = list_push_back( result, object_copy( list_item( - elements_iter ) ) ); - } - - return result; -} - -LIST * sequence_transform( FRAME * frame, int flags ) -{ - LIST * function = lol_get( frame->args, 0 ); - LIST * sequence = lol_get( frame->args, 1 ); - LIST * result = L0; - OBJECT * function_name = list_front( function ); - LISTITER args_begin = list_next( list_begin( function ) ), args_end = list_end( function ); - LISTITER iter = list_begin( sequence ), end = list_end( sequence ); - RULE * rule = bindrule( function_name, frame->prev->module ); - - for ( ; iter != end; iter = list_next( iter ) ) - { - FRAME inner[ 1 ]; - - frame_init( inner ); - inner->prev = frame; - inner->prev_user = frame->prev_user; - inner->module = frame->prev->module; - - lol_add( inner->args, list_push_back( list_copy_range( function, args_begin, args_end ), object_copy( list_item( iter ) ) ) ); - result = list_append( result, evaluate_rule( rule, function_name, inner ) ); - - frame_free( inner ); - } - - return result; -} - -void init_sequence() -{ - { - char const * args[] = { "elements", "*", ":", "rank", "*", 0 }; - declare_native_rule( "sequence", "select-highest-ranked", args, - sequence_select_highest_ranked, 1 ); - } - { - char const * args[] = { "function", "+", ":", "sequence", "*", 0 }; - declare_native_rule( "sequence", "transform", args, - sequence_transform, 1 ); - } -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/modules/set.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/modules/set.c b/ext/kenlm/jam-files/engine/modules/set.c deleted file mode 100644 index 77a314d..0000000 --- a/ext/kenlm/jam-files/engine/modules/set.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright Vladimir Prus 2003. Distributed under the Boost */ -/* Software License, Version 1.0. (See accompanying */ -/* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ - -#include "../native.h" -#include "../object.h" - -/* - local result = ; - local element ; - for element in $(B) - { - if ! ( $(element) in $(A) ) - { - result += $(element) ; - } - } - return $(result) ; -*/ -LIST *set_difference( FRAME *frame, int flags ) -{ - - LIST* b = lol_get( frame->args, 0 ); - LIST* a = lol_get( frame->args, 1 ); - - LIST* result = L0; - LISTITER iter = list_begin( b ), end = list_end( b ); - for( ; iter != end; iter = list_next( iter ) ) - { - if (!list_in(a, list_item(iter))) - result = list_push_back(result, object_copy(list_item(iter))); - } - return result; -} - -void init_set() -{ - { - const char* args[] = { "B", "*", ":", "A", "*", 0 }; - declare_native_rule("set", "difference", args, set_difference, 1); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/native.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/native.c b/ext/kenlm/jam-files/engine/native.c deleted file mode 100644 index 68828aa..0000000 --- a/ext/kenlm/jam-files/engine/native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2003. Vladimir Prus - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "native.h" - -#include "hash.h" - -#include <assert.h> - - -void declare_native_rule( char const * module, char const * rule, - char const * * args, LIST * (*f)( FRAME *, int ), int version ) -{ - OBJECT * const module_obj = module ? object_new( module ) : 0 ; - module_t * m = bindmodule( module_obj ); - if ( module_obj ) - object_free( module_obj ); - if ( !m->native_rules ) - m->native_rules = hashinit( sizeof( native_rule_t ), "native rules" ); - - { - OBJECT * const name = object_new( rule ); - int found; - native_rule_t * const np = (native_rule_t *)hash_insert( - m->native_rules, name, &found ); - np->name = name; - assert( !found ); - np->procedure = function_builtin( f, 0, args ); - np->version = version; - } -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/native.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/native.h b/ext/kenlm/jam-files/engine/native.h deleted file mode 100644 index 6d38d01..0000000 --- a/ext/kenlm/jam-files/engine/native.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2003. David Abrahams - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -#ifndef NATIVE_H_VP_2003_12_09 -#define NATIVE_H_VP_2003_12_09 - -#include "function.h" -#include "frames.h" -#include "lists.h" -#include "object.h" - -typedef struct native_rule_t -{ - OBJECT * name; - FUNCTION * procedure; - - /* Version of the interface that the native rule provides. It is possible - * that we want to change the set parameter for existing native rule. In - * that case, version number should be incremented so Boost.Build can check - * for the version it relies on. - * - * Versions are numbered from 1. - */ - int version; -} native_rule_t; -/* MSVC debugger gets confused unless the native_rule_t typedef is provided. */ - -void declare_native_rule( char const * module, char const * rule, - char const * * args, LIST * (*f)( FRAME *, int ), int version ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/object.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/object.c b/ext/kenlm/jam-files/engine/object.c deleted file mode 100644 index ef46e4a..0000000 --- a/ext/kenlm/jam-files/engine/object.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * Copyright 2011 Steven Watanabe - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * object.c - object manipulation routines - * - * External functions: - * object_new() - create an object from a string - * object_new_range() - create an object from a string of given length - * object_copy() - return a copy of an object - * object_free() - free an object - * object_str() - get the string value of an object - * object_done() - free string tables - * - * This implementation builds a hash table of all strings, so that multiple - * calls of object_new() on the same string allocate memory for the string once. - * Strings are never actually freed. - */ - -#include "jam.h" -#include "object.h" - -#include <assert.h> -#include <stddef.h> -#include <stdlib.h> - - -#define OBJECT_MAGIC 0xa762e0e3u - -#ifndef object_copy - -struct hash_header -{ -#ifndef NDEBUG - unsigned int magic; -#endif - unsigned int hash; - struct hash_item * next; -}; - -#endif - -struct hash_item -{ - struct hash_header header; - char data[ 1 ]; -}; - -#define ALLOC_ALIGNMENT (sizeof(struct hash_item) - sizeof(struct hash_header)) - -typedef struct string_set -{ - unsigned int num; - unsigned int size; - struct hash_item * * data; -} string_set; - -static string_set strhash; -static int strtotal = 0; -static int strcount_in = 0; -static int strcount_out = 0; - - -/* - * Immortal string allocator implementation speeds string allocation and cuts - * down on internal fragmentation. - */ - -#define STRING_BLOCK 4096 -typedef struct strblock -{ - struct strblock * next; - char data[ STRING_BLOCK ]; -} strblock; - -static strblock * strblock_chain = 0; - -/* Storage remaining in the current strblock */ -static char * storage_start = 0; -static char * storage_finish = 0; - - -/* - * allocate() - Allocate n bytes of immortal string storage. - */ - -static char * allocate( size_t n ) -{ -#ifdef BJAM_NEWSTR_NO_ALLOCATE - return (char *)BJAM_MALLOC( n ); -#else - /* See if we can grab storage from an existing block. */ - size_t remaining = storage_finish - storage_start; - n = ( ( n + ALLOC_ALIGNMENT - 1 ) / ALLOC_ALIGNMENT ) * ALLOC_ALIGNMENT; - if ( remaining >= n ) - { - char * result = storage_start; - storage_start += n; - return result; - } - else /* Must allocate a new block. */ - { - strblock * new_block; - size_t nalloc = n; - if ( nalloc < STRING_BLOCK ) - nalloc = STRING_BLOCK; - - /* Allocate a new block and link into the chain. */ - new_block = (strblock *)BJAM_MALLOC( offsetof( strblock, data[ 0 ] ) + - nalloc * sizeof( new_block->data[ 0 ] ) ); - if ( new_block == 0 ) - return 0; - new_block->next = strblock_chain; - strblock_chain = new_block; - - /* Take future allocations out of the larger remaining space. */ - if ( remaining < nalloc - n ) - { - storage_start = new_block->data + n; - storage_finish = new_block->data + nalloc; - } - return new_block->data; - } -#endif -} - - -static unsigned int hash_keyval( char const * key, int const size ) -{ - unsigned int const magic = 2147059363; - unsigned int hash = 0; - - unsigned int i; - for ( i = 0; i < size / sizeof( unsigned int ); ++i ) - { - unsigned int val; - memcpy( &val, key, sizeof( unsigned int ) ); - hash = hash * magic + val; - key += sizeof( unsigned int ); - } - - { - unsigned int val = 0; - memcpy( &val, key, size % sizeof( unsigned int ) ); - hash = hash * magic + val; - } - - return hash + ( hash >> 17 ); -} - - -static void string_set_init( string_set * set ) -{ - set->size = 0; - set->num = 4; - set->data = (struct hash_item * *)BJAM_MALLOC( set->num * sizeof( struct hash_item * ) ); - memset( set->data, 0, set->num * sizeof( struct hash_item * ) ); -} - - -static void string_set_done( string_set * set ) -{ - BJAM_FREE( set->data ); -} - - -static void string_set_resize( string_set * set ) -{ - unsigned i; - string_set new_set; - new_set.num = set->num * 2; - new_set.size = set->size; - new_set.data = (struct hash_item * *)BJAM_MALLOC( sizeof( struct hash_item * - ) * new_set.num ); - memset( new_set.data, 0, sizeof( struct hash_item * ) * new_set.num ); - for ( i = 0; i < set->num; ++i ) - { - while ( set->data[ i ] ) - { - struct hash_item * temp = set->data[ i ]; - unsigned pos = temp->header.hash % new_set.num; - set->data[ i ] = temp->header.next; - temp->header.next = new_set.data[ pos ]; - new_set.data[ pos ] = temp; - } - } - BJAM_FREE( set->data ); - *set = new_set; -} - - -static char const * string_set_insert( string_set * set, char const * string, - int const size ) -{ - unsigned hash = hash_keyval( string, size ); - unsigned pos = hash % set->num; - - struct hash_item * result; - - for ( result = set->data[ pos ]; result; result = result->header.next ) - if ( !strncmp( result->data, string, size ) && !result->data[ size ] ) - return result->data; - - if ( set->size >= set->num ) - { - string_set_resize( set ); - pos = hash % set->num; - } - - result = (struct hash_item *)allocate( sizeof( struct hash_header ) + size + - 1 ); - result->header.hash = hash; - result->header.next = set->data[ pos ]; -#ifndef NDEBUG - result->header.magic = OBJECT_MAGIC; -#endif - memcpy( result->data, string, size ); - result->data[ size ] = '\0'; - assert( hash_keyval( result->data, size ) == result->header.hash ); - set->data[ pos ] = result; - strtotal += size + 1; - ++set->size; - - return result->data; -} - - -static struct hash_item * object_get_item( OBJECT * obj ) -{ - return (struct hash_item *)( (char *)obj - offsetof( struct hash_item, data - ) ); -} - - -static void object_validate( OBJECT * obj ) -{ - assert( obj ); - assert( object_get_item( obj )->header.magic == OBJECT_MAGIC ); -} - - -/* - * object_new_range() - create an object from a string of given length - */ - -OBJECT * object_new_range( char const * const string, int const size ) -{ - ++strcount_in; - -#ifdef BJAM_NO_MEM_CACHE - { - struct hash_item * const m = (struct hash_item *)BJAM_MALLOC( sizeof( - struct hash_header ) + size + 1 ); - strtotal += size + 1; - memcpy( m->data, string, size ); - m->data[ size ] = '\0'; - m->header.magic = OBJECT_MAGIC; - return (OBJECT *)m->data; - } -#else - if ( !strhash.data ) - string_set_init( &strhash ); - return (OBJECT *)string_set_insert( &strhash, string, size ); -#endif -} - - -/* - * object_new() - create an object from a string - */ - -OBJECT * object_new( char const * const string ) -{ - return object_new_range( string, strlen( string ) ); -} - - -#ifndef object_copy - -/* - * object_copy() - return a copy of an object - */ - -OBJECT * object_copy( OBJECT * obj ) -{ - object_validate( obj ); -#ifdef BJAM_NO_MEM_CACHE - return object_new( object_str( obj ) ); -#else - ++strcount_in; - return obj; -#endif -} - - -/* - * object_free() - free an object - */ - -void object_free( OBJECT * obj ) -{ - object_validate( obj ); -#ifdef BJAM_NO_MEM_CACHE - BJAM_FREE( object_get_item( obj ) ); -#endif - ++strcount_out; -} - - -/* - * object_str() - return the OBJECT's internal C string - */ - -char const * object_str( OBJECT * obj ) -{ - object_validate( obj ); - return (char const *)obj; -} - - -/* - * object_equal() - compare two objects - */ - -int object_equal( OBJECT * lhs, OBJECT * rhs ) -{ - object_validate( lhs ); - object_validate( rhs ); -#ifdef BJAM_NO_MEM_CACHE - return !strcmp( object_str( lhs ), object_str( rhs ) ); -#else - assert( ( lhs == rhs ) == !strcmp( object_str( lhs ), object_str( rhs ) ) ); - return lhs == rhs; -#endif -} - - -/* - * object_hash() - returns the hash value of an object - */ - -unsigned int object_hash( OBJECT * obj ) -{ - object_validate( obj ); -#ifdef BJAM_NO_MEM_CACHE - return hash_keyval( object_str( obj ), strlen( object_str( obj ) ) ); -#else - return object_get_item( obj )->header.hash; -#endif -} - -#endif - -/* - * object_done() - free string tables. - */ - -void object_done() -{ -#ifdef BJAM_NEWSTR_NO_ALLOCATE - unsigned i; - for ( i = 0; i < strhash.num; ++i ) - { - while ( strhash.data[ i ] ) - { - struct hash_item * item = strhash.data[ i ]; - strhash.data[ i ] = item->header.next; - BJAM_FREE( item ); - } - } -#else - /* Reclaim string blocks. */ - while ( strblock_chain ) - { - strblock * const n = strblock_chain->next; - BJAM_FREE( strblock_chain ); - strblock_chain = n; - } -#endif - - string_set_done( &strhash ); - - if ( DEBUG_MEM ) - { - printf( "%dK in strings\n", strtotal / 1024 ); - if ( strcount_in != strcount_out ) - printf( "--- %d strings of %d dangling\n", strcount_in - - strcount_out, strcount_in ); - } -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/object.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/object.h b/ext/kenlm/jam-files/engine/object.h deleted file mode 100644 index cabb9f6..0000000 --- a/ext/kenlm/jam-files/engine/object.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2011 Steven Watanabe - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * object.h - object manipulation routines - */ - -#ifndef BOOST_JAM_OBJECT_H -#define BOOST_JAM_OBJECT_H - -typedef struct _object OBJECT; - -OBJECT * object_new( char const * const ); -OBJECT * object_new_range( char const * const, int const size ); -void object_done( void ); - -#if defined(NDEBUG) && !defined(BJAM_NO_MEM_CACHE) - -struct hash_header -{ - unsigned int hash; - struct hash_item * next; -}; - -#define object_str( obj ) ((char const *)(obj)) -#define object_copy( obj ) (obj) -#define object_free( obj ) ((void)0) -#define object_equal( lhs, rhs ) ((lhs) == (rhs)) -#define object_hash( obj ) (((struct hash_header *)((char *)(obj) - sizeof(struct hash_header)))->hash) - -#else - -char const * object_str ( OBJECT * ); -OBJECT * object_copy ( OBJECT * ); -void object_free ( OBJECT * ); -int object_equal( OBJECT *, OBJECT * ); -unsigned int object_hash ( OBJECT * ); - -#endif - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/option.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/option.c b/ext/kenlm/jam-files/engine/option.c deleted file mode 100644 index d25e5e8..0000000 --- a/ext/kenlm/jam-files/engine/option.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -# include "jam.h" -# include "option.h" - -/* - * option.c - command line option processing - * - * {o >o - * \<>) "Process command line options as defined in <option.h>. - * Return the number of argv[] elements used up by options, - * or -1 if an invalid option flag was given or an argument - * was supplied for an option that does not require one." - */ - -int getoptions( int argc, char * * argv, char * opts, bjam_option * optv ) -{ - int i; - int optc = N_OPTS; - - memset( (char *)optv, '\0', sizeof( *optv ) * N_OPTS ); - - for ( i = 0; i < argc; ++i ) - { - char *arg; - - if ( ( argv[ i ][ 0 ] != '-' ) || - ( ( argv[ i ][ 1 ] != '-' ) && !isalpha( argv[ i ][ 1 ] ) ) ) - continue; - - if ( !optc-- ) - { - printf( "too many options (%d max)\n", N_OPTS ); - return -1; - } - - for ( arg = &argv[ i ][ 1 ]; *arg; ++arg ) - { - char * f; - - for ( f = opts; *f; ++f ) - if ( *f == *arg ) - break; - - if ( !*f ) - { - printf( "Invalid option: -%c\n", *arg ); - return -1; - } - - optv->flag = *f; - - if ( f[ 1 ] != ':' ) - { - optv++->val = "true"; - } - else if ( arg[ 1 ] ) - { - optv++->val = &arg[1]; - break; - } - else if ( ++i < argc ) - { - optv++->val = argv[ i ]; - break; - } - else - { - printf( "option: -%c needs argument\n", *f ); - return -1; - } - } - } - - return i; -} - - -/* - * Name: getoptval() - find an option given its character. - */ - -char * getoptval( bjam_option * optv, char opt, int subopt ) -{ - int i; - for ( i = 0; i < N_OPTS; ++i, ++optv ) - if ( ( optv->flag == opt ) && !subopt-- ) - return optv->val; - return 0; -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/option.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/option.h b/ext/kenlm/jam-files/engine/option.h deleted file mode 100644 index 7c9c747..0000000 --- a/ext/kenlm/jam-files/engine/option.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * option.h - command line option processing - * - * {o >o - * \ -) "Command line option." - */ - -typedef struct bjam_option -{ - char flag; /* filled in by getoption() */ - char * val; /* set to random address if true */ -} bjam_option; - -#define N_OPTS 256 - -int getoptions( int argc, char * * argv, char * opts, bjam_option * optv ); -char * getoptval( bjam_option * optv, char opt, int subopt ); http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/output.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/output.c b/ext/kenlm/jam-files/engine/output.c deleted file mode 100644 index eaaee43..0000000 --- a/ext/kenlm/jam-files/engine/output.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2007 Rene Rivera - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) -*/ - -#include "jam.h" -#include "output.h" - -#include <stdio.h> - - -#define bjam_out (stdout) -#define bjam_err (stderr) - -static void out_( char const * data, FILE * const io ) -{ - while ( *data ) - { - size_t const len = strcspn( data, "\r" ); - data += fwrite( data, 1, len, io ); - if ( *data == '\r' ) ++data; - } -} - - -void out_action -( - char const * const action, - char const * const target, - char const * const command, - char const * const out_data, - char const * const err_data, - int const exit_reason -) -{ - /* Print out the action + target line, if the action is quiet the action - * should be null. - */ - if ( action ) - fprintf( bjam_out, "%s %s\n", action, target ); - - /* Print out the command executed if given -d+2. */ - if ( DEBUG_EXEC ) - { - fputs( command, bjam_out ); - fputc( '\n', bjam_out ); - } - - /* Print out the command executed to the command stream. */ - if ( globs.cmdout ) - fputs( command, globs.cmdout ); - - /* If the process expired, make user aware with an explicit message, but do - * this only for non-quiet actions. - */ - if ( exit_reason == EXIT_TIMEOUT && action ) - fprintf( bjam_out, "%ld second time limit exceeded\n", globs.timeout ); - - /* Print out the command output, if requested, or if the program failed, but - * only output for non-quiet actions. - */ - if ( action || exit_reason != EXIT_OK ) - { - if ( out_data && - ( ( globs.pipe_action & 1 /* STDOUT_FILENO */ ) || - ( globs.pipe_action == 0 ) ) ) - out_( out_data, bjam_out ); - if ( err_data && ( globs.pipe_action & 2 /* STDERR_FILENO */ ) ) - out_( err_data, bjam_err ); - } - - fflush( bjam_out ); - fflush( bjam_err ); - fflush( globs.cmdout ); -} - - -OBJECT * outf_int( int const value ) -{ - char buffer[ 50 ]; - sprintf( buffer, "%i", value ); - return object_new( buffer ); -} - - -OBJECT * outf_double( double const value ) -{ - char buffer[ 50 ]; - sprintf( buffer, "%f", value ); - return object_new( buffer ); -} - - -OBJECT * outf_time( timestamp const * const time ) -{ - return object_new( timestamp_str( time ) ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/output.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/output.h b/ext/kenlm/jam-files/engine/output.h deleted file mode 100644 index 186e867..0000000 --- a/ext/kenlm/jam-files/engine/output.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright 2007 Rene Rivera - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) -*/ - -#ifndef BJAM_OUTPUT_H -#define BJAM_OUTPUT_H - -#include "object.h" -#include "timestamp.h" - -#define EXIT_OK 0 -#define EXIT_FAIL 1 -#define EXIT_TIMEOUT 2 - -void out_action( - char const * const action, - char const * const target, - char const * const command, - char const * const out_data, - char const * const err_data, - int const exit_reason -); - -OBJECT * outf_int( int const value ); -OBJECT * outf_double( double const value ); -OBJECT * outf_time( timestamp const * const value ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/parse.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/parse.c b/ext/kenlm/jam-files/engine/parse.c deleted file mode 100644 index 02412e0..0000000 --- a/ext/kenlm/jam-files/engine/parse.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 1993, 2000 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* This file is ALSO: - * Copyright 2001-2004 David Abrahams. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "jam.h" -#include "lists.h" -#include "parse.h" -#include "scan.h" -#include "object.h" -#include "modules.h" -#include "frames.h" -#include "function.h" - -/* - * parse.c - make and destroy parse trees as driven by the parser - * - * 09/07/00 (seiwald) - ref count on PARSE to avoid freeing when used, - * as per Matt Armstrong. - * 09/11/00 (seiwald) - structure reworked to reflect that (*func)() - * returns a LIST *. - */ - -static PARSE * yypsave; - -void parse_file( OBJECT * f, FRAME * frame ) -{ - /* Suspend scan of current file and push this new file in the stream. */ - yyfparse( f ); - - /* Now parse each block of rules and execute it. Execute it outside of the - * parser so that recursive calls to yyrun() work (no recursive yyparse's). - */ - - for ( ; ; ) - { - PARSE * p; - FUNCTION * func; - - /* Filled by yyparse() calling parse_save(). */ - yypsave = 0; - - /* If parse error or empty parse, outta here. */ - if ( yyparse() || !( p = yypsave ) ) - break; - - /* Run the parse tree. */ - func = function_compile( p ); - parse_free( p ); - list_free( function_run( func, frame, stack_global() ) ); - function_free( func ); - } -} - - -void parse_save( PARSE * p ) -{ - yypsave = p; -} - - -PARSE * parse_make( - int type, - PARSE * left, - PARSE * right, - PARSE * third, - OBJECT * string, - OBJECT * string1, - int num ) -{ - PARSE * p = (PARSE *)BJAM_MALLOC( sizeof( PARSE ) ); - - p->type = type; - p->left = left; - p->right = right; - p->third = third; - p->string = string; - p->string1 = string1; - p->num = num; - p->refs = 1; - p->rulename = 0; - - if ( left ) - { - p->file = object_copy( left->file ); - p->line = left->line; - } - else - { - yyinput_last_read_token( &p->file, &p->line ); - p->file = object_copy( p->file ); - } - - return p; -} - - -void parse_refer( PARSE * p ) -{ - ++p->refs; -} - - -void parse_free( PARSE * p ) -{ - if ( --p->refs ) - return; - - if ( p->string ) - object_free( p->string ); - if ( p->string1 ) - object_free( p->string1 ); - if ( p->left ) - parse_free( p->left ); - if ( p->right ) - parse_free( p->right ); - if ( p->third ) - parse_free( p->third ); - if ( p->rulename ) - object_free( p->rulename ); - if ( p->file ) - object_free( p->file ); - - BJAM_FREE( (char *)p ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/parse.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/parse.h b/ext/kenlm/jam-files/engine/parse.h deleted file mode 100644 index bb47af6..0000000 --- a/ext/kenlm/jam-files/engine/parse.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 1993, 2000 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* This file is ALSO: - * Copyright 2001-2004 David Abrahams. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * parse.h - make and destroy parse trees as driven by the parser. - */ - -#ifndef PARSE_DWA20011020_H -#define PARSE_DWA20011020_H - -#include "frames.h" -#include "lists.h" -#include "modules.h" - - -#define PARSE_APPEND 0 -#define PARSE_FOREACH 1 -#define PARSE_IF 2 -#define PARSE_EVAL 3 -#define PARSE_INCLUDE 4 -#define PARSE_LIST 5 -#define PARSE_LOCAL 6 -#define PARSE_MODULE 7 -#define PARSE_CLASS 8 -#define PARSE_NULL 9 -#define PARSE_ON 10 -#define PARSE_RULE 11 -#define PARSE_RULES 12 -#define PARSE_SET 13 -#define PARSE_SETCOMP 14 -#define PARSE_SETEXEC 15 -#define PARSE_SETTINGS 16 -#define PARSE_SWITCH 17 -#define PARSE_WHILE 18 - - -/* - * Parse tree node. - */ - -typedef struct _PARSE PARSE; - -struct _PARSE { - int type; - PARSE * left; - PARSE * right; - PARSE * third; - OBJECT * string; - OBJECT * string1; - int num; - int refs; - OBJECT * rulename; - OBJECT * file; - int line; -}; - -void parse_file( OBJECT *, FRAME * ); -void parse_save( PARSE * ); - -PARSE * parse_make( int type, PARSE * left, PARSE * right, PARSE * third, - OBJECT * string, OBJECT * string1, int num ); - -void parse_refer( PARSE * ); -void parse_free( PARSE * ); -LIST * parse_evaluate( PARSE *, FRAME * ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/patchlevel.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/patchlevel.h b/ext/kenlm/jam-files/engine/patchlevel.h deleted file mode 100644 index 60b0d61..0000000 --- a/ext/kenlm/jam-files/engine/patchlevel.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* Keep JAMVERSYM in sync with VERSION. */ -/* It can be accessed as $(JAMVERSION) in the Jamfile. */ - -#define VERSION_MAJOR 2011 -#define VERSION_MINOR 12 -#define VERSION_PATCH 1 -#define VERSION_MAJOR_SYM "2011" -#define VERSION_MINOR_SYM "12" -#define VERSION_PATCH_SYM "01" -#define VERSION "2011.12.1" -#define JAMVERSYM "JAMVERSION=2011.12" http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/pathnt.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/pathnt.c b/ext/kenlm/jam-files/engine/pathnt.c deleted file mode 100644 index 8abf8fe..0000000 --- a/ext/kenlm/jam-files/engine/pathnt.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* This file is ALSO: - * Copyright 2001-2004 David Abrahams. - * Copyright 2005 Rene Rivera. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * pathnt.c - NT specific path manipulation support - */ - -#include "pathsys.h" - -#include "hash.h" - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -#include <assert.h> -#include <stdlib.h> - - -/* The definition of this in winnt.h is not ANSI-C compatible. */ -#undef INVALID_FILE_ATTRIBUTES -#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) - - -typedef struct path_key_entry -{ - OBJECT * path; - OBJECT * key; - int exists; -} path_key_entry; - -static struct hash * path_key_cache; - - -/* - * path_get_process_id_() - */ - -unsigned long path_get_process_id_( void ) -{ - return GetCurrentProcessId(); -} - - -/* - * path_get_temp_path_() - */ - -void path_get_temp_path_( string * buffer ) -{ - DWORD pathLength = GetTempPathA( 0, NULL ); - string_reserve( buffer, pathLength ); - pathLength = GetTempPathA( pathLength, buffer->value ); - buffer->value[ pathLength - 1 ] = '\0'; - buffer->size = pathLength - 1; -} - - -/* - * canonicWindowsPath() - convert a given path into its canonic/long format - * - * Appends the canonic path to the end of the given 'string' object. - * - * FIXME: This function is still work-in-progress as it originally did not - * necessarily return the canonic path format (could return slightly different - * results for certain equivalent path strings) and could accept paths pointing - * to non-existing file system entities as well. - * - * Caches results internally, automatically caching any parent paths it has to - * convert to their canonic format in the process. - * - * Prerequisites: - * - path given in normalized form, i.e. all of its folder separators have - * already been converted into '\\' - * - path_key_cache path/key mapping cache object already initialized - */ - -static int canonicWindowsPath( char const * const path, int const path_length, - string * const out ) -{ - char const * last_element; - unsigned long saved_size; - char const * p; - int missing_parent; - - /* This is only called via path_key(), which initializes the cache. */ - assert( path_key_cache ); - - if ( !path_length ) - return 1; - - if ( path_length == 1 && path[ 0 ] == '\\' ) - { - string_push_back( out, '\\' ); - return 1; - } - - if ( path[ 1 ] == ':' && - ( path_length == 2 || - ( path_length == 3 && path[ 2 ] == '\\' ) ) ) - { - string_push_back( out, toupper( path[ 0 ] ) ); - string_push_back( out, ':' ); - string_push_back( out, '\\' ); - return 1; - } - - /* Find last '\\'. */ - for ( p = path + path_length - 1; p >= path && *p != '\\'; --p ); - last_element = p + 1; - - /* Special case '\' && 'D:\' - include trailing '\'. */ - if ( p == path || - p == path + 2 && path[ 1 ] == ':' ) - ++p; - - missing_parent = 0; - - if ( p >= path ) - { - char const * const dir = path; - int const dir_length = p - path; - OBJECT * const dir_obj = object_new_range( dir, dir_length ); - int found; - path_key_entry * const result = (path_key_entry *)hash_insert( - path_key_cache, dir_obj, &found ); - if ( !found ) - { - result->path = dir_obj; - if ( canonicWindowsPath( dir, dir_length, out ) ) - result->exists = 1; - else - result->exists = 0; - result->key = object_new( out->value ); - } - else - { - object_free( dir_obj ); - string_append( out, object_str( result->key ) ); - } - if ( !result->exists ) - missing_parent = 1; - } - - if ( out->size && out->value[ out->size - 1 ] != '\\' ) - string_push_back( out, '\\' ); - - saved_size = out->size; - string_append_range( out, last_element, path + path_length ); - - if ( !missing_parent ) - { - char const * const n = last_element; - int const n_length = path + path_length - n; - if ( !( n_length == 1 && n[ 0 ] == '.' ) - && !( n_length == 2 && n[ 0 ] == '.' && n[ 1 ] == '.' ) ) - { - WIN32_FIND_DATA fd; - HANDLE const hf = FindFirstFileA( out->value, &fd ); - if ( hf != INVALID_HANDLE_VALUE ) - { - string_truncate( out, saved_size ); - string_append( out, fd.cFileName ); - FindClose( hf ); - return 1; - } - } - } - return 0; -} - - -/* - * normalize_path() - 'normalizes' the given path for the path-key mapping - * - * The resulting string has nothing to do with 'normalized paths' as used in - * Boost Jam build scripts and the built-in NORMALIZE_PATH rule. It is intended - * to be used solely as an intermediate step when mapping an arbitrary path to - * its canonical representation. - * - * When choosing the intermediate string the important things are for it to be - * inexpensive to calculate and any two paths having different canonical - * representations also need to have different calculated intermediate string - * representations. Any implemented additional rules serve only to simplify - * constructing the canonical path representation from the calculated - * intermediate string. - * - * Implemented returned path rules: - * - use backslashes as path separators - * - lowercase only (since all Windows file systems are case insensitive) - * - trim trailing path separator except in case of a root path, i.e. 'X:\' - */ - -static void normalize_path( string * path ) -{ - char * s; - for ( s = path->value; s < path->value + path->size; ++s ) - *s = *s == '/' ? '\\' : tolower( *s ); - /* Strip trailing "/". */ - if ( path->size && path->size != 3 && path->value[ path->size - 1 ] == '\\' - ) - string_pop_back( path ); -} - - -static path_key_entry * path_key( OBJECT * const path, - int const known_to_be_canonic ) -{ - path_key_entry * result; - int found; - - if ( !path_key_cache ) - path_key_cache = hashinit( sizeof( path_key_entry ), "path to key" ); - - result = (path_key_entry *)hash_insert( path_key_cache, path, &found ); - if ( !found ) - { - OBJECT * normalized; - int normalized_size; - path_key_entry * nresult; - result->path = path; - { - string buf[ 1 ]; - string_copy( buf, object_str( path ) ); - normalize_path( buf ); - normalized = object_new( buf->value ); - normalized_size = buf->size; - string_free( buf ); - } - nresult = (path_key_entry *)hash_insert( path_key_cache, normalized, - &found ); - if ( !found || nresult == result ) - { - nresult->path = normalized; - if ( known_to_be_canonic ) - nresult->key = object_copy( path ); - else - { - string canonic_path[ 1 ]; - string_new( canonic_path ); - if ( canonicWindowsPath( object_str( normalized ), normalized_size, - canonic_path ) ) - nresult->exists = 1; - else - nresult->exists = 0; - nresult->key = object_new( canonic_path->value ); - string_free( canonic_path ); - } - } - else - object_free( normalized ); - if ( nresult != result ) - { - result->path = object_copy( path ); - result->key = object_copy( nresult->key ); - result->exists = nresult->exists; - } - } - - return result; -} - - -void path_register_key( OBJECT * canonic_path ) -{ - path_key( canonic_path, 1 ); -} - - -OBJECT * path_as_key( OBJECT * path ) -{ - return object_copy( path_key( path, 0 )->key ); -} - - -static void free_path_key_entry( void * xentry, void * const data ) -{ - path_key_entry * const entry = (path_key_entry *)xentry; - object_free( entry->path ); - object_free( entry->key ); -} - - -void path_done( void ) -{ - if ( path_key_cache ) - { - hashenumerate( path_key_cache, &free_path_key_entry, 0 ); - hashdone( path_key_cache ); - } -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/pathsys.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/pathsys.c b/ext/kenlm/jam-files/engine/pathsys.c deleted file mode 100644 index ae4e6e0..0000000 --- a/ext/kenlm/jam-files/engine/pathsys.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* This file is ALSO: - * Copyright 2001-2004 David Abrahams. - * Copyright 2005 Rene Rivera. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * pathsys.c - platform independent path manipulation support - * - * External routines: - * path_build() - build a filename given dir/base/suffix/member - * path_parent() - make a PATHNAME point to its parent dir - * path_parse() - split a file name into dir/base/suffix/member - * path_tmpdir() - returns the system dependent temporary folder path - * path_tmpfile() - returns a new temporary path - * path_tmpnam() - returns a new temporary name - * - * File_parse() and path_build() just manipulate a string and a structure; - * they do not make system calls. - */ - -#include "jam.h" -#include "pathsys.h" - -#include "filesys.h" - -#include <stdlib.h> -#include <time.h> - - -/* Internal OS specific implementation details - have names ending with an - * underscore and are expected to be implemented in an OS specific pathXXX.c - * module. - */ -unsigned long path_get_process_id_( void ); -void path_get_temp_path_( string * buffer ); - - -/* - * path_parse() - split a file name into dir/base/suffix/member - */ - -void path_parse( char const * file, PATHNAME * f ) -{ - char const * p; - char const * q; - char const * end; - - memset( (char *)f, 0, sizeof( *f ) ); - - /* Look for '<grist>'. */ - - if ( ( file[ 0 ] == '<' ) && ( p = strchr( file, '>' ) ) ) - { - f->f_grist.ptr = file; - f->f_grist.len = p - file; - file = p + 1; - } - - /* Look for 'dir/'. */ - - p = strrchr( file, '/' ); - -#if PATH_DELIM == '\\' - /* On NT, look for dir\ as well */ - { - char * const p1 = strrchr( p ? p + 1 : file, '\\' ); - if ( p1 ) p = p1; - } -#endif - - if ( p ) - { - f->f_dir.ptr = file; - f->f_dir.len = p - file; - - /* Special case for / - dirname is /, not "" */ - if ( !f->f_dir.len ) - ++f->f_dir.len; - -#if PATH_DELIM == '\\' - /* Special case for D:/ - dirname is D:/, not "D:" */ - if ( f->f_dir.len == 2 && file[ 1 ] == ':' ) - ++f->f_dir.len; -#endif - - file = p + 1; - } - - end = file + strlen( file ); - - /* Look for '(member)'. */ - if ( ( p = strchr( file, '(' ) ) && ( end[ -1 ] == ')' ) ) - { - f->f_member.ptr = p + 1; - f->f_member.len = end - p - 2; - end = p; - } - - /* Look for '.suffix'. This would be memrchr(). */ - p = 0; - for ( q = file; ( q = (char *)memchr( q, '.', end - q ) ); ++q ) - p = q; - if ( p ) - { - f->f_suffix.ptr = p; - f->f_suffix.len = end - p; - end = p; - } - - /* Leaves base. */ - f->f_base.ptr = file; - f->f_base.len = end - file; -} - - -/* - * is_path_delim() - true iff c is a path delimiter - */ - -static int is_path_delim( char const c ) -{ - return c == PATH_DELIM -#if PATH_DELIM == '\\' - || c == '/' -#endif - ; -} - - -/* - * as_path_delim() - convert c to a path delimiter if it is not one already - */ - -static char as_path_delim( char const c ) -{ - return is_path_delim( c ) ? c : PATH_DELIM; -} - - -/* - * path_build() - build a filename given dir/base/suffix/member - * - * To avoid changing slash direction on NT when reconstituting paths, instead of - * unconditionally appending PATH_DELIM we check the past-the-end character of - * the previous path element. If it is a path delimiter, we append that, and - * only append PATH_DELIM as a last resort. This heuristic is based on the fact - * that PATHNAME objects are usually the result of calling path_parse, which - * leaves the original slashes in the past-the-end position. Correctness depends - * on the assumption that all strings are zero terminated, so a past-the-end - * character will always be available. - * - * As an attendant patch, we had to ensure that backslashes are used explicitly - * in 'timestamp.c'. - */ - -void path_build( PATHNAME * f, string * file ) -{ - file_build1( f, file ); - - /* Do not prepend root if it is '.' or the directory is rooted. */ - if ( f->f_root.len - && !( f->f_root.len == 1 && f->f_root.ptr[ 0 ] == '.' ) - && !( f->f_dir.len && f->f_dir.ptr[ 0 ] == '/' ) -#if PATH_DELIM == '\\' - && !( f->f_dir.len && f->f_dir.ptr[ 0 ] == '\\' ) - && !( f->f_dir.len && f->f_dir.ptr[ 1 ] == ':' ) -#endif - ) - { - string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len - ); - /* If 'root' already ends with a path delimeter, do not add another one. - */ - if ( !is_path_delim( f->f_root.ptr[ f->f_root.len - 1 ] ) ) - string_push_back( file, as_path_delim( f->f_root.ptr[ f->f_root.len - ] ) ); - } - - if ( f->f_dir.len ) - string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len ); - - /* Put path separator between dir and file. */ - /* Special case for root dir: do not add another path separator. */ - if ( f->f_dir.len && ( f->f_base.len || f->f_suffix.len ) -#if PATH_DELIM == '\\' - && !( f->f_dir.len == 3 && f->f_dir.ptr[ 1 ] == ':' ) -#endif - && !( f->f_dir.len == 1 && is_path_delim( f->f_dir.ptr[ 0 ] ) ) ) - string_push_back( file, as_path_delim( f->f_dir.ptr[ f->f_dir.len ] ) ); - - if ( f->f_base.len ) - string_append_range( file, f->f_base.ptr, f->f_base.ptr + f->f_base.len - ); - - if ( f->f_suffix.len ) - string_append_range( file, f->f_suffix.ptr, f->f_suffix.ptr + - f->f_suffix.len ); - - if ( f->f_member.len ) - { - string_push_back( file, '(' ); - string_append_range( file, f->f_member.ptr, f->f_member.ptr + - f->f_member.len ); - string_push_back( file, ')' ); - } -} - - -/* - * path_parent() - make a PATHNAME point to its parent dir - */ - -void path_parent( PATHNAME * f ) -{ - f->f_base.ptr = f->f_suffix.ptr = f->f_member.ptr = ""; - f->f_base.len = f->f_suffix.len = f->f_member.len = 0; -} - - -/* - * path_tmpdir() - returns the system dependent temporary folder path - * - * Returned value is stored inside a static buffer and should not be modified. - * Returned value does *not* include a trailing path separator. - */ - -string const * path_tmpdir() -{ - static string buffer[ 1 ]; - static int have_result; - if ( !have_result ) - { - string_new( buffer ); - path_get_temp_path_( buffer ); - have_result = 1; - } - return buffer; -} - - -/* - * path_tmpnam() - returns a new temporary name - */ - -OBJECT * path_tmpnam( void ) -{ - char name_buffer[ 64 ]; - unsigned long const pid = path_get_process_id_(); - static unsigned long t; - if ( !t ) t = time( 0 ) & 0xffff; - t += 1; - sprintf( name_buffer, "jam%lx%lx.000", pid, t ); - return object_new( name_buffer ); -} - - -/* - * path_tmpfile() - returns a new temporary path - */ - -OBJECT * path_tmpfile( void ) -{ - OBJECT * result; - OBJECT * tmpnam; - - string file_path[ 1 ]; - string_copy( file_path, path_tmpdir()->value ); - string_push_back( file_path, PATH_DELIM ); - tmpnam = path_tmpnam(); - string_append( file_path, object_str( tmpnam ) ); - object_free( tmpnam ); - result = object_new( file_path->value ); - string_free( file_path ); - - return result; -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/pathsys.h ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/pathsys.h b/ext/kenlm/jam-files/engine/pathsys.h deleted file mode 100644 index 9b7a4ca..0000000 --- a/ext/kenlm/jam-files/engine/pathsys.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * pathsys.h - PATHNAME struct - */ - -/* - * PATHNAME - a name of a file, broken into <grist>dir/base/suffix(member) - * - * <grist> - salt to distinguish between targets that would otherwise have the - * same name - it never appears in the bound name of a target. - * - * (member) - archive member name: the syntax is arbitrary, but must agree in - * path_parse(), path_build() and the Jambase. - */ - -#ifndef PATHSYS_VP_20020211_H -#define PATHSYS_VP_20020211_H - -#include "object.h" -#include "strings.h" - - -typedef struct _pathpart -{ - char const * ptr; - int len; -} PATHPART; - -typedef struct _pathname -{ - PATHPART part[ 6 ]; - -#define f_grist part[ 0 ] -#define f_root part[ 1 ] -#define f_dir part[ 2 ] -#define f_base part[ 3 ] -#define f_suffix part[ 4 ] -#define f_member part[ 5 ] -} PATHNAME; - - -void path_build( PATHNAME *, string * file ); -void path_parse( char const * file, PATHNAME * ); -void path_parent( PATHNAME * ); - -/* Given a path, returns an object containing an equivalent path in canonical - * format that can be used as a unique key for that path. Equivalent paths such - * as a/b, A\B, and a\B on NT all yield the same key. - */ -OBJECT * path_as_key( OBJECT * path ); - -/* Called as an optimization when we know we have a path that is already in its - * canonical/long/key form. Avoids the need for some subsequent path_as_key() - * call to do a potentially expensive path conversion requiring access to the - * actual underlying file system. - */ -void path_register_key( OBJECT * canonic_path ); - -/* Returns a static pointer to the system dependent path to the temporary - * directory. NOTE: Does *not* include a trailing path separator. - */ -string const * path_tmpdir( void ); - -/* Returns a new temporary name. */ -OBJECT * path_tmpnam( void ); - -/* Returns a new temporary path. */ -OBJECT * path_tmpfile( void ); - -/* Give the first argument to 'main', return a full path to our executable. - * Returns null in the unlikely case it cannot be determined. Caller is - * responsible for freeing the string. - * - * Implemented in jam.c - */ -char * executable_path( char const * argv0 ); - -void path_done( void ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/pathunix.c ---------------------------------------------------------------------- diff --git a/ext/kenlm b/ext/kenlm new file mode 160000 index 0000000..56fdb5c --- /dev/null +++ b/ext/kenlm @@ -0,0 +1 @@ +Subproject commit 56fdb5c44fca34d5a2e07d96139c28fb163983c5 diff --git a/ext/kenlm/jam-files/engine/pathunix.c b/ext/kenlm/jam-files/engine/pathunix.c deleted file mode 100644 index 8ca0d18..0000000 --- a/ext/kenlm/jam-files/engine/pathunix.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* This file is ALSO: - * Copyright 2001-2004 David Abrahams. - * Copyright 2005 Rene Rivera. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * pathunix.c - UNIX specific path manipulation support - */ - -#include "pathsys.h" - -#include <stdlib.h> -#include <unistd.h> /* needed for getpid() */ - - -/* - * path_get_process_id_() - */ - -unsigned long path_get_process_id_( void ) -{ - return getpid(); -} - - -/* - * path_get_temp_path_() - */ - -void path_get_temp_path_( string * buffer ) -{ - char const * t = getenv( "TMPDIR" ); - string_append( buffer, t ? t : "/tmp" ); -} - - -/* - * path_register_key() - */ - -void path_register_key( OBJECT * path ) -{ -} - - -/* - * path_as_key() - */ - -OBJECT * path_as_key( OBJECT * path ) -{ - return object_copy( path ); -} - - -/* - * path_done() - */ - -void path_done( void ) -{ -}
