[bug] `MesonToolchain` -LIBPATH is ignored?
See original GitHub issueto 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:
- Created a year ago
- Comments:10 (10 by maintainers)
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
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