Commit 1474cf37 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Mark stuff we export in shlibs with "extern".

parent 6114af83
......@@ -355,6 +355,7 @@ EmitStruct(const struct vcc *tl)
{
struct source *sp;
Fc(tl, 0, "\nextern const char *srcname[];\n");
Fc(tl, 0, "\nconst char *srcname[%u] = {\n", tl->nsources);
VTAILQ_FOREACH(sp, &tl->sources, list) {
Fc(tl, 0, "\t");
......@@ -363,6 +364,7 @@ EmitStruct(const struct vcc *tl)
}
Fc(tl, 0, "};\n");
Fc(tl, 0, "\nextern const char *srcbody[];\n");
Fc(tl, 0, "\nconst char *srcbody[%u] = {\n", tl->nsources);
VTAILQ_FOREACH(sp, &tl->sources, list) {
Fc(tl, 0, " /* ");
......
......@@ -547,7 +547,7 @@ vcc_func(struct vcc *tl, struct expr **e, const char *cfunc,
p += strlen(p) + 1;
} else if (fmt == VOID && !strcmp(p, "PRIV_CALL")) {
bprintf(buf, "vmod_priv_%u", tl->nvmodpriv++);
Fh(tl, 0, "struct vmod_priv %s;\n", buf);
Fh(tl, 0, "static struct vmod_priv %s;\n", buf);
e2 = vcc_mk_expr(VOID, "&%s", buf);
p += strlen(p) + 1;
} else if (fmt == ENUM) {
......
......@@ -145,31 +145,40 @@ class vmod(object):
fo.write(i + "\n")
def c_vmod(self, fo):
fo.write('extern const char Vmod_' + self.nam + '_Name[];\n')
fo.write('const char Vmod_' + self.nam + '_Name[] =')
fo.write(' \"' + self.nam + '";\n')
fo.write("\n")
cs = self.c_struct()
fo.write("const " + cs + ' Vmod_' + self.nam + '_Func = ')
fo.write(cs + ';\n')
vfn = 'Vmod_' + self.nam + '_Func';
fo.write("extern const struct " + vfn + " " + vfn + ';\n')
fo.write("const struct " + vfn + " " + vfn + ' =')
fo.write(self.c_initializer())
fo.write("\n")
fo.write("\n")
fo.write("extern const int Vmod_" + self.nam + '_Len;\n')
fo.write("const int Vmod_" + self.nam + '_Len =')
fo.write(" sizeof(Vmod_" + self.nam + "_Func);\n")
fo.write("\n")
fo.write("extern const char Vmod_" + self.nam + "_Proto[];\n")
fo.write("const char Vmod_" + self.nam + "_Proto[] =\n")
for t in self.c_typedefs_():
fo.write('\t"' + t + '\\n"\n')
fo.write('\t"\\n"\n')
for i in (cs + " Vmod_" + self.nam + '_Func;').split("\n"):
for i in (cs + ";").split("\n"):
fo.write('\n\t"' + i + '\\n"')
fo.write(";\n\n")
fo.write('\n\t"static struct ' + vfn + " " + vfn + ';";\n\n')
fo.write(self.c_strspec())
fo.write("\n")
fo.write('extern const char Vmod_' + self.nam + '_ABI[];\n')
fo.write('const char Vmod_' + self.nam + '_ABI[] =')
fo.write(' VMOD_ABI_Version;\n')
#fo.write("\n")
......@@ -208,7 +217,8 @@ class vmod(object):
return s
def c_strspec(self):
s = "const char * const Vmod_" + self.nam + "_Spec[] = {\n"
s = "const char * const Vmod_" + self.nam + "_Spec[]"
s = "extern " + s + ";\n" + s + " = {\n"
for o in self.objs:
s += o.c_strspec(self.nam)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment