# 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.
prgbindir = $(prefix)/bin/samples
prgbin_PROGRAMS = test_echo_string test_echo_struct test_echo_string_array
samplesdir = $(prefix)/samples/client/WSDLInteropTestDocLitService

test_echo_string_SOURCES = \
  axis2_ArrayOfstring_literal.c axis2_echoStringArray.c axis2_echoStringArrayResponse.c \
  axis2_echoString.c axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \
  axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c axis2_WSDLInteropTestDocLitService_stub.c \
  test_echo_string.c
test_echo_string_LDADD = \
           $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \
            -laxis2_wsdl -laxis2_engine -laxis2_parser -laxis2_http_sender \
            -laxis2_http_receiver \
           $(GUTHTHILA_LIBS)

test_echo_struct_SOURCES = \
  axis2_ArrayOfstring_literal.c axis2_echoStringArray.c \
  axis2_echoStringArrayResponse.c axis2_echoString.c \
  axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \
  axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c \
  axis2_WSDLInteropTestDocLitService_stub.c test_echo_struct.c 
test_echo_struct_LDADD = \
           $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \
            -laxis2_wsdl -laxis2_engine -laxis2_parser -laxis2_http_sender \
            -laxis2_http_receiver \
           $(GUTHTHILA_LIBS)

test_echo_string_array_SOURCES = \
  axis2_ArrayOfstring_literal.c axis2_echoStringArray.c \
  axis2_echoStringArrayResponse.c axis2_echoString.c \
  axis2_echoStringResponse.c axis2_echoStruct.c axis2_echoStructResponse.c \
  axis2_echoVoid.c axis2_echoVoidResponse.c axis2_SOAPStruct.c \
  axis2_WSDLInteropTestDocLitService_stub.c test_echo_string_array.c 
test_echo_string_array_LDADD = \
           $(LDFLAGS) -L$(AXIS2C_HOME)/lib -laxutil -laxis2_axiom \
            -laxis2_wsdl -laxis2_engine -laxis2_parser -laxis2_http_sender \
            -laxis2_http_receiver \
           $(GUTHTHILA_LIBS)

INCLUDES = -I$(AXIS2C_HOME)/include \
               @UTILINC@ \
               @AXIOMINC@
