#
#    config.mk.in.
#
#    Copyright (C) 2009, Cisco Systems Inc.
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Garrett Cooper, July 2009
#

# See this page for more info about LEX*:
# http://www.gnu.org/software/hello/manual/autoconf/Particular-Programs.html

# Application specifying variables. You should never have to change these.
AR			:= ar
CC			:= gcc
LEX			:= flex
RANLIB			:= ranlib
STRIP			:= strip
YACC			:= bison -y

#JAR			:= jar
#JAVAC			:= javac

#AIO_LIBS		:= -laio
#CAP_LIBS		:= -lcap
#ACL_LIBS		:= -lacl
#CRYPTO_LIBS		:= -lcrypto
#LEXLIB			:= -lfl
#NUMA_CPPFLAGS		:= -DNUMA_VERSION1_COMPATIBILITY
#NUMA_LIBS		:= -lnuma
#SELINUX_LIBS		:= -lselinux

prefix			:= /opt/ltp

datarootdir		:= ${prefix}/share
includedir		:= ${prefix}/include
exec_prefix		:= ${prefix}
bindir			:= ${exec_prefix}/bin
libdir			:= ${exec_prefix}/lib
mandir			:= ${datarootdir}/man

CPPFLAGS		:=
CFLAGS			:= -g -O2
LDLIBS			:=
LDFLAGS			:=

DEBUG_CFLAGS		?= -g
DEBUG_CXXFLAGS		?= $(DEBUG_CFLAGS)

# Please see README.mk-devel about -fstrict-aliasing.
OPT_CFLAGS		?= -O2 -fno-strict-aliasing -pipe
OPT_CXXFLAGS		?= $(OPT_CFLAGS)

WCFLAGS			?= -Wall
WCXXFLAGS		?= $(WCFLAGS)

LDFLAGS			+= $(WLDFLAGS)
CFLAGS			+= $(DEBUG_CFLAGS) $(OPT_CFLAGS) $(WCFLAGS)
CXXFLAGS		+= $(DEBUG_CXXFLAGS) $(OPT_CXXFLAGS) $(WCXXFLAGS)

LINUX_VERSION		:=
LINUX_DIR		:=
LINUX_VERSION_MAJOR	:=
LINUX_VERSION_PATCH	:=
WITH_MODULES		:= no

export datarootdir includedir libdir mandir prefix
