diff options
-rw-r--r-- | build2/config/operation.cxx | 16 | ||||
-rw-r--r-- | build2/operation.cxx | 4 |
2 files changed, 14 insertions, 6 deletions
diff --git a/build2/config/operation.cxx b/build2/config/operation.cxx index d5a1565..14ab38c 100644 --- a/build2/config/operation.cxx +++ b/build2/config/operation.cxx @@ -381,14 +381,18 @@ namespace build2 id < rs->operations.size (); ++id) { - const operation_info* oif (rs->operations[id]); - if (oif == nullptr) - continue; + if (const operation_info* oif = rs->operations[id]) + { + // Skip aliases (e.g., update-for-install). + // + if (oif->id != id) + continue; - set_current_oif (*oif); + set_current_oif (*oif); - phase_lock pl (run_phase::match); - match (action (configure_id, id), t); + phase_lock pl (run_phase::match); + match (action (configure_id, id), t); + } } configure_project (a, *rs, projects); diff --git a/build2/operation.cxx b/build2/operation.cxx index f262321..b242cb3 100644 --- a/build2/operation.cxx +++ b/build2/operation.cxx @@ -537,6 +537,10 @@ namespace build2 #ifndef _MSC_VER constexpr #else + // VC doesn't "see" this can be const-initialized so we have to hack around + // to ensure correct initialization order. + // + #pragma init_seg(lib) const #endif operation_info op_update { |