diff options
-rw-r--r-- | Makefile | 62 | ||||
-rw-r--r-- | archive.h | 29 | ||||
-rw-r--r-- | common.mk | 53 | ||||
-rw-r--r-- | http.cpp | 18 | ||||
-rw-r--r-- | https.cpp | 12 | ||||
-rw-r--r-- | libcommon/Makefile | 79 | ||||
-rw-r--r-- | libcommon/tempfile.cpp | 11 | ||||
-rw-r--r-- | plugins/cgi/Makefile | 73 | ||||
-rw-r--r-- | plugins/fcgi/Makefile | 68 | ||||
-rw-r--r-- | plugins/redirect/Makefile | 72 | ||||
-rw-r--r-- | plugins/static-files/Makefile | 73 | ||||
-rw-r--r-- | plugins/statistics/Makefile | 74 | ||||
-rw-r--r-- | plugins/webbox/Makefile | 80 | ||||
-rw-r--r-- | plugins/weblog/Makefile | 76 | ||||
-rw-r--r-- | statistics.cpp | 2 | ||||
-rw-r--r-- | tests/Makefile | 57 |
16 files changed, 208 insertions, 631 deletions
@@ -1,5 +1,8 @@ -DISTROS=debian10 ubuntu1910 ubuntu2004 +include common.mk + VERSION=$(shell dpkg-parsechangelog --show-field Version) + +DISTROS=debian10 ubuntu1910 ubuntu2004 PROJECTNAME=webserver PLUGINS= \ cgi \ @@ -10,37 +13,9 @@ PLUGINS= \ webbox \ weblog -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +CXXFLAGS+=-fPIE -DVERSION=\"$(VERSION)\" -ifeq ($(shell which $(CXX)),) -CXX=g++ -endif - -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage - -CXXFLAGS+=-Wall -I. -DVERSION=\"$(VERSION)\" -fPIE - -CXXFLAGS+=-pthread -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif - -LIBS=\ +LDLIBS+=\ -lcommon \ -lboost_context \ -lboost_filesystem \ @@ -56,20 +31,6 @@ LIBS=\ #-lboost_thread \ #-lboost_regex \ -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - LDFLAGS+=-pie -Llibcommon PROGSRC=\ @@ -87,8 +48,7 @@ PROGSRC=\ SRC=$(PROGSRC) webserver.cpp -build: $(PROJECTNAME) - +set -e ; for i in $(PLUGINS) ; do make -C plugins/$$i ; done +build: $(PROJECTNAME) $(PLUGINS) all: build ./webserver -c webserver.conf @@ -99,6 +59,9 @@ $(PROJECTNAME): libcommon/libcommon.a $(SRC:.cpp=.o) libcommon/libcommon.a: $(MAKE) -C libcommon +$(PLUGINS): + cd plugins/$@ && $(MAKE) + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -146,7 +109,7 @@ debs: $(DISTROS) clean: -rm -f $(PROJECTNAME) -rm -f plugins/*.so - -find . -name '*.o' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f + -find . -name '*.o' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' -o -name '*.so' | xargs rm -f #for i in $(PLUGINS) ; do $(MAKE) -C plugins/$$i clean ; done for i in libcommon tests ; do $(MAKE) -C $$i clean ; done @@ -182,6 +145,7 @@ DISTFILES= \ README.txt \ LICENSE.txt \ Makefile \ + common.mk \ googletest \ googlemock \ debian/changelog \ @@ -253,6 +217,6 @@ dist: clean rm -rf $(PROJECTNAME)-$(VERSION) ls -l ../$(PROJECTNAME)-$(VERSION).tar.xz -.PHONY: clean all zip test install deb deb-src debs all $(DISTROS) +.PHONY: clean all zip test install deb deb-src debs all $(DISTROS) $(PLUGINS) -include $(wildcard $(SRC:.cpp=.d)) @@ -5,6 +5,7 @@ #include <cstdint> #include <ostream> +#include <iostream> #include <istream> #include <sstream> #include <string> @@ -103,8 +104,18 @@ public: { // in coroutine case, wait for input, if necessary if (mCoro && mStringStream) { - while (mStringStream->tellp() - mStringStream->tellg() < sizeof(v)) { - (*mCoro)(); + while (true) { + auto pindex {mStringStream->tellp()}; + auto gindex {mStringStream->tellg()}; + if (pindex != std::stringstream::pos_type(-1) && gindex != std::stringstream::pos_type(-1) && pindex > gindex) { + if (static_cast<size_t>(pindex - gindex) < sizeof(v)) + (*mCoro)(); + else + break; + } else { + std::cerr << "Error: read_fundamental: Bad stringstream indices: " << pindex << ", " << gindex << std::endl; + break; + } } } @@ -153,8 +164,18 @@ public: // in coroutine case, wait for input, if necessary if (mCoro && mStringStream) { - while (mStringStream->tellp() - mStringStream->tellg() < size) { - (*mCoro)(); + while (true) { + auto pindex {mStringStream->tellp()}; + auto gindex {mStringStream->tellg()}; + if (pindex != std::stringstream::pos_type(-1) && gindex != std::stringstream::pos_type(-1) && pindex > gindex) { + if (static_cast<uint32_t>(pindex - gindex) < size) + (*mCoro)(); + else + break; + } else { + std::cerr << "Error: read_bytes_vector: Bad stringstream indices: " << pindex << ", " << gindex << std::endl; + break; + } } } diff --git a/common.mk b/common.mk new file mode 100644 index 0000000..0ce4df8 --- /dev/null +++ b/common.mk @@ -0,0 +1,53 @@ +CXX=g++-10 +#CXX=clang++-10 + +ifeq ($(shell which $(CXX)),) +CXX=g++-8 +endif + +ifeq ($(shell which $(CXX)),) +CXX=clang++ +endif + +ifeq ($(shell which $(CXX)),) +CXX=g++-10 +endif + +ifeq ($(shell which $(CXX)),) +CXX=g++-9 +endif + +ifeq ($(shell which $(CXX)),) +CXX=g++ +endif + +#ifeq ($(CXXFLAGS),) +#CXXFLAGS=-O2 -DNDEBUG +CXXFLAGS=-O0 -g -D_DEBUG +#endif +# -fprofile-instr-generate -fcoverage-mapping +# gcc:--coverage + +CXXFLAGS+=-Wall -I. + +CXXFLAGS+=-pthread +ifeq ($(CXX),clang++-10) +CXXFLAGS+=-std=c++20 #-stdlib=libc++ +else +CXXFLAGS+=-std=c++17 +endif + +ifeq ($(CXX),clang++-10) +LIBS+= \ +-fuse-ld=lld-10 \ +-lstdc++ +#-lc++ \ +#-lc++abi +#-lc++fs +#-lstdc++fs +else +LIBS+= \ +-lstdc++ \ +-lstdc++fs +endif + @@ -40,8 +40,7 @@ namespace { //------------------------------------------------------------------------------ // Report a failure -void -fail(beast::error_code ec, char const* what) +void fail(beast::error_code ec, char const* what) { std::cerr << what << ": " << ec.message() << "\n"; } @@ -59,7 +58,7 @@ class session : public std::enable_shared_from_this<session> Server& m_server; std::optional<http::request_parser<http::string_body>> parser_; request_type req_; - std::shared_ptr<response_type> res_; + std::shared_ptr<response_type> res_; // std::shared_ptr<void> ? void handle_request(::Server& server, request_type&& req) { @@ -116,8 +115,7 @@ public: } // Start the asynchronous operation - void - run() + void run() { // We need to be executing within a strand to perform async operations // on the I/O objects in this session. @@ -131,8 +129,7 @@ public: #endif } - void - do_read() + void do_read() { // Make the request empty before reading, // otherwise the operation behavior is undefined. @@ -179,10 +176,13 @@ public: boost::ignore_unused(bytes_transferred); // This means they closed the connection - if(ec == http::error::end_of_stream) + if (ec == http::error::end_of_stream) return do_close(); - if(ec) + if (ec == http::error::partial_message) + return; // ignore + + if (ec) return fail(ec, "read"); req_ = parser_->get(); @@ -46,8 +46,7 @@ namespace { //------------------------------------------------------------------------------ // Report a failure -void -fail( +void fail( #ifdef BOOST_LATEST beast::error_code ec, #else @@ -94,7 +93,7 @@ class session : public std::enable_shared_from_this<session> Server& m_server; std::optional<http::request_parser<http::string_body>> parser_; // need to reset parser every time, no other mechanism currently http::request<http::string_body> req_; - std::shared_ptr<response_type> res_; + std::shared_ptr<response_type> res_; // std::shared_ptr<void> void handle_request(::Server& server, request_type&& req) { @@ -253,10 +252,13 @@ public: boost::ignore_unused(bytes_transferred); // This means they closed the connection - if(ec == http::error::end_of_stream) + if (ec == http::error::end_of_stream) return do_close(); - if(ec) + if (ec == http::error::partial_message) + return; // ignore + + if (ec) return fail(ec, "https read"); req_ = parser_->get(); diff --git a/libcommon/Makefile b/libcommon/Makefile index ab76ed1..d3d781d 100644 --- a/libcommon/Makefile +++ b/libcommon/Makefile @@ -1,60 +1,10 @@ # Static library to be included both in main program an in plugins (.so) -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=libcommon - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage - -CXXFLAGS+= -Wall -I. - -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif - -LIBS=\ --lboost_context \ --lboost_coroutine \ --lboost_program_options \ --lboost_system \ --lboost_thread \ --lboost_filesystem \ --lboost_regex \ --lpthread \ --lssl -lcrypto \ --ldl +PROJECTNAME=libcommon -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif +CXXFLAGS+= -fvisibility=hidden -fPIC PROGSRC=\ file.cpp \ @@ -79,29 +29,10 @@ $(PROJECTNAME).a: $(SRC:.cpp=.o) ADD_DEP=Makefile - # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: + -rm -f *.o *.a *.d -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - - -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean all install -include $(wildcard $(SRC:.cpp=.d)) diff --git a/libcommon/tempfile.cpp b/libcommon/tempfile.cpp index 5d3a086..c30bb57 100644 --- a/libcommon/tempfile.cpp +++ b/libcommon/tempfile.cpp @@ -1,5 +1,9 @@ #include "tempfile.h" +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + #include <iostream> namespace fs = std::filesystem; @@ -12,7 +16,12 @@ fs::path Tempfile::GetPath() const Tempfile::Tempfile() { try { - m_path = std::string{tmpnam(NULL)} + ".zip"s; + char name[] = "/tmp/tempfileXXXXXX.zip"; + int fd = mkstemps(name, 4); + if (fd == -1) + std::runtime_error("mkstemps: "s + strerror(errno)); + close(fd); + m_path = std::string{name}; } catch (const std::exception& ex) { throw std::runtime_error("Tempfile error: "s + ex.what()); } diff --git a/plugins/cgi/Makefile b/plugins/cgi/Makefile index 2d86c50..df51e89 100644 --- a/plugins/cgi/Makefile +++ b/plugins/cgi/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=cgi - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=cgi -CXXFLAGS+= -Wall -I. -I ../.. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lcommon \ -lboost_context \ -lboost_coroutine \ @@ -41,21 +19,7 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - -LDFLAGS=-L../../libcommon +LDFLAGS+=-L../../libcommon PROGSRC=\ cgi.cpp @@ -67,6 +31,9 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: ../../libcommon/libcommon.a $(SRC:.cpp=.o) $(CXX) $(LDFLAGS) $^ -shared $(LDLIBS) $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -82,27 +49,9 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: + -rm -f *.o *.so *.d -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - - -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean install all -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/fcgi/Makefile b/plugins/fcgi/Makefile index 8937689..d3b8ed1 100644 --- a/plugins/fcgi/Makefile +++ b/plugins/fcgi/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=fcgi - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif +include ../../common.mk -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif - -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=fcgi -CXXFLAGS+= -Wall -I. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lboost_context \ -lboost_coroutine \ -lboost_program_options \ @@ -40,19 +18,7 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif +LDFLAGS+=-L../../libcommon PROGSRC=\ fcgi.cpp \ @@ -66,6 +32,9 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: $(SRC:.cpp=.o) $(CXX) $(CXXFLAGS) $^ -shared $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -81,27 +50,12 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ debs: $(DISTROS) clean: + -rm -f *.o *.so *.d -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - - -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean install all -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/redirect/Makefile b/plugins/redirect/Makefile index 77b496b..344aa91 100644 --- a/plugins/redirect/Makefile +++ b/plugins/redirect/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=redirect - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif +include ../../common.mk -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif - -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=redirect -CXXFLAGS+= -Wall -I. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lboost_context \ -lboost_coroutine \ -lboost_program_options \ @@ -40,19 +18,7 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif +LDFLAGS+=-L../../libcommon PROGSRC=\ redirect.cpp @@ -64,6 +30,9 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: $(SRC:.cpp=.o) $(CXX) $(CXXFLAGS) $^ -shared $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -75,29 +44,10 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) clean: - -rm -f $(PROJECTNAME) - -find . -name '*.o' -o -name '*.so' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f - -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - + -rm -f *.o *.so *.d -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean install all -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/static-files/Makefile b/plugins/static-files/Makefile index 9834e96..f4cfb31 100644 --- a/plugins/static-files/Makefile +++ b/plugins/static-files/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=static-files - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=static-files -CXXFLAGS+= -Wall -I. -I../.. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lcommon \ -lboost_context \ -lboost_coroutine \ @@ -41,20 +19,6 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - LDFLAGS=-L../../libcommon PROGSRC=\ @@ -67,6 +31,9 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: ../../libcommon/libcommon.a $(SRC:.cpp=.o) $(CXX) $(LDFLAGS) $^ -shared $(LDLIBS) $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -82,29 +49,9 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: - -rm -f $(PROJECTNAME) - -find . -name '*.o' -o -name '*.so' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f - -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - + -rm -f *.o *.so *.d -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean all install -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/statistics/Makefile b/plugins/statistics/Makefile index 2a0d246..8e8a6f7 100644 --- a/plugins/statistics/Makefile +++ b/plugins/statistics/Makefile @@ -1,34 +1,13 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=statistics - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=statistics -CXXFLAGS+= -Wall -I. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ +-lcommon \ -lboost_context \ -lboost_coroutine \ -lboost_program_options \ @@ -40,19 +19,7 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif +LDFLAGS=-L../../libcommon PROGSRC=\ statistics.cpp @@ -64,6 +31,9 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: $(SRC:.cpp=.o) $(CXX) $(CXXFLAGS) $^ -shared $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< @@ -75,29 +45,9 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: - -rm -f $(PROJECTNAME) - -find . -name '*.o' -o -name '*.so' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f - -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - + -rm -f *.o *.so *.d -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean all install -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/webbox/Makefile b/plugins/webbox/Makefile index 861b5d4..39a2c8c 100644 --- a/plugins/webbox/Makefile +++ b/plugins/webbox/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=webbox - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=webbox -CXXFLAGS+= -Wall -I. -I../.. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lcommon \ -lboost_context \ -lboost_coroutine \ @@ -41,21 +19,7 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - -LDFLAGS+=-L../../libcommon +LDFLAGS=-L../../libcommon PROGSRC=\ webbox.cpp @@ -67,12 +31,19 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: ../../libcommon/libcommon.a $(SRC:.cpp=.o) $(CXX) $(LDFLAGS) $^ -shared $(LDLIBS) $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< %.o: %.cpp %.d $(CXX) $(CXXFLAGS) -c $< -o $@ +# dependencies + +ADD_DEP=Makefile + install: mkdir -p $(DESTDIR)/usr/lib/webserver/plugins cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins @@ -84,31 +55,10 @@ install: htmlmin html/index.html $(DESTDIR)/usr/lib/webbox/html/index.html cleancss -o $(DESTDIR)/usr/lib/webbox/html/webbox.css html/webbox.css - # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: - -rm -f $(PROJECTNAME) - -find . -name '*.o' -o -name '*.so' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f - -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - + -rm -f *.o *.so *.d -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean all install -include $(wildcard $(SRC:.cpp=.d)) diff --git a/plugins/weblog/Makefile b/plugins/weblog/Makefile index a21b464..ca62ce8 100644 --- a/plugins/weblog/Makefile +++ b/plugins/weblog/Makefile @@ -1,34 +1,12 @@ -DISTROS=debian10 -VERSION=$(shell dpkg-parsechangelog --show-field Version) -PROJECTNAME=weblog - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../../common.mk -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage +PROJECTNAME=weblog -CXXFLAGS+= -Wall -I. -I../.. +CXXFLAGS+= -fvisibility=hidden -fPIC -CXXFLAGS+= -pthread -fvisibility=hidden -fPIC -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I../.. -LIBS=\ +LDLIBS=\ -lcommon \ -lboost_context \ -lboost_coroutine \ @@ -41,20 +19,6 @@ LIBS=\ -lssl -lcrypto \ -ldl -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - LDFLAGS=-L../../libcommon PROGSRC=\ @@ -67,15 +31,15 @@ all: $(PROJECTNAME).so $(PROJECTNAME).so: ../../libcommon/libcommon.a $(SRC:.cpp=.o) $(CXX) $(LDFLAGS) $^ -shared $(LDLIBS) $(LIBS) -o $@ +../../libcommon/libcommon.a: + cd ../.. && $(MAKE) libcommon/libcommon.a + %.d: %.cpp $(CXX) $(CXXFLAGS) -MM -MP -MF $@ -c $< %.o: %.cpp %.d $(CXX) $(CXXFLAGS) -c $< -o $@ -googletest/src/%.o: googletest/src/%.cc - $(CXX) $(CXXFLAGS) -c $< -o $@ - # dependencies ADD_DEP=Makefile @@ -85,29 +49,9 @@ install: cp $(PROJECTNAME).so $(DESTDIR)/usr/lib/webserver/plugins # misc --------------------------------------------------- -deb: - # build binary deb package - dpkg-buildpackage -us -uc -rfakeroot - -deb-src: - dpkg-source -b . - -$(DISTROS): deb-src - sudo pbuilder build --basetgz /var/cache/pbuilder/$@.tgz --buildresult result/$@ ../webserver_$(VERSION).dsc ; \ - -debs: $(DISTROS) - clean: - -rm -f test-$(PROJECTNAME) $(PROJECTNAME) - -find . -name '*.o' -o -name '*.so' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f - -zip: clean - -rm -f ../$(PROJECTNAME).zip - zip -r ../$(PROJECTNAME).zip * - ls -l ../$(PROJECTNAME).zip - - + -rm -f *.o *.so *.d -.PHONY: clean all zip install deb deb-src debs all $(DISTROS) +.PHONY: clean install all -include $(wildcard $(SRC:.cpp=.d)) diff --git a/statistics.cpp b/statistics.cpp index 3fb99a3..6138cca 100644 --- a/statistics.cpp +++ b/statistics.cpp @@ -57,7 +57,7 @@ Statistics::~Statistics() bool Statistics::Bin::expired() const { - auto now {time(nullptr)}; + uint64_t now {static_cast<uint64_t>(time(nullptr))}; if (now < start_time) std::runtime_error("Statistics time is in the future"); diff --git a/tests/Makefile b/tests/Makefile index 2bccae4..2f0e809 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,35 +1,8 @@ -DISTROS=debian10 ubuntu1910 ubuntu2004 -PROJECTNAME=test-webserver - -CXX=clang++-10 - -ifeq ($(shell which $(CXX)),) -CXX=clang++ -endif - -ifeq ($(shell which $(CXX)),) -CXX=g++-9 -endif +include ../common.mk -ifeq ($(shell which $(CXX)),) -CXX=g++ -endif - -ifeq ($(CXXFLAGS),) -#CXXFLAGS=-O2 -DNDEBUG -CXXFLAGS=-O0 -g -D_DEBUG -endif -# -fprofile-instr-generate -fcoverage-mapping -# gcc:--coverage - -CXXFLAGS+= -Wall -I. -fPIE +PROJECTNAME=test-webserver -CXXFLAGS+= -pthread -ifeq ($(CXX),clang++-10) -CXXFLAGS+=-std=c++20 #-stdlib=libc++ -else -CXXFLAGS+=-std=c++17 -endif +CXXFLAGS+= -I. -fPIE CXXTESTFLAGS=-I../googletest/include -I../googlemock/include/ -I../googletest -I../googlemock @@ -44,25 +17,6 @@ LIBS=\ -lssl -lcrypto \ -ldl -#-lboost_coroutine \ -#-lboost_program_options \ -#-lboost_thread \ -#-lboost_regex \ - -ifeq ($(CXX),clang++-10) -LIBS+= \ --fuse-ld=lld-10 \ --lstdc++ -#-lc++ \ -#-lc++abi -#-lc++fs -#-lstdc++fs -else -LIBS+= \ --lstdc++ \ --lstdc++fs -endif - LDFLAGS+=-pie -L../libcommon TESTSRC=\ @@ -104,9 +58,8 @@ install: # misc --------------------------------------------------- clean: - -rm -f $(PROJECTNAME) - -find . -name '*.o' -o -name '*.d' -o -name '*.gcno' -o -name '*.gcda' | xargs rm -f + -rm -f *.o *.a *.d $(PROJECTNAME) -.PHONY: clean all install all $(DISTROS) +.PHONY: clean all install -include $(wildcard $(TESTSRC:.cpp=.d)) |