diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 553780f..3aa9d2f 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -524,6 +524,7 @@ static int slbt_exec_link_create_dep_file( char depfile[PATH_MAX]; struct stat st; int ldepth; + int fdyndep; (void)dctx; @@ -579,8 +580,23 @@ static int slbt_exec_link_create_dep_file( reladir[1] = 0; } + + /* dynamic library dependency? */ + strcpy(depfile,*parg); + mark = depfile + (base - *parg); + size = sizeof(depfile) - (base - *parg); + + if ((size_t)snprintf(mark,size,".libs/%s",base) + >= size) + return SLBT_BUFFER_ERROR(dctx); + + mark = strrchr(mark,'.'); + strcpy(mark,dctx->cctx->settings.dsoprefix); + + fdyndep = !stat(depfile,&st); + /* [-L... as needed] */ - if (!farchive && (base > *parg) && (ectx->ldirdepth >= 0)) { + if (fdyndep && (base > *parg) && (ectx->ldirdepth >= 0)) { if (fputs("-L",ectx->fdeps) < 0) { fclose(fdeps); return SLBT_SYSTEM_ERROR(dctx); @@ -599,7 +615,7 @@ static int slbt_exec_link_create_dep_file( } /* -ldeplib */ - if (!farchive) { + if (fdyndep) { *popt = 0; mark = base; mark += strlen(dctx->cctx->settings.dsoprefix);