#
# Makefile 
#
INSTALL = install
RM      = rm -f
CXX	= g++ -ffor-scope 
CXXFLAGS = -O
LD      = $(CXX)
LOADLIBES = -lm
SYSTEM  = $(shell uname -s | tr '[a-z]' '[A-Z]' | tr -d '_ -/')
VERSION = $(shell uname -r)
MARCH	= $(shell uname -m | tr '[A-Z]' '[a-z]')
MAJOR   = $(firstword $(subst ., ,$(VERSION)))
SOCKIO  = $(shell /bin/ls /usr/include/sys/sockio.h 2>/dev/null)
EXTRA_OBJ = basic.o
EXTRA_INC = version.h


ifndef ${prefix}
  prefix = $(PEGASUS_HOME)
endif

ifndef ${datadir}
  datadir = $(prefix)/share 
endif

ifeq (DARWIN,${SYSTEM})
  CXXFLAGS += -DMACHINE_SPECIFIC=darwin
  EXTRA_OBJ += darwin.o
  EXTRA_INC += darwin.hh
else
  ifeq (LINUX,${SYSTEM})
    CXXFLAGS = -Wall -O2 -ggdb -DMACHINE_SPECIFIC=linux
    EXTRA_OBJ += linux.o
    EXTRA_INC += linux.hh
    CFLAGS += $(shell getconf LFS_CFLAGS 2>>/dev/null)
    LDFLAGS += $(shell getconf LFS_LDFLAGS 2>>/dev/null)
  else
    $(error Unsupported system: $(SYSTEM))
  endif
endif

CXXFLAGS += -D${SYSTEM} -DMAJOR=${MAJOR}
ifneq (,${SOCKIO})
  CXXFLAGS += -DHAS_SYS_SOCKIO=1
endif

%.o : %.cc
	$(CXX) $(CXXFLAGS) $< -c -o $@

all: pegasus-keg

pegasus-keg: pegasus-keg.o $(EXTRA_OBJ)
	$(LD) $(LDFLAGS) $^ -o $@ $(LOADLIBES)

pegasus-keg.o: pegasus-keg.cc $(EXTRA_INC)
basic.o: basic.cc basic.hh
darwin.o: darwin.cc darwin.hh basic.hh
linux.o: linux.cc linux.hh basic.hh

version.h:
	$(CURDIR)/genversion.sh > $(CURDIR)/version.h

install: pegasus-keg
	$(INSTALL) -m 0755 pegasus-keg $(prefix)/bin

test check: pegasus-keg
	@./pegasus-keg -o /dev/fd/1 || echo "test failed" && echo "test ok"

clean:
	$(RM) pegasus-keg.o core core.* $(EXTRA_OBJ) $(EXTRA_COBJ)

distclean: clean
	$(RM) pegasus-keg
