include Makefile.config

CPPFLAGS	= -D_XOPEN_SOURCE=500
INCLUDES	= $(EXTRA_CPPFLAGS)
CFLAGS		= $(EXTRA_CFLAGS)
CXXFLAGS	= $(EXTRA_CXXFLAGS)
LDFLAGS		= $(EXTRA_LDFLAGS)
LIBS		= -lboost_serialization$(BOOST_TAG) $(EXTRA_LIBS)

OBJS=	\
	main.o				\
	request_thread.o		\
	fcgi.o				\
	process.o			\
	config.o			\
	process_factory.o		\
	util.o				\
	acceptor_thread.o		\
	error.o				\
	stats_thread.o			\
	logger.o			\
	$(ATOMIC_SRC:.c=.o)

DEPEND_SRCS= \
	main.cc			\
	request_thread.cc	\
	fcgi.cc			\
	process.cc		\
	config.cc		\
	process_factory.cc	\
	util.cc			\
	acceptor_thread.cc	\
	error.cc		\
	stats_thread.cc		\
	logger.cc		\
	swexec.c		\
	swkill.c		\
	switchboard.c		\
	switchstats.cc

DISTFILES = \
	main.cc			\
	request_thread.cc	\
	fcgi.cc			\
	process.cc		\
	config.cc		\
	process_factory.cc	\
	util.cc			\
	acceptor_thread.cc	\
	acceptor_thread.h	\
	config.h		\
	fcgi.h			\
	process_factory.h	\
	process.h		\
	request_thread.h	\
	util.h			\
	version.h		\
	exception.h		\
	stats_thread.h		\
	stats_thread.h		\
	error.h			\
	error.cc		\
	switchstats.cc		\
	stats_thread.h		\
	stats_thread.cc		\
	exception.h		\
	atomic_solaris.c	\
	atomic_i386_gcc.c	\
	atomic_amd64_gcc.c	\
	atomic_gcc4.c		\
	atomic_pthread.c	\
	swatomic.h		\
	swexec.c		\
	swkill.c		\
	switchboard.c		\
	logger.h		\
	logger.cc		\
	configure		\
	switchboard.conf.example	\
	switchboard.8		\
	switchstats.1		\
	switchboard.conf.4	\
	Makefile		\
	README

ERRORS=	\
	general.html

PROG=		switchboard-bin
SWEXEC=		swexec
SWKILL=		swkill
SWITCHBOARD=	switchboard
all: $(PROG) $(SWEXEC) $(SWKILL) $(SWITCHBOARD) switchstats

$(PROG): $(OBJS)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(PROG) $(LIBS) $(THREAD_LIB)

$(SWEXEC): swexec.o
	$(CC) $(CFLAGS) $(LDFLAGS) swexec.o -o $(SWEXEC) $(SWEXEC_EXTRA_LIBS)

$(SWKILL): swkill.o
	$(CC) $(CFLAGS) $(LDFLAGS) swkill.o -o $(SWKILL)

$(SWITCHBOARD): switchboard.o
	$(CC) $(CFLAGS) $(LDFLAGS) switchboard.o -o $(SWITCHBOARD)

switchstats: switchstats.o util.o
	$(CXX) $(CXXFLAGS) $(LDFLAGS) switchstats.o util.o -o switchstats $(LIBS)

.cc.o:
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $<

swexec.o: swexec.c
	$(CC) $(CPPFLAGS) $(SWEXEC_FLAGS) $(INCLUDES) $(CFLAGS) -c $<

swkill.o: swkill.c
	$(CC) $(CPPFLAGS) $(SWKILL_FLAGS) $(INCLUDES) $(CFLAGS) -c $<

switchboard.o: switchboard.c
	$(CC) $(CPPFLAGS) $(SWITCHBOARD_FLAGS) $(INCLUDES) $(CFLAGS) -c $<

switchstats.o: switchstats.cc
	$(CXX) $(CPPFLAGS) $(INCLUDES) $(CXXFLAGS) -c $<

install:
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/lib
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/lib/switchboard
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/switchboard/errors
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/bin
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/man
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/man/man1
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/man/man4
	$(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/man/man8
	$(INSTALL) -d -m 0755 $(DESTDIR)$(CONFDIR)
	$(INSTALL) -o root -g $(SB_GROUP) -m 0755 switchboard $(DESTDIR)$(PREFIX)/bin
	$(INSTALL) -o root -g $(SB_GROUP) -m 0755 switchstats $(DESTDIR)$(PREFIX)/bin
	$(INSTALL) -o root -g $(SB_GROUP) -m 0755 switchboard-bin $(DESTDIR)$(PREFIX)/lib/switchboard
	$(INSTALL) -o root -g $(SB_GROUP) -m 04710 $(SWEXEC) $(DESTDIR)$(PREFIX)/lib/switchboard
	$(INSTALL) -o root -g $(SB_GROUP) -m 04710 $(SWKILL) $(DESTDIR)$(PREFIX)/lib/switchboard
	$(INSTALL) -o root -g bin -m 0644 switchboard.conf.example $(DESTDIR)$(CONFDIR)
	$(INSTALL) -o root -g bin -m 0644 switchboard.8 $(DESTDIR)$(PREFIX)/man/man8
	$(INSTALL) -o root -g bin -m 0644 switchstats.1 $(DESTDIR)$(PREFIX)/man/man1
	$(INSTALL) -o root -g bin -m 0644 switchboard.conf.4 $(DESTDIR)$(PREFIX)/man/man4
	for x in $(ERRORS); do \
		$(INSTALL) -o root -g bin -m 0644 errors/$$x $(DESTDIR)$(PREFIX)/share/switchboard/errors; \
	done

clean:
	rm -f $(OBJS) $(PROG) $(SWEXEC) $(SWKILL) swexec.o swkill.o

Makefile.config:
	@echo You must run configure before you can build switchboard
	@exit 1

.SUFFIXES: .c .cc .o
.KEEP_STATE:
.PHONY: clean

gccdepend:
	sed '/^# Do not delete this line -- make depend requires it/,$$d' < Makefile > Makefile.new
	echo '# Do not delete this line -- make depend requires it' >> Makefile.new
	$(CXX) $(CPPFLAGS) $(INCLUDES) -MM $(DEPEND_SRCS) >>Makefile.new
	mv -f Makefile.new Makefile

dist:
	VERSION=`sed -n '/^#define SB_VERSION/ { s/^.*"V-\(.*\)".*$$/\1/; p; }' <version.h`; \
	rm -rf switchboard-$$VERSION; \
	mkdir switchboard-$$VERSION; \
	cp $(DISTFILES) switchboard-$$VERSION; \
	mkdir switchboard-$$VERSION/errors; \
	for x in $(ERRORS); do \
		cp errors/$$x switchboard-$$VERSION/errors; \
	done; \
	tar cf switchboard-$$VERSION.tar switchboard-$$VERSION; \
	gzip -f switchboard-$$VERSION.tar; \
	ls -l switchboard-$$VERSION.tar.gz; \
	rm -rf switchboard-$$VERSION

# Do not delete this line -- make depend requires it
main.o: main.cc fcgi.h request_thread.h process.h config.h swatomic.h \
  version.h process_factory.h acceptor_thread.h stats_thread.h setup.h \
  util.h logger.h
request_thread.o: request_thread.cc request_thread.h fcgi.h process.h \
  config.h swatomic.h process_factory.h util.h error.h exception.h \
  stats_thread.h version.h setup.h logger.h
fcgi.o: fcgi.cc fcgi.h util.h
process.o: process.cc process.h setup.h logger.h
config.o: config.cc config.h swatomic.h logger.h
process_factory.o: process_factory.cc process_factory.h process.h \
  config.h swatomic.h util.h setup.h stats_thread.h version.h
util.o: util.cc util.h
acceptor_thread.o: acceptor_thread.cc acceptor_thread.h config.h \
  swatomic.h request_thread.h fcgi.h process.h exception.h logger.h
error.o: error.cc error.h config.h swatomic.h util.h version.h setup.h
stats_thread.o: stats_thread.cc stats_thread.h version.h setup.h util.h \
  config.h swatomic.h
logger.o: logger.cc logger.h
swexec.o: swexec.c setup.h
swkill.o: swkill.c setup.h
switchboard.o: switchboard.c version.h setup.h
switchstats.o: switchstats.cc stats_thread.h version.h setup.h util.h \
  config.h swatomic.h
