#-------------------------------------------------------------------------------
#  (C) Altran Praxis Limited
#===============================================================================

################################################################################
# PURPOSE
#-------------------------------------------------------------------------------
# Makefile for Victor
# For Linux, Windows, Solaris or Mac OS X (aka Darwin).
################################################################################

.SUFFIXES:

################################################################################
# BUILD CONFIGURATION
################################################################################

VICTOR_OUTPUT_NAME:=vct

ALT_ERGO:=alt-ergo
VICTOR:=vct

################################################################################
# DETERMINE HOST INFORMATION
################################################################################

# Determine which platform this Makefile is being run on.
TARGET := $(shell uname -s)

# Canonicalize the target string.
ifeq ($(findstring CYGWIN_NT,${TARGET}),CYGWIN_NT)
   TARGET:=Windows
endif

################################################################################
# DYNAMIC DEPENDENCIES
################################################################################

FILES_MAKE:=Makefile

################################################################################
# PLATFORM INDEPENDENT CONFIGURATION
################################################################################

################################################################################
# PLATFORM SPECIFIC CONFIGURATION
################################################################################

# Windows.
ifeq (${TARGET},Windows)
    EXE_EXTN:=.exe
    CPUS:=${NUMBER_OF_PROCESSORS}
    TAR:=tar
endif

# Solaris.
ifeq (${TARGET},SunOS)
    EXE_EXTN:=
    CPUS:=${SPARKCPUS}
    TAR:=gtar
endif

# Linux.
ifeq (${TARGET},Linux)
    EXE_EXTN:=
    CPUS:=${SPARKCPUS}
    TAR:=tar
endif

# Darwin (Mac OS X 10.5 or 10.6, 64-bit).
ifeq (${TARGET},Darwin)
    EXE_EXTN:=
    CPUS:=${SPARKCPUS}
    TAR:=tar
endif

# If CPUS is not explicitly set, default to 1.
ifeq (${CPUS},)
    CPUS:=1
endif

################################################################################
# TARGETS
################################################################################

ALT_ERGO_DIR=$(shell ${TAR} ztf ${ALT_ERGO}-*.tar.gz | head -1)

# Target to build vct and alt-ergo
ifeq (${TARGET},Linux)
all: ${VICTOR}-target ${ALT_ERGO}-target
else
all:
endif

${VICTOR}-target:
	# Don't build Victor in parallel. Missing dependencies in the Makefile.
	make -C ${VICTOR}/src STATIC_GMP=1

${ALT_ERGO}-target: ${ALT_ERGO}
	cd ${ALT_ERGO} && ./configure
	make -j ${CPUS} -C ${ALT_ERGO}

${ALT_ERGO}:
	${TAR} zxvf ${ALT_ERGO}-*.tar.gz
	mv ${ALT_ERGO_DIR} ${ALT_ERGO}

# Build source tarball
# ====================

# S=Source locations. (where the files are found)
S_ALT_ERGO:=${ALT_ERGO}
S_VICTOR:=${VICTOR}

# T=Target locations. (where the files are put)
T_VICTOR:=victor

# Note that a simple copy will copy all the .svn stuff and we do not
# want to include that.
source:
	# Ensure a clean start
	rm -rf ${T_VICTOR}
	# Create directories for source tree.
	mkdir -p ${T_VICTOR}
	# Create the directory structure
	-find ${S_VICTOR} -name .svn -prune -o \( -type d \) -exec mkdir ${T_VICTOR}/'{}' ';'
	# Copy all files
	-find ${S_VICTOR} -name .svn -prune -o \( -type f \) -exec cp '{}' ${T_VICTOR}/'{}' ';'
	cp ${ALT_ERGO}-*.tar.gz ${T_VICTOR}
	cp ${FILES_MAKE} ${T_VICTOR}/
	# Create tar file from source tree.
	${TAR} -cf ${T_VICTOR}.tar ./${T_VICTOR}
	# Delete source tree.
	rm -rf ${T_VICTOR}

clean:
	rm -Rf ${ALT_ERGO}
	-make -C ${VICTOR}/src clean
	rm -f ${VICTOR}/bin/${VICTOR_OUTPUT_NAME}${EXE_EXTN}
