From 8da1ff4cfff699b9db5e1989c1362ac7324ccc03 Mon Sep 17 00:00:00 2001 From: TSC21 <n.marques21@hotmail.com> Date: Tue, 22 Jan 2019 15:38:20 +0000 Subject: [PATCH] generate_microRTPS_bridge: add the capability to receive absolute and relative paths --- msg/tools/generate_microRTPS_bridge.py | 96 +++++++++++--------------- 1 file changed, 42 insertions(+), 54 deletions(-) diff --git a/msg/tools/generate_microRTPS_bridge.py b/msg/tools/generate_microRTPS_bridge.py index 537acb19b4..7ba2ec54d4 100644 --- a/msg/tools/generate_microRTPS_bridge.py +++ b/msg/tools/generate_microRTPS_bridge.py @@ -55,23 +55,6 @@ except ImportError: "Failed to import yaml. You may need to install it with 'sudo pip install pyyaml'") -def get_absolute_path(arg_parse_dir): - """ - Get absolute path from dir - """ - root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - if isinstance(arg_parse_dir, list): - dir = arg_parse_dir[0] - else: - dir = arg_parse_dir - - if dir[0] != '/': - dir = root_path + "/" + dir - - return dir - - def check_rtps_id_uniqueness(classifier): """ Checks if there are no ID's for different msgs repeated on the map @@ -106,7 +89,7 @@ def check_rtps_id_uniqueness(classifier): if list(classifier.msgs_to_ignore.values()).count(value) > 1: repeated_ids.update({key: value}) - # check if there are repeated IDs between classfied and unclassified msgs + # check if there are repeated IDs between classified and unclassified msgs # check send and ignore lists send_ignore_common_ids = list(set(classifier.msgs_to_ignore.values( )).intersection(classifier.msgs_to_send.values())) @@ -149,10 +132,8 @@ def check_rtps_id_uniqueness(classifier): ", ".join('%d' % id for id in px_generate_uorb_topic_helper.check_available_ids(all_ids))) -default_client_out = get_absolute_path( - "src/modules/micrortps_bridge/micrortps_client") -default_agent_out = get_absolute_path( - "src/modules/micrortps_bridge/micrortps_agent") +default_client_out = "src/modules/micrortps_bridge/micrortps_client" +default_agent_out = "src/modules/micrortps_bridge/micrortps_agent" default_uorb_templates_dir = "templates/uorb_microcdr" default_urtps_templates_dir = "templates/urtps" default_rtps_id_file = "tools/uorb_rtps_message_ids.yaml" @@ -173,22 +154,22 @@ parser.add_argument("-m", "--mkdir-build", dest='mkdir_build', parser.add_argument("-l", "--generate-cmakelists", dest='cmakelists', action="store_true", help="Flag to generate a CMakeLists.txt file for the micro-RTPS agent") parser.add_argument("-t", "--topic-msg-dir", dest='msgdir', type=str, - help="Topics message dir, by default msg/", default="msg") + help="Topics message, by default using relative path 'msg/'", default="msg") parser.add_argument("-b", "--uorb-templates-dir", dest='uorb_templates', type=str, - help="uORB templates dir, by default msgdir/templates/uorb_microcdr", default=default_uorb_templates_dir) + help="uORB templates, by default using relative path to msgdir 'templates/uorb_microcdr'", default=default_uorb_templates_dir) parser.add_argument("-q", "--urtps-templates-dir", dest='urtps_templates', type=str, - help="uRTPS templates abolsute path, by default use relative path to msg, templates/urtps", default=default_urtps_templates_dir) + help="uRTPS templates, by default using relative path to msgdir 'templates/urtps'", default=default_urtps_templates_dir) parser.add_argument("-y", "--rtps-ids-file", dest='yaml_file', type=str, - help="RTPS msg IDs definition file absolute path, by default use relative path to msg, tools/uorb_rtps_message_ids.yaml", default=default_rtps_id_file) + help="RTPS msg IDs definition path, by default using relative path to msgdir 'tools/uorb_rtps_message_ids.yaml'", default=default_rtps_id_file) parser.add_argument("-p", "--package", dest='package', type=str, help="Msg package naming, by default px4", default=default_package_name) -parser.add_argument("-o", "--agent-outdir", dest='agentdir', type=str, nargs=1, - help="Agent output dir, by default src/modules/micrortps_bridge/micrortps_agent", default=default_agent_out) -parser.add_argument("-u", "--client-outdir", dest='clientdir', type=str, nargs=1, - help="Client output dir, by default src/modules/micrortps_bridge/micrortps_client", default=default_client_out) -parser.add_argument("-f", "--fastrtpsgen-dir", dest='fastrtpsgen', type=str, nargs='?', +parser.add_argument("-o", "--agent-outdir", dest='agentdir', type=str, + help="Agent output dir, by default using relative path 'src/modules/micrortps_bridge/micrortps_agent'", default=default_agent_out) +parser.add_argument("-u", "--client-outdir", dest='clientdir', type=str, + help="Client output dir, by default using relative path 'src/modules/micrortps_bridge/micrortps_client'", default=default_client_out) +parser.add_argument("-f", "--fastrtpsgen-dir", dest='fastrtpsgen', type=str, help="fastrtpsgen installation dir, only needed if fastrtpsgen is not in PATH, by default empty", default="") -parser.add_argument("-g", "--fastrtpsgen-include", dest='fastrtpsgen_include', type=str, nargs='?', +parser.add_argument("-g", "--fastrtpsgen-include", dest='fastrtpsgen_include', type=str, help="directory(ies) to add to preprocessor include paths of fastrtpsgen, by default empty", default="") parser.add_argument("--delete-tree", dest='del_tree', action="store_true", help="Delete dir tree output dir(s)") @@ -200,36 +181,43 @@ if len(sys.argv) <= 1: # Parse arguments args = parser.parse_args() -msg_folder = get_absolute_path(args.msgdir) -package = args.package agent = args.agent client = args.client -mkdir_build = args.mkdir_build cmakelists = args.cmakelists del_tree = args.del_tree -px_generate_uorb_topic_files.append_to_include_path( - {msg_folder}, px_generate_uorb_topic_files.INCL_DEFAULT, package) -agent_out_dir = get_absolute_path(args.agentdir) -client_out_dir = get_absolute_path( - args.clientdir) gen_idl = args.gen_idl +mkdir_build = args.mkdir_build +package = args.package + +# Msg files path +msg_dir = os.path.abspath(args.msgdir) +px_generate_uorb_topic_files.append_to_include_path( + {msg_dir}, px_generate_uorb_topic_files.INCL_DEFAULT, package) + +# Agent files output path +agent_out_dir = os.path.abspath(args.agentdir) + +# Client files output path +client_out_dir = os.path.abspath(args.clientdir) + +# IDL files path idl_dir = args.idl_dir if idl_dir != '': - idl_dir = get_absolute_path(args.idl_dir) + idl_dir = os.path.abspath(args.idl_dir) else: idl_dir = os.path.join(agent_out_dir, "idl") -if args.fastrtpsgen is None or args.fastrtpsgen == "": +if args.fastrtpsgen is None or args.fastrtpsgen == '': # Assume fastrtpsgen is in PATH fastrtpsgen_path = 'fastrtpsgen' else: # Path to fastrtpsgen is explicitly specified fastrtpsgen_path = os.path.join( - get_absolute_path(args.fastrtpsgen), 'fastrtpsgen') + os.path.abspath(args.fastrtpsgen), 'fastrtpsgen') fastrtpsgen_include = args.fastrtpsgen_include if fastrtpsgen_include is not None and fastrtpsgen_include != '': fastrtpsgen_include = "-I " + \ - get_absolute_path( + os.path.abspath( args.fastrtpsgen_include) + " " # If nothing specified it's generated both @@ -261,17 +249,17 @@ if del_tree: if agent and os.path.isdir(os.path.join(agent_out_dir, "idl")): shutil.rmtree(os.path.join(agent_out_dir, "idl")) -uorb_templates_dir = os.path.join(msg_folder, args.uorb_templates) -if args.urtps_templates != default_urtps_templates_dir: - urtps_templates_dir = os.path.abspath(args.urtps_templates) -else: - urtps_templates_dir = os.path.join(msg_folder, args.urtps_templates) +# uORB templates path +uorb_templates_dir = (args.uorb_templates if os.path.isabs(args.uorb_templates) \ + else os.path.join(msg_dir, args.uorb_templates)) + +# uRTPS templates path +urtps_templates_dir = (args.urtps_templates if os.path.isabs(args.urtps_templates) \ + else os.path.join(msg_dir, args.urtps_templates)) + # parse yaml file into a map of ids -if args.yaml_file != default_rtps_id_file: - classifier = Classifier(os.path.abspath(args.yaml_file), msg_folder) -else: - classifier = Classifier(os.path.join( - msg_folder, args.yaml_file), msg_folder) +classifier = (Classifier(os.path.abspath(args.yaml_file), msg_dir) if os.path.isabs(args.yaml_file) \ + else Classifier(os.path.join(msg_dir, args.yaml_file), msg_dir)) # check if there are no ID's repeated check_rtps_id_uniqueness(classifier) -- GitLab