diff --git a/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch b/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch
new file mode 100644
index 0000000000000000000000000000000000000000..eef3063c193c7a8032f77bcd5b4ce94b3fd6e0c2
--- /dev/null
+++ b/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch
@@ -0,0 +1,515 @@
+From a0d699a08f10424adad38eee25673c9a66120ec4 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 14:54:43 -0700
+Subject: [PATCH 1/4] modify logic of sourcing env hooks to provide context of
+ workspace to each env hook (#490)
+
+---
+ cmake/templates/_setup_util.py.in | 26 +++++++++++++++++++++-----
+ cmake/templates/setup.sh.in       | 34 +++++++++++-----------------------
+ 2 files changed, 32 insertions(+), 28 deletions(-)
+
+diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in
+index 6957b10..e7e57ee 100755
+--- a/cmake/templates/_setup_util.py.in
++++ b/cmake/templates/_setup_util.py.in
+@@ -200,7 +200,9 @@ def find_env_hooks(environ, cmake_prefix_path):
+     lines.append(comment('found environment hooks in workspaces'))
+ 
+     generic_env_hooks = []
++    generic_env_hooks_workspace = []
+     specific_env_hooks = []
++    specific_env_hooks_workspace = []
+     generic_env_hooks_by_filename = {}
+     specific_env_hooks_by_filename = {}
+     generic_env_hook_ext = 'bat' if IS_WINDOWS else 'sh'
+@@ -212,18 +214,32 @@ def find_env_hooks(environ, cmake_prefix_path):
+         if os.path.isdir(env_hook_dir):
+             for filename in sorted(os.listdir(env_hook_dir)):
+                 if filename.endswith('.%s' % generic_env_hook_ext):
+-                    generic_env_hooks.append(os.path.join(env_hook_dir, filename))
+                     # remove previous env hook with same name if present
+                     if filename in generic_env_hooks_by_filename:
+-                        generic_env_hooks.remove(generic_env_hooks_by_filename[filename])
++                        i = generic_env_hooks.index(generic_env_hooks_by_filename[filename])
++                        generic_env_hooks.pop(i)
++                        generic_env_hooks_workspace.pop(i)
++                    # append env hook
++                    generic_env_hooks.append(os.path.join(env_hook_dir, filename))
++                    generic_env_hooks_workspace.append(workspace)
+                     generic_env_hooks_by_filename[filename] = generic_env_hooks[-1]
+                 elif specific_env_hook_ext is not None and filename.endswith('.%s' % specific_env_hook_ext):
+-                    specific_env_hooks.append(os.path.join(env_hook_dir, filename))
+                     # remove previous env hook with same name if present
+                     if filename in specific_env_hooks_by_filename:
+-                        specific_env_hooks.remove(specific_env_hooks_by_filename[filename])
++                        i = specific_env_hooks.index(specific_env_hooks_by_filename[filename])
++                        specific_env_hooks.pop(i)
++                        specific_env_hooks_workspace.pop(i)
++                    # append env hook
++                    specific_env_hooks.append(os.path.join(env_hook_dir, filename))
++                    specific_env_hooks_workspace.append(workspace)
+                     specific_env_hooks_by_filename[filename] = specific_env_hooks[-1]
+-    lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS', os.pathsep.join(generic_env_hooks + specific_env_hooks)))
++    env_hooks = generic_env_hooks + specific_env_hooks
++    env_hooks_workspace = generic_env_hooks_workspace + specific_env_hooks_workspace
++    count = len(env_hooks)
++    lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_COUNT', count))
++    for i in range(count):
++        lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d' % i, env_hooks[i]))
++        lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d_WORKSPACE' % i, env_hooks_workspace[i]))
+     return lines
+ 
+ 
+diff --git a/cmake/templates/setup.sh.in b/cmake/templates/setup.sh.in
+index c29adf5..fa28dfb 100644
+--- a/cmake/templates/setup.sh.in
++++ b/cmake/templates/setup.sh.in
+@@ -47,30 +47,18 @@ CATKIN_SHELL=$CATKIN_SHELL "$_SETUP_UTIL" $@ > $_SETUP_TMP
+ . $_SETUP_TMP
+ rm -f $_SETUP_TMP
+ 
+-# save value of IFS, including if it was unset
+-# the "+x" syntax helps differentiate unset from empty
+-_IFS=$IFS
+-if [ -z ${IFS+x} ]; then
+-  _IFS_WAS_UNSET=1
+-fi
+-
+ # source all environment hooks
+-IFS=":"
+-for _envfile in $_CATKIN_ENVIRONMENT_HOOKS; do
+-  # restore value of IFS, including if it was unset
+-  IFS=$_IFS
+-  if [ $_IFS_WAS_UNSET ]; then
+-    unset IFS
+-  fi
++_i=0
++while [ $_i -lt $_CATKIN_ENVIRONMENT_HOOKS_COUNT ]; do
++  eval _envfile=\$_CATKIN_ENVIRONMENT_HOOKS_$_i
++  unset _CATKIN_ENVIRONMENT_HOOKS_$_i
++  eval _envfile_workspace=\$_CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE
++  unset _CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE
++  # set workspace for environment hook
++  CATKIN_ENV_HOOK_WORKSPACE=$_envfile_workspace
+   . "$_envfile"
++  unset CATKIN_ENV_HOOK_WORKSPACE
++  _i=$((_i + 1))
+ done
+ 
+-# restore value of IFS, including if it was unset
+-IFS=$_IFS
+-if [ $_IFS_WAS_UNSET ]; then
+-  unset IFS
+-  unset _IFS_WAS_UNSET
+-fi
+-unset _IFS
+-
+-unset _CATKIN_ENVIRONMENT_HOOKS
++unset _CATKIN_ENVIRONMENT_HOOKS_COUNT
+-- 
+1.8.1.6
+
+
+From 644daf7443bf3f3ed3f178800478cb5724298a16 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:01:11 -0700
+Subject: [PATCH 2/4] update shell scripts to define or allow override
+ CATKIN_SETUP_DIR (#490)
+
+---
+ cmake/templates/_setup_util.py.in | 15 ++++++++-------
+ cmake/templates/env.sh.in         |  8 +++++---
+ cmake/templates/setup.bash.in     |  5 ++++-
+ cmake/templates/setup.sh.in       |  5 ++++-
+ cmake/templates/setup.zsh.in      |  3 ++-
+ 5 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in
+index e7e57ee..0d3c86a 100755
+--- a/cmake/templates/_setup_util.py.in
++++ b/cmake/templates/_setup_util.py.in
+@@ -41,13 +41,6 @@ import os
+ import platform
+ import sys
+ 
+-# environment at generation time
+-CMAKE_PREFIX_PATH = '@CMAKE_PREFIX_PATH_AS_IS@'.split(';')
+-setup_dir = '@SETUP_DIR@'
+-if setup_dir and setup_dir not in CMAKE_PREFIX_PATH:
+-    CMAKE_PREFIX_PATH.insert(0, setup_dir)
+-CMAKE_PREFIX_PATH = os.pathsep.join(CMAKE_PREFIX_PATH)
+-
+ CATKIN_MARKER_FILE = '.catkin'
+ 
+ system = platform.system()
+@@ -256,6 +249,14 @@ if __name__ == '__main__':
+         print(e, file=sys.stderr)
+         exit(1)
+ 
++    # environment at generation time
++    CMAKE_PREFIX_PATH = '@CMAKE_PREFIX_PATH_AS_IS@'.split(';')
++    # prepend current workspace if not already part of CPP
++    base_path = os.path.dirname(__file__)
++    if base_path not in CMAKE_PREFIX_PATH:
++        CMAKE_PREFIX_PATH.insert(0, base_path)
++    CMAKE_PREFIX_PATH = os.pathsep.join(CMAKE_PREFIX_PATH)
++
+     environ = dict(os.environ)
+     lines = []
+     if not args.extend:
+diff --git a/cmake/templates/env.sh.in b/cmake/templates/env.sh.in
+index 5d04650..ad259ea 100755
+--- a/cmake/templates/env.sh.in
++++ b/cmake/templates/env.sh.in
+@@ -5,7 +5,9 @@ if [ $# -eq 0 ] ; then
+   /bin/echo "Usage: env.sh COMMANDS"
+   /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually."
+   exit 1
+-else
+-  . "@SETUP_DIR@/@SETUP_FILENAME@.sh"
+-  exec "$@"
+ fi
++
++# source @SETUP_FILENAME@.sh from same directory as this file
++CATKIN_SETUP_DIR=$(cd `dirname $0`;pwd)
++. "$CATKIN_SETUP_DIR/@SETUP_FILENAME@.sh"
++exec "$@"
+diff --git a/cmake/templates/setup.bash.in b/cmake/templates/setup.bash.in
+index 078fd13..97e9e70 100644
+--- a/cmake/templates/setup.bash.in
++++ b/cmake/templates/setup.bash.in
+@@ -2,4 +2,7 @@
+ # generated from catkin/cmake/templates/setup.bash.in
+ 
+ CATKIN_SHELL=bash
+-. "@SETUP_DIR@/setup.sh"
++
++# source setup.sh from same directory as this file
++CATKIN_SETUP_DIR=$(cd `dirname ${BASH_SOURCE[0]}`;pwd)
++. "$CATKIN_SETUP_DIR/setup.sh"
+diff --git a/cmake/templates/setup.sh.in b/cmake/templates/setup.sh.in
+index fa28dfb..66b91ca 100644
+--- a/cmake/templates/setup.sh.in
++++ b/cmake/templates/setup.sh.in
+@@ -6,7 +6,10 @@
+ # Supported command line options:
+ # --extend: skips the undoing of changes from a previously sourced setup file
+ 
+-_SETUP_UTIL="@SETUP_DIR@/_setup_util.py"
++# since this file is sourced either use the provided CATKIN_SETUP_DIR
++# or fall back to the destination set at configure time
++: ${CATKIN_SETUP_DIR:=@SETUP_DIR@}
++_SETUP_UTIL="$CATKIN_SETUP_DIR/_setup_util.py"
+ 
+ if [ ! -f "$_SETUP_UTIL" ]; then
+   echo "Missing Python script: $_SETUP_UTIL"
+diff --git a/cmake/templates/setup.zsh.in b/cmake/templates/setup.zsh.in
+index 220d1fb..5e681e4 100644
+--- a/cmake/templates/setup.zsh.in
++++ b/cmake/templates/setup.zsh.in
+@@ -2,6 +2,7 @@
+ # generated from catkin/cmake/templates/setup.zsh.in
+ 
+ CATKIN_SHELL=zsh
++CATKIN_SETUP_DIR=$(cd `dirname $0`;pwd)
+ emulate sh # emulate POSIX
+-. "@SETUP_DIR@/setup.sh"
++. "$CATKIN_SETUP_DIR/setup.sh"
+ emulate zsh # back to zsh mode
+-- 
+1.8.1.6
+
+
+From 198c7b8afafc4e92ed912959e299935b301ac434 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:02:08 -0700
+Subject: [PATCH 3/4] update exported include dirs in generated cmake config
+ files to not contain absolute paths (#490)
+
+---
+ cmake/catkin_package.cmake         | 2 +-
+ cmake/templates/pkgConfig.cmake.in | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake
+index 574bce9..a543864 100644
+--- a/cmake/catkin_package.cmake
++++ b/cmake/catkin_package.cmake
+@@ -434,7 +434,7 @@ function(_catkin_package)
+   # absolute path to include dir under install prefix if any include dir is set
+   set(PROJECT_ABSOLUTE_INCLUDE_DIRS "")
+   if(NOT "${PROJECT_INCLUDE_DIRS}" STREQUAL "")
+-    set(PROJECT_ABSOLUTE_INCLUDE_DIRS ${PKG_INCLUDE_PREFIX}/include)
++    set(PROJECT_ABSOLUTE_INCLUDE_DIRS "${CATKIN_GLOBAL_INCLUDE_DESTINATION}")
+   endif()
+   if(PROJECT_DEPENDENCIES_INCLUDE_DIRS)
+     list(APPEND PROJECT_ABSOLUTE_INCLUDE_DIRS ${PROJECT_DEPENDENCIES_INCLUDE_DIRS})
+diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in
+index dce3158..334e5f2 100644
+--- a/cmake/templates/pkgConfig.cmake.in
++++ b/cmake/templates/pkgConfig.cmake.in
+@@ -89,8 +89,11 @@ if(NOT "@PROJECT_ABSOLUTE_INCLUDE_DIRS@" STREQUAL "")
+   foreach(idir ${absolute_include_dirs})
+     if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir})
+       set(include ${idir})
+-    elseif(IS_DIRECTORY @PKG_INCLUDE_PREFIX@/${idir})
+-      set(include @PKG_INCLUDE_PREFIX@/${idir})
++    elseif("${idir}" STREQUAL "${CATKIN_GLOBAL_INCLUDE_DESTINATION}")
++      get_filename_component(include "${@PROJECT_NAME@_DIR}/../../../${CATKIN_GLOBAL_INCLUDE_DESTINATION}" ABSOLUTE)
++      if(NOT IS_DIRECTORY ${include})
++        message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found.  It does not exist in '${include}'.  Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.")
++      endif()
+     else()
+       message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found.  It does neither exist as an absolute directory nor in '@PKG_INCLUDE_PREFIX@/${idir}'.  Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.")
+     endif()
+-- 
+1.8.1.6
+
+
+From 8067802506d0b66926b665ee301ca6ce77ab3deb Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:06:48 -0700
+Subject: [PATCH 4/4] update catkin_make_isolated to support installation with
+ DESTDIR (#490)
+
+---
+ bin/catkin_make_isolated |  5 +++-
+ python/catkin/builder.py | 63 +++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 47 insertions(+), 21 deletions(-)
+
+diff --git a/bin/catkin_make_isolated b/bin/catkin_make_isolated
+index 25ed5db..6ea7d4d 100755
+--- a/bin/catkin_make_isolated
++++ b/bin/catkin_make_isolated
+@@ -107,6 +107,8 @@ def main():
+     if not sys.stdout.isatty():
+         opts.no_color = True
+ 
++    destdir = os.environ['DESTDIR'] if 'DESTDIR' in os.environ else None
++
+     build_workspace_isolated(
+         workspace=opts.workspace or '.',
+         sourcespace=opts.source,
+@@ -122,7 +124,8 @@ def main():
+         cmake_args=cmake_args,
+         make_args=opts.make_args,
+         catkin_make_args=opts.catkin_make_args,
+-        continue_from_pkg=opts.from_package is not None
++        continue_from_pkg=opts.from_package is not None,
++        destdir=destdir
+     )
+ 
+ if __name__ == '__main__':
+diff --git a/python/catkin/builder.py b/python/catkin/builder.py
+index b157d6e..932e720 100644
+--- a/python/catkin/builder.py
++++ b/python/catkin/builder.py
+@@ -163,18 +163,23 @@ def print_command_banner(cmd, cwd, color):
+         print('####')
+ 
+ 
+-def run_command_colorized(cmd, cwd, quiet=False):
+-    run_command(cmd, cwd, quiet=quiet, colorize=True)
++def run_command_colorized(cmd, cwd, quiet=False, add_env=None):
++    run_command(cmd, cwd, quiet=quiet, colorize=True, add_env=add_env)
+ 
+ 
+-def run_command(cmd, cwd, quiet=False, colorize=False):
++def run_command(cmd, cwd, quiet=False, colorize=False, add_env=None):
+     capture = (quiet or colorize)
+     stdout_pipe = subprocess.PIPE if capture else None
+     stderr_pipe = subprocess.STDOUT if capture else None
++    env = None
++    if add_env:
++        env = copy.copy(os.environ)
++        env.update(add_env)
+     try:
+         proc = subprocess.Popen(
+             cmd, cwd=cwd, shell=False,
+-            stdout=stdout_pipe, stderr=stderr_pipe
++            stdout=stdout_pipe, stderr=stderr_pipe,
++            env=env
+         )
+     except OSError as e:
+         raise OSError("Failed command '%s': %s" % (cmd, e))
+@@ -213,10 +218,11 @@ def _check_build_dir(name, workspace, buildspace):
+     return package_build_dir
+ 
+ 
+-def isolation_print_command(cmd, path=None):
++def isolation_print_command(cmd, path=None, add_env=None):
+     cprint(
+         blue_arrow + " " + sanitize(cmd) + "@|" +
+-        (" @!@{kf}in@| '@!" + sanitize(path) + "@|'" if path else '')
++        (" @!@{kf}in@| '@!" + sanitize(path) + "@|'" if path else '') +
++        (" @!@{kf}with@| '@!" + ' '.join(['%s=%s' % (k, v) for k, v in add_env.items()]) + "@|'" if add_env else '')
+     )
+ 
+ 
+@@ -280,7 +286,8 @@ def extract_jobs_flags(mflags):
+ def build_catkin_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+-    install, force_cmake, quiet, last_env, cmake_args, make_args
++    install, force_cmake, quiet, last_env, cmake_args, make_args,
++    destdir=None
+ ):
+     cprint(
+         "Processing @{cf}catkin@| package: '@!@{bf}" +
+@@ -324,11 +331,12 @@ def build_catkin_package(
+             '-DCMAKE_INSTALL_PREFIX=' + installspace
+         ]
+         cmake_cmd.extend(cmake_args)
+-        isolation_print_command(' '.join(cmake_cmd), build_dir)
++        add_env = get_additional_environment(install, destdir, installspace)
++        isolation_print_command(' '.join(cmake_cmd), build_dir, add_env=add_env)
+         if last_env is not None:
+             cmake_cmd = [last_env] + cmake_cmd
+         try:
+-            run_command_colorized(cmake_cmd, build_dir, quiet)
++            run_command_colorized(cmake_cmd, build_dir, quiet, add_env=add_env)
+         except subprocess.CalledProcessError as e:
+             if os.path.exists(makefile):
+                 # remove Makefile to force CMake invocation next time
+@@ -338,11 +346,12 @@ def build_catkin_package(
+         print('Makefile exists, skipping explicit cmake invocation...')
+         # Check to see if cmake needs to be run via make
+         make_check_cmake_cmd = ['make', 'cmake_check_build_system']
+-        isolation_print_command(' '.join(make_check_cmake_cmd), build_dir)
++        add_env = get_additional_environment(install, destdir, installspace)
++        isolation_print_command(' '.join(make_check_cmake_cmd), build_dir, add_env=add_env)
+         if last_env is not None:
+             make_check_cmake_cmd = [last_env] + make_check_cmake_cmd
+         run_command_colorized(
+-            make_check_cmake_cmd, build_dir, quiet
++            make_check_cmake_cmd, build_dir, quiet, add_env=add_env
+         )
+ 
+     # Run make
+@@ -372,10 +381,18 @@ def has_make_target(path, target):
+     return target in targets
+ 
+ 
++def get_additional_environment(install, destdir, installspace):
++    add_env = {}
++    if install and destdir:
++        add_env['CATKIN_SETUP_DIR'] = os.path.join(destdir, installspace[1:])
++    return add_env
++
++
+ def build_cmake_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+-    install, force_cmake, quiet, last_env, cmake_args, make_args
++    install, force_cmake, quiet, last_env, cmake_args, make_args,
++    destdir=None
+ ):
+     # Notify the user that we are processing a plain cmake package
+     cprint(
+@@ -496,19 +513,21 @@ def build_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+     install, force_cmake, quiet, last_env, cmake_args, make_args, catkin_make_args,
++    destdir=None,
+     number=None, of=None
+ ):
+     if platform.system() in ['Linux', 'Darwin']:
+         status_msg = '{package_name} [{number} of {total}]'.format(package_name=package.name, number=number, total=of)
+         sys.stdout.write("\x1b]2;" + status_msg + "\x07")
+     cprint('@!@{gf}==>@| ', end='')
+-    new_last_env = get_new_env(package, develspace, installspace, install, last_env)
++    new_last_env = get_new_env(package, develspace, installspace, install, last_env, destdir)
+     build_type = _get_build_type(package)
+     if build_type == 'catkin':
+         build_catkin_package(
+             path, package,
+             workspace, buildspace, develspace, installspace,
+-            install, force_cmake, quiet, last_env, cmake_args, make_args + catkin_make_args
++            install, force_cmake, quiet, last_env, cmake_args, make_args + catkin_make_args,
++            destdir=destdir
+         )
+         if not os.path.exists(new_last_env):
+             raise RuntimeError(
+@@ -521,7 +540,8 @@ def build_package(
+         build_cmake_package(
+             path, package,
+             workspace, buildspace, develspace, installspace,
+-            install, force_cmake, quiet, last_env, cmake_args, make_args
++            install, force_cmake, quiet, last_env, cmake_args, make_args,
++            destdir=destdir
+         )
+     else:
+         sys.exit('Can not build package with unknown build_type')
+@@ -534,7 +554,7 @@ def build_package(
+     return new_last_env
+ 
+ 
+-def get_new_env(package, develspace, installspace, install, last_env):
++def get_new_env(package, develspace, installspace, install, last_env, destdir=None):
+     new_env = None
+     build_type = _get_build_type(package)
+     if build_type in ['catkin', 'cmake']:
+@@ -542,6 +562,8 @@ def get_new_env(package, develspace, installspace, install, last_env):
+             installspace if install else develspace,
+             'env.sh'
+         )
++        if destdir is not None:
++            new_env = os.path.join(destdir, new_env[1:])
+     return new_env
+ 
+ 
+@@ -572,7 +594,8 @@ def build_workspace_isolated(
+     cmake_args=None,
+     make_args=None,
+     catkin_make_args=None,
+-    continue_from_pkg=False
++    continue_from_pkg=False,
++    destdir=None
+ ):
+     '''
+     Runs ``cmake``, ``make`` and optionally ``make install`` for all
+@@ -603,6 +626,7 @@ def build_workspace_isolated(
+         packages, ``[str]``
+     :param continue_from_pkg: indicates whether or not cmi should continue
+         when a package is reached, ``bool``
++    :param destdir: define DESTDIR for cmake/invocation, ``string``
+     '''
+     if not colorize:
+         disable_ANSI_colors()
+@@ -738,6 +762,7 @@ def build_workspace_isolated(
+                     workspace, buildspace, pkg_develspace, installspace,
+                     install, force_cmake or (install_toggled and is_cmake_package),
+                     quiet, last_env, cmake_args, make_args, catkin_make_args,
++                    destdir=destdir,
+                     number=index + 1, of=len(ordered_packages)
+                 )
+             except subprocess.CalledProcessError as e:
+@@ -758,7 +783,7 @@ def build_workspace_isolated(
+                 sys.exit('Command failed, exiting.')
+         else:
+             cprint("Skipping package: '@!@{bf}" + package.name + "@|'")
+-            last_env = get_new_env(package, pkg_develspace, installspace, install, last_env)
++            last_env = get_new_env(package, pkg_develspace, installspace, install, last_env, destdir)
+ 
+     # Provide a top level devel space environment setup script
+     if not os.path.exists(develspace):
+@@ -793,7 +818,6 @@ def build_workspace_isolated(
+                     'CATKIN_GLOBAL_LIB_DESTINATION': 'lib',
+                     'CMAKE_PREFIX_PATH_AS_IS': ';'.join(os.environ['CMAKE_PREFIX_PATH'].split(os.pathsep)),
+                     'PYTHON_INSTALL_DIR': get_python_install_dir(),
+-                    'SETUP_DIR': '',
+                 }
+                 with open(generated_setup_util_py, 'w') as f:
+                     f.write(configure_file(os.path.join(get_cmake_path(), 'templates', '_setup_util.py.in'), variables))
+@@ -802,7 +826,6 @@ def build_workspace_isolated(
+                 sys.exit("Unable to process CMAKE_PREFIX_PATH from environment. Cannot generate environment files.")
+ 
+             variables = {
+-                'SETUP_DIR': develspace,
+                 'SETUP_FILENAME': 'setup'
+             }
+             with open(generated_env_sh, 'w') as f:
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/catkin/catkin_0.5.71.bb b/recipes-ros/catkin/catkin_0.5.71.bb
index 66c6a0bacb36b8e0d9bc340928e33bcb5f74c52c..9621ccf3efc63196b7548c53b2bedc2f13132d06 100644
--- a/recipes-ros/catkin/catkin_0.5.71.bb
+++ b/recipes-ros/catkin/catkin_0.5.71.bb
@@ -3,13 +3,15 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-DEPENDS = "cmake python-empy python-catkin-pkg python-empy-native python-catkin-pkg-native"
+PR = "r1"
 
+DEPENDS = "cmake python-empy python-catkin-pkg python-empy-native python-catkin-pkg-native"
 
 SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "1c30ac4fcc82ce2aedf610ea972ab4d2"
 SRC_URI[sha256sum] = "2494dbe3446fe94a55f57c74260e072f97d72944d89610fe4994dbc79cf1a561"
 
+SRC_URI += "file://0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch"
 SRC_URI += "file://0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch"
 
 inherit catkin