/usr/bin/catkin_make_isolated is in catkin 0.7.8-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | #!/usr/bin/python
from __future__ import print_function
import argparse
import os
import re
import sys
# find the import relatively if available to work before installing catkin or overlaying installed version
if os.path.exists(os.path.join(os.path.dirname(__file__), '..', 'python', 'catkin', '__init__.py')):
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'python'))
from catkin.builder import build_workspace_isolated
from catkin.builder import colorize_line
from catkin.builder import determine_path_argument
from catkin.builder import extract_cmake_and_make_and_catkin_make_arguments
from catkin.builder import extract_jobs_flags
def parse_args(args=None):
args = sys.argv[1:] if args is None else args
args, cmake_args, make_args, catkin_make_args = extract_cmake_and_make_and_catkin_make_arguments(args)
# Extract make jobs flags
jobs_flags = extract_jobs_flags(' '.join(args))
if jobs_flags:
args = re.sub(jobs_flags, '', ' '.join(args)).split()
jobs_flags = jobs_flags.split()
parser = argparse.ArgumentParser(description=(
'Builds each catkin (and non-catkin) package from a given workspace in isolation, '
'but still in topological order. '
'Make job flags (-j/-l) are handled just like catkin_make handles them.'
))
add = parser.add_argument
add('-C', '--directory', dest='workspace', default=os.curdir,
help="The base path of the workspace (default '%s')" % os.curdir)
add('--source', '--source-space', default=None,
help="The path to the source space (default 'workspace_base/src')")
add('--build', '--build-space', default=None,
help="The path to the build space (default 'workspace_base/build_isolated')")
add('--devel', '--devel-space', default=None,
help="Sets the target devel space (default 'workspace_base/devel_isolated')")
add('--merge', action='store_true', default=False,
help='Build each catkin package into a common devel space.')
add('--install-space', default=None,
help="Sets the target install space (default 'workspace_base/install_isolated')")
add('--use-ninja', action='store_true', help="Use 'ninja' instead of 'make'")
add('--use-nmake', action='store_true', help="Use 'nmake' instead of 'make'")
add('--install', action='store_true', default=False,
help='Causes each catkin package to be installed.')
add('--force-cmake', action='store_true', default=False,
help='Runs cmake explicitly for each catkin package.')
add('--no-color', action='store_true', default=False,
help='Disables colored output (only for catkin_make and CMake)')
pkg = parser.add_mutually_exclusive_group(required=False)
pkg.add_argument('--pkg', nargs='+', metavar='PKGNAME', dest='packages',
help="Process only specific packages "
"(only after catkin_make_isolated has been invoked before with the same install flag)")
pkg.add_argument('--from-pkg', metavar='PKGNAME', dest='from_package',
help='Restart catkin_make_isolated at the given package continuing from there '
'(do not change CMake arguments, add/move/remove packages or toggle the install flag when '
'using this option since this may result in an inconsistent workspace state).')
add('--only-pkg-with-deps', nargs='+',
help='Only consider the specific packages and their recursive dependencies and ignore all other packages in '
'the workspace (only works together with --merge or --install)')
add('-q', '--quiet', action='store_true', default=False,
help='Suppresses the cmake and make output until an error occurs.')
add('--cmake-args', nargs='*', type=str,
help='Arbitrary arguments which are passes to CMake. '
'It must be passed after other arguments since it collects all following options.')
add('--make-args', nargs='*', type=str,
help='Arbitrary arguments which are passes to make.'
'It must be passed after other arguments since it collects all following options.')
add('--catkin-make-args', nargs='*', type=str,
help='Arbitrary arguments which are passes to make but only for catkin packages.'
'It must be passed after other arguments since it collects all following options.')
add('--override-build-tool-check', action='store_true', default=False,
help='use to override failure due to using differnt build tools on the same workspace.')
opts = parser.parse_args(args)
if opts.only_pkg_with_deps and not opts.merge and not opts.install:
parser.error("The '--only-pkg-with-deps' option can only be used together with '--merge' or '--install'")
opts.cmake_args = cmake_args
opts.make_args = make_args + (jobs_flags or [])
opts.catkin_make_args = catkin_make_args
return opts
def handle_cmake_args(cmake_args, opts):
# Process cmake arugments
for arg in list(cmake_args):
if arg.startswith('-DCMAKE_INSTALL_PREFIX='):
if opts.install_space is None:
opts.install_space = arg.split('=', 1)[-1]
else:
print(colorize_line(
"Warning: both the cmake argument '" + str(arg) + "' " +
"and the --install-space argument have been used, " +
"using the --install-space argument."
))
cmake_args.remove(arg)
elif arg.startswith('-DCATKIN_DEVEL_PREFIX='):
if opts.devel is None:
opts.devel = arg.split('=', 1)[-1]
else:
print(colorize_line(
"Warning: both the cmake argument '" + str(arg) + "' " +
"and the --devel-space argument have been used, " +
"using the --devel-space argument."
))
cmake_args.remove(arg)
return cmake_args, opts
def main():
opts = parse_args()
cmake_args, opts = handle_cmake_args(opts.cmake_args, opts)
# force --no-color if stdout is non-interactive
if not sys.stdout.isatty():
opts.no_color = True
# use PWD in order to work when being invoked in a symlinked location
cwd = os.getenv('PWD', os.curdir)
workspace = os.path.abspath(os.path.join(cwd, opts.workspace))
sourcespace = determine_path_argument(cwd, workspace, opts.source, 'src')
buildspace = determine_path_argument(
cwd, workspace, opts.build, 'build_isolated')
develspace = determine_path_argument(
cwd, workspace, opts.devel, 'devel_isolated')
installspace = determine_path_argument(
cwd, workspace, opts.install_space, 'install_isolated')
destdir = os.environ['DESTDIR'] if 'DESTDIR' in os.environ else None
build_workspace_isolated(
workspace=workspace,
sourcespace=sourcespace,
buildspace=buildspace,
develspace=develspace,
installspace=installspace,
merge=opts.merge,
install=opts.install,
force_cmake=opts.force_cmake,
colorize=not opts.no_color,
build_packages=opts.packages or ([] if opts.from_package is None else [opts.from_package]),
quiet=opts.quiet,
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,
only_pkg_with_deps=opts.only_pkg_with_deps,
destdir=destdir,
use_ninja=opts.use_ninja,
use_nmake=opts.use_nmake,
override_build_tool_check=opts.override_build_tool_check,
)
if __name__ == '__main__':
main()
|