diff options
author | midipix <writeonce@midipix.org> | 2016-04-06 02:00:51 -0400 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-04-06 02:00:51 -0400 |
commit | 0f859168d7cb37b2cbb74d9405f8e2aa861c2a88 (patch) | |
tree | 28c0512bcc3b2771ed1ea6411c1f22e9ed640627 /src | |
parent | 3deeba0ce76e9ac7ef5aa03015d511312b4829c3 (diff) | |
download | slibtool-0f859168d7cb37b2cbb74d9405f8e2aa861c2a88.tar.bz2 slibtool-0f859168d7cb37b2cbb74d9405f8e2aa861c2a88.tar.xz |
link mode: added -soname support.
Diffstat (limited to 'src')
-rw-r--r-- | src/logic/slbt_exec_ctx.c | 7 | ||||
-rw-r--r-- | src/logic/slbt_exec_link.c | 13 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/logic/slbt_exec_ctx.c b/src/logic/slbt_exec_ctx.c index 8b20f95..620cde7 100644 --- a/src/logic/slbt_exec_ctx.c +++ b/src/logic/slbt_exec_ctx.c @@ -227,8 +227,10 @@ int slbt_get_exec_ctx( ictx->ctx.fpic = &ictx->ctx.argv[i++]; ictx->ctx.cass = &ictx->ctx.argv[i++]; - ictx->ctx.noundef = &ictx->ctx.argv[i++]; + ictx->ctx.soname = &ictx->ctx.argv[i++]; + ictx->ctx.lsoname = &ictx->ctx.argv[i++]; + ictx->ctx.lout[0] = &ictx->ctx.argv[i++]; ictx->ctx.lout[1] = &ictx->ctx.argv[i++]; ictx->ctx.sentinel= &ictx->ctx.argv[i++]; @@ -361,6 +363,9 @@ void slbt_reset_placeholders(struct slbt_exec_ctx * ectx) *ectx->cass = "-USLIBTOOL_PLACEHOLDER_COMPILE_ASSEMBLE"; *ectx->noundef = "-USLIBTOOL_PLACEHOLDER_NO_UNDEFINED"; + *ectx->soname = "-USLIBTOOL_PLACEHOLDER_SONAME"; + *ectx->lsoname = "-USLIBTOOL_PLACEHOLDER_LSONAME"; + *ectx->lout[0] = "-USLIBTOOL_PLACEHOLDER_OUTPUT_SWITCH"; *ectx->lout[1] = "-USLIBTOOL_PLACEHOLDER_OUTPUT_FILE"; *ectx->sentinel= 0; diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 025ae56..e483ced 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -322,6 +322,7 @@ static int slbt_exec_link_create_library( { char ** parg; char output [PATH_MAX]; + char soname [PATH_MAX]; /* initial state */ slbt_reset_arguments(ectx); @@ -344,6 +345,18 @@ static int slbt_exec_link_create_library( if (dctx->cctx->drvflags & SLBT_DRIVER_NO_UNDEFINED) *ectx->noundef = "-Wl,--no-undefined"; + /* -soname */ + if ((size_t)snprintf(soname,sizeof(soname),"-Wl,%s%s%s.%d", + dctx->cctx->settings.dsoprefix, + dctx->cctx->libname, + dctx->cctx->settings.dsosuffix, + dctx->cctx->verinfo.major) + >= sizeof(soname)) + return -1; + + *ectx->soname = "-Wl,-soname"; + *ectx->lsoname = soname; + /* shared object */ *ectx->dpic = "-shared"; *ectx->fpic = "-fPIC"; |