diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/redo.c | 21 | 
1 files changed, 14 insertions, 7 deletions
@@ -52,18 +52,19 @@ void prepare_env() {  }  int main(int argc, char *argv[]) { -	prepare_env();  	char *argv_base = xbasename(argv[0]);  	if (!strcmp(argv_base, "redo")) { +		prepare_env();  		if (argc < 2) {  			update_target("all", 'a');  		} else {  			for (int i = 1; i < argc; ++i)  				update_target(argv[i], 'a');  		} -		return EXIT_SUCCESS;  	} else { +		char *parent = getenv("REDO_PARENT_TARGET"); +  		char ident;  		if      (!strcmp(argv_base, "redo-ifchange"))  			ident = 'c'; @@ -74,11 +75,17 @@ int main(int argc, char *argv[]) {  		else  			die("redo: argv set to unkown value\n"); -		for (int i = 1; i < argc; ++i) { -			update_target(argv[i], ident); -			add_dep(argv[i], NULL, ident); -		} +		if (!parent) +			die("%s must be called inside a .do script\n", argv[0]); -		return EXIT_SUCCESS; +		if (ident == 'a') +			add_dep(parent, parent, ident); +		else +			for (int i = 1; i < argc; ++i) { +				update_target(argv[i], ident); +				add_dep(argv[i], parent, ident); +			}  	} + +	return EXIT_SUCCESS;  }  | 
