mirror of https://github.com/bqv/weechat-xmpp
plugin.c -> cpp
parent
097e6a7bd5
commit
0e2df206f8
@ -1,95 +0,0 @@
|
||||
ifdef DEBUG
|
||||
DBGCFLAGS=-fsanitize=address -fsanitize=undefined -fsanitize=leak
|
||||
DBGLDFLAGS=-lasan -lubsan -llsan
|
||||
endif
|
||||
RM=rm -f
|
||||
FIND=find
|
||||
INCLUDES=-Ilibstrophe $(shell xml2-config --cflags) $(shell pkg-config --cflags librnp-0) $(shell pkg-config --cflags libomemo-c)
|
||||
CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -gdwarf-4 -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers -D_XOPEN_SOURCE=700 $(INCLUDES)
|
||||
LDFLAGS+=$(DBGLDFLAGS) -shared -g $(DBGCFLAGS)
|
||||
LDLIBS=-lstrophe -lpthread $(shell xml2-config --libs) $(shell pkg-config --libs librnp-0) $(shell pkg-config --libs libomemo-c) -lgcrypt -llmdb
|
||||
|
||||
PREFIX ?= /usr/local
|
||||
LIBDIR ?= $(PREFIX)/lib
|
||||
|
||||
SRCS=plugin.c \
|
||||
account.c \
|
||||
buffer.c \
|
||||
channel.c \
|
||||
command.c \
|
||||
completion.c \
|
||||
config.c \
|
||||
connection.c \
|
||||
input.c \
|
||||
message.c \
|
||||
omemo.c \
|
||||
pgp.c \
|
||||
user.c \
|
||||
util.c \
|
||||
xmpp/presence.c \
|
||||
xmpp/iq.c \
|
||||
|
||||
DEPS=diff/libdiff.a
|
||||
OBJS=$(subst .c,.o,$(SRCS))
|
||||
|
||||
all: weechat-xmpp
|
||||
weechat-xmpp: $(DEPS) xmpp.so
|
||||
|
||||
xmpp.so: $(OBJS) $(DEPS)
|
||||
$(CC) $(LDFLAGS) -o xmpp.so $(OBJS) $(DEPS) $(LDLIBS)
|
||||
which patchelf >/dev/null && \
|
||||
patchelf --set-rpath $(LIBRARY_PATH):$(shell realpath $(shell dirname $(shell gcc --print-libgcc-file-name))/../../../) xmpp.so && \
|
||||
patchelf --shrink-rpath xmpp.so || true
|
||||
|
||||
diff/libdiff.a:
|
||||
git submodule update --init --recursive
|
||||
cd diff && ./configure
|
||||
$(MAKE) -C diff CFLAGS=-fPIC
|
||||
diff: diff/libdiff.a
|
||||
|
||||
test: xmpp.so
|
||||
env LD_PRELOAD=$(DEBUG) \
|
||||
weechat -a -P 'alias,buflist,irc' -r '/plugin load ./xmpp.so'
|
||||
|
||||
debug: xmpp.so
|
||||
gdb -ex "handle SIGPIPE nostop noprint pass" --args \
|
||||
weechat -a -r '/plugin load ./xmpp.so'
|
||||
|
||||
depend: .depend
|
||||
|
||||
.depend: $(SRCS)
|
||||
$(RM) ./.depend
|
||||
$(CC) $(CFLAGS) -MM $^>>./.depend
|
||||
|
||||
tidy:
|
||||
$(FIND) . -name "*.o" -delete
|
||||
|
||||
clean:
|
||||
$(RM) -f $(OBJS)
|
||||
$(MAKE) -C diff clean || true
|
||||
git submodule foreach --recursive git clean -xfd || true
|
||||
git submodule foreach --recursive git reset --hard || true
|
||||
|
||||
distclean: clean
|
||||
$(RM) *~ .depend
|
||||
|
||||
install: xmpp.so
|
||||
ifeq ($(shell id -u),0)
|
||||
mkdir -p $(DESTDIR)$(LIBDIR)/weechat/plugins
|
||||
cp xmpp.so $(DESTDIR)$(LIBDIR)/weechat/plugins/xmpp.so
|
||||
chmod 644 $(DESTDIR)$(LIBDIR)/weechat/plugins/xmpp.so
|
||||
else
|
||||
mkdir -p ~/.weechat/plugins
|
||||
cp xmpp.so ~/.weechat/plugins/xmpp.so
|
||||
chmod 755 ~/.weechat/plugins/xmpp.so
|
||||
endif
|
||||
|
||||
.PHONY: tags cs
|
||||
|
||||
tags:
|
||||
$(CC) $(CFLAGS) -M $(SRCS) | sed -e "s/[\\ ]/\n/g" | sed -e "/^$$/d" -e "/\.o:[ \t]*$$/d" | sort | uniq | ctags -e -L - -f .git/tags -R --c-kinds=+px --c++-kinds=+px --fields=+iaS --extras=+fq
|
||||
|
||||
cs:
|
||||
cscope -RUbq
|
||||
|
||||
include .depend
|
@ -1 +0,0 @@
|
||||
Subproject commit 1d4454ea42d39a2064955f2a8de5f89787743f2a
|
@ -0,0 +1,161 @@
|
||||
ifdef DEBUG
|
||||
DBGCFLAGS=-fsanitize=address -fsanitize=undefined -fsanitize=leak
|
||||
DBGLDFLAGS=-lasan -lubsan -llsan
|
||||
endif
|
||||
|
||||
RM=rm -f
|
||||
FIND=find
|
||||
|
||||
INCLUDES=-Ilibstrophe \
|
||||
$(shell xml2-config --cflags) \
|
||||
$(shell pkg-config --cflags librnp-0) \
|
||||
$(shell pkg-config --cflags libomemo-c)
|
||||
CFLAGS+=$(DBGCFLAGS) \
|
||||
-fno-omit-frame-pointer -fPIC \
|
||||
-std=gnu99 -gdwarf-4 \
|
||||
-Wall -Wextra -pedantic \
|
||||
-Werror-implicit-function-declaration \
|
||||
-Wno-missing-field-initializers \
|
||||
-D_XOPEN_SOURCE=700 \
|
||||
$(INCLUDES)
|
||||
CPPFLAGS+=$(DBGCFLAGS) \
|
||||
-fno-omit-frame-pointer -fPIC \
|
||||
-std=c++17 -gdwarf-4 \
|
||||
-Wall -Wextra -pedantic \
|
||||
-Wno-missing-field-initializers \
|
||||
$(INCLUDES)
|
||||
# -DDOCTEST_CONFIG_DISABLE
|
||||
LDFLAGS+=$(DBGLDFLAGS) \
|
||||
-shared -gdwarf-4 \
|
||||
$(DBGCFLAGS)
|
||||
LDLIBS=-lstrophe \
|
||||
-lpthread \
|
||||
$(shell xml2-config --libs) \
|
||||
$(shell pkg-config --libs librnp-0) \
|
||||
$(shell pkg-config --libs libomemo-c) \
|
||||
-lgcrypt \
|
||||
-llmdb
|
||||
|
||||
PREFIX ?= /usr/local
|
||||
LIBDIR ?= $(PREFIX)/lib
|
||||
|
||||
HDRS=plugin.hh \
|
||||
account.h \
|
||||
buffer.h \
|
||||
channel.h \
|
||||
command.h \
|
||||
completion.h \
|
||||
config.h \
|
||||
connection.h \
|
||||
input.h \
|
||||
message.h \
|
||||
omemo.h \
|
||||
pgp.h \
|
||||
user.h \
|
||||
util.h \
|
||||
xmpp/stanza.h \
|
||||
|
||||
SRCS=plugin.cpp \
|
||||
account.c \
|
||||
buffer.c \
|
||||
channel.c \
|
||||
command.c \
|
||||
completion.c \
|
||||
config.c \
|
||||
connection.c \
|
||||
input.c \
|
||||
message.c \
|
||||
omemo.c \
|
||||
pgp.c \
|
||||
user.c \
|
||||
util.c \
|
||||
xmpp/presence.c \
|
||||
xmpp/iq.c \
|
||||
|
||||
DEPS=deps/diff/libdiff.a \
|
||||
|
||||
OBJS=$(patsubst %.cpp,.%.o,$(patsubst %.c,.%.o,$(patsubst xmpp/%.c,xmpp/.%.o,$(SRCS))))
|
||||
|
||||
all:
|
||||
make depend
|
||||
make weechat-xmpp && make test
|
||||
|
||||
weechat-xmpp: $(DEPS) xmpp.so
|
||||
|
||||
xmpp.so: $(OBJS) $(DEPS) $(HDRS)
|
||||
$(CXX) $(LDFLAGS) -o .$@ $(OBJS) $(DEPS) $(LDLIBS)
|
||||
which patchelf >/dev/null && \
|
||||
patchelf --set-rpath $(LIBRARY_PATH):$(shell realpath $(shell dirname $(shell gcc --print-libgcc-file-name))/../../../) xmpp.so && \
|
||||
patchelf --shrink-rpath xmpp.so || true
|
||||
|
||||
.%.o: %.cpp
|
||||
@$(CXX) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
.%.o: %.c
|
||||
@$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
xmpp/.%.o: xmpp/%.c
|
||||
@$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
deps/diff/libdiff.a:
|
||||
git submodule update --init --recursive
|
||||
cd deps/diff && env -u MAKEFLAGS ./configure
|
||||
$(MAKE) -C deps/diff CFLAGS=-fPIC
|
||||
diff: deps/diff/libdiff.a
|
||||
|
||||
tests/run: xmpp.so tests/main.cpp
|
||||
$(CXX) $(CPPFLAGS) -o tests/run xmpp.so tests/main.cpp $(LDLIBS)
|
||||
which patchelf >/dev/null && \
|
||||
patchelf --set-rpath $(PWD):$(LIBRARY_PATH):$(shell realpath $(shell dirname $(shell gcc --print-libgcc-file-name))/../../../) tests/run && \
|
||||
patchelf --shrink-rpath tests/run || true
|
||||
|
||||
test: tests/run
|
||||
tests/run
|
||||
|
||||
debug: xmpp.so
|
||||
env LD_PRELOAD=$(DEBUG) gdb -ex "handle SIGPIPE nostop noprint pass" --args \
|
||||
weechat -a -P 'alias,buflist,exec,irc' -r '/plugin load ./xmpp.so'
|
||||
|
||||
depend: $(SRCS) $(HDRS)
|
||||
$(RM) -f ./.depend
|
||||
echo > ./.depend
|
||||
for src in $(SRCS) ; do \
|
||||
if [[ $$src == *.cpp ]]; then \
|
||||
$(CXX) $(CPPFLAGS) -MM -MMD -MP -MF - \
|
||||
-MT .$${src/.cpp/.o} $$src >> ./.depend ; \
|
||||
elif [[ $$src == *.c ]]; then \
|
||||
$(CC) $(CFLAGS) -MM -MMD -MP -MF - \
|
||||
-MT .$${src/.c/.o} $$src >> ./.depend ; \
|
||||
fi \
|
||||
done
|
||||
sed -i 's/\.\([a-z]*\/\)/\1./' .depend
|
||||
|
||||
tidy:
|
||||
$(FIND) . -name "*.o" -delete
|
||||
|
||||
clean:
|
||||
$(RM) -f $(OBJS)
|
||||
$(MAKE) -C deps/diff clean || true
|
||||
git submodule foreach --recursive git clean -xfd || true
|
||||
git submodule foreach --recursive git reset --hard || true
|
||||
|
||||
distclean: clean
|
||||
$(RM) *~ .depend
|
||||
|
||||
install: xmpp.so
|
||||
ifeq ($(shell id -u),0)
|
||||
mkdir -p $(DESTDIR)$(LIBDIR)/weechat/plugins
|
||||
cp xmpp.so $(DESTDIR)$(LIBDIR)/weechat/plugins/xmpp.so
|
||||
chmod 644 $(DESTDIR)$(LIBDIR)/weechat/plugins/xmpp.so
|
||||
else
|
||||
mkdir -p ~/.weechat/plugins
|
||||
cp xmpp.so ~/.weechat/plugins/xmpp.so
|
||||
chmod 755 ~/.weechat/plugins/xmpp.so
|
||||
endif
|
||||
|
||||
.PHONY: all weechat-xmpp test debug depend tidy clean distclean install check
|
||||
|
||||
check:
|
||||
clang-check --analyze *.c *.cc *.cpp
|
||||
|
||||
include .depend
|
@ -1 +0,0 @@
|
||||
Subproject commit 7667e54d6488aba85701bb4dd6e09fd98bfb3a2c
|
@ -0,0 +1,10 @@
|
||||
#include <doctest/doctest.h>
|
||||
|
||||
#include "../account.hh"
|
||||
|
||||
TEST_CASE("create account")
|
||||
{
|
||||
weechat::xmpp::account acc("demo");
|
||||
|
||||
CHECK(acc.name == "demo");
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
#include <doctest/doctest.h>
|
||||
|
||||
#include "../config.hh"
|
||||
|
||||
TEST_CASE("create config")
|
||||
{
|
||||
weechat::xmpp::config cfg;
|
||||
|
||||
CHECK(cfg.name() == weechat::xmpp::config::default_name);
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
||||
|
||||
#include <doctest/doctest.h>
|
@ -0,0 +1,18 @@
|
||||
#include <doctest/doctest.h>
|
||||
|
||||
#include "../plugin.hh"
|
||||
|
||||
TEST_CASE("placeholder")
|
||||
{
|
||||
int argc = 2;
|
||||
const char *argv[2] = {"a", "b"};
|
||||
|
||||
SUBCASE("takes no arguments")
|
||||
{
|
||||
CHECK(argc != 1);
|
||||
}
|
||||
|
||||
(void) argv;
|
||||
//weechat::plugin c;
|
||||
//CHECK(&c.name() == NULL);
|
||||
}
|
Loading…
Reference in New Issue