mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-23 17:29:23 +08:00
Implement the -MG option (SF RFE 1564264)
Implement the -MG option, to generate dependencies in the presence of generated files. In the end, we probably need to support the full gamut of GCC-like dependency-generation options.
This commit is contained in:
parent
dee8eaa967
commit
37a321fbbe
@ -16,6 +16,7 @@
|
||||
\IR{-F} \c{-F} option
|
||||
\IR{-I} \c{-I} option
|
||||
\IR{-M} \c{-M} option
|
||||
\IR{-MG} \c{-MG} option
|
||||
\IR{-On} \c{-On} option
|
||||
\IR{-P} \c{-P} option
|
||||
\IR{-U} \c{-U} option
|
||||
@ -519,6 +520,14 @@ This can be redirected to a file for further processing. For example:
|
||||
\c NASM -M myfile.asm > myfile.dep
|
||||
|
||||
|
||||
\S{opt-MG} The \i\c{-MG} Option: Generate \i{Makefile Dependencies}.
|
||||
|
||||
This option can be used to generate makefile dependencies on stdout.
|
||||
This differs from the \c{-M} option in that if a nonexisting file is
|
||||
encountered, it is assumed to be a generated file and is added to the
|
||||
dependency list without a prefix.
|
||||
|
||||
|
||||
\S{opt-F} The \i\c{-F} Option: Selecting a \i{Debug Information Format}
|
||||
|
||||
This option is used to select the format of the debug information emitted
|
||||
|
11
nasm.c
11
nasm.c
@ -80,7 +80,8 @@ static Preproc *preproc;
|
||||
enum op_type {
|
||||
op_normal, /* Preprocess and assemble */
|
||||
op_preprocess, /* Preprocess only */
|
||||
op_depend /* Generate dependencies */
|
||||
op_depend, /* Generate dependencies */
|
||||
op_depend_missing_ok, /* Generate dependencies, missing OK */
|
||||
};
|
||||
static enum op_type operating_mode;
|
||||
|
||||
@ -196,6 +197,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
switch (operating_mode) {
|
||||
case op_depend_missing_ok:
|
||||
pp_include_path(NULL); /* "assume generated" */
|
||||
/* fall through */
|
||||
case op_depend:
|
||||
{
|
||||
char *line;
|
||||
@ -479,7 +483,8 @@ static int process_arg(char *p, char *q)
|
||||
printf
|
||||
(" -e preprocess only (writes output to stdout by default)\n"
|
||||
" -a don't preprocess (assemble only)\n"
|
||||
" -M generate Makefile dependencies on stdout\n\n"
|
||||
" -M generate Makefile dependencies on stdout\n"
|
||||
" -MG d:o, missing files assumed generated\n\n"
|
||||
" -E<file> redirect error messages to file\n"
|
||||
" -s redirect error messages to stdout\n\n"
|
||||
" -F format select a debugging format\n\n"
|
||||
@ -553,7 +558,7 @@ static int process_arg(char *p, char *q)
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
operating_mode = op_depend;
|
||||
operating_mode = p[2] == 'G' ? op_depend_missing_ok : op_depend;
|
||||
break;
|
||||
|
||||
case '-':
|
||||
|
38
preproc.c
38
preproc.c
@ -1178,6 +1178,19 @@ static FILE *inc_fopen(char *file)
|
||||
break;
|
||||
prefix = ip->path;
|
||||
ip = ip->next;
|
||||
|
||||
if (!prefix) {
|
||||
/* -MG given and file not found */
|
||||
if (pass == 0) {
|
||||
namelen += strlen(file) + 1;
|
||||
if (namelen > 62) {
|
||||
printf(" \\\n ");
|
||||
namelen = 2;
|
||||
}
|
||||
printf(" %s", file);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
error(ERR_FATAL, "unable to open include file `%s'", file);
|
||||
@ -1868,14 +1881,19 @@ static int do_directive(Token * tline)
|
||||
inc->next = istk;
|
||||
inc->conds = NULL;
|
||||
inc->fp = inc_fopen(p);
|
||||
inc->fname = src_set_fname(p);
|
||||
inc->lineno = src_set_linnum(0);
|
||||
inc->lineinc = 1;
|
||||
inc->expansion = NULL;
|
||||
inc->mstk = NULL;
|
||||
istk = inc;
|
||||
list->uplevel(LIST_INCLUDE);
|
||||
free_tlist(origline);
|
||||
if (!inc->fp && pass == 0) {
|
||||
/* -MG given but file not found */
|
||||
nasm_free(inc);
|
||||
} else {
|
||||
inc->fname = src_set_fname(p);
|
||||
inc->lineno = src_set_linnum(0);
|
||||
inc->lineinc = 1;
|
||||
inc->expansion = NULL;
|
||||
inc->mstk = NULL;
|
||||
istk = inc;
|
||||
list->uplevel(LIST_INCLUDE);
|
||||
}
|
||||
free_tlist(origline);
|
||||
return DIRECTIVE_FOUND;
|
||||
|
||||
case PP_PUSH:
|
||||
@ -3897,9 +3915,9 @@ static void pp_cleanup(int pass)
|
||||
void pp_include_path(char *path)
|
||||
{
|
||||
IncPath *i;
|
||||
/* by alexfru: order of path inclusion fixed (was reverse order) */
|
||||
|
||||
i = nasm_malloc(sizeof(IncPath));
|
||||
i->path = nasm_strdup(path);
|
||||
i->path = path ? nasm_strdup(path) : NULL;
|
||||
i->next = NULL;
|
||||
|
||||
if (ipath != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user