enhance list decode & provide pkgconfig data
This commit is contained in:
parent
a86c5ab151
commit
c1fe4d4a53
3 changed files with 32 additions and 10 deletions
|
|
@ -7,6 +7,8 @@ else()
|
||||||
endif()
|
endif()
|
||||||
project(c-capnproto LANGUAGES ${languages})
|
project(c-capnproto LANGUAGES ${languages})
|
||||||
|
|
||||||
|
configure_file(c-capnproto.pc.in c-capnproto.pc)
|
||||||
|
|
||||||
include(CTest)
|
include(CTest)
|
||||||
|
|
||||||
# set(CMAKE_C_STANDARD 11)
|
# set(CMAKE_C_STANDARD 11)
|
||||||
|
|
@ -168,6 +170,8 @@ if(C_CAPNPROTO_ENABLE_INSTALL)
|
||||||
NAMESPACE CapnC::
|
NAMESPACE CapnC::
|
||||||
FILE CapnCConfig.cmake)
|
FILE CapnCConfig.cmake)
|
||||||
install(FILES lib/capnp_c.h TYPE INCLUDE)
|
install(FILES lib/capnp_c.h TYPE INCLUDE)
|
||||||
|
install(FILES c-capnproto.pc
|
||||||
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(examples/book)
|
add_subdirectory(examples/book)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
prefix=@prefix@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=${prefix}
|
||||||
libdir=@libdir@
|
libdir=${@CMAKE_INSTALL_LIBDIR@}
|
||||||
bindir=@bindir@
|
bindir=${prefix}/bin
|
||||||
includedir=@includedir@
|
includedir=${@CMAKE_INSTALL_INCLUDEDIR@}
|
||||||
codegen=${bindir}/capnpc-c
|
codegen=${bindir}/capnpc-c
|
||||||
|
|
||||||
Name: c-capnproto
|
Name: c-capnproto
|
||||||
|
|
|
||||||
|
|
@ -887,6 +887,14 @@ static void mk_simple_list_decoder(struct str *func, const char *tab,
|
||||||
str_add(func, tab, -1);
|
str_add(func, tab, -1);
|
||||||
str_addf(func, "\tnc_ = s->%s.len;\n", svar);
|
str_addf(func, "\tnc_ = s->%s.len;\n", svar);
|
||||||
str_add(func, tab, -1);
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\tif (nc_ == 0) {\n");
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t\td->%s = NULL;\n", dvar);
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t\treturn;\n");
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t}\n");
|
||||||
|
str_add(func, tab, -1);
|
||||||
str_addf(func, "\td->%s = (char **)calloc(nc_, sizeof(char *));\n", dvar);
|
str_addf(func, "\td->%s = (char **)calloc(nc_, sizeof(char *));\n", dvar);
|
||||||
str_add(func, tab, -1);
|
str_add(func, tab, -1);
|
||||||
str_addf(func, "\tfor(i_ = 0; i_ < nc_; i_ ++) {\n");
|
str_addf(func, "\tfor(i_ = 0; i_ < nc_; i_ ++) {\n");
|
||||||
|
|
@ -903,7 +911,14 @@ static void mk_simple_list_decoder(struct str *func, const char *tab,
|
||||||
str_addf(func, "\tcapn_resolve(&(s->%s.p));\n", svar);
|
str_addf(func, "\tcapn_resolve(&(s->%s.p));\n", svar);
|
||||||
str_add(func, tab, -1);
|
str_add(func, tab, -1);
|
||||||
str_addf(func, "\tnc_ = s->%s.p.len;\n", svar);
|
str_addf(func, "\tnc_ = s->%s.p.len;\n", svar);
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\tif (nc_ == 0) {\n");
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t\td->%s = NULL;\n", dvar);
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t\treturn;\n");
|
||||||
|
str_add(func, tab, -1);
|
||||||
|
str_addf(func, "\t}\n");
|
||||||
str_add(func, tab, -1);
|
str_add(func, tab, -1);
|
||||||
str_addf(func, "\td->%s = (%s *)calloc(nc_, sizeof(%s));\n", dvar,
|
str_addf(func, "\td->%s = (%s *)calloc(nc_, sizeof(%s));\n", dvar,
|
||||||
list_type, list_type);
|
list_type, list_type);
|
||||||
|
|
@ -1455,8 +1470,7 @@ void mk_struct_ptr_encoder(capnp_ctx_t *ctx, struct node *n) {
|
||||||
str_addf(&(ctx->SRC), "\tstruct %s d;\n", n->name.str);
|
str_addf(&(ctx->SRC), "\tstruct %s d;\n", n->name.str);
|
||||||
str_addf(&(ctx->SRC), "\tptr = new_%s(cs);\n", n->name.str);
|
str_addf(&(ctx->SRC), "\tptr = new_%s(cs);\n", n->name.str);
|
||||||
str_addf(&(ctx->SRC), "\tif (s == NULL) {\n");
|
str_addf(&(ctx->SRC), "\tif (s == NULL) {\n");
|
||||||
str_addf(&(ctx->SRC), "\t\tptr.p = capn_null;\n",
|
str_addf(&(ctx->SRC), "\t\tptr.p = capn_null;\n");
|
||||||
n->name.str);
|
|
||||||
str_addf(&(ctx->SRC), "\t}\n");
|
str_addf(&(ctx->SRC), "\t}\n");
|
||||||
str_addf(&(ctx->SRC), "\telse{\n");
|
str_addf(&(ctx->SRC), "\telse{\n");
|
||||||
str_addf(&(ctx->SRC), "\t\tencode_%s(cs, &d, s);\n", n->name.str);
|
str_addf(&(ctx->SRC), "\t\tencode_%s(cs, &d, s);\n", n->name.str);
|
||||||
|
|
@ -1490,6 +1504,11 @@ void mk_struct_list_decoder(capnp_ctx_t *ctx, struct node *n) {
|
||||||
str_addf(&(ctx->SRC), "\t%s **ptr;\n", buf);
|
str_addf(&(ctx->SRC), "\t%s **ptr;\n", buf);
|
||||||
str_addf(&(ctx->SRC), "\tcapn_resolve(&(list.p));\n");
|
str_addf(&(ctx->SRC), "\tcapn_resolve(&(list.p));\n");
|
||||||
str_addf(&(ctx->SRC), "\tnc = list.p.len;\n");
|
str_addf(&(ctx->SRC), "\tnc = list.p.len;\n");
|
||||||
|
str_addf(&(ctx->SRC), "\tif (nc == 0) {\n");
|
||||||
|
str_addf(&(ctx->SRC), "\t\t(*d) = NULL;\n");
|
||||||
|
str_addf(&(ctx->SRC), "\t\t(*pcount) = 0;\n");
|
||||||
|
str_addf(&(ctx->SRC), "\t\treturn;\n");
|
||||||
|
str_addf(&(ctx->SRC), "\t}\n");
|
||||||
str_addf(&(ctx->SRC), "\tptr = (%s **)calloc(nc, sizeof(%s *));\n", buf,
|
str_addf(&(ctx->SRC), "\tptr = (%s **)calloc(nc, sizeof(%s *));\n", buf,
|
||||||
buf);
|
buf);
|
||||||
str_addf(&(ctx->SRC), "\tfor(i = 0; i < nc; i ++) {\n");
|
str_addf(&(ctx->SRC), "\tfor(i = 0; i < nc; i ++) {\n");
|
||||||
|
|
@ -1527,8 +1546,7 @@ void mk_struct_ptr_decoder(capnp_ctx_t *ctx, struct node *n) {
|
||||||
n->name.str, buf, n->name.str);
|
n->name.str, buf, n->name.str);
|
||||||
str_addf(&(ctx->SRC), "\tstruct %s s;\n", n->name.str);
|
str_addf(&(ctx->SRC), "\tstruct %s s;\n", n->name.str);
|
||||||
str_addf(&(ctx->SRC), "\tcapn_resolve(&(p.p));\n");
|
str_addf(&(ctx->SRC), "\tcapn_resolve(&(p.p));\n");
|
||||||
str_addf(&(ctx->SRC), "\tif (p.p.type == CAPN_NULL) {\n",
|
str_addf(&(ctx->SRC), "\tif (p.p.type == CAPN_NULL) {\n");
|
||||||
n->name.str);
|
|
||||||
str_addf(&(ctx->SRC), "\t\t(*d) = NULL;\n");
|
str_addf(&(ctx->SRC), "\t\t(*d) = NULL;\n");
|
||||||
str_addf(&(ctx->SRC), "\t\treturn;\n");
|
str_addf(&(ctx->SRC), "\t\treturn;\n");
|
||||||
str_addf(&(ctx->SRC), "\t}\n");
|
str_addf(&(ctx->SRC), "\t}\n");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue