# Run the alltypes test case, but compile with PB_NO_ERRMSG=1

Import("env")

# Take copy of the files for custom build.
c = Copy("$TARGET", "$SOURCE")
env.Command("alltypes.pb.h", "$BUILD/alltypes/alltypes.pb.h", c)
env.Command("alltypes.pb.c", "$BUILD/alltypes/alltypes.pb.c", c)
env.Command("encode_alltypes.c", "$BUILD/alltypes/encode_alltypes.c", c)
env.Command("decode_alltypes.c", "$BUILD/alltypes/decode_alltypes.c", c)

# Define the compilation options
opts = env.Clone()
opts.Append(CPPDEFINES = {'PB_NO_ERRMSG': 1})

# Build new version of core
strict = opts.Clone()
strict.Append(CFLAGS = strict['CORECFLAGS'])
strict.Object("pb_decode_noerr.o", "$NANOPB/pb_decode.c")
strict.Object("pb_encode_noerr.o", "$NANOPB/pb_encode.c")
strict.Object("pb_common_noerr.o", "$NANOPB/pb_common.c")

# Now build and run the test normally.
enc = opts.Program(["encode_alltypes.c", "alltypes.pb.c", "pb_encode_noerr.o", "pb_common_noerr.o"])
dec = opts.Program(["decode_alltypes.c", "alltypes.pb.c", "pb_decode_noerr.o", "pb_common_noerr.o"])

env.RunTest(enc)
env.RunTest([dec, "encode_alltypes.output"])
