summaryrefslogtreecommitdiffstats
path: root/perl-install/patch/patch-oem-hp.pl
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/patch/patch-oem-hp.pl')
-rw-r--r--perl-install/patch/patch-oem-hp.pl323
1 files changed, 323 insertions, 0 deletions
diff --git a/perl-install/patch/patch-oem-hp.pl b/perl-install/patch/patch-oem-hp.pl
new file mode 100644
index 000000000..0a5b0b51e
--- /dev/null
+++ b/perl-install/patch/patch-oem-hp.pl
@@ -0,0 +1,323 @@
+use modules;
+package modules;
+my $old_load_raw = \&load_raw;
+undef *load_raw;
+*load_raw = sub {
+ &$old_load_raw;
+
+ my @l = map { my ($i, @i) = @$_; [ $i, \@i ] } grep { $_->[0] !~ /ignore/ } @_;
+ foreach (@l) {
+ if ($_->[0] eq 'ehci-hcd') {
+ add_alias('usb-interface1', $_->[0]);
+ }
+ }
+
+ if (get_alias("usb-interface") || get_alias("usb-interface1")) {
+ unless (-e "/proc/bus/usb/devices") {
+ require fs; fs::mount('/proc/bus/usb', '/proc/bus/usb', 'usbdevfs');
+ #- ensure keyboard is working, the kernel must do the job the BIOS was doing
+ sleep 4;
+ load_multi("usbkbd", "keybdev") if detect_devices::usbKeyboards();
+ }
+ }
+};
+
+my $old_load = \&load;
+undef *load;
+*load = sub {
+ &$old_load;
+
+ #- hack to get back usb-interface (even if already loaded by stage1)
+ #- NOTE load_multi is not used for that so not overloaded to fix that too.
+ if ($_[0] =~ /usb-[uo]hci/ && !get_alias("usb-interface")) {
+ add_alias('usb-interface', $_[0]);
+ } elsif ($_[0] eq 'ehci-hcd' && !get_alias("usb-interface1")) {
+ add_alias('usb-interface1', $_[0]);
+ }
+
+ if (get_alias("usb-interface") || get_alias("usb-interface1")) {
+ unless (-e "/proc/bus/usb/devices") {
+ require fs; fs::mount('/proc/bus/usb', '/proc/bus/usb', 'usbdevfs');
+ #- ensure keyboard is working, the kernel must do the job the BIOS was doing
+ sleep 4;
+ load_multi("usbkbd", "keybdev") if detect_devices::usbKeyboards();
+ }
+ }
+};
+
+#- ensure it is loaded using this patch.
+$::noauto or modules::load_thiskind("usb");
+sleep 2;
+
+use install_steps;
+package install_steps;
+
+my $old_beforeInstallPackages = \&beforeInstallPackages;
+undef *beforeInstallPackages;
+*beforeInstallPackages = sub {
+ &$old_beforeInstallPackages;
+
+ my ($o) = @_;
+ mkdir "$o->{prefix}$_" foreach qw(/boot /usr /usr/share /usr/share/mdk);
+ install_any::getAndSaveFile("Mandrake/base/oem-message-graphic", "$o->{prefix}/boot/oem-message-graphic");
+ install_any::getAndSaveFile("Mandrake/base/oem-background.png", "$o->{prefix}/usr/share/mdk/oem-background.png");
+};
+
+my $old_afterInstallPackages = \&afterInstallPackages;
+undef *afterInstallPackages;
+*afterInstallPackages = sub {
+ &$old_afterInstallPackages;
+
+ my ($o) = @_;
+
+ #- lilo image.
+ rename "$o->{prefix}/boot/lilo-graphic/message", "$o->{prefix}/boot/lilo-graphic/message.orig";
+ system "chroot", $o->{prefix}, "cp", "-f", "/boot/oem-message-graphic", "/boot/lilo-graphic/message";
+
+ #- KDE desktop background.
+ if (-e "$o->{prefix}/usr/share/config/kdesktoprc") {
+ update_gnomekderc("$o->{prefix}/usr/share/config/kdesktoprc", "Desktop0",
+ MultiWallpaperMode => "NoMulti",
+ Wallpaper => "/usr/share/mdk/oem-background.png",
+ WallpaperMode => "Scaled",
+ );
+ }
+ #- GNOME desktop background.
+ if (-e "$o->{prefix}/etc/gnome/config/Background") {
+ update_gnomekderc("$o->{prefix}/etc/gnome/config/Background", "Default",
+ wallpaper => "/usr/share/mdk/oem-background.png",
+ wallpaperAlign => "3",
+ );
+ }
+
+ #- make sure no error can be forwarded, test staroffice installed and OpenOffice.org,
+ #- remove the first if the second is installed.
+ eval {
+ if (!$o->{isUpgrade} && -e "$o->{prefix}/usr/lib/openoffice/program/soffice.bin" && grep { -e "$o->{prefix}/usr/lib/office60_$_/program/soffice.bin" } qw(de en es fr it)) {
+ require run_program;
+ log::l("removing OpenOffice.org as staroffice is installed");
+ run_program::rooted($o->{prefix}, "rpm", "-e", "OpenOffice.org");
+ }
+ };
+};
+
+use install_any;
+package install_any;
+
+undef *copy_advertising;
+*copy_advertising = sub {
+ my ($o) = @_;
+
+ return if $::rootwidth < 800;
+
+ my $f;
+ my $source_dir = "Mandrake/share/advertising";
+ foreach ("." . $o->{lang}, "." . substr($o->{lang},0,2), '') {
+ $f = getFile("$source_dir$_/list") or next;
+ $source_dir = "$source_dir$_";
+ }
+ if (my @files = <$f>) {
+ my $dir = "$o->{prefix}/tmp/drakx-images";
+ mkdir $dir;
+ unlink glob_("$dir/*");
+ foreach (@files) {
+ chomp;
+ getAndSaveFile("$source_dir/$_", "$dir/$_");
+ s/\.png/\.pl/;
+ getAndSaveFile("$source_dir/$_", "$dir/$_");
+ s/\.pl/_icon\.png/;
+ getAndSaveFile("$source_dir/$_", "$dir/$_");
+ s/_icon\.png/\.png/;
+ }
+ @advertising_images = map { $_ && -e "$dir/$_" ? ("$dir/$_") : () } @files;
+ }
+};
+
+#undef *allowNVIDIA_rpms;
+#*allowNVIDIA_rpms = sub {
+# my ($packages) = @_;
+# require pkgs;
+# if (pkgs::packageByName($packages, "NVIDIA_GLX")) {
+# #- at this point, we can allow using NVIDIA 3D acceleration packages.
+# my @rpms;
+# foreach (keys %{$packages->{names}}) {
+# my ($ext, $version, $release) = /kernel[^-]*(-smp|-enterprise|-secure)?(?:-(\d.*?)\.(\d+\.\d+mdk))?$/ or next;
+# my $p = pkgs::packageByName($packages, $_);
+# pkgs::packageSelectedOrInstalled($p) or next;
+# $version or ($version, $release) = (pkgs::packageVersion($p), pkgs::packageRelease($p));
+# my $name = "NVIDIA_kernel-$version-$release$ext";
+# pkgs::packageByName($packages, $name) or return;
+# push @rpms, $name;
+# }
+# @rpms > 0 or return;
+# return [ @rpms, "NVIDIA_GLX" ];
+# }
+#};
+
+use detect_devices;
+package detect_devices;
+
+undef *usbMice;
+*usbMice = sub { grep { ($_->{media_type} =~ /\|Mouse/ || $_->{driver} =~ /Mouse:USB/) &&
+ $_->{driver} !~ /Tablet:wacom/} usb_probe() };
+
+use Xconfigurator;
+package Xconfigurator;
+
+undef *cardConfigurationAuto;
+*cardConfigurationAuto = sub {
+ my @cards;
+ if (my @c = grep { $_->{driver} =~ /(Card|Server):/ } detect_devices::probeall()) {
+ @c >= 2 && $c[0]{description} eq $c[1]{description} && $c[0]{description} =~ /82830 CGC/ and shift @c;
+ foreach my $i (0..$#c) {
+ local $_ = $c[$i]->{driver};
+ my $card = { identifier => ($c[$i]{description} . (@c > 1 && " $i")) };
+ $card->{type} = $1 if /Card:(.*)/;
+ $card->{server} = $1 if /Server:(.*)/;
+ $card->{driver} = $1 if /Driver:(.*)/;
+ $card->{flags}{needVideoRam} = /86c368|S3 Inc|Tseng.*ET6\d00/;
+ $card->{busid} = "PCI:$c[$i]{pci_bus}:$c[$i]{pci_device}:$c[$i]{pci_function}";
+ push @{$card->{lines}}, @{$lines{$card->{identifier}} || []};
+ push @cards, $card;
+ }
+ }
+ #- take a default on sparc if nothing has been found.
+ if (arch() =~ /^sparc/ && !@cards) {
+ log::l("Using probe with /proc/fb as nothing has been found!");
+ local $_ = cat_("/proc/fb");
+ if (/Mach64/) { push @cards, { server => "Mach64" } }
+ elsif (/Permedia2/) { push @cards, { server => "3DLabs" } }
+ else { push @cards, { server => "Sun24" } }
+ }
+ #- special case for dual head card using only one busid.
+ @cards = map { my $dup = $_->{identifier} =~ /MGA G[45]50/ ? 2 : 1;
+ if ($dup > 1) {
+ my @result;
+ my $orig = $_;
+ foreach (1..$dup) {
+ my $card = {};
+ add2hash($card, $orig);
+ push @result, $card;
+ }
+ @result;
+ } else {
+ ($_);
+ }
+ } @cards;
+ #- make sure no type are already used, duplicate both screen
+ #- and rename type (because used as id).
+ if (@cards > 1) {
+ my $card = 1;
+ foreach (@cards) {
+ updateCardAccordingName($_, $_->{type}) if $_->{type};
+ $_->{type} = "$_->{type} $card";
+ $card++;
+ }
+ }
+ #- in case of only one cards, remove all busid reference, this will avoid
+ #- need of change of it if the card is moved.
+ #- on many PPC machines, card is on-board, busid is important, leave?
+ @cards == 1 and delete $cards[0]{busid} if arch() !~ /ppc/;
+ @cards;
+};
+
+use mouse;
+package mouse;
+undef *detect;
+*detect = sub {
+ if (arch() =~ /^sparc/) {
+ return fullname2mouse("sunmouse|Sun - Mouse");
+ }
+ if (arch() eq "ppc") {
+ return fullname2mouse(detect_devices::hasMousePS2("usbmouse") ?
+ "USB|1 button" :
+ #- No need to search for an ADB mouse. If I did, the PPC kernel would
+ #- find one whether or not I had one installed! So.. default to it.
+ "busmouse|1 button");
+ }
+
+ my @wacom;
+ my $fast_mouse_probe = sub {
+ my $auxmouse = detect_devices::hasMousePS2("psaux") && fullname2mouse("PS/2|Standard", unsafe => 1);
+
+ if (modules::get_alias("usb-interface")) {
+ if (my (@l) = detect_devices::usbMice()) {
+ log::l("found usb mouse $_->{driver} $_->{description} ($_->{type})") foreach @l;
+ eval { modules::load($_) foreach qw(hid mousedev usbmouse) };
+ if (!$@ && detect_devices::tryOpen("usbmouse")) {
+ my $mouse = fullname2mouse($l[0]{driver} =~ /Mouse:(.*)/ ? $1 : "USB|Generic");
+ $auxmouse and $mouse->{auxmouse} = $auxmouse; #- for laptop, we kept the PS/2 as secondary (symbolic).
+ return $mouse;
+ }
+ eval { modules::unload($_) foreach qw(usbmouse mousedev hid) };
+ }
+ }
+ $auxmouse;
+ };
+
+ if (modules::get_alias("usb-interface")) {
+ my $keep_mouse;
+ if (my (@l) = detect_devices::usbWacom()) {
+ log::l("found usb wacom $_->{driver} $_->{description} ($_->{type})") foreach @l;
+ eval { modules::load("wacom"); modules::load("evdev"); };
+ unless ($@) {
+ foreach (0..$#l) {
+ detect_devices::tryOpen("input/event$_") and $keep_mouse = 1, push @wacom, "input/event$_";
+ }
+ }
+ $keep_mouse or eval { modules::unload("evdev"); modules::unload("wacom"); };
+ }
+ }
+
+ #- at this level, not all possible mice are detected so avoid invoking serial_probe
+ #- which takes a while for its probe.
+ if ($::isStandalone) {
+ my $mouse = $fast_mouse_probe->();
+ $mouse and return ($mouse, @wacom);
+ }
+
+ #- probe serial device to make sure a wacom has been detected.
+ eval { modules::load("serial") };
+ my ($r, @serial_wacom) = mouseconfig(); push @wacom, @serial_wacom;
+
+ if (!$::isStandalone) {
+ my $mouse = $fast_mouse_probe->();
+ $r && $mouse and $r->{auxmouse} = $mouse; #- we kept the auxilliary mouse as PS/2.
+ $r and return ($r, @wacom);
+ $mouse and return ($mouse, @wacom);
+ } else {
+ $r and return ($r, @wacom);
+ }
+
+ #- in case only a wacom has been found, assume an inexistant mouse (necessary).
+ @wacom and return { CLASS => 'MOUSE',
+ nbuttons => 2,
+ device => "nothing",
+ MOUSETYPE => "Microsoft",
+ XMOUSETYPE => "Microsoft"}, @wacom;
+
+ if (!modules::get_alias("usb-interface") && detect_devices::is_a_recent_computer() && $::isInstall && !$::noauto) {
+ #- special case for non detected usb interface on a box with no mouse.
+ #- we *must* find out if there really is no usb, otherwise the box may
+ #- not be accessible via the keyboard (if the keyboard is USB)
+ #- the only way to know this is to make a full pci probe
+ modules::load_thiskind("usb", '', 'unsafe');
+ if (my $mouse = $fast_mouse_probe->()) {
+ return $mouse;
+ }
+ }
+
+ if (modules::get_alias("usb-interface")) {
+ eval { modules::load($_) foreach qw(hid mousedev usbmouse) };
+ sleep 1;
+ if (!$@ && detect_devices::tryOpen("usbmouse")) {
+ #- defaults to generic USB mouse on usbmouse.
+ log::l("defaulting to usb generic mouse");
+ return fullname2mouse("USB|Generic", unsafe => 1);
+ }
+ }
+
+ #- defaults to generic serial mouse on ttyS0.
+ #- Oops? using return let return a hash ref, if not using it, it return a list directly :-)
+ return fullname2mouse("serial|Generic 2 Button Mouse", unsafe => 1);
+};