## ## Makefile for uhub (Use GNU make) ## Copyright (C) 2007-2010, Jan Vidar Krey # -include Makefile.private CC = gcc LD := $(CC) MV := mv RANLIB := ranlib CFLAGS += -pipe -Wall USE_SSL ?= YES USE_PLUGINS ?= YES USE_BIGENDIAN ?= AUTO BITS ?= AUTO SILENT ?= YES TERSE ?= NO STACK_PROTECT ?= NO NEED_LIBDL ?= NO ifeq ($(OS), Windows_NT) WINDOWS ?= YES OPSYS ?= Windows else OPSYS ?= $(shell uname) endif ifeq ($(OPSYS),SunOS) LDLIBS += -lsocket -lnsl endif ifeq ($(OPSYS),Haiku) LDLIBS += -lnetwork endif ifeq ($(OPSYS),Linux) NEED_LIBDL = YES endif CFLAGS += -I./src/ ifeq ($(OPSYS),Windows) USE_BIGENDIAN := NO LDLIBS += -lws2_32 UHUB_CONF_DIR ?= c:/uhub/ UHUB_PREFIX ?= c:/uhub/ CFLAGS += -mno-cygwin LDFLAGS += -mno-cygwin BIN_EXT ?= .exe else DESTDIR ?= / UHUB_CONF_DIR ?= $(DESTDIR)/etc/uhub UHUB_PREFIX ?= $(DESTDIR)/usr/local UHUB_MOD_DIR ?= $(DESTDIR)/var/lib/uhub CFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib BIN_EXT ?= endif ifeq ($(SILENT),YES) MSG_CC=@echo " CC:" $(notdir $<) && MSG_LD=@echo " LD:" $(notdir $@) && MSG_AR=@echo " AR:" $(notdir $@) && else MSG_CC= MSG_LD= MSG_AR= endif ifeq ($(TERSE), YES) MSG_CC=@ MSG_LD=@ MSG_AR=@ MSG_CLEAN=-n "" else MSG_CLEAN="Clean as a whistle" endif ifeq ($(RELEASE),YES) CFLAGS += -O3 -DNDEBUG else CFLAGS += -ggdb -DDEBUG endif ifeq ($(STACK_PROTECT),YES) CFLAGS += -fstack-protector-all endif ifeq ($(PROFILING),YES) CFLAGS += -pg LDFLAGS += -pg endif ifeq ($(FUNCTRACE),YES) CFLAGS += -finstrument-functions CFLAGS += -DDEBUG_FUNCTION_TRACE endif ifneq ($(BITS), AUTO) ifeq ($(BITS), 64) CFLAGS += -m64 LDFLAGS += -m64 else ifeq ($(BITS), 32) CFLAGS += -m32 LDFLAGS += -m32 endif endif endif ifeq ($(USE_BIGENDIAN),AUTO) ifeq ($(shell perl -e 'print pack("L", 0x554E4958)'),UNIX) CFLAGS += -DARCH_BIGENDIAN endif else ifeq ($(USE_BIGENDIAN),YES) CFLAGS += -DARCH_BIGENDIAN endif endif ifeq ($(USE_SSL),YES) CFLAGS += -DSSL_SUPPORT LDLIBS += -lssl -lcrypto endif ifeq ($(NEED_LIBDL),YES) LDLIBS += -ldl endif GIT_VERSION=$(shell git describe --tags 2>/dev/null || echo "") GIT_REVISION=$(shell git show --abbrev-commit 2>/dev/null | head -n 1 | cut -f 2 -d " " || echo "") OLD_REVISION=$(shell grep GIT_REVISION revision.h 2>/dev/null | cut -f 3 -d " " | tr -d "\"") # Sources libuhub_SOURCES := \ src/core/auth.c \ src/core/command_parser.c \ src/core/commands.c \ src/core/config.c \ src/core/eventqueue.c \ src/core/hub.c \ src/core/hubevent.c \ src/core/hubio.c \ src/core/inf.c \ src/core/netevent.c \ src/core/probe.c \ src/core/route.c \ src/core/user.c \ src/core/usermanager.c \ src/core/plugincallback.c \ src/core/plugininvoke.c \ src/core/pluginloader.c \ src/core/pluginucmd.c \ src/network/backend.c \ src/network/connection.c \ src/network/epoll.c \ src/network/kqueue.c \ src/network/select.c \ src/network/timeout.c \ src/network/timer.c libadc_common_SOURCES := \ src/adc/message.c \ src/adc/sid.c libutils_SOURCES := \ src/util/cbuffer.c \ src/util/config_token.c \ src/util/credentials.c \ src/util/floodctl.c \ src/util/ipcalc.c \ src/util/list.c \ src/util/log.c \ src/util/memory.c \ src/util/misc.c \ src/network/network.c \ src/util/rbtree.c \ src/util/tiger.c libadc_client_SOURCES := \ src/tools/adcclient.c uhub_SOURCES := src/core/main.c uhub-passwd_SOURCES := src/tools/uhub-passwd.c uhub-passwd_LIBS := -lsqlite3 adcrush_SOURCES := src/tools/adcrush.c admin_SOURCES := src/tools/admin.c autotest_SOURCES := \ autotest/test_commands.tcc \ autotest/test_credentials.tcc \ autotest/test_eventqueue.tcc \ autotest/test_hub.tcc \ autotest/test_inf.tcc \ autotest/test_ipfilter.tcc \ autotest/test_list.tcc \ autotest/test_memory.tcc \ autotest/test_message.tcc \ autotest/test_misc.tcc \ autotest/test_sid.tcc \ autotest/test_tiger.tcc \ autotest/test_timer.tcc \ autotest/test_tokenizer.tcc \ autotest/test_usermanager.tcc autotest_OBJECTS = autotest.o # Plugin targets: plugin_example_SOURCES := src/plugins/mod_example.c plugin_example_TARGET := mod_example.so plugin_welcome_SOURCES := src/plugins/mod_welcome.c plugin_welcome_TARGET := mod_welcome.so plugin_logging_SOURCES := src/plugins/mod_logging.c plugin_logging_TARGET := mod_logging.so plugin_auth_SOURCES := src/plugins/mod_auth_simple.c plugin_auth_TARGET := mod_auth_simple.so plugin_auth_sqlite_SOURCES := src/plugins/mod_auth_sqlite.c plugin_auth_sqlite_TARGET := mod_auth_sqlite.so plugin_auth_sqlite_LIBS := -lsqlite3 plugin_chat_history_SOURCES := src/plugins/mod_chat_history.c plugin_chat_history_TARGET := mod_chat_history.so plugin_chat_only_SOURCES := src/plugins/mod_chat_only.c plugin_chat_only_TARGET := mod_chat_only.so plugin_topic_SOURCES := src/plugins/mod_topic.c plugin_topic_TARGET := mod_topic.so plugin_ucmd_SOURCES := src/plugins/mod_ucmd.c plugin_ucmd_TARGET := mod_ucmd.so # Source to objects libuhub_OBJECTS := $(libuhub_SOURCES:.c=.o) libutils_OBJECTS := $(libutils_SOURCES:.c=.o) libadc_client_OBJECTS := $(libadc_client_SOURCES:.c=.o) libadc_common_OBJECTS := $(libadc_common_SOURCES:.c=.o) uhub_OBJECTS := $(uhub_SOURCES:.c=.o) uhub-passwd_OBJECTS := $(uhub-passwd_SOURCES:.c=.o) adcrush_OBJECTS := $(adcrush_SOURCES:.c=.o) admin_OBJECTS := $(admin_SOURCES:.c=.o) all_plugins := \ $(plugin_example_TARGET) \ $(plugin_logging_TARGET) \ $(plugin_auth_TARGET) \ $(plugin_auth_sqlite_TARGET) \ $(plugin_welcome_TARGET) \ $(plugin_chat_history_TARGET) \ $(plugin_chat_only_TARGET) \ $(plugin_topic_TARGET) \ $(plugin_ucmd_TARGET) all_OBJECTS := \ $(libuhub_OBJECTS) \ $(uhub_OBJECTS) \ $(libutils_OBJECTS) \ $(adcrush_OBJECTS) \ $(autotest_OBJECTS) \ $(admin_OBJECTS) \ $(libadc_common_OBJECTS) \ $(libadc_client_OBJECTS) all_OBJECTS += $(all_plugins) uhub_BINARY=uhub$(BIN_EXT) uhub-passwd_BINARY=uhub-passwd$(BIN_EXT) adcrush_BINARY=adcrush$(BIN_EXT) admin_BINARY=uhub-admin$(BIN_EXT) autotest_BINARY=autotest/test$(BIN_EXT) .PHONY: revision.h.tmp all plugins %.o: %.c version.h revision.h $(MSG_CC) $(CC) -fPIC -c $(CFLAGS) -o $@ $< #%.so: %.c # $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) all: $(uhub_BINARY) $(uhub-passwd_BINARY) plugins plugins: $(uhub_BINARY) $(all_plugins) $(plugin_auth_TARGET): $(plugin_auth_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_auth_sqlite_TARGET): $(plugin_auth_sqlite_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(LDFLAGS) $(plugin_auth_sqlite_LIBS) $(plugin_example_TARGET): $(plugin_example_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_logging_TARGET): $(plugin_logging_SOURCES) $(libutils_OBJECTS) $(libadc_common_OBJECTS) src/network/network.o $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_chat_history_TARGET): $(plugin_chat_history_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_chat_only_TARGET): $(plugin_chat_only_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_welcome_TARGET): $(plugin_welcome_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_topic_TARGET): $(plugin_topic_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(plugin_ucmd_TARGET): $(plugin_ucmd_SOURCES) $(libutils_OBJECTS) $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(adcrush_BINARY): $(adcrush_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(admin_BINARY): $(admin_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(uhub_BINARY): $(uhub_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(uhub-passwd_BINARY): $(uhub-passwd_OBJECTS) src/util/misc.o src/util/list.o src/util/memory.o src/util/log.o $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(uhub-passwd_LIBS) autotest.c: $(autotest_SOURCES) $(shell exotic --standalone $(autotest_SOURCES) > $@) revision.h.tmp: @rm -f $@ @echo "/* AUTOGENERATED FILE - DO NOT EDIT */" > $@ @if [ -n '$(GIT_VERSION)' ]; then echo \#define GIT_VERSION \"$(GIT_VERSION)\" >> $@; fi @if [ -n '$(GIT_REVISION)' ]; then echo \#define GIT_REVISION \"$(GIT_REVISION)\" >> $@; fi version.h: revision.h revision.h: revision.h.tmp @if [ '$(GIT_REVISION)' != '$(OLD_REVISION)' ]; then cp $@.tmp $@; fi @if [ ! -f $@ ]; then cp $@.tmp $@; fi $(autotest_OBJECTS): autotest.c $(MSG_CC) $(CC) -c $(CFLAGS) -Isrc -o $@ $< $(autotest_BINARY): $(autotest_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) autotest: $(autotest_BINARY) @./$(autotest_BINARY) -s -f ifeq ($(WINDOWS),YES) install: @echo "Cannot install automatically on windows." else install: all @echo Copying $(uhub_BINARY) to $(UHUB_PREFIX)/bin/ @cp $(uhub_BINARY) $(UHUB_PREFIX)/bin/ @cp $(uhub-passwd_BINARY) $(UHUB_PREFIX)/bin/ @if [ ! -d $(UHUB_CONF_DIR) ]; then echo Creating $(UHUB_CONF_DIR); mkdir -p $(UHUB_CONF_DIR); fi @if [ ! -f $(UHUB_CONF_DIR)/uhub.conf ]; then cp doc/uhub.conf $(UHUB_CONF_DIR); fi @if [ ! -f $(UHUB_CONF_DIR)/rules.txt ]; then cp doc/rules.txt $(UHUB_CONF_DIR); fi @if [ ! -f $(UHUB_CONF_DIR)/plugins.conf ]; then cp doc/plugins.conf $(UHUB_CONF_DIR); fi @if [ ! -f $(UHUB_CONF_DIR)/ucmd.conf ]; then cp doc/ucmd.conf $(UHUB_CONF_DIR); fi @if [ ! -d $(UHUB_MOD_DIR) ]; then echo Creating $(UHUB_MOD_DIR); mkdir -p $(UHUB_MOD_DIR); fi @cp -f mod_*.so $(UHUB_MOD_DIR) @touch $(UHUB_CONF_DIR)/motd.txt @echo done. endif dist-clean: @rm -rf $(all_OBJECTS) *~ core clean: @rm -rf $(libuhub_OBJECTS) *~ core $(uhub_BINARY) $(uhub-passwd_BINARY) $(admin_BINARY) $(autotest_BINARY) $(adcrush_BINARY) $(all_OBJECTS) $(all_plugins) autotest.c revision.h revision.h.tmp && \ echo $(MSG_CLEAN)