diff options
Diffstat (limited to 'scripts/bb_mkdep.c')
-rw-r--r-- | scripts/bb_mkdep.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/scripts/bb_mkdep.c b/scripts/bb_mkdep.c index 89b4e997e..afc8a98d1 100644 --- a/scripts/bb_mkdep.c +++ b/scripts/bb_mkdep.c | |||
@@ -624,6 +624,9 @@ static int show_dep(int first, bb_key_t *k, const char *name) | |||
624 | return first; | 624 | return first; |
625 | } | 625 | } |
626 | 626 | ||
627 | static char *pwd; | ||
628 | static char *replace; | ||
629 | |||
627 | static struct stat st_kp; | 630 | static struct stat st_kp; |
628 | static int dontgenerate_dep; | 631 | static int dontgenerate_dep; |
629 | 632 | ||
@@ -670,11 +673,23 @@ parse_chd(const char *fe, const char *p, size_t dirlen) | |||
670 | if(*e == 'c') { | 673 | if(*e == 'c') { |
671 | /* *.c -> *.o */ | 674 | /* *.c -> *.o */ |
672 | *e = 'o'; | 675 | *e = 'o'; |
676 | if(replace) { | ||
677 | /* /src_dir/path/file.o to path/file.o */ | ||
678 | e = fp + strlen(replace); | ||
679 | while(*e == '/') | ||
680 | e++; | ||
681 | /* path/file.o to pwd/path/file.o */ | ||
682 | e = fp = bb_asprint("%s/%s", pwd, e); | ||
683 | } | ||
684 | } else { | ||
685 | e = NULL; | ||
673 | } | 686 | } |
674 | first = show_dep(1, Ifound, fp); | 687 | first = show_dep(1, Ifound, fp); |
675 | first = show_dep(first, key_top, fp); | 688 | first = show_dep(first, key_top, fp); |
676 | if(first == 0) | 689 | if(first == 0) |
677 | putchar('\n'); | 690 | putchar('\n'); |
691 | if(replace && e) | ||
692 | free(e); | ||
678 | } | 693 | } |
679 | return NULL; | 694 | return NULL; |
680 | } else if(S_ISDIR(st.st_mode)) { | 695 | } else if(S_ISDIR(st.st_mode)) { |
@@ -711,6 +726,10 @@ static void scan_dir_find_ch_files(const char *p) | |||
711 | size_t dirlen; | 726 | size_t dirlen; |
712 | 727 | ||
713 | dirs = llist_add_to(NULL, bb_simplify_path(p)); | 728 | dirs = llist_add_to(NULL, bb_simplify_path(p)); |
729 | if(strcmp(dirs->data, pwd)) | ||
730 | replace = bb_xstrdup(dirs->data); | ||
731 | else | ||
732 | replace = NULL; | ||
714 | /* emulate recursive */ | 733 | /* emulate recursive */ |
715 | while(dirs) { | 734 | while(dirs) { |
716 | d_add = NULL; | 735 | d_add = NULL; |
@@ -736,9 +755,10 @@ static void scan_dir_find_ch_files(const char *p) | |||
736 | } | 755 | } |
737 | dirs = d_add; | 756 | dirs = d_add; |
738 | } | 757 | } |
758 | free(replace); | ||
759 | replace = NULL; | ||
739 | } | 760 | } |
740 | 761 | ||
741 | static char *pwd; | ||
742 | 762 | ||
743 | int main(int argc, char **argv) | 763 | int main(int argc, char **argv) |
744 | { | 764 | { |