add a relocatable wrapper for the portage programs

BUG=b:20895978

Change-Id: I1707bd1ea61e3b939bd875613dcf1d8c116a215a
diff --git a/usr/bin/ebuild b/usr/bin/ebuild
index 96a259c..2836db5 120000
--- a/usr/bin/ebuild
+++ b/usr/bin/ebuild
@@ -1 +1 @@
-../lib/portage/bin/ebuild
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/egencache b/usr/bin/egencache
index c8046fb..2836db5 120000
--- a/usr/bin/egencache
+++ b/usr/bin/egencache
@@ -1 +1 @@
-../lib/portage/bin/egencache
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/emerge b/usr/bin/emerge
index 7f7fd9b..2836db5 120000
--- a/usr/bin/emerge
+++ b/usr/bin/emerge
@@ -1 +1 @@
-../lib/portage/bin/emerge
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/emerge-webrsync b/usr/bin/emerge-webrsync
index a9cb41e..2836db5 120000
--- a/usr/bin/emerge-webrsync
+++ b/usr/bin/emerge-webrsync
@@ -1 +1 @@
-../lib/portage/bin/emerge-webrsync
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/emirrordist b/usr/bin/emirrordist
index 6ac946d..2836db5 120000
--- a/usr/bin/emirrordist
+++ b/usr/bin/emirrordist
@@ -1 +1 @@
-../lib/portage/bin/emirrordist
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/portageq b/usr/bin/portageq
index b9ffbca..2836db5 120000
--- a/usr/bin/portageq
+++ b/usr/bin/portageq
@@ -1 +1 @@
-../lib/portage/bin/portageq
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/quickpkg b/usr/bin/quickpkg
index 85c54a7..2836db5 120000
--- a/usr/bin/quickpkg
+++ b/usr/bin/quickpkg
@@ -1 +1 @@
-../lib/portage/bin/quickpkg
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/bin/repoman b/usr/bin/repoman
index c45040b..2836db5 120000
--- a/usr/bin/repoman
+++ b/usr/bin/repoman
@@ -1 +1 @@
-../lib/portage/bin/repoman
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/archive-conf b/usr/sbin/archive-conf
index 940b11f..2836db5 120000
--- a/usr/sbin/archive-conf
+++ b/usr/sbin/archive-conf
@@ -1 +1 @@
-../lib/portage/bin/archive-conf
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/dispatch-conf b/usr/sbin/dispatch-conf
index fd991b5..2836db5 120000
--- a/usr/sbin/dispatch-conf
+++ b/usr/sbin/dispatch-conf
@@ -1 +1 @@
-../lib/portage/bin/dispatch-conf
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/emaint b/usr/sbin/emaint
index 3be9c5e..2836db5 120000
--- a/usr/sbin/emaint
+++ b/usr/sbin/emaint
@@ -1 +1 @@
-../lib/portage/bin/emaint
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/env-update b/usr/sbin/env-update
index dc7aca4..2836db5 120000
--- a/usr/sbin/env-update
+++ b/usr/sbin/env-update
@@ -1 +1 @@
-../lib/portage/bin/env-update
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/etc-update b/usr/sbin/etc-update
index 641afc6..2836db5 120000
--- a/usr/sbin/etc-update
+++ b/usr/sbin/etc-update
@@ -1 +1 @@
-../lib/portage/bin/etc-update
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/fixpackages b/usr/sbin/fixpackages
index f9d5976..2836db5 120000
--- a/usr/sbin/fixpackages
+++ b/usr/sbin/fixpackages
@@ -1 +1 @@
-../lib/portage/bin/fixpackages
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/readpecoff b/usr/sbin/readpecoff
index 0667013..2836db5 120000
--- a/usr/sbin/readpecoff
+++ b/usr/sbin/readpecoff
@@ -1 +1 @@
-../lib/portage/bin/readpecoff
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/usr/sbin/regenworld b/usr/sbin/regenworld
index 6316826..2836db5 120000
--- a/usr/sbin/regenworld
+++ b/usr/sbin/regenworld
@@ -1 +1 @@
-../lib/portage/bin/regenworld
\ No newline at end of file
+../../wrapper.py
\ No newline at end of file
diff --git a/wrapper.py b/wrapper.py
new file mode 100755
index 0000000..9b782c4
--- /dev/null
+++ b/wrapper.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Wrapper around the various portage programs.
+
+This enables the portage tools to be relocatable.  The wrapper will dynamically
+detect the right paths and then execute the portage programs.
+"""
+
+from __future__ import print_function
+
+import os
+import sys
+
+
+base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+portage_path = os.path.join(base_path, 'lib', 'portage')
+sys.path.insert(0, os.path.join(portage_path, 'pym'))
+os.environ['PYTHONPATH'] = ':'.join(sys.path)
+os.execv(os.path.join(portage_path, 'bin', os.path.basename(__file__)), sys.argv)