#!/usr/bin/python3

# Copyright (C) 2015 Red Hat Inc.
# Author(s): Dennis Gilmore <dennis@ausil.us>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.  See http://www.gnu.org/copyleft/gpl.html for
# the full text of the license.

import os

def is_calxeda():
    #is the system a calxeda one
    fd = open('/proc/cpuinfo','r')
    cpuinfo = fd.readlines()
    fd.close()
    for line in cpuinfo:
        if line.startswith('Hardware'):
            if line.split(' ')[1].startswith('Highbank'):
                return True
            if line.split(' ')[1].startswith('Midway'):
                return True
    return False

def update_sysconfig():
    '''
    update /etc/sysconfig/uboot to reflect if the platform provides its own dtb and
    we do not need to pass anything.
    '''
    configfile = '/etc/sysconfig/uboot'
    fd = open(configfile, 'r')
    uboot = fd.read()
    fd.close()
    newuboot = uboot.replace('#SHIPSDTB=no','SHIPSDTB=yes')
    fd = open(configfile, 'w')
    fd.write(newuboot)
    fd.close()

def insert_fdtdir():
    '''
    insert into /boot/extlinux/extlinux.conf a fdtdir line
    '''
    configfile = '/boot/extlinux/extlinux.conf'
    fd = open(configfile, 'r')
    extlinux = fd.readlines()
    fd.close()
    newextlinux = []
    fdtdirline = ''
    for line in extlinux:
        newextlinux.append(line)
        if line.startswith('\tkernel'):
            fdtdirline = line.replace('kernel','fdtdir').replace('vmlinuz', 'dtb')
        if line.startswith('\tappend'):
            newextlinux.append(fdtdirline)
    fd = open(configfile, 'w')
    fd.writelines(newextlinux)
    fd.close()

def copy_rescue_dtbs():
    '''
    check if there is a rescue image and copy the dtb files if there is
    '''
    boot = os.listdir('/boot')
    dtbsource = ''
    dtbdest = ''
    has_rescue = False
    for target in boot:
       if target.startswith('vmlinuz-0-rescue'):
           has_rescue = True
           dtbdest = '/boot/%s' % target.replace('vmlinuz', 'dtb')
       if target.startswith('dtb'):
           dtbsource = '/boot/%s' % target
    if has_rescue:
       if not os.path.isdir(dtbdest):
           os.mkdir(dtbdest)
           for dtb in os.listdir(dtbsource):
               os.link(os.path.join(dtbsource, dtb), os.path.join(dtbdest, dtb))

if __name__ == "__main__":
    # platform ships its own dtb
    if is_calxeda():
        update_sysconfig()
    else:
    # need to add fdtdir to extlinux.conf
        insert_fdtdir()
        copy_rescue_dtbs()
