summaryrefslogtreecommitdiff
path: root/src/logic/slbt_exec_ctx.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2016-09-13 19:20:44 -0400
committermidipix <writeonce@midipix.org>2016-09-13 19:20:44 -0400
commit7f35de9733d3c82eadd5eb17028803a602c3c1d8 (patch)
treefc5a3166a943e44723213fa4a01965d5432718e9 /src/logic/slbt_exec_ctx.c
parent1ed71a9b2fff4dfc73432b94e3049b92d16d1717 (diff)
downloadslibtool-7f35de9733d3c82eadd5eb17028803a602c3c1d8.tar.bz2
slibtool-7f35de9733d3c82eadd5eb17028803a602c3c1d8.tar.xz
link mode: account for directory depth when generating .deps for .la wrapper.
Diffstat (limited to 'src/logic/slbt_exec_ctx.c')
-rw-r--r--src/logic/slbt_exec_ctx.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/logic/slbt_exec_ctx.c b/src/logic/slbt_exec_ctx.c
index f1b6b75..6b66f12 100644
--- a/src/logic/slbt_exec_ctx.c
+++ b/src/logic/slbt_exec_ctx.c
@@ -147,6 +147,7 @@ int slbt_get_exec_ctx(
char ** parg;
char * ch;
char * mark;
+ const char * dmark;
char * slash;
const char * arprefix;
const char * dsoprefix;
@@ -172,6 +173,28 @@ int slbt_get_exec_ctx(
: ictx->ctx.csrc;
if (ref && !ictx->ctx.csrc && (mark = strrchr(ref,'/'))) {
+ if (!(strncmp(ref,"../",3)))
+ dmark = 0;
+ else if (!(strncmp(ref,"./",2)))
+ dmark = &ref[1];
+ else
+ dmark = strchr(ref,'/');
+
+ for (; dmark; ) {
+ if (!(strncmp(dmark,"/./",3))) {
+ dmark = strchr(&dmark[2],'/');
+ } else if (!(strncmp(dmark,"/../",4))) {
+ ictx->ctx.ldirdepth = -1;
+ dmark = 0;
+ } else {
+ for (; *dmark=='/'; )
+ dmark++;
+
+ ictx->ctx.ldirdepth++;
+ dmark = strchr(dmark,'/');
+ }
+ }
+
ictx->ctx.ldirname = ch;
strcpy(ch,ref);
ch += mark - ref;