@@ -18,10 +18,11 @@ cmake_minimum_required(VERSION 3.5)
1818
1919
2020# Set proyect name
21- project (micro_ros_agent )
21+ project (uros_agent )
2222
2323
2424# Find packages depencences
25+ find_package (rosidl_cmake REQUIRED )
2526find_package (ament_cmake REQUIRED )
2627find_package (fastcdr REQUIRED CONFIG )
2728find_package (fastrtps REQUIRED CONFIG )
@@ -35,26 +36,178 @@ ament_export_dependencies(fastrtps)
3536ament_export_dependencies (micrortps_agent )
3637
3738
38- # Install python files
39- ament_python_install_package ( ${ PROJECT_NAME } )
39+ # Set variables
40+ set (_OUTPUT_PATH " ${ CMAKE_CURRENT_BINARY_DIR } /python" )
4041
42+ set (_XML_INTERFACE_GEN_BIN "${_OUTPUT_PATH} /bin/Xml_interface_gen.py" )
43+ normalize_path (_XML_INTERFACE_GEN_BIN "${_XML_INTERFACE_GEN_BIN} " )
4144
42- # Register package resource in order to be called when a new msg package is generated
43- ament_index_register_resource ( "rosidl_typesupport_c " )
45+ set (_XML_DEFAULT_READ_BIN " ${_OUTPUT_PATH} /bin/Xml_read_default_profiles.py" )
46+ normalize_path ( _XML_DEFAULT_READ_BIN " ${_XML_DEFAULT_READ_BIN} " )
4447
48+ set (_PYTHON_PKG_TOOL ${PROJECT_NAME } )
4549
46- # Install the package.xml file, and generate code for ``find_package`` so that other packages can get information about this package.
47- ament_package (
48- CONFIG_EXTRAS "micro_ros_agent-extras.cmake.in"
50+ set (_RESOURCE_DIR "${_OUTPUT_PATH} /resource" )
51+ normalize_path (_RESOURCE_DIR "${_RESOURCE_DIR} " )
52+
53+
54+ set (_DEFAULT_FASTRTPS_PROFILES_PATH "${_OUTPUT_PATH} /gen/DEFAULT_FASTRTPS_PROFILES.xml" )
55+ normalize_path (_DEFAULT_FASTRTPS_PROFILES_PATH "${_DEFAULT_FASTRTPS_PROFILES_PATH} " )
56+
57+
58+ # Get colcon call dir
59+ get_filename_component (_COLCON_CALL_DIR "${CMAKE_INSTALL_PREFIX } " DIRECTORY )
60+ get_filename_component (_COLCON_CALL_DIR "${_COLCON_CALL_DIR} " DIRECTORY )
61+
62+
63+ # Generate python header
64+ set (
65+ _PYTHON_SCRIPT_HEAD
66+ "
67+ import os\n
68+ import sys\n
69+ sys.path.append('${_OUTPUT_PATH} ')\n
70+ from ${_PYTHON_PKG_TOOL} import *\n
71+ "
4972)
5073
5174
52- install (
53- PROGRAMS bin/micro_ros_agent
54- DESTINATION lib/micro_ros_agent
75+ # Copy pyton files
76+ file (COPY "bin" "${_PYTHON_PKG_TOOL} " "resource" DESTINATION "${CMAKE_CURRENT_BINARY_DIR } /python" )
77+
78+
79+ # Extract all packages and manifiest paths
80+ execute_process (
81+ COMMAND
82+ "${PYTHON_EXECUTABLE} "
83+ "-c"
84+ "${_PYTHON_SCRIPT_HEAD} for package in GetInterfacePackages(GetPackageList('${_COLCON_CALL_DIR} ')): print ('%s,%s' % (package, GetPackageName(package)))"
85+ OUTPUT_VARIABLE _packages
86+ RESULT_VARIABLE _result
87+ OUTPUT_STRIP_TRAILING_WHITESPACE
5588)
89+ if (NOT _result EQUAL 0)
90+ message (FATAL_ERROR "Error finding xml packages" )
91+ endif ()
92+
93+
94+ # Convert output to list
95+ string (REPLACE "\n " ";" _packages ${_packages} )
96+
97+
98+ # Extract all msg from each package (stored in ${package}_MSG_FILES)
99+ set (ALL_MSG_FILES "" )
100+ foreach (package ${_packages} )
101+
102+ # Extract info
103+ string (REPLACE "," ";" package ${package} )
104+ list (GET package 0 package_file)
105+ list (GET package 1 package)
106+
107+
108+ # Get all msg files
109+ execute_process (
110+ COMMAND
111+ "${PYTHON_EXECUTABLE} "
112+ "-c"
113+ "${_PYTHON_SCRIPT_HEAD} for msg in GetInterfacePackageMsgs('${package_file} '): print ('%s' % msg)"
114+ OUTPUT_VARIABLE ${package} _MSG_FILES
115+ RESULT_VARIABLE _result
116+ OUTPUT_STRIP_TRAILING_WHITESPACE
117+ )
118+ if (NOT _result EQUAL 0)
119+ message (FATAL_ERROR "Error finding .msg files" )
120+ endif ()
121+
122+ # Skip if there are no msgs to create
123+ if (${package} _MSG_FILES STREQUAL "" )
124+ continue ()
125+ endif ()
126+
127+ # Generate list
128+ string (REPLACE "\n " ";" ${package} _MSG_FILES ${${package} _MSG_FILES})
129+
130+ endforeach ()
131+
132+
133+ # Append defaul xml profiles
134+ execute_process (
135+ COMMAND "${PYTHON_EXECUTABLE} " "${_XML_DEFAULT_READ_BIN} " "--default-xml-path" "${_RESOURCE_DIR} "
136+ OUTPUT_VARIABLE _XmlDoc
137+ RESULT_VARIABLE _result
138+ )
139+ if (NOT _result EQUAL 0)
140+ message (FATAL_ERROR "Error in typesuppor generation" )
141+ endif ()
142+
56143
144+ # Create one xml for each message
145+ foreach (package ${_packages} )
146+ string (REPLACE "," ";" package ${package} )
147+ list (GET package 0 package_file)
148+ list (GET package 1 package)
149+
150+
151+ # Skip this generation if there are no msgs to process
152+ if (${package} _MSG_FILES STREQUAL "" )
153+ continue ()
154+ endif ()
155+
156+
157+
158+ # generate script argument file
159+ set (generator_arguments_file "${_OUTPUT_PATH} /XML_ArgFiles/${package} _Args.json" )
160+ rosidl_write_generator_arguments (
161+ "${generator_arguments_file} "
162+ PACKAGE_NAME "${package} "
163+ ROS_INTERFACE_FILES "${${package} _MSG_FILES}"
164+ ROS_INTERFACE_DEPENDENCIES "NULL"
165+ OUTPUT_DIR "NULL"
166+ TEMPLATE_DIR "NULL"
167+ TARGET_DEPENDENCIES "NULL"
168+ ADDITIONAL_FILES ""
169+ )
170+
171+
172+ # execute python script
173+ execute_process (
174+ COMMAND "${PYTHON_EXECUTABLE} " "${_XML_INTERFACE_GEN_BIN} " --generator-arguments-file "${generator_arguments_file} "
175+ OUTPUT_VARIABLE _XmlGen
176+ RESULT_VARIABLE _result
177+ )
178+ if (NOT _result EQUAL 0)
179+ message (FATAL_ERROR "Error in typesuppor generation" )
180+ endif ()
181+
182+
183+ # Strore xml
184+ set (_XmlDoc "${_XmlDoc}${_XmlGen} " )
185+
186+ endforeach ()
187+
188+
189+ # Close profile
190+ set (_XmlDoc "<profiles>\n ${_XmlDoc} </profiles>\n " )
191+
192+
193+ # Save
194+ file (WRITE "${_DEFAULT_FASTRTPS_PROFILES_PATH} " "${_XmlDoc} " )
195+
196+
197+
198+ # Install the package.xml file, and generate code for ``find_package`` so that other packages can get information about this package.
199+ ament_package ()
200+
201+
202+ #Install
57203install (
58- DIRECTORY cmake resource
59- DESTINATION share/${PROJECT_NAME }
60- )
204+ FILES "${_DEFAULT_FASTRTPS_PROFILES_PATH} "
205+ DESTINATION "../micrortps_agent/bin"
206+ )
207+
208+
209+ # Install package
210+ #install(
211+ # DIRECTORY cmake resource
212+ # DESTINATION share/${PROJECT_NAME}
213+ #)
0 commit comments