#
# $Id: Makefile,v 1.8 2005/04/12 18:51:12 bakerj Exp $
#
#****************************************************************************************//
# Copyright (c) 2005, The MITRE Corporation
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
#     * Redistributions of source code must retain the above copyright notice, this list
#       of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright notice, this
#       list of conditions and the following disclaimer in the documentation and/or other
#       materials provided with the distribution.
#     * Neither the name of The MITRE Corporation nor the names of its contributors may be
#       used to endorse or promote products derived from this software without specific
#       prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#****************************************************************************************//

# output directories
OUTDIR = ./Release
BUILDDIR = ${OUTDIR}/obj

# source directories
SRCDIR = ../../src
REDHATDIR = ${SRCDIR}/redhat
PROBEDIR = ${REDHATDIR}/probes
CURRENTDIR = ../project/redhat

INCDIRS = -I/usr/include -I$(REDHATDIR) -I${SRCDIR} -I${PROBEDIR} -I/usr/include/pcre

EXECUTABLE = $(OUTDIR)/ovaldi

# The location of the c++ compiler.
CXX = /usr/bin/g++

# General options that should be used by g++.
CPPFLAGS = -Wall -O

LIBDIR = -L/usr/lib

# What libraries do we need?
LIBS = -lxerces-c -lxalan-c -lpcre -lrpm

# Determine what platform the source is being build on
PLATFORM = $(shell uname)

# What object code are we expecting?
OBJS = \
	Main.obj \
	AbsFileFinder.obj \
	AbsXmlFileContentData.obj \
	AbsXmlFileContentProbe.obj \
	AnalysisEngine.obj \
	Analyzer.obj \
	AnalyzerFactory.obj \
	Common.obj \
	CompoundTestAnalyzer.obj \
	DataCollector.obj \
	DefinitionAnalyzer.obj \
	Exception.obj \
	FileData.obj \
	FileProbe.obj \
	InetListeningServersData.obj \
	InetListeningServersProbe.obj \
	Log.obj \
	MD5.obj \
	OvalDataCollector.obj \
	OvalResultXml.obj \
	Probe.obj \
	ProbeData.obj \
	ProcessData.obj \
	ProcessProbe.obj \
	REGEX.obj \
	RPMInfoData.obj \
	RPMInfoProbe.obj \
	RPMVersionCompareData.obj \
	RPMVersionCompareProbe.obj \
	SimpleTestAnalyzer.obj \
	SystemInfoData.obj \
	SystemInfoProbe.obj \
	UnameData.obj \
	UnameProbe.obj \
	UnknownTestAnalyzer.obj \
	Version.obj \
	XmlCommon.obj \
	FileFinder.obj \
	XmlFileContentProbe.obj \
	XmlFileContentData.obj \
	XmlProcessor.obj \

REL_OBJS = \
	$(BUILDDIR)/Main.obj \
	$(BUILDDIR)/AbsFileFinder.obj \
	$(BUILDDIR)/AbsXmlFileContentData.obj \
	$(BUILDDIR)/AbsXmlFileContentProbe.obj \
	$(BUILDDIR)/AnalysisEngine.obj \
	$(BUILDDIR)/Analyzer.obj \
	$(BUILDDIR)/AnalyzerFactory.obj \
	$(BUILDDIR)/Common.obj \
	$(BUILDDIR)/CompoundTestAnalyzer.obj \
	$(BUILDDIR)/DataCollector.obj \
	$(BUILDDIR)/DefinitionAnalyzer.obj \
	$(BUILDDIR)/Exception.obj \
	$(BUILDDIR)/FileData.obj \
	$(BUILDDIR)/FileProbe.obj \
	$(BUILDDIR)/InetListeningServersData.obj \
	$(BUILDDIR)/InetListeningServersProbe.obj \
	$(BUILDDIR)/Log.obj \
	$(BUILDDIR)/MD5.obj \
	$(BUILDDIR)/OvalDataCollector.obj \
	$(BUILDDIR)/OvalResultXml.obj \
	$(BUILDDIR)/Probe.obj \
	$(BUILDDIR)/ProbeData.obj \
	$(BUILDDIR)/ProcessData.obj \
	$(BUILDDIR)/ProcessProbe.obj \
	$(BUILDDIR)/REGEX.obj \
	$(BUILDDIR)/RPMInfoData.obj \
	$(BUILDDIR)/RPMInfoProbe.obj \
	$(BUILDDIR)/RPMVersionCompareData.obj \
	$(BUILDDIR)/RPMVersionCompareProbe.obj \
	$(BUILDDIR)/SimpleTestAnalyzer.obj \
	$(BUILDDIR)/SystemInfoData.obj \
	$(BUILDDIR)/SystemInfoProbe.obj \
	$(BUILDDIR)/UnameData.obj \
	$(BUILDDIR)/UnameProbe.obj \
	$(BUILDDIR)/UnknownTestAnalyzer.obj \
	$(BUILDDIR)/Version.obj \
	$(BUILDDIR)/XmlCommon.obj \
	$(BUILDDIR)/FileFinder.obj \
	$(BUILDDIR)/XmlFileContentProbe.obj \
	$(BUILDDIR)/XmlFileContentData.obj \
	$(BUILDDIR)/XmlProcessor.obj \

# Search the output directory for object files
vpath %.obj $(BUILDDIR)
vpath %.cpp $(SRCDIR)
vpath %.cpp $(REDHATDIR)
vpath %.cpp $(PROBEDIR)


# *******************************************************************
#                      Suffix Translations
# *******************************************************************

.SUFFIXES:
.SUFFIXES: .cpp .obj

.cpp.obj:
	$(CXX) -c $(CPPFLAGS) -D$(PLATFORM) $(INCDIRS) -o $(BUILDDIR)/$@ $^

# *******************************************************************
#                            Rules
# *******************************************************************

all: update set-platform

set-platform:
	@if [ $(PLATFORM) = Linux ]; then \
		make redhat; \
	fi;

	@if [ $(PLATFORM) = SunOS ]; then \
		make sunos; \
	fi;

redhat: PLATFORM = REDHAT
redhat: build


sunos: PLATFORM = SUNOS
sunos: build

update:
#	-rm $(BUILDDIR)/Version.obj
#	cd ${SRCDIR}; ls; ./updateversion.pl; cd ${CURRENTDIR}

build : $(OBJS)
	$(CXX) $(CPPFLAGS) -D$(PLATFORM) $(REL_OBJS) $(LIBDIR) $(LIBS) -o $(EXECUTABLE)

clean :
	-rm $(REL_OBJS)
	@if [ $(PLATFORM) = Linux ]; then \
		make clean-linux; \
	fi;

	@if [ $(PLATFORM) = SunOS ]; then \
		make clean-sunos; \
	fi;

clean-linux:
	-rm $(OUTDIR)/ovaldi

clean-sunos:
	-rm $(OUTDIR)/ovaldi

debug: CPPFLAGS = -Wall -O -static-libgcc -ggdb
debug: all

