package INSTALL::odbc; use INSTALL::common; use INSTALL::substitute; use INSTALL::global; use INSTALL::ini; use INSTALL::os; use strict; no strict 'refs'; no strict 'subs'; ########## Define Globals my $pGlobals = \%INSTALL::global::variables; my $pParameters = \%INSTALL::parameter::variables; my $pOS = \%INSTALL::os::Details; sub load_globals { ($#_ == -1) || die "Invalid number of arguments."; my $pIni = INSTALL::ini::open($pGlobals->{chili_ini}); if (not $pIni) { return(error("Unable to open $pGlobals->{chili_ini}.")); } else { my $pSection = INSTALL::ini::openSection($pIni, $pGlobals->{asphome}); if (not $pSection) { return(error("Unable to locate section [$pGlobals->{asphome}].")); } else { return(%{$pSection}); } } } sub store_globals { my (%additions) = @_; my $pIni = INSTALL::ini::open($pGlobals->{chili_ini}); if (not $pIni) { return(error("Unable to open $pGlobals->{chili_ini}.")); } else { my $pSection = INSTALL::ini::insertSection($pIni, $pGlobals->{asphome}); foreach(keys %additions) { $pSection->{$_} = $additions{$_}; } return(INSTALL::ini::save($pIni,$pGlobals->{chili_ini})); } } sub configure { my %global_additions = ( odbc::version => "$pGlobals->{odbc_version}", odbc::dir => "$pGlobals->{asphome}/odbc", odbc::sqlnk_dir => "$pGlobals->{asphome}/odbc/sqlnk", odbc::sqlnklocale_dir => "$pGlobals->{asphome}/odbc/sqlnk/locale", odbc::sqlnkbin_dir => "$pGlobals->{asphome}/odbc/sqlnk/bin", odbc::sqlnklib_dir => "$pGlobals->{asphome}/odbc/sqlnk/lib", odbc::sqlnkini_dir => "$pGlobals->{asphome}/odbc/sqlnk/ini", odbc::direct_dir => "$pGlobals->{asphome}/odbc/direct", odbc::directlocale_dir => "$pGlobals->{asphome}/odbc/direct/locale", odbc::directlib_dir => "$pGlobals->{asphome}/odbc/direct/lib", odbc::opensource_dir => "$pGlobals->{asphome}/odbc/opensource", odbc::opensourcelib_dir => "$pGlobals->{asphome}/odbc/opensource/lib", ); my $pGlobalAdd = \%global_additions; store_globals(%global_additions); my @read_only = ((map { "$pGlobals->{template_dir}/$_" } ("global_odbc.ini", "sqlnkdll.ini" ) ), (map { "$global_additions{odbc::sqlnkini_dir}/$_" } ("sqlnkdbs.ini", "sqlnkdsn.ini", "sqlnkntw.ini", "sqlnksrv.ini", "sqlnkrsc.ini" ) ) ); map { chmod(0600,$_) } @read_only; INSTALL::substitute::template("global_odbc.sh",$pGlobals->{asphome},undef); INSTALL::substitute::template("global_odbc.ini",$pGlobals->{asphome},undef); INSTALL::substitute::template("sqlnkdll.ini", "$global_additions{odbc::sqlnkini_dir}/.sqlnkdll.ini", undef); #============================================================================ # Special configuration on an OS specific / distribution specific basis. #---------------------------------------------------------------------------- my $driver_dir = "$pGlobalAdd->{odbc::directlib_dir}"; my $driver_ext = $pGlobals->{lib_ext}; ######################### Associations of driver types to actual drivers. my %drivers = ( # Informix might not be YYinf915.so on some platforms. "Informix" => [ "YYinf9$pGlobalAdd->{odbc::version}", "YYinf$pGlobalAdd->{odbc::version}" ] ); foreach my $driver_name (keys %drivers) { my $pList = $drivers{$driver_name}; my $driver_check = "$driver_dir/$pList->[0].$driver_ext"; FIND_REPLACEMENT_DRIVER: { if (not -f $driver_check) { foreach $driver_name (@{$pList}[1 .. $#{$pList}]) { my $driver_path = "$driver_dir/$driver_name.$driver_ext"; if (-f $driver_path) { # Create a symlink to the 'corrected for' path. symlink($driver_path,$driver_check); last FIND_REPLACEMENT_DRIVER; } } # If we get here, we found no replacement, log it. if ($pOS->{os} !~ /Linux/i) { # bug 3668 # linux doesn't get a YYinf*.so file. it just uses YYifc*.so, # so keep quiet. error_log("Unable to find a replacement driver for $driver_name."); report_log("Default driver: ","$driver_dir/$pList->[0].$driver_ext"); } } } } ######################### Localization issues with respect to error messages. my $locale_binary = locate_binary("locale"); my $default_locale = "en_US"; foreach my $locale_dir ($pGlobalAdd->{odbc::directlocale_dir},$pGlobalAdd->{odbc::sqlnklocale_dir}) { if (-x $locale_binary) { foreach my $locale_assoc (split("\n",`locale`)) { my $locale = $locale_assoc; $locale =~ s/[^=]+=(.*)/$1/; $locale =~ s/[\'\"]//g; if ($locale) { my $locale_path = "$locale_dir/$locale"; # If we do not have a locale installed which handles this specific locale, # create a symlink refering to the default (installed) locale. if (not -f $locale_path) { symlink($default_locale,$locale_path); } } } } } #============================================================================ return(1); } sub uninstall { # Nothing to do, yet. return(1); } 1;