When generate dependency names internally, quote filenames
authorH. Peter Anvin <hpa@zytor.com>
Mon, 10 Sep 2012 00:09:00 +0000 (17:09 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Mon, 10 Sep 2012 00:09:00 +0000 (17:09 -0700)
Quote filenames for Make when generated for filenames internally.
Only skip quoting when using the -MT option (rather than -MQ).

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
doc/changes.src
doc/nasmdoc.src
nasm.c

index ad16800..63077c4 100644 (file)
@@ -7,6 +7,14 @@
 The NASM 2 series supports x86-64, and is the production version of NASM
 since 2007.
 
+\S{cl-2.10.06} Version 2.10.06
+
+\b Always quote the dependency source names when using the automatic
+dependency generation options.
+
+\b If no dependency target name is specified via the \c{-MT} or
+\c{-MQ} options, quote the default output name.
+
 \S{cl-2.10.05} Version 2.10.05
 
 \b Add the \c{CLAC} and \c{STAC} instructions.
index 0d21090..55dbfc0 100644 (file)
@@ -626,7 +626,8 @@ specified by the \c{-o} option.
 The \c{-MQ} option acts as the \c{-MT} option, except it tries to
 quote characters that have special meaning in Makefile syntax.  This
 is not foolproof, as not all characters with special meaning are
-quotable in Make.
+quotable in Make.  The default output (if no \c{-MT} or \c{-MQ} option
+is specified) is automatically quoted.
 
 
 \S{opt-MP} The \i\c{-MP} Option: Emit phony targets
diff --git a/nasm.c b/nasm.c
index 63e73e7..2ee319f 100644 (file)
--- a/nasm.c
+++ b/nasm.c
@@ -177,6 +177,8 @@ static bool want_usage;
 static bool terminate_after_phase;
 int user_nolist = 0;            /* fbk 9/2/00 */
 
+static char *quote_for_make(const char *str);
+
 static void nasm_fputs(const char *line, FILE * outfile)
 {
     if (outfile) {
@@ -286,13 +288,15 @@ static void emit_dependencies(StrList *list)
 
     linepos = fprintf(deps, "%s:", depend_target);
     list_for_each(l, list) {
-       len = strlen(l->str);
-       if (linepos + len > 62) {
+        char *file = quote_for_make(l->str);
+       len = strlen(file);
+       if (linepos + len > 62 && linepos > 1) {
            fprintf(deps, " \\\n ");
            linepos = 1;
        }
-       fprintf(deps, " %s", l->str);
+       fprintf(deps, " %s", file);
        linepos += len+1;
+        nasm_free(file);
     }
     fprintf(deps, "\n\n");
 
@@ -356,7 +360,7 @@ int main(int argc, char **argv)
     depend_ptr = (depend_file || (operating_mode == op_depend))
        ? &depend_list : NULL;
     if (!depend_target)
-       depend_target = outname;
+       depend_target = quote_for_make(outname);
 
     switch (operating_mode) {
     case op_depend: