Added support for variable expansion in source command argument in make.conf
diff --git a/pym/portage/tests/util/make.conf.example.source_test b/pym/portage/tests/util/make.conf.example.source_test
new file mode 100644
index 0000000..c0b1c16
--- /dev/null
+++ b/pym/portage/tests/util/make.conf.example.source_test
@@ -0,0 +1,6 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contains local system settings for Portage system
+
+# Test make.conf for variable expansion in source tokens.
+source "$PORTAGE_BASE_PATH/make.conf.example.source_test_after"
diff --git a/pym/portage/tests/util/make.conf.example.source_test_after b/pym/portage/tests/util/make.conf.example.source_test_after
new file mode 100644
index 0000000..e41913e
--- /dev/null
+++ b/pym/portage/tests/util/make.conf.example.source_test_after
@@ -0,0 +1,7 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Contains local system settings for Portage system
+
+# Test make.conf for variable expansion in source tokens.
+# We should see this variable in getconfig result
+PASSES_SOURCING_TEST="True"
diff --git a/pym/portage/tests/util/test_getconfig.py b/pym/portage/tests/util/test_getconfig.py
index c7ab360..e7b638f 100644
--- a/pym/portage/tests/util/test_getconfig.py
+++ b/pym/portage/tests/util/test_getconfig.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2012 Gentoo Foundation
+# Copyright 2010-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import tempfile
@@ -8,6 +8,7 @@
 from portage.const import PORTAGE_BASE_PATH
 from portage.tests import TestCase
 from portage.util import getconfig
+from portage.exception import ParseError
 
 class GetConfigTestCase(TestCase):
 	"""
@@ -31,6 +32,25 @@
 		for k, v in self._cases.items():
 			self.assertEqual(d[k], v)
 
+	def testGetConfigSourceLex(self):
+
+		base = os.path.dirname(__file__)
+		make_conf_file = os.path.join(base,
+			'make.conf.example.source_test')
+
+		d = getconfig(make_conf_file,
+			allow_sourcing=True, expand={"PORTAGE_BASE_PATH" : base})
+
+		# PASSES_SOURCING_TEST should exist in getconfig result
+		self.assertIsNotNone(d)
+		self.assertEqual("True", d['PASSES_SOURCING_TEST'])
+
+		# With allow_sourcing : True and empty expand map, this should
+		# Throw a FileNotFound exception
+		self.assertRaisesMsg("An empty expand map should throw an exception",
+			ParseError, getconfig, *(make_conf_file,),
+			**{'allow_sourcing' : True, 'expand' : {}})
+
 	def testGetConfigProfileEnv(self):
 		# Test the mode which is used to parse /etc/env.d and /etc/profile.env.
 
diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index 24553da..614b2b3 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2004-2013 Gentoo Foundation
+# Copyright 2004-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -593,8 +593,13 @@
 		shlex.shlex.__init__(self, **kwargs)
 		self.__portage_tolerant = portage_tolerant
 
+	def allow_sourcing(self, var_expand_map):
+		self.source = portage._native_string("source")
+		self.var_expand_map = var_expand_map
+
 	def sourcehook(self, newfile):
 		try:
+			newfile = varexpand(newfile, self.var_expand_map)
 			return shlex.shlex.sourcehook(self, newfile)
 		except EnvironmentError as e:
 			if e.errno == PermissionDenied.errno:
@@ -694,7 +699,7 @@
 			string.ascii_letters + "~!@#$%*_\:;?,./-+{}")
 		lex.quotes = portage._native_string("\"'")
 		if allow_sourcing:
-			lex.source = portage._native_string("source")
+			lex.allow_sourcing(expand_map)
 
 		while True:
 			key = _unicode_decode(lex.get_token())