#  Authors     [Robert Meolic (meolic@uni-mb.si)]
#  Revision    [$Revision: 76 $]
#  Date        [$Date: 2013-04-26 14:26:09 +0200 (pet, 26 apr 2013) $]
#
#  Copyright   [This file is part of EST (Efficient Symbolic Tools).
#               Copyright (C) 2003, 2013
#               UM-FERI, Smetanova ulica 17, SI-2000 Maribor, Slovenia
#
#               EST 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.
#
#               EST 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.]

RM = rm -f
CP = cp
MKDIR = mkdir -p
CD = cd

ECHO = echo
DATE = date -R
LS = perl -e 'print localtime((stat($$ARGV[0]))[9]) . " $$ARGV[0]\n";'
LINECMD = sed -e 's/\(...\) \(...\) \(..\) \(.*\) \(.*\) \(.*\)/\* \3 \2 \5 \4 \6/'

all: nop
mish: bindir about start bdd biddylocal ok
lib: bindir header $(BINDIR)/bddMain.o $(BINDIR)/bddUtil.o $(BINDIR)/bddOutput.o $(BINDIR)/bddRel.o

# -----------------------------------------------------------------------
# testing

local: mish
	@$(CP) bddDialog.tcl $(BINDIR)

# -----------------------------------------------------------------------
# help

nop:
	@echo Please, use \"make -f Makefile.xxx\", where xxx is your OS.

start:
	@echo "----------------------------"
	@echo "| Building Bdd package ... |"
	@echo "----------------------------"

ok:
	@echo "-------------------------------------"
	@echo "| Bdd package successfully compiled |"
	@echo "-------------------------------------"

# -----------------------------------------------------------------------
# create a directory for binary files

bindir:
	@$(MKDIR) $(BINDIR)

# -----------------------------------------------------------------------
# create information about the package

about:
	@$(ECHO) "Builded on \c" > $(BINDIR)/bdd.about
	@$(DATE) >> $(BINDIR)/bdd.about
	@$(LS) bdd.h | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddInt.h | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddMain.c | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddRel.c | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddUtil.c | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddOutput.c | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddTcl.c | $(LINECMD) >> $(BINDIR)/bdd.about
	@$(LS) bddDialog.tcl | $(LINECMD) >> $(BINDIR)/bdd.about

# -----------------------------------------------------------------------
# copy header files

header:
	@$(CP) bdd.h $(BINDIR)

# -----------------------------------------------------------------------
# make objects
# -----------------------------------------------------------------------

$(BINDIR)/bddMain.o: bddMain.c bdd.h bddInt.h
	$(CC) -I../../../biddy/bin -I"$(BDDPATH)" -o $(BINDIR)/bddMain.o -c bddMain.c

$(BINDIR)/bddUtil.o: bddUtil.c bdd.h bddInt.h
	$(CC) -o $(BINDIR)/bddUtil.o -c bddUtil.c

$(BINDIR)/bddOutput.o: bddOutput.c bdd.h bddInt.h
	$(CC) -o $(BINDIR)/bddOutput.o -c bddOutput.c

$(BINDIR)/bddRel.o: bddRel.c bdd.h bddInt.h
	$(CC) -o $(BINDIR)/bddRel.o -c bddRel.c

# -----------------------------------------------------------------------
# make tcl extension
# -----------------------------------------------------------------------

$(BINDIR)/bddTcl.o: bddTcl.c bdd.h bddInt.h bddStubInit.c bddStubLib.c
	$(CC) -o $(BINDIR)/bddTcl.o -c bddTcl.c -D'USECONST=$(USECONST)'
	$(CC) -o $(BINDIR)/bddStubInit.o -c bddStubInit.c
	$(CC) -o $(BINDIR)/bddStubLib.o -c bddStubLib.c

bdd: $(BINDIR)/bddMain.o $(BINDIR)/bddUtil.o $(BINDIR)/bddOutput.o $(BINDIR)/bddRel.o $(BINDIR)/bddTcl.o
	$(CD) $(BINDIR); $(LN) \
		bddTcl.o \
		bddMain.o \
		bddUtil.o \
		bddOutput.o \
		bddRel.o \
		bddStubInit.o \
		-L../../biddy/bin -L"$(BDDPATH)" -lbiddy $(ESTLIB) $(TCLLIB)
	$(CD) $(BINDIR); $(AR) libbddstub.a bddStubLib.o

# -----------------------------------------------------------------------
# On MS Windows and MacOS distribute all depended DLLs/dylibs
# -----------------------------------------------------------------------

biddylocal:
	@if [ -f "$(BDDPATH)"/biddy.dll ]; then $(CP) "$(BDDPATH)"/biddy.dll $(BINDIR); fi
	@if [ -f "$(BDDPATH)"/libbiddy.dylib ]; then $(CP) "$(BDDPATH)"/libbiddy.dylib $(BINDIR); fi
