Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Compiling Tk::PNG on win32 (complications, more c/xs than perl)

by Courage (Parson)
on Jul 15, 2002 at 16:13 UTC ( #181840=note: print w/replies, xml ) Need Help??


in reply to Compiling Tk::PNG on win32 (complications, more c/xs than perl)

Finally I succeeded building it, here is a proof-log :)
D:\WORK\PerlCompile\compile-modules\perl561\Tk-PNG-2.005>perl -w Makef +ile.PL d:/WORK/PerlCompile/compile-modules/perl561/Tk-PNG-2.005 does not star +t with D:/perl561/site/lib i.e. building outside Tk itself Finding dependancies for PNG.xs Finding dependancies for imgPNG.c Writing Makefile for Tk::PNG D:\WORK\PerlCompile\compile-modules\perl561\Tk-PNG-2.005>vc nmake Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. "Running Mkbootstrap for Tk::PNG ()" D:\perl561\bin\perl.exe -Id:\perl561\lib -Id:\perl561\lib -MEx +tUtils::Command -e chmod 644 PNG.bs D:\perl561\bin\perl.exe "-Id:\perl561\lib" "-Id:\perl561\lib" +-MExtUtils::Mksymlists -e "Mksymlists('NAME' => 'Tk::PNG', 'DLBASE' +=> 'PNG', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'D +L_VARS' => []);" link -out:blib\arch\auto\Tk\PNG\PNG.dll -dll -nologo -nodefaul +tlib -release -libpath:"d:\perl561\lib\CORE" -machine:x86 PNG.obj +imgPNG.obj D:\perl561\lib\CORE\perl56.lib libpng.lib zlib.lib D:\MS +VStudio\VC98\LIB\oldnames.lib D:\MSVStudio\VC98\LIB\kernel32.lib D:\M +SVStudio\VC98\LIB\user32.lib D:\MSVStudio\VC98\LIB\gdi32.lib D:\MSVSt +udio\VC98\LIB\winspool.lib D:\MSVStudio\VC98\LIB\comdlg32.lib D:\MSVS +tudio\VC98\LIB\advapi32.lib D:\MSVStudio\VC98\LIB\shell32.lib D:\MSVS +tudio\VC98\LIB\ole32.lib D:\MSVStudio\VC98\LIB\oleaut32.lib D:\MSVStu +dio\VC98\LIB\netapi32.lib D:\MSVStudio\VC98\LIB\uuid.libD:\MSVStudio\ +VC98\LIB\wsock32.lib D:\MSVStudio\VC98\LIB\mpr.lib D:\MSVStudio\VC98\ +LIB\winmm.lib D:\MSVStudio\VC98\LIB\version.lib D:\MSVStudio\VC98\LIB +\odbc32.lib D:\MSVStudio\VC98\LIB\odbccp32.lib D:\MSVStudio\VC98\LIB\ +msvcrt.lib -def:PNG.def Creating library blib\arch\auto\Tk\PNG\PNG.lib and object blib\arch +\auto\Tk\PNG\PNG.exp D:\perl561\bin\perl.exe -Id:\perl561\lib -Id:\perl561\lib -MEx +tUtils::Command -e chmod 755 blib\arch\auto\Tk\PNG\PNG.dll D:\perl561\bin\perl.exe -Id:\perl561\lib -Id:\perl561\lib -MEx +tUtils::Command -e cp PNG.bs blib\arch\auto\Tk\PNG\PNG.bs D:\perl561\bin\perl.exe -Id:\perl561\lib -Id:\perl561\lib -MEx +tUtils::Command -e chmod 644 blib\arch\auto\Tk\PNG\PNG.bs D:\WORK\PerlCompile\compile-modules\perl561\Tk-PNG-2.005>vc nmake test Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. D:\perl561\bin\perl.exe -Mblib -Id:\perl561\lib -Id:\perl561\l +ib -e "use Test::Harness qw(&runtests $verbose); $verbose=0; runtests + @ARGV;" t\basic.t Using d:/WORK/PerlCompile/compile-modules/perl561/Tk-PNG-2.005/blib t\basic.............ok All tests successful. Files=1, Tests=4, 2 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 C +PU)
and I even saw some picture on a screen. Honestly!

A few tips what were of concern here.

  • I have installed Compress::Zlib, which is compiled by AS, but did not had "zlib.h" for *that* version (which is 1.0.4), so I've downloaded zlib113 and proceeded but very carefully not to confuse them ("zlib.dll" file is here and there, and it's important not to confuse them)
  • If you decide to build zlib, then unzip zlib into directory where you build your module but into subdirectory "zlib", go in there. "makefile.nt" in "nt" is which I used and succeeded.
  • Tk::PNG-2.005 has libpng in it, and it's good but be careful when building it, because (at least for me) ./libpng/makefile.vc was confusing and I lost about a hour trying to figure out what was wrong, and found "right" file which was okay for that configuration and it's name is -- ./libpng/scripts/makefile.vcwin32.
    Needless to say but important to do that you must copy it to ".." once and call it as "nmake /f makefile.vcwin32". Hmm. now I realised that "nmake /f scripts\makefile.vcwin32" will also work. Okay. A single touch at the very end of that file right before "libpng.lib" was created -del ... instead of just del ....
  • after that go to right place, do "perl Makefile.PL" and you should be okay if freshly created libs are in their right place. When installing your module, remember that perl should "see" right zlib.dll when running it. Probably there exists a way (right rule for right makefile) to create static lib to not confuse different zlib.dll-s.

update: some HTML formating cleanup

Courage, the Cowardly Dog.

Replies are listed 'Best First'.
Re: Re: Compiling Tk::PNG on win32 (complications, more c/xs than perl)
by crazyinsomniac (Prior) on Jul 15, 2002 at 20:21 UTC
    Ok, I see what you're doing there, I get there, and then it goes downhill again,
    E:\dev\new\Tk-PNG-2.005>perl Makefile.PL E:/dev/new/Tk-PNG-2.005 does not start with C:/Perl/site/lib i.e. building outside Tk itself Finding dependancies for PNG.xs Finding dependancies for imgPNG.c Missing ')' trailing: x500) at C:/Perl/site/lib/Tk/MakeDepend.pm line 102, <./zlib +/zconf.h> line 95. Missing ')' trailing: x0500) && defined (WIN32) at C:/Perl/site/lib/Tk/MakeDepend. +pm line 102, <./zlib/zconf.h> line 178. Writing Makefile for Tk::PNG E:\dev\new\Tk-PNG-2.005>nmake Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. "Running Mkbootstrap for Tk::PNG ()" C:\Perl\bin\perl.exe -IC:\Perl\lib -IC:\Perl\lib -MExtUtils::C +ommand -e chmod 644 PNG.bs C:\Perl\bin\perl.exe "-IC:\Perl\lib" "-IC:\Perl\lib" -MExtUtil +s::Mksymlists -e "Mksymlists( 'NAME' => 'Tk::PNG', 'DLBASE' => 'PNG', 'DL_FUNCS' => { }, 'FUNCLIST' + => [], 'IMPORTS' => { }, 'DL _VARS' => []);" link -out:blib\arch\auto\Tk\PNG\PNG.dll -dll -nologo -nodefaul +tlib -release -libpath:"C:/Pe rl\lib\CORE" -machine:x86 PNG.obj imgPNG.obj C:\Perl\lib\CORE\perl +56.lib libpng.lib zlib.lib "C: \Program Files\Microsoft Visual Studio\VC98\lib\oldnames.lib" "C:\Prog +ram Files\Microsoft Visual Stu dio\VC98\lib\kernel32.lib" "C:\Program Files\Microsoft Visual Studio\V +C98\lib\user32.lib" "C:\Progra m Files\Microsoft Visual Studio\VC98\lib\gdi32.lib" "C:\Program Files\ +Microsoft Visual Studio\VC98\l ib\winspool.lib" "C:\Program Files\Microsoft Visual Studio\VC98\lib\co +mdlg32.lib" "C:\Program Files\ Microsoft Visual Studio\VC98\lib\advapi32.lib" "C:\Program Files\Micro +soft Visual Studio\VC98\lib\sh ell32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\lib\ole32.li +b" "C:\Program Files\Microsoft Visual Studio\VC98\lib\oleaut32.lib" "C:\Program Files\Microsoft Visu +al Studio\VC98\lib\netapi32.li b" "C:\Program Files\Microsoft Visual Studio\VC98\lib\uuid.lib" "C:\Pr +ogram Files\Microsoft Visual S tudio\VC98\lib\wsock32.lib" "C:\Program Files\Microsoft Visual Studio\ +VC98\lib\mpr.lib" "C:\Program Files\Microsoft Visual Studio\VC98\lib\winmm.lib" "C:\Program Files\Mi +crosoft Visual Studio\VC98\lib \version.lib" "C:\Program Files\Microsoft Visual Studio\VC98\lib\odbc3 +2.lib" "C:\Program Files\Micro soft Visual Studio\VC98\lib\odbccp32.lib" "C:\Program Files\Microsoft +Visual Studio\VC98\lib\msvcrt. lib" -def:PNG.def Creating library blib\arch\auto\Tk\PNG\PNG.lib and object blib\arch +\auto\Tk\PNG\PNG.exp C:\Perl\bin\perl.exe -IC:\Perl\lib -IC:\Perl\lib -MExtUtils::C +ommand -e chmod 755 blib\arch\ auto\Tk\PNG\PNG.dll C:\Perl\bin\perl.exe -IC:\Perl\lib -IC:\Perl\lib -MExtUtils::C +ommand -e cp PNG.bs blib\arch\ auto\Tk\PNG\PNG.bs C:\Perl\bin\perl.exe -IC:\Perl\lib -IC:\Perl\lib -MExtUtils::C +ommand -e chmod 644 blib\arch\ auto\Tk\PNG\PNG.bs E:\dev\new\Tk-PNG-2.005>nmake test Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. C:\Perl\bin\perl.exe -Mblib -IC:\Perl\lib -IC:\Perl\lib -e "us +e Test::Harness qw(&runtests $ verbose); $verbose=0; runtests @ARGV;" t\basic.t Using E:/dev/new/Tk-PNG-2.005/blib t\basic....dubious Test returned status 5 (wstat 1280, 0x500) DIED. FAILED tests 2-4 Failed 3/4 tests, 25.00% okay Failed Test Stat Wstat Total Fail Failed List of Failed ---------------------------------------------------------------------- +--------- t\basic.t 5 1280 4 3 75.00% 2-4 Failed 1/1 test scripts, 0.00% okay. 3/4 subtests failed, 25.00% okay. NMAKE : fatal error U1077: 'C:\Perl\bin\perl.exe' : return code '0x2' Stop. E:\dev\new\Tk-PNG-2.005>
    at nmake test I get a stupid application error ( blah blah, the memory could not be read) </CODE>

     
    ______crazyinsomniac_____________________________
    Of all the things I've lost, I miss my mind the most.
    perl -e "$q=$_;map({chr unpack qq;H*;,$_}split(q;;,q*H*));print;$q/$q;"

      Indeed, there were two exactly same places with that incompatibilities between Borland C++ and MSVC++ compilers, and I forgot to mention them earlier. In order to compile, I edited that file in error (zconf.h) in two places just to throw away a couple of lines for Borland compiler some version, so I stepped forward, and that was like a right direction.

      Seems to me like "MakeMaker" is to blame here. Although I saw following places:

      #if (defined(__BORLANDC__)&&(__BORLANDC__<=0x520)) \ || (defined(__MINGW32__) && !defined(_ANONYMOUS_UNION)) ....... #endif
      in perl source code distribution, which are essentially same as we faced.

      BTW do you wish for me to email my build directory for reference? It's ~1Mb in size.

      addition: may be we should prepare compatibility patch for miscellaneous compilers on win32 systems and sent it to author of a module?

      Courage, the Cowardly Dog

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://181840]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2022-12-01 16:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?