Wireshark-dev: Re: [Wireshark-dev] Error when running "nmake -f makefile.nmake packaging" on wi
From: Graham Bloice <graham.bloice@xxxxxxxxxxxxx>
Date: Mon, 11 Aug 2014 17:58:37 +0100
On 11 August 2014 17:19, Gerald Combs <gerald@xxxxxxxxxxxxx> wrote:
On 8/11/14 7:53 AM, Graham Bloice wrote:
> On 11 August 2014 15:21, Anders Broman <anders.broman@xxxxxxxxxxxx
> <mailto:anders.broman@xxxxxxxxxxxx>> wrote:
>
>     __ __
>
>     __ __
>
>     *From:*wireshark-dev-bounces@xxxxxxxxxxxxx
>     <mailto:wireshark-dev-bounces@xxxxxxxxxxxxx>
>     [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx
>     <mailto:wireshark-dev-bounces@xxxxxxxxxxxxx>] *On Behalf Of *Graham
>     Bloice
>     *Sent:* den 11 augusti 2014 15:18
>
>
>     *To:* Developer support list for Wireshark
>     *Subject:* Re: [Wireshark-dev] Error when running "nmake -f
>     makefile.nmake packaging" on win7 64 with MSVC 2012____
>
>     __ __
>
>     On 11 August 2014 13:45, Anders Broman <anders.broman@xxxxxxxxxxxx
>     <mailto:anders.broman@xxxxxxxxxxxx>> wrote:____
>
>      ____
>
>      ____
>
>     *From:*wireshark-dev-bounces@xxxxxxxxxxxxx
>     <mailto:wireshark-dev-bounces@xxxxxxxxxxxxx>
>     [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx
>     <mailto:wireshark-dev-bounces@xxxxxxxxxxxxx>] *On Behalf Of *Graham
>     Bloice
>     *Sent:* den 11 augusti 2014 14:04____
>
>
>     *To:* Developer support list for Wireshark
>     *Subject:* Re: [Wireshark-dev] Error when running "nmake -f
>     makefile.nmake packaging" on win7 64 with MSVC 2012____
>
>      ____
>
>     On 11 August 2014 11:51, Anders Broman <anders.broman@xxxxxxxxxxxx
>     <mailto:anders.broman@xxxxxxxxxxxx>> wrote:____
>
>     Invalid command: Split-Path____
>
>     !include: error in script: "qt-dll-manifest.nsh" on line 1____
>
>     Error in script "wireshark.nsi" on line 791 -- aborting creation
>     process____
>
>      ____
>
>     qt-dll-manifest.nsh:____
>
>      ____
>
>     Split-Path : Cannot bind argument to parameter 'Path' because it is
>     null.____
>
>     At C:\xxx\trunk\packaging\nsis\windeployqt-to-nsis.ps1:23 char:22____
>
>     +     $dir = Split-Path <<<<  -Parent $entry____
>
>         + CategoryInfo          : InvalidData: (:) [Split-Path],
>     ParameterBindingV ____
>
>        alidationException____
>
>         + FullyQualifiedErrorId :
>     ParameterArgumentValidationErrorNullNotAllowed,M ____
>
>        icrosoft.PowerShell.Commands.SplitPathCommand____
>
>     File "..\..\wireshark-qt-release\"____
>
>     File /r "..\..\wireshark-qt-release\"____
>
>      ____
>
>     Ideas?____
>
>      ____
>
>     Regards____
>
>     Anders____
>
>      ____
>
>
>     ____
>
>      ____
>
>     packagins\nsis\Makefile.nmake calls windeployqt-to-nsis.ps1 to
>     create the qt-dll-manifest.nsh file listing all the qt dlls required
>     for the installer.____
>
>      ____
>
>     In the script, windeployqt is called to return the list of DLL's and
>     then on Line 23 of the script calls split-path to get the path
>     component of the DLL.  From the error it seems that one of the
>     entries is null.____
>
>      ____
>
>     Try this:____
>
>      ____
>
>     In a Powershell prompt at your top level source directory:____
>
>      ____
>
>     <code>____
>
>     $env:Path += ";PATH\TO\QT\BIN"____
>
>     windeployqt --release --no-compiler-runtime --list relative
>     wireshark-qt-release\qtshark.exe____
>
>     </code>____
>
>      ____
>
>     -- ____
>
>     Graham Bloice____
>
>      ____
>
>     Hi,____
>
>     Not sure I got I right:____
>
>      ____
>
>     C:\xxx\trunk>powershell____
>
>     Windows PowerShell____
>
>     Copyright (C) 2009 Microsoft Corporation. All rights reserved.____
>
>      ____
>
>     PS C:\xxx\trunk> $env:path+="C:\Qt\Qt5.2.1\5.2.1\msvc2012_64\bin"____
>
>     __ __
>
>     Looks like you've missed the ";" path separator that should be at
>     the front of the string.  Start with a new PS prompt (as you've
>     broken the path in that one) and try again.____
>
>     __ __
>
>     I'd really like to see what that 5.2.1 windeployqt gives out, but as
>     the others have said, windeployqt in < 5.3.x looks to be broken.____
>
>     __ __
>
>     Argh, Yes of course:____
>
>     __ __
>
>     PS C:\xxx\trunk> $env:path+=";C:\Qt\Qt5.2.1\5.2.1\msvc2012_64\bin"____
>
>     PS C:\xxx\trunk> windeployqt --release --no-compiler-runtime --list
>     rela____
>
>     tive wireshark-qt-release\qtshark.exe____
>
>     Unknown options: release, no-compiler-runtime, list.____
>
>     __ __
>
>     So now we are getting to the problem Alexis pointed out; windeployqt
>     does not have the same parameter sets in Qt 5.2.1____
>
>     >...). or simply upgrade to Qt 5.3 :)____
>
>     Last time I checked there was no Qt 5.3 for MSVC 2012, MSVC 2013
>     requires IE version(something) which I don’t have and I have a
>     company____
>
>     Win7 version which I can’t (easily any way) influence the version of
>     the components…____
>
>     __ __
>
>
>
> Yes, I think for Qt < 5.3 we need to fallback to some other scheme, i.e.
> a hard-coded list of DLL's.

Is there a way to get nmake to compare version strings? We can get the
Qt version easily enough using `qmake -query QT_VERSION`. Otherwise
we'll probably have to add more DLL checks to
packaging/nsis/Makefile.nmake. According to the release notes
Qt5WebSockets.dll was added in 5.3. Although I suppose another
alternative might be to move the Qt version detection logic from
packaging/nsis/Makefile.nmake to windeployqt-to-nsis.


I think that sort of thing is difficult in nmake, it can't pick up return values from external programs, so moving it to the PS script is probably the best idea.  That will also work with CMake then.

--
Graham Bloice