From 14740279b23f591fe9ff486493d3ed4628299628 Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Mon, 12 Nov 2012 13:58:41 +0000 Subject: Switch everything from jhbuild to dn-build --- (limited to 'scripts') diff --git a/scripts/dn-build b/scripts/dn-build index abee345..ec97b92 100755 --- a/scripts/dn-build +++ b/scripts/dn-build @@ -1,51 +1,242 @@ -#!/usr/bin/python +#!/usr/bin/python -u +from distutils import sysconfig import json import os +import multiprocessing import sys import subprocess +import sysinfo + +system_version = sysinfo.get_system_version() scripts_dir = os.path.abspath(os.path.dirname(__file__)) base_dir = os.path.dirname(scripts_dir) install_dir = os.path.join(base_dir, "install") +dnbuild_dir = os.path.join(install_dir, "dnbuild") +share_dir = os.path.join(install_dir, "share") +include_dir = os.path.join(install_dir, "include") +bin_dir = os.path.join(install_dir, "bin") +etc_dir = os.path.join(install_dir, "etc") +build_dir = os.path.join(base_dir, "build") source_dir = os.path.join(base_dir, "source") -activities_dir = os.path.join(source_dir, "activities") modules_dir = os.path.join(scripts_dir, "modules") +build_state_path = os.path.join(dnbuild_dir, "state.json") -def get_module_dir(module): - return os.path.join(activities_dir, module["name"]) +if os.uname()[4] == "x86_64": + lib_dir = os.path.join(install_dir, "lib64") + system_lib_dir = "/usr/lib64" +else: + lib_dir = os.path.join(install_dir, "lib") + system_lib_dir = "/usr/lib" -def pull_source(module): - if not os.path.exists(activities_dir): - os.mkdir(activities_dir) +module_files = { "activities": ["activities.json"], + "glucose": ["system-%s.json" % system_version, + "sugar.json"] } + +state = { "built_modules": {} } + +def add_path(name, path): + if name not in os.environ: + os.environ[name] = path + return + + splitted = os.environ[name].split(":") + splitted.append(path) + + os.environ[name] = ":".join(splitted) + +def get_module_source_dir(module): + return os.path.join(source_dir, module["name"]) - module_dir = get_module_dir(module) +def get_module_build_dir(module): + return os.path.join(build_dir, module["name"]) + +def get_module_commit_id(module): + orig_cwd = os.getcwd() + + os.chdir(get_module_source_dir(module)) + commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) + + os.chdir(orig_cwd) + + return commit_id.strip() + +def run_command(args): + print " ".join(args) + subprocess.check_call(args) + +def pull_source(module): + module_dir = get_module_source_dir(module) if os.path.exists(module_dir): os.chdir(module_dir) - subprocess.check_call(["git", "pull"]) + + run_command(["git", "remote", "set-url", "origin", module["repo"]]) + run_command(["git", "remote", "update", "origin"]) else: - os.chdir(activities_dir) - subprocess.check_call(["git", "clone", module["repo"], module["name"]]) + os.chdir(source_dir) + run_command(["git", "clone", module["repo"], module["name"]]) os.chdir(module_dir) branch = module.get("branch", "master") - subprocess.check_call(["git", "checkout", branch]) + run_command(["git", "checkout", branch]) + +def build_autotools(module): + autogen = os.path.join(get_module_source_dir(module), "autogen.sh") + + jobs = multiprocessing.cpu_count() * 2 + + run_command([autogen, + "--prefix", install_dir, + "--libdir", lib_dir]) + + run_command(["make", "-j", "%d" % jobs]) + run_command(["make", "install"]) + +def build_activity(module): + run_command(["./setup.py", "install", "--prefix", install_dir]) def build(module): - os.chdir(get_module_dir(module)) - subprocess.check_call(["./setup.py", "install", "--prefix", install_dir]) + module_source_dir = get_module_source_dir(module) -def main(): - modules = json.load(open(os.path.join(modules_dir, "activities.json"))) + if module.get("out-of-source", True): + module_build_dir = get_module_build_dir(module) + + if not os.path.exists(module_build_dir): + os.mkdir(module_build_dir) + + os.chdir(module_build_dir) + else: + os.chdir(module_source_dir) + + if os.path.exists(os.path.join(module_source_dir, "setup.py")): + build_activity(module) + elif os.path.exists(os.path.join(module_source_dir, "autogen.sh")): + build_autotools(module) + else: + print "Unknown build system" + sys.exit(1) + + state["built_modules"][module["name"]] = get_module_commit_id(module) + +def cmd_build(): + modules = [] + for module_file in module_files[sys.argv[2]]: + path = os.path.join(modules_dir, module_file) + modules.extend(json.load(open(path))) for module in modules: print "\n=== Building %s ===\n" % module["name"] try: pull_source(module) - build(module) + + old_commit_id = state["built_modules"].get(module["name"], None) + new_commit_id = get_module_commit_id(module) + + if old_commit_id is None or old_commit_id != new_commit_id: + build(module) + else: + print "\n* Already built, skipping *" except subprocess.CalledProcessError: sys.exit(1) +def cmd_shell(): + user_shell = os.environ.get('SHELL', '/bin/sh') + os.execlp(user_shell, user_shell) + +def cmd_run(): + os.execlp(sys.argv[2], *sys.argv[2:]) + +def setup_environ(): + add_path("LD_LIBRARY_PATH", lib_dir) + add_path("PATH", bin_dir) + + add_path("GIO_EXTRA_MODULES", + os.path.join(system_lib_dir, "gio", "modules")) + add_path("GI_TYPELIB_PATH", + os.path.join(lib_dir, "girepository-1.0")) + add_path("GI_TYPELIB_PATH", + os.path.join(system_lib_dir, "girepository-1.0")) + add_path("PKG_CONFIG_PATH", + os.path.join(lib_dir, "pkgconfig")) + add_path("GST_PLUGIN_PATH", + os.path.join(lib_dir , "gstreamer-1.0")) + add_path("GST_REGISTRY", + os.path.join(dnbuild_dir, "gstreamer.registry")) + add_path("PYTHONPATH", + sysconfig.get_python_lib(prefix=install_dir)) + add_path("PYTHONPATH", + sysconfig.get_python_lib(prefix=install_dir, plat_specific=True)) + + add_path("XDG_DATA_DIRS", "/usr/share") + add_path("XDG_DATA_DIRS", share_dir) + + add_path("XDG_CONFIG_DIRS", "/etc") + add_path("XDG_CONFIG_DIRS", etc_dir) + + os.environ["GTK_DATA_PREFIX"] = install_dir + os.environ["GTK_PATH"] = os.path.join(lib_dir, "gtk-2.0") + +def setup_gconf(): + gconf_dir = os.path.join(etc_dir, "gconf") + gconf_pathdir = os.path.join(gconf_dir, "2") + + if not os.path.exists(gconf_pathdir): + os.makedirs(gconf_pathdir) + + gconf_path = os.path.join(gconf_pathdir, "path.jhbuild") + if not os.path.exists(gconf_path): + input = open("/etc/gconf/2/path") + output = open(gconf_path, "w") + + for line in input.readlines(): + if "/etc/gconf" in line: + output.write(line.replace("/etc/gconf", gconf_dir)) + output.write(line) + + output.close() + input.close() + + os.environ["GCONF_DEFAULT_SOURCE_PATH"] = gconf_path + + os.environ["GCONF_SCHEMA_INSTALL_SOURCE"] = \ + "xml:merged:" + os.path.join(gconf_dir, "gconf.xml.defaults") + +def setup_dirs(): + for dir in [source_dir, + install_dir, + build_dir, + share_dir, + dnbuild_dir, + os.path.join(share_dir, "aclocal")]: + if not os.path.exists(dir): + os.mkdir(dir) + +def load_state(): + global state + + if os.path.exists(build_state_path): + state = json.load(open(build_state_path)) + +def save_state(): + json.dump(state, open(build_state_path, "w+")) + +def main(): + load_state() + + setup_dirs() + setup_gconf() + setup_environ() + + if sys.argv[1] == "build": + cmd_build() + elif sys.argv[1] == "shell": + cmd_shell() + elif sys.argv[1] == "run": + cmd_run() + + save_state() + main() diff --git a/scripts/jhbuild b/scripts/jhbuild deleted file mode 160000 -Subproject d2e266da3d9b0437964ac59d4253480f7990fca diff --git a/scripts/jhbuildrc b/scripts/jhbuildrc deleted file mode 100644 index e129091..0000000 --- a/scripts/jhbuildrc +++ /dev/null @@ -1,45 +0,0 @@ -import os -import sys - -sys.path.append(os.path.join(os.getcwd(), "scripts")) - -import sysinfo - -# HACK Ubuntu 64 bit gobject-introspection is not multilib -if os.path.exists("/usr/lib/girepository-1.0"): - addpath("GI_TYPELIB_PATH", "/usr/lib/girepository-1.0") - -def root(): - return os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -def moduleset_path(moduleset): - return os.path.join(root(), "scripts", "modules", - "%s.modules" % moduleset) - -def libdir(system=False): - if system: - base = "/usr" - else: - base = prefix - - if use_lib64: - return os.path.join(base, "lib64") - else: - return os.path.join(base, "lib") - -interact = not "SUGAR_BUILDBOT" in os.environ - -use_local_modulesets = True -moduleset = [moduleset_path("system-%s" % - sysinfo.get_system_version()), - moduleset_path("sugar")] -modules = ["meta-system", "meta-sugar"] - -checkoutroot = os.path.join(root(), "source") -buildroot = os.path.join(root(), "build") -prefix = os.path.join(root(), "install") - -os.environ["GTK_DATA_PREFIX"] = prefix -os.environ["GTK_PATH"] = os.path.join(libdir(), "gtk-2.0") -os.environ["GIO_EXTRA_MODULES"] = os.path.join(libdir(system=True), - "gio", "modules") diff --git a/scripts/modules/activities.json b/scripts/modules/activities.json index 1abf756..e97a0fc 100644 --- a/scripts/modules/activities.json +++ b/scripts/modules/activities.json @@ -1,6 +1,7 @@ [{ "name": "browse", - "repo": "git://git.sugarlabs.org/browse/mainline.git" }, + "repo": "git://git.sugarlabs.org/browse/mainline.git", + "out-of-source": false }, { "name": "chat", "repo": "git://git.sugarlabs.org/chat/mainline.git", - "branch": "gtk3" } -] + "branch": "gtk3", + "out-of-source": false }] diff --git a/scripts/modules/sugar.json b/scripts/modules/sugar.json new file mode 100644 index 0000000..b9e659a --- /dev/null +++ b/scripts/modules/sugar.json @@ -0,0 +1,12 @@ +[{ "name": "sugar-base", + "repo": "git://git.sugarlabs.org/sugar-base/mainline.git" }, + { "name": "sugar-toolkit", + "repo": "git://git.sugarlabs.org/sugar-toolkit/mainline.git" }, + { "name": "sugar-toolkit-gtk3", + "repo": "git://git.sugarlabs.org/sugar-toolkit-gtk3/sugar-toolkit-gtk3.git" }, + { "name": "sugar", + "repo": "git://git.sugarlabs.org/sugar/mainline.git" }, + { "name": "sugar-artwork", + "repo": "git://git.sugarlabs.org/sugar-artwork/mainline.git" }, + { "name": "sugar-datastore", + "repo": "git://git.sugarlabs.org/sugar-datastore/mainline.git" }] diff --git a/scripts/modules/sugar.modules b/scripts/modules/sugar.modules deleted file mode 100644 index 1c506eb..0000000 --- a/scripts/modules/sugar.modules +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/modules/system-3.4.json b/scripts/modules/system-3.4.json new file mode 100644 index 0000000..9ba12cd --- /dev/null +++ b/scripts/modules/system-3.4.json @@ -0,0 +1,40 @@ +[{ "name": "glib", + "repo": "git://git.gnome.org/glib", + "branch": "2.34.2" }, + { "name": "gobject-introspection", + "repo": "git://git.gnome.org/gobject-introspection", + "branch": "GOBJECT_INTROSPECTION_1_34_1_1" }, + { "name": "pygobject", + "repo": "git://git.gnome.org/pygobject", + "branch": "3.4.2" }, + { "name": "atk", + "repo": "git://git.gnome.org/atk", + "branch": "ATK_2_6_0" }, + { "name": "at-spi2-core", + "repo": "git://git.gnome.org/at-spi2-core", + "branch": "AT_SPI2_CORE_2_6_1" }, + { "name": "at-spi2-atk", + "repo": "git://git.gnome.org/at-spi2-atk", + "branch": "AT_SPI2_ATK_2_6_1" }, + { "name": "gtk+", + "repo": "git://git.gnome.org/gtk+", + "branch": "3.6.1" }, + { "name": "gstreamer", + "repo": "git://anongit.freedesktop.org/gstreamer/gstreamer", + "branch": "1.0.2", + "out-of-source": false }, + { "name": "gst-plugins-base", + "repo": "git://anongit.freedesktop.org/gstreamer/gst-plugins-base", + "branch": "1.0.2", + "out-of-source": false }, + { "name": "gst-plugins-good", + "repo": "git://anongit.freedesktop.org/gstreamer/gst-plugins-good", + "branch": "1.0.2", + "out-of-source": false }, + { "name": "gst-plugins-espeak", + "repo": "git://git.sugarlabs.org/gst-plugins-espeak/mainline.git", + "branch": "v0.4.0", + "out-of-source": false }, + { "name": "libxklavier", + "repo": "git://anongit.freedesktop.org/libxklavier", + "branch": "libxklavier-5.3" }] diff --git a/scripts/modules/system-3.4.modules b/scripts/modules/system-3.4.modules deleted file mode 100644 index 9d06150..0000000 --- a/scripts/modules/system-3.4.modules +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/modules/system-3.6.json b/scripts/modules/system-3.6.json new file mode 100644 index 0000000..a868125 --- /dev/null +++ b/scripts/modules/system-3.6.json @@ -0,0 +1,3 @@ +[{ "name": "pygobject", + "repo": "git://git.gnome.org/pygobject", + "branch": "3.4.2" }] diff --git a/scripts/modules/system-3.6.modules b/scripts/modules/system-3.6.modules deleted file mode 100644 index 4fa1bc4..0000000 --- a/scripts/modules/system-3.6.modules +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/scripts/xinitrc b/scripts/xinitrc index aa4da72..345a8a7 100644 --- a/scripts/xinitrc +++ b/scripts/xinitrc @@ -52,11 +52,10 @@ if [ -n $SUGAR_XKBCONFIG ]; then rm $SUGAR_XKBCONFIG fi -JHBUILD="$ROOT_DIR/install/bin/jhbuild -f $ROOT_DIR/scripts/jhbuildrc" RUN_COMMAND="dbus-launch --exit-with-session $SCRIPTS_DIR/run-with-keyring sugar" if [ -z $SUGAR_BUILD_SHELL ]; then - $JHBUILD run $RUN_COMMAND + $SCRIPTS_DIR/dn-build run $RUN_COMMAND else $RUN_COMMAND fi -- cgit v0.9.1