# This file is generated by gyp; do not edit.

TOOLSET := target
TARGET := py_proto
### Generated for copy rule.
$(builddir)/pyproto/google/__init__.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/__init__.py: third_party/protobuf/__init__.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/__init__.py
$(builddir)/pyproto/google/protobuf/__init__.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/__init__.py: third_party/protobuf/python/google/protobuf/__init__.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/__init__.py
$(builddir)/pyproto/google/protobuf/descriptor.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/descriptor.py: third_party/protobuf/python/google/protobuf/descriptor.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/descriptor.py
$(builddir)/pyproto/google/protobuf/message.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/message.py: third_party/protobuf/python/google/protobuf/message.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/message.py
$(builddir)/pyproto/google/protobuf/reflection.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/reflection.py: third_party/protobuf/python/google/protobuf/reflection.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/reflection.py
$(builddir)/pyproto/google/protobuf/service.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/service.py: third_party/protobuf/python/google/protobuf/service.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/service.py
$(builddir)/pyproto/google/protobuf/service_reflection.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/service_reflection.py: third_party/protobuf/python/google/protobuf/service_reflection.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/service_reflection.py
$(builddir)/pyproto/google/protobuf/text_format.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/text_format.py: third_party/protobuf/python/google/protobuf/text_format.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/text_format.py
$(builddir)/pyproto/google/protobuf/descriptor_pb2.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/descriptor_pb2.py: third_party/protobuf/descriptor_pb2.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/descriptor_pb2.py
$(builddir)/pyproto/google/protobuf/internal/__init__.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/__init__.py: third_party/protobuf/python/google/protobuf/internal/__init__.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/__init__.py
$(builddir)/pyproto/google/protobuf/internal/api_implementation.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/api_implementation.py: third_party/protobuf/python/google/protobuf/internal/api_implementation.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/api_implementation.py
$(builddir)/pyproto/google/protobuf/internal/containers.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/containers.py: third_party/protobuf/python/google/protobuf/internal/containers.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/containers.py
$(builddir)/pyproto/google/protobuf/internal/cpp_message.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/cpp_message.py: third_party/protobuf/python/google/protobuf/internal/cpp_message.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/cpp_message.py
$(builddir)/pyproto/google/protobuf/internal/decoder.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/decoder.py: third_party/protobuf/python/google/protobuf/internal/decoder.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/decoder.py
$(builddir)/pyproto/google/protobuf/internal/encoder.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/encoder.py: third_party/protobuf/python/google/protobuf/internal/encoder.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/encoder.py
$(builddir)/pyproto/google/protobuf/internal/generator_test.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/generator_test.py: third_party/protobuf/python/google/protobuf/internal/generator_test.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/generator_test.py
$(builddir)/pyproto/google/protobuf/internal/message_listener.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/message_listener.py: third_party/protobuf/python/google/protobuf/internal/message_listener.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/message_listener.py
$(builddir)/pyproto/google/protobuf/internal/python_message.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/python_message.py: third_party/protobuf/python/google/protobuf/internal/python_message.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/python_message.py
$(builddir)/pyproto/google/protobuf/internal/type_checkers.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/type_checkers.py: third_party/protobuf/python/google/protobuf/internal/type_checkers.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/type_checkers.py
$(builddir)/pyproto/google/protobuf/internal/wire_format.py: TOOLSET := $(TOOLSET)
$(builddir)/pyproto/google/protobuf/internal/wire_format.py: third_party/protobuf/python/google/protobuf/internal/wire_format.py FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/pyproto/google/protobuf/internal/wire_format.py
py_proto_copies = $(builddir)/pyproto/google/__init__.py $(builddir)/pyproto/google/protobuf/__init__.py $(builddir)/pyproto/google/protobuf/descriptor.py $(builddir)/pyproto/google/protobuf/message.py $(builddir)/pyproto/google/protobuf/reflection.py $(builddir)/pyproto/google/protobuf/service.py $(builddir)/pyproto/google/protobuf/service_reflection.py $(builddir)/pyproto/google/protobuf/text_format.py $(builddir)/pyproto/google/protobuf/descriptor_pb2.py $(builddir)/pyproto/google/protobuf/internal/__init__.py $(builddir)/pyproto/google/protobuf/internal/api_implementation.py $(builddir)/pyproto/google/protobuf/internal/containers.py $(builddir)/pyproto/google/protobuf/internal/cpp_message.py $(builddir)/pyproto/google/protobuf/internal/decoder.py $(builddir)/pyproto/google/protobuf/internal/encoder.py $(builddir)/pyproto/google/protobuf/internal/generator_test.py $(builddir)/pyproto/google/protobuf/internal/message_listener.py $(builddir)/pyproto/google/protobuf/internal/python_message.py $(builddir)/pyproto/google/protobuf/internal/type_checkers.py $(builddir)/pyproto/google/protobuf/internal/wire_format.py

### Rules for final target.
# Build our special outputs first.
$(obj).target/third_party/protobuf/py_proto.stamp: | $(py_proto_copies)

# Preserve order dependency of special output on deps.
$(py_proto_copies): | 

$(obj).target/third_party/protobuf/py_proto.stamp: TOOLSET := $(TOOLSET)
$(obj).target/third_party/protobuf/py_proto.stamp:  FORCE_DO_CMD
	$(call do_cmd,touch)

all_deps += $(obj).target/third_party/protobuf/py_proto.stamp
# Add target alias
.PHONY: py_proto
py_proto: $(obj).target/third_party/protobuf/py_proto.stamp

