/[soft]/drakx-kbd-mouse-x11/trunk/lib/Xconfig/proprietary.pm
ViewVC logotype

Annotation of /drakx-kbd-mouse-x11/trunk/lib/Xconfig/proprietary.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3925 - (hide annotations) (download)
Thu Apr 5 02:49:52 2012 UTC (12 years ago) by anssi
File size: 4108 byte(s)
Fix firmware handling (it is DRIVER which needs it, not DRIVER2)
1 dmorgan 391 package Xconfig::proprietary; # $Id: proprietary.pm 269741 2010-06-02 09:25:33Z cfergeau $
2    
3     use diagnostics;
4     use strict;
5    
6     use common;
7     use Xconfig::card;
8    
9     my $lib = arch() =~ /x86_64/ ? "lib64" : "lib";
10 tv 2400 my $libdir = "/usr/$lib";
11 dmorgan 391
12     sub install_matrox_hal {
13     my ($prefix) = @_;
14     my $tmpdir = "$prefix/root/tmp";
15    
16     my $tar = "mgadrivers-2.0.tgz";
17     my $dir_in_tar = "mgadrivers";
18     my $dest_dir = "$prefix/usr/lib/xorg/modules/drivers";
19    
20     #- already installed
21     return if -e "$dest_dir/mga_hal_drv.o" || $::testing;
22    
23     system("wget -O $tmpdir/$tar ftp://ftp.matrox.com/pub/mga/archive/linux/2002/$tar") if !-e "$tmpdir/$tar";
24     system("tar xzC $tmpdir -f $tmpdir/$tar");
25    
26     my $src_dir = "$tmpdir/$dir_in_tar/xfree86/4.2.1/drivers";
27     foreach (all($src_dir)) {
28     my $src = "$src_dir/$_";
29     my $dest = "$dest_dir/$_";
30     rename $dest, "$dest.non_hal";
31     cp_af($src, $dest_dir);
32     }
33     rm_rf("$tmpdir/$tar");
34     rm_rf("$tmpdir/$dir_in_tar");
35     }
36    
37     sub handle_DRIVER2_NO_SSE {
38     my ($card) = @_;
39    
40 tv 2576 $card->{DRIVER2_NO_SSE} || $card->{DRIVER2_NEEDS_SSE} or return;
41 dmorgan 391
42     require detect_devices;
43     if (!detect_devices::has_cpu_flag('sse')) {
44 tv 2576 my $driver = $card->{DRIVER2_NEEDS_SSE} ? $card->{DRIVER} : $card->{DRIVER2_NO_SSE};
45     log::l("$card->{Driver2} need a processor featuring SSE, switching back to $driver");
46     $card->{Driver2} = $driver;
47 dmorgan 391 }
48     }
49    
50 tv 2577 sub handle_FIRMWARE {
51     my ($do_pkgs, $card) = @_;
52 dmorgan 391
53 tv 2577 my $pkg = $card->{FIRMWARE} or return;
54    
55     $do_pkgs->is_installed($pkg) || $do_pkgs->install($pkg) and return;
56 anssi 3925 if ($card->{DRIVER_NO_FIRMWARE}) {
57     log::l("$card->{Driver} need a firmware to work, switching back to $card->{DRIVER_NO_FIRMWARE}");
58     $card->{Driver} = $card->{DRIVER_NO_FIRMWARE};
59 tv 2577
60     } else {
61 anssi 3925 log::l("$card->{Driver} needs a firmware to work smoothly/better (eg: 3D, KMS) but will still work");
62 tv 2577 }
63     }
64    
65    
66 dmorgan 391 sub pkgs_for_Driver2 {
67     my ($Driver2, $do_pkgs) = @_;
68    
69 tv 2397 my ($pkg, $base_name) = $Driver2 =~ /^fglrx|^nvidia/ ?
70 dmorgan 391 ("x11-driver-video-$Driver2", $Driver2) : () or return;
71    
72     $do_pkgs->is_installed($pkg) || $do_pkgs->is_available($pkg) or
73     log::l("proprietary package $pkg not available"), return;
74    
75     my $module_pkgs = $do_pkgs->check_kernel_module_packages($base_name) or
76     log::l("$pkg available, but no kernel module package (for installed kernels, and no dkms)"), return;
77    
78     ($pkg, @$module_pkgs);
79     }
80    
81     sub may_use_Driver2 {
82     my ($card) = @_;
83    
84     my $modules_dir = Xconfig::card::modules_dir();
85     #- make sure everything is correct at this point, packages have really been installed
86     #- and driver and GLX extension is present.
87    
88     my $check_drv = sub {
89     my ($drv, $o_subdir) = @_;
90     my @l = (if_($o_subdir, "$modules_dir/drivers/$o_subdir/$drv.so",
91 tv 2400 "$libdir/$o_subdir/xorg/$drv.so"),
92 dmorgan 391 "$modules_dir/drivers/$drv.so",
93     "$modules_dir/drivers/$drv.o");
94     my $has = find { -e "$::prefix$_" } @l;
95     $has or log::l("proprietary $drv driver missing (we searched for: @l)");
96     $has;
97     };
98    
99     my $card2 = {
100     %$card,
101 tv 2398 $card->{Driver2} =~ /^(fglrx|nvidia)(.*)/ ?
102     (Driver => $1, DriverVersion => $2) :
103 dmorgan 391 (Driver => $card->{Driver2}),
104     };
105    
106     if ($card2->{Driver} eq 'nvidia') {
107     $check_drv->('nvidia_drv', "nvidia$card2->{DriverVersion}") or return;
108    
109 tv 2400 my $libglx_path = "$libdir/nvidia$card2->{DriverVersion}/xorg";
110 dmorgan 391 -e "$::prefix$libglx_path/libglx.so" or log::l("special NVIDIA libglx missing"), return;
111    
112     log::explanations("Using specific NVIDIA driver and GLX extensions");
113     $card2->{DRI_GLX_SPECIAL} = 1;
114 tv 2397 $card2->{Options}{IgnoreEDID} = 1 if $card2->{DriverVersion} eq "71xx";
115     $card2->{Options}{UseEDID} = 0 if $card2->{DriverVersion} eq "96xx";
116 dmorgan 391 $card2;
117     } elsif ($card2->{Driver} eq 'fglrx') {
118     $check_drv->('fglrx_drv', "fglrx$card2->{DriverVersion}") or return;
119 tv 2399 find { -e "$::prefix/$_/dri/fglrx_dri.so" } (
120 tv 2400 "$libdir/fglrx$card2->{DriverVersion}", $modules_dir, $libdir) or
121 dmorgan 391 log::l("proprietary fglrx_dri.so missing"), return;
122    
123     log::explanations("Using specific ATI fglrx and DRI drivers");
124     $card2->{DRI_GLX} = 1;
125     $card2;
126     } else {
127     undef;
128     }
129     }
130    
131     1;
132    

  ViewVC Help
Powered by ViewVC 1.1.30