| 278 | */ |
| 279 | |
| 280 | void make0 |
| 281 | ( |
| 282 | TARGET * t, |
| 283 | TARGET * p, /* parent */ |
| 284 | int32_t depth, /* for display purposes */ |
| 285 | COUNTS * counts, /* for reporting */ |
| 286 | int32_t anyhow, |
| 287 | TARGET * rescanning |
| 288 | ) /* forcibly touch all (real) targets */ |
| 289 | { |
| 290 | TARGETS * c; |
| 291 | TARGET * ptime = t; |
| 292 | TARGET * located_target = 0; |
| 293 | timestamp last; |
| 294 | timestamp leaf; |
| 295 | timestamp hlast; |
| 296 | int32_t fate; |
| 297 | char const * flag = ""; |
| 298 | SETTINGS * s; |
| 299 | |
| 300 | #ifdef OPT_GRAPH_DEBUG_EXT |
| 301 | int32_t savedFate; |
| 302 | int32_t oldTimeStamp; |
| 303 | #endif |
| 304 | |
| 305 | if ( DEBUG_MAKEPROG ) |
| 306 | out_printf( "make\t--\t%s%s\n", spaces( depth ), object_str( t->name ) ); |
| 307 | |
| 308 | /* |
| 309 | * Step 1: Initialize. |
| 310 | */ |
| 311 | |
| 312 | if ( DEBUG_MAKEPROG ) |
| 313 | out_printf( "make\t--\t%s%s\n", spaces( depth ), object_str( t->name ) ); |
| 314 | |
| 315 | t->fate = T_FATE_MAKING; |
| 316 | t->depth = depth; |
| 317 | |
| 318 | /* |
| 319 | * Step 2: Under the influence of "on target" variables, bind the target and |
| 320 | * search for headers. |
| 321 | */ |
| 322 | |
| 323 | /* Step 2a: Set "on target" variables. */ |
| 324 | s = copysettings( t->settings ); |
| 325 | pushsettings( root_module(), s ); |
| 326 | |
| 327 | /* Step 2b: Find and timestamp the target file (if it is a file). */ |
| 328 | if ( ( t->binding == T_BIND_UNBOUND ) && !( t->flags & T_FLAG_NOTFILE ) ) |
| 329 | { |
| 330 | OBJECT * another_target; |
| 331 | object_free( t->boundname ); |
| 332 | t->boundname = search( t->name, &t->time, &another_target, |
| 333 | t->flags & T_FLAG_ISFILE ); |
| 334 | /* If it was detected that this target refers to an already existing and |
| 335 | * bound target, we add a dependency so that every target depending on |
| 336 | * us will depend on that other target as well. |
| 337 | */ |
no test coverage detected