http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/function.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/function.h b/ext/kenlm/jam-files/engine/function.h deleted file mode 100644 index 64f26b3..0000000 --- a/ext/kenlm/jam-files/engine/function.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2011 Steven Watanabe - * 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 FUNCTION_SW20111123_H -#define FUNCTION_SW20111123_H - -#include "object.h" -#include "frames.h" -#include "lists.h" -#include "parse.h" -#include "strings.h" - -typedef struct _function FUNCTION; -typedef struct _stack STACK; - -STACK * stack_global( void ); -void stack_push( STACK * s, LIST * l ); -LIST * stack_pop( STACK * s ); - -FUNCTION * function_compile( PARSE * parse ); -FUNCTION * function_builtin( LIST * ( * func )( FRAME * frame, int flags ), int flags, const char * * args ); -void function_refer( FUNCTION * ); -void function_free( FUNCTION * ); -OBJECT * function_rulename( FUNCTION * ); -void function_set_rulename( FUNCTION *, OBJECT * ); -void function_location( FUNCTION *, OBJECT * *, int * ); -LIST * function_run( FUNCTION * function, FRAME * frame, STACK * s ); - -FUNCTION * function_compile_actions( const char * actions, OBJECT * file, int line ); -void function_run_actions( FUNCTION * function, FRAME * frame, STACK * s, string * out ); - -FUNCTION * function_bind_variables( FUNCTION * f, module_t * module, int * counter ); -FUNCTION * function_unbind_variables( FUNCTION * f ); - -void function_done( void ); - -#ifdef HAVE_PYTHON - -FUNCTION * function_python( PyObject * function, PyObject * bjam_signature ); - -#endif - -#endif
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/glob.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/glob.c b/ext/kenlm/jam-files/engine/glob.c deleted file mode 100644 index bec00ee..0000000 --- a/ext/kenlm/jam-files/engine/glob.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 1994 Christopher Seiwald. All rights reserved. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * glob.c - match a string against a simple pattern - * - * Understands the following patterns: - * - * * any number of characters - * ? any single character - * [a-z] any single character in the range a-z - * [^a-z] any single character not in the range a-z - * \x match x - * - * External functions: - * - * glob() - match a string against a simple pattern - * - * Internal functions: - * - * globchars() - build a bitlist to check for character group match - */ - -# include "jam.h" - -# define CHECK_BIT( tab, bit ) ( tab[ (bit)/8 ] & (1<<( (bit)%8 )) ) -# define BITLISTSIZE 16 /* bytes used for [chars] in compiled expr */ - -static void globchars( const char * s, const char * e, char * b ); - - -/* - * glob() - match a string against a simple pattern. - */ - -int glob( const char * c, const char * s ) -{ - char bitlist[ BITLISTSIZE ]; - const char * here; - - for ( ; ; ) - switch ( *c++ ) - { - case '\0': - return *s ? -1 : 0; - - case '?': - if ( !*s++ ) - return 1; - break; - - case '[': - /* Scan for matching ]. */ - - here = c; - do if ( !*c++ ) return 1; - while ( ( here == c ) || ( *c != ']' ) ); - ++c; - - /* Build character class bitlist. */ - - globchars( here, c, bitlist ); - - if ( !CHECK_BIT( bitlist, *(const unsigned char *)s ) ) - return 1; - ++s; - break; - - case '*': - here = s; - - while ( *s ) - ++s; - - /* Try to match the rest of the pattern in a recursive */ - /* call. If the match fails we'll back up chars, retrying. */ - - while ( s != here ) - { - int r; - - /* A fast path for the last token in a pattern. */ - r = *c ? glob( c, s ) : *s ? -1 : 0; - - if ( !r ) - return 0; - if ( r < 0 ) - return 1; - --s; - } - break; - - case '\\': - /* Force literal match of next char. */ - if ( !*c || ( *s++ != *c++ ) ) - return 1; - break; - - default: - if ( *s++ != c[ -1 ] ) - return 1; - break; - } -} - - -/* - * globchars() - build a bitlist to check for character group match. - */ - -static void globchars( const char * s, const char * e, char * b ) -{ - int neg = 0; - - memset( b, '\0', BITLISTSIZE ); - - if ( *s == '^' ) - { - ++neg; - ++s; - } - - while ( s < e ) - { - int c; - - if ( ( s + 2 < e ) && ( s[1] == '-' ) ) - { - for ( c = s[0]; c <= s[2]; ++c ) - b[ c/8 ] |= ( 1 << ( c % 8 ) ); - s += 3; - } - else - { - c = *s++; - b[ c/8 ] |= ( 1 << ( c % 8 ) ); - } - } - - if ( neg ) - { - int i; - for ( i = 0; i < BITLISTSIZE; ++i ) - b[ i ] ^= 0377; - } - - /* Do not include \0 in either $[chars] or $[^chars]. */ - b[0] &= 0376; -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hash.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/hash.c b/ext/kenlm/jam-files/engine/hash.c deleted file mode 100644 index 36f8366..0000000 --- a/ext/kenlm/jam-files/engine/hash.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * hash.c - simple in-memory hashing routines - * - * External routines: - * hashinit() - initialize a hash table, returning a handle - * hashitem() - find a record in the table, and optionally enter a new one - * hashdone() - free a hash table, given its handle - * - * Internal routines: - * hashrehash() - resize and rebuild hp->tab, the hash table - */ - -#include "jam.h" -#include "hash.h" - -#include "compile.h" - -#include <assert.h> - -/* */ -#define HASH_DEBUG_PROFILE 1 -/* */ - -/* Header attached to all hash table data items. */ - -typedef struct item ITEM; -struct item -{ - ITEM * next; -}; - -#define MAX_LISTS 32 - -struct hash -{ - /* - * the hash table, just an array of item pointers - */ - struct - { - int nel; - ITEM * * base; - } tab; - - int bloat; /* tab.nel / items.nel */ - int inel; /* initial number of elements */ - - /* - * the array of records, maintained by these routines - essentially a - * microallocator - */ - struct - { - int more; /* how many more ITEMs fit in lists[ list ] */ - ITEM * free; /* free list of items */ - char * next; /* where to put more ITEMs in lists[ list ] */ - int size; /* sizeof( ITEM ) + aligned datalen */ - int nel; /* total ITEMs held by all lists[] */ - int list; /* index into lists[] */ - - struct - { - int nel; /* total ITEMs held by this list */ - char * base; /* base of ITEMs array */ - } lists[ MAX_LISTS ]; - } items; - - char const * name; /* just for hashstats() */ -}; - -static void hashrehash( struct hash * ); -static void hashstat( struct hash * ); - -static unsigned int hash_keyval( OBJECT * key ) -{ - return object_hash( key ); -} - -#define hash_bucket(hp, keyval) ((hp)->tab.base + ((keyval) % (hp)->tab.nel)) - -#define hash_data_key(data) (*(OBJECT * *)(data)) -#define hash_item_data(item) ((HASHDATA *)((char *)item + sizeof(ITEM))) -#define hash_item_key(item) (hash_data_key(hash_item_data(item))) - - -#define ALIGNED(x) ((x + sizeof(ITEM) - 1) & ~(sizeof(ITEM) - 1)) - -/* - * hashinit() - initialize a hash table, returning a handle - */ - -struct hash * hashinit( int datalen, char const * name ) -{ - struct hash * hp = (struct hash *)BJAM_MALLOC( sizeof( *hp ) ); - - hp->bloat = 3; - hp->tab.nel = 0; - hp->tab.base = 0; - hp->items.more = 0; - hp->items.free = 0; - hp->items.size = sizeof( ITEM ) + ALIGNED( datalen ); - hp->items.list = -1; - hp->items.nel = 0; - hp->inel = 11; /* 47 */ - hp->name = name; - - return hp; -} - - -/* - * hash_search() - Find the hash item for the given data. - * - * Returns a pointer to a hashed item with the given key. If given a 'previous' - * pointer, makes it point to the item prior to the found item in the same - * bucket or to 0 if our item is the first item in its bucket. - */ - -static ITEM * hash_search( struct hash * hp, unsigned int keyval, - OBJECT * keydata, ITEM * * previous ) -{ - ITEM * i = *hash_bucket( hp, keyval ); - ITEM * p = 0; - for ( ; i; i = i->next ) - { - if ( object_equal( hash_item_key( i ), keydata ) ) - { - if ( previous ) - *previous = p; - return i; - } - p = i; - } - return 0; -} - - -/* - * hash_insert() - insert a record in the table or return the existing one - */ - -HASHDATA * hash_insert( struct hash * hp, OBJECT * key, int * found ) -{ - ITEM * i; - unsigned int keyval = hash_keyval( key ); - - #ifdef HASH_DEBUG_PROFILE - profile_frame prof[ 1 ]; - if ( DEBUG_PROFILE ) - profile_enter( 0, prof ); - #endif - - if ( !hp->items.more ) - hashrehash( hp ); - - i = hash_search( hp, keyval, key, 0 ); - if ( i ) - *found = 1; - else - { - ITEM * * base = hash_bucket( hp, keyval ); - - /* Try to grab one from the free list. */ - if ( hp->items.free ) - { - i = hp->items.free; - hp->items.free = i->next; - assert( !hash_item_key( i ) ); - } - else - { - i = (ITEM *)hp->items.next; - hp->items.next += hp->items.size; - } - --hp->items.more; - i->next = *base; - *base = i; - *found = 0; - } - - #ifdef HASH_DEBUG_PROFILE - if ( DEBUG_PROFILE ) - profile_exit( prof ); - #endif - - return hash_item_data( i ); -} - - -/* - * hash_find() - find a record in the table or NULL if none exists - */ - -HASHDATA * hash_find( struct hash * hp, OBJECT * key ) -{ - ITEM * i; - unsigned int keyval = hash_keyval( key ); - - #ifdef HASH_DEBUG_PROFILE - profile_frame prof[ 1 ]; - if ( DEBUG_PROFILE ) - profile_enter( 0, prof ); - #endif - - if ( !hp->items.nel ) - { - #ifdef HASH_DEBUG_PROFILE - if ( DEBUG_PROFILE ) - profile_exit( prof ); - #endif - return 0; - } - - i = hash_search( hp, keyval, key, 0 ); - - #ifdef HASH_DEBUG_PROFILE - if ( DEBUG_PROFILE ) - profile_exit( prof ); - #endif - - return i ? hash_item_data( i ) : 0; -} - - -/* - * hashrehash() - resize and rebuild hp->tab, the hash table - */ - -static void hashrehash( struct hash * hp ) -{ - int i = ++hp->items.list; - hp->items.more = i ? 2 * hp->items.nel : hp->inel; - hp->items.next = (char *)BJAM_MALLOC( hp->items.more * hp->items.size ); - hp->items.free = 0; - - hp->items.lists[ i ].nel = hp->items.more; - hp->items.lists[ i ].base = hp->items.next; - hp->items.nel += hp->items.more; - - if ( hp->tab.base ) - BJAM_FREE( (char *)hp->tab.base ); - - hp->tab.nel = hp->items.nel * hp->bloat; - hp->tab.base = (ITEM * *)BJAM_MALLOC( hp->tab.nel * sizeof( ITEM * * ) ); - - memset( (char *)hp->tab.base, '\0', hp->tab.nel * sizeof( ITEM * ) ); - - for ( i = 0; i < hp->items.list; ++i ) - { - int nel = hp->items.lists[ i ].nel; - char * next = hp->items.lists[ i ].base; - - for ( ; nel--; next += hp->items.size ) - { - ITEM * i = (ITEM *)next; - ITEM * * ip = hp->tab.base + object_hash( hash_item_key( i ) ) % - hp->tab.nel; - /* code currently assumes rehashing only when there are no free - * items - */ - assert( hash_item_key( i ) ); - - i->next = *ip; - *ip = i; - } - } -} - - -void hashenumerate( struct hash * hp, void (* f)( void *, void * ), void * data - ) -{ - int i; - for ( i = 0; i <= hp->items.list; ++i ) - { - char * next = hp->items.lists[ i ].base; - int nel = hp->items.lists[ i ].nel; - if ( i == hp->items.list ) - nel -= hp->items.more; - - for ( ; nel--; next += hp->items.size ) - { - ITEM * const i = (ITEM *)next; - if ( hash_item_key( i ) != 0 ) /* Do not enumerate freed items. */ - f( hash_item_data( i ), data ); - } - } -} - - -/* - * hash_free() - free a hash table, given its handle - */ - -void hash_free( struct hash * hp ) -{ - int i; - if ( !hp ) - return; - if ( hp->tab.base ) - BJAM_FREE( (char *)hp->tab.base ); - for ( i = 0; i <= hp->items.list; ++i ) - BJAM_FREE( hp->items.lists[ i ].base ); - BJAM_FREE( (char *)hp ); -} - - -static void hashstat( struct hash * hp ) -{ - struct hashstats stats[ 1 ]; - hashstats_init( stats ); - hashstats_add( stats, hp ); - hashstats_print( stats, hp->name ); -} - - -void hashstats_init( struct hashstats * stats ) -{ - stats->count = 0; - stats->num_items = 0; - stats->tab_size = 0; - stats->item_size = 0; - stats->sets = 0; - stats->num_hashes = 0; -} - - -void hashstats_add( struct hashstats * stats, struct hash * hp ) -{ - if ( hp ) - { - ITEM * * tab = hp->tab.base; - int nel = hp->tab.nel; - int count = 0; - int sets = 0; - int i; - - for ( i = 0; i < nel; ++i ) - { - ITEM * item; - int here = 0; - for ( item = tab[ i ]; item; item = item->next ) - ++here; - - count += here; - if ( here > 0 ) - ++sets; - } - - stats->count += count; - stats->sets += sets; - stats->num_items += hp->items.nel; - stats->tab_size += hp->tab.nel; - stats->item_size = hp->items.size; - ++stats->num_hashes; - } -} - - -void hashstats_print( struct hashstats * stats, char const * name ) -{ - printf( "%s table: %d+%d+%d (%dK+%luK+%luK) items+table+hash, %f density\n", - name, - stats->count, - stats->num_items, - stats->tab_size, - stats->num_items * stats->item_size / 1024, - (long unsigned)stats->tab_size * sizeof( ITEM * * ) / 1024, - (long unsigned)stats->num_hashes * sizeof( struct hash ) / 1024, - (float)stats->count / (float)stats->sets ); -} - - -void hashdone( struct hash * hp ) -{ - if ( !hp ) - return; - if ( DEBUG_MEM || DEBUG_PROFILE ) - hashstat( hp ); - hash_free( hp ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hash.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/hash.h b/ext/kenlm/jam-files/engine/hash.h deleted file mode 100644 index 7c40e8c..0000000 --- a/ext/kenlm/jam-files/engine/hash.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * hash.h - simple in-memory hashing routines - */ - -#ifndef BOOST_JAM_HASH_H -#define BOOST_JAM_HASH_H - -#include "object.h" - -/* - * An opaque struct representing an item in the hash table. The first element of - * every struct stored in the table must be an OBJECT * which is treated as the - * key. - */ -typedef struct hashdata HASHDATA; - -/* - * hashinit() - initialize a hash table, returning a handle. - * - * Parameters: - * datalen - item size - * name - used for debugging - */ -struct hash * hashinit( int datalen, char const * name ); - -/* - * hash_free() - free a hash table, given its handle - */ -void hash_free( struct hash * ); -void hashdone( struct hash * ); - -/* - * hashenumerate() - call f(i, data) on each item, i in the hash table. The - * enumeration order is unspecified. - */ -void hashenumerate( struct hash *, void (* f)( void *, void * ), void * data ); - -/* - * hash_insert() - insert a new item in a hash table, or return an existing one. - * - * Preconditions: - * - hp must be a hash table created by hashinit() - * - key must be an object created by object_new() - * - * Postconditions: - * - if the key does not already exist in the hash table, *found == 0 and the - * result will be a pointer to an uninitialized item. The key of the new - * item must be set to a value equal to key before any further operations on - * the hash table except hashdone(). - * - if the key is present then *found == 1 and the result is a pointer to the - * existing record. - */ -HASHDATA * hash_insert( struct hash *, OBJECT * key, int * found ); - -/* - * hash_find() - find a record in the table or NULL if none exists - */ -HASHDATA * hash_find( struct hash *, OBJECT * key ); - -struct hashstats { - int count; - int num_items; - int tab_size; - int item_size; - int sets; - int num_hashes; -}; - -void hashstats_init( struct hashstats * stats ); -void hashstats_add( struct hashstats * stats, struct hash * ); -void hashstats_print( struct hashstats * stats, char const * name ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hcache.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/hcache.c b/ext/kenlm/jam-files/engine/hcache.c deleted file mode 100644 index 3cf15f7..0000000 --- a/ext/kenlm/jam-files/engine/hcache.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * This file has been donated to Jam. - */ - -/* - * Craig W. McPheeters, Alias|Wavefront. - * - * hcache.c hcache.h - handle cacheing of #includes in source files. - * - * Create a cache of files scanned for headers. When starting jam, look for the - * cache file and load it if present. When finished the binding phase, create a - * new header cache. The cache contains files, their timestamps and the header - * files found in their scan. During the binding phase of jam, look in the - * header cache first for the headers contained in a file. If the cache is - * present and valid, use its contents. This results in dramatic speedups with - * large projects (e.g. 3min -> 1min startup for one project.) - * - * External routines: - * hcache_init() - read and parse the local .jamdeps file. - * hcache_done() - write a new .jamdeps file. - * hcache() - return list of headers on target. Use cache or do a scan. - * - * The dependency file format is an ASCII file with 1 line per target. Each line - * has the following fields: - * @boundname@ timestamp_sec timestamp_nsec @file@ @file@ @file@ ... - */ - -#ifdef OPT_HEADER_CACHE_EXT - -#include "jam.h" -#include "hcache.h" - -#include "hash.h" -#include "headers.h" -#include "lists.h" -#include "modules.h" -#include "object.h" -#include "parse.h" -#include "regexp.h" -#include "rules.h" -#include "search.h" -#include "timestamp.h" -#include "variable.h" - -typedef struct hcachedata HCACHEDATA ; - -struct hcachedata -{ - OBJECT * boundname; - timestamp time; - LIST * includes; - LIST * hdrscan; /* the HDRSCAN value for this target */ - int age; /* if too old, we will remove it from cache */ - HCACHEDATA * next; -}; - - -static struct hash * hcachehash = 0; -static HCACHEDATA * hcachelist = 0; - -static int queries = 0; -static int hits = 0; - -#define CACHE_FILE_VERSION "version 5" -#define CACHE_RECORD_HEADER "header" -#define CACHE_RECORD_END "end" - - -/* - * Return the name of the header cache file. May return NULL. - * - * The user sets this by setting the HCACHEFILE variable in a Jamfile. We cache - * the result so the user can not change the cache file during header scanning. - */ - -static const char * cache_name( void ) -{ - static OBJECT * name = 0; - if ( !name ) - { - LIST * const hcachevar = var_get( root_module(), constant_HCACHEFILE ); - - if ( !list_empty( hcachevar ) ) - { - TARGET * const t = bindtarget( list_front( hcachevar ) ); - - pushsettings( root_module(), t->settings ); - /* Do not expect the cache file to be generated, so pass 0 as the - * third argument to search. Expect the location to be specified via - * LOCATE, so pass 0 as the fourth arugment. - */ - object_free( t->boundname ); - t->boundname = search( t->name, &t->time, 0, 0 ); - popsettings( root_module(), t->settings ); - - name = object_copy( t->boundname ); - } - } - return name ? object_str( name ) : 0; -} - - -/* - * Return the maximum age a cache entry can have before it is purged from the - * cache. - */ - -static int cache_maxage( void ) -{ - int age = 100; - LIST * const var = var_get( root_module(), constant_HCACHEMAXAGE ); - if ( !list_empty( var ) ) - { - age = atoi( object_str( list_front( var ) ) ); - if ( age < 0 ) - age = 0; - } - return age; -} - - -/* - * Read a netstring. The caveat is that the string can not contain ASCII 0. The - * returned value is as returned by object_new(). - */ - -OBJECT * read_netstring( FILE * f ) -{ - unsigned long len; - static char * buf = NULL; - static unsigned long buf_len = 0; - - if ( fscanf( f, " %9lu", &len ) != 1 ) - return NULL; - if ( fgetc( f ) != (int)'\t' ) - return NULL; - - if ( len > 1024 * 64 ) - return NULL; /* sanity check */ - - if ( len > buf_len ) - { - unsigned long new_len = buf_len * 2; - if ( new_len < len ) - new_len = len; - buf = (char *)BJAM_REALLOC( buf, new_len + 1 ); - if ( buf ) - buf_len = new_len; - } - - if ( !buf ) - return NULL; - - if ( fread( buf, 1, len, f ) != len ) - return NULL; - if ( fgetc( f ) != (int)'\n' ) - return NULL; - - buf[ len ] = 0; - return object_new( buf ); -} - - -/* - * Write a netstring. - */ - -void write_netstring( FILE * f, char const * s ) -{ - if ( !s ) - s = ""; - fprintf( f, "%lu\t%s\n", (long unsigned)strlen( s ), s ); -} - - -void hcache_init() -{ - FILE * f; - OBJECT * version = 0; - int header_count = 0; - const char * hcachename; - - if ( hcachehash ) - return; - - hcachehash = hashinit( sizeof( HCACHEDATA ), "hcache" ); - - if ( !( hcachename = cache_name() ) ) - return; - - if ( !( f = fopen( hcachename, "rb" ) ) ) - return; - - version = read_netstring( f ); - - if ( !version || strcmp( object_str( version ), CACHE_FILE_VERSION ) ) - goto bail; - - while ( 1 ) - { - HCACHEDATA cachedata; - HCACHEDATA * c; - OBJECT * record_type = 0; - OBJECT * time_secs_str = 0; - OBJECT * time_nsecs_str = 0; - OBJECT * age_str = 0; - OBJECT * includes_count_str = 0; - OBJECT * hdrscan_count_str = 0; - int i; - int count; - LIST * l; - int found; - - cachedata.boundname = 0; - cachedata.includes = 0; - cachedata.hdrscan = 0; - - record_type = read_netstring( f ); - if ( !record_type ) - { - fprintf( stderr, "invalid %s\n", hcachename ); - goto cleanup; - } - if ( !strcmp( object_str( record_type ), CACHE_RECORD_END ) ) - { - object_free( record_type ); - break; - } - if ( strcmp( object_str( record_type ), CACHE_RECORD_HEADER ) ) - { - fprintf( stderr, "invalid %s with record separator <%s>\n", - hcachename, record_type ? object_str( record_type ) : "<null>" ); - goto cleanup; - } - - cachedata.boundname = read_netstring( f ); - time_secs_str = read_netstring( f ); - time_nsecs_str = read_netstring( f ); - age_str = read_netstring( f ); - includes_count_str = read_netstring( f ); - - if ( !cachedata.boundname || !time_secs_str || !time_nsecs_str || - !age_str || !includes_count_str ) - { - fprintf( stderr, "invalid %s\n", hcachename ); - goto cleanup; - } - - timestamp_init( &cachedata.time, atoi( object_str( time_secs_str ) ), - atoi( object_str( time_nsecs_str ) ) ); - cachedata.age = atoi( object_str( age_str ) ) + 1; - - count = atoi( object_str( includes_count_str ) ); - for ( l = L0, i = 0; i < count; ++i ) - { - OBJECT * const s = read_netstring( f ); - if ( !s ) - { - fprintf( stderr, "invalid %s\n", hcachename ); - list_free( l ); - goto cleanup; - } - l = list_push_back( l, s ); - } - cachedata.includes = l; - - hdrscan_count_str = read_netstring( f ); - if ( !hdrscan_count_str ) - { - fprintf( stderr, "invalid %s\n", hcachename ); - goto cleanup; - } - - count = atoi( object_str( hdrscan_count_str ) ); - for ( l = L0, i = 0; i < count; ++i ) - { - OBJECT * const s = read_netstring( f ); - if ( !s ) - { - fprintf( stderr, "invalid %s\n", hcachename ); - list_free( l ); - goto cleanup; - } - l = list_push_back( l, s ); - } - cachedata.hdrscan = l; - - c = (HCACHEDATA *)hash_insert( hcachehash, cachedata.boundname, &found ) - ; - if ( !found ) - { - c->boundname = cachedata.boundname; - c->includes = cachedata.includes; - c->hdrscan = cachedata.hdrscan; - c->age = cachedata.age; - timestamp_copy( &c->time, &cachedata.time ); - } - else - { - fprintf( stderr, "can not insert header cache item, bailing on %s" - "\n", hcachename ); - goto cleanup; - } - - c->next = hcachelist; - hcachelist = c; - - ++header_count; - - object_free( record_type ); - object_free( time_secs_str ); - object_free( time_nsecs_str ); - object_free( age_str ); - object_free( includes_count_str ); - object_free( hdrscan_count_str ); - continue; - -cleanup: - - if ( record_type ) object_free( record_type ); - if ( time_secs_str ) object_free( time_secs_str ); - if ( time_nsecs_str ) object_free( time_nsecs_str ); - if ( age_str ) object_free( age_str ); - if ( includes_count_str ) object_free( includes_count_str ); - if ( hdrscan_count_str ) object_free( hdrscan_count_str ); - - if ( cachedata.boundname ) object_free( cachedata.boundname ); - if ( cachedata.includes ) list_free( cachedata.includes ); - if ( cachedata.hdrscan ) list_free( cachedata.hdrscan ); - - goto bail; - } - - if ( DEBUG_HEADER ) - printf( "hcache read from file %s\n", hcachename ); - -bail: - if ( version ) - object_free( version ); - fclose( f ); -} - - -void hcache_done() -{ - FILE * f; - HCACHEDATA * c; - int header_count = 0; - const char * hcachename; - int maxage; - - if ( !hcachehash ) - return; - - if ( !( hcachename = cache_name() ) ) - goto cleanup; - - if ( !( f = fopen( hcachename, "wb" ) ) ) - goto cleanup; - - maxage = cache_maxage(); - - /* Print out the version. */ - write_netstring( f, CACHE_FILE_VERSION ); - - c = hcachelist; - for ( c = hcachelist; c; c = c->next ) - { - LISTITER iter; - LISTITER end; - char time_secs_str[ 30 ]; - char time_nsecs_str[ 30 ]; - char age_str[ 30 ]; - char includes_count_str[ 30 ]; - char hdrscan_count_str[ 30 ]; - - if ( maxage == 0 ) - c->age = 0; - else if ( c->age > maxage ) - continue; - - sprintf( includes_count_str, "%lu", (long unsigned)list_length( - c->includes ) ); - sprintf( hdrscan_count_str, "%lu", (long unsigned)list_length( - c->hdrscan ) ); - sprintf( time_secs_str, "%lu", (long unsigned)c->time.secs ); - sprintf( time_nsecs_str, "%lu", (long unsigned)c->time.nsecs ); - sprintf( age_str, "%lu", (long unsigned)c->age ); - - write_netstring( f, CACHE_RECORD_HEADER ); - write_netstring( f, object_str( c->boundname ) ); - write_netstring( f, time_secs_str ); - write_netstring( f, time_nsecs_str ); - write_netstring( f, age_str ); - write_netstring( f, includes_count_str ); - for ( iter = list_begin( c->includes ), end = list_end( c->includes ); - iter != end; iter = list_next( iter ) ) - write_netstring( f, object_str( list_item( iter ) ) ); - write_netstring( f, hdrscan_count_str ); - for ( iter = list_begin( c->hdrscan ), end = list_end( c->hdrscan ); - iter != end; iter = list_next( iter ) ) - write_netstring( f, object_str( list_item( iter ) ) ); - fputs( "\n", f ); - ++header_count; - } - write_netstring( f, CACHE_RECORD_END ); - - if ( DEBUG_HEADER ) - printf( "hcache written to %s. %d dependencies, %.0f%% hit rate\n", - hcachename, header_count, queries ? 100.0 * hits / queries : 0 ); - - fclose ( f ); - -cleanup: - for ( c = hcachelist; c; c = c->next ) - { - list_free( c->includes ); - list_free( c->hdrscan ); - object_free( c->boundname ); - } - - hcachelist = 0; - if ( hcachehash ) - hashdone( hcachehash ); - hcachehash = 0; -} - - -LIST * hcache( TARGET * t, int rec, regexp * re[], LIST * hdrscan ) -{ - HCACHEDATA * c; - - ++queries; - - if ( ( c = (HCACHEDATA *)hash_find( hcachehash, t->boundname ) ) ) - { - if ( !timestamp_cmp( &c->time, &t->time ) ) - { - LIST * const l1 = hdrscan; - LIST * const l2 = c->hdrscan; - LISTITER iter1 = list_begin( l1 ); - LISTITER const end1 = list_end( l1 ); - LISTITER iter2 = list_begin( l2 ); - LISTITER const end2 = list_end( l2 ); - while ( iter1 != end1 && iter2 != end2 ) - { - if ( !object_equal( list_item( iter1 ), list_item( iter2 ) ) ) - iter1 = end1; - else - { - iter1 = list_next( iter1 ); - iter2 = list_next( iter2 ); - } - } - if ( iter1 != end1 || iter2 != end2 ) - { - if ( DEBUG_HEADER ) - { - printf( "HDRSCAN out of date in cache for %s\n", - object_str( t->boundname ) ); - printf(" real : "); - list_print( hdrscan ); - printf( "\n cached: " ); - list_print( c->hdrscan ); - printf( "\n" ); - } - - list_free( c->includes ); - list_free( c->hdrscan ); - c->includes = L0; - c->hdrscan = L0; - } - else - { - if ( DEBUG_HEADER ) - printf( "using header cache for %s\n", object_str( - t->boundname ) ); - c->age = 0; - ++hits; - return list_copy( c->includes ); - } - } - else - { - if ( DEBUG_HEADER ) - printf ("header cache out of date for %s\n", object_str( - t->boundname ) ); - list_free( c->includes ); - list_free( c->hdrscan ); - c->includes = L0; - c->hdrscan = L0; - } - } - else - { - int found; - c = (HCACHEDATA *)hash_insert( hcachehash, t->boundname, &found ); - if ( !found ) - { - c->boundname = object_copy( t->boundname ); - c->next = hcachelist; - hcachelist = c; - } - } - - /* 'c' points at the cache entry. Its out of date. */ - { - LIST * const l = headers1( L0, t->boundname, rec, re ); - - timestamp_copy( &c->time, &t->time ); - c->age = 0; - c->includes = list_copy( l ); - c->hdrscan = list_copy( hdrscan ); - - return l; - } -} - -#endif /* OPT_HEADER_CACHE_EXT */ http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hcache.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/hcache.h b/ext/kenlm/jam-files/engine/hcache.h deleted file mode 100644 index a9d929d..0000000 --- a/ext/kenlm/jam-files/engine/hcache.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This file is not part of Jam - */ - -/* - * hcache.h - handle #includes in source files - */ -#ifndef HCACHE_H -#define HCACHE_H - -#include "lists.h" -#include "regexp.h" -#include "rules.h" - -void hcache_init( void ); -void hcache_done( void ); -LIST * hcache( TARGET * t, int rec, regexp * re[], LIST * hdrscan ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hdrmacro.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/hdrmacro.c b/ext/kenlm/jam-files/engine/hdrmacro.c deleted file mode 100644 index eb4fe90..0000000 --- a/ext/kenlm/jam-files/engine/hdrmacro.c +++ /dev/null @@ -1,139 +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) - */ - -/* - * hdrmacro.c - handle header files that define macros used in #include - * statements. - * - * we look for lines like "#define MACRO <....>" or '#define MACRO " "' in - * the target file. When found, we then phony up a rule invocation like: - * - * $(HDRRULE) <target> : <resolved included files> ; - * - * External routines: - * headers1() - scan a target for "#include MACRO" lines and try to resolve - * them when needed - * - * Internal routines: - * headers1() - using regexp, scan a file and build include LIST - */ - -#include "jam.h" -#include "hdrmacro.h" - -#include "compile.h" -#include "hash.h" -#include "lists.h" -#include "object.h" -#include "parse.h" -#include "rules.h" -#include "strings.h" -#include "subst.h" -#include "variable.h" - - -/* this type is used to store a dictionary of file header macros */ -typedef struct header_macro -{ - OBJECT * symbol; - OBJECT * filename; /* we could maybe use a LIST here ?? */ -} HEADER_MACRO; - -static struct hash * header_macros_hash = 0; - - -/* - * headers() - scan a target for include files and call HDRRULE - */ - -#define MAXINC 10 - -void macro_headers( TARGET * t ) -{ - static regexp * re = 0; - FILE * f; - char buf[ 1024 ]; - - if ( DEBUG_HEADER ) - printf( "macro header scan for %s\n", object_str( t->name ) ); - - /* This regexp is used to detect lines of the form - * "#define MACRO <....>" or "#define MACRO "....." - * in the header macro files. - */ - if ( !re ) - { - OBJECT * const re_str = object_new( - "^[ ]*#[ ]*define[ ]*([A-Za-z][A-Za-z0-9_]*)[ ]*" - "[<\"]([^\">]*)[\">].*$" ); - re = regex_compile( re_str ); - object_free( re_str ); - } - - if ( !( f = fopen( object_str( t->boundname ), "r" ) ) ) - return; - - while ( fgets( buf, sizeof( buf ), f ) ) - { - HEADER_MACRO var; - HEADER_MACRO * v = &var; - - if ( regexec( re, buf ) && re->startp[ 1 ] ) - { - OBJECT * symbol; - int found; - /* we detected a line that looks like "#define MACRO filename */ - ( (char *)re->endp[ 1 ] )[ 0 ] = '\0'; - ( (char *)re->endp[ 2 ] )[ 0 ] = '\0'; - - if ( DEBUG_HEADER ) - printf( "macro '%s' used to define filename '%s' in '%s'\n", - re->startp[ 1 ], re->startp[ 2 ], object_str( t->boundname ) - ); - - /* add macro definition to hash table */ - if ( !header_macros_hash ) - header_macros_hash = hashinit( sizeof( HEADER_MACRO ), - "hdrmacros" ); - - symbol = object_new( re->startp[ 1 ] ); - v = (HEADER_MACRO *)hash_insert( header_macros_hash, symbol, &found - ); - if ( !found ) - { - v->symbol = symbol; - v->filename = object_new( re->startp[ 2 ] ); /* never freed */ - } - else - object_free( symbol ); - /* XXXX: FOR NOW, WE IGNORE MULTIPLE MACRO DEFINITIONS !! */ - /* WE MIGHT AS WELL USE A LIST TO STORE THEM.. */ - } - } - - fclose( f ); -} - - -OBJECT * macro_header_get( OBJECT * macro_name ) -{ - HEADER_MACRO * v; - if ( header_macros_hash && ( v = (HEADER_MACRO *)hash_find( - header_macros_hash, macro_name ) ) ) - { - if ( DEBUG_HEADER ) - printf( "### macro '%s' evaluated to '%s'\n", object_str( macro_name - ), object_str( v->filename ) ); - return v->filename; - } - return 0; -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/hdrmacro.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/hdrmacro.h b/ext/kenlm/jam-files/engine/hdrmacro.h deleted file mode 100644 index 7595ede..0000000 --- a/ext/kenlm/jam-files/engine/hdrmacro.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * hdrmacro.h - parses header files for #define MACRO <filename> or - * #define MACRO "filename" definitions - */ - -#ifndef HDRMACRO_SW20111118_H -#define HDRMACRO_SW20111118_H - -#include "object.h" -#include "rules.h" - -void macro_headers( TARGET * ); -OBJECT * macro_header_get( OBJECT * macro_name ); - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/headers.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/headers.c b/ext/kenlm/jam-files/engine/headers.c deleted file mode 100644 index 0d9558d..0000000 --- a/ext/kenlm/jam-files/engine/headers.c +++ /dev/null @@ -1,197 +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) - */ - -/* - * headers.c - handle #includes in source files - * - * Using regular expressions provided as the variable $(HDRSCAN), headers() - * searches a file for #include files and phonies up a rule invocation: - * $(HDRRULE) <target> : <include files> ; - * - * External routines: - * headers() - scan a target for include files and call HDRRULE - * - * Internal routines: - * headers1() - using regexp, scan a file and build include LIST - */ - -#include "jam.h" -#include "headers.h" - -#include "compile.h" -#include "hdrmacro.h" -#include "lists.h" -#include "modules.h" -#include "object.h" -#include "parse.h" -#include "rules.h" -#include "subst.h" -#include "variable.h" - -#ifdef OPT_HEADER_CACHE_EXT -# include "hcache.h" -#endif - -#ifndef OPT_HEADER_CACHE_EXT -static LIST * headers1( LIST *, OBJECT * file, int rec, regexp * re[] ); -#endif - - -/* - * headers() - scan a target for include files and call HDRRULE - */ - -#define MAXINC 10 - -void headers( TARGET * t ) -{ - LIST * hdrscan; - LIST * hdrrule; - #ifndef OPT_HEADER_CACHE_EXT - LIST * headlist = L0; - #endif - regexp * re[ MAXINC ]; - int rec = 0; - LISTITER iter; - LISTITER end; - - hdrscan = var_get( root_module(), constant_HDRSCAN ); - if ( list_empty( hdrscan ) ) - return; - - hdrrule = var_get( root_module(), constant_HDRRULE ); - if ( list_empty( hdrrule ) ) - return; - - if ( DEBUG_HEADER ) - printf( "header scan %s\n", object_str( t->name ) ); - - /* Compile all regular expressions in HDRSCAN */ - iter = list_begin( hdrscan ); - end = list_end( hdrscan ); - for ( ; ( rec < MAXINC ) && iter != end; iter = list_next( iter ) ) - { - re[ rec++ ] = regex_compile( list_item( iter ) ); - } - - /* Doctor up call to HDRRULE rule */ - /* Call headers1() to get LIST of included files. */ - { - FRAME frame[ 1 ]; - frame_init( frame ); - lol_add( frame->args, list_new( object_copy( t->name ) ) ); -#ifdef OPT_HEADER_CACHE_EXT - lol_add( frame->args, hcache( t, rec, re, hdrscan ) ); -#else - lol_add( frame->args, headers1( headlist, t->boundname, rec, re ) ); -#endif - - if ( lol_get( frame->args, 1 ) ) - { - OBJECT * rulename = list_front( hdrrule ); - /* The third argument to HDRRULE is the bound name of $(<). */ - lol_add( frame->args, list_new( object_copy( t->boundname ) ) ); - list_free( evaluate_rule( bindrule( rulename, frame->module ), rulename, frame ) ); - } - - /* Clean up. */ - frame_free( frame ); - } -} - - -/* - * headers1() - using regexp, scan a file and build include LIST. - */ - -#ifndef OPT_HEADER_CACHE_EXT -static -#endif -LIST * headers1( LIST * l, OBJECT * file, int rec, regexp * re[] ) -{ - FILE * f; - char buf[ 1024 ]; - int i; - static regexp * re_macros = 0; - -#ifdef OPT_IMPROVED_PATIENCE_EXT - static int count = 0; - ++count; - if ( ( ( count == 100 ) || !( count % 1000 ) ) && DEBUG_MAKE ) - { - printf( "...patience...\n" ); - fflush( stdout ); - } -#endif - - /* The following regexp is used to detect cases where a file is included - * through a line like "#include MACRO". - */ - if ( re_macros == 0 ) - { - OBJECT * const re_str = object_new( - "#[ \t]*include[ \t]*([A-Za-z][A-Za-z0-9_]*).*$" ); - re_macros = regex_compile( re_str ); - object_free( re_str ); - } - - if ( !( f = fopen( object_str( file ), "r" ) ) ) - return l; - - while ( fgets( buf, sizeof( buf ), f ) ) - { - for ( i = 0; i < rec; ++i ) - if ( regexec( re[ i ], buf ) && re[ i ]->startp[ 1 ] ) - { - ( (char *)re[ i ]->endp[ 1 ] )[ 0 ] = '\0'; - if ( DEBUG_HEADER ) - printf( "header found: %s\n", re[ i ]->startp[ 1 ] ); - l = list_push_back( l, object_new( re[ i ]->startp[ 1 ] ) ); - } - - /* Special treatment for #include MACRO. */ - if ( regexec( re_macros, buf ) && re_macros->startp[ 1 ] ) - { - OBJECT * header_filename; - OBJECT * macro_name; - - ( (char *)re_macros->endp[ 1 ] )[ 0 ] = '\0'; - - if ( DEBUG_HEADER ) - printf( "macro header found: %s", re_macros->startp[ 1 ] ); - - macro_name = object_new( re_macros->startp[ 1 ] ); - header_filename = macro_header_get( macro_name ); - object_free( macro_name ); - if ( header_filename ) - { - if ( DEBUG_HEADER ) - printf( " resolved to '%s'\n", object_str( header_filename ) - ); - l = list_push_back( l, object_copy( header_filename ) ); - } - else - { - if ( DEBUG_HEADER ) - printf( " ignored !!\n" ); - } - } - } - - fclose( f ); - return l; -} - - -void regerror( char const * s ) -{ - printf( "re error %s\n", s ); -} http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/headers.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/headers.h b/ext/kenlm/jam-files/engine/headers.h deleted file mode 100644 index 1c0a642..0000000 --- a/ext/kenlm/jam-files/engine/headers.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 1993, 1995 Christopher Seiwald. - * - * This file is part of Jam - see jam.c for Copyright information. - */ - -/* - * headers.h - handle #includes in source files - */ - -#ifndef HEADERS_SW20111118_H -#define HEADERS_SW20111118_H - -#include "object.h" -#include "rules.h" -#include "regexp.h" - -void headers( TARGET * t ); - -#ifdef OPT_HEADER_CACHE_EXT -struct regexp; -LIST * headers1( LIST *l, OBJECT * file, int rec, struct regexp *re[] ); -#endif - -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/jam.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/jam.c b/ext/kenlm/jam-files/engine/jam.c deleted file mode 100644 index 1c80eec..0000000 --- a/ext/kenlm/jam-files/engine/jam.c +++ /dev/null @@ -1,656 +0,0 @@ -/* - * /+\ - * +\ Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. - * \+/ - * - * This file is part of jam. - * - * License is hereby granted to use this software and distribute it freely, as - * long as this copyright notice is retained and modifications are clearly - * marked. - * - * ALL WARRANTIES ARE HEREBY DISCLAIMED. - */ - -/* 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 copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * jam.c - make redux - * - * See Jam.html for usage information. - * - * These comments document the code. - * - * The top half of the code is structured such: - * - * jam - * / | \ - * +---+ | \ - * / | \ - * jamgram option \ - * / | \ \ - * / | \ \ - * / | \ | - * scan | compile make - * | | / | \ / | \ - * | | / | \ / | \ - * | | / | \ / | \ - * jambase parse | rules search make1 - * | | | \ - * | | | \ - * | | | \ - * builtins timestamp command execute - * | - * | - * | - * filesys - * - * - * The support routines are called by all of the above, but themselves are - * layered thus: - * - * variable|expand - * / | | - * / | | - * / | | - * lists | pathsys - * \ | - * \ hash - * \ | - * \ | - * \ | - * \ | - * \ | - * object - * - * Roughly, the modules are: - * - * builtins.c - jam's built-in rules - * command.c - maintain lists of commands - * compile.c - compile parsed jam statements - * exec*.c - execute a shell script on a specific OS - * file*.c - scan directories and archives on a specific OS - * hash.c - simple in-memory hashing routines - * hdrmacro.c - handle header file parsing for filename macro definitions - * headers.c - handle #includes in source files - * jambase.c - compilable copy of Jambase - * jamgram.y - jam grammar - * lists.c - maintain lists of strings - * make.c - bring a target up to date, once rules are in place - * make1.c - execute command to bring targets up to date - * object.c - string manipulation routines - * option.c - command line option processing - * parse.c - make and destroy parse trees as driven by the parser - * path*.c - manipulate file names on a specific OS - * hash.c - simple in-memory hashing routines - * regexp.c - Henry Spencer's regexp - * rules.c - access to RULEs, TARGETs, and ACTIONs - * scan.c - the jam yacc scanner - * search.c - find a target along $(SEARCH) or $(LOCATE) - * timestamp.c - get the timestamp of a file or archive member - * variable.c - handle jam multi-element variables - */ - - -#include "jam.h" -#include "patchlevel.h" - -#include "builtins.h" -#include "class.h" -#include "compile.h" -#include "constants.h" -#include "filesys.h" -#include "function.h" -#include "hcache.h" -#include "lists.h" -#include "make.h" -#include "object.h" -#include "option.h" -#include "output.h" -#include "parse.h" -#include "cwd.h" -#include "rules.h" -#include "scan.h" -#include "search.h" -#include "strings.h" -#include "timestamp.h" -#include "variable.h" - -/* Macintosh is "special" */ -#ifdef OS_MAC -# include <QuickDraw.h> -#endif - -/* And UNIX for this. */ -#ifdef unix -# include <sys/utsname.h> -# include <signal.h> -#endif - -struct globs globs = -{ - 0, /* noexec */ - 1, /* jobs */ - 0, /* quitquick */ - 0, /* newestfirst */ - 0, /* pipes action stdout and stderr merged to action output */ -#ifdef OS_MAC - { 0, 0 }, /* debug - suppress tracing output */ -#else - { 0, 1 }, /* debug ... */ -#endif - 0, /* output commands, not run them */ - 0, /* action timeout */ - 0 /* maximum buffer size zero is all output */ -}; - -/* Symbols to be defined as true for use in Jambase. */ -static char * othersyms[] = { OSMAJOR, OSMINOR, OSPLAT, JAMVERSYM, 0 }; - - -/* Known for sure: - * mac needs arg_enviro - * OS2 needs extern environ - */ - -#ifdef OS_MAC -# define use_environ arg_environ -# ifdef MPW - QDGlobals qd; -# endif -#endif - -/* on Win32-LCC */ -#if defined( OS_NT ) && defined( __LCC__ ) -# define use_environ _environ -#endif - -#if defined( __MWERKS__) -# define use_environ _environ - extern char * * _environ; -#endif - -#ifndef use_environ -# define use_environ environ -# if !defined( __WATCOM__ ) && !defined( OS_OS2 ) && !defined( OS_NT ) - extern char **environ; -# endif -#endif - -#if YYDEBUG != 0 - extern int yydebug; -#endif - -#ifndef NDEBUG -static void run_unit_tests() -{ -# if defined( USE_EXECNT ) - extern void execnt_unit_test(); - execnt_unit_test(); -# endif - string_unit_test(); -} -#endif - -int anyhow = 0; - -#ifdef HAVE_PYTHON - extern PyObject * bjam_call ( PyObject * self, PyObject * args ); - extern PyObject * bjam_import_rule ( PyObject * self, PyObject * args ); - extern PyObject * bjam_define_action( PyObject * self, PyObject * args ); - extern PyObject * bjam_variable ( PyObject * self, PyObject * args ); - extern PyObject * bjam_backtrace ( PyObject * self, PyObject * args ); - extern PyObject * bjam_caller ( PyObject * self, PyObject * args ); -#endif - -void regex_done(); - -char const * saved_argv0; - -int main( int argc, char * * argv, char * * arg_environ ) -{ - int n; - char * s; - struct bjam_option optv[ N_OPTS ]; - char const * all = "all"; - int status; - int arg_c = argc; - char * * arg_v = argv; - char const * progname = argv[ 0 ]; - module_t * environ_module; - - saved_argv0 = argv[ 0 ]; - - BJAM_MEM_INIT(); - -#ifdef OS_MAC - InitGraf( &qd.thePort ); -#endif - - --argc; - ++argv; - - if ( getoptions( argc, argv, "-:l:m:d:j:p:f:gs:t:ano:qv", optv ) < 0 ) - { - printf( "\nusage: %s [ options ] targets...\n\n", progname ); - - printf( "-a Build all targets, even if they are current.\n" ); - printf( "-dx Set the debug level to x (0-9).\n" ); - printf( "-fx Read x instead of Jambase.\n" ); - /* printf( "-g Build from newest sources first.\n" ); */ - printf( "-jx Run up to x shell commands concurrently.\n" ); - printf( "-lx Limit actions to x number of seconds after which they are stopped.\n" ); - printf( "-mx Maximum target output saved (kb), default is to save all output.\n" ); - printf( "-n Don't actually execute the updating actions.\n" ); - printf( "-ox Write the updating actions to file x.\n" ); - printf( "-px x=0, pipes action stdout and stderr merged into action output.\n" ); - printf( "-q Quit quickly as soon as a target fails.\n" ); - printf( "-sx=y Set variable x=y, overriding environment.\n" ); - printf( "-tx Rebuild x, even if it is up-to-date.\n" ); - printf( "-v Print the version of jam and exit.\n" ); - printf( "--x Option is ignored.\n\n" ); - - exit( EXITBAD ); - } - - /* Version info. */ - if ( ( s = getoptval( optv, 'v', 0 ) ) ) - { - printf( "Boost.Jam Version %s. %s.\n", VERSION, OSMINOR ); - printf( " Copyright 1993-2002 Christopher Seiwald and Perforce " - "Software, Inc.\n" ); - printf( " Copyright 2001 David Turner.\n" ); - printf( " Copyright 2001-2004 David Abrahams.\n" ); - printf( " Copyright 2002-2008 Rene Rivera.\n" ); - printf( " Copyright 2003-2008 Vladimir Prus.\n" ); - return EXITOK; - } - - /* Pick up interesting options. */ - if ( ( s = getoptval( optv, 'n', 0 ) ) ) - { - ++globs.noexec; - globs.debug[ 2 ] = 1; - } - - if ( ( s = getoptval( optv, 'p', 0 ) ) ) - { - /* Undocumented -p3 (acts like both -p1 -p2) means separate pipe action - * stdout and stderr. - */ - globs.pipe_action = atoi( s ); - if ( globs.pipe_action < 0 || 3 < globs.pipe_action ) - { - printf( "Invalid pipe descriptor '%d', valid values are -p[0..3]." - "\n", globs.pipe_action ); - exit( EXITBAD ); - } - } - - if ( ( s = getoptval( optv, 'q', 0 ) ) ) - globs.quitquick = 1; - - if ( ( s = getoptval( optv, 'a', 0 ) ) ) - anyhow++; - - if ( ( s = getoptval( optv, 'j', 0 ) ) ) - { - globs.jobs = atoi( s ); - if ( globs.jobs < 1 || globs.jobs > MAXJOBS ) - { - printf( "Invalid value for the '-j' option, valid values are 1 " - "through %d.\n", MAXJOBS ); - exit( EXITBAD ); - } - } - - if ( ( s = getoptval( optv, 'g', 0 ) ) ) - globs.newestfirst = 1; - - if ( ( s = getoptval( optv, 'l', 0 ) ) ) - globs.timeout = atoi( s ); - - if ( ( s = getoptval( optv, 'm', 0 ) ) ) - globs.max_buf = atoi( s ) * 1024; /* convert to kb */ - - /* Turn on/off debugging */ - for ( n = 0; ( s = getoptval( optv, 'd', n ) ); ++n ) - { - int i; - - /* First -d, turn off defaults. */ - if ( !n ) - for ( i = 0; i < DEBUG_MAX; ++i ) - globs.debug[i] = 0; - - i = atoi( s ); - - if ( ( i < 0 ) || ( i >= DEBUG_MAX ) ) - { - printf( "Invalid debug level '%s'.\n", s ); - continue; - } - - /* n turns on levels 1-n. */ - /* +n turns on level n. */ - if ( *s == '+' ) - globs.debug[ i ] = 1; - else while ( i ) - globs.debug[ i-- ] = 1; - } - - constants_init(); - cwd_init(); - - { - PROFILE_ENTER( MAIN ); - -#ifdef HAVE_PYTHON - { - PROFILE_ENTER( MAIN_PYTHON ); - Py_Initialize(); - { - static PyMethodDef BjamMethods[] = { - {"call", bjam_call, METH_VARARGS, - "Call the specified bjam rule."}, - {"import_rule", bjam_import_rule, METH_VARARGS, - "Imports Python callable to bjam."}, - {"define_action", bjam_define_action, METH_VARARGS, - "Defines a command line action."}, - {"variable", bjam_variable, METH_VARARGS, - "Obtains a variable from bjam's global module."}, - {"backtrace", bjam_backtrace, METH_VARARGS, - "Returns bjam backtrace from the last call into Python."}, - {"caller", bjam_caller, METH_VARARGS, - "Returns the module from which the last call into Python is made."}, - {NULL, NULL, 0, NULL} - }; - - Py_InitModule( "bjam", BjamMethods ); - } - PROFILE_EXIT( MAIN_PYTHON ); - } -#endif - -#ifndef NDEBUG - run_unit_tests(); -#endif -#if YYDEBUG != 0 - if ( DEBUG_PARSE ) - yydebug = 1; -#endif - - /* Set JAMDATE. */ - { - timestamp current; - timestamp_current( ¤t ); - var_set( root_module(), constant_JAMDATE, list_new( outf_time( - ¤t ) ), VAR_SET ); - } - - /* Set JAM_VERSION. */ - var_set( root_module(), constant_JAM_VERSION, - list_push_back( list_push_back( list_new( - object_new( VERSION_MAJOR_SYM ) ), - object_new( VERSION_MINOR_SYM ) ), - object_new( VERSION_PATCH_SYM ) ), - VAR_SET ); - - /* Set JAMUNAME. */ -#ifdef unix - { - struct utsname u; - - if ( uname( &u ) >= 0 ) - { - var_set( root_module(), constant_JAMUNAME, - list_push_back( - list_push_back( - list_push_back( - list_push_back( - list_new( - object_new( u.sysname ) ), - object_new( u.nodename ) ), - object_new( u.release ) ), - object_new( u.version ) ), - object_new( u.machine ) ), VAR_SET ); - } - } -#endif /* unix */ - - /* Set JAM_TIMESTAMP_RESOLUTION. */ - { - timestamp fmt_resolution[ 1 ]; - file_supported_fmt_resolution( fmt_resolution ); - var_set( root_module(), constant_JAM_TIMESTAMP_RESOLUTION, list_new( - object_new( timestamp_timestr( fmt_resolution ) ) ), VAR_SET ); - } - - /* Load up environment variables. */ - - /* First into the global module, with splitting, for backward - * compatibility. - */ - var_defines( root_module(), use_environ, 1 ); - - environ_module = bindmodule( constant_ENVIRON ); - /* Then into .ENVIRON, without splitting. */ - var_defines( environ_module, use_environ, 0 ); - - /* - * Jam defined variables OS & OSPLAT. We load them after environment, so - * that setting OS in environment does not change Jam's notion of the - * current platform. - */ - var_defines( root_module(), othersyms, 1 ); - - /* Load up variables set on command line. */ - for ( n = 0; ( s = getoptval( optv, 's', n ) ); ++n ) - { - char * symv[ 2 ]; - symv[ 0 ] = s; - symv[ 1 ] = 0; - var_defines( root_module(), symv, 1 ); - var_defines( environ_module, symv, 0 ); - } - - /* Set the ARGV to reflect the complete list of arguments of invocation. - */ - for ( n = 0; n < arg_c; ++n ) - var_set( root_module(), constant_ARGV, list_new( object_new( - arg_v[ n ] ) ), VAR_APPEND ); - - /* Initialize built-in rules. */ - load_builtins(); - - /* Add the targets in the command line to the update list. */ - for ( n = 1; n < arg_c; ++n ) - { - if ( arg_v[ n ][ 0 ] == '-' ) - { - char * f = "-:l:d:j:f:gs:t:ano:qv"; - for ( ; *f; ++f ) if ( *f == arg_v[ n ][ 1 ] ) break; - if ( ( f[ 1 ] == ':' ) && ( arg_v[ n ][ 2 ] == '\0' ) ) ++n; - } - else - { - OBJECT * const target = object_new( arg_v[ n ] ); - mark_target_for_updating( target ); - object_free( target ); - } - } - - if ( list_empty( targets_to_update() ) ) - mark_target_for_updating( constant_all ); - - /* Parse ruleset. */ - { - FRAME frame[ 1 ]; - frame_init( frame ); - for ( n = 0; ( s = getoptval( optv, 'f', n ) ); ++n ) - { - OBJECT * const filename = object_new( s ); - parse_file( filename, frame ); - object_free( filename ); - } - - if ( !n ) - parse_file( constant_plus, frame ); - } - - status = yyanyerrors(); - - /* Manually touch -t targets. */ - for ( n = 0; ( s = getoptval( optv, 't', n ) ); ++n ) - { - OBJECT * const target = object_new( s ); - touch_target( target ); - object_free( target ); - } - - /* If an output file is specified, set globs.cmdout to that. */ - if ( ( s = getoptval( optv, 'o', 0 ) ) ) - { - if ( !( globs.cmdout = fopen( s, "w" ) ) ) - { - printf( "Failed to write to '%s'\n", s ); - exit( EXITBAD ); - } - ++globs.noexec; - } - - /* The build system may set the PARALLELISM variable to override -j - * options. - */ - { - LIST * const p = var_get( root_module(), constant_PARALLELISM ); - if ( !list_empty( p ) ) - { - int const j = atoi( object_str( list_front( p ) ) ); - if ( j < 1 || j > MAXJOBS ) - printf( "Invalid value of PARALLELISM: %s. Valid values " - "are 1 through %d.\n", object_str( list_front( p ) ), - MAXJOBS ); - else - globs.jobs = j; - } - } - - /* KEEP_GOING overrides -q option. */ - { - LIST * const p = var_get( root_module(), constant_KEEP_GOING ); - if ( !list_empty( p ) ) - globs.quitquick = atoi( object_str( list_front( p ) ) ) ? 0 : 1; - } - - /* Now make target. */ - { - PROFILE_ENTER( MAIN_MAKE ); - LIST * const targets = targets_to_update(); - if ( !list_empty( targets ) ) - status |= make( targets, anyhow ); - else - status = last_update_now_status; - PROFILE_EXIT( MAIN_MAKE ); - } - - PROFILE_EXIT( MAIN ); - } - - if ( DEBUG_PROFILE ) - profile_dump(); - - -#ifdef OPT_HEADER_CACHE_EXT - hcache_done(); -#endif - - clear_targets_to_update(); - - /* Widely scattered cleanup. */ - property_set_done(); - file_done(); - rules_done(); - timestamp_done(); - search_done(); - class_done(); - modules_done(); - regex_done(); - cwd_done(); - path_done(); - function_done(); - list_done(); - constants_done(); - object_done(); - - /* Close cmdout. */ - if ( globs.cmdout ) - fclose( globs.cmdout ); - -#ifdef HAVE_PYTHON - Py_Finalize(); -#endif - - BJAM_MEM_CLOSE(); - - return status ? EXITBAD : EXITOK; -} - - -/* - * executable_path() - */ - -#if defined(_WIN32) -# define WIN32_LEAN_AND_MEAN -# include <windows.h> -char * executable_path( char const * argv0 ) -{ - char buf[ 1024 ]; - DWORD const ret = GetModuleFileName( NULL, buf, sizeof( buf ) ); - return ( !ret || ret == sizeof( buf ) ) ? NULL : strdup( buf ); -} -#elif defined(__APPLE__) /* Not tested */ -# include <mach-o/dyld.h> -char *executable_path( char const * argv0 ) -{ - char buf[ 1024 ]; - uint32_t size = sizeof( buf ); - return _NSGetExecutablePath( buf, &size ) ? NULL : strdup( buf ); -} -#elif defined(sun) || defined(__sun) /* Not tested */ -# include <stdlib.h> -char * executable_path( char const * argv0 ) -{ - return strdup( getexecname() ); -} -#elif defined(__FreeBSD__) -# include <sys/sysctl.h> -char * executable_path( char const * argv0 ) -{ - int mib[ 4 ] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; - char buf[ 1024 ]; - size_t size = sizeof( buf ); - sysctl( mib, 4, buf, &size, NULL, 0 ); - return ( !size || size == sizeof( buf ) ) ? NULL : strndup( buf, size ); -} -#elif defined(__linux__) -# include <unistd.h> -char * executable_path( char const * argv0 ) -{ - char buf[ 1024 ]; - ssize_t const ret = readlink( "/proc/self/exe", buf, sizeof( buf ) ); - return ( !ret || ret == sizeof( buf ) ) ? NULL : strndup( buf, ret ); -} -#else -char * executable_path( char const * argv0 ) -{ - /* If argv0 is an absolute path, assume it is the right absolute path. */ - return argv0[ 0 ] == '/' ? strdup( argv0 ) : NULL; -} -#endif http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/6da3961b/ext/kenlm/jam-files/engine/jam.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/jam.h b/ext/kenlm/jam-files/engine/jam.h deleted file mode 100644 index 86ad0e8..0000000 --- a/ext/kenlm/jam-files/engine/jam.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - * Copyright 1993, 1995 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 copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ - -/* - * jam.h - includes and globals for jam - */ - -#ifndef JAM_H_VP_2003_08_01 -#define JAM_H_VP_2003_08_01 - -#ifdef HAVE_PYTHON -#include <Python.h> -#endif - -/* Assume popen support is available unless known otherwise. */ -#define HAVE_POPEN 1 - -/* - * Windows NT - */ - -#ifdef NT - -#include <ctype.h> -#include <fcntl.h> -#include <malloc.h> -#ifndef __MWERKS__ - #include <memory.h> -#endif -#include <stdio.h> -#include <stdlib.h> -#include <signal.h> -#include <string.h> -#include <time.h> - -#define OSMAJOR "NT=true" -#define OSMINOR "OS=NT" -#define OS_NT -#define SPLITPATH ';' -#define MAXLINE (undefined__see_execnt_c) /* max chars per command line */ -#define USE_EXECNT -#define PATH_DELIM '\\' - -/* AS400 cross-compile from NT. */ - -#ifdef AS400 - #undef OSMINOR - #undef OSMAJOR - #define OSMAJOR "AS400=true" - #define OSMINOR "OS=AS400" - #define OS_AS400 -#endif - -/* Metrowerks Standard Library on Windows. */ - -#ifdef __MSL__ - #undef HAVE_POPEN -#endif - -#endif /* #ifdef NT */ - - -/* - * Windows MingW32 - */ - -#ifdef MINGW - -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> -#include <malloc.h> -#include <memory.h> -#include <signal.h> -#include <string.h> -#include <time.h> - -#define OSMAJOR "MINGW=true" -#define OSMINOR "OS=MINGW" -#define OS_NT -#define SPLITPATH ';' -#define MAXLINE 996 /* max chars per command line */ -#define USE_EXECUNIX -#define PATH_DELIM '\\' - -#endif /* #ifdef MINGW */ - - -/* - * God fearing UNIX. - */ - -#ifndef OSMINOR - -#define OSMAJOR "UNIX=true" -#define USE_EXECUNIX -#define USE_FILEUNIX -#define PATH_DELIM '/' - -#ifdef _AIX - #define unix - #define MAXLINE 23552 /* 24k - 1k, max chars per command line */ - #define OSMINOR "OS=AIX" - #define OS_AIX - #define NO_VFORK -#endif -#ifdef AMIGA - #define OSMINOR "OS=AMIGA" - #define OS_AMIGA -#endif -#ifdef __BEOS__ - #define unix - #define OSMINOR "OS=BEOS" - #define OS_BEOS - #define NO_VFORK -#endif -#ifdef __bsdi__ - #define OSMINOR "OS=BSDI" - #define OS_BSDI -#endif -#if defined (COHERENT) && defined (_I386) - #define OSMINOR "OS=COHERENT" - #define OS_COHERENT - #define NO_VFORK -#endif -#if defined(__cygwin__) || defined(__CYGWIN__) - #define OSMINOR "OS=CYGWIN" - #define OS_CYGWIN -#endif -#if defined(__FreeBSD__) && !defined(__DragonFly__) - #define OSMINOR "OS=FREEBSD" - #define OS_FREEBSD -#endif -#ifdef __DragonFly__ - #define OSMINOR "OS=DRAGONFLYBSD" - #define OS_DRAGONFLYBSD -#endif -#ifdef __DGUX__ - #define OSMINOR "OS=DGUX" - #define OS_DGUX -#endif -#ifdef __hpux - #define OSMINOR "OS=HPUX" - #define OS_HPUX -#endif -#ifdef __OPENNT - #define unix - #define OSMINOR "OS=INTERIX" - #define OS_INTERIX - #define NO_VFORK -#endif -#ifdef __sgi - #define OSMINOR "OS=IRIX" - #define OS_IRIX - #define NO_VFORK -#endif -#ifdef __ISC - #define OSMINOR "OS=ISC" - #define OS_ISC - #define NO_VFORK -#endif -#ifdef linux - #define OSMINOR "OS=LINUX" - #define OS_LINUX -#endif -#ifdef __Lynx__ - #define OSMINOR "OS=LYNX" - #define OS_LYNX - #define NO_VFORK - #define unix -#endif -#ifdef __MACHTEN__ - #define OSMINOR "OS=MACHTEN" - #define OS_MACHTEN -#endif -#ifdef mpeix - #define unix - #define OSMINOR "OS=MPEIX" - #define OS_MPEIX - #define NO_VFORK -#endif -#ifdef __MVS__ - #define unix - #define OSMINOR "OS=MVS" - #define OS_MVS -#endif -#ifdef _ATT4 - #define OSMINOR "OS=NCR" - #define OS_NCR -#endif -#ifdef __NetBSD__ - #define unix - #define OSMINOR "OS=NETBSD" - #define OS_NETBSD - #define NO_VFORK -#endif -#ifdef __QNX__ - #define unix - #ifdef __QNXNTO__ - #define OSMINOR "OS=QNXNTO" - #define OS_QNXNTO - #else - #define OSMINOR "OS=QNX" - #define OS_QNX - #define NO_VFORK - #define MAXLINE 996 /* max chars per command line */ - #endif -#endif -#ifdef NeXT - #ifdef __APPLE__ - #define OSMINOR "OS=RHAPSODY" - #define OS_RHAPSODY - #else - #define OSMINOR "OS=NEXT" - #define OS_NEXT - #endif -#endif -#ifdef __APPLE__ - #define unix - #define OSMINOR "OS=MACOSX" - #define OS_MACOSX -#endif -#ifdef __osf__ - #ifndef unix - #define unix - #endif - #define OSMINOR "OS=OSF" - #define OS_OSF -#endif -#ifdef _SEQUENT_ - #define OSMINOR "OS=PTX" - #define OS_PTX -#endif -#ifdef M_XENIX - #define OSMINOR "OS=SCO" - #define OS_SCO - #define NO_VFORK -#endif -#ifdef sinix - #define unix - #define OSMINOR "OS=SINIX" - #define OS_SINIX -#endif -#ifdef sun - #if defined(__svr4__) || defined(__SVR4) - #define OSMINOR "OS=SOLARIS" - #define OS_SOLARIS - #else - #define OSMINOR "OS=SUNOS" - #define OS_SUNOS - #endif -#endif -#ifdef ultrix - #define OSMINOR "OS=ULTRIX" - #define OS_ULTRIX -#endif -#ifdef _UNICOS - #define OSMINOR "OS=UNICOS" - #define OS_UNICOS -#endif -#if defined(__USLC__) && !defined(M_XENIX) - #define OSMINOR "OS=UNIXWARE" - #define OS_UNIXWARE -#endif -#ifdef __OpenBSD__ - #define OSMINOR "OS=OPENBSD" - #define OS_OPENBSD - #define unix -#endif -#if defined (__FreeBSD_kernel__) && !defined(__FreeBSD__) - #define OSMINOR "OS=KFREEBSD" - #define OS_KFREEBSD -#endif -#ifndef OSMINOR - #define OSMINOR "OS=UNKNOWN" -#endif - -/* All the UNIX includes */ - -#include <sys/types.h> - -#ifndef OS_MPEIX - #include <sys/file.h> -#endif - -#include <fcntl.h> -#include <stdio.h> -#include <ctype.h> -#include <signal.h> -#include <string.h> -#include <time.h> -#include <unistd.h> - -#ifndef OS_QNX - #include <memory.h> -#endif - -#ifndef OS_ULTRIX - #include <stdlib.h> -#endif - -#if !defined( OS_BSDI ) && \ - !defined( OS_FREEBSD ) && \ - !defined( OS_DRAGONFLYBSD ) && \ - !defined( OS_NEXT ) && \ - !defined( OS_MACHTEN ) && \ - !defined( OS_MACOSX ) && \ - !defined( OS_RHAPSODY ) && \ - !defined( OS_MVS ) && \ - !defined( OS_OPENBSD ) - #include <malloc.h> -#endif - -#endif /* #ifndef OSMINOR */ - - -/* - * OSPLAT definitions - suppressed when it is a one-of-a-kind. - */ - -#if defined( _M_PPC ) || \ - defined( PPC ) || \ - defined( ppc ) || \ - defined( __powerpc__ ) || \ - defined( __ppc__ ) - #define OSPLAT "OSPLAT=PPC" -#endif - -#if defined( _ALPHA_ ) || \ - defined( __alpha__ ) - #define OSPLAT "OSPLAT=AXP" -#endif - -#if defined( _i386_ ) || \ - defined( __i386__ ) || \ - defined( __i386 ) || \ - defined( _M_IX86 ) - #define OSPLAT "OSPLAT=X86" -#endif - -#if defined( __ia64__ ) || \ - defined( __IA64__ ) || \ - defined( __ia64 ) - #define OSPLAT "OSPLAT=IA64" -#endif - -#if defined( __x86_64__ ) || \ - defined( __amd64__ ) || \ - defined( _M_AMD64 ) - #define OSPLAT "OSPLAT=X86_64" -#endif - -#if defined( __sparc__ ) || \ - defined( __sparc ) - #define OSPLAT "OSPLAT=SPARC" -#endif - -#ifdef __mips__ - #define OSPLAT "OSPLAT=MIPS" -#endif - -#ifdef __arm__ - #define OSPLAT "OSPLAT=ARM" -#endif - -#ifdef __s390__ - #define OSPLAT "OSPLAT=390" -#endif - -#ifdef __hppa - #define OSPLAT "OSPLAT=PARISC" -#endif - -#ifndef OSPLAT - #define OSPLAT "" -#endif - - -/* - * Jam implementation misc. - */ - -#ifndef MAXLINE - #define MAXLINE 102400 /* max chars per command line */ -#endif - -#ifndef EXITOK - #define EXITOK 0 - #define EXITBAD 1 -#endif - -#ifndef SPLITPATH - #define SPLITPATH ':' -#endif - -/* You probably do not need to muck with these. */ - -#define MAXSYM 1024 /* longest symbol in the environment */ -#define MAXJPATH 1024 /* longest filename */ - -#define MAXJOBS 64 /* internally enforced -j limit */ -#define MAXARGC 32 /* words in $(JAMSHELL) */ - -/* Jam private definitions below. */ - -#define DEBUG_MAX 14 - - -struct globs -{ - int noexec; - int jobs; - int quitquick; - int newestfirst; /* build newest sources first */ - int pipe_action; - char debug[ DEBUG_MAX ]; - FILE * cmdout; /* print cmds, not run them */ - long timeout; /* number of seconds to limit actions to, - * default 0 for no limit. - */ - int dart; /* output build and test results formatted for - * Dart - */ - int max_buf; /* maximum amount of output saved from target - * (kb) - */ -}; - -extern struct globs globs; - -#define DEBUG_MAKE ( globs.debug[ 1 ] ) /* show actions when executed */ -#define DEBUG_MAKEQ ( globs.debug[ 2 ] ) /* show even quiet actions */ -#define DEBUG_EXEC ( globs.debug[ 2 ] ) /* show text of actons */ -#define DEBUG_MAKEPROG ( globs.debug[ 3 ] ) /* show make0 progress */ -#define DEBUG_BIND ( globs.debug[ 3 ] ) /* show when files bound */ - -#define DEBUG_EXECCMD ( globs.debug[ 4 ] ) /* show execcmds()'s work */ - -#define DEBUG_COMPILE ( globs.debug[ 5 ] ) /* show rule invocations */ - -#define DEBUG_HEADER ( globs.debug[ 6 ] ) /* show result of header scan */ -#define DEBUG_BINDSCAN ( globs.debug[ 6 ] ) /* show result of dir scan */ -#define DEBUG_SEARCH ( globs.debug[ 6 ] ) /* show binding attempts */ - -#define DEBUG_VARSET ( globs.debug[ 7 ] ) /* show variable settings */ -#define DEBUG_VARGET ( globs.debug[ 8 ] ) /* show variable fetches */ -#define DEBUG_VAREXP ( globs.debug[ 8 ] ) /* show variable expansions */ -#define DEBUG_IF ( globs.debug[ 8 ] ) /* show 'if' calculations */ -#define DEBUG_LISTS ( globs.debug[ 9 ] ) /* show list manipulation */ -#define DEBUG_SCAN ( globs.debug[ 9 ] ) /* show scanner tokens */ -#define DEBUG_MEM ( globs.debug[ 9 ] ) /* show memory use */ - -#define DEBUG_PROFILE ( globs.debug[ 10 ] ) /* dump rule execution times */ -#define DEBUG_PARSE ( globs.debug[ 11 ] ) /* debug parsing */ -#define DEBUG_GRAPH ( globs.debug[ 12 ] ) /* debug dependencies */ -#define DEBUG_FATE ( globs.debug[ 13 ] ) /* show fate changes in make0() */ - -/* Everyone gets the memory definitions. */ -#include "mem.h" - -/* They also get the profile functions. */ -#include "debug.h" - -#endif
