#!/usr/bin/env python
# configuration
DISTRO = "sid"
PATH = "/mnt/us/extensions"
PYTHON_VER = "2.7"
OLD_PYTHON_VER = "2.6"
PYTHON = ["python", "python"+PYTHON_VER, "python"+PYTHON_VER+"-minimal", "libexpat1"]
GTK = ["python-gtk2", "python-cairo", "python-gobject-2", "libgtk2.0-0", "libglib2.0-0", "libgdk-pixbuf2.0-0", "libpcre3", "libselinux1", "libx11-6", "libxcomposite1", "libxcursor1", "libcairo2", "libpixman-1-0", "libxcb1", "python-glade2", "libglade2-0"]
WEBKITGTK = ["python-webkit", "libwebkitgtk-1.0-0", "libjavascriptcoregtk-1.0-0", "libicu48", "libenchant1c2a", "libgeoclue0", "libgstreamer-plugins-base0.10-0", "libgstreamer0.10-0", "libjpeg8", "liborc-0.4-0", "libstdc++6", "libsoup2.4-1"]
DBUS = ["python-dbus", "libdbus-1-3", "libdbus-glib-1-2"]
USER = []
PACKAGES = [PYTHON, GTK, DBUS, USER]
#PACKAGES = [PYTHON, GTK, DBUS, WEBKITGTK, USER]
# webkit from Debian needs lots of dependences to work on Kindle, so it's disabled by default. And it segfaults :P
#PACKAGES = [USER]
# if you want to just add some new packages to already built directory, add them to USER array and uncomment line above
##############
import urllib2, re, os
os.system("mkdir -p python")
os.chdir("python")
def getPackageUrl(name):
www = urllib2.urlopen("http://packages.debian.org/{0}/armel/{1}/download".format(DISTRO, name));
content = www.read()
r = re.compile("
ftp\.us\.debian\.org/debian")
url = r.findall(content)
if len(url)>0:
return url[0]
else:
raise Exception("Wrong package name "+name)
def downloadAndUnpackDeb(name):
# os.system sucks here, but i'm lazy as hell
print "Downloading "+name+"..."
os.system("wget "+getPackageUrl(name)+" -O package.deb")
print "Unpacking "+name+"..."
os.system("ar x package.deb")
os.system("rm debian-binary control.tar.gz")
os.system("(gunzip data.tar.gz || unxz data.tar.xz) 2> /dev/null") # very ugly way to handle both types of archives
os.system("tar xf data.tar")
os.system("rm data.tar package.deb")
def fixupPyshared(pkg):
os.system("mkdir -p usr/lib/python"+PYTHON_VER+"/dist-packages/"+pkg)
os.system("cp -r usr/share/pyshared/"+pkg+"/* usr/lib/python"+PYTHON_VER+"/dist-packages/"+pkg+"/")
os.system("cp -r usr/lib/pyshared/python"+PYTHON_VER+"/"+pkg+"/* usr/lib/python"+PYTHON_VER+"/dist-packages/"+pkg+"/")
def repack():
os.system("mkdir -p usr/bin")
e = open("usr/bin/python", "w")
e.write("#!/bin/sh\n")
e.write("export PYTHONPATH="+PATH+"/python/usr/lib/python"+PYTHON_VER+"/\n")
e.write("\nexport LD_LIBRARY_PATH="+PATH+"/python/usr/lib:"+PATH+"/python/usr/lib/arm-linux-gnueabi:"+PATH+"/python/lib/arm-linux-gnueabi:$LD_LIBRARY_PATH\n")
e.write("python"+PYTHON_VER+" $@\n")
e.close()
os.system("chmod 755 usr/bin/python")
e = open("pythonenv", "w")
e.write("#!/bin/sh\n")
e.write("export PATH="+PATH+"/python/usr/bin/:$PATH\n")
e.close()
# fixup
fix = ["cairo", "webkit"]
for f in fix:
fixupPyshared(f)
# cleanup
os.system("rm -rf usr/lib/python"+OLD_PYTHON_VER+" usr/lib/pyshared/python"+OLD_PYTHON_VER)
os.chdir("..")
os.system("tar --hard-dereference -czhf python.tar.gz python")
def main():
print "Downloading selected packages..."
for set in PACKAGES:
for package in set:
downloadAndUnpackDeb(package)
print "Downloading demos..."
os.system("wget http://dosowisko.net/kindle/python-demos.tar.gz")
os.system("tar xzf python-demos.tar.gz")
os.system("rm python-demos.tar.gz")
print "Downloading done. Packaging..."
repack()
print
print "Done. Now unpack python.tar.gz file to "+PATH+" directory on your Kindle."
main()