# $Id: Makefile,v 1.33 2004/02/01 06:48:03 cwilson Exp $
#
# Makefile for IPC / CYGWIN
#

VERSION_NUM = 2.03
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
mandir=$(prefix)/man
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) ipcs$(EXE) ipcrm$(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) contrib

.PHONY: contrib-dir
contrib-dir:
	if [ ! -d contrib ] ; then \
	  mkdir contrib ;\
	fi
	
contrib: $(LIBS) $(PROGS) contrib-dir
	cd contrib &&\
	make -f $(SRCDIR)/contrib/Makefile all SRCDIR=$(SRCDIR)
	
#
# Object files
#

IPCD_OBJECTS = ipc-daemon$(O)
IPCS_OBJECTS = ipcs$(O)
IPCRM_OBJECTS = ipcrm$(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 $@

ipcs$(EXE): $(IPCS_OBJECTS) $(STATLIB)
	$(CC) $(IPCS_OBJECTS) $(LDFLAGS) -o $@

ipcrm$(EXE): $(IPCRM_OBJECTS) $(STATLIB)
	$(CC) $(IPCRM_OBJECTS) $(LDFLAGS) -o $@



#
# install/clean targets
#
install-contrib: $(LIBS) contrib
	cd contrib &&\
	make -f $(SRCDIR)/contrib/Makefile install DESTDIR=$(DESTDIR) SRCDIR=$(SRCDIR)
	

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)/cygipc/sys ]; then \
	  mkdir -p $(DESTDIR)$(incdir)/cygipc/sys ; \
	fi
	$(INSTALL) -m 644 $(SYSINCS) $(DESTDIR)$(incdir)/cygipc/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-man:
	-@if [ ! -d $(DESTDIR)$(mandir)/man8 ] ; then mkdir -p $(DESTDIR)$(mandir)/man8 ; fi
	$(INSTALL) -m 644 $(SRCDIR)/ipcs.8 $(DESTDIR)$(mandir)/man8
	$(INSTALL) -m 644 $(SRCDIR)/ipcrm.8 $(DESTDIR)$(mandir)/man8


install: install-progs install-man install-lib install-inc install-doc install-contrib

clobj:
	$(RM) *~ *.o

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

cldep:
	$(RM) *.dep

clean-contrib: contrib-dir
	cd contrib &&\
	make -f $(SRCDIR)/contrib/Makefile clean SRCDIR=$(SRCDIR)

realclean-contrib: contrib-dir clean-contrib
	cd contrib &&\
	make -f $(SRCDIR)/contrib/Makefile realclean SRCDIR=$(SRCDIR)
	
clean:	clobj cldep clean-contrib

realclean: clobj clexe cldep realclean-contrib

.PHONY: clobj clexe cldep clean realclean clean-contrib

#
# dependencies
#

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

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


