# 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.
#############################################################################
#############################################################################
### Build Details ###
#############################################################################
#
# enables https support 
ENABLE_SSL = 0          
#
# build libcurl transport 
ENABLE_LIBCURL = 0
#
# build axis2 with Libxml2 Parser. Axis2/C will be built with embeded guththila # parser by Default. 
ENABLE_LIBXML2=0
#
# build tcp server in addition to http server
WITH_TCP = 1
#
# build with archive based deployment
WITH_ARCHIVE = 0
#
# enable NTLM authentication support.
ENABLE_NTLM_WITH_HEIMDAL = 0
#
ENABLE_NTLM_WITH_LIBNTLM = 0
#
#############################################################################
### Dependant Binary Locations (Required) ###
#############################################################################
#
# libxml2 binary location ( axis2c is built with libxml2 )
LIBXML2_BIN_DIR = E:\libxml2-2.6.30.win32
#
# iconv binary location
ICONV_BIN_DIR = E:\iconv-1.9.2.win32
#
# zlib binary location
ZLIB_BIN_DIR= E:\zlib-1.2.3.win32
#
#############################################################################
### Dependant Binary Locations (Optional) ###
#############################################################################
#
# openssl  binary location
# required if ENABLE_SSL = 1
OPENSSL_BIN_DIR = D:\OpenSSL
#
# libcurl binary location, only required if libcurl transport is enabled
LIBCURL_BIN_DIR = E:\libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3
#
#Heimdal
HEIMDAL_BIN_DIR=D:\NTLM\heimdal-bin
#
LIBNTLM_BIN_DIR=D:\libntlm
#
#############################################################################
### Apache Server module (required when building Axis2/C Apache Module) ###
#############################################################################
#
# apache binary location
APACHE_BIN_DIR = "D:\Apache2.2"
#
# apache 2 server family
# To use apache 2.2 family, use  APACHE_VERSION_IS_2_0_X = 0
APACHE_VERSION_2_0_X = 0
#
#
#############################################################################
### Compiler Options ###
#############################################################################
#
# C runtime LIBRARY OPTION ( Use /MD or /MT )
CRUNTIME = /MT 
#
# Embed Manifest Files
EMBED_MANIFEST = 0
#
# debug symbols
# To build with debug symbols use DEBUG = 1
DEBUG = 1
#
