continue;
}
if (i < argc - 1) {
- if (str_eq(argv[i], "-MF")) {
+ if (str_startswith(argv[i], "-MF")) {
+ char *arg;
dependency_filename_specified = true;
free(output_dep);
- output_dep = make_relative_path(x_strdup(argv[i + 1]));
args_add(dep_args, argv[i]);
- args_add(dep_args, argv[i + 1]);
- i++;
+ if (strlen(argv[i]) == 3) {
+ /* -MF arg */
+ arg = argv[i + 1];
+ args_add(dep_args, argv[i + 1]);
+ i++;
+ } else {
+ /* -MFarg */
+ arg = &argv[i][3];
+ }
+ output_dep = make_relative_path(x_strdup(arg));
continue;
- } else if (str_eq(argv[i], "-MQ") || str_eq(argv[i], "-MT")) {
+ } else if (str_startswith(argv[i], "-MQ")
+ || str_startswith(argv[i], "-MT")) {
dependency_target_specified = true;
args_add(dep_args, argv[i]);
- args_add(dep_args, argv[i + 1]);
- i++;
+ if (strlen(argv[i]) == 3) {
+ /* -MQ arg or -MT arg */
+ args_add(dep_args, argv[i + 1]);
+ i++;
+ }
continue;
}
}
args_free(orig);
}
+TEST(dependency_flags_that_take_an_argument_should_not_require_space_delimiter)
+{
+ struct args *orig = args_init_from_string(
+ "cc -c -MMD -MFfoo.d -MTmt -MQmq foo.c -o foo.o");
+ struct args *exp_cpp = args_init_from_string(
+ "cc -c -MMD -MFfoo.d -MTmt -MQmq");
+ struct args *exp_cc = args_init_from_string("cc -c");
+ struct args *act_cpp = NULL, *act_cc = NULL;
+ create_file("foo.c", "");
+
+ CHECK(cc_process_args(orig, &act_cpp, &act_cc));
+ CHECK_ARGS_EQ_FREE12(exp_cpp, act_cpp);
+ CHECK_ARGS_EQ_FREE12(exp_cc, act_cc);
+
+ args_free(orig);
+}
+
TEST_SUITE_END