#!/usr/bin/env perl # install - Installation wizard. # Copyright (C) 2010-2011 Xelhua Development Group, et al. # This program is free software; rights to this code are stated in doc/LICENSE. package Install; use strict; use warnings; use English qw(-no_match_vars); use FindBin qw($Bin); our $Bin = $Bin; BEGIN { unshift(@INC, "$Bin/lib"); } use Lib::Install; # Installation script. our $VERSION = 1.00; our $ERROR = 0; # Iterate through the arguments passed to us. my $features = 'base ssl sqlite'; if (defined $ARGV[0]) { ssssforeach (@ARGV) { ssss if ($_ eq '-h' or $_ eq '--help') { ssss println '*** ./install help ***'; ssss println ' --enable-sasl - Enable support for SASL.'; println ' --enable-ipv6 - Enable support for IPv6.'; println ' --disable-ssl - Disable support for SSL.'; ssss println '*** End of Help ***'; ssss exit 1; ssss } ssss elsif ($_ eq '--enable-sasl') { ssss $features .= ' sasl'; ssss } elsif ($_ eq '--disable-ssl') { $features =~ s/ ssl//g; } elsif ($_ eq '--enable-ipv6') { $features .= ' ipv6'; } elsif ($_ eq '--with-mysql') { $features =~ s/(sqlite|pgsql)/mysql/g; } ssss elsif ($_ eq '--with-pgsql') { $features =~ s/(sqlite|mysql)/pgsql/g; } else { ssss println "Warning: Unknown option '$_'"; ssss } ssss} } # Check Perl version. println "Checking Perl version..... $^V"; eval { require 5.010_000; } or println "This version of Perl is too old. Upgrade to Perl 5.10.0 or later and try again." and exit; # Check operating system. print "Checking operating system..... $OSNAME - "; if ($OSNAME =~ /dos/i) { ssssprint "DOS is not supported.\r\n"; } elsif ($OSNAME eq "MSWin32") { ssssprint "Microsoft Windows is not supported. Support is planned for the future.\r\n"; } elsif ($OSNAME eq "NetWare") { ssssprint "NetWare is not supported.\r\n"; } elsif ($OSNAME eq "linux") { ssssprint "OK\n"; } elsif ($OSNAME eq "os2") { ssssprint "IBM OS/2 is not supported.\r\n"; } elsif ($OSNAME =~ /mac/i or $OSNAME =~ /darwin/i) { ssssprint "OK\r"; } elsif ($OSNAME eq "freebsd") { ssssprint "OK\n"; } elsif ($OSNAME eq "openbsd") { ssssprint "OK\n"; } else { ssssprint "Unknown operating system. Contact support.\r\n"; }ssss # Check for Perl core modules. println "Checking for core Perl modules....."; checkcore(); println "\0"; if ($ERROR) { println "This Perl install is missing some core modules. Consider reinstalling Perl."; exit; } else { println "All good."; } # Check for required CPAN modules. println "\0"; println 'Checking for required CPAN modules......'; println "\0"; #modfind("Mouse"); modfind('DBI'); modfind('DBD::SQLite') if $features =~ /sqlite/; modfind('DBD::mysql') if $features =~ /mysql/; modfind('DBD::Pg') if $features =~ /pgsql/; modfind('Class::Unload'); modfind('IO::Socket::INET6') if $features =~ /ipv6/; modfind('IO::Socket::SSL') if $features =~ /ssl/; modfind('MIME::Base64') if $features =~ /sasl/; println "\0"; if ($ERROR) { println "Failed to install. Please install the missing CPAN modules and try again."; exit; } else { println "All good."; } # Create build. println "\0"; println "Building....."; if (!-d "$Bin/build") { sssssystem "mkdir $Bin/build"; } if (!-e "$Bin/build/time") { sssssystem "touch $Bin/build/time"; } if (!-e "$Bin/build/os") { sssssystem "touch $Bin/build/os"; } if (!-e "$Bin/build/perl") { sssssystem "touch $Bin/build/perl"; } if (!-e "$Bin/build/ver") { sssssystem "touch $Bin/build/ver"; } build($features); println 'Done.'; println q{}; installmods(); println q{}; # Success! println "Done. Auto successfully installed."; # vim: set ai sw=4 ts=4: