--- vmware-config-tools.pl.orig 2006-03-27 02:02:17.000000000 -0500 +++ vmware-config-tools.pl 2006-03-27 02:11:46.000000000 -0500 @@ -587,6 +587,10 @@ my $gXVideoDriverFile = ''; my $gIs64BitX = 0; +# The location of the modules dir has changed in X.org 7 +my $cXModulesDir7 = '/usr/lib/xorg/modules'; +my $cX64ModulesDir7 = '/usr/lib64/xorg/modules'; + # Load the installer database sub db_load { undef %gDBAnswer; @@ -3874,6 +3878,10 @@ return '/usr/X11R6/bin'; } +sub xserver7 { + return '/usr/bin/X'; +} + sub xserver6 { return xserver_bin() . '/Xorg'; } @@ -4029,6 +4037,8 @@ $x_server_file = xserver4(); } elsif ($x_version == 6) { $x_server_file = xserver6(); + } elsif ($x_version == 7) { + $x_server_file = xserver7(); } $x_server_file_name = internal_basename($x_server_file); @@ -4075,6 +4085,86 @@ set_uid_X_server($x_server_file); } +sub xorg_7 { + my $xconfig_path = '/etc/X11'; + my $xconfig_file_name = 'xorg.conf'; + my $xversion = 7; + my $xversionAll = ''; + my $xserver_link = ''; + my $major; + my $minor; + my $sub; + + $xversionAll = direct_command(shell_string(xserver7()) . ' -version 2>&1') =~ + /X Protocol Version 11.* Release (\d+\.\d+)/ ? $1 : '0.0.0'; + + if (defined $ENV{'XORGCONFIG'} && file_name_exist('/etc/X11/' . + $ENV{'XORGCONFIG'})) { + $xconfig_path = '/etc/X11'; + $xconfig_file_name = $ENV{'XORGCONFIG'}; + } elsif (defined $ENV{'XORGCONFIG'} && + file_name_exist('/usr/X11R6/etc/X11/' . $ENV{'XORGCONFIG'})) { + $xconfig_path = '/usr/X11R6/etc/X11'; + $xconfig_file_name = $ENV{'XORGCONFIG'}; + } elsif (file_name_exist('/etc/X11/xorg.conf-4')) { + $xconfig_path = '/etc/X11'; + $xconfig_file_name = 'xorg.conf-4'; + } elsif (file_name_exist('/etc/X11/xorg.conf')) { + $xconfig_path = '/etc/X11'; + $xconfig_file_name = 'xorg.conf'; + } elsif (file_name_exist('/etc/xorg.conf')) { + $xconfig_path = '/etc'; + $xconfig_file_name = 'xorg.conf'; + } elsif (file_name_exist('/usr/X11R6/etc/X11/xorg.conf-4')) { + $xconfig_path = '/usr/X11R6/etc/X11'; + $xconfig_file_name = 'xorg.conf-4'; + } elsif (file_name_exist('/usr/X11R6/etc/X11/xorg.conf')) { + $xconfig_path = '/usr/X11R6/etc/X11'; + $xconfig_file_name = 'xorg.conf'; + } elsif (file_name_exist('/usr/X11R6/lib/X11/xorg.conf-4')) { + $xconfig_path = '/usr/X11R6/lib/X11'; + $xconfig_file_name = 'xorg.conf-4'; + } elsif (file_name_exist('/usr/X11R6/lib/X11/xorg.conf')) { + $xconfig_path = '/usr/X11R6/lib/X11'; + $xconfig_file_name = 'xorg.conf'; + } + + print wrap("\n\n" . 'Detected X.org version ' . $xversionAll . '.' + . "\n\n", 0); + + ($major, $minor, $sub) = split_X_version($xversionAll); + + # If there is an existing driver, replace it by ours. + if ($major == 7) { + + backup_file_to_restore($gXVideoDriverFile, 'OLD_X4_DRV'); + if (file_name_exist($gXVideoDriverFile)) { + unlink $gXVideoDriverFile; + } + + # Install the drivers. + my %p; + undef %p; + if ($minor == 0) { + # This is the best driver we can install for X.org 7.0.0 + install_file(db_get_answer('LIBDIR') . '/configurator/XOrg/6.8.x' . + ($gIs64BitX ? '_64' : '') . '/vmware_drv.o', + $gXVideoDriverFile, \%p, 1); + install_file(db_get_answer('LIBDIR') . '/configurator/XOrg/6.8.x' . + ($gIs64BitX ? '_64' : '') . '/vmmouse_drv.o', + $gXMouseDriverFile, \%p, 1); + } else { + print wrap("\n\n" . 'No mouse driver for X.org version: ' . $xversionAll . '.' + . "\n\n", 0); + } + fix_X_link('7'); + } else { + error ('Problem extracting verion of X.org' . "\n\n"); + } + return ($xversion, xconfig_file_abs_path($xconfig_path, $xconfig_file_name), + $xversionAll); +} + sub xorg_6 { my $xconfig_path = '/etc/X11'; my $xconfig_file_name = 'xorg.conf'; @@ -4934,7 +5024,23 @@ my $xconfig_backup = ''; my $createNewXConf = 0; - if (file_name_exist(xserver6())) { + if (file_name_exist(xserver7())) { + if (is64BitElf(xserver7())) { + $gIs64BitX = 1; + # 64-bit FreeBSD puts it's 64-bit X modules in lib not lib64 + if (vmware_product() ne 'tools-for-freebsd') { + $gXMouseDriverFile = "$cX64ModulesDir7/input/vmmouse_drv.o"; + $gXVideoDriverFile = "$cX64ModulesDir7/drivers/vmware_drv.o"; + } else { + $gXMouseDriverFile = "$cXModulesDir7/input/vmmouse_drv.o"; + $gXVideoDriverFile = "$cXModulesDir7/drivers/vmware_drv.o"; + } + } else { + $gXMouseDriverFile = "$cXModulesDir7/input/vmmouse_drv.o"; + $gXVideoDriverFile = "$cXModulesDir7/drivers/vmware_drv.o"; + } + ($xversion, $xconfig_file, $xversionAll) = xorg_7(); + } elsif (file_name_exist(xserver6())) { if (is64BitElf(xserver6())) { $gIs64BitX = 1; # 64-bit FreeBSD puts it's 64-bit X modules in lib not lib64