#
# 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.
#
#
#
# $Log$
# Revision 1.4  2004/09/08 13:56:35  peiyongz
# Apache License Version 2.0
#
# Revision 1.3  2004/07/09 16:18:08  peiyongz
# Build on HP-Itanium, aCC A.05.52
#
# Revision 1.2  2002/07/26 16:49:28  tng
# [Bug 2681] Can't build with gcc/g++ not named 'gcc'/'g++'.  Patch from Jonathan Lennox.
#
# Revision 1.1.1.1  2002/02/01 22:22:23  peiyongz
# sane_include
#
# Revision 1.3  2001/07/06 17:12:01  tng
# Automatic build of single-threaded library.  By Martin Kalen.
#
# Revision 1.2  2001/06/27 17:08:52  tng
# [Bug 1147] Headers install in wrong directory.  By Murray Cumming.
#
# Revision 1.1  2000/03/20 23:48:51  rahulj
# Added Socket based NetAccessor. This will enable one to
# use HTTP URL's for system id's. Default build options do
# not use this NetAccessor. Specify the '-n socket' option
# to 'runConfigure' to configure Xerces-C to use this new
# feature. The code works under Solaris 2.6, Linux, AIX
# and HPUX 11 with aCC.
# Todo's: enable proper error handling.
#
#

PLATFORM = @platform@
CC  = @cc@
CXX = @cxx@
CXXVER = @cxxver@
GCC = @GCC@
GXX = @GXX@
CXXFLAGS = @cxxflags@
CFLAGS = @cflags@
PREFIX = @prefix@
PREFIX_INCLUDE = @prefix_include@
LDFLAGS = @ldflags@
LIBS = @libs@
OSVER = @osver@
USELIBWWW = @uselibwww@
MESSAGELOADER = @messageloader@
TRANSCODER = @transcoder@
NETACCESSOR = @netaccessor@
THREADS = @threads@
LIBTYPE = @libtype@
ARCH = @host_cpu@

MODULE = util
SUBMODULE = NetAccessors/Socket

include ../../../Makefile.incl

CPP_PUBHEADERS = SocketNetAccessor.hpp \
                 UnixHTTPURLInputStream.hpp

CPP_OBJECTS = SocketNetAccessor.$(TO) \
              UnixHTTPURLInputStream.$(TO)

include ../../Makefile.util.submodule
