From 7f35de9733d3c82eadd5eb17028803a602c3c1d8 Mon Sep 17 00:00:00 2001 From: midipix Date: Tue, 13 Sep 2016 19:20:44 -0400 Subject: link mode: account for directory depth when generating .deps for .la wrapper. --- src/logic/slbt_exec_ctx.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/logic/slbt_exec_ctx.c') 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; -- cgit v1.2.3