twinkle icon indicating copy to clipboard operation
twinkle copied to clipboard

Make sure to call `include_directories()` for all CMake packages

Open fbriere opened this issue 3 years ago • 6 comments

Closes #304

fbriere avatar Oct 19 '22 18:10 fbriere

Thanks @fbriere. Using your branch, Getting

In file included from /usr/local/include/commoncpp/address.h:52:
/usr/local/include/commoncpp/thread.h:448:10: warning: 'exit' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    void exit(void);
         ^
/usr/local/include/ucommon/thread.h:759:18: note: overridden virtual function is here            
    virtual void exit(void);
                 ^
/tmp/twinkle/src/call_script.cpp:159:19: error: use of undeclared identifier 'environ'           
                for (int i = 0; environ[i] != NULL; i++) {
                                ^
/tmp/twinkle/src/call_script.cpp:246:19: error: use of undeclared identifier 'environ'           
                for (int i = 0; environ[i] != NULL; i++) {
                                ^
/tmp/twinkle/src/call_script.cpp:247:20: error: use of undeclared identifier 'environ'           
                        env[i] = strdup(environ[i]);
                                        ^
5 warnings and 3 errors generated.                                                               
make[2]: *** [src/CMakeFiles/libtwinkle.dir/build.make:132: src/CMakeFiles/libtwinkle.dir/call_script.cpp.o] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:352: src/CMakeFiles/libtwinkle.dir/all] Fehler 2
make: *** [Makefile:136: all] Fehler 2

probonopd avatar Oct 19 '22 18:10 probonopd

/usr/local/include/commoncpp/thread.h:448:10: warning: 'exit' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]

Note that this warning (unique to clang, though I'm somehow unable to trigger it myself) highlights an issue found in commoncpp. Given how that project's development has been stalled for several years, I wouldn't count on it being fixed any time soon. :smirk:

/tmp/twinkle/src/call_script.cpp:159:19: error: use of undeclared identifier 'environ'           

Funny, I just ran into the very same issue yesterday for a totally unrelated project. (And this time, I actually took the time to figure out what it meant. :smile:)

I have now submitted a fix with #306. (Note that if you want to test it, you'll probably need to merge both branches at the moment. Or, since #306 only adds a single line, you can insert it yourself manually on top of this branch.)

fbriere avatar Oct 19 '22 21:10 fbriere

On FreeBSD, had to replace ulong with unsigned long in src/parser/parser.yxx.

Had to add in src/threads/mutex.cpp

#if __BSD_VISIBLE
const int PTHREAD_MUTEX_RECURSIVE_NP = 2;
#endif

It now compiles all the way, but at the linking stage fails with

ld: error: unable to find library -latomic
ld: error: unable to find library -lresolv
c++: error: linker command failed with exit code 1 (use -v to see invocation)

Linux has the libresolv library but FreeBSD doesn't. The correct fix would probably be to make CMake properly detect if the system has a libresolv library or not. But I don't know how to do this correctly...

probonopd avatar Oct 20 '22 06:10 probonopd

On FreeBSD, had to replace ulong with unsigned long in src/parser/parser.yxx.

Good catch. I also found some uints in the GUI code, and submitted #307 to replace them all.

const int PTHREAD_MUTEX_RECURSIVE_NP = 2;

Better yet, we can just ditch that old LinuxThreads relic and use the standard POSIX non-_NP name (#308).

ld: error: unable to find library -latomic
ld: error: unable to find library -lresolv

Could you try removing both libraries from twinkle/CMakeLists.txt and see if the linking now succeeds?

I suspect that libatomic (provided by gcc) will still be required, as even Clang 15 does not seem to be able to handle this on its own. I'll wait for your feedback before taking care of both libraries at the same time.

fbriere avatar Oct 20 '22 14:10 fbriere

When I do that, I get

[ 70%] Linking CXX executable twinkle-console
ld: error: undefined symbol: gsm_create()
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::t_gsm_audio_decoder(t_user*))
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::t_gsm_audio_encoder(unsigned short, unsigned short, t_user*))
>>> did you mean: extern "C" gsm_create
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_create.cpp.o

ld: error: undefined symbol: gsm_destroy(gsm_state*)
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::~t_gsm_audio_decoder())
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::~t_gsm_audio_encoder())
>>> did you mean: extern "C" gsm_destroy
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o

ld: error: undefined symbol: gsm_decode(gsm_state*, unsigned char*, short*)
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::decode(unsigned char*, unsigned short, short*, unsigned short))

ld: error: undefined symbol: gsm_encode(gsm_state*, short*, unsigned char*)
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::encode(short*, unsigned short, unsigned char*, unsigned short, bool&))
c++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/twinkle-console.dir/build.make:478: src/twinkle-console] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:391: src/CMakeFiles/twinkle-console.dir/all] Fehler 2
make: *** [Makefile:136: all] Fehler 2

probonopd avatar Oct 20 '22 16:10 probonopd

ld: error: undefined symbol: gsm_destroy(gsm_state*)
>>> did you mean: extern "C" gsm_destroy
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o

Wait, did the internal gsm library get compiled with C linkage? How'd that happen?

First of all, let's check whether or not this is the case:

nm -CP src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o | grep gsm_destroy

The output should normally begin with gsm_destroy(gsm_state*) (ignore the rest of the line). If it simply says gsm_destroy without any argument in parentheses, then something went wrong. To figure out why, we can try rebuilding that file alone in verbose mode:

make VERBOSE=1 -BC src/audio/gsm/src gsm_destroy.o

The (apparently faulty) command used to build the file will be displayed after the Building CXX object line, such as:

cd /build/build/src/audio/gsm/src && /usr/lib/ccache/clang++ -DDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -I/usr/include/libxml2 -I/build/build -I/build/src/src -I/build/src/src/audio/gsm/src/../inc -std=c++11   -g -o CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o -c /build/src/src/audio/gsm/src/gsm_destroy.cpp

(My initial guess was that maybe clang was invoked instead of clang++, but this didn't seem to have any impact when I tried it myself.)

fbriere avatar Oct 20 '22 20:10 fbriere

ld: error: undefined symbol: gsm_destroy(gsm_state*)
>>> did you mean: extern "C" gsm_destroy
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o

I spun up a FreeBSD EC2 instance to try and reproduce this, but it compiled just fine. I suspect something went horribly wrong in your build directory; could you try blasting it and starting over from scratch? If the problem persists, I'll need more information in order to recreate the same setup as you are using.

fbriere avatar Oct 21 '22 15:10 fbriere

I suspect that libatomic (provided by gcc) will still be required, as even Clang 15 does not seem to be able to handle this on its own.

Ah, so it's not so much a question of Linux/FreeBSD or gcc/Clang, but rather which C++ library is being used: libstdc++ needs libatomic, while libc++ does not. Good to know. I'll submit a patch shortly.

fbriere avatar Oct 21 '22 15:10 fbriere

I'll submit a patch shortly.

Done as #309.

fbriere avatar Oct 21 '22 23:10 fbriere

Started over anew.

git clone https://github.com/LubosD/twinkle/
cd twinkle
  • Manually applied https://github.com/LubosD/twinkle/pull/305/files
rm CMakeLists.txt
wget "https://raw.githubusercontent.com/LubosD/twinkle/3caab36315dd115ec3d98be5fe1da1229b54b79e/CMakeLists.txt"
  • Manually removed -latomic and -lresolv from src/CmakeFiles.txt
mkdir build && cd build
cmake .. -Dexample_option=On
make -j4

Getting

ld: error: undefined symbol: gsm_create()
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::t_gsm_audio_decoder(t_user*))
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::t_gsm_audio_encoder(unsigned short, unsigned short, t_user*))
>>> did you mean: extern "C" gsm_create
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_create.cpp.o

ld: error: undefined symbol: gsm_destroy(gsm_state*)
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::~t_gsm_audio_decoder())
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::~t_gsm_audio_encoder())
>>> did you mean: extern "C" gsm_destroy
>>> defined in: audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o

ld: error: undefined symbol: gsm_decode(gsm_state*, unsigned char*, short*)
>>> referenced by audio_decoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o:(t_gsm_audio_decoder::decode(unsigned char*, unsigned short, short*, unsigned short))

ld: error: undefined symbol: gsm_encode(gsm_state*, short*, unsigned char*)
>>> referenced by audio_encoder.cpp
>>>               audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o:(t_gsm_audio_encoder::encode(short*, unsigned short, unsigned char*, unsigned short, bool&))
c++: error: linker command failed with exit code 1 (use -v to see invocation)

I spun up a FreeBSD EC2 instance to try and reproduce this, but it compiled just fine. I suspect something went horribly wrong in your build directory; could you try blasting it and starting over from scratch? If the problem persists, I'll need more information in order to recreate the same setup as you are using.

What information would be helpful?

FreeBSD% which c++
/usr/bin/c++
FreeBSD% /usr/bin/c++ --version
FreeBSD clang version 13.0.0 ([email protected]:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303)
Target: x86_64-unknown-freebsd13.1
Thread model: posix
InstalledDir: /usr/bin

make --trace shows me that this is the offending command:

make -s -f src/CMakeFiles/twinkle-console.dir/build.make src/CMakeFiles/twinkle-console.dir/build
src/CMakeFiles/twinkle-console.dir/build.make:477: Ziel „src/twinkle-console“ wird aktualisiert wegen: src/CMakeFiles/twinkle-console.dir/link.txt src/CMakeFiles/twinkle-console.dir/main.cpp.o src/CMakeFiles/libtwinkle.dir/abstract_dialog.cpp.o src/CMakeFiles/libtwinkle.dir/address_book.cpp.o src/CMakeFiles/libtwinkle.dir/auth.cpp.o src/CMakeFiles/libtwinkle.dir/call_history.cpp.o src/CMakeFiles/libtwinkle.dir/call_script.cpp.o src/CMakeFiles/libtwinkle.dir/client_request.cpp.o src/CMakeFiles/libtwinkle.dir/cmd_socket.cpp.o src/CMakeFiles/libtwinkle.dir/dialog.cpp.o src/CMakeFiles/libtwinkle.dir/diamondcard.cpp.o src/CMakeFiles/libtwinkle.dir/epa.cpp.o src/CMakeFiles/libtwinkle.dir/events.cpp.o src/CMakeFiles/libtwinkle.dir/id_object.cpp.o src/CMakeFiles/libtwinkle.dir/line.cpp.o src/CMakeFiles/libtwinkle.dir/listener.cpp.o src/CMakeFiles/libtwinkle.dir/log.cpp.o src/CMakeFiles/libtwinkle.dir/phone.cpp.o src/CMakeFiles/libtwinkle.dir/phone_user.cpp.o src/CMakeFiles/libtwinkle.dir/prohibit_thread.cpp.o src/CMakeFiles/libtwinkle.dir/redirect.cpp.o src/CMakeFiles/libtwinkle.dir/sender.cpp.o src/CMakeFiles/libtwinkle.dir/service.cpp.o src/CMakeFiles/libtwinkle.dir/session.cpp.o src/CMakeFiles/libtwinkle.dir/sub_refer.cpp.o src/CMakeFiles/libtwinkle.dir/subscription.cpp.o src/CMakeFiles/libtwinkle.dir/subscription_dialog.cpp.o src/CMakeFiles/libtwinkle.dir/sys_settings.cpp.o src/CMakeFiles/libtwinkle.dir/timekeeper.cpp.o src/CMakeFiles/libtwinkle.dir/transaction.cpp.o src/CMakeFiles/libtwinkle.dir/transaction_layer.cpp.o src/CMakeFiles/libtwinkle.dir/transaction_mgr.cpp.o src/CMakeFiles/libtwinkle.dir/user.cpp.o src/CMakeFiles/libtwinkle.dir/userintf.cpp.o src/CMakeFiles/libtwinkle.dir/util.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_device.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_codecs.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_rx.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_session.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/audio_tx.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/dtmf_player.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/freq_gen.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g711.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g721.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g722_decode.c.o src/audio/CMakeFiles/libtwinkle-audio.dir/g722_encode.c.o src/audio/CMakeFiles/libtwinkle-audio.dir/g723_16.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g723_24.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g723_40.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/g72x.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/media_buffer.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/rtp_telephone_event.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/tone_gen.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/twinkle_rtp_session.cpp.o src/audio/CMakeFiles/libtwinkle-audio.dir/twinkle_zrtp_ui.cpp.o src/audits/CMakeFiles/libtwinkle-audits.dir/memman.cpp.o src/im/CMakeFiles/libtwinkle-im.dir/im_iscomposing_body.cpp.o src/im/CMakeFiles/libtwinkle-im.dir/msg_session.cpp.o src/mwi/CMakeFiles/libtwinkle-mwi.dir/mwi.cpp.o src/mwi/CMakeFiles/libtwinkle-mwi.dir/mwi_dialog.cpp.o src/mwi/CMakeFiles/libtwinkle-mwi.dir/mwi_subscription.cpp.o src/mwi/CMakeFiles/libtwinkle-mwi.dir/simple_msg_sum_body.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/challenge.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/coding.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/credentials.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/definitions.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept_encoding.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept_language.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_alert_info.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_allow.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_allow_events.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_auth_info.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_authorization.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_call_id.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_call_info.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_contact.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_disp.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_encoding.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_language.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_length.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_type.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_cseq.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_date.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_error_info.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_event.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_expires.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_from.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_in_reply_to.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_max_forwards.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_min_expires.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_min_se.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_mime_version.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_organization.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_priority.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_privacy.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_p_asserted_identity.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_p_preferred_identity.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_authenticate.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_authorization.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_require.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_rack.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_reason.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_record_route.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_refer_sub.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_refer_to.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_referred_by.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_replaces.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_reply_to.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_require.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_request_disposition.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_retry_after.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_route.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_rseq.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_server.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_service_route.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_session_expires.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_sip_etag.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_sip_if_match.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_subject.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_subscription_state.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_supported.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_timestamp.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_to.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_unsupported.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_user_agent.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_via.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_warning.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/hdr_www_authenticate.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/header.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/identity.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/media_type.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/milenage.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/parameter.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/parse_ctrl.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/parser.cxx.o src/parser/CMakeFiles/libtwinkle-parser.dir/request.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/response.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/rijndael.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/route.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/scanner.cxx.o src/parser/CMakeFiles/libtwinkle-parser.dir/sip_body.cpp.o src/parser/CMakeFiles/libtwinkle-parser.dir/sip_message.cpp.o src/patterns/CMakeFiles/libtwinkle-patterns.dir/observer.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/buddy.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/pidf_body.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/presence_dialog.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/presence_epa.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/presence_state.cpp.o src/presence/CMakeFiles/libtwinkle-presence.dir/presence_subscription.cpp.o src/sdp/CMakeFiles/libtwinkle-sdp.dir/sdp.cpp.o src/sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_parse_ctrl.cpp.o src/sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_parser.cxx.o src/sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_scanner.cxx.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/connection.cpp.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/connection_table.cpp.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/dnssrv.cpp.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/interfaces.cpp.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/socket.cpp.o src/sockets/CMakeFiles/libtwinkle-sockets.dir/url.cpp.o src/stun/CMakeFiles/libtwinkle-stun.dir/stun.cxx.o src/stun/CMakeFiles/libtwinkle-stun.dir/stun_transaction.cpp.o src/stun/CMakeFiles/libtwinkle-stun.dir/udp.cxx.o src/threads/CMakeFiles/libtwinkle-threads.dir/thread.cpp.o src/threads/CMakeFiles/libtwinkle-threads.dir/mutex.cpp.o src/threads/CMakeFiles/libtwinkle-threads.dir/sema.cpp.o src/utils/CMakeFiles/libtwinkle-utils.dir/file_utils.cpp.o src/utils/CMakeFiles/libtwinkle-utils.dir/mime_database.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/add.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/code.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/debug.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/decode.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_create.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_decode.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_encode.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_explode.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_implode.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_option.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_print.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/long_term.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/lpc.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/preprocess.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/rpe.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/short_term.cpp.o src/audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/table.cpp.o src/CMakeFiles/twinkle-console.dir/build.make /usr/lib/libmagic.so /usr/local/lib/libxml2.so /usr/local/lib/libreadline.so /usr/local/lib/libccrtp.so /usr/local/lib/libcommoncpp.so /usr/local/lib/libucommon.so /usr/local/lib/libusecure.so /usr/local/lib/libsndfile.so /usr/local/lib/libasound.so
/usr/local/bin/cmake -E cmake_echo_color --switch= --green --bold --progress-dir=/tmp/twinkle/build/CMakeFiles --progress-num= "Linking CXX executable twinkle-console"

Running that with make --trace shows that this is actually the offending command:

cd /tmp/twinkle/build/src && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/twinkle-console.dir/link.txt --verbose

That .txt file contains:

/usr/bin/c++  -std=c++11   "CMakeFiles/twinkle-console.dir/main.cpp.o" CMakeFiles/libtwinkle.dir/abstract_dialog.cpp.o CMakeFiles/libtwinkle.dir/address_book.cpp.o CMakeFiles/libtwinkle.dir/auth.cpp.o CMakeFiles/libtwinkle.dir/call_history.cpp.o CMakeFiles/libtwinkle.dir/call_script.cpp.o CMakeFiles/libtwinkle.dir/client_request.cpp.o CMakeFiles/libtwinkle.dir/cmd_socket.cpp.o CMakeFiles/libtwinkle.dir/dialog.cpp.o CMakeFiles/libtwinkle.dir/diamondcard.cpp.o CMakeFiles/libtwinkle.dir/epa.cpp.o CMakeFiles/libtwinkle.dir/events.cpp.o CMakeFiles/libtwinkle.dir/id_object.cpp.o CMakeFiles/libtwinkle.dir/line.cpp.o CMakeFiles/libtwinkle.dir/listener.cpp.o CMakeFiles/libtwinkle.dir/log.cpp.o CMakeFiles/libtwinkle.dir/phone.cpp.o CMakeFiles/libtwinkle.dir/phone_user.cpp.o CMakeFiles/libtwinkle.dir/prohibit_thread.cpp.o CMakeFiles/libtwinkle.dir/redirect.cpp.o CMakeFiles/libtwinkle.dir/sender.cpp.o CMakeFiles/libtwinkle.dir/service.cpp.o CMakeFiles/libtwinkle.dir/session.cpp.o CMakeFiles/libtwinkle.dir/sub_refer.cpp.o CMakeFiles/libtwinkle.dir/subscription.cpp.o CMakeFiles/libtwinkle.dir/subscription_dialog.cpp.o CMakeFiles/libtwinkle.dir/sys_settings.cpp.o CMakeFiles/libtwinkle.dir/timekeeper.cpp.o CMakeFiles/libtwinkle.dir/transaction.cpp.o CMakeFiles/libtwinkle.dir/transaction_layer.cpp.o CMakeFiles/libtwinkle.dir/transaction_mgr.cpp.o CMakeFiles/libtwinkle.dir/user.cpp.o CMakeFiles/libtwinkle.dir/userintf.cpp.o CMakeFiles/libtwinkle.dir/util.cpp.o "audio/CMakeFiles/libtwinkle-audio.dir/audio_device.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_decoder.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_encoder.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_codecs.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_rx.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_session.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/audio_tx.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/dtmf_player.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/freq_gen.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g711.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g721.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g722_decode.c.o" "audio/CMakeFiles/libtwinkle-audio.dir/g722_encode.c.o" "audio/CMakeFiles/libtwinkle-audio.dir/g723_16.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g723_24.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g723_40.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/g72x.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/media_buffer.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/rtp_telephone_event.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/tone_gen.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/twinkle_rtp_session.cpp.o" "audio/CMakeFiles/libtwinkle-audio.dir/twinkle_zrtp_ui.cpp.o" "audits/CMakeFiles/libtwinkle-audits.dir/memman.cpp.o" "im/CMakeFiles/libtwinkle-im.dir/im_iscomposing_body.cpp.o" "im/CMakeFiles/libtwinkle-im.dir/msg_session.cpp.o" "mwi/CMakeFiles/libtwinkle-mwi.dir/mwi.cpp.o" "mwi/CMakeFiles/libtwinkle-mwi.dir/mwi_dialog.cpp.o" "mwi/CMakeFiles/libtwinkle-mwi.dir/mwi_subscription.cpp.o" "mwi/CMakeFiles/libtwinkle-mwi.dir/simple_msg_sum_body.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/challenge.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/coding.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/credentials.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/definitions.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept_encoding.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_accept_language.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_alert_info.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_allow.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_allow_events.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_auth_info.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_authorization.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_call_id.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_call_info.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_contact.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_disp.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_encoding.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_language.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_length.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_content_type.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_cseq.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_date.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_error_info.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_event.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_expires.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_from.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_in_reply_to.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_max_forwards.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_min_expires.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_min_se.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_mime_version.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_organization.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_priority.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_privacy.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_p_asserted_identity.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_p_preferred_identity.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_authenticate.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_authorization.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_proxy_require.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_rack.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_reason.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_record_route.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_refer_sub.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_refer_to.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_referred_by.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_replaces.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_reply_to.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_require.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_request_disposition.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_retry_after.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_route.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_rseq.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_server.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_service_route.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_session_expires.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_sip_etag.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_sip_if_match.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_subject.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_subscription_state.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_supported.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_timestamp.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_to.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_unsupported.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_user_agent.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_via.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_warning.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/hdr_www_authenticate.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/header.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/identity.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/media_type.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/milenage.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/parameter.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/parse_ctrl.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/parser.cxx.o" "parser/CMakeFiles/libtwinkle-parser.dir/request.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/response.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/rijndael.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/route.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/scanner.cxx.o" "parser/CMakeFiles/libtwinkle-parser.dir/sip_body.cpp.o" "parser/CMakeFiles/libtwinkle-parser.dir/sip_message.cpp.o" "patterns/CMakeFiles/libtwinkle-patterns.dir/observer.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/buddy.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/pidf_body.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/presence_dialog.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/presence_epa.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/presence_state.cpp.o" "presence/CMakeFiles/libtwinkle-presence.dir/presence_subscription.cpp.o" "sdp/CMakeFiles/libtwinkle-sdp.dir/sdp.cpp.o" "sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_parse_ctrl.cpp.o" "sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_parser.cxx.o" "sdp/CMakeFiles/libtwinkle-sdp.dir/sdp_scanner.cxx.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/connection.cpp.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/connection_table.cpp.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/dnssrv.cpp.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/interfaces.cpp.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/socket.cpp.o" "sockets/CMakeFiles/libtwinkle-sockets.dir/url.cpp.o" "stun/CMakeFiles/libtwinkle-stun.dir/stun.cxx.o" "stun/CMakeFiles/libtwinkle-stun.dir/stun_transaction.cpp.o" "stun/CMakeFiles/libtwinkle-stun.dir/udp.cxx.o" "threads/CMakeFiles/libtwinkle-threads.dir/thread.cpp.o" "threads/CMakeFiles/libtwinkle-threads.dir/mutex.cpp.o" "threads/CMakeFiles/libtwinkle-threads.dir/sema.cpp.o" "utils/CMakeFiles/libtwinkle-utils.dir/file_utils.cpp.o" "utils/CMakeFiles/libtwinkle-utils.dir/mime_database.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/add.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/code.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/debug.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/decode.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_create.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_decode.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_destroy.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_encode.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_explode.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_implode.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_option.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/gsm_print.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/long_term.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/lpc.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/preprocess.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/rpe.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/short_term.cpp.o" "audio/gsm/src/CMakeFiles/libtwinkle-gsm.dir/table.cpp.o" -o twinkle-console  -Wl,-rpath,/usr/local/lib: -lpthread /usr/lib/libmagic.so /usr/local/lib/libxml2.so /usr/local/lib/libreadline.so /usr/local/lib/libccrtp.so /usr/local/lib/libcommoncpp.so /usr/local/lib/libucommon.so /usr/local/lib/libusecure.so /usr/local/lib/libsndfile.so /usr/local/lib/libasound.so

My system does have:

FreeBSD% grep -r gsm_create /usr/local/include 
/usr/local/include/gsm.h:extern gsm  gsm_create         GSM_P((void));

FreeBSD% pkg which /usr/local/include/gsm.h
/usr/local/include/gsm.h was installed by package gsm-1.0.19

Could it be that I am missing some dependency which CMake didn't catch?

probonopd avatar Oct 22 '22 06:10 probonopd

FreeBSD% pkg which /usr/local/include/gsm.h
/usr/local/include/gsm.h was installed by package gsm-1.0.19

Aha! That was the missing piece of the puzzle, and I can now reproduce this after installing gsm. (Since the error involved linking our own version of this library, I assumed the upstream copy wasn't installed.)

What happens is that FreeBSD (only) ships gsm.h in the top directory, but we expect that file to be located under a gsm subdirectory. Hence we deduce that libgsm is not installed and build our own (thus disabling WITH_GSM). But when trying to include our own copy of gsm.h, the upstream one takes precedence, due to how include directories are ordered. (The order is different on Debian, hence why this never came up in testing.)

I've submitted a fix for the build failure in #310. I'll later try to figure out a way to properly use the installed library in either scenario.

fbriere avatar Oct 22 '22 14:10 fbriere

Started over anew.

git clone https://github.com/LubosD/twinkle/
cd twinkle
  • Applied https://github.com/LubosD/twinkle/pull/305/files
rm CMakeLists.txt
wget "https://raw.githubusercontent.com/LubosD/twinkle/3caab36315dd115ec3d98be5fe1da1229b54b79e/CMakeLists.txt"
  • Manually removed the lines regarding ATOMIC and RESOLV from src/CmakeFiles.txt
  • Manually changed https://github.com/LubosD/twinkle/pull/310/files
mkdir build && cd build
cmake .. -Dexample_option=On
make -j4

Getting

[100%] Linking CXX executable twinkle
[100%] Built target twinkle

Thanks a ton @fbriere :+1:

probonopd avatar Oct 22 '22 15:10 probonopd

I'll later try to figure out a way to properly use the installed library in either scenario.

Done with #312. Compiling on FreeBSD with WITH_GSM enabled will now work and pick up libgsm correctly.

fbriere avatar Oct 22 '22 17:10 fbriere

@LubosD: You can now merge this when ready. :smile:

fbriere avatar Oct 22 '22 17:10 fbriere