Skip to content

Commit 6f6aca1

Browse files
bcsghbaylesj
andauthored
Make the build configuration under Bazel more correct. (#1600)
* Expose JSON_USE_EXCEPTION and JSON_HAS_INT64 as Bazel config flags with defaults that match the existing Bazel build. Switch //:jsoncpp from using copts ro defines for JSON_USE_EXCEPTION and JSON_HAS_INT64 so that rules that depend on it get the same config. Make src/test_lib_json/fuzz.cpp respect JSON_USE_EXCEPTION. * #ifdef stuff that should only be used with JSON_USE_EXCEPTION. --------- Co-authored-by: Jordan Bayles <bayles.jordan@gmail.com>
1 parent 9af09c4 commit 6f6aca1

File tree

5 files changed

+51
-9
lines changed

5 files changed

+51
-9
lines changed

BUILD.bazel

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
11
licenses(["unencumbered"]) # Public Domain or MIT
22

3+
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
4+
35
exports_files(["LICENSE"])
46

7+
bool_flag(
8+
name = "use_exception",
9+
build_setting_default = False,
10+
)
11+
12+
config_setting(
13+
name = "use_exception_cfg",
14+
flag_values = {":use_exception": "true"},
15+
)
16+
17+
bool_flag(
18+
name = "has_int64",
19+
build_setting_default = True,
20+
)
21+
22+
config_setting(
23+
name = "has_int64_cfg",
24+
flag_values = {":has_int64": "true"},
25+
)
26+
527
cc_library(
628
name = "jsoncpp",
729
srcs = [
@@ -22,10 +44,13 @@ cc_library(
2244
"include/json/version.h",
2345
"include/json/writer.h",
2446
],
25-
copts = [
26-
"-DJSON_USE_EXCEPTION=0",
27-
"-DJSON_HAS_INT64",
28-
],
47+
defines = select({
48+
":use_exception_cfg": ["JSON_USE_EXCEPTION=1"],
49+
"//conditions:default": ["JSON_USE_EXCEPTION=0"],
50+
}) + select({
51+
":has_int64_cfg": ["JSON_HAS_INT64"],
52+
"//conditions:default": [],
53+
}),
2954
includes = ["include"],
3055
visibility = ["//visibility:public"],
3156
deps = [":private"],

MODULE.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ module(
1212
version = "1.9.7",
1313
compatibility_level = 1,
1414
)
15+
16+
bazel_dep(
17+
name = "bazel_skylib",
18+
version = "1.7.1",
19+
)

src/test_lib_json/fuzz.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@
1111
#include <memory>
1212
#include <string>
1313

14-
namespace Json {
15-
class Exception;
16-
}
17-
1814
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
1915
Json::CharReaderBuilder builder;
2016

@@ -45,10 +41,14 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
4541

4642
Json::Value root;
4743
const auto data_str = reinterpret_cast<const char*>(data);
44+
#if JSON_USE_EXCEPTION
4845
try {
46+
#endif // JSON_USE_EXCEPTION
4947
reader->parse(data_str, data_str + size, &root, nullptr);
48+
#if JSON_USE_EXCEPTION
5049
} catch (Json::Exception const&) {
5150
}
51+
#endif // JSON_USE_EXCEPTION
5252
// Whether it succeeded or not doesn't matter.
5353
return 0;
5454
}

src/test_lib_json/jsontest.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ TestResult& checkStringEqual(TestResult& result, const Json::String& expected,
228228
JsonTest::ToJsonString(actual), __FILE__, \
229229
__LINE__, #expected " == " #actual)
230230

231+
#if JSON_USE_EXCEPTION
232+
231233
/// \brief Asserts that a given expression throws an exception
232234
#define JSONTEST_ASSERT_THROWS(expr) \
233235
do { \
@@ -242,6 +244,8 @@ TestResult& checkStringEqual(TestResult& result, const Json::String& expected,
242244
"expected exception thrown: " #expr); \
243245
} while (0)
244246

247+
#endif // JSON_USE_EXCEPTION
248+
245249
/// \brief Begin a fixture test case.
246250
#define JSONTEST_FIXTURE(FixtureType, name) \
247251
class Test##FixtureType##name : public FixtureType { \

src/test_lib_json/main.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1888,7 +1888,7 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, typeChecksThrowExceptions) {
18881888
JSONTEST_ASSERT_THROWS(objVal.asBool());
18891889
JSONTEST_ASSERT_THROWS(arrVal.asBool());
18901890

1891-
#endif
1891+
#endif // JSON_USE_EXCEPTION
18921892
}
18931893

18941894
JSONTEST_FIXTURE_LOCAL(ValueTest, offsetAccessors) {
@@ -3323,6 +3323,8 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithDetailError) {
33233323
}
33243324

33253325
JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithStackLimit) {
3326+
#if JSON_USE_EXCEPTION
3327+
33263328
Json::CharReaderBuilder b;
33273329
Json::Value root;
33283330
char const doc[] = R"({ "property" : "value" })";
@@ -3342,6 +3344,8 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithStackLimit) {
33423344
JSONTEST_ASSERT_THROWS(
33433345
reader->parse(doc, doc + std::strlen(doc), &root, &errs));
33443346
}
3347+
3348+
#endif // JSON_USE_EXCEPTION
33453349
}
33463350

33473351
JSONTEST_FIXTURE_LOCAL(CharReaderTest, testOperator) {
@@ -3961,6 +3965,8 @@ JSONTEST_FIXTURE_LOCAL(IteratorTest, indexes) {
39613965
}
39623966

39633967
JSONTEST_FIXTURE_LOCAL(IteratorTest, constness) {
3968+
#if JSON_USE_EXCEPTION
3969+
39643970
Json::Value const v;
39653971
JSONTEST_ASSERT_THROWS(
39663972
Json::Value::iterator it(v.begin())); // Compile, but throw.
@@ -3982,6 +3988,8 @@ JSONTEST_FIXTURE_LOCAL(IteratorTest, constness) {
39823988
}
39833989
Json::String expected = R"(" 9","10","11",)";
39843990
JSONTEST_ASSERT_STRING_EQUAL(expected, out.str());
3991+
3992+
#endif // JSON_USE_EXCEPTION
39853993
}
39863994

39873995
struct RValueTest : JsonTest::TestCase {};

0 commit comments

Comments
 (0)