Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make sure to call include_directories() for all CMake packages #305

Merged
merged 1 commit into from
Oct 22, 2022

Conversation

fbriere
Copy link
Collaborator

@fbriere fbriere commented Oct 19, 2022

Closes #304

@probonopd
Copy link

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

fbriere added a commit to fbriere/twinkle that referenced this pull request Oct 19, 2022
While glibc includes a declaration of `environ` within `unistd.h`, this
is not always the case for other libc instances; POSIX states that
`environ` "must be declared by the user if it is to be used directly"¹.

This fixes a build failure on FreeBSD reported at
LubosD#305 (comment)

 ¹ https://pubs.opengroup.org/onlinepubs/9699919799/
@fbriere
Copy link
Collaborator Author

fbriere commented Oct 19, 2022

/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. 😏

/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. 😄)

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.)

@probonopd
Copy link

probonopd commented Oct 20, 2022

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...

fbriere added a commit to fbriere/twinkle that referenced this pull request Oct 20, 2022
The old `uint` and `ulong` types, although provided for compatibility by
glibc, are not always found in other libc instances.  This was reported
to cause a build failure on FreeBSD¹.

 ¹ LubosD#305 (comment)
@fbriere
Copy link
Collaborator Author

fbriere commented Oct 20, 2022

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.

@probonopd
Copy link

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

@fbriere
Copy link
Collaborator Author

fbriere commented Oct 20, 2022

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
Copy link
Collaborator Author

fbriere commented Oct 21, 2022

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
Copy link
Collaborator Author

fbriere commented Oct 21, 2022

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
Copy link
Collaborator Author

fbriere commented Oct 21, 2022

I'll submit a patch shortly.

Done as #309.

@probonopd
Copy link

probonopd commented Oct 22, 2022

Started over anew.

git clone https://github.com/LubosD/twinkle/
cd twinkle
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?

fbriere added a commit to fbriere/twinkle that referenced this pull request Oct 22, 2022
`libgsm` is typically installed with a top-level `gsm.h` include file
(either as the main file or as a compatibility symlink to `gsm/gsm.h`).
If `libgsm` is installed but `WITH_GSM` is disabled, it's possible that
this copy will shadow our own when `audio/gsm/src` is being built,
depending on how include directories are ordered.

This will typically cause a build failure on systems such as FreeBSD,
where `/usr/local/include` is inserted early in the list, such as seen
in LubosD#305 (comment).

(While both copies are almost identical, the original one enforces C
linkage, which ours does not.)
@fbriere
Copy link
Collaborator Author

fbriere commented Oct 22, 2022

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.

@probonopd
Copy link

Started over anew.

git clone https://github.com/LubosD/twinkle/
cd twinkle
rm CMakeLists.txt
wget "https://raw.githubusercontent.com/LubosD/twinkle/3caab36315dd115ec3d98be5fe1da1229b54b79e/CMakeLists.txt"
mkdir build && cd build
cmake .. -Dexample_option=On
make -j4

Getting

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

Thanks a ton @fbriere 👍

@fbriere
Copy link
Collaborator Author

fbriere commented Oct 22, 2022

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
Copy link
Collaborator Author

fbriere commented Oct 22, 2022

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

@LubosD LubosD merged commit 78313b4 into LubosD:master Oct 22, 2022
@fbriere fbriere deleted the fix/missing-include-directories branch October 22, 2022 18:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Compilation fails on FreeBSD
3 participants