int make1( TARGET *t ) { state *pState; memset( (char *)counts, 0, sizeof( *counts ) ); /* Recursively make the target and its dependents */ push_state(&state_stack, t, NULL, T_STATE_MAKE1A); do { while((pState = current_state(&state_stack)) != NULL) { if (intr) pop_state(&state_stack); switch(pState->curstate) { case T_STATE_MAKE1A: make1a(pState); break; case T_STATE_MAKE1ATAIL: make1atail(pState); break; case T_STATE_MAKE1B: make1b(pState); break; case T_STATE_MAKE1C: make1c(pState); break; case T_STATE_MAKE1D: make1d(pState); break; default: break; } } /* Wait for any outstanding commands to finish running. */ } while( execwait() ); clear_state_freelist(); /* Talk about it */ if( counts->failed ) printf( "...failed updating %d target%s...\n", counts->failed, counts->failed > 1 ? "s" : "" ); if( DEBUG_MAKE && counts->skipped ) printf( "...skipped %d target%s...\n", counts->skipped, counts->skipped > 1 ? "s" : "" ); if( DEBUG_MAKE && counts->made ) printf( "...updated %d target%s...\n", counts->made, counts->made > 1 ? "s" : "" ); return counts->total != counts->made; }
int make1( TARGET * const t ) { state * pState; memset( (char *)counts, 0, sizeof( *counts ) ); /* Recursively make the target and its dependencies. */ push_state( &state_stack, t, NULL, T_STATE_MAKE1A ); while ( 1 ) { while ( ( pState = current_state( &state_stack ) ) ) { if ( intr ) pop_state( &state_stack ); switch ( pState->curstate ) { case T_STATE_MAKE1A: make1a( pState ); break; case T_STATE_MAKE1B: make1b( pState ); break; case T_STATE_MAKE1C: make1c( pState ); break; default: assert( !"make1(): Invalid state detected." ); } } if ( !cmdsrunning ) break; /* Wait for outstanding commands to finish running. */ exec_wait(); } clear_state_freelist(); /* Talk about it. */ if ( counts->failed ) printf( "...failed updating %d target%s...\n", counts->failed, counts->failed > 1 ? "s" : "" ); if ( DEBUG_MAKE && counts->skipped ) printf( "...skipped %d target%s...\n", counts->skipped, counts->skipped > 1 ? "s" : "" ); if ( DEBUG_MAKE && counts->made ) printf( "...updated %d target%s...\n", counts->made, counts->made > 1 ? "s" : "" ); return counts->total != counts->made; }
int make1( LIST * targets ) { state * pState; int status = 0; memset( (char *)counts, 0, sizeof( *counts ) ); { LISTITER iter, end; stack temp_stack = { NULL }; for ( iter = list_begin( targets ), end = list_end( targets ); iter != end; iter = list_next( iter ) ) push_state( &temp_stack, bindtarget( list_item( iter ) ), NULL, T_STATE_MAKE1A ); push_stack_on_stack( &state_stack, &temp_stack ); } /* Clear any state left over from the past */ quit = 0; /* Recursively make the target and its dependencies. */ while ( 1 ) { while ( ( pState = current_state( &state_stack ) ) ) { if ( quit ) pop_state( &state_stack ); switch ( pState->curstate ) { case T_STATE_MAKE1A: make1a( pState ); break; case T_STATE_MAKE1B: make1b( pState ); break; case T_STATE_MAKE1C: make1c( pState ); break; default: assert( !"make1(): Invalid state detected." ); } } if ( !cmdsrunning ) break; /* Wait for outstanding commands to finish running. */ exec_wait(); } clear_state_freelist(); /* Talk about it. */ if ( counts->failed ) printf( "...failed updating %d target%s...\n", counts->failed, counts->failed > 1 ? "s" : "" ); if ( DEBUG_MAKE && counts->skipped ) printf( "...skipped %d target%s...\n", counts->skipped, counts->skipped > 1 ? "s" : "" ); if ( DEBUG_MAKE && counts->made ) printf( "...updated %d target%s...\n", counts->made, counts->made > 1 ? "s" : "" ); /* If we were interrupted, exit now that all child processes have finished. */ if ( intr ) exit( 1 ); { LISTITER iter, end; for ( iter = list_begin( targets ), end = list_end( targets ); iter != end; iter = list_next( iter ) ) { /* Check that the target was updated and that the update succeeded. */ TARGET * t = bindtarget( list_item( iter ) ); if (t->progress == T_MAKE_DONE) { if (t->status != EXEC_CMD_OK) status = 1; } else if ( ! ( t->progress == T_MAKE_NOEXEC_DONE && globs.noexec ) ) { status = 1; } } } return status; }