diff options
-rw-r--r-- | src/logic/slbt_exec_link.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 88efff2..ff406f9 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -1261,6 +1261,8 @@ static int slbt_exec_link_create_library( char ** parg; char ** xarg; char * ccwrap; + const char * laout; + const char * dot; char cwd [PATH_MAX]; char output [PATH_MAX]; char soname [PATH_MAX]; @@ -1303,10 +1305,15 @@ static int slbt_exec_link_create_library( *ectx->noundef = "-Wl,--no-undefined"; /* -soname */ + dot = strrchr(dctx->cctx->output,'.'); + laout = (dot && !strcmp(dot,".la")) + ? dctx->cctx->output + : 0; + if ((dctx->cctx->drvflags & SLBT_DRIVER_IMAGE_MACHO)) { (void)0; - } else if (dctx->cctx->drvflags & SLBT_DRIVER_MODULE) { + } else if (!laout && (dctx->cctx->drvflags & SLBT_DRIVER_MODULE)) { if ((size_t)snprintf(soname,sizeof(soname),"-Wl,%s", dctx->cctx->output) >= sizeof(soname)) @@ -1377,7 +1384,7 @@ static int slbt_exec_link_create_library( } /* output */ - if (dctx->cctx->drvflags & SLBT_DRIVER_MODULE) { + if (!laout && dctx->cctx->drvflags & SLBT_DRIVER_MODULE) { strcpy(output,dctx->cctx->output); } else if (relfilename) { strcpy(output,relfilename); @@ -1802,17 +1809,19 @@ int slbt_exec_link( /* dynaic library via -module */ if (dctx->cctx->drvflags & SLBT_DRIVER_MODULE) { - if (slbt_exec_link_create_library( - dctx,ectx, - ectx->dsobasename, - ectx->dsofilename, - ectx->relfilename)) { + if (!dot || strcmp(dot,".la")) { + if (slbt_exec_link_create_library( + dctx,ectx, + ectx->dsobasename, + ectx->dsofilename, + ectx->relfilename)) { + slbt_free_exec_ctx(actx); + return SLBT_NESTED_ERROR(dctx); + } + slbt_free_exec_ctx(actx); - return SLBT_NESTED_ERROR(dctx); + return 0; } - - slbt_free_exec_ctx(actx); - return 0; } /* dynamic library */ |