diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c index deb8cdc..15c2cf5 100644 --- a/src/driver/slbt_driver_ctx.c +++ b/src/driver/slbt_driver_ctx.c @@ -339,6 +339,7 @@ int slbt_get_driver_ctx( const char * lconf; uint64_t lflags; const char * cfgmeta_ar; + const char * cfgmeta_as; const char * cfgmeta_ranlib; const char * cfgmeta_dlltool; @@ -395,6 +396,7 @@ int slbt_get_driver_ctx( cmdnoshared = 0; cfgmeta_ar = 0; + cfgmeta_as = 0; cfgmeta_ranlib = 0; cfgmeta_dlltool = 0; @@ -595,6 +597,7 @@ int slbt_get_driver_ctx( case TAG_AS: cctx.host.as = entry->arg; + cfgmeta_as = cfgexplicit; break; case TAG_RANLIB: @@ -816,6 +819,9 @@ int slbt_get_driver_ctx( if (ctx->cctx.host.ar && !cfgmeta_ar) cfgmeta_ar = cfglconf; + if (ctx->cctx.host.as && !cfgmeta_as) + cfgmeta_as = cfglconf; + if (ctx->cctx.host.ranlib && !cfgmeta_ranlib) cfgmeta_ranlib = cfglconf; @@ -862,6 +868,7 @@ int slbt_get_driver_ctx( &ctx->cctx.host, &ctx->cctx.cfgmeta, cfgmeta_ar, + cfgmeta_as, cfgmeta_ranlib, cfgmeta_dlltool)) return slbt_get_driver_ctx_fail(&ctx->ctx,0); diff --git a/src/driver/slbt_host_params.c b/src/driver/slbt_host_params.c index 6414ec1..58e0612 100644 --- a/src/driver/slbt_host_params.c +++ b/src/driver/slbt_host_params.c @@ -137,6 +137,7 @@ int slbt_init_host_params( struct slbt_host_params * host, struct slbt_host_params * cfgmeta, const char * cfgmeta_ar, + const char * cfgmeta_as, const char * cfgmeta_ranlib, const char * cfgmeta_dlltool) { @@ -371,7 +372,7 @@ int slbt_init_host_params( /* as */ if (host->as) - cfgmeta->as = cfgexplicit; + cfgmeta->as = cfgmeta_as ? cfgmeta_as : cfgexplicit; else { if (!(drvhost->as = calloc(1,toollen))) return -1; @@ -644,7 +645,7 @@ int slbt_set_alternate_host( &ictx->ctx.ahost, &ictx->ctx.cctx.ahost, &ictx->ctx.cctx.acfgmeta, - 0,0,0)) { + 0,0,0,0)) { slbt_free_host_params(&ictx->ctx.ahost); return SLBT_CUSTOM_ERROR(ctx,SLBT_ERR_HOST_INIT); } diff --git a/src/internal/slibtool_driver_impl.h b/src/internal/slibtool_driver_impl.h index 34ab775..3f04b79 100644 --- a/src/internal/slibtool_driver_impl.h +++ b/src/internal/slibtool_driver_impl.h @@ -247,6 +247,7 @@ int slbt_init_host_params( struct slbt_host_params * host, struct slbt_host_params * cfgmeta, const char * cfgmeta_ar, + const char * cfgmeta_as, const char * cfgmeta_ranlib, const char * cfgmeta_dlltool); diff --git a/src/internal/slibtool_lconf_impl.c b/src/internal/slibtool_lconf_impl.c index 4956b24..f1747df 100644 --- a/src/internal/slibtool_lconf_impl.c +++ b/src/internal/slibtool_lconf_impl.c @@ -806,6 +806,17 @@ int slbt_get_lconf_flags( } + /* as tool (optional) */ + if (!ctx->cctx.host.as) { + if (!slbt_get_lconf_var(addr,cap,"AS=",&val)) { + if (val[0] && !(ctx->host.as = strdup(val))) + return SLBT_SYSTEM_ERROR(dctx,0); + + ctx->cctx.host.as = ctx->host.as; + } + } + + /* dlltool tool (optional) */ if (!ctx->cctx.host.dlltool) { if (!slbt_get_lconf_var(addr,cap,"DLLTOOL=",&val)) {