#
# 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 = . test/ThriftTest

THRIFTCODE= \
            src/Collections/THashSet.cs \
            src/Collections/TCollections.cs \
            src/Properties/AssemblyInfo.cs \
            src/Protocol/TAbstractBase.cs \
            src/Protocol/TBase.cs \
            src/Protocol/TBase64Utils.cs \
            src/Protocol/TJSONProtocol.cs \
            src/Protocol/TProtocolException.cs \
            src/Protocol/TProtocolFactory.cs \
            src/Protocol/TList.cs \
            src/Protocol/TSet.cs \
            src/Protocol/TMap.cs \
            src/Protocol/TProtocolUtil.cs \
            src/Protocol/TMessageType.cs \
            src/Protocol/TProtocol.cs \
            src/Protocol/TProtocolDecorator.cs \
            src/Protocol/TMultiplexedProtocol.cs \
            src/Protocol/TMultiplexedProcessor.cs \
            src/Protocol/TType.cs \
            src/Protocol/TField.cs \
            src/Protocol/TMessage.cs \
            src/Protocol/TStruct.cs \
            src/Protocol/TBinaryProtocol.cs \
            src/Protocol/TCompactProtocol.cs \
            src/Server/TThreadedServer.cs \
            src/Server/TThreadPoolServer.cs \
            src/Server/TSimpleServer.cs \
            src/Server/TServer.cs \
            src/Server/TServerEventHandler.cs \
            src/Transport/TBufferedTransport.cs \
            src/Transport/TTransport.cs \
            src/Transport/TSocket.cs \
            src/Transport/TTransportException.cs \
            src/Transport/TStreamTransport.cs \
            src/Transport/TFramedTransport.cs \
            src/Transport/TServerTransport.cs \
            src/Transport/TServerSocket.cs \
            src/Transport/TTransportFactory.cs \
            src/Transport/THttpClient.cs \
            src/Transport/THttpHandler.cs \
            src/Transport/TMemoryBuffer.cs \
            src/Transport/TNamedPipeClientTransport.cs \
            src/Transport/TNamedPipeServerTransport.cs \
            src/Transport/TTLSSocket.cs \
            src/Transport/TTLSServerSocket.cs \
            src/TProcessor.cs \
            src/TException.cs \
            src/TApplicationException.cs

if MONO_MCS
CSC=mcs
else
CSC=gmcs
endif

if NET_2_0
MONO_DEFINES=/d:NET_2_0
endif

all-local: Thrift.dll

Thrift.dll: $(THRIFTCODE)
	$(CSC) $(THRIFTCODE) /out:Thrift.dll /target:library /reference:System.Web $(MONO_DEFINES)

clean-local:
	$(RM) Thrift.dll

precross:
	$(MAKE) -C test/ThriftTest precross

# run csharp tests?
# check:
# 	cd test/ThriftTest && ./maketest.sh
# 	cd test/Multiplex && ./maketest.sh

EXTRA_DIST = \
             $(THRIFTCODE) \
             ThriftMSBuildTask \
             src/Thrift.csproj \
             src/Thrift.sln \
             src/Thrift.WP7.csproj \
             src/Properties/AssemblyInfo.WP7.cs \
             src/Transport/TSilverlightSocket.cs \
             test \
             coding_standards.md \
             README.md
