question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[bug] `MesonToolchain` -LIBPATH is ignored?

See original GitHub issue

to be honest, I currently don’t understand it conan client issue or even meson issue (I mean meson-build project iself).

migrating Glib to MesonToolchain in https://github.com/conan-io/conan-center-index/pull/11053, I had to put the following workaround:

        ldflags = tc.vars().get("LDFLAGS")
        ldflags = ldflags.replace("-LIBPATH", "/LIBPATH")
        tc.environment.define('LDFLAGS', ldflags)

which appears to be working normally.

so, if I try without a workaround, I get Library gnuintl found: NO (while with old Meson build helper it’s found). digging into the logs I can see (in meson-log.txt):

Command line:  cl /LIBPATH:C:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib /LIBPATH:C:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib /LIBPATH:C:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\lib /LIBPATH:C:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\lib /LIBPATH:C:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\lib /LIBPATH:C:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib -IC:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include -IC:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include -IC:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\include -IC:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\include -IC:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\include -IC:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include C:\.conan\96ccea\1\build_subfolder\meson-private\tmpx47m1x8r\testfile.c /FeC:\.conan\96ccea\1\build_subfolder\meson-private\tmpx47m1x8r\output.exe /nologo /showIncludes /utf-8 /MDd -DFFI_BUILDING -DPCRE_STATIC=1 /nologo /showIncludes /utf-8 /Od /Oi- gnuintl.lib /link /nologo /release /nologo 

Code:
 int main(void) { return 0; }

Compiler stdout:
 testfile.c
LINK : fatal error LNK1181: cannot open input file 'gnuintl.lib'

Compiler stderr:
 cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib'
cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib'
cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\lib'
cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\lib'
cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\lib'
cl : Command line warning D9002 : ignoring unknown option '/LIBPATH:C:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib'

we can see -LIBPATH arguments are passed into command line, but in a wrong order (they have to be passed at the end, after the /link):

The /link option and its linker options must appear after any file names and CL options.

that’s probably due to how meson inserts link_args into the command line. in the toolchain (conan_meson_native.ini) I see linking flags are set:

c_link_args = ['-LIBPATH:C:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib', '-LIBPATH:C:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\lib', '-LIBPATH:C:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib']
cpp_link_args = ['-LIBPATH:C:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib', '-LIBPATH:C:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\lib', '-LIBPATH:C:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\lib', '-LIBPATH:C:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib']

I’ve tried to manually insert the /link at the beginning of c_link_args/cpp_link_args, but it didn’t help. the only thing that reliably fixed it was replacing -LIBPATH with /LIBPATH, now it gets the correct command line and libintl is found:

Command line:  cl -IC:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include -IC:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include -IC:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\include -IC:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\include -IC:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\include -IC:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\include C:\.conan\96ccea\1\build_subfolder\meson-private\tmpclicrq26\testfile.c /FeC:\.conan\96ccea\1\build_subfolder\meson-private\tmpclicrq26\output.exe /nologo /showIncludes /utf-8 /MDd -DFFI_BUILDING -DPCRE_STATIC=1 /nologo /showIncludes /utf-8 /Od /Oi- gnuintl.lib /link /nologo /release /nologo /LIBPATH:C:\Users\sse4\.conan\data\zlib\1.2.12\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib /LIBPATH:C:\Users\sse4\.conan\data\libffi\3.4.2\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib /LIBPATH:C:\Users\sse4\.conan\data\pcre\8.45\_\_\package\7a162084f5550c625a8950e9b1175d1474d2fbab\lib /LIBPATH:C:\Users\sse4\.conan\data\libgettext\0.21\_\_\package\e0c22822cdf05b624135e1696ae5cb784a23aeb3\lib /LIBPATH:C:\Users\sse4\.conan\data\bzip2\1.0.8\_\_\package\589a23dff5fdb23a7fb851223eb766480ead0a9a\lib /LIBPATH:C:\Users\sse4\.conan\data\libiconv\1.16\_\_\package\d057732059ea44a47760900cb5e4855d2bea8714\lib 

Code:
 int main(void) { return 0; }

Compiler stdout:
 testfile.c

Compiler stderr:
 
Library gnuintl found: YES

/cc @ericLemanissier

Environment Details (include every applicable attribute)

  • Operating System+version:
  • Compiler+version:
  • Conan version:
  • Python version:

Steps to reproduce (Include if Applicable)

Logs (Executed commands with output) (Include/Attach if Applicable)

Issue Analytics

  • State:closed
  • Created a year ago
  • Comments:10 (10 by maintainers)

github_iconTop GitHub Comments

1reaction
ericLemanissiercommented, Jul 4, 2022

I got to the same conclusion some time ago, hence my old PR https://github.com/mesonbuild/meson/pull/6735, but I don’t think I reported the issue

1reaction
SSE4commented, Jul 4, 2022

okay, we need to report an issue to meson itself. it means no Windows builds with MesonToolchain for some time, unless I find out how to make a workaround. /cc @ericLemanissier

Read more comments on GitHub >

github_iconTop Results From Across the Web

Conan Documentation
Conan is a software package manager which is intended for C and C++ developers. Conan is universal and portable. It works in all...
Read more >
Cross and Native File reference - The Meson Build system
The example below results in an error when file1.ini is included before ... file (if doing a cross build the options from the...
Read more >
Untitled
... WindowMaker-0.95.9-fix-ImageMagick-macro-bug.patch ... 0001-Ignore-grub2-install-errors-if-they-are-expected.patch appliance-tools-011.1.tar.bz2 ...
Read more >
Untitled
... 0001-plugin-ignore-unwanted-net-ports.patch ModemManager-1.10.2.tar.xz ... 0003-A-bit-better-error-handling.patch 0004-Fix-Linux-build.patch ...
Read more >
3954c74e54719c6ab73b..
... abe-48x48.png abe.spec 0001-Bug-13791-Fix-flicker-and-caret-problems.patch ... android-tools-4.4.2-ignore-android_filesystem_capability.h.patch ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found