Re: meson vs windows perl

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Cc: Muralikrishna Bandaru <muralikrishna(dot)bandaru(at)enterprisedb(dot)com>, Sandeep Thakkar <sandeep(dot)thakkar(at)enterprisedb(dot)com>
Subject: Re: meson vs windows perl
Date: 2024-04-05 12:25:53
Message-ID: 9c7d8dc0-57f4-4661-a56a-212c68802a3f@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On 2024-04-02 Tu 09:34, Andrew Dunstan wrote:
>
> meson.build has this code
>
>     ldopts = run_command(perl, '-MExtUtils::Embed', '-e',
> 'ldopts', check: true).stdout().strip()     undesired =
> run_command(perl_conf_cmd, 'ccdlflags', check:
> true).stdout().split()     undesired += run_command(perl_conf_cmd,
> 'ldflags', check: true).stdout().split()     perl_ldopts = []    
> foreach ldopt : ldopts.split(' ')       if ldopt == '' or ldopt in
> undesired         continue       endif       perl_ldopts +=
> ldopt.strip('"')     endforeach     message('LDFLAGS recommended
> by perl: "@0@"'.format(ldopts))     message('LDFLAGS for embedding
> perl: "@0@"'.format(' '.join(perl_ldopts)))
>
>
> This code is seriously broken if perl reports items including spaces,
> when a) removing the quotes is quite wrong, and b) splitting on spaces
> is also wrong.
>
> Here's an example from one of my colleagues:
>
>
> C:\Program Files\Microsoft Visual Studio\2022\Professional>perl.EXE -MExtUtils::Embed -e ldopts
> -nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"C:\edb\languagepack\v4\Perl-5.38\lib\CORE"
> -machine:AMD64 -subsystem:console,"5.02" "C:\edb\languagepack\v4\Perl-5.38\lib\CORE\perl538.lib"
> "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\lib\x64\oldnames.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\kernel32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\user32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\gdi32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\winspool.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\comdlg32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\advapi32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\shell32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\ole32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\oleaut32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\netapi32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\uuid.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\ws2_32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\mpr.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\winmm.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\version.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\odbc32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\odbccp32.lib"
> "C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64\comctl32.lib"
> "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\lib\x64\msvcrt.lib"
> "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\lib\x64\vcruntime.lib"
> "C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64\ucrt.lib"
>
> And with that we get errors like
>
> cl : Command line warning D9024 : unrecognized source file type 'C:\Program', object file assumed
> cl : Command line warning D9024 : unrecognized source file type 'Files\Microsoft', object file assumed
> cl : Command line warning D9024 : unrecognized source file type 'Visual', object file assumed
> cl : Command line warning D9024 : unrecognized source file type 'C:\Program', object file assumed
> cl : Command line warning D9024 : unrecognized source file type 'Files', object file assumed
> cl : Command line warning D9024 : unrecognized source file type '(x86)\Windows', object file assumed
>
>
> It looks like we need to get smarter about how we process the ldopts and strip out the ccdlflags and ldflags
>

Here is an attempt to fix all that. It's ugly, but I think it's more
principled.

First, instead of getting the ldopts and then trying to filter out the
ldflags and ccdlflags, it tells perl not to include those in the first
place, by overriding a couple of routines in ExtUtils::Embed. And
second, it's smarter about splitting what's left, so that it doesn't
split on a space that's in a quoted item. The perl that's used to do
that second bit is not pretty, but it has been tested on the system
where the problem arose and apparently cures the problem. (No doubt some
perl guru could improve it.) It also works on my Ubuntu system, so I
don't think we'll be breaking anything (famous last words).

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

Attachment Content-Type Size
ldopts2.diff text/x-patch 1.7 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Langote 2024-04-05 12:34:58 Re: remaining sql/json patches
Previous Message Dave Cramer 2024-04-05 12:20:44 Re: Add new protocol message to change GUCs for usage with future protocol-only GUCs