diff --git a/src/helper/slbt_archive_import.c b/src/helper/slbt_archive_import.c index 1c15614..d9dee0e 100644 --- a/src/helper/slbt_archive_import.c +++ b/src/helper/slbt_archive_import.c @@ -14,6 +14,7 @@ #include #include "slibtool_spawn_impl.h" +#include "slibtool_readlink_impl.h" #include "slibtool_errinfo_impl.h" static char * slbt_mri_argument( @@ -89,6 +90,10 @@ int slbt_archive_import( char mrisrc [L_tmpnam]; char program[PATH_MAX]; + if (!slbt_readlink(srcarchive,program,sizeof(program))) + if (!(strcmp(program,"/dev/null"))) + return 0; + if ((size_t)snprintf(program,sizeof(program),"%s", dctx->cctx->host.ar) >= sizeof(program)) return SLBT_BUFFER_ERROR(dctx); diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 6ce059b..7cbad2e 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -633,6 +633,7 @@ static int slbt_exec_link_create_dep_file( struct stat st; int ldepth; int fdyndep; + int fnodeps; if (ectx->fdeps) { fclose(ectx->fdeps); @@ -701,6 +702,7 @@ static int slbt_exec_link_create_dep_file( fdeps = 0; fdyndep = !stat(depfile,&st); + fnodeps = farchive && fdyndep; /* [-L... as needed] */ if (fdyndep && (base > *parg) && (ectx->ldirdepth >= 0)) { @@ -756,7 +758,7 @@ static int slbt_exec_link_create_dep_file( } } - if (farchive || !fdeps) { + if (!fnodeps && (farchive || !fdeps)) { if ((size_t)snprintf(mark,size,".a.slibtool.deps") >= size) return SLBT_BUFFER_ERROR(dctx);