df7bbc094f
Fix bug #185 - Args of !commands lost/damaged. All string arguments were incorrectly freed after being added to the argument list for a command. Instead this fix makes sure it is properly copied into a new string, and by doing so this requires a new API for dealing with hub command arguments in a type safe manner, and also allows for each argument to be cleaned up properly when the command is no longer needed. This also fixes issues with parse errors for certain types, and optional arguments (previously it was impossible to tell the difference for an integer with value 0 or if no integer was given). All arguments can now be accessed through the new functions hub_command_arg_reset() and hub_command_arg_next(). These functions are also exposed to plug-ins. The argument type notations for 'n' has changed to mean nick (string), and 'u' is used for a user (struct hub_user - must be online).
355 lines
9.6 KiB
Makefile
355 lines
9.6 KiB
Makefile
##
|
|
## Makefile for uhub (Use GNU make)
|
|
## Copyright (C) 2007-2010, Jan Vidar Krey <janvidar@extatic.org>
|
|
#
|
|
|
|
-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/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/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_SOURCE := src/plugins/mod_chat_history.c
|
|
plugin_chat_history_TARGET := mod_chat_history.so
|
|
|
|
plugin_chat_only_SOURCE := src/plugins/mod_chat_only.c
|
|
plugin_chat_only_TARGET := mod_chat_only.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)
|
|
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_SOURCE) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_chat_only_TARGET): $(plugin_chat_only_SOURCE) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_welcome_TARGET): $(plugin_welcome_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: $(uhub_BINARY)
|
|
@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 [ ! -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) $(admin_BINARY) $(autotest_BINARY) $(adcrush_BINARY) $(all_OBJECTS) $(all_plugins) autotest.c revision.h revision.h.tmp && \
|
|
echo $(MSG_CLEAN)
|
|
|
|
|