Added dependency generator

This commit is contained in:
ceriel
1990-06-06 14:42:53 +00:00
parent 814058acf1
commit 590cf5dde0
6 changed files with 120 additions and 2 deletions

View File

@@ -28,17 +28,24 @@
#include "nocross.h"
#include "sizes.h"
#include "align.h"
#include <assert.h>
#include "macro.h"
extern struct tokenname tkidf[], tkother[];
extern char *symbol2str();
extern char options[128];
#ifndef NOPP
int inc_pos = 1; /* place where next -I goes */
int inc_total = 0;
int inc_max;
char **inctable;
extern int do_dependencies;
extern char *dep_file;
static File *dep_fd = STDOUT;
extern char *getwdir();
#endif NOPP
@@ -122,10 +129,80 @@ main(argc, argv)
hash_stat();
#endif DEBUG
#ifndef NOPP
if (do_dependencies) {
extern char *source;
list_dependencies(source);
}
#endif
sys_stop(err_occurred ? S_EXIT : S_END);
/*NOTREACHED*/
}
#ifndef NOPP
struct idf *file_head;
extern char *strrindex();
list_dependencies(source)
char *source;
{
register struct idf *p = file_head;
if (source) {
register char *s = strrindex(source, '.');
if (s && *(s+1)) {
s++;
*s++ = 'o';
*s = '\0';
/* the source may be in another directory than the
* object generated, so don't include the pathname
* leading to it.
*/
if (s = strrindex(source, '/')) {
source = s + 1;
}
}
else source = 0;
}
if (dep_file && !sys_open(dep_file, OP_WRITE, &dep_fd)) {
fatal("could not open %s", dep_file);
}
while (p) {
assert(p->id_resmac == K_FILE);
dependency(p->id_text, source);
p = (struct idf *) (p->id_file);
}
}
add_dependency(s)
char *s;
{
register struct idf *p = str2idf(s, 0);
if (! p->id_resmac) {
p->id_resmac = K_FILE;
p->id_file = (char *) file_head;
file_head = p;
}
}
dependency(s, source)
char *s, *source;
{
if (options['s'] && !strncmp(s, "/usr/include/", 13)) {
return;
}
if (options['m'] && source) {
fprint(dep_fd, "%s: %s\n", source, s);
}
else fprint(dep_fd, "%s\n", s);
}
#endif NOPP
char *source = 0;
char *nmlist = 0;