#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

SUBDIRS = . 

all-local:
	$(DOTNETCORE) build

check-local:
	$(DOTNETCORE) test Tests/Thrift.Tests/Thrift.Tests.csproj
	${DOTNETCORE} test Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj

clean-local:
	$(RM) -r Thrift/bin
	$(RM) -r Thrift/obj

EXTRA_DIST = \
	README.md \
	Tests/Thrift.IntegrationTests/Protocols \
	Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj \
	Tests/Thrift.PublicInterfaces.Compile.Tests/Thrift.PublicInterfaces.Compile.Tests.csproj \
	Tests/Thrift.PublicInterfaces.Compile.Tests/Properties/AssemblyInfo.cs \
	Tests/Thrift.PublicInterfaces.Compile.Tests/CassandraTest.thrift \
	Tests/Thrift.Tests/Thrift.Tests.csproj \
	Tests/Thrift.Tests/Protocols \
	Tests/Thrift.Tests/Collections \
	Thrift/TApplicationException.cs \
	Thrift/TBaseClient.cs \
	Thrift/TException.cs \
	Thrift/Thrift.csproj \
	Thrift/Collections \
	Thrift/Processor \
	Thrift/Properties \
	Thrift/Protocol \
	Thrift/Server \
	Thrift/Transport \
	Thrift.sln \
	build.cmd \
	build.sh \
	runtests.cmd \
	runtests.sh
	