tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
libprop w/o JSON support experiment
Since a few ramdisks / images over various "size challenged" architectures
recently did grow I wondered about the recent addition of JSON support
to libprop. The library is common kernel/userland code but AFAICT there is
no use for JSON in the kernel variant.
So I did the patch below and tried to find out how easy it is to separate
this feature (for userland only and also avoid it in size challenged cruchned
ramdisks). I only did test mips and amd64 sizes for now, but the results
were discuraging: savings were less thank 1k overall. And the patch is
quite ugly.
Maybe I overlooked something and there were more savings possible - or maybe
it is just not worth the obfuscation.
Martin
Index: common/include/prop/prop_object.h
===================================================================
RCS file: /cvsroot/src/common/include/prop/prop_object.h,v
retrieving revision 1.9
diff -u -p -r1.9 prop_object.h
--- common/include/prop/prop_object.h 23 Apr 2025 02:58:52 -0000 1.9
+++ common/include/prop/prop_object.h 9 May 2025 18:40:40 -0000
@@ -55,7 +55,9 @@ typedef enum {
typedef enum {
PROP_FORMAT_XML = 0,
+#ifdef _PROPLIB_WITH_JSON
PROP_FORMAT_JSON = 1
+#endif
} prop_format_t;
__BEGIN_DECLS
Index: common/lib/libprop/prop_array.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_array.c,v
retrieving revision 1.24
diff -u -p -r1.24 prop_array.c
--- common/lib/libprop/prop_array.c 26 Apr 2025 17:13:23 -0000 1.24
+++ common/lib/libprop/prop_array.c 9 May 2025 18:40:40 -0000
@@ -55,9 +55,11 @@ _PROP_MALLOC_DEFINE(M_PROP_ARRAY, "prop
static const struct _prop_object_type_tags _prop_array_type_tags = {
.xml_tag = "array",
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = "[",
.json_close_tag = "]",
.json_empty_sep = " ",
+#endif
};
struct _prop_array_iterator {
@@ -161,10 +163,15 @@ _prop_array_externalize(struct _prop_obj
struct _prop_array_iterator *pai;
bool rv = false;
const char * const sep =
- ctx->poec_format == PROP_FORMAT_JSON ? "," : NULL;
+#ifdef _PROPLIB_WITH_JSON
+ ctx->poec_format == PROP_FORMAT_JSON ? "," :
+#endif
+ NULL;
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
+#endif
_PROP_RWLOCK_RDLOCK(pa->pa_rwlock);
@@ -827,6 +834,7 @@ _prop_array_internalize_continue(prop_st
*
* (FWIW, RFC 8259 section 9 seems to specifically allow this.)
*/
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
ctx->poic_cp =
_prop_object_internalize_skip_whitespace(ctx->poic_cp);
@@ -834,6 +842,7 @@ _prop_array_internalize_continue(prop_st
ctx->poic_cp++;
}
}
+#endif
return (_prop_array_internalize_body(stack, obj, ctx));
bad:
@@ -850,6 +859,7 @@ _prop_array_internalize_body(prop_stack_
_PROP_ASSERT(array != NULL);
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
ctx->poic_cp =
_prop_object_internalize_skip_whitespace(ctx->poic_cp);
@@ -860,7 +870,9 @@ _prop_array_internalize_body(prop_stack_
ctx->poic_cp++;
return true;
}
- } else {
+ } else
+#endif
+ {
/* Fetch the next tag. */
if (_prop_object_internalize_find_tag(ctx, NULL,
_PROP_TAG_TYPE_EITHER) == false)
Index: common/lib/libprop/prop_bool.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_bool.c,v
retrieving revision 1.21
diff -u -p -r1.21 prop_bool.c
--- common/lib/libprop/prop_bool.c 26 Apr 2025 17:13:23 -0000 1.21
+++ common/lib/libprop/prop_bool.c 9 May 2025 18:40:40 -0000
@@ -45,11 +45,15 @@ static const char falsestr[] = "false";
static const struct _prop_object_type_tags _prop_bool_true_type_tags = {
.xml_tag = truestr,
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = truestr,
+#endif
};
static const struct _prop_object_type_tags _prop_bool_false_type_tags = {
.xml_tag = falsestr,
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = falsestr,
+#endif
};
static _prop_object_free_rv_t
Index: common/lib/libprop/prop_data.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_data.c,v
retrieving revision 1.20
diff -u -p -r1.20 prop_data.c
--- common/lib/libprop/prop_data.c 26 Apr 2025 17:13:23 -0000 1.20
+++ common/lib/libprop/prop_data.c 9 May 2025 18:40:40 -0000
@@ -112,6 +112,7 @@ _prop_data_externalize(struct _prop_obje
uint8_t output[4];
uint8_t input[3];
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
@@ -121,6 +122,7 @@ _prop_data_externalize(struct _prop_obje
if (ctx->poec_format == PROP_FORMAT_JSON) {
return false;
}
+#endif
if (pd->pd_size == 0)
return (_prop_object_externalize_empty_tag(ctx,
@@ -637,10 +639,12 @@ _prop_data_internalize(prop_stack_t stac
uint8_t *buf;
size_t len, alen;
+#ifdef _PROPLIB_WITH_JSON
/* No JSON binary data object representation. */
if (ctx->poic_format == PROP_FORMAT_JSON) {
return true;
}
+#endif
/*
* We don't accept empty elements.
Index: common/lib/libprop/prop_dictionary.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_dictionary.c,v
retrieving revision 1.48
diff -u -p -r1.48 prop_dictionary.c
--- common/lib/libprop/prop_dictionary.c 26 Apr 2025 17:13:23 -0000 1.48
+++ common/lib/libprop/prop_dictionary.c 9 May 2025 18:40:40 -0000
@@ -103,15 +103,19 @@ _PROP_MALLOC_DEFINE(M_PROP_DICT, "prop d
static const struct _prop_object_type_tags _prop_dictionary_type_tags = {
.xml_tag = "dict",
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = "{",
.json_close_tag = "}",
.json_empty_sep = " ",
+#endif
};
static const struct _prop_object_type_tags _prop_dict_key_type_tags = {
.xml_tag = "key",
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = "\"",
.json_close_tag = "\"",
+#endif
};
struct _prop_dictionary_iterator {
@@ -445,6 +449,7 @@ _prop_dictionary_externalize_one(struct
return false;
}
+#ifdef _PROPLIB_WITH_JSON
switch (ctx->poec_format) {
case PROP_FORMAT_JSON:
if (_prop_object_externalize_append_cstring(ctx,
@@ -454,12 +459,15 @@ _prop_dictionary_externalize_one(struct
break;
default: /* XML */
+#endif
if (_prop_object_externalize_end_line(ctx, NULL) == false ||
_prop_object_externalize_start_line(ctx) == false) {
return false;
}
+#ifdef _PROPLIB_WITH_JSON
break;
}
+#endif
return (*po->po_type->pot_extern)(ctx, po);
}
@@ -474,10 +482,15 @@ _prop_dictionary_externalize(struct _pro
struct _prop_dictionary_iterator *pdi;
bool rv = false;
const char * const sep =
- ctx->poec_format == PROP_FORMAT_JSON ? "," : NULL;
+#ifdef _PROPLIB_WITH_JSON
+ ctx->poec_format == PROP_FORMAT_JSON ? "," :
+#endif
+ NULL;
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
+#endif
_PROP_RWLOCK_RDLOCK(pd->pd_rwlock);
@@ -1361,6 +1374,7 @@ _prop_dictionary_internalize_continue(pr
*
* (FWIW, RFC 8259 section 9 seems to specifically allow this.)
*/
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
ctx->poic_cp =
_prop_object_internalize_skip_whitespace(ctx->poic_cp);
@@ -1368,6 +1382,7 @@ _prop_dictionary_internalize_continue(pr
ctx->poic_cp++;
}
}
+#endif
return _prop_dictionary_internalize_body(stack, obj, ctx, tmpkey);
}
@@ -1378,6 +1393,7 @@ _prop_dictionary_internalize_body(prop_s
prop_dictionary_t dict = *obj;
size_t keylen;
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
ctx->poic_cp =
_prop_object_internalize_skip_whitespace(ctx->poic_cp);
@@ -1399,7 +1415,9 @@ _prop_dictionary_internalize_body(prop_s
if (*ctx->poic_cp == '"') {
goto bad;
}
- } else {
+ } else
+#endif
+ {
/* Fetch the next tag. */
if (_prop_object_internalize_find_tag(ctx, NULL,
_PROP_TAG_TYPE_EITHER) == false)
@@ -1427,6 +1445,7 @@ _prop_dictionary_internalize_body(prop_s
_PROP_ASSERT(keylen <= PDK_MAXKEY);
tmpkey[keylen] = '\0';
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
if (*ctx->poic_cp != '"') {
goto bad;
@@ -1443,7 +1462,9 @@ _prop_dictionary_internalize_body(prop_s
goto bad;
}
ctx->poic_cp++;
- } else {
+ } else
+#endif
+ {
if (_prop_object_internalize_find_tag(ctx, "key",
_PROP_TAG_TYPE_END) == false)
goto bad;
Index: common/lib/libprop/prop_number.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_number.c,v
retrieving revision 1.36
diff -u -p -r1.36 prop_number.c
--- common/lib/libprop/prop_number.c 26 Apr 2025 17:13:23 -0000 1.36
+++ common/lib/libprop/prop_number.c 9 May 2025 18:40:40 -0000
@@ -200,10 +200,12 @@ _prop_number_externalize(struct _prop_ob
{
prop_number_t pn = v;
char tmpstr[32];
+#ifdef _PROPLIB_WITH_JSON
const bool json = ctx->poec_format == PROP_FORMAT_JSON;
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
+#endif
/*
* For unsigned numbers, we output in hex for XML, decimal for JSON.
@@ -211,7 +213,10 @@ _prop_number_externalize(struct _prop_ob
*/
if (pn->pn_value.pnv_is_unsigned) {
snprintf(tmpstr, sizeof(tmpstr),
- json ? "%" PRIu64 : "0x%" PRIx64,
+#ifdef _PROPLIB_WITH_JSON
+ json ? "%" PRIu64 :
+#endif
+ "0x%" PRIx64,
pn->pn_value.pnv_unsigned);
} else {
snprintf(tmpstr, sizeof(tmpstr), "%" PRIi64,
@@ -684,7 +689,11 @@ _prop_number_internalize(prop_stack_t st
struct _prop_number_value pnv;
/* JSON numbers are always base-10. */
- const int base = ctx->poic_format == PROP_FORMAT_JSON ? 10 : 0;
+ const int base =
+#ifdef _PROPLIB_WITH_JSON
+ ctx->poic_format == PROP_FORMAT_JSON ? 10 :
+#endif
+ 0;
memset(&pnv, 0, sizeof(pnv));
@@ -704,7 +713,10 @@ _prop_number_internalize(prop_stack_t st
return (true);
} else if (ctx->poic_cp[0] == '0' && ctx->poic_cp[1] == 'x') {
/* No hex numbers in JSON. */
- if (ctx->poic_format == PROP_FORMAT_JSON ||
+ if (
+#ifdef _PROPLIB_WITH_JSON
+ ctx->poic_format == PROP_FORMAT_JSON ||
+#endif
_prop_number_internalize_unsigned(ctx, &pnv, 16) == false)
return (true);
} else {
@@ -714,7 +726,10 @@ _prop_number_internalize(prop_stack_t st
}
/* No end tag to advance over in JSON. */
- if (ctx->poic_format != PROP_FORMAT_JSON &&
+ if (
+#ifdef _PROPLIB_WITH_JSON
+ ctx->poic_format != PROP_FORMAT_JSON &&
+#endif
_prop_object_internalize_find_tag(ctx, "integer",
_PROP_TAG_TYPE_END) == false)
return (true);
Index: common/lib/libprop/prop_object.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_object.c,v
retrieving revision 1.39
diff -u -p -r1.39 prop_object.c
--- common/lib/libprop/prop_object.c 26 Apr 2025 17:13:23 -0000 1.39
+++ common/lib/libprop/prop_object.c 9 May 2025 18:40:40 -0000
@@ -143,6 +143,7 @@ _prop_object_externalize_start_tag(
{
bool rv;
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
@@ -154,6 +155,7 @@ _prop_object_externalize_start_tag(
break;
default: /* XML */
+#endif
rv = _prop_object_externalize_append_char(ctx, '<') &&
_prop_object_externalize_append_cstring(ctx,
tags->xml_tag) &&
@@ -162,8 +164,10 @@ _prop_object_externalize_start_tag(
_prop_object_externalize_append_cstring(ctx,
tagattrs))) &&
_prop_object_externalize_append_char(ctx, '>');
+#ifdef _PROPLIB_WITH_JSON
break;
}
+#endif
return rv;
}
@@ -179,6 +183,7 @@ _prop_object_externalize_end_tag(
{
bool rv;
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
@@ -190,13 +195,16 @@ _prop_object_externalize_end_tag(
break;
default: /* XML */
+#endif
rv = _prop_object_externalize_append_char(ctx, '<') &&
_prop_object_externalize_append_char(ctx, '/') &&
_prop_object_externalize_append_cstring(ctx,
tags->xml_tag) &&
_prop_object_externalize_append_char(ctx, '>');
+#ifdef _PROPLIB_WITH_JSON
break;
}
+#endif
return rv;
}
@@ -212,6 +220,7 @@ _prop_object_externalize_empty_tag(
{
bool rv;
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
@@ -236,13 +245,16 @@ _prop_object_externalize_empty_tag(
break;
default: /* XML */
+#endif
rv = _prop_object_externalize_append_char(ctx, '<') &&
_prop_object_externalize_append_cstring(ctx,
tags->xml_tag) &&
_prop_object_externalize_append_char(ctx, '/') &&
_prop_object_externalize_append_char(ctx, '>');
+#ifdef _PROPLIB_WITH_JSON
break;
}
+#endif
return rv;
}
@@ -304,6 +316,7 @@ _prop_object_externalize_append_encoded_
return (true);
}
+#ifdef _PROPLIB_WITH_JSON
static bool
_prop_object_externalize_append_escu(
struct _prop_object_externalize_context *ctx, uint16_t val)
@@ -399,11 +412,13 @@ _prop_object_externalize_append_encoded_
return true;
}
+#endif
bool
_prop_object_externalize_append_encoded_cstring(
struct _prop_object_externalize_context *ctx, const char *cp)
{
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poec_format == PROP_FORMAT_XML ||
ctx->poec_format == PROP_FORMAT_JSON);
@@ -412,9 +427,12 @@ _prop_object_externalize_append_encoded_
return _prop_object_externalize_append_encoded_cstring_json(ctx,
cp);
default:
+#endif
return _prop_object_externalize_append_encoded_cstring_xml(ctx,
cp);
+#ifdef _PROPLIB_WITH_JSON
}
+#endif
}
#define BUF_EXPAND 256
@@ -462,9 +480,11 @@ _prop_object_externalize_header(struct _
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n";
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poec_format != PROP_FORMAT_XML) {
return true;
}
+#endif
if (_prop_object_externalize_append_cstring(ctx,
_plist_xml_header) == false ||
@@ -489,13 +509,17 @@ _prop_object_externalize_footer(struct _
return false;
}
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poec_format == PROP_FORMAT_XML) {
+#endif
if (_prop_object_externalize_end_tag(ctx,
&_plist_type_tags) == false ||
_prop_object_externalize_end_line(ctx, NULL) == false) {
return false;
}
+#ifdef _PROPLIB_WITH_JSON
}
+#endif
return _prop_object_externalize_append_char(ctx, '\0');
}
@@ -519,7 +543,9 @@ _prop_object_externalize_context_alloc(p
ctx->poec_len = 0;
ctx->poec_capacity = BUF_EXPAND;
ctx->poec_depth = 0;
+#ifdef _PROPLIB_WITH_JSON
ctx->poec_format = fmt;
+#endif
}
return (ctx);
}
@@ -552,9 +578,11 @@ _prop_object_externalize(struct _prop_ob
if (obj == NULL || obj->po_type->pot_extern == NULL) {
return NULL;
}
+#ifdef _PROPLIB_WITH_JSON
if (fmt != PROP_FORMAT_XML && fmt != PROP_FORMAT_JSON) {
return NULL;
}
+#endif
ctx = _prop_object_externalize_context_alloc(fmt);
if (ctx == NULL) {
@@ -823,6 +851,8 @@ _prop_object_internalize_decode_string_x
return (true);
}
+#ifdef _PROPLIB_WITH_JSON
+
static unsigned int
_prop_object_decode_string_uesc_getu16(const char *src, unsigned int idx,
uint16_t *valp)
@@ -1039,6 +1069,7 @@ _prop_object_internalize_decode_string_j
}
#undef ADDCHAR
+#endif
bool
_prop_object_internalize_decode_string(
@@ -1046,6 +1077,7 @@ _prop_object_internalize_decode_string(
char *target, size_t targsize, size_t *sizep,
const char **cpp)
{
+#ifdef _PROPLIB_WITH_JSON
_PROP_ASSERT(ctx->poic_format == PROP_FORMAT_XML ||
ctx->poic_format == PROP_FORMAT_JSON);
@@ -1055,9 +1087,12 @@ _prop_object_internalize_decode_string(
target, targsize, sizep, cpp);
default: /* XML */
+#endif
return _prop_object_internalize_decode_string_xml(ctx,
target, targsize, sizep, cpp);
+#ifdef _PROPLIB_WITH_JSON
}
+#endif
}
/*
@@ -1353,7 +1388,11 @@ _prop_object_internalize(const char *dat
return NULL;
}
+#ifdef _PROPLIB_WITH_JSON
fmt = *data == '<' ? PROP_FORMAT_XML : PROP_FORMAT_JSON;
+#else
+ fmt = PROP_FORMAT_XML;
+#endif
ctx = _prop_object_internalize_context_alloc(data, fmt);
if (ctx == NULL) {
@@ -1389,7 +1428,9 @@ _prop_object_internalize_context_alloc(c
if (ctx == NULL)
return (NULL);
+#ifdef _PROPLIB_WITH_JSON
ctx->poic_format = fmt;
+#endif
ctx->poic_data = ctx->poic_cp = data;
/*
@@ -1397,6 +1438,7 @@ _prop_object_internalize_context_alloc(c
* skip it, if present. We should never see one, but we're
* allowed to detect and ignore it. (RFC 8259 section 8.1)
*/
+#ifdef _PROPLIB_WITH_JSON
if (fmt == PROP_FORMAT_JSON) {
if (((unsigned char)data[0] == 0xff &&
(unsigned char)data[1] == 0xfe) ||
@@ -1408,6 +1450,7 @@ _prop_object_internalize_context_alloc(c
/* No additional processing work to do for JSON. */
return ctx;
}
+#endif
/*
* Skip any whitespace and XML preamble stuff that we don't
Index: common/lib/libprop/prop_object_impl.h
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_object_impl.h,v
retrieving revision 1.38
diff -u -p -r1.38 prop_object_impl.h
--- common/lib/libprop/prop_object_impl.h 26 Apr 2025 17:13:23 -0000 1.38
+++ common/lib/libprop/prop_object_impl.h 9 May 2025 18:40:40 -0000
@@ -51,14 +51,18 @@ struct _prop_object_externalize_context
size_t poec_capacity; /* capacity of buffer */
size_t poec_len; /* current length of string */
unsigned int poec_depth; /* nesting depth */
+#ifdef _PROPLIB_WITH_JSON
prop_format_t poec_format; /* output format */
+#endif
};
struct _prop_object_type_tags {
const char *xml_tag;
+#ifdef _PROPLIB_WITH_JSON
const char *json_open_tag;
const char *json_close_tag;
const char *json_empty_sep;
+#endif
};
bool _prop_object_externalize_start_line(
@@ -107,7 +111,9 @@ typedef enum {
} _prop_tag_type_t;
struct _prop_object_internalize_context {
+#ifdef _PROPLIB_WITH_JSON
prop_format_t poic_format;
+#endif
const char *poic_data;
const char *poic_cp;
Index: common/lib/libprop/prop_string.c
===================================================================
RCS file: /cvsroot/src/common/lib/libprop/prop_string.c,v
retrieving revision 1.21
diff -u -p -r1.21 prop_string.c
--- common/lib/libprop/prop_string.c 26 Apr 2025 17:13:23 -0000 1.21
+++ common/lib/libprop/prop_string.c 9 May 2025 18:40:40 -0000
@@ -61,8 +61,10 @@ _PROP_MALLOC_DEFINE(M_PROP_STRING, "prop
static const struct _prop_object_type_tags _prop_string_type_tags = {
.xml_tag = "string",
+#ifdef _PROPLIB_WITH_JSON
.json_open_tag = "\"",
.json_close_tag = "\"",
+#endif
};
static _prop_object_free_rv_t
@@ -696,13 +698,16 @@ _prop_string_internalize(prop_stack_t st
}
str[len] = '\0';
+#ifdef _PROPLIB_WITH_JSON
if (ctx->poic_format == PROP_FORMAT_JSON) {
if (*ctx->poic_cp != '"') {
_PROP_FREE(str, M_PROP_STRING);
return (true);
}
ctx->poic_cp++;
- } else {
+ } else
+#endif
+ {
if (_prop_object_internalize_find_tag(ctx, "string",
_PROP_TAG_TYPE_END) == false) {
_PROP_FREE(str, M_PROP_STRING);
Index: lib/libprop/Makefile
===================================================================
RCS file: /cvsroot/src/lib/libprop/Makefile,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile
--- lib/libprop/Makefile 26 Apr 2025 17:13:23 -0000 1.23
+++ lib/libprop/Makefile 9 May 2025 18:40:40 -0000
@@ -11,6 +11,9 @@ PROPLIBDIR=${NETBSDSRCDIR}/common/lib/li
CPPFLAGS+=-D_LIBPROP
CPPFLAGS+=-D_REENTRANT -I${NETBSDSRCDIR}/lib/libc/include
+.if !defined(SMALL)
+CPPFLAGS+=-D_PROPLIB_WITH_JSON
+.endif
.for src in ${SRCS}
COPTS.${src}+= -fvisibility=hidden
Home |
Main Index |
Thread Index |
Old Index