App-Info
view release on metacpan or search on metacpan
lib/App/Info/RDBMS/SQLite.pm view on Meta::CPAN
is documented for the methods C<name()>, C<version()>, C<major_version()>,
C<minor_version()>, and C<patch_version()>, rest assured that it will only be
triggered once, by whichever of those four methods is called first.
=cut
##############################################################################
use strict;
use App::Info::RDBMS;
use App::Info::Util;
use vars qw(@ISA $VERSION);
@ISA = qw(App::Info::RDBMS);
$VERSION = '0.57';
use constant WIN32 => $^O eq 'MSWin32';
my $u = App::Info::Util->new;
=head1 INTERFACE
=head2 Constructor
=head3 new
my $sqlite = App::Info::RDBMS::SQLite->new(@params);
Returns an App::Info::RDBMS::SQLite object. See L<App::Info|App::Info> for a
complete description of argument parameters.
When it called, C<new()> searches the directories returned by
F<search_bin_dirs> for an executable with a name returned by
C<search_exe_names>. If found, it will be called by the object methods below
to gather the data necessary for each. If it cannot be found, then C<new()>
will attempt to load L<DBD::SQLite|DBD::SQLite> or
L<DBD::SQLite2|DBD::SQLite2>. These DBI drivers have SQLite embedded in them
but do not install the application. If these fail, then SQLite is assumed not
to be installed, and each of the object methods will return C<undef>.
B<Events:>
=over 4
=item info
Looking for SQLite.
=item confirm
Path to SQLite executable?
=item unknown
Path to SQLite executable?
=back
=cut
sub new {
# Construct the object.
my $self = shift->SUPER::new(@_);
# Find pg_config.
$self->info("Looking for SQLite");
my @exes = $self->search_exe_names;
if (my $cfg = $u->first_cat_exe(\@exes, $self->search_bin_dirs)) {
# We found it. Confirm.
$self->{executable} = $self->confirm(
key => 'path to sqlite',
prompt => "Path to SQLite executable?",
value => $cfg,
callback => sub { -x },
error => 'Not an executable'
);
} else {
$self->info("Looking for DBD::SQLite");
# Try using DBD::SQLite, which includes SQLite.
for my $dbd ('SQLite', 'SQLite2') {
eval "use DBD::$dbd";
next if $@;
# Looks like DBD::SQLite is installed. Set up a temp database
# handle so we can get information from it.
require DBI;
$self->{dbfile} = $u->catfile($u->tmpdir, 'tmpdb');
$self->{dbh} = DBI->connect("dbi:$dbd:dbname=$self->{dbfile}","","");
# I don't think there's any way to really confirm, so just return.
return $self;
}
# Handle an unknown value.
$self->{executable} = $self->unknown(
key => 'path to sqlite',
prompt => "Path to SQLite executable?",
callback => sub { -x },
error => 'Not an executable'
);
}
return $self;
}
sub DESTROY {
my $self = shift;
$self->{dbh}->disconnect if $self->{dbh};
unlink $self->{dbfile} if $self->{dbfile};
}
##############################################################################
=head2 Class Method
=head3 key_name
my $key_name = App::Info::RDBMS::SQLite->key_name;
Returns the unique key name that describes this class. The value returned is
the string "SQLite".
=cut
lib/App/Info/RDBMS/SQLite.pm view on Meta::CPAN
return unless $self->{executable};
unless (exists $self->{inc_dir}) {
$self->info("Searching for include directory");
# Should there be more paths than this?
my @incs = $self->search_inc_names;
if (my $dir = $u->first_cat_dir(\@incs, $self->search_inc_dirs)) {
$self->{inc_dir} = $dir;
} else {
$self->error("Cannot find include directory");
$self->{inc_dir} = $self->unknown(
key => 'sqlite inc dir',
callback => sub { $u->first_cat_dir(\@incs, $_) },
error => "File 'sqlite.h' not found in directory"
);
}
}
return $self->{inc_dir};
}
##############################################################################
=head3 home_url
my $home_url = $pg->home_url;
Returns the PostgreSQL home page URL.
=cut
sub home_url { "http://www.sqlite.org/" }
##############################################################################
=head3 download_url
my $download_url = $pg->download_url;
Returns the PostgreSQL download URL.
=cut
sub download_url { "http://www.sqlite.org/download.html" }
##############################################################################
=head3 search_exe_names
my @search_exe_names = $sqlite->search_exe_names;
Returns a list of possible names for the SQLite executable. The names are
F<sqlite3> and F<sqlite> by default (F<sqlite3.exe> and F<sqlite.exe> on
Win32).
=cut
sub search_exe_names {
my $self = shift;
my @exes = qw(sqlite3 sqlite);
if (WIN32) { $_ .= ".exe" for @exes }
return ($self->SUPER::search_exe_names, @exes);
}
##############################################################################
=head3 search_bin_dirs
my @search_bin_dirs = $sqlite->search_bin_dirs;
Returns a list of possible directories in which to search an executable. Used
by the C<new()> constructor to find an executable to execute and collect
application info. The found directory will also be returned by the C<bin_dir>
method.
=cut
sub search_bin_dirs { (shift->SUPER::search_bin_dirs, $u->path) }
##############################################################################
=head3 search_lib_names
my @seach_lib_names = $self->search_lib_nams
Returns a list of possible names for library files. Used by C<lib_dir()> to
search for library files. By default, the list is:
=over
=item libsqlite3.a
=item libsqlite3.la
=item libsqlite3.so
=item libsqlite3.so.0
=item libsqlite3.so.0.0.1
=item libsqlite3.dylib
=item libsqlite3.0.dylib
=item libsqlite3.0.0.1.dylib
=item libsqlite.a
=item libsqlite.la
=item libsqlite.so
=item libsqlite.so.0
=item libsqlite.so.0.0.1
=item libsqlite.dylib
=item libsqlite.0.dylib
=item libsqlite.0.0.1.dylib
=back
=cut
sub search_lib_names {
my $self = shift;
(my $exe = $u->splitpath($self->{executable})) =~ s/\.[^.]+$//;
return $self->SUPER::search_lib_names,
map { "lib$exe.$_"} qw(a la so so.0 so.0.0.1 dylib 0.dylib 0.0.1.dylib);
}
##############################################################################
=head3 search_so_lib_names
my @seach_so_lib_names = $self->search_so_lib_nams
Returns a list of possible names for shared object library files. Used by
C<so_lib_dir()> to search for library files. By default, the list is:
=over
=item libsqlite3.so
=item libsqlite3.so.0
=item libsqlite3.so.0.0.1
=item libsqlite3.dylib
=item libsqlite3.0.dylib
=item libsqlite3.0.0.1.dylib
=item libsqlite.so
=item libsqlite.so.0
=item libsqlite.so.0.0.1
=item libsqlite.dylib
=item libsqlite.0.dylib
=item libsqlite.0.0.1.dylib
=back
=cut
sub search_so_lib_names {
my $self = shift;
(my $exe = $u->splitpath($self->{executable})) =~ s/\.[^.]+$//;
return $self->SUPER::search_so_lib_names,
map { "lib$exe.$_"}
qw(so so.0 so.0.0.1 dylib 0.dylib 0.0.1.dylib);
}
##############################################################################
=head3 search_lib_dirs
my @search_lib_dirs = $sqlite->search_lib_dirs;
Returns a list of possible directories in which to search for libraries. By
default, it returns all of the paths in the C<libsdirs> and C<loclibpth>
attributes defined by the Perl L<Config|Config> module -- plus F</sw/lib> (in
support of all you Fink users out there).
=cut
sub search_lib_dirs { shift->SUPER::search_lib_dirs, $u->lib_dirs, '/sw/lib' }
##############################################################################
=head3 search_inc_names
my @search_inc_names = $sqlite->search_inc_names;
Returns a list of include file names to search for. Used by C<inc_dir()> to
search for an include file. By default, the names are F<sqlite3.h> and
F<sqlite.h>.
=cut
sub search_inc_names {
my $self = shift;
(my $exe = $u->splitpath($self->{executable})) =~ s/\.[^.]+$//;
return $self->SUPER::search_inc_names, "$exe.h";
}
##############################################################################
=head3 search_inc_dirs
my @search_inc_dirs = $sqlite->search_inc_dirs;
Returns a list of possible directories in which to search for include files.
Used by C<inc_dir()> to search for an include file. By default, the
directories are:
=over 4
=item /usr/local/include
=item /usr/include
=item /sw/include
=back
=cut
sub search_inc_dirs {
shift->SUPER::search_inc_dirs,
qw(/usr/local/include
/usr/include
/sw/include);
}
1;
__END__
=head1 SUPPORT
This module is stored in an open L<GitHub
repository|http://github.com/theory/app-info/>. Feel free to fork and
contribute!
Please file bug reports via L<GitHub
Issues|http://github.com/theory/app-info/issues/> or by sending mail to
L<bug-App-Info@rt.cpan.org|mailto:bug-App-Info@rt.cpan.org>.
=head1 AUTHOR
David E. Wheeler <david@justatheory.com>
=head1 SEE ALSO
L<App::Info|App::Info> documents the event handling interface.
L<App::Info::RDBMS|App::Info::RDBMS> is the App::Info::RDBMS parent class from
which App::Info::RDBMS::SQLite inherits.
L<DBD::SQLite|DBD::SQLite> is the L<DBI|DBI> driver for connecting to SQLite
databases.
L<http://www.sqlite.org/> is the SQLite home page.
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2004-2011, David E. Wheeler. Some Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
=cut
( run in 0.957 second using v1.01-cache-2.11-cpan-98e64b0badf )