#
# 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.
#

if GOVERSION_LT_17
COMPILER_EXTRAFLAG=":legacy_context"
endif

THRIFT = $(top_builddir)/compiler/cpp/thrift

gen-go/tutorial/calculator.go gen-go/shared/shared_service.go: $(top_srcdir)/tutorial/tutorial.thrift
	$(THRIFT) --gen go$(COMPILER_EXTRAFLAG) -r $<

all-local: gen-go/tutorial/calculator.go

check: src/git.apache.org/thrift.git/lib/go/thrift thirdparty-dep
	$(THRIFT) -r --gen go$(COMPILER_EXTRAFLAG) $(top_srcdir)/tutorial/tutorial.thrift
	cp -r gen-go/* src/
	GOPATH=`pwd` $(GO) build -o go-tutorial ./src
	GOPATH=`pwd` $(GO) build -o calculator-remote src/tutorial/calculator-remote/calculator-remote.go

src/git.apache.org/thrift.git/lib/go/thrift:
	mkdir -p src/git.apache.org/thrift.git/lib/go
	ln -sf $(realpath $(top_srcdir)/lib/go/thrift) src/git.apache.org/thrift.git/lib/go/thrift

thirdparty-dep:
	mkdir -p src/golang.org/x/net
	GOPATH=`pwd`/gopath $(GO) get golang.org/x/net/context
	ln -sf `pwd`/gopath/src/golang.org/x/net/context src/golang.org/x/net/context

tutorialserver: all
	GOPATH=`pwd` $(GO) run src/*.go -server=true

tutorialclient: all
	GOPATH=`pwd` $(GO) run src/*.go

tutorialsecureserver: all
	GOPATH=`pwd` $(GO) run src/*.go -server=true -secure=true

tutorialsecureclient: all
	GOPATH=`pwd` $(GO) run src/*.go -secure=true

clean-local:
	$(RM) -r gen-* src/shared src/tutorial src/git.apache.org go-tutorial calculator-remote

EXTRA_DIST = \
	src/client.go \
	src/handler.go \
	src/server.go \
	src/main.go \
	server.crt \
	server.key

