summaryrefslogtreecommitdiff
path: root/src/internal/slibtool_objmeta_impl.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2016-05-20 22:06:32 -0400
committermidipix <writeonce@midipix.org>2016-05-20 22:20:07 -0400
commit70f645722337a041bf7f3c131646fafb9c7d21f1 (patch)
tree98d09605c7db807b2a079b362c38e38c326c3d02 /src/internal/slibtool_objmeta_impl.c
parent431c9953417ba4143087e25e0bf7c5863df8682f (diff)
downloadslibtool-70f645722337a041bf7f3c131646fafb9c7d21f1.tar.bz2
slibtool-70f645722337a041bf7f3c131646fafb9c7d21f1.tar.xz
compile mode: slbt_create_object_wrapper(): initial implementation.
Diffstat (limited to 'src/internal/slibtool_objmeta_impl.c')
-rw-r--r--src/internal/slibtool_objmeta_impl.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/internal/slibtool_objmeta_impl.c b/src/internal/slibtool_objmeta_impl.c
new file mode 100644
index 0000000..e37d1eb
--- /dev/null
+++ b/src/internal/slibtool_objmeta_impl.c
@@ -0,0 +1,63 @@
+/*******************************************************************/
+/* slibtool: a skinny libtool implementation, written in C */
+/* Copyright (C) 2016 Z. Gilboa */
+/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */
+/*******************************************************************/
+
+#include <stdio.h>
+#include <slibtool/slibtool.h>
+#include "slibtool_metafile_impl.h"
+
+static int slbt_create_default_object_wrapper(
+ const struct slbt_driver_ctx * dctx,
+ struct slbt_exec_ctx * ectx)
+{
+ int ret;
+ FILE * fout;
+ const struct slbt_source_version * verinfo;
+
+ if (!(fout = fopen(ectx->ltobjname,"w")))
+ return -1;
+
+ verinfo = slbt_source_version();
+
+ ret = fprintf(fout,
+ "# libtool compatible object wrapper\n"
+ "# Generated by %s (slibtool %d.%d.%d)\n"
+ "# [commit reference: %s]\n\n"
+
+ "pic_object='%s'\n"
+ "non_pic_object='%s'\n",
+
+ dctx->program,
+ verinfo->major,verinfo->minor,verinfo->revision,
+ verinfo->commit,
+
+ (dctx->cctx->drvflags & SLBT_DRIVER_SHARED)
+ ? ectx->lobjname
+ : "none",
+ (dctx->cctx->drvflags & SLBT_DRIVER_STATIC)
+ ? ectx->aobjname
+ : "none");
+
+ return (ret <= 0) || fclose(fout)
+ ? -1 : 0;
+}
+
+static int slbt_create_compatible_object_wrapper(
+ const struct slbt_driver_ctx * dctx,
+ struct slbt_exec_ctx * ectx)
+{
+ /* awaiting submission */
+ return slbt_create_default_object_wrapper(dctx,ectx);
+}
+
+int slbt_create_object_wrapper(
+ const struct slbt_driver_ctx * dctx,
+ struct slbt_exec_ctx * ectx)
+{
+ if (dctx->cctx->drvflags & SLBT_DRIVER_LEGABITS)
+ return slbt_create_compatible_object_wrapper(dctx,ectx);
+ else
+ return slbt_create_default_object_wrapper(dctx,ectx);
+}