diff options
| author | Michael Forney <mforney@mforney.org> | 2016-10-29 13:28:03 -0700 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2016-10-30 13:44:58 -0700 |
| commit | 92751409f7e9c403cbfeb503cc494279c712c9ab (patch) | |
| tree | 3ed7108ac6f7115218bbaa3b8d444f3be81ccf7c /scripts/rsp.awk | |
| parent | dd45ede13ab186614e6db9d0c65c9b16858167f6 (diff) | |
Provide mechanism to track library dependencies
Now, ar/lib rules can list static libraries or other .d files. These (as well as
the target library) are written to a file called $lib.d. link/exe rules can list
these .d files, causing them to be flattened into an RSP file and appear on the
command line as @$rsp.
The rule to generate the dependency list files depends on the libraries they
contain, so they also act as a stamp file for the dependencies. This gives us
dependency management for free.
Diffstat (limited to 'scripts/rsp.awk')
| -rw-r--r-- | scripts/rsp.awk | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/scripts/rsp.awk b/scripts/rsp.awk new file mode 100644 index 00000000..d157e249 --- /dev/null +++ b/scripts/rsp.awk @@ -0,0 +1,34 @@ +function line() { + if (match($0, /\.d$/)) + read($0) + else + libs[++n] = $0 +} + +function read(name) { + for (;;) { + ret = getline < name + if (ret < 0) { + print "failed to read line from " name > "/proc/self/fd/2" + exit(1) + } + if (ret == 0) + break + line() + } + close(name) +} + +{line()} + +END { + for (i = n; i > 0; --i) { + lib = libs[i] + if (lib in seen) + continue + seen[lib] = 1 + uniq[++m] = lib + } + for (i = m; i > 0; --i) + print uniq[i] +} |
