Project

General

Profile

#!/usr/bin/env python3

# Copyright 2014-2015 Open Source Robotics Foundation, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import argparse
import os
import sys

from ament_package.templates import get_environment_hook_template_path
from ament_package.templates import get_package_level_template_names
from ament_package.templates import get_package_level_template_path
from ament_package.templates import get_prefix_level_template_names
from ament_package.templates import get_prefix_level_template_path

IS_WINDOWS = os.name == 'nt'


def main(argv=sys.argv[1:]):
"""
Extract the information about templates provided by ament_package.

Call the API provided by ament_package and
print CMake code defining several variables containing information about
the available templates.
"""
parser = argparse.ArgumentParser(
description='Extract information about templates provided by '
'ament_package and print CMake code defining several '
'variables',
)
parser.add_argument(
'outfile',
nargs='?',
help='The filename where the output should be written to',
)
args = parser.parse_args(argv)

lines = generate_cmake_code()
if args.outfile:
basepath = os.path.dirname(args.outfile)
if not os.path.exists(basepath):
os.makedirs(basepath)
with open(args.outfile, 'w') as f:
for line in lines:
f.write('%s\n' % line)
else:
for line in lines:
print(line)


def generate_cmake_code():
"""
Return a list of CMake set() commands containing the template information.

:returns: list of str
"""
variables = []

if not IS_WINDOWS:
variables.append((
'ENVIRONMENT_HOOK_LIBRARY_PATH',
'"%s"' % get_environment_hook_template_path('library_path.sh')))
else:
variables.append(('ENVIRONMENT_HOOK_LIBRARY_PATH', ''))

ext = '.bat.in' if IS_WINDOWS else '.sh.in'
variables.append((
'ENVIRONMENT_HOOK_PYTHONPATH',
'"%s"' % get_environment_hook_template_path('pythonpath' + ext)))

templates = []
for name in get_package_level_template_names():
templates.append('"%s"' % get_package_level_template_path(name))
variables.append((
'PACKAGE_LEVEL',
templates))

templates = []
for name in get_prefix_level_template_names():
templates.append('"%s"' % get_prefix_level_template_path(name))
variables.append((
'PREFIX_LEVEL',
templates))

lines = []
for (k, v) in variables:
if isinstance(v, list):
lines.append('set(ament_cmake_package_templates_%s "")' % k)
for vv in v:
lines.append('list(APPEND ament_cmake_package_templates_%s %s)'
% (k, vv))
else:
lines.append('set(ament_cmake_package_templates_%s %s)' % (k, v))
# Ensure backslashes are replaced with forward slashes because CMake cannot
# parse files with backslashes in it.
return [l.replace('\\', '/') for l in lines]


if __name__ == '__main__':
main()
(19-19/19)