#!/usr/bin/python import os import subprocess binaries = [{ "name": "git", "packages": { "fedora": "git", "ubuntu": "git" } }, { "name": "gcc", "packages": { "fedora": "gcc", "ubuntu": "gcc" } }, { "name": "flex", # gobject-introspection "packages": { "fedora": "flex", "ubuntu": "flex" } }, { "name": "bison", # gobject-introspection "packages": { "fedora": "bison", "ubuntu": "bison" } }, { "name": "autoreconf", "packages": { "fedora": "autoconf", "ubuntu": "autoconf" } }, { "name": "aclocal", "packages": { "fedora": "automake", "ubuntu": "automake" } }, { "name": "libtool", "packages": { "fedora": "libtool", "ubuntu": "libtool" } }, { "name": "icon-slicer", "packages": { "fedora": "icon-slicer", "ubuntu": "icon-slicer" } }, { "name": "intltoolize", "packages": { "fedora": "intltool", "ubuntu": "intltool" } }, { "name": "gnome-doc-common", # FIXME "packages": { "fedora": "gnome-common", "ubuntu": "gnome-common" } }] libs = [{ "name": "python2", "packages": { "fedora": "python-devel", "ubuntu": "python-dev" } }, { "name": "glib-2.0", "packages": { "fedora": "glib2-devel", "ubuntu": "libglib2.0-dev" } }, { "name": "gtk+-3.0", "packages": { "fedora": "gtk3-devel", "ubuntu": "libgtk-3-dev" } }, { "name": "sm", "packages": { "fedora": "libSM-devel", "ubuntu": "libsm-dev" } }, { "name": "ice", "packages": { "fedora": "libICE-devel", "ubuntu": "libice-dev" } }, { "name": "alsa", "packages": { "fedora": "alsa-lib-devel", "ubuntu": "libasound2-dev" } }, { "name": "librsvg-2.0", "packages": { "fedora": "librsvg2-devel", "ubuntu": "librsvg2-dev" } }, { "name": "gobject-introspection-1.0", "packages": { "fedora": "gobject-introspection-devel", "ubuntu": "libgirepository1.0-dev" } }, { "name": "pygtk-2.0", "packages": { "fedora": "pygtk2-devel", "ubuntu": "python-gtk2-dev" } }, { "name": "gconf-2.0", "packages": { "fedora": "GConf2-devel", "ubuntu": "libgconf2-dev" } }, { "name": "gtk-doc", # glib "packages": { "fedora": "gtk-doc", "ubuntu": "gtk-doc-tools" } }, { "name": "cairo-gobject", # gobject-introspection "packages": { "fedora": "cairo-gobject-devel", "ubuntu": "libcairo2-dev" } }, { "name": "pycairo", "packages": { "fedora": "pycairo-devel", "ubuntu": "python-cairo-dev" } }, { "name": "icon-naming-utils", "packages": { "fedora": "icon-naming-utils", "ubuntu": "icon-naming-utils" } }] imports = [{ "import": "import wnck", "packages": { "fedora": "gnome-python2-libwnck", "ubuntu": "python-wnck" } }, { "import": "import hippo", "packages": { "fedora": "hippo-canvas-python", "ubuntu": "python-hippocanvas" } }, { "import": "import telepathy", "packages": { "fedora": "python-telepathy", "ubuntu": "python-telepathy" } }, { "import": "import cjson", "packages": { "fedora": "python-cjson", "ubuntu": "python-cjson" } }, { "import": "import xapian", "packages": { "fedora": "xapian-bindings-python", "ubuntu": "python-xapian" } }, { "import": "import dateutil", "packages": { "fedora": "python-dateutil", "ubuntu": "python-dateutil" } }, { "import": "import gtksourceview2", "packages": { "fedora": "pygtksourceview", "ubuntu": "python-gtksourceview2" } }, { "import": "import vte", "packages": { "fedora": "vte", "ubuntu": "python-vte" } }, { "import": "import decorator", "packages": { "fedora": "python-decorator", "ubuntu": "python-decorator" } }, { "import": "from gi.repository import EvinceDocument", "packages": { "fedora": "evince-libs", "ubuntu": "gir1.2-evince-3.0" } }, { "import": "import rsvg", "packages": { "fedora": "gnome-python2-rsvg", "ubuntu": "python-rsvg" } }] distro = "unknown" if os.path.exists("/etc/fedora-release"): distro = "fedora" elif os.path.exists("/etc/lsb-release"): distributor_id = subprocess.check_output(["lsb_release", "-i"]) if "Ubuntu" in distributor_id: distro = "ubuntu" devnull = open("/dev/null", "w") missing_binaries = [] missing_libs = [] missing_imports = [] packages = [] for info in binaries: if subprocess.call(["which", info["name"]], stdout=devnull, stderr=subprocess.STDOUT): if distro in info["packages"]: packages.append(info["packages"][distro]) else: missing_binaries.append(info) for info in libs: if subprocess.call(["pkg-config", "--exists", info["name"]]) == 1: if distro in info["packages"]: packages.append(info["packages"][distro]) else: missing_libs.append(info) for info in imports: if subprocess.call(["python", "-c", info["import"]], stdout=devnull, stderr=subprocess.STDOUT) == 1: if distro in info["packages"]: packages.append(info["packages"][distro]) else: missing_libs.append(info) if packages: args = ["sudo"] if distro == "fedora": args.extend(["yum", "install"]) elif distro == "ubuntu": args.extend(["apt-get", "install"]) args.extend(packages) subprocess.call(args) if missing_binaries: print "Missing binaries\n" for info in missing_binaries: print info["name"] if missing_libs: print "Missing libraries\n" for info in missing_libs: print info["name"] if missing_imports: print "Missing imports\n" for info in missing_imports: print info["name"]