Subject: | Compiling - Win32 - .NET Framework SDK |
Perl Module: DBD-SQLite-0.24
Operating System: Windows XP SP1 (5.1.2600)
Perl Version: Perl 5.6.1 ActiveState build 630
Compiler: Microsoft .NET Framework SDK
Here is a problem I had compiling the module (and a workaround)...
D:\SQLite\DBD-SQLite-0.24>perl makefile.pl
Checking if your kit is complete...
Looks good
Using DBI 1.28 installed in V:/PERL/site/lib/auto/DBI
Writing Makefile for DBD::SQLite
D:\SQLite\DBD-SQLite-0.24>nmake
Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation. All rights reserved.
echo '#include <stdio.h>' >temp.c
The system cannot find the file specified.
NMAKE : fatal error U1077: 'echo' : return code '0x1'
Stop.
I took a peek at the makefile and found that the error occurs in the section:
config.h:
echo '#include <stdio.h>' >temp.c
echo 'int main(){printf(' >>temp.c
echo '"#define SQLITE_PTR_SZ %d\n",sizeof(char*));' >>temp.c
echo 'exit(0);}' >>temp.c
$(CC) -o temp temp.c
./temp >config.h
rm -f temp.c temp
It appears that this is supposed to build a small executable that will create a config.h file with the system pointer size. For some reason, Microsoft's echo does not like the '<' and '>' characters. I'm not sure how to change the makefile.pl to fix this, so here is the workaround:
First, I removed the lines under the 'config.h:' section (leaving the 'config.h' line, of course). Then I created the config.h file with the following contents:
#define SQLITE_PTR_SZ 4
Since I have a 32-bit system, the pointers are 4 bytes long.
Then the build was successful. I'll spare you the output of the build, but will mention that there were a few warnings:
cl : Command line warning D4029 : optimization is not available in the standard edition compiler
cl : Command line warning D4002 : ignoring unknown option '-O6'
The 'free' compiler that comes with the .NET Framework SDK does not to optimization (no surprise there).
dbdimp.c(28) : warning C4133: 'function' : incompatible types - from '_PerlIO *' to 'FILE *'
d:\sqlite\dbd-sqlite-0.24\dbdimp.c(345) : warning C4716: 'sqlite_bind_ph' : must return a value
d:\sqlite\dbd-sqlite-0.24\dbdimp.c(415) : warning C4716: 'sqlite_st_blob_read' : must return a value
d:\sqlite\dbd-sqlite-0.24\dbdimp.c(531) : warning C4716: 'sqlite_st_STORE_attrib_k' : must return a value
d:\sqlite\dbd-sqlite-0.24\dbdimp.c(536) : warning C4716: 'sqlite_st_FETCH_attrib_k' : must return a value
d:\sqlite\dbd-sqlite-0.24\vdbe.c(5509) : warning C4715: 'sqliteVdbeExec' : not all control paths return a value
I'm not sure what those warnings are about, but 'nmake test' showed that everything is ok!
t\00basic...........ok
t\01logon...........ok
t\02cr_table........ok
t\03insert..........ok
t\04select..........ok
t\05tran............ok
t\06error...........ok
t\10dsnlist.........ok
t\20createdrop......ok
t\30insertfetch.....ok
t\40bindparam.......ok
t\40blobs...........ok
t\40listfields......ok
t\40nulls...........ok
t\40numrows.........ok
t\50chopblanks......ok
t\50commit..........ok
t\99cleanup.........ok
t\ak-dbd............ok
t\dbdadmin..........ok
All tests successful.