Builds shared library now.
This commit is contained in:
parent
577af3c040
commit
cc0206ce2c
6
.gitignore
vendored
6
.gitignore
vendored
@ -7,5 +7,7 @@ data
|
||||
testout
|
||||
audio
|
||||
video
|
||||
result*.json
|
||||
dissection_result*.txt
|
||||
doc/syncres/*
|
||||
lib*.so
|
||||
lib*.a
|
||||
matrix-send
|
||||
|
||||
@ -1,3 +1,21 @@
|
||||
/**
|
||||
This file is a part of r0nk, atlas_moon, and rexy's matrix client
|
||||
Copyright (C) 2019 rexy712
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef RJP_ITERATOR_HPP
|
||||
#define RJP_ITERATOR_HPP
|
||||
|
||||
@ -25,10 +43,7 @@ namespace raii{
|
||||
constexpr bool operator!=(const rjp_object_iterator& e)const{
|
||||
return m_value != e.m_value;
|
||||
}
|
||||
rjp_object_iterator& operator++(void){
|
||||
m_value = rjp_next_member(m_value);
|
||||
return *this;
|
||||
}
|
||||
rjp_object_iterator& operator++(void);
|
||||
constexpr RJP_value* operator*(void){
|
||||
return m_value;
|
||||
}
|
||||
@ -62,10 +77,7 @@ namespace raii{
|
||||
constexpr bool operator!=(const rjp_array_iterator& e)const{
|
||||
return m_value != e.m_value;
|
||||
}
|
||||
rjp_array_iterator& operator++(void){
|
||||
m_value = rjp_next_element(m_value);
|
||||
return *this;
|
||||
}
|
||||
rjp_array_iterator& operator++(void);
|
||||
constexpr RJP_value* operator*(void){
|
||||
return m_value;
|
||||
}
|
||||
|
||||
@ -29,8 +29,10 @@ namespace raii{
|
||||
{
|
||||
template<class T>
|
||||
void operator()(T* ptr){
|
||||
rjp_free_value(ptr);
|
||||
internal_free_value(ptr);
|
||||
}
|
||||
private:
|
||||
void internal_free_value(RJP_value*);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -31,18 +31,9 @@ namespace raii{
|
||||
class rjp_allocator
|
||||
{
|
||||
public:
|
||||
static void free(void* data){
|
||||
rjp_free(data);
|
||||
}
|
||||
static void* allocate(size_t size){
|
||||
return rjp_alloc(size);
|
||||
}
|
||||
static void* copy(const void* data, size_t len){
|
||||
char* tmp = reinterpret_cast<char*>(allocate(len));
|
||||
memcpy(tmp, data, len-1);
|
||||
tmp[len-1] = 0;
|
||||
return tmp;
|
||||
}
|
||||
static void free(void* data);
|
||||
static void* allocate(size_t size);
|
||||
static void* copy(const void* data, size_t len);
|
||||
};
|
||||
|
||||
}
|
||||
@ -69,7 +60,6 @@ namespace raii{
|
||||
}
|
||||
};
|
||||
rjp_string rjp_string_from_key(RJP_value* val);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
61
makefile
61
makefile
@ -14,20 +14,36 @@
|
||||
#Copyright 2018-2019 rexy712
|
||||
|
||||
|
||||
SOURCE_DIRS:=src src/raii src/matrix
|
||||
ifeq ($(OS),Windows_NT)
|
||||
WINDOWS=1
|
||||
endif
|
||||
|
||||
SOURCE_DIRS:=src/raii src/matrix
|
||||
OBJDIR:=obj
|
||||
DEPDIR:=$(OBJDIR)/dep
|
||||
INCLUDE_DIRS:=include
|
||||
EXT:=cpp
|
||||
MAIN_EXECUTABLE:=tester
|
||||
MAIN_LIBRARY:=librmatrix.so
|
||||
|
||||
CXX:=g++
|
||||
CXXFLAGS:=-g -std=c++17 -Wall -pedantic -Wextra
|
||||
CXXFLAGS:=-g -std=c++17 -Wall -pedantic -Wextra -fPIC
|
||||
|
||||
ifneq ($(WINDOWS),1)
|
||||
CXX:=g++
|
||||
AR:=ar
|
||||
RANLIB:=ranlib
|
||||
LDFLAGS:=-shared
|
||||
LDLIBS:=-lcurl -lrjp -lavformat -lavcodec -lavutil -lswresample -lswscale -lfreeimageplus
|
||||
STRIP:=strip
|
||||
else
|
||||
CXX:=x86_64-w64-mingw32-g++
|
||||
AR:=x86_64-w64-mingw32-ar
|
||||
RANLIB:=x86_64-w64-mingw32-ranlib
|
||||
LDFLAGS:=
|
||||
LDLIBS:=-lcurl -lrjp -lavformat -lavcodec -lavutil -lswresample -lswscale -lfreeimageplus
|
||||
STRIP:=x86_64-w64-mingw32-strip
|
||||
endif
|
||||
all: CXXFLAGS+=-O0
|
||||
release: CXXFLAGS+=-O2
|
||||
LDFLAGS=
|
||||
LDLIBS:=-lcurl -lrjp -lavformat -lavcodec -lavutil -lswresample -lswscale -lfreeimageplus -lpthread
|
||||
STRIP:=strip
|
||||
|
||||
memchk:LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||
memchk:CXXFLAGS+=-O0 -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||
@ -50,16 +66,21 @@ INTERNAL_CXXFLAGS=-c $(foreach dir,$(INCLUDE_DIRS),-I"$(dir)") -MMD -MP -MF"$(DE
|
||||
SOURCES:=$(foreach source,$(SOURCE_DIRS),$(foreach ext,$(EXT),$(wildcard $(source)/*.$(ext))))
|
||||
OBJECTS:=$(addprefix $(OBJDIR)/,$(subst \,.,$(subst /,.,$(addsuffix .o,$(SOURCES)))))
|
||||
|
||||
all: $(MAIN_EXECUTABLE)
|
||||
memchk: $(MAIN_EXECUTABLE)
|
||||
|
||||
$(MAIN_EXECUTABLE): $(OBJECTS)
|
||||
$(CXX) $(LDFLAGS) $^ -o "$(basename $@)" $(LDLIBS)
|
||||
|
||||
all: $(MAIN_LIBRARY)
|
||||
.PHONY: memchk
|
||||
memchk: all
|
||||
.PHONY: release
|
||||
release: $(OBJECTS)
|
||||
$(CXX) $(LDFLAGS) $^ -o "$(basename $(MAIN_EXECUTABLE))" $(LDLIBS)
|
||||
$(STRIP) --strip-all "$(MAIN_EXECUTABLE)"
|
||||
release: all
|
||||
.PHONY: utils
|
||||
utils: matrix-send
|
||||
tester: $(MAIN_LIBRARY) $(OBJDIR)/src.test.cpp.o
|
||||
$(CXX) -L. -o "$@" $(OBJDIR)/src.test.cpp.o -lrmatrix -lpthread
|
||||
|
||||
matrix-send: $(MAIN_LIBRARY) $(OBJDIR)/util.matrix-send.cpp.o
|
||||
$(CXX) -L. -o "$@" $(OBJDIR)/util.matrix-send.cpp.o -lrmatrix
|
||||
|
||||
$(MAIN_LIBRARY): $(OBJECTS)
|
||||
$(CXX) -o "$@" $^ $(CXXFLAGS) $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
define GENERATE_OBJECTS
|
||||
|
||||
@ -69,6 +90,8 @@ $$(OBJDIR)/$(subst \,.,$(subst /,.,$(1))).%.o: $(1)/%
|
||||
endef
|
||||
|
||||
$(foreach dir,$(SOURCE_DIRS),$(eval $(call GENERATE_OBJECTS,$(dir))))
|
||||
$(eval $(call GENERATE_OBJECTS,util))
|
||||
$(eval $(call GENERATE_OBJECTS,src))
|
||||
$(OBJECTS): | $(OBJDIR) $(DEPDIR)
|
||||
|
||||
$(OBJDIR):
|
||||
@ -80,7 +103,11 @@ $(DEPDIR):
|
||||
clean:
|
||||
$(call rmdir,"$(DEPDIR)")
|
||||
$(call rmdir,"$(OBJDIR)")
|
||||
$(call rm,"$(MAIN_EXECUTABLE)")
|
||||
$(call rm,"$(MAIN_LIBRARY)")
|
||||
.PHONY: utilsclean
|
||||
fullclean: clean
|
||||
$(call rm,"matrix-send")
|
||||
$(call rm,"tester")
|
||||
|
||||
-include $(wildcard $(DEPDIR)/*.d)
|
||||
|
||||
|
||||
32
src/raii/rjp_iterator.cpp
Normal file
32
src/raii/rjp_iterator.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
/**
|
||||
This file is a part of r0nk, atlas_moon, and rexy's matrix client
|
||||
Copyright (C) 2019 rexy712
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "raii/rjp_iterator.hpp"
|
||||
|
||||
namespace raii{
|
||||
|
||||
rjp_object_iterator& rjp_object_iterator::operator++(void){
|
||||
m_value = rjp_next_member(m_value);
|
||||
return *this;
|
||||
}
|
||||
rjp_array_iterator& rjp_array_iterator::operator++(void){
|
||||
m_value = rjp_next_element(m_value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
}
|
||||
25
src/raii/rjp_ptr.cpp
Normal file
25
src/raii/rjp_ptr.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
/**
|
||||
This file is a part of r0nk, atlas_moon, and rexy's matrix client
|
||||
Copyright (C) 2019 rexy712
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "raii/rjp_ptr.hpp"
|
||||
|
||||
namespace raii::detail{
|
||||
void rjp_tree_deleter::internal_free_value(RJP_value* v){
|
||||
rjp_free_value(v);
|
||||
}
|
||||
}
|
||||
@ -19,6 +19,20 @@
|
||||
#include "raii/rjp_string.hpp"
|
||||
|
||||
namespace raii{
|
||||
namespace detail{
|
||||
void rjp_allocator::free(void* data){
|
||||
rjp_free(data);
|
||||
}
|
||||
void* rjp_allocator::allocate(size_t size){
|
||||
return rjp_alloc(size);
|
||||
}
|
||||
void* rjp_allocator::copy(const void* data, size_t len){
|
||||
char* tmp = reinterpret_cast<char*>(allocate(len));
|
||||
memcpy(tmp, data, len-1);
|
||||
tmp[len-1] = 0;
|
||||
return tmp;
|
||||
}
|
||||
}
|
||||
rjp_string rjp_string_from_key(RJP_value* val){
|
||||
char* key = rjp_member_name(val);
|
||||
size_t len = rjp_member_name_length(val);
|
||||
|
||||
50
util/matrix-send.cpp
Normal file
50
util/matrix-send.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
/**
|
||||
This file is a part of r0nk, atlas_moon, and rexy's matrix client
|
||||
Copyright (C) 2019 rexy712
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "matrix/matrix.hpp"
|
||||
#include "raii/static_string.hpp"
|
||||
|
||||
#include <cstdlib> //exit
|
||||
|
||||
[[noreturn]] void usage(int status){
|
||||
printf("Usage: matrix-send STRING\n");
|
||||
printf("\tSends message to designated room as the designated user\n");
|
||||
exit(status);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv){
|
||||
const char* username = "username";
|
||||
const char* password = "password";
|
||||
const char* useragent = "rexy712s test bot";
|
||||
const char* homeserver = "matrix.org";
|
||||
const char* roomid = "!roomid:matrix.org";
|
||||
matrix::auth_data auth{username, password, homeserver, useragent};
|
||||
|
||||
if(argc < 2)
|
||||
usage(1);
|
||||
|
||||
matrix::session ses(auth);
|
||||
if(!ses.valid()){
|
||||
fprintf(stderr, "Failed to init matrix session!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto client = ses.spawn_client();
|
||||
auto room = client.spawn_room(raii::static_string(roomid));
|
||||
room.send_message(raii::static_string(argv[1]));
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user