DESTDIR = /
PREFIX = /usr

##########
# Comment this out if you dont want SSL
SSL = yes

##########
# Location of openssl installation
SSL_DIR = /usr

##########
# If using FreeBSD or OpenBSD COMMENT the below lines
LIBS = -ldl

# For any distro
#ADD_PLUGINS = mysqlloggingplugin.so sqliteloggingplugin.so postgresqlloggingplugin.so dbfilterplugin.so dbresponderplugin.so
##########

ifdef SSL
SSL_LIBS = -L$(SSL_DIR)/lib -lssl
SSL_FLAGS = -I$(SSL_DIR)/include -DHAVE_SSL
SSL_OBJS = sslstate.o
endif

CXX = g++

CXXFLAGS = -Wall -O2 -fPIC $(SSL_FLAGS)

PLUGIN_FLAGS = $(LIBS) -fPIC -shared -Wl,-soname,$@ -o $@

IMSPECTOR_OBJS = main.o protocolplugin.o loggingplugin.o filterplugin.o responderplugin.o $(SSL_OBJS)

LIBIMSPECTOR_OBJS = socket.o options.o tools.o

PROTOCOL_PLUGINS = msnprotocolplugin.so icqprotocolplugin.so yahooprotocolplugin.so ircprotocolplugin.so ggprotocolplugin.so jabberprotocolplugin.so httpsprotocolplugin.so
LOGGING_PLUGINS = fileloggingplugin.so debugloggingplugin.so catsloggingplugin.so
FILTER_PLUGINS = badwordsfilterplugin.so aclfilterplugin.so miscfilterplugin.so censordfilterplugin.so
RESPONDER_PLUGINS = 

PLUGINS = $(PROTOCOL_PLUGINS) $(LOGGING_PLUGINS) $(CONTENT_PLUGINS) $(FILTER_PLUGINS) $(RESPONDER_PLUGINS) $(ADD_PLUGINS)

all: imspector $(PLUGINS)

clean:
	rm -f imspector libimspector.so $(PLUGINS) *.o

imspector: $(IMSPECTOR_OBJS) libimspector.so
	$(CXX) $(IMSPECTOR_OBJS) $(LIBS) libimspector.so -o imspector $(SSL_LIBS)

libimspector.so: $(LIBIMSPECTOR_OBJS)
	$(CXX) $(LIBIMSPECTOR_OBJS) $(LIBS) -fPIC -shared -Wl,-soname,libimspector.so -o libimspector.so

msnprotocolplugin.so: msnprotocolplugin.o libimspector.so
	$(CXX) msnprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
icqprotocolplugin.so: icqprotocolplugin.o libimspector.so
	$(CXX) icqprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
yahooprotocolplugin.so: yahooprotocolplugin.o libimspector.so
	$(CXX) yahooprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
ircprotocolplugin.so: ircprotocolplugin.o libimspector.so
	$(CXX) ircprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
ggprotocolplugin.so: ggprotocolplugin.o libimspector.so
	$(CXX) ggprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
jabberprotocolplugin.so: jabberprotocolplugin.o libimspector.so
	$(CXX) jabberprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
httpsprotocolplugin.so: httpsprotocolplugin.o libimspector.so
	$(CXX) httpsprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)
dummyprotocolplugin.so: dummyprotocolplugin.o libimspector.so
	$(CXX) dummyprotocolplugin.o libimspector.so $(PLUGIN_FLAGS)

fileloggingplugin.so: fileloggingplugin.o libimspector.so
	$(CXX) fileloggingplugin.o libimspector.so $(PLUGIN_FLAGS)
debugloggingplugin.so: debugloggingplugin.o libimspector.so
	$(CXX) debugloggingplugin.o libimspector.so $(PLUGIN_FLAGS)
mysqlloggingplugin.so: mysqlloggingplugin.o libimspector.so
	$(CXX) mysqlloggingplugin.o libimspector.so $(PLUGIN_FLAGS) -L$(PREFIX)/lib/mysql -lmysqlclient
sqliteloggingplugin.so: sqliteloggingplugin.o libimspector.so
	$(CXX) sqliteloggingplugin.o libimspector.so $(PLUGIN_FLAGS) -L$(PREFIX)/lib -lsqlite3
postgresqlloggingplugin.so: postgresqlloggingplugin.o libimspector.so
	$(CXX) postgresqlloggingplugin.o libimspector.so $(PLUGIN_FLAGS) -L$(PREFIX)/lib -lpq
catsloggingplugin.so: catsloggingplugin.o libimspector.so
	$(CXX) catsloggingplugin.o libimspector.so $(PLUGIN_FLAGS)

badwordsfilterplugin.so: badwordsfilterplugin.o libimspector.so
	$(CXX) badwordsfilterplugin.o libimspector.so $(PLUGIN_FLAGS)
aclfilterplugin.so: aclfilterplugin.o libimspector.so
	$(CXX) aclfilterplugin.o libimspector.so $(PLUGIN_FLAGS)
miscfilterplugin.so: miscfilterplugin.o libimspector.so
	$(CXX) miscfilterplugin.o libimspector.so $(PLUGIN_FLAGS)
dbfilterplugin.so: dbfilterplugin.o libimspector.so
	$(CXX) dbfilterplugin.o libimspector.so $(PLUGIN_FLAGS) -L$(PREFIX)/lib -lsqlite3
censordfilterplugin.so: censordfilterplugin.o libimspector.so
	$(CXX) censordfilterplugin.o libimspector.so $(PLUGIN_FLAGS)

dbresponderplugin.so: dbresponderplugin.o libimspector.so
	$(CXX) dbresponderplugin.o libimspector.so $(PLUGIN_FLAGS) -L$(PREFIX)/lib -lsqlite3

main.o: main.cpp
	$(CXX) $(CXXFLAGS) main.cpp -c
protocolplugin.o: protocolplugin.cpp
	$(CXX) $(CXXFLAGS) protocolplugin.cpp -c
loggingplugin.o: loggingplugin.cpp
	$(CXX) $(CXXFLAGS) loggingplugin.cpp -c
filterplugin.o: filterplugin.cpp
	$(CXX) $(CXXFLAGS) filterplugin.cpp -c
responderplugin.o: responderplugin.cpp
	$(CXX) $(CXXFLAGS) responderplugin.cpp -c
sslstate.o: sslstate.cpp
	$(CXX) $(CXXFLAGS) sslstate.cpp -c

options.o: options.cpp
	$(CXX) $(CXXFLAGS) options.cpp -c
socket.o: socket.cpp 
	$(CXX) $(CXXFLAGS) socket.cpp -c
tools.o: tools.cpp
	$(CXX) $(CXXFLAGS) tools.cpp -c

msnprotocolplugin.o: msnprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) msnprotocolplugin.cpp -c
icqprotocolplugin.o: icqprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) icqprotocolplugin.cpp -c
yahooprotocolplugin.o: yahooprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) yahooprotocolplugin.cpp -c
ircprotocolplugin.o: ircprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) ircprotocolplugin.cpp -c
ggprotocolplugin.o: ggprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) ggprotocolplugin.cpp -c
jabberprotocolplugin.o: jabberprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) jabberprotocolplugin.cpp -c
httpsprotocolplugin.o: httpsprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) httpsprotocolplugin.cpp -c
dummyprotocolplugin.o: dummyprotocolplugin.cpp
	$(CXX) $(CXXFLAGS) dummyprotocolplugin.cpp -c

fileloggingplugin.o: fileloggingplugin.cpp
	$(CXX) $(CXXFLAGS) fileloggingplugin.cpp -c
debugloggingplugin.o: debugloggingplugin.cpp
	$(CXX) $(CXXFLAGS) debugloggingplugin.cpp -c
mysqlloggingplugin.o: mysqlloggingplugin.cpp
	$(CXX) $(CXXFLAGS) mysqlloggingplugin.cpp -c -I$(PREFIX)/include
sqliteloggingplugin.o: sqliteloggingplugin.cpp
	$(CXX) $(CXXFLAGS) sqliteloggingplugin.cpp -c -I$(PREFIX)/include
postgresqlloggingplugin.o: postgresqlloggingplugin.cpp
	$(CXX) $(CXXFLAGS) postgresqlloggingplugin.cpp -c -I$(PREFIX)/include	
catsloggingplugin.o: catsloggingplugin.cpp
	$(CXX) $(CXXFLAGS) catsloggingplugin.cpp -c

badwordsfilterplugin.o: badwordsfilterplugin.cpp
	$(CXX) $(CXXFLAGS) badwordsfilterplugin.cpp -c
aclfilterplugin.o: aclfilterplugin.cpp
	$(CXX) $(CXXFLAGS) aclfilterplugin.cpp -c
miscfilterplugin.o: miscfilterplugin.cpp
	$(CXX) $(CXXFLAGS) miscfilterplugin.cpp -c
dbfilterplugin.o: dbfilterplugin.cpp
	$(CXX) $(CXXFLAGS) dbfilterplugin.cpp -c -I$(PREFIX)/include
censordfilterplugin.o: censordfilterplugin.cpp
	$(CXX) $(CXXFLAGS) censordfilterplugin.cpp -c

dbresponderplugin.o: dbresponderplugin.cpp
	$(CXX) $(CXXFLAGS) dbresponderplugin.cpp -c -I$(PREFIX)/include
	
install: imspector libimspector.so $(PLUGINS)
	-mkdir -p $(DESTDIR)/$(PREFIX)/sbin
	-mkdir -p $(DESTDIR)/$(PREFIX)/lib/imspector
	-install imspector $(DESTDIR)/$(PREFIX)/sbin/imspector
	-install libimspector.so $(DESTDIR)/$(PREFIX)/lib/libimspector.so
	-(for PLUGIN in $(PLUGINS) $(ADD_PLUGINS); do \
		install $$PLUGIN $(DESTDIR)/$(PREFIX)/lib/imspector/$$PLUGIN; \
	done);
	-mkdir -p $(DESTDIR)/$(PREFIX)/etc/imspector
	-install imspector.conf $(DESTDIR)/$(PREFIX)/etc/imspector/imspector.conf
	-install badwords.txt $(DESTDIR)/$(PREFIX)/etc/imspector/badwords.txt
	-install acl.txt $(DESTDIR)/$(PREFIX)/etc/imspector/acl.txt
	-mkdir -p /var/log/imspector
	-mkdir -p /var/lib/imspector

install-cert:
	-mkdir -p $(DESTDIR)/$(PREFIX)/etc/imspector
	-openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 \
		-keyout $(DESTDIR)/$(PREFIX)/etc/imspector/serverkey.pem \
		-out $(DESTDIR)/$(PREFIX)/etc/imspector/servercert.pem

install-ca-cert: install-cert
	-openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 \
		-keyout $(DESTDIR)/$(PREFIX)/etc/imspector/cakey.pem \
		-out $(DESTDIR)/$(PREFIX)/etc/imspector/cacert.pem

uninstall:
	-rm -f $(DESTDIR)/$(PREFIX)/sbin/imspector
	-rm -f $(DESTDIR)/$(PREFIX)/lib/libimspector.so
	-rm -rf $(DESTDIR)/$(PREFIX)/usr/lib/imspector
	-rm -rf $(DESTDIR)/$(PREFIX)/etc/imspector
