summaryrefslogtreecommitdiffstats
path: root/abs/core/LinHES-config/plymouth_config.py
diff options
context:
space:
mode:
authorJames Meyer <james.meyer@operamail.com>2012-12-12 01:40:28 (GMT)
committerJames Meyer <james.meyer@operamail.com>2012-12-12 01:40:28 (GMT)
commite75d8cc349ec60a4cd6e5aa10c1257157db1868c (patch)
treeca3257906684049e37174450883fbf1da3d8af99 /abs/core/LinHES-config/plymouth_config.py
parent6c0027e31a9509aea391c45385221373250506cf (diff)
downloadlinhes_pkgbuild-e75d8cc349ec60a4cd6e5aa10c1257157db1868c.zip
linhes_pkgbuild-e75d8cc349ec60a4cd6e5aa10c1257157db1868c.tar.gz
linhes_pkgbuild-e75d8cc349ec60a4cd6e5aa10c1257157db1868c.tar.bz2
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
Diffstat (limited to 'abs/core/LinHES-config/plymouth_config.py')
-rwxr-xr-xabs/core/LinHES-config/plymouth_config.py191
1 files changed, 191 insertions, 0 deletions
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()
+