# ------------------------------------------------------------------------
# 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 Configuration File, used by the Build.sh script to configure how
# the Library is built, where it is installed, etc.  This file is used in
# combination with the build.sh script included with ActiveMQ-CPP.  The
# values in the conf file can be overridden by a user by creating a user
# specific conf file in the user's home folder named ".activemqcpprc".
# ------------------------------------------------------------------------

# Defines the location where the code is built and the configuration data
# is stored, this location is deleted any time that the clean option is
# passed to the build.sh script so don't set this to a directory like ./src
# AMQCPP_BUILD_DIR="${PWD}/build"

# Defines the install location for the ActiveMQ-CPP library and its headers
# AMQCPP_INSTALL_PREFIX=/usr

# Defines the library directory where the ActiveMQ-CPP library is placed.
# This is normally set to AMQCPP_INSTALL_PREFIX/lib on a 64bit Fedora OS
# for instance set this to AMQCPP_INSTALL_PREFIX/lib64 to place the 64bit
# library in the correct library dir to match the architecture.
# AMQCPP_LIBDIR=/usr/lib64

# Defines the location of the APR distribution you wish to build and link
# against. (Defines the value of --with-apr for the configure script).
# AMQCPP_APR_DIST=/usr

# Defines the location of the APR-Util distribution you wish to build and link
# against. (Defines the value of --with-apr-util for the configure script).
# AMQCPP_APU_DIST=/usr

# Defines the location of the CPPUnit distribution you wish to build and link
# against. (Defines the value of --with-cppunit for the configure script).
# AMQCPP_CPPUNIT_DIST=/usr

# Defines the location of the CPPUnit script cppunit-config is located, this
# script can tell us where everything else for CPPUnit is installed.
# (Defines the value of --with-cppunit-exec for the configure script).
# AMQCPP_CPPUNIT_EXECDIR=/usr

# Disable Shared library builds
# AMQCPP_DISABLE_SHARED=true

# Disable Static library builds
# AMQCPP_DISABLE_STATIC=true
