summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD537
-rw-r--r--CMakeLists.txt367
-rw-r--r--WORKSPACE40
-rw-r--r--build_defs.bzl273
-rw-r--r--kokoro/ubuntu/build.sh4
-rw-r--r--kokoro/ubuntu/continuous.cfg2
-rw-r--r--kokoro/ubuntu/presubmit.cfg2
-rw-r--r--lua.BUILD102
-rw-r--r--ragel.BUILD193
-rw-r--r--tests/conformance_upb.c4
-rwxr-xr-xtools/make_cmakelists.py234
-rw-r--r--tools/staleness_test.py30
-rw-r--r--tools/staleness_test_lib.py158
-rwxr-xr-xtools/upbc5
-rw-r--r--tools/upbc.lua22
-rw-r--r--upb/json/parser.c26
-rw-r--r--upb/json/parser.rl2
17 files changed, 1730 insertions, 271 deletions
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..458463e
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,537 @@
+load(
+ ":build_defs.bzl",
+ "lua_cclibrary",
+ "lua_library",
+ "lua_binary",
+ "lua_test",
+ "generated_file_staleness_test",
+ "make_shell_script",
+ "upb_amalgamation",
+ "upb_proto_library",
+)
+
+# C/C++ rules ##################################################################
+
+cc_library(
+ name = "upb",
+ srcs = [
+ "google/protobuf/descriptor.upb.c",
+ "upb/decode.c",
+ "upb/def.c",
+ "upb/encode.c",
+ "upb/handlers.c",
+ "upb/handlers-inl.h",
+ "upb/msg.c",
+ "upb/msgfactory.c",
+ "upb/port_def.inc",
+ "upb/port_undef.inc",
+ "upb/refcounted.c",
+ "upb/sink.c",
+ "upb/structdefs.int.h",
+ "upb/structs.int.h",
+ "upb/table.c",
+ "upb/table.int.h",
+ "upb/upb.c",
+ ],
+ hdrs = [
+ "google/protobuf/descriptor.upb.h",
+ "upb/decode.h",
+ "upb/def.h",
+ "upb/encode.h",
+ "upb/handlers.h",
+ "upb/msg.h",
+ "upb/msgfactory.h",
+ "upb/refcounted.h",
+ "upb/sink.h",
+ "upb/upb.h",
+ ],
+ copts = [
+ "-std=c89",
+ "-pedantic",
+ "-Wno-long-long",
+ ],
+)
+
+cc_library(
+ name = "upb_descriptor",
+ srcs = [
+ "upb/descriptor/descriptor.upbdefs.c",
+ "upb/descriptor/reader.c",
+ ],
+ hdrs = [
+ "upb/descriptor/descriptor.upbdefs.h",
+ "upb/descriptor/reader.h",
+ ],
+ copts = [
+ "-std=c89",
+ "-pedantic",
+ "-Wno-long-long",
+ ],
+ deps = [":upb"],
+)
+
+cc_library(
+ name = "upb_pb",
+ srcs = [
+ "upb/pb/compile_decoder.c",
+ "upb/pb/decoder.c",
+ "upb/pb/decoder.int.h",
+ "upb/pb/encoder.c",
+ "upb/pb/glue.c",
+ "upb/pb/textprinter.c",
+ "upb/pb/varint.c",
+ "upb/pb/varint.int.h",
+ ],
+ hdrs = [
+ "upb/pb/decoder.h",
+ "upb/pb/encoder.h",
+ "upb/pb/glue.h",
+ "upb/pb/textprinter.h",
+ ],
+ copts = [
+ "-std=c89",
+ "-pedantic",
+ "-Wno-long-long",
+ ],
+ deps = [
+ ":upb",
+ ":upb_descriptor",
+ ],
+)
+
+cc_library(
+ name = "upb_json",
+ srcs = [
+ "upb/json/parser.c",
+ "upb/json/printer.c",
+ ],
+ hdrs = [
+ "upb/json/parser.h",
+ "upb/json/printer.h",
+ ],
+ copts = [
+ "-std=c89",
+ "-pedantic",
+ "-Wno-long-long",
+ ],
+ deps = [":upb"],
+)
+
+cc_library(
+ name = "upb_cc_bindings",
+ hdrs = [
+ "upb/bindings/stdc++/string.h",
+ ],
+ deps = [":upb"],
+)
+
+# Amalgamation #################################################################
+
+py_binary(
+ name = "amalgamate",
+ srcs = ["tools/amalgamate.py"],
+)
+
+upb_amalgamation(
+ name = "gen_amalgamation",
+ outs = [
+ "upb.c",
+ "upb.h",
+ ],
+ amalgamator = ":amalgamate",
+ libs = [
+ ":upb",
+ ":upb_descriptor",
+ ":upb_pb",
+ ":upb_json",
+ ],
+)
+
+cc_library(
+ name = "amalgamation",
+ srcs = ["upb.c"],
+ hdrs = ["upb.h"],
+)
+
+# C/C++ tests ##################################################################
+
+cc_library(
+ name = "upb_test",
+ testonly = 1,
+ srcs = [
+ "tests/testmain.cc",
+ ],
+ hdrs = [
+ "tests/test_util.h",
+ "tests/upb_test.h",
+ ],
+)
+
+cc_test(
+ name = "test_varint",
+ srcs = ["tests/pb/test_varint.c"],
+ deps = [
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_def",
+ srcs = ["tests/test_def.c"],
+ deps = [
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_handlers",
+ srcs = ["tests/test_handlers.c"],
+ deps = [
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_decoder",
+ srcs = ["tests/pb/test_decoder.cc"],
+ deps = [
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_encoder",
+ srcs = ["tests/pb/test_encoder.cc"],
+ data = ["upb/descriptor/descriptor.pb"],
+ deps = [
+ ":upb_cc_bindings",
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_cpp",
+ srcs = ["tests/test_cpp.cc"],
+ deps = [
+ ":upb",
+ ":upb_descriptor",
+ ":upb_pb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_table",
+ srcs = ["tests/test_table.cc"],
+ deps = [
+ ":upb",
+ ":upb_test",
+ ],
+)
+
+cc_test(
+ name = "test_json",
+ srcs = [
+ "tests/json/test.upbdefs.c",
+ "tests/json/test.upbdefs.h",
+ "tests/json/test_json.cc",
+ ],
+ deps = [
+ ":upb_json",
+ ":upb_test",
+ ],
+)
+
+upb_proto_library(
+ name = "conformance_proto_upb",
+ upbc = ":upbc",
+ deps = [
+ "@com_google_protobuf//:conformance_proto",
+ "@com_google_protobuf//:test_messages_proto3_proto",
+ ],
+)
+
+cc_binary(
+ name = "conformance_upb",
+ srcs = [
+ "tests/conformance_upb.c",
+ ],
+ deps = [
+ ":conformance_proto_upb",
+ ":upb",
+ ],
+)
+
+make_shell_script(
+ name = "gen_test_conformance_upb",
+ out = "test_conformance_upb.sh",
+ contents = "$(rlocation com_google_protobuf/conformance_test_runner) $(rlocation upb/conformance_upb)",
+)
+
+sh_test(
+ name = "test_conformance_upb",
+ srcs = ["test_conformance_upb.sh"],
+ data = [
+ "tests/conformance_upb_failures.txt",
+ ":conformance_upb",
+ "@bazel_tools//tools/bash/runfiles",
+ "@com_google_protobuf//:conformance_test_runner",
+ ],
+)
+
+# Lua libraries. ###############################################################
+
+lua_cclibrary(
+ name = "lua/upb_c",
+ srcs = [
+ "upb/bindings/lua/def.c",
+ "upb/bindings/lua/msg.c",
+ "upb/bindings/lua/upb.c",
+ ],
+ hdrs = [
+ "upb/bindings/lua/upb.h",
+ ],
+ deps = [
+ "upb",
+ "upb_pb",
+ ],
+)
+
+lua_library(
+ name = "lua/upb",
+ srcs = ["upb/bindings/lua/upb.lua"],
+ luadeps = ["lua/upb_c"],
+ strip_prefix = "upb/bindings/lua",
+)
+
+lua_cclibrary(
+ name = "lua/upb/table_c",
+ srcs = ["upb/bindings/lua/upb/table.c"],
+ luadeps = ["lua/upb_c"],
+ deps = ["upb"],
+)
+
+lua_library(
+ name = "lua/upb/table",
+ srcs = ["upb/bindings/lua/upb/table.lua"],
+ luadeps = [
+ "lua/upb",
+ "lua/upb/table_c",
+ ],
+ strip_prefix = "upb/bindings/lua",
+)
+
+lua_cclibrary(
+ name = "lua/upb/pb_c",
+ srcs = ["upb/bindings/lua/upb/pb.c"],
+ luadeps = ["lua/upb_c"],
+ deps = ["upb_pb"],
+)
+
+lua_library(
+ name = "lua/upb/pb",
+ srcs = ["upb/bindings/lua/upb/pb.lua"],
+ luadeps = [
+ "lua/upb",
+ "lua/upb/pb_c",
+ ],
+ strip_prefix = "upb/bindings/lua",
+)
+
+lua_library(
+ name = "lua/upbc_lib",
+ srcs = [
+ "tools/dump_cinit.lua",
+ "tools/make_c_api.lua",
+ ],
+ luadeps = [
+ "lua/upb",
+ "lua/upb/table",
+ ],
+ strip_prefix = "tools",
+)
+
+# Lua tests. ###################################################################
+
+lua_test(
+ name = "lua/test_upb",
+ luadeps = ["lua/upb"],
+ luamain = "tests/bindings/lua/test_upb.lua",
+)
+
+lua_test(
+ name = "lua/test_upb_pb",
+ luadeps = ["lua/upb/pb"],
+ luamain = "tests/bindings/lua/test_upb.pb.lua",
+)
+
+# upb compiler #################################################################
+
+lua_binary(
+ name = "upbc",
+ luadeps = [
+ "lua/upbc_lib",
+ ],
+ luamain = "tools/upbc.lua",
+)
+
+# Test the CMake build #########################################################
+
+make_shell_script(
+ name = "gen_run_cmake_build",
+ out = "run_cmake_build.sh",
+ contents = "mkdir build && cd build && cmake .. && make -j8"
+)
+
+sh_test(
+ name = "cmake_build",
+ srcs = ["run_cmake_build.sh"],
+ data = glob([
+ "CMakeLists.txt",
+ "google/**/*",
+ "upb/**/*",
+ "tests/**/*",
+ ]) + [
+ "@bazel_tools//tools/bash/runfiles",
+ ],
+)
+
+# Generated files ##############################################################
+
+exports_files(["tools/staleness_test.py"])
+
+py_library(
+ name = "staleness_test_lib",
+ testonly = 1,
+ srcs = ["tools/staleness_test_lib.py"],
+)
+
+genrule(
+ name = "make_dynasm_decoder",
+ srcs = [
+ "third_party/dynasm/dynasm.lua",
+ "third_party/dynasm/dasm_x64.lua",
+ "third_party/dynasm/dasm_x86.lua",
+ "upb/pb/compile_decoder_x64.dasc",
+ ],
+ outs = ["generated/upb/pb/compile_decoder_x64.h"],
+ cmd = "LUA_PATH=third_party/dynasm/?.lua $(location @lua//:lua) third_party/dynasm/dynasm.lua -c upb/pb/compile_decoder_x64.dasc > $@",
+ tools = ["@lua"],
+)
+
+proto_library(
+ name = "upb_descriptor_proto",
+ srcs = [
+ "upb/descriptor/descriptor.proto",
+ ],
+)
+
+py_binary(
+ name = "make_cmakelists",
+ srcs = ["tools/make_cmakelists.py"],
+)
+
+genrule(
+ name = "gen_cmakelists",
+ outs = ["generated/CMakeLists.txt"],
+ srcs = ["BUILD", "WORKSPACE"],
+ tools = [":make_cmakelists"],
+ cmd = "$(location :make_cmakelists) $@"
+)
+
+genrule(
+ name = "copy_upb_descriptor_pb",
+ srcs = [":upb_descriptor_proto"],
+ outs = ["generated/upb/descriptor/descriptor.pb"],
+ cmd = "cp $< $@",
+)
+
+genrule(
+ name = "generate_old_upbdefs",
+ srcs = ["generated/upb/descriptor/descriptor.pb"],
+ outs = [
+ "generated/upb/descriptor/descriptor.upbdefs.h",
+ "generated/upb/descriptor/descriptor.upbdefs.c",
+ ],
+ cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE",
+ tools = [":upbc"],
+)
+
+proto_library(
+ name = "google_descriptor_proto",
+ srcs = [
+ "google/protobuf/descriptor.proto",
+ ],
+)
+
+genrule(
+ name = "copy_google_descriptor_pb",
+ srcs = [":google_descriptor_proto"],
+ outs = ["generated/google/protobuf/descriptor.pb"],
+ cmd = "cp $< $@",
+)
+
+genrule(
+ name = "generate_descriptor_c",
+ srcs = ["generated/google/protobuf/descriptor.pb"],
+ outs = [
+ "generated/google/protobuf/descriptor.upb.h",
+ "generated/google/protobuf/descriptor.upb.c",
+ ],
+ cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC $$INFILE",
+ tools = [":upbc"],
+)
+
+proto_library(
+ name = "json_test_proto",
+ srcs = ["tests/json/test.proto"],
+)
+
+genrule(
+ name = "copy_json_test_proto",
+ srcs = [":json_test_proto"],
+ outs = ["generated/tests/json/test.proto.pb"],
+ cmd = "cp $< $@",
+)
+
+genrule(
+ name = "generated_json_test_proto_upbdefs",
+ srcs = ["generated/tests/json/test.proto.pb"],
+ outs = [
+ "generated/tests/json/test.upbdefs.h",
+ "generated/tests/json/test.upbdefs.c",
+ ],
+ cmd = "UPBC=$$PWD/$(location :upbc); INFILE=$$PWD/$<; cd $(GENDIR)/generated && $$UPBC --generate-upbdefs $$INFILE",
+ tools = [":upbc"],
+)
+
+genrule(
+ name = "generate_json_ragel",
+ srcs = ["upb/json/parser.rl"],
+ outs = ["generated/upb/json/parser.c"],
+ cmd = "$(location @ragel//:ragel) -C -o upb/json/parser.c $< && mv upb/json/parser.c $@",
+ tools = ["@ragel"],
+)
+
+generated_file_staleness_test(
+ name = "test_generated_files",
+ outs = [
+ "CMakeLists.txt",
+ "google/protobuf/descriptor.upb.c",
+ "google/protobuf/descriptor.upb.h",
+ "tests/json/test.proto.pb",
+ "tests/json/test.upbdefs.c",
+ "tests/json/test.upbdefs.h",
+ "upb/descriptor/descriptor.pb",
+ "upb/descriptor/descriptor.upbdefs.c",
+ "upb/descriptor/descriptor.upbdefs.h",
+ "upb/json/parser.c",
+ "upb/pb/compile_decoder_x64.h",
+ ],
+ generated_pattern = "generated/%s",
+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba572fa..5c6d5fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,4 @@
+# This file was generated from BUILD using tools/make_cmakelists.py.
cmake_minimum_required(VERSION 3.1)
@@ -9,16 +10,14 @@ endif()
cmake_minimum_required (VERSION 3.0)
cmake_policy(SET CMP0048 NEW)
-project (upb)
+
+project(upb)
+
# Prevent CMake from setting -rdynamic on Linux (!!).
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
-# Options we define for users.
-option(UPB_ENABLE_ASAN "Enable address sanitizer." OFF)
-option(UPB_ENABLE_UBSAN "Enable undefined behavior sanitizer." OFF)
-
# Set default build type.
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
@@ -51,8 +50,6 @@ endif()
include_directories(.)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
-set(CMAKE_CXX_FLAGS "-std=c++11 -W -Wall -Wno-sign-compare")
-set(CMAKE_C_FLAGS "-std=c89 -W -Wall -Wno-sign-compare")
if(APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup -flat_namespace")
@@ -60,250 +57,132 @@ elseif(UNIX)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id")
endif()
-FIND_PACKAGE(Lua)
-if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/Makefile.am")
- set(PROTOBUF_FOUND TRUE)
-endif()
-find_program(RAGEL NAMES ragel)
-
-if(LUA_FOUND)
- include_directories(${LUA_INCLUDE_DIR})
-
- add_library(upb_c SHARED
- upb/bindings/lua/upb.c
- upb/bindings/lua/def.c
- upb/bindings/lua/msg.c
- )
- target_link_libraries(upb_c LINK_PRIVATE
- upbpb_pic
- upbdef_pic
- upbhandlers_pic upb_pic )
-
- add_library(table_c SHARED
- upb/bindings/lua/upb/table.c
- )
- target_link_libraries(table_c LINK_PRIVATE upb_c upb_pic)
-
- add_library(pb_c SHARED
- upb/bindings/lua/upb/pb.c
- )
- target_link_libraries(pb_c LINK_PRIVATE upb_c upbpb_pic)
-
- set_target_properties(upb_c
- PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "lua"
- PREFIX ""
- SUFFIX ".so")
- set_target_properties(table_c pb_c
- PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY "lua/upb"
- PREFIX ""
- SUFFIX ".so")
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tools/upbc
- DEPENDS ${CMAKE_SOURCE_DIR}/tools/upbc
- ${CMAKE_SOURCE_DIR}/tools/upbc.lua
- ${CMAKE_SOURCE_DIR}/tools/dump_cinit.lua
- ${CMAKE_SOURCE_DIR}/tools/make_c_api.lua
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb.lua
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/table.lua
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/pb.lua
- upb_c
- table_c
- pb_c
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_SOURCE_DIR}/tools/upbc
- ${CMAKE_SOURCE_DIR}/tools/upbc.lua
- ${CMAKE_SOURCE_DIR}/tools/dump_cinit.lua
- ${CMAKE_SOURCE_DIR}/tools/make_c_api.lua
- ${CMAKE_CURRENT_BINARY_DIR}/tools)
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lua/upb.lua
- DEPENDS ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb.lua
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb.lua
- ${CMAKE_CURRENT_BINARY_DIR}/lua)
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lua/upb/table.lua
- ${CMAKE_CURRENT_BINARY_DIR}/lua/upb/pb.lua
- DEPENDS ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/table.lua
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/pb.lua
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/table.lua
- ${CMAKE_SOURCE_DIR}/upb/bindings/lua/upb/pb.lua
- ${CMAKE_CURRENT_BINARY_DIR}/lua/upb)
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/upb/pb/compile_decoder_x64.h
- DEPENDS upb/pb/compile_decoder_x64.dasc
- COMMAND
- cd ${CMAKE_CURRENT_SOURCE_DIR} &&
- lua third_party/dynasm/dynasm.lua
- -c upb/pb/compile_decoder_x64.dasc
- > ${CMAKE_CURRENT_BINARY_DIR}/upb/pb/compile_decoder_x64.h
- )
-
- add_custom_target(
- upbc ALL
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/make_c_api.lua
- ${CMAKE_CURRENT_SOURCE_DIR}/tools/upbc.lua
- ${CMAKE_CURRENT_BINARY_DIR}/tools/upbc
- ${CMAKE_CURRENT_BINARY_DIR}/lua/upb.lua
- ${CMAKE_CURRENT_BINARY_DIR}/lua/upb/pb.lua
- )
-
- add_custom_target(
- genfiles2 ALL
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/upb/pb/compile_decoder_x64.h
- )
-
- add_test(
- NAME testlua
- COMMAND lua ${CMAKE_SOURCE_DIR}/tests/bindings/lua/test_upb.lua
- ${CMAKE_SOURCE_DIR}/tests/bindings/lua/test_upb.pb.lua
- )
- set_property(TEST testlua PROPERTY ENVIRONMENT
- LUA_PATH=${CMAKE_SOURCE_DIR}/third_party/lunit/?.lua$<SEMICOLON>${CMAKE_SOURCE_DIR}/upb/bindings/lua/?.lua
- LUA_CPATH=${CMAKE_BINARY_DIR}/upb/bindings/lua/?.so
- )
- set_tests_properties(testlua
- PROPERTIES
- DEPENDS "upb_c;pb_c"
- )
- enable_testing()
-endif()
-
-if(LUA_FOUND AND PROTOBUF_FOUND)
- set(protobuf_BUILD_TESTS OFF CACHE BOOL "enable tests for proto2" FORCE)
- set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "enable shared libs for proto2" FORCE)
- set(protobuf_BUILD_CONFORMANCE ON CACHE BOOL "Build conformance tests" FORCE)
- add_subdirectory(third_party/protobuf/cmake)
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/conformance.upb.h
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/test_messages_proto3.upb.h
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/test_messages_proto3.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/any.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/duration.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/field_mask.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/struct.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/timestamp.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/wrappers.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/conformance.upb.c
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tools/upbc
- ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/conformance/conformance.proto
- COMMAND protoc --include_imports
- ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/conformance/conformance.proto
- ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/src/google/protobuf/test_messages_proto3.proto
- -I${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/conformance
- -I${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf/src
- -o${CMAKE_CURRENT_BINARY_DIR}/conformance.pb &&
- tools/upbc ${CMAKE_CURRENT_BINARY_DIR}/conformance.pb
- )
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upb.h
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upb.c
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tools/upbc
- ${CMAKE_CURRENT_SOURCE_DIR}/google/protobuf/descriptor.proto
- COMMAND protoc
- ${CMAKE_CURRENT_SOURCE_DIR}/google/protobuf/descriptor.proto
- -I${CMAKE_CURRENT_SOURCE_DIR}
- -o${CMAKE_CURRENT_BINARY_DIR}/descriptor.pb &&
- tools/upbc ${CMAKE_CURRENT_BINARY_DIR}/descriptor.pb
- )
-
- add_custom_target(
- genfiles ALL
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/conformance.upb.h
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upb.h
- )
-
- add_executable(conformance_upb
- tests/conformance_upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/conformance.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/test_messages_proto3.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/any.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/duration.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/field_mask.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/struct.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/timestamp.upb.c
- ${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/wrappers.upb.c
- )
- target_link_libraries(conformance_upb LINK_PRIVATE
- upb
- )
-
- add_custom_target(
- conformance
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/conformance_upb
- ${CMAKE_CURRENT_BINARY_DIR}/third_party/protobuf/cmake/conformance_test_runner
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/third_party/protobuf/cmake/conformance_test_runner ${CMAKE_CURRENT_BINARY_DIR}/conformance_upb
- )
-
-endif()
-
-if (RAGEL)
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/upb/json/parser.c
- DEPENDS upb/json/parser.rl
- COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && RAGEL -C -o ${CMAKE_CURRENT_BINARY_DIR}/upb/json/parser.c upb/json/parser.rl
- )
-endif()
-
-configure_file(tools/copy_genfiles.sh.in tools/copy_genfiles.sh)
-
-set(UPB_SRCS
- upb/decode.c
- upb/encode.c
- upb/msg.c
- upb/table.c
- upb/upb.c
-)
-
-set (UPBDEF_SRCS
- upb/descriptor/descriptor.upbdefs.c
- upb/descriptor/reader.c
- upb/def.c
- upb/msgfactory.c
- upb/refcounted.c
-)
-
-set(UPBHANDLERS_SRCS
- upb/sink.c
- upb/handlers.c
-)
-
-set(UPBPB_SRCS
+enable_testing()
+
+add_library(upb
+ google/protobuf/descriptor.upb.c
+ upb/decode.c
+ upb/def.c
+ upb/encode.c
+ upb/handlers.c
+ upb/handlers-inl.h
+ upb/msg.c
+ upb/msgfactory.c
+ upb/port_def.inc
+ upb/port_undef.inc
+ upb/refcounted.c
+ upb/sink.c
+ upb/structdefs.int.h
+ upb/structs.int.h
+ upb/table.c
+ upb/table.int.h
+ upb/upb.c
+ google/protobuf/descriptor.upb.h
+ upb/decode.h
+ upb/def.h
+ upb/encode.h
+ upb/handlers.h
+ upb/msg.h
+ upb/msgfactory.h
+ upb/refcounted.h
+ upb/sink.h
+ upb/upb.h)
+add_library(upb_descriptor
+ upb/descriptor/descriptor.upbdefs.c
+ upb/descriptor/reader.c
+ upb/descriptor/descriptor.upbdefs.h
+ upb/descriptor/reader.h)
+target_link_libraries(upb_descriptor
+ upb)
+add_library(upb_pb
upb/pb/compile_decoder.c
upb/pb/decoder.c
+ upb/pb/decoder.int.h
upb/pb/encoder.c
upb/pb/glue.c
upb/pb/textprinter.c
upb/pb/varint.c
-)
-
-set(UPBJSON_SRCS
+ upb/pb/varint.int.h
+ upb/pb/decoder.h
+ upb/pb/encoder.h
+ upb/pb/glue.h
+ upb/pb/textprinter.h)
+target_link_libraries(upb_pb
+ upb
+ upb_descriptor)
+add_library(upb_json
upb/json/parser.c
upb/json/printer.c
-)
-
-add_library(upb ${UPB_SRCS})
-add_library(upbdef ${UPBDEF_SRCS})
-add_library(upbhandlers ${UPBHANDLERS_SRCS})
-add_library(upbpb ${UPBPB_SRCS})
-add_library(upbjson ${UPBJSON_SRCS})
-
-add_library(upb_pic ${UPB_SRCS})
-add_library(upbdef_pic ${UPBDEF_SRCS})
-add_library(upbhandlers_pic ${UPBHANDLERS_SRCS})
-add_library(upbpb_pic ${UPBPB_SRCS})
-add_library(upbjson_pic ${UPBJSON_SRCS})
+ upb/json/parser.h
+ upb/json/printer.h)
+target_link_libraries(upb_json
+ upb)
+add_library(upb_cc_bindings
+ upb/bindings/stdc++/string.h)
+target_link_libraries(upb_cc_bindings
+ upb)
+set_target_properties(upb_cc_bindings PROPERTIES LINKER_LANGUAGE CXX)
+add_library(upb_test
+ tests/testmain.cc
+ tests/test_util.h
+ tests/upb_test.h)
+add_executable(test_varint
+ tests/pb/test_varint.c)
+add_test(NAME test_varint COMMAND test_varint)
+target_link_libraries(test_varint
+ upb_pb
+ upb_test)
+add_executable(test_def
+ tests/test_def.c)
+add_test(NAME test_def COMMAND test_def)
+target_link_libraries(test_def
+ upb_pb
+ upb_test)
+add_executable(test_handlers
+ tests/test_handlers.c)
+add_test(NAME test_handlers COMMAND test_handlers)
+target_link_libraries(test_handlers
+ upb_pb
+ upb_test)
+add_executable(test_decoder
+ tests/pb/test_decoder.cc)
+add_test(NAME test_decoder COMMAND test_decoder)
+target_link_libraries(test_decoder
+ upb_pb
+ upb_test)
+add_executable(test_encoder
+ tests/pb/test_encoder.cc)
+add_test(NAME test_encoder COMMAND test_encoder)
+add_custom_command(
+ TARGET test_encoder POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_SOURCE_DIR}/upb/descriptor/descriptor.pb
+ ${CMAKE_CURRENT_BINARY_DIR}/upb/descriptor/descriptor.pb)
+target_link_libraries(test_encoder
+ upb_cc_bindings
+ upb_pb
+ upb_test)
+add_executable(test_cpp
+ tests/test_cpp.cc)
+add_test(NAME test_cpp COMMAND test_cpp)
+target_link_libraries(test_cpp
+ upb
+ upb_descriptor
+ upb_pb
+ upb_test)
+add_executable(test_table
+ tests/test_table.cc)
+add_test(NAME test_table COMMAND test_table)
+target_link_libraries(test_table
+ upb
+ upb_test)
+add_executable(test_json
+ tests/json/test.upbdefs.c
+ tests/json/test.upbdefs.h
+ tests/json/test_json.cc)
+add_test(NAME test_json COMMAND test_json)
+target_link_libraries(test_json
+ upb_json
+ upb_test)
-set_property(TARGET upb_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
-set_property(TARGET upbdef_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
-set_property(TARGET upbhandlers_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
-set_property(TARGET upbpb_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
-set_property(TARGET upbjson_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..b4d19c5
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,40 @@
+
+workspace(name = "upb")
+
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
+
+http_archive(
+ name = "lua",
+ build_file = "//:lua.BUILD",
+ sha256 = "b9e2e4aad6789b3b63a056d442f7b39f0ecfca3ae0f1fc0ae4e9614401b69f4b",
+ strip_prefix = "lua-5.2.4",
+ urls = [
+ "https://mirror.bazel.build/www.lua.org/ftp/lua-5.2.4.tar.gz",
+ "https://www.lua.org/ftp/lua-5.2.4.tar.gz",
+ ],
+)
+
+git_repository(
+ name = "com_google_protobuf",
+ commit = "25feb59620627b673df76813dfd66e3f565765e7",
+ #sha256 = "d7a221b3d4fb4f05b7473795ccea9e05dab3b8721f6286a95fffbffc2d926f8b",
+ remote = "https://github.com/haberman/protobuf.git",
+ #tag = "conformance-build-tag",
+)
+
+http_archive(
+ name = "ragel",
+ sha256 = "5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f",
+ build_file = "//:ragel.BUILD",
+ strip_prefix = "ragel-6.10",
+ urls = ["http://www.colm.net/files/ragel/ragel-6.10.tar.gz"],
+)
+
+# Used by protobuf.
+http_archive(
+ name = "bazel_skylib",
+ sha256 = "bbccf674aa441c266df9894182d80de104cabd19be98be002f6d478aaa31574d",
+ strip_prefix = "bazel-skylib-2169ae1c374aab4a09aa90e65efe1a3aad4e279b",
+ urls = ["https://github.com/bazelbuild/bazel-skylib/archive/2169ae1c374aab4a09aa90e65efe1a3aad4e279b.tar.gz"],
+)
diff --git a/build_defs.bzl b/build_defs.bzl
new file mode 100644
index 0000000..0e58bbb
--- /dev/null
+++ b/build_defs.bzl
@@ -0,0 +1,273 @@
+
+_shell_find_runfiles = """
+ # --- begin runfiles.bash initialization ---
+ # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
+ set -euo pipefail
+ if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ if [[ -f "$0.runfiles_manifest" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
+ elif [[ -f "$0.runfiles/MANIFEST" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
+ elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ export RUNFILES_DIR="$0.runfiles"
+ fi
+ fi
+ if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+ elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+ "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+ else
+ echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+ exit 1
+ fi
+ # --- end runfiles.bash initialization ---
+"""
+
+def _librule(name):
+ return name + "_lib"
+
+def lua_cclibrary(name, srcs, hdrs = [], deps = [], luadeps = []):
+ lib_rule = name + "_lib"
+ so_rule = "lib" + name + ".so"
+ so_file = _remove_prefix(name, "lua/") + ".so"
+
+ native.cc_library(
+ name = _librule(name),
+ hdrs = hdrs,
+ srcs = srcs,
+ deps = deps + [_librule(dep) for dep in luadeps] + ["@lua//:liblua_headers"],
+ )
+
+ native.cc_binary(
+ name = so_rule,
+ linkshared = True,
+ deps = [_librule(name)],
+ )
+
+ native.genrule(
+ name = name + "_copy",
+ srcs = [":" + so_rule],
+ outs = [so_file],
+ cmd = "cp $< $@",
+ )
+
+ native.filegroup(
+ name = name,
+ data = [so_file],
+ )
+
+def _remove_prefix(str, prefix):
+ if not str.startswith(prefix):
+ fail("%s doesn't start with %s" % (str, prefix))
+ return str[len(prefix):]
+
+def _remove_suffix(str, suffix):
+ if not str.endswith(suffix):
+ fail("%s doesn't end with %s" % (str, suffix))
+ return str[:-len(suffix)]
+
+def lua_library(name, srcs, strip_prefix, luadeps = []):
+ outs = [_remove_prefix(src, strip_prefix + "/") for src in srcs]
+ native.genrule(
+ name = name + "_copy",
+ srcs = srcs,
+ outs = outs,
+ cmd = "cp $(SRCS) $(@D)",
+ )
+
+ native.filegroup(
+ name = name,
+ data = outs + luadeps,
+ )
+
+def make_shell_script(name, contents, out):
+ script_contents = (_shell_find_runfiles + contents).replace("$", "$$")
+ native.genrule(
+ name = "gen_" + name,
+ outs = [out],
+ cmd = "(cat <<'HEREDOC'\n%s\nHEREDOC\n) > $@" % script_contents,
+ )
+
+def _lua_binary_or_test(name, luamain, luadeps, rule):
+ script = name + ".sh"
+
+ make_shell_script(
+ name = "gen_" + name,
+ out = script,
+ contents = """
+BASE=$(dirname $(rlocation upb/upb_c.so))
+export LUA_CPATH="$BASE/?.so"
+export LUA_PATH="$BASE/?.lua"
+$(rlocation lua/lua) $(rlocation upb/tools/upbc.lua) "$@"
+"""
+ )
+
+ rule(
+ name = name,
+ srcs = [script],
+ data = ["@lua//:lua", "@bazel_tools//tools/bash/runfiles", luamain] + luadeps,
+ )
+
+def lua_binary(name, luamain, luadeps=[]):
+ _lua_binary_or_test(name, luamain, luadeps, native.sh_binary)
+
+def lua_test(name, luamain, luadeps=[]):
+ _lua_binary_or_test(name, luamain, luadeps, native.sh_test)
+
+def generated_file_staleness_test(name, outs, generated_pattern):
+ """Tests that checked-in file(s) match the contents of generated file(s).
+
+ The resulting test will verify that all output files exist and have the
+ correct contents. If the test fails, it can be invoked with --fix to
+ bring the checked-in files up to date.
+
+ Args:
+ name: Name of the rule.
+ outs: the checked-in files that are copied from generated files.
+ generated_pattern: the pattern for transforming each "out" file into a
+ generated file. For example, if generated_pattern="generated/%s" then
+ a file foo.txt will look for generated file generated/foo.txt.
+ """
+
+ script_name = name + ".py"
+ script_src = "//:tools/staleness_test.py"
+
+ # Filter out non-existing rules so Blaze doesn't error out before we even
+ # run the test.
+ existing_outs = native.glob(include = outs)
+
+ # The file list contains a few extra bits of information at the end.
+ # These get unpacked by the Config class in staleness_test_lib.py.
+ file_list = outs + [generated_pattern, native.package_name() or ".", name]
+
+ native.genrule(
+ name = name + "_makescript",
+ outs = [script_name],
+ srcs = [script_src],
+ testonly = 1,
+ cmd = "cat $(location " + script_src + ") > $@; " +
+ "sed -i 's|INSERT_FILE_LIST_HERE|" + "\\n ".join(file_list) + "|' $@",
+ )
+
+ native.py_test(
+ name = name,
+ srcs = [script_name],
+ data = existing_outs + [generated_pattern % file for file in outs],
+ deps = [
+ "//:staleness_test_lib",
+ ],
+ )
+
+# upb_amalgamation() rule, with file_list aspect.
+
+SrcList = provider(
+ fields = {
+ 'srcs' : 'list of srcs',
+ 'hdrs' : 'list of hdrs',
+ }
+)
+
+def _file_list_aspect_impl(target, ctx):
+ srcs = []
+ hdrs = []
+ for src in ctx.rule.attr.srcs:
+ srcs += src.files.to_list()
+ for hdr in ctx.rule.attr.hdrs:
+ hdrs += hdr.files.to_list()
+ return [SrcList(srcs = srcs, hdrs = hdrs)]
+
+_file_list_aspect = aspect(
+ implementation = _file_list_aspect_impl,
+)
+
+def _upb_amalgamation(ctx):
+ srcs = []
+ hdrs = []
+ for lib in ctx.attr.libs:
+ srcs += lib[SrcList].srcs
+ hdrs += lib[SrcList].hdrs
+ ctx.actions.run(
+ inputs = srcs + hdrs,
+ outputs = ctx.outputs.outs,
+ arguments = ["", ctx.bin_dir.path + "/"] + [f.path for f in srcs],
+ progress_message = "Making amalgamation",
+ executable = ctx.executable.amalgamator,
+ )
+
+upb_amalgamation = rule(
+ implementation = _upb_amalgamation,
+ attrs = {
+ "amalgamator": attr.label(
+ executable = True,
+ cfg = "host",
+ ),
+ "libs": attr.label_list(aspects = [_file_list_aspect]),
+ "outs": attr.output_list(),
+ }
+)
+
+# upb_proto_library() rule
+
+def _remove_up(string):
+ if string.startswith("../"):
+ string = string[3:]
+ pos = string.find("/")
+ string = string[pos + 1:]
+
+ return _remove_suffix(string, ".proto")
+
+def _upb_proto_library_srcs_impl(ctx):
+ descriptors = []
+ outs = []
+ for dep in ctx.attr.deps:
+ if hasattr(dep, 'proto'):
+ for desc in dep.proto.transitive_descriptor_sets:
+ descriptors.append(desc)
+ for src in dep.proto.transitive_sources:
+ outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.h"))
+ outs.append(ctx.actions.declare_file(_remove_up(src.short_path) + ".upb.c"))
+ outdir = _remove_suffix(outs[-1].path, _remove_up(src.short_path) + ".upb.c")
+
+ concatenated = ctx.actions.declare_file(ctx.label.name + "_concatenated_descriptor.bin")
+ descriptor_paths = [d.path for d in descriptors]
+
+ ctx.actions.run_shell(
+ inputs = descriptors,
+ outputs = [concatenated],
+ progress_message = "Concatenating descriptors",
+ command = "cat %s > %s" % (" ".join(descriptor_paths), concatenated.path),
+ )
+ ctx.actions.run(
+ inputs = [concatenated],
+ outputs = outs,
+ executable = ctx.executable.upbc,
+ arguments = ["--outdir", outdir, concatenated.path],
+ progress_message = "Generating upb protos",
+ )
+
+ return [DefaultInfo(files = depset(outs))]
+
+_upb_proto_library_srcs = rule(
+ implementation = _upb_proto_library_srcs_impl,
+ attrs = {
+ "upbc": attr.label(
+ executable = True,
+ cfg = "host",
+ ),
+ "deps": attr.label_list(),
+ }
+)
+
+def upb_proto_library(name, deps, upbc):
+ srcs_rule = name + "_srcs.cc"
+ _upb_proto_library_srcs(
+ name = srcs_rule,
+ upbc = upbc,
+ deps = deps,
+ )
+ native.cc_library(
+ name = name,
+ srcs = [":" + srcs_rule],
+ deps = [":upb"],
+ )
diff --git a/kokoro/ubuntu/build.sh b/kokoro/ubuntu/build.sh
new file mode 100644
index 0000000..bbf8841
--- /dev/null
+++ b/kokoro/ubuntu/build.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd $(dirname $0)/../..
+bazel test :all
diff --git a/kokoro/ubuntu/continuous.cfg b/kokoro/ubuntu/continuous.cfg
new file mode 100644
index 0000000..fa97583
--- /dev/null
+++ b/kokoro/ubuntu/continuous.cfg
@@ -0,0 +1,2 @@
+build_file: "upb/kokoro/ubuntu/build.sh"
+timeout_mins: 15
diff --git a/kokoro/ubuntu/presubmit.cfg b/kokoro/ubuntu/presubmit.cfg
new file mode 100644
index 0000000..fa97583
--- /dev/null
+++ b/kokoro/ubuntu/presubmit.cfg
@@ -0,0 +1,2 @@
+build_file: "upb/kokoro/ubuntu/build.sh"
+timeout_mins: 15
diff --git a/lua.BUILD b/lua.BUILD
new file mode 100644
index 0000000..7be0b59
--- /dev/null
+++ b/lua.BUILD
@@ -0,0 +1,102 @@
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "liblua_headers",
+ defines = ["LUA_USE_LINUX"],
+ hdrs = [
+ "src/lauxlib.h",
+ "src/lua.h",
+ "src/lua.hpp",
+ "src/luaconf.h",
+ "src/lualib.h",
+ ],
+ includes = ["src"],
+)
+
+cc_library(
+ name = "liblua",
+ srcs = [
+ "src/lapi.c",
+ "src/lapi.h",
+ "src/lauxlib.c",
+ "src/lauxlib.h",
+ "src/lbaselib.c",
+ "src/lbitlib.c",
+ "src/lcode.c",
+ "src/lcode.h",
+ "src/lcorolib.c",
+ "src/lctype.c",
+ "src/lctype.h",
+ "src/ldblib.c",
+ "src/ldebug.c",
+ "src/ldebug.h",
+ "src/ldo.c",
+ "src/ldo.h",
+ "src/ldump.c",
+ "src/lfunc.c",
+ "src/lfunc.h",
+ "src/lgc.c",
+ "src/lgc.h",
+ "src/linit.c",
+ "src/liolib.c",
+ "src/llex.c",
+ "src/llex.h",
+ "src/llimits.h",
+ "src/lmathlib.c",
+ "src/lmem.c",
+ "src/lmem.h",
+ "src/loadlib.c",
+ "src/lobject.c",
+ "src/lobject.h",
+ "src/lopcodes.c",
+ "src/lopcodes.h",
+ "src/loslib.c",
+ "src/lparser.c",
+ "src/lparser.h",
+ "src/lstate.c",
+ "src/lstate.h",
+ "src/lstring.c",
+ "src/lstring.h",
+ "src/lstrlib.c",
+ "src/ltable.c",
+ "src/ltable.h",
+ "src/ltablib.c",
+ "src/ltm.c",
+ "src/ltm.h",
+ "src/lundump.c",
+ "src/lundump.h",
+ "src/lvm.c",
+ "src/lvm.h",
+ "src/lzio.c",
+ "src/lzio.h",
+ ],
+ defines = ["LUA_USE_LINUX"],
+ hdrs = [
+ "src/lauxlib.h",
+ "src/lua.h",
+ "src/lua.hpp",
+ "src/luaconf.h",
+ "src/lualib.h",
+ ],
+ includes = ["src"],
+ linkopts = [
+ "-lm",
+ "-ldl",
+ ],
+)
+
+cc_binary(
+ name = "lua",
+ srcs = [
+ "src/lua.c",
+ ],
+ deps = [
+ ":liblua",
+ ],
+ linkopts = [
+ "-lreadline",
+ "-rdynamic",
+ ],
+)
diff --git a/ragel.BUILD b/ragel.BUILD
new file mode 100644
index 0000000..5485fab
--- /dev/null
+++ b/ragel.BUILD
@@ -0,0 +1,193 @@
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+cc_binary(
+ name = "ragel",
+ srcs = [
+ "ragel/rubycodegen.cpp",
+ "ragel/goipgoto.h",
+ "ragel/cdtable.h",
+ "ragel/rubycodegen.h",
+ "ragel/gotable.h",
+ "ragel/gocodegen.cpp",
+ "ragel/rubyfflat.cpp",
+ "ragel/common.cpp",
+ "ragel/gofflat.cpp",
+ "ragel/cdtable.cpp",
+ "ragel/cdsplit.cpp",
+ "ragel/rlparse.cpp",
+ "ragel/csfgoto.cpp",
+ "ragel/javacodegen.cpp",
+ "ragel/gocodegen.h",
+ "ragel/mlgoto.cpp",
+ "ragel/fsmgraph.cpp",
+ "ragel/version.h",
+ "ragel/mlfflat.h",
+ "ragel/fsmgraph.h",
+ "ragel/fsmbase.cpp",
+ "ragel/fsmstate.cpp",
+ "ragel/gotablish.cpp",
+ "ragel/rubyflat.cpp",
+ "ragel/cdfgoto.h",
+ "ragel/cscodegen.h",
+ "ragel/mlflat.cpp",
+ "ragel/rubyflat.h",
+ "ragel/goftable.h",
+ "ragel/rbxgoto.cpp",
+ "ragel/csfflat.cpp",
+ "ragel/gofgoto.cpp",
+ "ragel/gofgoto.h",
+ "ragel/ragel.h",
+ "ragel/goftable.cpp",
+ "ragel/cdcodegen.cpp",
+ "ragel/rlparse.h",
+ "ragel/cdsplit.h",
+ "ragel/xmlcodegen.cpp",
+ "ragel/goipgoto.cpp",
+ "ragel/dotcodegen.h",
+ "ragel/gogoto.cpp",
+ "ragel/csflat.h",
+ "ragel/csfflat.h",
+ #"ragel/config.h.in",
+ "ragel/csipgoto.cpp",
+ "ragel/mltable.cpp",
+ "ragel/mlflat.h",
+ "ragel/csftable.cpp",
+ "ragel/cdgoto.h",
+ "ragel/goflat.cpp",
+ "ragel/rubyfflat.h",
+ "ragel/mlftable.h",
+ "ragel/rubyftable.h",
+ "ragel/fsmap.cpp",
+ "ragel/redfsm.cpp",
+ "ragel/goflat.h",
+ "ragel/parsetree.cpp",
+ "ragel/fsmmin.cpp",
+ "ragel/dotcodegen.cpp",
+ "ragel/redfsm.h",
+ "ragel/mlcodegen.cpp",
+ "ragel/cdfgoto.cpp",
+ "ragel/cssplit.cpp",
+ "ragel/cstable.cpp",
+ "ragel/javacodegen.h",
+ "ragel/parsedata.cpp",
+ "ragel/buffer.h",
+ "ragel/gogoto.h",
+ "ragel/csgoto.h",
+ "ragel/pcheck.h",
+ "ragel/rubyftable.cpp",
+ "ragel/csfgoto.h",
+ "ragel/common.h",
+ "ragel/cdftable.h",
+ "ragel/mlgoto.h",
+ "ragel/csgoto.cpp",
+ "ragel/cdflat.h",
+ "ragel/cdipgoto.h",
+ "ragel/cstable.h",
+ "ragel/gendata.h",
+ "ragel/cdfflat.cpp",
+ "ragel/gotable.cpp",
+ "ragel/cdcodegen.h",
+ "ragel/gendata.cpp",
+ "ragel/rubytable.h",
+ "ragel/csflat.cpp",
+ "ragel/inputdata.h",
+ "ragel/inputdata.cpp",
+ "ragel/rubytable.cpp",
+ "ragel/fsmattach.cpp",
+ "ragel/csipgoto.h",
+ "ragel/cscodegen.cpp",
+ "ragel/cdfflat.h",
+ "ragel/rbxgoto.h",
+ "ragel/xmlcodegen.h",
+ "ragel/gofflat.h",
+ "ragel/parsedata.h",
+ "ragel/mlfgoto.h",
+ "ragel/cdflat.cpp",
+ "ragel/config.h",
+ "ragel/rlscan.cpp",
+ "ragel/mlcodegen.h",
+ "ragel/mlfflat.cpp",
+ "ragel/mlftable.cpp",
+ "ragel/mltable.h",
+ "ragel/cdipgoto.cpp",
+ "ragel/cdftable.cpp",
+ "ragel/parsetree.h",
+ "ragel/rlscan.h",
+ "ragel/main.cpp",
+ "ragel/cssplit.h",
+ "ragel/mlfgoto.cpp",
+ "ragel/csftable.h",
+ "ragel/gotablish.h",
+ "ragel/cdgoto.cpp",
+ "aapl/avlmelkey.h",
+ "aapl/dlistmel.h",
+ "aapl/avliset.h",
+ "aapl/avlkeyless.h",
+ "aapl/sbstset.h",
+ "aapl/sbsttable.h",
+ "aapl/quicksort.h",
+ "aapl/avlitree.h",
+ "aapl/avlcommon.h",
+ "aapl/bstset.h",
+ "aapl/avlmel.h",
+ "aapl/insertsort.h",
+ "aapl/dlist.h",
+ "aapl/avlmap.h",
+ "aapl/mergesort.h",
+ "aapl/resize.h",
+ "aapl/bstcommon.h",
+ "aapl/bstmap.h",
+ "aapl/compare.h",
+ "aapl/svector.h",
+ "aapl/avlset.h",
+ "aapl/bsttable.h",
+ "aapl/avlikeyless.h",
+ "aapl/bubblesort.h",
+ "aapl/table.h",
+ "aapl/avlbasic.h",
+ "aapl/vector.h",
+ "aapl/avlimap.h",
+ "aapl/dlistval.h",
+ "aapl/dlcommon.h",
+ "aapl/avlibasic.h",
+ "aapl/sbstmap.h",
+ "aapl/avlimel.h",
+ "aapl/avlimelkey.h",
+ "aapl/avltree.h",
+ ],
+ includes = ["ragel", "aapl"],
+)
+
+config_h_contents = """
+#define PACKAGE "ragel"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "ragel"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "ragel 6.10"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "ragel"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "6.10"
+
+/* Version number of package */
+#define VERSION "6.10"
+"""
+
+genrule(
+ name = "gen_config_h",
+ outs = ["ragel/config.h"],
+ cmd = "(cat <<'HEREDOC'\n%s\nHEREDOC\n) > $@" % config_h_contents,
+)
diff --git a/tests/conformance_upb.c b/tests/conformance_upb.c
index ccc8a94..e0a7d8c 100644
--- a/tests/conformance_upb.c
+++ b/tests/conformance_upb.c
@@ -8,8 +8,8 @@
#include <stdlib.h>
#include <unistd.h>
-#include "conformance.upb.h"
-#include "google/protobuf/test_messages_proto3.upb.h"
+#include "conformance/conformance.upb.h"
+#include "src/google/protobuf/test_messages_proto3.upb.h"
int test_count = 0;
diff --git a/tools/make_cmakelists.py b/tools/make_cmakelists.py
new file mode 100755
index 0000000..30e1b93
--- /dev/null
+++ b/tools/make_cmakelists.py
@@ -0,0 +1,234 @@
+#!/usr/bin/env python
+
+"""TODO(haberman): DO NOT SUBMIT without one-line documentation for make_cmakelists.
+
+TODO(haberman): DO NOT SUBMIT without a detailed description of make_cmakelists.
+"""
+
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+import sys
+import textwrap
+
+def StripColons(deps):
+ return map(lambda x: x[1:], deps)
+
+def IsSourceFile(name):
+ return name.endswith(".c") or name.endswith(".cc")
+
+class BuildFileFunctions(object):
+ def __init__(self, converter):
+ self.converter = converter
+
+ def _add_deps(self, kwargs):
+ if "deps" not in kwargs:
+ return
+ self.converter.toplevel += "target_link_libraries(%s\n %s)\n" % (
+ kwargs["name"],
+ "\n ".join(StripColons(kwargs["deps"]))
+ )
+
+ def load(self, *args):
+ pass
+
+ def cc_library(self, **kwargs):
+ if kwargs["name"] == "amalgamation":
+ return
+ files = kwargs.get("srcs", []) + kwargs.get("hdrs", [])
+ self.converter.toplevel += "add_library(%s\n %s)\n" % (
+ kwargs["name"],
+ "\n ".join(files)
+ )
+ self._add_deps(kwargs)
+
+ # CMake wants to know if each library is C or C++.
+ # If there are only .h files, it can't infer. Assume C++.
+ if not filter(IsSourceFile, files):
+ line = "set_target_properties(%s PROPERTIES LINKER_LANGUAGE CXX)\n"
+ self.converter.toplevel += line % (kwargs["name"])
+
+ def cc_binary(self, **kwargs):
+ pass
+
+ def cc_test(self, **kwargs):
+ self.converter.toplevel += "add_executable(%s\n %s)\n" % (
+ kwargs["name"],
+ "\n ".join(kwargs["srcs"])
+ )
+ self.converter.toplevel += "add_test(NAME %s COMMAND %s)\n" % (
+ kwargs["name"],
+ kwargs["name"],
+ )
+
+ if "data" in kwargs:
+ for data_dep in kwargs["data"]:
+ self.converter.toplevel += textwrap.dedent("""\
+ add_custom_command(
+ TARGET %s POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_SOURCE_DIR}/%s
+ ${CMAKE_CURRENT_BINARY_DIR}/%s)\n""" % (
+ kwargs["name"], data_dep, data_dep
+ ))
+
+ self._add_deps(kwargs)
+
+ def py_library(self, **kwargs):
+ pass
+
+ def py_binary(self, **kwargs):
+ pass
+
+ def lua_cclibrary(self, **kwargs):
+ pass
+
+ def lua_library(self, **kwargs):
+ pass
+
+ def lua_binary(self, **kwargs):
+ pass
+
+ def lua_test(self, **kwargs):
+ pass
+
+ def sh_test(self, **kwargs):
+ pass
+
+ def make_shell_script(self, **kwargs):
+ pass
+
+ def exports_files(self, files, **kwargs):
+ pass
+
+ def proto_library(self, **kwargs):
+ pass
+
+ def generated_file_staleness_test(self, **kwargs):
+ pass
+
+ def upb_amalgamation(self, **kwargs):
+ pass
+
+ def upb_proto_library(self, **kwargs):
+ pass
+
+ def genrule(self, **kwargs):
+ pass
+
+ def glob(*args):
+ return []
+
+
+class WorkspaceFileFunctions(object):
+ def __init__(self, converter):
+ self.converter = converter
+
+ def load(self, *args):
+ pass
+
+ def workspace(self, **kwargs):
+ self.converter.prelude += "project(%s)\n" % (kwargs["name"])
+
+ def http_archive(self, **kwargs):
+ pass
+
+ def git_repository(self, **kwargs):
+ pass
+
+
+class Converter(object):
+ def __init__(self):
+ self.prelude = ""
+ self.toplevel = ""
+ self.if_lua = ""
+
+ def convert(self):
+ return self.template % {
+ "prelude": converter.prelude,
+ "toplevel": converter.toplevel,
+ }
+
+ template = textwrap.dedent("""\
+ # This file was generated from BUILD using tools/make_cmakelists.py.
+
+ cmake_minimum_required(VERSION 3.1)
+
+ if(${CMAKE_VERSION} VERSION_LESS 3.12)
+ cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
+ else()
+ cmake_policy(VERSION 3.12)
+ endif()
+
+ cmake_minimum_required (VERSION 3.0)
+ cmake_policy(SET CMP0048 NEW)
+
+ %(prelude)s
+
+ # Prevent CMake from setting -rdynamic on Linux (!!).
+ SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+ SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+
+ # Set default build type.
+ if(NOT CMAKE_BUILD_TYPE)
+ message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
+ set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
+ "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
+ FORCE)
+ endif()
+
+ # When using Ninja, compiler output won't be colorized without this.
+ include(CheckCXXCompilerFlag)
+ CHECK_CXX_COMPILER_FLAG(-fdiagnostics-color=always SUPPORTS_COLOR_ALWAYS)
+ if(SUPPORTS_COLOR_ALWAYS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
+ endif()
+
+ # Implement ASAN/UBSAN options
+ if(UPB_ENABLE_ASAN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
+ endif()
+
+ if(UPB_ENABLE_UBSAN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
+ endif()
+
+ include_directories(.)
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+ if(APPLE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup -flat_namespace")
+ elseif(UNIX)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id")
+ endif()
+
+ enable_testing()
+
+ %(toplevel)s
+
+ """)
+
+data = {}
+converter = Converter()
+
+def GetDict(obj):
+ ret = {}
+ for k in dir(obj):
+ if not k.startswith("_"):
+ ret[k] = getattr(obj, k);
+ return ret
+
+globs = GetDict(converter)
+
+execfile("WORKSPACE", GetDict(WorkspaceFileFunctions(converter)))
+execfile("BUILD", GetDict(BuildFileFunctions(converter)))
+
+with open(sys.argv[1], "w") as f:
+ f.write(converter.convert())
diff --git a/tools/staleness_test.py b/tools/staleness_test.py
new file mode 100644
index 0000000..045cd1a
--- /dev/null
+++ b/tools/staleness_test.py
@@ -0,0 +1,30 @@
+"""The py_test() script for generated_file_staleness_test() rules.
+
+Note that this file is preprocessed! The INSERT_<...> text below is replaced
+with the actual list of files before we actually run the script.
+"""
+
+from __future__ import absolute_import
+
+from tools import staleness_test_lib
+import unittest
+import sys
+
+file_list = """
+ INSERT_FILE_LIST_HERE
+""".split()
+
+config = staleness_test_lib.Config(file_list)
+
+
+class TestFilesMatch(unittest.TestCase):
+
+ def testFilesMatch(self):
+ errors = staleness_test_lib.CheckFilesMatch(config)
+ self.assertFalse(errors, errors)
+
+
+if len(sys.argv) > 1 and sys.argv[1] == "--fix":
+ staleness_test_lib.FixFiles(config)
+else:
+ unittest.main()
diff --git a/tools/staleness_test_lib.py b/tools/staleness_test_lib.py
new file mode 100644
index 0000000..6d5c3d3
--- /dev/null
+++ b/tools/staleness_test_lib.py
@@ -0,0 +1,158 @@
+"""Shared code for validating generated_file_staleness_test() rules.
+
+This code is used by test scripts generated from
+generated_file_staleness_test() rules.
+"""
+
+from __future__ import absolute_import
+from __future__ import print_function
+
+import os
+from shutil import copyfile
+
+
+class _FilePair(object):
+ """Represents a single (target, generated) file pair."""
+
+ def __init__(self, target, generated):
+ self.target = target
+ self.generated = generated
+
+
+class Config(object):
+ """Represents the configuration for a single staleness test target."""
+
+ def __init__(self, file_list):
+ # Duplicate to avoid modifying our arguments.
+ file_list = list(file_list)
+
+ # The file list contains a few other bits of information at the end.
+ # This is packed by the code in build_defs.bzl.
+ self.target_name = file_list.pop()
+ self.package_name = file_list.pop()
+ self.pattern = file_list.pop()
+
+ self.file_list = file_list
+
+
+def _GetFilePairs(config):
+ """Generates the list of file pairs.
+
+ Args:
+ config: a Config object representing this target's config.
+
+ Returns:
+ A list of _FilePair objects.
+ """
+
+ ret = []
+
+ has_bazel_genfiles = os.path.exists("bazel-genfiles")
+
+ for filename in config.file_list:
+ target = os.path.join(config.package_name, filename)
+ generated = os.path.join(config.package_name, config.pattern % filename)
+ if has_bazel_genfiles:
+ generated = os.path.join("bazel-genfiles", generated)
+
+ # Generated files should always exist. Blaze should guarantee this before
+ # we are run.
+ if not os.path.isfile(generated):
+ print("Generated file '%s' does not exist." % generated)
+ print("Please run this command to generate it:")
+ print(" bazel build %s:%s" % (config.package_name, config.target_name))
+ ret.append(_FilePair(target, generated))
+
+ return ret
+
+
+def _GetMissingAndStaleFiles(file_pairs):
+ """Generates lists of missing and stale files.
+
+ Args:
+ file_pairs: a list of _FilePair objects.
+
+ Returns:
+ missing_files: a list of _FilePair objects representing missing files.
+ These target files do not exist at all.
+ stale_files: a list of _FilePair objects representing stale files.
+ These target files exist but have stale contents.
+ """
+
+ missing_files = []
+ stale_files = []
+
+ for pair in file_pairs:
+ if not os.path.isfile(pair.target):
+ missing_files.append(pair)
+ continue
+
+ generated = open(pair.generated).read()
+ target = open(pair.target).read()
+ if generated != target:
+ stale_files.append(pair)
+
+ return missing_files, stale_files
+
+
+def _CopyFiles(file_pairs):
+ """Copies all generated files to the corresponding target file.
+
+ The target files must be writable already.
+
+ Args:
+ file_pairs: a list of _FilePair objects that we want to copy.
+ """
+
+ for pair in file_pairs:
+ target_dir = os.path.dirname(pair.target)
+ if not os.path.isdir(target_dir):
+ os.makedirs(target_dir)
+ copyfile(pair.generated, pair.target)
+
+
+def FixFiles(config):
+ """Implements the --fix option: overwrites missing or out-of-date files.
+
+ Args:
+ config: the Config object for this test.
+ """
+
+ file_pairs = _GetFilePairs(config)
+ missing_files, stale_files = _GetMissingAndStaleFiles(file_pairs)
+
+ _CopyFiles(stale_files + missing_files)
+
+
+def CheckFilesMatch(config):
+ """Checks whether each target file matches the corresponding generated file.
+
+ Args:
+ config: the Config object for this test.
+
+ Returns:
+ None if everything matches, otherwise a string error message.
+ """
+
+ diff_errors = []
+
+ file_pairs = _GetFilePairs(config)
+ missing_files, stale_files = _GetMissingAndStaleFiles(file_pairs)
+
+ for pair in missing_files:
+ diff_errors.append("File %s does not exist" % pair.target)
+ continue
+
+ for pair in stale_files:
+ diff_errors.append("File %s is out of date" % pair.target)
+
+ if diff_errors:
+ error_msg = "Files out of date!\n\n"
+ error_msg += "To fix run THIS command:\n"
+ error_msg += " bazel-bin/%s/%s --fix\n\n" % (config.package_name,
+ config.target_name)
+ error_msg += "Errors:\n"
+ error_msg += " " + "\n ".join(diff_errors)
+ return error_msg
+ else:
+ return None
diff --git a/tools/upbc b/tools/upbc
deleted file mode 100755
index bd12250..0000000
--- a/tools/upbc
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-BASE=`dirname "$0"`
-export LUA_CPATH="$BASE/../lua/?.so"
-export LUA_PATH="$BASE/?.lua;$BASE/../lua/?.lua"
-lua $BASE/upbc.lua "$@"
diff --git a/tools/upbc.lua b/tools/upbc.lua
index 8ac4f73..adea373 100644
--- a/tools/upbc.lua
+++ b/tools/upbc.lua
@@ -13,11 +13,17 @@ local make_c_api = require "make_c_api"
local upb = require "upb"
local generate_upbdefs = false
+local outdir = "."
-for _, argument in ipairs(arg) do
+i = 1
+while i <= #arg do
+ argument = arg[i]
if argument.sub(argument, 1, 2) == "--" then
if argument == "--generate-upbdefs" then
generate_upbdefs = true
+ elseif argument == "--outdir" then
+ i = i + 1
+ outdir = arg[i]
else
print("Unknown flag: " .. argument)
return 1
@@ -29,6 +35,7 @@ for _, argument in ipairs(arg) do
end
src = argument
end
+ i = i + 1
end
if not src then
@@ -40,6 +47,11 @@ function strip_proto(filename)
return string.gsub(filename, '%.proto$','')
end
+local function open(filename)
+ local full_name = outdir .. "/" .. filename
+ return assert(io.open(full_name, "w"), "couldn't open " .. full_name)
+end
+
-- Open input/output files.
local f = assert(io.open(src, "r"), "couldn't open input file " .. src)
local descriptor = f:read("*all")
@@ -67,8 +79,8 @@ for _, file in ipairs(files) do
if generate_upbdefs then
-- Legacy generated defs.
- local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename)
- local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename)
+ local hfile = open(hfilename)
+ local cfile = open(cfilename)
local happend = dump_cinit.file_appender(hfile)
local cappend = dump_cinit.file_appender(cfile)
@@ -90,8 +102,8 @@ for _, file in ipairs(files) do
print(string.format(" cfilename=%s", cfilename))
end
- local hfile = assert(io.open(hfilename, "w"), "couldn't open " .. hfilename)
- local cfile = assert(io.open(cfilename, "w"), "couldn't open " .. cfilename)
+ local hfile = open(hfilename)
+ local cfile = open(cfilename)
local happend = dump_cinit.file_appender(hfile)
local cappend = dump_cinit.file_appender(cfile)
diff --git a/upb/json/parser.c b/upb/json/parser.c
index 3ae4722..be74366 100644
--- a/upb/json/parser.c
+++ b/upb/json/parser.c
@@ -2366,7 +2366,7 @@ _match:
break;
case 2:
#line 2023 "upb/json/parser.rl"
- { p--; {stack[top++] = cs; cs = 24; goto _again;} }
+ { p--; {stack[top++] = cs; cs = 24;goto _again;} }
break;
case 3:
#line 2027 "upb/json/parser.rl"
@@ -2440,17 +2440,17 @@ _match:
#line 2082 "upb/json/parser.rl"
{
if (is_wellknown_msg(parser, UPB_WELLKNOWN_TIMESTAMP)) {
- {stack[top++] = cs; cs = 48; goto _again;}
+ {stack[top++] = cs; cs = 48;goto _again;}
} else if (is_wellknown_msg(parser, UPB_WELLKNOWN_DURATION)) {
- {stack[top++] = cs; cs = 41; goto _again;}
+ {stack[top++] = cs; cs = 41;goto _again;}
} else {
- {stack[top++] = cs; cs = 33; goto _again;}
+ {stack[top++] = cs; cs = 33;goto _again;}
}
}
break;
case 21:
#line 2093 "upb/json/parser.rl"
- { p--; {stack[top++] = cs; cs = 76; goto _again;} }
+ { p--; {stack[top++] = cs; cs = 76;goto _again;} }
break;
case 22:
#line 2098 "upb/json/parser.rl"
@@ -2538,7 +2538,9 @@ _again:
switch ( *__acts++ ) {
case 0:
#line 2019 "upb/json/parser.rl"
- { p--; {cs = stack[--top]; goto _again;} }
+ { p--; {cs = stack[--top]; if ( p == pe )
+ goto _test_eof;
+goto _again;} }
break;
case 26:
#line 2111 "upb/json/parser.rl"
@@ -2564,7 +2566,7 @@ _again:
#line 2139 "upb/json/parser.rl"
{ end_subobject_full(parser); }
break;
-#line 2568 "upb/json/parser.c"
+#line 2570 "upb/json/parser.c"
}
}
}
@@ -2589,7 +2591,7 @@ error:
return p - buf;
}
-bool end(void *closure, const void *hd) {
+static bool end(void *closure, const void *hd) {
upb_json_parser *parser = closure;
/* Prevent compile warning on unused static constants. */
@@ -2603,11 +2605,7 @@ bool end(void *closure, const void *hd) {
parse(parser, hd, &eof_ch, 0, NULL);
- return parser->current_state >=
-#line 2608 "upb/json/parser.c"
-105
-#line 2202 "upb/json/parser.rl"
-;
+ return parser->current_state >= 105;
}
static void json_parser_reset(upb_json_parser *p) {
@@ -2622,7 +2620,7 @@ static void json_parser_reset(upb_json_parser *p) {
/* Emit Ragel initialization of the parser. */
-#line 2626 "upb/json/parser.c"
+#line 2624 "upb/json/parser.c"
{
cs = json_start;
top = 0;
diff --git a/upb/json/parser.rl b/upb/json/parser.rl
index 29efd09..0d59082 100644
--- a/upb/json/parser.rl
+++ b/upb/json/parser.rl
@@ -2185,7 +2185,7 @@ error:
return p - buf;
}
-bool end(void *closure, const void *hd) {
+static bool end(void *closure, const void *hd) {
upb_json_parser *parser = closure;
/* Prevent compile warning on unused static constants. */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback