make( 1, &all, anyhow );
{ status |= make( 1, &all, anyhow ); }
int  main( int argc, char **argv, char **arg_environ ){    int		n;    char		*s;    struct option	optv[N_OPTS];    char		*all = "all";    int		anyhow = 0;    int		status;    int arg_c = argc;    char ** arg_v = argv;# ifdef OS_MAC    InitGraf(&qd.thePort);# endif    argc--, argv++;	if( ( n = getoptions( argc, argv, "-:d:j:f:gs:t:ano:qv", optv ) ) < 0 )    {        printf( "\nusage: jam [ options ] targets...\n\n" );        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( "-n      Don't actually execute the updating actions.\n" );        printf( "-ox     Write the updating actions to file x.\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 );    }    argc -= n, argv += n;    /* Version info. */    if( ( s = getoptval( optv, 'v', 0 ) ) )    {        printf( "Boost.Jam  " );        printf( "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-2002 David Abrahams.\n" );        return EXITOK;    }    /* Pick up interesting options */    if( ( s = getoptval( optv, 'n', 0 ) ) )        globs.noexec++, globs.debug[2] = 1;	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( ( s = getoptval( optv, 'g', 0 ) ) )	    globs.newestfirst = 1;    /* 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;    }#ifndef NDEBUG    run_unit_tests();#endif#if YYDEBUG != 0    if ( DEBUG_PARSE )        yydebug = 1;#endif    /* Set JAMDATE first */    {        char *date;        time_t clock;        time( &clock );        date = newstr( ctime( &clock ) );        /* Trim newline from date */        if( strlen( date ) == 25 )            date[ 24 ] = 0;        var_set( "JAMDATE", list_new( L0, newstr( date ) ), VAR_SET );    }    var_set( "JAM_VERSION",             list_new( list_new( list_new( L0, newstr( "03" ) ), newstr( "01" ) ),                        newstr( "03" ) ),             VAR_SET );    /* And JAMUNAME */# ifdef unix    {        struct utsname u;        if( uname( &u ) >= 0 )        {            var_set( "JAMUNAME",                      list_new(                          list_new(                             list_new(                                 list_new(                                     list_new( L0,                                                newstr( u.sysname ) ),                                     newstr( u.nodename ) ),                                 newstr( u.release ) ),                             newstr( u.version ) ),                         newstr( u.machine ) ), VAR_SET );        }    }# endif /* unix */	/*	 * Jam defined variables OS, OSPLAT	 */    var_defines( othersyms );    /* load up environment variables */    var_defines( use_environ );    /* 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( symv );    }    /* Set the ARGV to reflect the complete list of arguments of invocation. */    for ( n = 0; n < arg_c; ++n )    {        var_set( "ARGV", list_new( L0, newstr( arg_v[n] ) ), VAR_APPEND );    }	/* Initialize built-in rules */	load_builtins();    /* Parse ruleset */    {        FRAME frame[1];        frame_init( frame );	for( n = 0; s = getoptval( optv, 'f', n ); n++ )	    parse_file( s, frame );	if( !n )	    parse_file( "+", frame );    }    status = yyanyerrors();    /* Manually touch -t targets */    for( n = 0; s = getoptval( optv, 't', n ); n++ )        touchtarget( s );    /* 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++;    }    /* Now make target */    {        LIST* targets = targets_to_update();        if ( !targets )            make( 1, &all, anyhow );        else         {            int targets_count = list_length(targets);            char **targets2 = (char **)malloc(targets_count * sizeof(char *));            int n = 0;            for ( ; targets; targets = list_next(targets) )            {                targets2[n++] = targets->string;            }            status |= make( targets_count, targets2, anyhow );                   free(targets);        }    }    if ( DEBUG_PROFILE )        profile_dump();    /* Widely scattered cleanup */    var_done();    donerules();    donestamps();    donestr();    /* close cmdout */    if( globs.cmdout )        fclose( globs.cmdout );    return status ? EXITBAD : EXITOK;}