SpectrumIM / spectrum2

Spectrum 2 IM transports
https://spectrum.im
408 stars 91 forks source link

building from source on FreeBSD: `error: redefinition of 'DummyConnectionServerFactory'` #404

Closed petermolnar closed 3 years ago

petermolnar commented 3 years ago

Dear spectrum team,

I've been struggling to build swiften and spectrum2 on FreeBSD, and I'm out of ideas. Any help would be welcome.

got hold of swiften by:

git clone https://swift.im/git/swift
cd swift
git checkout swift-4.x
./scons V=1 swiften_dll=1 Swiften SWIFTEN_INSTALLDIR=/usr/local boost_includedir=/usr/local/include boost_libdir=/usr/local/lib libidn_libdir=/usr/local/lib libidn_includedir=/usr/local/include libminiupnpc_libdir=/usr/local/lib libminiupnpc_includedir=/usr/local/include force-configure=1 /usr/local

but when it comes to spectrum I get a error: redefinition of 'DummyConnectionServerFactory'.

Details:

git clone https://github.com/SpectrumIM/spectrum2
cd spectrum2
cmake . -DENABLE_MYSQL=OFF -DENABLE_PQXX=OFF -DENABLE_FROTZ=OFF -DENABLE_IRC=OFF -DENABLE_SMSTOOLS3=OFF -DENABLE_TWITTER=OFF -DENABLE_DOCS=OFF

output:

-- Variables to override default places where to find libraries:
-- |- cppunit : -DCPPUNIT_INCLUDE_DIR,  -DCPPUNIT_LIBRARY
-- |- swiften : -DSWIFTEN_INCLUDE_DIR,  -DSWIFTEN_LIBRARY
--   |- zlib  :                         -DZLIB_LIBRARY
--   |- expat :                         -DEXPAT_LIBRARY
--   |-libidn :                         -DLIBIDN_LIBRARY
--   |-libxml :                         -DLIBXML_LIBRARY
-- |- boost   : -DBOOST_INCLUDEDIR,     -DBOOST_LIBRARYDIR
-- |- protobuf: -DPROTOBUF_INCLUDE_DIR, -DPROTOBUF_LIBRARY
--            : -DPROTOBUF_PROTOC_EXECUTABLE
-- |- log4cxx : -DLOG4CXX_INCLUDE_DIR,  -DLOG4CXX_LIBRARIES
-- |- purple  : -DPURPLE_INCLUDE_DIR,   -DPURPLE_LIBRARY
--            : -DPURPLE_NOT_RUNTIME - enables compilation with libpurple.lib
-- |- pgxx    : -DPQXX_INCLUDE_DIR,     -DPQXX_LIBRARY
-- |- irc     : -DIRC_INCLUDE_DIR,      -DIRC_LIBRARY
-- Found libSwiften: -L../../Swiften;-L/usr/local/lib;-L/usr/local/lib;-lSwiften;-lboost_system;-lboost_thread;-lboost_regex;-lboost_program_options;-lboost_filesystem;-lboost_serialization;-lboost_date_time;-lidn;-lz;-lssl;-lcrypto;-lpthread;-ldl;-lm;-lc;-lstdc++, /usr/local/include
-- Found Boost: /usr/local/lib/libboost_program_options.so;/usr/local/lib/libboost_date_time.so;/usr/local/lib/libboost_system.so;/usr/local/lib/libboost_filesystem.so;/usr/local/lib/libboost_regex.so;/usr/local/lib/libboost_thread.so;/usr/local/lib/libboost_locale.so, /usr/local/include
-- Found Boost: 107200, /usr/local/lib/libboost_program_options.so;/usr/local/lib/libboost_date_time.so;/usr/local/lib/libboost_system.so;/usr/local/lib/libboost_filesystem.so;/usr/local/lib/libboost_regex.so;/usr/local/lib/libboost_thread.so;/usr/local/lib/libboost_locale.so, /usr/local/include
-- Using BOOST_FILESYSTEM_VERSION=3
-- Found popt: /usr/local/lib/libpopt.so, /usr/local/include
-- Found libpurple: /usr/local/lib/libpurple.so, /usr/local/include/libpurple
-- Found Event: /usr/local/lib/libev.so /usr/local/include
-- Found jsoncpp: /usr/local/include /usr/local/lib/libjsoncpp.so, shared: 
-- Found Event: /usr/local/lib/libev.so /usr/local/include
-- Found log4cxx: /usr/local/lib/liblog4cxx.so, /usr/local/include/usr/local/include
  Supported features
-----------------------
Version           : 2.0.x-git-cfaf1e74
SQLite3           : yes
MySQL             : no (user disabled)
PostgreSQL        : no (user disabled)
Network plugins   : yes
Libpurple plugin  : yes
  libev eventloop : yes
IRC plugin        : no (user disabled)
Twitter plugin    : no (user disabled)
Frotz plugin      : no (user disabled)
SMSTools3 plugin  : no (user disabled)
Swiften plugin    : yes
Log4cxx           : yes
Debug             : yes
Tests             : no (user disabled)
Documentation     : no (user disabled)
----------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/spectrum2
make -j6

output (second build run):

[  1%] Built target pb
[  1%] Built target pb-python
[  2%] Building CXX object plugin/cpp/CMakeFiles/transport-plugin.dir/__/__/libtransport/Util.cpp.o
[  3%] Linking CXX shared library libtransport-plugin.so
[  7%] Built target transport-plugin
[  9%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServerFactory.cpp.o
[  9%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/GatewayPayloadParser.cpp.o
[ 10%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServer.cpp.o
[ 11%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/AttentionParser.cpp.o
[ 12%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/InvisibleParser.cpp.o
[ 12%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/HintPayloadParser.cpp.o
[ 13%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/MUCPayloadParser.cpp.o
[ 14%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/PrivilegeParser.cpp.o
[ 15%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/StatsParser.cpp.o
[ 15%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/PayloadParsers/XHTMLIMParser.cpp.o
/opt/spectrum2/include/Swiften/Network/DummyConnectionServerFactory.cpp:12:31: error: redefinition of 'DummyConnectionServerFactory'
DummyConnectionServerFactory::DummyConnectionServerFactory(EventLoop* eventLoop) : eventLoop(eventLoop) {
                              ^
/usr/local/include/Swiften/Network/DummyConnectionServerFactory.h:20:5: note: previous definition is here
    DummyConnectionServerFactory(EventLoop* eventLoop) : eventLoop(eventLoop) {}
    ^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServerFactory.cpp:15:65: error: redefinition of 'createConnectionServer'
std::shared_ptr<ConnectionServer> DummyConnectionServerFactory::createConnectionServer(int port) {
                                                                ^
/usr/local/include/Swiften/Network/DummyConnectionServerFactory.h:23:47: note: previous definition is here
    virtual std::shared_ptr<ConnectionServer> createConnectionServer(int port) {
                                              ^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:17:24: error: out-of-line definition of 'DummyConnectionServer' does not match any declaration in 'Swift::DummyConnectionServer'
DummyConnectionServer::DummyConnectionServer(EventLoop* eventLoop) : eventLoop(eventLoop) {
                       ^~~~~~~~~~~~~~~~~~~~~
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:17:70: error: member initializer 'eventLoop' does not name a non-static data member or base class
DummyConnectionServer::DummyConnectionServer(EventLoop* eventLoop) : eventLoop(eventLoop) {
                                                                     ^~~~~~~~~~~~~~~~~~~~
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:20:29: error: redefinition of 'start'
void DummyConnectionServer::start() {
                            ^
/usr/local/include/Swiften/Network/DummyConnectionServer.h:32:26: note: previous definition is here
            virtual void start() {
                         ^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:24:29: error: redefinition of 'stop'
void DummyConnectionServer::stop() {
                            ^
/usr/local/include/Swiften/Network/DummyConnectionServer.h:36:26: note: previous definition is here
            virtual void stop() {
                         ^
[ 16%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Parser/StringTreeParser.cpp.o
/opt/spectrum2/include/Swiften/Network/DummyConnectionServerFactory.cpp:16:32: error: no member named 'create' in 'Swift::DummyConnectionServer'
        return DummyConnectionServer::create(eventLoop);
               ~~~~~~~~~~~~~~~~~~~~~~~^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServerFactory.cpp:19:65: error: redefinition of 'createConnectionServer'
std::shared_ptr<ConnectionServer> DummyConnectionServerFactory::createConnectionServer(const Swift::HostAddress &hostAddress, int port) {
                                                                ^
/usr/local/include/Swiften/Network/DummyConnectionServerFactory.h:27:47: note: previous definition is here
    virtual std::shared_ptr<ConnectionServer> createConnectionServer(const Swift::HostAddress& hostAddress, int port) {
                                              ^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:28:29: error: out-of-line definition of 'acceptConnection' does not match any declaration in 'Swift::DummyConnectionServer'
void DummyConnectionServer::acceptConnection(std::shared_ptr<Swift::Connection> connection) {
                            ^~~~~~~~~~~~~~~~
/opt/spectrum2/include/Swiften/Network/DummyConnectionServerFactory.cpp:20:32: error: no member named 'create' in 'Swift::DummyConnectionServer'
        return DummyConnectionServer::create(eventLoop);
               ~~~~~~~~~~~~~~~~~~~~~~~^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:29:3: error: use of undeclared identifier 'eventLoop'
                eventLoop->postEvent(
                ^
/opt/spectrum2/include/Swiften/Network/DummyConnectionServer.cpp:35:40: error: redefinition of 'getAddressPort'
HostAddressPort DummyConnectionServer::getAddressPort() const {
                                       ^
/usr/local/include/Swiften/Network/DummyConnectionServer.h:24:37: note: previous definition is here
            virtual HostAddressPort getAddressPort() const {
                                    ^
[ 17%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Serializer/PayloadSerializers/AttentionSerializer.cpp.o
[ 18%] Building CXX object libtransport/CMakeFiles/transport.dir/__/include/Swiften/Serializer/PayloadSerializers/GatewayPayloadSerializer.cpp.o
7 errors generated.
--- libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServer.cpp.o ---
*** [libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServer.cpp.o] Error code 1

make[2]: stopped in /opt/spectrum2
5 errors generated.
--- libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServerFactory.cpp.o ---
*** [libtransport/CMakeFiles/transport.dir/__/include/Swiften/Network/DummyConnectionServerFactory.cpp.o] Error code 1

make[2]: stopped in /opt/spectrum2
2 errors

make[2]: stopped in /opt/spectrum2
--- libtransport/CMakeFiles/transport.dir/all ---
*** [libtransport/CMakeFiles/transport.dir/all] Error code 2

make[1]: stopped in /opt/spectrum2
1 error

make[1]: stopped in /opt/spectrum2
*** [all] Error code 2

make: stopped in /opt/spectrum2
1 error

make: stopped in /opt/spectrum2
vitalyster commented 3 years ago

It's a known issue: in some environments private DummyConnectionServer* files are wrongly installed to DESTDIR (they should not and did not installed in linux build), just delete them, see https://github.com/SpectrumIM/spectrum2/blob/master/.github/workflows/main.yml#L44