# $Id: Makefile,v 1.31 2003/08/02 23:56:25 cwilson Exp $
#
# Makefile for IPC / CYGWIN
#

VERSION_NUM = 2.01
LT_CURRENT=2
LT_REVISION=0
LT_AGE=0
DLLVER:=$(shell expr $(LT_CURRENT) - $(LT_AGE))

ifdef SRCDIR
VPATH = $(SRCDIR)
else
SRCDIR = .
endif
DESTDIR=

prefix=/usr/local
bindir=$(prefix)/bin
libdir=$(prefix)/lib
incdir=$(prefix)/include
docdir=$(prefix)/share/doc/cygipc-$(VERSION_NUM)
EXE=.exe
O=.o
INSTALL=install

# misc configuration flags.
#
# possible flags are:
# -DSHMAT_LINUX : allows the use of linux-style shmat declaration
# -DTRACE : create a library that outputs every call on stderr

CONF_FLAGS = # -DTRACE # -DSHMAT_LINUX




################################################


INCLUDES = -I$(SRCDIR)/include -I$(SRCDIR)
BASENAME = cygipc

CFLAGS_alpha =
CFLAGS_i386  = -g -mwin32 -O2 -pipe
CFLAGS_i486  =  $(CFLAGS_i386) -mcpu=i486
CFLAGS_i586  = $(CFLAGS_i386) -mcpu=i586 -fno-strength-reduce -falign-loops=2 -falign-jumps=2 -falign-functions=2
LDFLAGS_alpha =
LDFLAGS_i386  = -L/usr/lib
LDFLAGS_i486  = $(LDFLAGS_i386)
LDFLAGS_i586  = $(LDFLAGS_i386)
LDFLAGS_DAEMON = -L. -l$(BASENAME) $(LDFLAGS_i586) -lpopt

CDEBUGFLAGS = #   -ggdb

CPPFLAGS = $(CONF_FLAGS) -DVERSION_NUM=$(VERSION_NUM) $(INCLUDES)
CFLAGS = -Wall $(CDEBUGFLAGS) $(CFLAGS_i586)
LDFLAGS = -L. -l$(BASENAME) $(LDFLAGS_i586)

# Check the README before changing this...
IPCDAEMON_SPECIAL = -e _mainCRTStartup -mwindows # default = no console
#IPCDAEMON_SPECIAL = # with console

export CFLAGS


############  END  OF  USER  CONFIGURATION  #################################

SRCS = $(wildcard $(SRCDIR)/*.c)

PROGS = ipc-daemon2$(EXE) ipctest$(EXE)

SYSINCS = \
	$(SRCDIR)/include/sys/ipc.h \
	$(SRCDIR)/include/sys/ipctrace.h \
	$(SRCDIR)/include/sys/msg.h \
	$(SRCDIR)/include/sys/sem.h \
	$(SRCDIR)/include/sys/shm.h
INCS = \
	$(SRCDIR)/include/IpcNtExt.h \
	$(SRCDIR)/include/IpcNtLit.h \
	$(SRCDIR)/include/IpcNtStr.h
DOCS = \
	$(SRCDIR)/README.old \
	$(SRCDIR)/README \
	$(SRCDIR)/BRANCHES \
	$(SRCDIR)/COPYING \
	$(SRCDIR)/NEWS \
	$(SRCDIR)/USAGE \
	$(SRCDIR)/TODO

STATLIB = lib$(BASENAME).a
DYNLIB  = cyg$(BASENAME)-$(DLLVER).dll
IMPLIB  = lib$(BASENAME).dll.a

LIBS = $(STATLIB) $(DYNLIB)

#
# standard targets
#

default: all

all: $(LIBS) $(PROGS) 

#
# Object files
#

IPCD_OBJECTS = ipc-daemon$(O)
TEST_OBJECTS = ipctest$(O)
LIB_OBJECTS = version$(O) sem$(O) shm$(O) msg$(O) name_mangle$(O) reverse$(O) strace$(O)

#
# UNIX targets
#

$(STATLIB):	$(LIB_OBJECTS)
	$(AR) $(ARFLAGS) $@ $?
	ranlib $@

$(DYNLIB) $(IMPLIB):	$(LIB_OBJECTS)
	$(CC) -shared -Wl,--export-all -Wl,--out-implib=$(IMPLIB) \
	  -o $@ $?

ipc-daemon2$(EXE): $(IPCD_OBJECTS) $(STATLIB) $(DYNLIB)
	$(CC) $(IPCDAEMON_SPECIAL) \
	$(IPCD_OBJECTS) $(LDFLAGS_DAEMON) -o $@

ipctest$(EXE): $(TEST_OBJECTS) $(STATLIB) $(DYNLIB)
	$(CC) $(TEST_OBJECTS) $(LDFLAGS) -o $@

#
# install/clean targets
#

install-progs: $(PROGS)
	-@if [ ! -d $(DESTDIR)$(bindir) ]; then mkdir -p $(DESTDIR)$(bindir); fi
	$(INSTALL) -m 755 -s $(PROGS) $(DESTDIR)$(bindir)

install-scripts: $(SCRIPTS)
	-@if [ ! -d $(DESTDIR)$(bindir) ]; then mkdir -p $(DESTDIR)$(bindir); fi
	$(INSTALL) -m 755 $(SCRIPTS) $(DESTDIR)$(bindir)

install-lib: $(LIBS)
	-@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
	-@if [ ! -d $(DESTDIR)$(bindir) ]; then mkdir -p $(DESTDIR)$(bindir); fi
	$(INSTALL) -m 644 $(STATLIB) $(DESTDIR)$(libdir)
	$(INSTALL) -m 644 $(IMPLIB) $(DESTDIR)$(libdir)
	$(INSTALL) -m 755 -s $(DYNLIB) $(DESTDIR)$(bindir)

install-inc: $(INCS) $(SYSINCS)
	-@if [ ! -d $(DESTDIR)$(incdir)/sys ]; then mkdir -p $(DESTDIR)$(incdir)/sys; fi
	$(INSTALL) -m 644 $(SYSINCS) $(DESTDIR)$(incdir)/sys

install-doc: $(DOCS)
	-@if [ ! -d $(DESTDIR)$(docdir) ]; then mkdir -p $(DESTDIR)$(docdir); fi
	$(INSTALL) -m 644 $(DOCS) $(DESTDIR)$(docdir)
	$(INSTALL) -m 644 $(SRCDIR)/doc/*.gif $(DESTDIR)$(docdir)
	$(INSTALL) -m 644 $(SRCDIR)/doc/*.html $(DESTDIR)$(docdir)

install: install-progs install-lib install-inc install-doc

clobj:
	$(RM) *~ *.o

clexe:
	$(RM) $(PROGS)
	$(RM) $(LIBS) $(IMPLIB)

cldep:
	$(RM) *.dep

clean:	clobj cldep

realclean: clobj clexe cldep

.PHONY: clobj clexe cldep clean realclean

#
# dependencies
#

%.dep: %.c
	@echo "Building "$@" from "$<
	@$(SHELL) -ec 'gcc -MM $(CPPFLAGS) $< > $@'

# Including all dep files
-include $(SRCS:$(SRCDIR)/%.c=%.dep)


