mirror of
https://github.com/DBD-SQLite/DBD-SQLite
synced 2025-06-07 14:19:10 -04:00
DBD::SQLite: install c source/header into share directory
This commit is contained in:
parent
38ed67c128
commit
69fef061da
4 changed files with 33 additions and 81 deletions
3
Changes
3
Changes
|
@ -18,7 +18,8 @@ Changes for Perl extension DBD-SQLite
|
|||
primary key column names (ISHIGAKI)
|
||||
- You can now retrieve some of the statement handle attributes
|
||||
before you execute. (ISHIGAKI)
|
||||
- Added preamble to generate ::sqlite3_[hc] modules to allow
|
||||
- Added preamble to copy sqlite3.[hc] files into a share
|
||||
directory (where you can access via File::ShareDir) to allow
|
||||
extension authors to use the same C source/header as they
|
||||
used to build DBD::SQLite itself. (ISHIGAKI)
|
||||
|
||||
|
|
56
Makefile.PL
56
Makefile.PL
|
@ -190,46 +190,6 @@ if ( 0 ) {
|
|||
|
||||
@ARGV = grep( ! /SQLITE_LOCATION|USE_LOCAL_SQLITE/, @ARGV );
|
||||
|
||||
foreach my $file (qw/sqlite3.h sqlite3.c/) {
|
||||
(my $pm = $file) =~ tr/./_/;
|
||||
print "generating lib/DBD/SQLite/$pm.pm\n";
|
||||
open my $fh, '>', "lib/DBD/SQLite/$pm.pm" or die $!;
|
||||
print $fh <<"EOT";
|
||||
package DBD::SQLite::$pm;
|
||||
|
||||
use strict;
|
||||
our \$CODE = do { local \$/; <DATA> };
|
||||
|
||||
sub get {
|
||||
my (\$class, \$file, \$out) = \@_;
|
||||
my \$got;
|
||||
if (\$file) {
|
||||
(\$got) = \$CODE =~ m{(
|
||||
/\\*+[ ]Begin[ ]file[ ]\$file[ ]\\*+
|
||||
.+?
|
||||
/\\*+[ ]End[ ]of[ ]\$file[ ]\\*+/
|
||||
)}sx;
|
||||
}
|
||||
else {
|
||||
\$got = \$CODE;
|
||||
}
|
||||
if (\$got && \$out) {
|
||||
open my \$fh, '>', \$out or die \$!;
|
||||
print \$fh \$got;
|
||||
}
|
||||
return \$got ? \$got : '';
|
||||
}
|
||||
|
||||
1;
|
||||
\__DATA__
|
||||
EOT
|
||||
print $fh do {
|
||||
local $/;
|
||||
open my $in, '<', $file or die $!;
|
||||
<$in>;
|
||||
};
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# Prepare Compiler Options
|
||||
|
||||
|
@ -275,10 +235,6 @@ my @CC_OPTIONS = (
|
|||
) : () ),
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#####################################################################
|
||||
# Hand off to ExtUtils::MakeMaker
|
||||
|
||||
|
@ -361,9 +317,19 @@ use Config;
|
|||
sub postamble {
|
||||
require DBI;
|
||||
require DBI::DBD;
|
||||
eval {
|
||||
my $postamble = eval {
|
||||
DBI::DBD::dbd_postamble(@_)
|
||||
};
|
||||
my $S = $^O eq 'MSWin32' ? '\\' : '/'; # only Win32 (not cygwin)
|
||||
my $share = "\$(INST_LIB)${S}auto${S}share${S}dist${S}\$(DISTNAME)";
|
||||
$postamble .= <<"SHARE";
|
||||
config ::
|
||||
\t\$(NOECHO) \$(MKPATH) "$share"
|
||||
\t\$(NOECHO) \$(CHMOD) \$(PERM_DIR) "$share"
|
||||
\t\$(NOECHO) \$(CP) "sqlite3.c" "$share${S}sqlite3.c"
|
||||
\t\$(NOECHO) \$(CP) "sqlite3.h" "$share${S}sqlite3.h"
|
||||
SHARE
|
||||
return $postamble;
|
||||
}
|
||||
|
||||
sub libscan {
|
||||
|
|
|
@ -1601,23 +1601,31 @@ need to call the L</create_collation> method directly.
|
|||
Since 1.30_01, you can retrieve the bundled sqlite C source and/or
|
||||
header like this:
|
||||
|
||||
use DBD::SQLite::sqlite3_h;
|
||||
use DBD::SQLite::sqlite3_c;
|
||||
use File::ShareDir 'dist_dir';
|
||||
use File::Spec::Functions 'catfile';
|
||||
|
||||
# the whole sqlite3_h header
|
||||
my $sqlite3_h = DBD::SQLite::sqlite3_h->get; # the whole header
|
||||
# the whole sqlite3.h header
|
||||
my $sqlite3_h = catfile(dist_dir('DBD-SQLite'), 'sqlite3.h');
|
||||
|
||||
# or only a particular header, amalgamated in sqlite3.c
|
||||
my $parse_h = DBD::SQLite::sqlite3_c->get('parse.h');
|
||||
|
||||
# you even write it to a file (if 'include' directory exists).
|
||||
DBD::SQLite::sqlite3_c->get('parse.h' => 'include/parse.h');
|
||||
my $what_i_want = 'parse.h';
|
||||
my $sqlite3_c = catfile(dist_dir('DBD-SQLite'), 'sqlite3.c');
|
||||
open my $fh, '<', $sqlite3_c or die $!;
|
||||
my $code = do { local $/; <$fh> };
|
||||
my ($parse_h) = $code =~ m{(
|
||||
/\*+[ ]Begin[ ]file[ ]$what_i_want[ ]\*+
|
||||
.+?
|
||||
/\*+[ ]End[ ]of[ ]$what_i_want[ ]\*+/
|
||||
)}sx;
|
||||
open my $out, '>', $what_i_want or die $!;
|
||||
print $out $parse_h;
|
||||
close $out;
|
||||
|
||||
You usually want to use this feature in your extension's C<Makefile.PL>,
|
||||
You usually want to use this in your extension's C<Makefile.PL>,
|
||||
and you may want to add DBD::SQLite to your extension's C<CONFIGURE_REQUIRES>
|
||||
to allow your extension users to use the same C source/header they
|
||||
use to build DBD::SQLite itself (instead of the ones installed
|
||||
in their system).
|
||||
to ensure your extension users use the same C source/header they use
|
||||
to build DBD::SQLite itself (instead of the ones installed in their
|
||||
system).
|
||||
|
||||
=head1 TO DO
|
||||
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
BEGIN {
|
||||
$| = 1;
|
||||
$^W = 1;
|
||||
}
|
||||
|
||||
use t::lib::Test qw/connect_ok @CALL_FUNCS/;
|
||||
use Test::More;
|
||||
use Test::NoWarnings;
|
||||
|
||||
plan tests => 6;
|
||||
|
||||
use_ok('DBD::SQLite::sqlite3_h');
|
||||
use_ok('DBD::SQLite::sqlite3_c');
|
||||
|
||||
my $header = DBD::SQLite::sqlite3_h->get;
|
||||
like $header => qr/define _SQLITE3_H_/, 'got whole file';
|
||||
|
||||
my $hwtime_h = DBD::SQLite::sqlite3_c->get('hwtime.h');
|
||||
like $hwtime_h => qr/Begin file hwtime.h/, 'has Begin file';
|
||||
unlike $hwtime_h => qr/Begin file [^h][^w]/, 'has no other Begin file';
|
Loading…
Add table
Reference in a new issue