# Run the alltypes test case, but compile with PB_ENCODE_ARRAYS_UNPACKED=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_ENCODE_ARRAYS_UNPACKED': 1})

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

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

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