# Makefile for partial libqnet
#
# ***************************************************************************
# This Makefile has been modified to only build the library routines are
# required for building glp and pslice.  This avoids any potential problems
# with compiling SharedLibrary.cc which is potentially the most non-portable
# part of the library.
# ***************************************************************************
#
# Copyright (c) 2006-2009 Department of Mathematics and Computer Science
# Gordon College, 255 Grapevine Road, Wenham, MA 01984
#
# This Makefile has been tested and works with GNU make. 

# Location variables (often overridden on command line)

PREFIX = /usr/local
INCDIR  = $(PREFIX)/include
LIBDIR  = $(PREFIX)/lib$(LIBARCH)# no whitespace should preceed this comment
MANDIR  = $(PREFIX)/man

# Determine if we are on a 64 bit machine - if not then assume 32 bit

PLATFORM := $(shell uname -i)
ifeq ($(PLATFORM),x86_64)
ARCH	= -m64
LIBARCH	= 64
else
ARCH	= -m32
LIBARCH	=#this is intentionally left blank, comment should follow = symbol
endif

# Define location of libqnet

INCDIRS	= -I.
LIBDIRS	= -L.

# Compiler and linker flags

CXX	= g++
OPTFLAGS= -O3
DBGFLAGS= -Wall -g
CXXFLAGS= $(ARCH) $(OPTFLAGS) $(DBGFLAGS) $(INCDIRS)
LDFLAGS	= $(ARCH) $(OPTFLAGS) $(DBGFLAGS) $(LIBDIRS)

# Project files

DEPEND	= .depend
#HDRS	= qnet.h dynArray.h readTagged.h MultiIndex.h Coefficients.h \
#		SPNetwork.h TaggedValues.h SharedLibrary.h ALPSdata.h \
#		CommandOptions.h StatusBar.h Basis.h
HDRS	= qnet.h dynArray.h MultiIndex.h SPNetwork.h TaggedValues.h \
		CommandOptions.h 
#SRCS	= readTagged.cc dynArray.cc makeArrays.cc policyIO.cc valueIO.cc \
#		qnetUtility.cc MultiIndex.cc Coefficients.cc SPNetwork.cc \
#		TaggedValues.cc SharedLibrary.cc ALPSdata.cc \
#		CommandOptions.cc StatusBar.cc Basis.cc
SRCS	= dynArray.cc makeArrays.cc policyIO.cc valueIO.cc \
		qnetUtility.cc MultiIndex.cc SPNetwork.cc \
		TaggedValues.cc CommandOptions.cc

OBJS	= $(SRCS:.cc=.o)
LIB	= libqnet.a

# Manual pages

MAN3DIR	= $(MANDIR)/man3
MAN5DIR	= $(MANDIR)/man5

M3PAGES	= getPolicyFileInfo.3 getValueFileInfo.3 readPolicyFile.3 \
		writePolicyFile.3 readValueFile.3 writeValueFile.3 \
		qnetError.3 readTagged.3 MultiIndex.3 TaggedValues.3 \
		ALPSdata.3 CommandOptions.3

PAGE1	= dynArray.3
SUB1	= allocateArray.3 allocateArrayV.3 deallocateArray.3 deallocateArrayV.3

PAGE2	= makeArrays.3
SUB2	= destroyPolicyArray.3 destroyValueArray.3 makePolicyArray.3 \
		makeValueArray.3

MAN3	= $(M3PAGES) $(PAGE1) $(SUB1) $(PAGE2) $(SUB2)
MAN5	= ALPSdata.5 policyFormat.5 SPNetwork.5 userBasis.5 valueFormat.5

# Targets

$(LIB):		$(OBJS)
	$(AR) r $@ $(OBJS)

doc:
	cd man3; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..
	cd man5; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..

install:	install-lib install-man

uninstall:	uninstall-lib uninstall-man

install-lib:	$(LIB) $(HDRS)
	if [ ! -d $(LIBDIR) ] ; then mkdir -p $(LIBDIR) ; fi
	if [ ! -d $(INCDIR) ] ; then mkdir -p $(INCDIR) ; fi
	install -m 644 $(LIB) $(LIBDIR)/$(LIB)
	for f in $(HDRS) ; do install -m 644 $$f $(INCDIR)/$$f ; done

uninstall-lib:
	$(RM) $(LIBDIR)/$(LIB)
	for f in $(HDRS); do $(RM) $(INCDIR)/$$f ; done

install-man:
	if [ ! -d $(MAN3DIR) ] ; then mkdir -p $(MAN3DIR) ; fi
	if [ ! -d $(MAN5DIR) ] ; then mkdir -p $(MAN5DIR) ; fi
	cd man3; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" SECTDIR="$(MAN3DIR)" $@; cd ..
	cd man5; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" SECTDIR="$(MAN5DIR)" $@; cd ..

uninstall-man:
	cd man3; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" SECTDIR="$(MAN3DIR)" $@; cd ..
	cd man5; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" SECTDIR="$(MAN5DIR)" $@; cd ..

clean:
	$(RM) $(DEPEND) $(OBJS)
	cd man3; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..
	cd man5; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..

clobber:
	$(RM) $(DEPEND) $(OBJS) $(LIB)
	cd man3; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..
	cd man5; $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" $@; cd ..

depend:
	/bin/rm -f $(DEPEND)
	$(MAKE) $(DEPEND)

$(DEPEND):	$(SRCS) $(HDRS) Makefile
	$(CXX) $(CXXFLAGS) -M $(SRCS) > $(DEPEND)

-include	$(DEPEND)
