From e75d8cc349ec60a4cd6e5aa10c1257157db1868c Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Tue, 11 Dec 2012 19:40:28 -0600
Subject: LinHES-config: add plymouth_config.py to the package This program is
 called by xconfig.sh to determine which video driver to include in the initrd
  for KMS to work. For this version if X uses an intel driver then i915 is
 included in the initrd, any things else defaults to vesa.

if plymouth_config detects that no changes are needed, it will quit without running mkinitcpio.

refs #832
---
 abs/core/LinHES-config/PKGBUILD           |  13 +-
 abs/core/LinHES-config/plymouth_config.py | 191 ++++++++++++++++++++++++++++++
 abs/core/LinHES-config/xconfig.sh         |   6 +
 3 files changed, 205 insertions(+), 5 deletions(-)
 create mode 100755 abs/core/LinHES-config/plymouth_config.py

diff --git a/abs/core/LinHES-config/PKGBUILD b/abs/core/LinHES-config/PKGBUILD
index e5b1120..649cc5a 100755
--- a/abs/core/LinHES-config/PKGBUILD
+++ b/abs/core/LinHES-config/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=LinHES-config
 pkgver=2.3
-pkgrel=194
+pkgrel=195
 conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev LinHes-config )
 pkgdesc="Install and configure your system"
 depends=('bc' 'libstatgrab'  'mysql-python' 'expect' 'curl' 'dnsutils' 'parted'
@@ -51,7 +51,8 @@ source=(mv_install.py 09_mythvantge_runit_grub
 	mythvantage.cfg
 	config-sudo.rules
 	hdhr.conf blacklist_nouveau.conf  blacklist_pcspkr.conf
-	print_xorg_res.py backend_control.sh )
+	print_xorg_res.py backend_control.sh
+	plymouth_config.py )
 
 backup=(etc/mythvantage.cfg)
 install=config.install
@@ -103,6 +104,7 @@ build() {
     install -m 0755 mv_locale.py $MVDIR/bin/
     install -m 0755 systemconfig.py $MVDIR/bin/
     install -m 0755 print_xorg_res.py $MVDIR/bin/
+    install -m 0755 plymouth_config.py $MVDIR/bin/
     install -m 0755 backend_control.sh $MVDIR/bin/
     install -m 0755 mythvantage.cfg $startdir/pkg/etc/
 
@@ -129,7 +131,7 @@ build() {
 }
 md5sums=('26e20dba8d1bea96a07131ef945fd2f7'
          '3f6855b7bb860a44f96a972c2e80f497'
-         '17677b9e25b8fe3511ad3a139ed91eea'
+         'aaeb581275433649ff74e05da5e61a78'
          '2596460462cf6c889cf8f95485537b20'
          '985891a43f7c4c983eb2a362162f1a0f'
          'fda01259a4bc74d83c9092d338bd247a'
@@ -138,7 +140,7 @@ md5sums=('26e20dba8d1bea96a07131ef945fd2f7'
          '408688e3bcb2cefe512f9a89863137c8'
          '2a7f3b34e522acfd08283b86c8926aba'
          '157906733642835bd7a3ff4e32771c8e'
-         '689b01f7636e09b2f9657c6ce6006ee7'
+         '31c01f0d5be8ded8a3c24224ee37841a'
          'b02bc06fc6623bf6473175165578e1d5'
          'a6faa20d905e2fd92ce79acab044b759'
          '8ba06c2ce6129371548cc360ccca27f8'
@@ -172,4 +174,5 @@ md5sums=('26e20dba8d1bea96a07131ef945fd2f7'
          '6ec39b010c0ed8901ea896c7e153d330'
          '3866086e6af5e3528a66eff492f2f4dd'
          'c9279fa095af624ee3d9bc75d3328360'
-         '02cf69074d2bbacef05fa3e451af9af3')
+         '02cf69074d2bbacef05fa3e451af9af3'
+         '85d15efc55074a94c58d44542ea1dd13')
diff --git a/abs/core/LinHES-config/plymouth_config.py b/abs/core/LinHES-config/plymouth_config.py
new file mode 100755
index 0000000..7c7546d
--- /dev/null
+++ b/abs/core/LinHES-config/plymouth_config.py
@@ -0,0 +1,191 @@
+#!/usr/bin/python2
+# -*- coding: utf-8 -*-
+
+__author__ = "James Meyer"
+__date__   = "Dec 11th 2012"
+
+
+import subprocess
+
+
+class plymouth_driver():
+    def __init__(self):
+        self.videocard = self.find_video_card()
+        self.old_conf = self.read_mkinit()
+        self.set_old_hook(self.old_conf)
+
+
+    def getvc(self):
+        return self.videocard
+
+    def get_old_hooks(self):
+        return self.old_hooks
+
+    def get_old_modules(self):
+        return self.old_modules
+
+    def get_new_hooks(self):
+        return self.new_hooks
+
+    def get_new_modules(self):
+        return self.new_modules
+
+
+    def set_old_hook(self,conf):
+        self.old_hooks, self.old_modules = self.find_hooks_modules(conf)
+
+    def find_video_card(self):
+        videocard=""
+        conf_file="/etc/X11/xorg.conf.d/20-automv.conf"
+        lines=[]
+        try:
+            f=open(conf_file,'r')
+            lines=f.readlines()
+            f.close()
+        except:
+            print "    find_video_card: couldn't read in %s" %conf_file
+            videocard = "unknown"
+
+        for line in lines:
+            parsed=line.split()
+            if parsed[0].strip() == "Driver":
+                videocard = parsed[1].strip('''"''')
+                break
+
+        return  videocard
+
+    def read_mkinit(self):
+        conf_file="/etc/mkinitcpio.conf"
+        old_conf=[]
+        try:
+            f=open(conf_file,'r')
+            old_conf=f.readlines()
+        except:
+            print "    plymouth_config: couldn't read %s" %conf_file
+            sys.exit(1)
+        return old_conf
+
+    def find_hooks_modules(self,conf_list):
+        for line in conf_list:
+            if line.startswith('HOOKS='):
+                hooks=line.split('''"''')[1].split()
+            if line.startswith('MODULES='):
+                modules=line.split('''"''')[1].split()
+        return hooks,modules
+
+    def add_hooks(self,add_hooks, hooks):
+        new_hooks = hooks
+        for i in add_hooks:
+            if not i in (new_hooks):
+                new_hooks.append(i)
+        return new_hooks
+
+    def remove_hooks(self,remove_hooks, hooks):
+        for i in remove_hooks:
+            try:
+                while True:
+                    hooks.remove(i)
+            except:
+                pass
+
+        return hooks
+
+    def add_modules(self, add_modules, modules):
+        new_modules = modules
+        for i in add_modules:
+            if not i in (new_modules):
+                new_modules.append(i)
+        return new_modules
+
+
+    def remove_modules(self,remove_modules, modules):
+        for i in remove_modules:
+            try:
+                while True:
+                    modules.remove(i)
+            except:
+                pass
+        return modules
+
+    def create_new_hooks_modules(self):
+        new_hooks = list(self.old_hooks)
+        new_modules = list(self.old_modules)
+
+        add_hooks=[]
+        remove_hooks=[]
+        remove_modules=[]
+        add_modules=[]
+
+        if self.videocard == "intel":
+           add_modules = ['i915']
+           remove_hooks = ['v86d']
+        else:
+            #add_modules = ['nfs','jm']
+            remove_modules = ['i915']
+            add_hooks = ['v86d']
+
+        new_hooks = self.add_hooks(add_hooks , new_hooks)
+        new_hooks = self.remove_hooks(remove_hooks, new_hooks)
+        new_modules = self.add_modules(add_modules, new_modules)
+        new_modules = self.remove_modules(remove_modules, new_modules)
+
+        self.new_hooks = new_hooks
+        self.new_modules = new_modules
+
+    def compare_hooks_modules(self):
+        h = cmp( self.old_hooks,self.new_hooks)
+        m = cmp( self.old_modules,self.new_modules)
+        if h == 0 and m == 0:
+            return True
+        else:
+            return False
+
+    def create_newmkinitcpio(self):
+        if self.compare_hooks_modules() == True:
+            print "    plymouth_config: no changes made"
+
+            return False
+        else:
+            conf_file="/etc/mkinitcpio.conf"
+            try:
+                f=open(conf_file,'w')
+                for line in self.old_conf:
+                    new_line=line
+                    if line.startswith('HOOKS='):
+                        new_line = 'HOOKS="%s"' %(" ".join(self.new_hooks))
+                    if line.startswith('MODULES='):
+                        new_line = 'MODULES="%s"'%(" ".join(self.new_modules))
+                    f.write(new_line)
+                    f.write("\n")
+                f.close()
+            except:
+                print "    plymouth_config: couldn't write %s" %conf_file
+                return False
+
+        return True
+
+    def run_mkinitcpio(self):
+        print "    plymouth_config: Running mkinitcpio "
+        subprocess.call(["/usr/bin/mkinitcpio", "-p" , "linux"])
+
+
+def go():
+    p = plymouth_driver()
+    vc = p.getvc()
+    print "    plymouth_config: found videocard %s" %vc
+    p.create_new_hooks_modules()
+    #print p.get_old_hooks()
+    #print p.get_new_hooks()
+    #print "=="
+    #print p.get_old_modules()
+    #print p.get_new_modules()
+
+    if p.create_newmkinitcpio() == True:
+        p.run_mkinitcpio()
+
+
+
+
+if __name__ == '__main__':
+    go()
+
diff --git a/abs/core/LinHES-config/xconfig.sh b/abs/core/LinHES-config/xconfig.sh
index 504da81..2a83506 100755
--- a/abs/core/LinHES-config/xconfig.sh
+++ b/abs/core/LinHES-config/xconfig.sh
@@ -218,6 +218,12 @@ function setupX {
                 ;;
 
         esac
+        #configure the ramdisk for kms
+        if [ x$RUNP != "x1" ]
+        then
+            echo "Running plymouth_config"
+            plymouth_config.py >> $LOGFILE 2>&1
+        fi
     fi
 
 }
-- 
cgit v0.12

