summaryrefslogtreecommitdiffstats
path: root/knetworkconf/backends/platform.pl.in
diff options
context:
space:
mode:
Diffstat (limited to 'knetworkconf/backends/platform.pl.in')
-rw-r--r--knetworkconf/backends/platform.pl.in685
1 files changed, 685 insertions, 0 deletions
diff --git a/knetworkconf/backends/platform.pl.in b/knetworkconf/backends/platform.pl.in
new file mode 100644
index 0000000..c81a9e1
--- /dev/null
+++ b/knetworkconf/backends/platform.pl.in
@@ -0,0 +1,685 @@
+#!/usr/bin/env perl
+#-*- Mode: perl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
+# Determine the platform we're running on.
+#
+# Copyright (C) 2000-2001 Ximian, Inc.
+#
+# Authors: Arturo Espinosa <[email protected]>
+# Hans Petter Jansson <[email protected]>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+
+# --- System guessing --- #
+
+
+$SCRIPTSDIR = "@scriptsdir@";
+if ($SCRIPTSDIR =~ /^@scriptsdir[@]/)
+{
+ $SCRIPTSDIR = ".";
+ $DOTIN = ".in";
+}
+
+require "$SCRIPTSDIR/parse.pl$DOTIN";
+require "$SCRIPTSDIR/xml.pl$DOTIN";
+
+
+$PLATFORM_INFO = {
+ "debian-2.2" => "Debian GNU/Linux 2.2 Potato",
+ "debian-3.0" => "Debian GNU/Linux 3.0 Woody",
+ "debian-3.1" => "Debian GNU/Linux 3.1 Sarge",
+ "debian-4.0" => "Debian GNU/Linux 4.0 Etch",
+ "debian-5.0" => "Debian GNU/Linux 5.0 Lenny",
+ "debian-testing" => "Debian GNU/Linux Testing/Unstable",
+ "ubuntu-5.04" => "Kubuntu 5.04, Hoary Hedgehog",
+ "ubuntu-5.10" => "Kubuntu 5.10, Breezy Badger",
+ "ubuntu-6.06" => "Kubuntu 6.06, Dapper Drake",
+ "ubuntu-6.10" => "Kubuntu 6.10, Edgy Eft",
+ "ubuntu-7.04" => "Kubuntu 7.04, Feisty Fawn",
+ "ubuntu-7.10" => "Kubuntu 7.10, Gutsy Gibbon",
+ "ubuntu-8.04" => "Kubuntu 8.04, Hardy Heron",
+ "redhat-5.2" => "Red Hat Linux 5.2 Apollo",
+ "redhat-6.0" => "Red Hat Linux 6.0 Hedwig",
+ "redhat-6.1" => "Red Hat Linux 6.1 Cartman",
+ "redhat-6.2" => "Red Hat Linux 6.2 Zoot",
+ "redhat-7.0" => "Red Hat Linux 7.0 Guinness",
+ "redhat-7.1" => "Red Hat Linux 7.1 Seawolf",
+ "redhat-7.2" => "Red Hat Linux 7.2 Enigma",
+ "redhat-7.3" => "Red Hat Linux 7.3 Valhalla",
+ "redhat-8.0" => "Red Hat Linux 8.0 Psyche",
+ "redhat-9" => "Red Hat Linux 9.0 Shrike",
+ "openna-1.0" => "OpenNA Linux 1.0 VSLC",
+ "mandrake-7.1" => "Linux Mandrake 7.1",
+ "mandrake-7.2" => "Linux Mandrake 7.2 Odyssey",
+ "mandrake-8.0" => "Linux Mandrake 8.0 Traktopel",
+ "mandrake-9.0" => "Linux Mandrake 9.0 Dolphin",
+ "mandrake-9.1" => "Linux Mandrake 9.1 Bamboo",
+ "mandrake-9.2" => "Linux Mandrake 9.2 FiveStar",
+ "mandrake-10.0" => "Linux Mandrake 10.0",
+ "mandrake-10.1" => "Linux Mandrake 10.1",
+ "mandrake-10.2" => "Linux Mandrake 2005 LE",
+ "mandriva-2006.0" => "Mandriva Linux 2006.0",
+ "mandriva-2006.1" => "Mandriva Linux 2006.1",
+ "mandriva-2007.0" => "Mandriva Linux 2007.0",
+ "mandriva-2007.1" => "Mandriva Linux 2007.1",
+ "yoper-2.2" => "Yoper Linux 2.2",
+ "blackpanther-4.0" => "Black Panther OS 4.0",
+ "conectiva-9" => "Conectiva Linux 9",
+ "conectiva-10" => "Conectiva Linux 10",
+ "suse-7.0" => "SuSE Linux 7.0",
+ "suse-9.0" => "SuSE Linux 9.0",
+ "suse-9.1" => "SuSE Linux 9.1",
+ "turbolinux-7.0" => "Turbolinux 7.0",
+ "slackware-8.0.0" => "Slackware 8.0.0",
+ "slackware-8.1" => "Slackware 8.1",
+ "slackware-9.0.0" => "Slackware 9.0.0",
+ "slackware-9.1.0" => "Slackware 9.1.0",
+ "slackware-10.0.0" => "Slackware 10.0.0",
+ "slackware-10.1.0" => "Slackware 10.1.0",
+ "slackware-10.2.0" => "Slackware 10.2.0",
+ "freebsd-4" => "FreeBSD 4",
+ "freebsd-5" => "FreeBSD 5",
+ "freebsd-6" => "FreeBSD 6",
+ "gentoo" => "Gentoo Linux",
+ "vlos-1.2" => "Vida Linux OS 1.2",
+ "archlinux" => "Arch Linux",
+ "pld-1.0" => "PLD 1.0 Ra",
+ "pld-1.1" => "PLD 1.1 Ra",
+ "pld-1.99" => "PLD 1.99 Ac-pre",
+ "vine-3.0" => "Vine Linux 3.0",
+ "vine-3.1" => "Vine Linux 3.1",
+ "fedora-1" => "Fedora Core 1 (Yarrow)",
+ "fedora-2" => "Fedora Core 2 (Tettnang)",
+ "fedora-3" => "Fedora Core 3 (Heidelberg)",
+ "fedora-4" => "Fedora Core 4 (Stentz)",
+ "fedora-5" => "Fedora Core 5 (Bordeaux)",
+ "rpath" => "rPath Linux",
+ "ark" => "Ark Linux",
+};
+
+sub check_lsb
+{
+ my ($ver, $dist);
+# my %vermap =
+# ("3.0" => "woody");
+
+ my %distmap =
+ ("Debian" => "debian"),
+ ("Mandrake" => "mandrake"),
+ ("Conectiva" => "conectiva"),
+ ("Blackpanther" => "blackpanther");
+
+ # gst_prefix not required here: parse already does that for us.
+ $dist = lc (&gst_parse_sh ("/etc/lsb-release", "DISTRIB_ID"));
+ $ver = lc (&gst_parse_sh ("/etc/lsb-release", "DISTRIB_RELEASE"));
+
+# $ver = $vermap{$ver} if exists $vermap{$ver};
+ $dist = $distmap{$dist} if exists $dirmap{$dir};
+
+ return -1 if ($dist eq "") || ($ver eq "");
+ return "$dist-$ver";
+}
+
+sub check_debian
+{
+ my ($ver, $i);
+ my %vermap =
+ ("testing/unstable" => "testing",
+ "lenny/sid" => "testing",
+ "3.1" => "sarge",
+ "4.0" => "etch",
+ "5.0" => "lenny");
+
+ open DEBIAN, "$gst_prefix/etc/debian_version" or return -1;
+ chomp ($ver = <DEBIAN>);
+ close DEBIAN;
+
+ #if $ver is not found, we will assume it is testing
+ if($ver and exists $vermap{$ver}) {
+ $ver = $vermap{$ver};
+ } else {
+ $ver = "testing";
+ }
+
+ return "debian-$ver";
+}
+
+
+sub check_redhat
+{
+ open RELEASE, "$gst_prefix/etc/redhat-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^Red Hat Linux.*\s+([0-9.]+)\s+.*/)
+ {
+ close RELEASE;
+ return "redhat-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_openna
+{
+ open OPENNA, "$gst_prefix/etc/openna-release" or return -1;
+ while (<OPENNA>)
+ {
+ chomp;
+ if (/^OpenNA*/)
+ {
+ close OPENNA;
+ return "openna-$1";
+ }
+ }
+ close OPENNA;
+ return -1;
+}
+
+sub check_caldera
+{
+ open INSTALLED, "$gst_prefix/etc/.installed" or return -1;
+ while (<INSTALLED>)
+ {
+ chomp;
+ if (/^OpenLinux-(.*)-.*/)
+ {
+ close INSTALLED;
+ return "caldera-$1";
+ }
+ }
+ close INSTALLED;
+ return -1;
+}
+
+
+sub check_suse
+{
+ open RELEASE, "$gst_prefix/etc/SuSE-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^VERSION\s*=\s*(\S+)/)
+ {
+ close RELEASE;
+ return "suse-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_mandrake
+{
+ open MANDRAKE, "$gst_prefix/etc/mandrake-release" or return -1;
+ while (<MANDRAKE>)
+ {
+ $ver = $_;
+ chomp ($ver);
+ if ($ver =~ /^Linux Mandrake release (\S+)/)
+ {
+ close MANDRAKE;
+ return "mandrake-$1";
+ }
+ elsif ($ver =~ /^Mandrake( L|l)inux release ([\d\.]+)/i)
+ {
+ close MANDRAKE;
+ return "mandrake-$2";
+ }
+ }
+ close MANDRAKE;
+ return -1;
+}
+
+sub check_mandriva
+{
+ open MANDRIVA, "$gst_prefix/etc/mandriva-release" or return -1;
+ while (<MANDRIVA>)
+ {
+ $ver = $_;
+ chomp ($ver);
+ if ($ver =~ /^Linux Mandriva release (\S+)/)
+ {
+ close MANDRIVA;
+ return "mandriva-$1";
+ }
+ elsif ($ver =~ /^Mandriva( L|l)inux release ([\d\.]+)/i)
+ {
+ close MANDRIVA;
+ return "mandriva-$2";
+ }
+ }
+ close MANDRIVA;
+ return -1;
+}
+
+sub check_yoper
+{
+ open YOPER, "$gst_prefix/etc/yoper-release" or return -1;
+ while (<YOPER>)
+ {
+ $ver = $_;
+ chomp ($ver);
+ if ($ver =~ m/Yoper (\S+)/)
+ {
+ close YOPER;
+ # find the first digit of our release
+ $mystring= ~m/(\d)/;
+ #store it in $fdigit
+ $fdigit= $1;
+ # the end of the release is marked with -2 so find the -
+ $end = index($ver,"-");
+ $start = index($ver,$fdigit);
+ # extract the substring into $newver
+ $newver= substr($ver,$start,$end-$start);
+ print $newver;
+ return "yoper-$newver";
+ }
+ }
+ close YOPER;
+ return -1;
+}
+
+sub check_blackpanther
+{
+ open BLACKPANTHER, "$gst_prefix/etc/blackPanther-release" or return -1;
+
+ while (<BLACKPANTHER>)
+ {
+ $ver = $_;
+ chomp ($ver);
+ if ($ver =~ /^Linux Black Panther release (\S+)/)
+ {
+ close BLACKPANTHER;
+ return "blackPanther-$1";
+ }
+ elsif ($ver =~ /^Black Panther ( L|l)inux release ([\d\.]+)/i)
+ {
+ close BLACKPANTHER;
+ return "blackPanther-$2";
+ }
+ }
+
+ close BLACKPANTHER;
+ return -1;
+}
+
+sub check_fedora
+{
+ open FEDORA, "$gst_prefix/etc/fedora-release" or return -1;
+ while (<FEDORA>)
+ {
+ $ver = $_;
+ chomp ($ver);
+
+ if ($ver =~ /^Fedora Core release (\S+)/)
+ {
+ close FEDORA;
+ return "fedora-$1";
+ }
+ }
+
+ close FEDORA;
+ return -1;
+}
+
+sub check_rpath
+{
+ open RPATH, "$gst_prefix/etc/distro-release" or return -1;
+
+ while (<RPATH>)
+ {
+ $ver = $_;
+ chomp ($ver);
+
+ if ($ver =~ /^rPath Linux/)
+ {
+ close RPATH;
+ return "rpath";
+ }
+ if ($ver =~ /Foresight/)
+ {
+ close RPATH;
+ return "rpath";
+ }
+ }
+
+ close RPATH;
+ return -1;
+}
+
+sub check_conectiva
+{
+ open RELEASE, "$gst_prefix/etc/conectiva-release" or return -1;
+
+ while (<RELEASE>)
+ {
+ chomp;
+
+ if (/^Conectiva Linux (\S+)/)
+ {
+ close RELEASE;
+ return "conectiva-$1";
+ }
+ }
+
+ close RELEASE;
+ return -1;
+}
+
+sub check_turbolinux
+{
+ open RELEASE, "$gst_prefix/etc/turbolinux-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^Turbolinux\s.*\s([0-9.]+)\s.*/)
+ {
+ close RELEASE;
+ return "turbolinux-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_slackware
+{
+ open RELEASE, "$gst_prefix/etc/slackware-version" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^Slackware ([0-9.]+)/)
+ {
+ close RELEASE;
+ return "slackware-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_gentoo
+{
+ return "gentoo" if stat ("$gst_prefix/usr/portage");
+ return -1;
+}
+
+sub check_vlos
+{
+ open RELEASE, "$gst_prefix/etc/vlos-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^VLOS.*\s+([0-9.]+)/)
+ {
+ close RELEASE;
+ return "vlos-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_archlinux
+{
+ # Since Arch stores gnome in /opt/gnome, use full dir
+ return "archlinux" if stat ("/etc/arch-release");
+ return -1;
+}
+
+sub check_linuxppc
+{
+ open RELEASE, "$gst_prefix/etc/redhat-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if (/^LinuxPPC\s+(\S+)/)
+ {
+ close RELEASE;
+ return "linuxppc-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_pld
+{
+ open RELEASE, "$gst_prefix/etc/pld-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if(/^([0-9.]+) PLD Linux/)
+ {
+ close RELEASE;
+ return "pld-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_vine
+{
+ open RELEASE, "$gst_prefix/etc/vine-release" or return -1;
+ while (<RELEASE>)
+ {
+ chomp;
+ if(/^Vine Linux ([0-9.]+)\s+.*/)
+ {
+ close RELEASE;
+ return "vine-$1";
+ }
+ }
+ close RELEASE;
+ return -1;
+}
+
+sub check_ark
+{
+ open ARK, "$gst_prefix/etc/ark-release" or return -1;
+ while (<ARK>)
+ {
+ $ver = $_;
+ chomp ($ver);
+
+ if ($ver =~ /^Ark Linux/)
+ {
+ close ARK;
+ return "ark";
+ }
+ }
+
+ close ARK;
+ return -1;
+}
+
+sub check_freebsd
+{
+ my ($sysctl_cmd, @output);
+
+ $sysctl_cmd = &gst_file_locate_tool ("sysctl");
+ @output = (readpipe("$sysctl_cmd -n kern.version"));
+ foreach (@output)
+ {
+ chomp;
+ if (/^FreeBSD\s([0-9]+)\.\S+.*/)
+ {
+ return "freebsd-$1";
+ }
+ }
+ return -1;
+}
+
+sub check_solaris
+{
+ my ($fd, $dist);
+
+ #
+ # The file /etc/release is present for solaris-2.6
+ # solaris 2.5 does not have the file. Solaris-7.0 and 8.0 have not
+ # been checked
+ #
+ # uname output
+ # Solaris 2.5: 5.5(.1)
+ # Solaris 2.6: 5.6
+ # Solaris 7: unknown, assume 7.0
+ # Solaris 8: unknown, assume 8.0
+ #
+ $fd = &gst_file_run_pipe_read ("uname -r");
+ return -1 if $fd eq undef;
+ chomp ($dist = <$fd>);
+ &gst_file_close ($fd);
+
+ if ($dist =~ /^5\.(\d)/) { return "solaris-2.$1" }
+ else { if ($dist =~ /^([78])\.\d/) { return "solaris-$1.0" } }
+ return -1;
+}
+
+sub gst_platform_get_system
+{
+ my ($tool) = @_;
+
+ # get the output of 'uname -s', it returns the system we are running
+ $$tool{"system"} = &gst_file_run_backtick ("uname -s");
+ chomp ($$tool{"system"});
+}
+
+sub gst_platform_guess
+{
+ my ($tool) = @_;
+
+ my %check = (
+ # Red Hat check must run after Vine, Mandrake and Fedora, and Mandrake after BlackPanther
+ "Linux" => [ \&check_lsb, \&check_debian, \&check_caldera, \&check_suse, \&check_blackpanther, \&check_vine,
+ \&check_fedora, \&check_mandrake, \&check_mandriva, \&check_conectiva, \&check_linuxppc, \&check_redhat, \&check_openna,
+ \&check_turbolinux, \&check_slackware, \&check_vlos, \&check_gentoo, \&check_pld, \&check_rpath, \&check_archlinux, \&check_ark ],
+ "FreeBSD" => [ \&check_freebsd ],
+ "SunOS" => [ \&check_solaris ]
+ );
+ my $plat;
+
+ # Fool-the-backend hack.
+ if (exists $ENV{"GST_DIST"})
+ {
+ $$tool{"platform"} = $gst_dist = $ENV{"GST_DIST"};
+ return;
+ }
+
+ foreach $plat (keys %check)
+ {
+ if ($$tool{"system"} =~ /$plat/)
+ {
+ my ($check, $dist);
+
+ foreach $check (@{$check{$plat}})
+ {
+ $dist = &$check ();
+ if ($dist != -1)
+ {
+ $$tool{"platform"} = $gst_dist = $dist;
+ return;
+ }
+ }
+ }
+ }
+
+ $$tool{"platform"} = $gst_dist = "unknown";
+}
+
+
+# gst_platform_ensure_supported
+#
+# Takes a list of supported platforms and sees if the one detected is found in
+# this list. If not, will report a list of supported platforms and fail.
+
+sub gst_platform_ensure_supported
+{
+ my ($tool, @supported) = @_;
+
+ $$tool{"platforms"} = [ @supported ];
+
+ foreach $platform (@supported)
+ {
+ if ($platform eq $$tool{"platform"})
+ {
+ &gst_report ("platform_success", $platform, $$PLATFORM_INFO{$platform});
+ return;
+ }
+ }
+
+ # Not supported.
+ if (exists $$tool{"platform"})
+ {
+ &gst_report ("platform_unsup", $$tool{"platform"});
+ }
+ else
+ {
+ &gst_report ("platform_undet");
+ }
+}
+
+
+# A directive handler that sets the currently selected platform.
+sub gst_platform_set
+{
+ my ($tool, $platform) = @_;
+ my ($p);
+
+ foreach $p (@{ $$tool{"platforms"}})
+ {
+ if ($p eq $platform)
+ {
+ $$tool{"platform"} = $gst_dist = $platform;
+ &gst_report ("platform_success", $platform, $$PLATFORM_INFO{$platform});
+ &gst_report_end ();
+ return;
+ }
+ }
+
+ &gst_report ("platform_unsup", $platform);
+ &gst_report_end ();
+}
+
+sub gst_platform_print_list
+{
+ my ($platforms) = @_;
+ my ($platform, $name);
+
+ &gst_xml_print_begin ("platforms");
+ foreach $platform (sort @$platforms)
+ {
+ $name = $$PLATFORM_INFO{$platform};
+
+ &gst_xml_container_enter ("platform");
+ &gst_xml_print_line ("<key>$platform</key>");
+ &gst_xml_print_line ("<name>$name</name>");
+ &gst_xml_container_leave ();
+ }
+ &gst_xml_print_end ("platforms");
+}
+
+sub gst_platform_list
+{
+ my ($tool) = @_;
+
+ &gst_report_end ();
+ &gst_platform_print_list ($$tool{"platforms"});
+}
+
+1;