Check disposition for startup file.
(Incremental_inputs::report_command_line): Ignore
--incremental-startup-unchanged option.
* options.cc (General_options::parse_incremental_startup_unchanged):
New function.
(General_options::General_options): Initialize new data member.
* options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
(General_options): Add --incremental-startup-unchanged option.
(General_options::incremental_startup_disposition): New function.
(General_options::incremental_startup_disposition_): New data member.
+2011-07-06 Cary Coutant <ccoutant@google.com>
+
+ * incremental.cc (Sized_incremental_binary::do_file_has_changed):
+ Check disposition for startup file.
+ (Incremental_inputs::report_command_line): Ignore
+ --incremental-startup-unchanged option.
+ * options.cc (General_options::parse_incremental_startup_unchanged):
+ New function.
+ (General_options::General_options): Initialize new data member.
+ * options.h (Incremental_disposition): Add INCREMENTAL_STARTUP.
+ (General_options): Add --incremental-startup-unchanged option.
+ (General_options::incremental_startup_disposition): New function.
+ (General_options::incremental_startup_disposition_): New data member.
+
2011-07-06 Cary Coutant <ccoutant@google.com>
* incremental.cc (Sized_incremental_binary::setup_readers): Pass
if (input_argument != NULL)
disp = input_argument->file().options().incremental_disposition();
+ // For files at the beginning of the command line (i.e., those added
+ // implicitly by gcc), check whether the --incremental-startup-unchanged
+ // option was used.
+ if (disp == INCREMENTAL_STARTUP)
+ disp = parameters->options().incremental_startup_disposition();
+
if (disp != INCREMENTAL_CHECK)
return disp == INCREMENTAL_CHANGED;
|| strcmp(argv[i], "--incremental-changed") == 0
|| strcmp(argv[i], "--incremental-unchanged") == 0
|| strcmp(argv[i], "--incremental-unknown") == 0
+ || strcmp(argv[i], "--incremental-startup-unchanged") == 0
|| is_prefix_of("--incremental-base=", argv[i])
|| is_prefix_of("--incremental-patch=", argv[i])
|| is_prefix_of("--debug=", argv[i]))
this->incremental_disposition_ = INCREMENTAL_CHECK;
}
+void
+General_options::parse_incremental_startup_unchanged(const char*, const char*,
+ Command_line*)
+{
+ this->implicit_incremental_ = true;
+ this->incremental_startup_disposition_ = INCREMENTAL_UNCHANGED;
+}
+
void
General_options::parse_library(const char*, const char* arg,
Command_line* cmdline)
plugins_(NULL),
dynamic_list_(),
incremental_mode_(INCREMENTAL_OFF),
- incremental_disposition_(INCREMENTAL_CHECK),
+ incremental_disposition_(INCREMENTAL_STARTUP),
+ incremental_startup_disposition_(INCREMENTAL_CHECK),
implicit_incremental_(false),
excluded_libs_(),
symbols_to_retain_(),
enum Incremental_disposition
{
+ // Startup files that appear before the first disposition option.
+ // These will default to INCREMENTAL_CHECK unless the
+ // --incremental-startup-unchanged option is given.
+ // (For files added implicitly by gcc before any user options.)
+ INCREMENTAL_STARTUP,
// Determine the status from the timestamp (default).
INCREMENTAL_CHECK,
// Assume the file changed from the previous build.
DEFINE_special(incremental_unknown, options::TWO_DASHES, '\0',
N_("Use timestamps to check files (default)"), NULL);
+ DEFINE_special(incremental_startup_unchanged, options::TWO_DASHES, '\0',
+ N_("Assume startup files unchanged "
+ "(files preceding this option)"), NULL);
+
DEFINE_percent(incremental_patch, options::TWO_DASHES, '\0', 10,
N_("Amount of extra space to allocate for patches"),
N_("PERCENT"));
incremental_disposition() const
{ return this->incremental_disposition_; }
+ // The disposition to use for startup files (those that precede the
+ // first --incremental-changed, etc. option).
+ Incremental_disposition
+ incremental_startup_disposition() const
+ { return this->incremental_startup_disposition_; }
+
// Return true if S is the name of a library excluded from automatic
// symbol export.
bool
// --incremental-unchanged or --incremental-unknown option. The
// value may change as we proceed parsing the command line flags.
Incremental_disposition incremental_disposition_;
+ // The disposition to use for startup files (those marked
+ // INCREMENTAL_STARTUP).
+ Incremental_disposition incremental_startup_disposition_;
// Whether we have seen one of the options that require incremental
- // build (--incremental-changed, --incremental-unchanged or
- // --incremental-unknown)
+ // build (--incremental-changed, --incremental-unchanged,
+ // --incremental-unknown, or --incremental-startup-unchanged).
bool implicit_incremental_;
// Libraries excluded from automatic export, via --exclude-libs.
Unordered_set<std::string> excluded_libs_;