@@ -127,25 +127,96 @@ function tue-install-target-now
127127
128128# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
129129
130+ function tue-install-rosdep
131+ {
132+ tue-install-debug " tue-install-rosdep $* "
133+
134+ local target=$1
135+ local now=$2
136+
137+ local parent_target=$TUE_INSTALL_CURRENT_TARGET
138+ TUE_INSTALL_CURRENT_TARGET=$target
139+ TUE_INSTALL_CURRENT_TARGET_DIR=$TUE_INSTALL_TARGETS_DIR /$target
140+
141+ # If file exist, target has been resolved correctly in the past.
142+ if [ ! -f $TUE_INSTALL_STATE_DIR /$target ]
143+ then
144+ tue-install-debug " Target '$target ' has not yet been resolved by rosdep, going to installation procedure"
145+
146+ # Check if target can be resolved by rosdep
147+ tue-install-debug " rosdep resolve $target "
148+ rosdep_res=($( rosdep resolve $target 2>&1 ) )
149+ if [ $? -eq 0 ]
150+ then
151+ tue-install-debug " rosdep correctly resolved to: ${rosdep_res[@]} "
152+ # Also make sure ros is installed
153+ tue-install-target ros || tue-install-error " Failed to install target 'ROS'"
154+
155+ # If the target has a parent target, add target as a dependency to the parent target
156+ if [ -n " $parent_target " ]
157+ then
158+ if [ " $parent_target " != " $target " ]
159+ then
160+ echo " $target " >> $TUE_INSTALL_DEPENDENCIES_DIR /$parent_target
161+ echo " $parent_target " >> $TUE_INSTALL_DEPENDENCIES_ON_DIR /$target
162+ sort $TUE_INSTALL_DEPENDENCIES_DIR /$parent_target -u -o $TUE_INSTALL_DEPENDENCIES_DIR /$parent_target
163+ sort $TUE_INSTALL_DEPENDENCIES_ON_DIR /$target -u -o $TUE_INSTALL_DEPENDENCIES_ON_DIR /$target
164+ fi
165+ fi
166+
167+ case ${rosdep_res[0]} in
168+ " #apt" ) tue-install-system ${rosdep_res[1]}
169+ ;;
170+ " #pip" ) tue-install-pip ${rosdep_res[1]}
171+ ;;
172+ * ) tue-install-debug " Unsupported rosdep output: ${rosdep_res[@]} " ; TUE_INSTALL_CURRENT_TARGET=$parent_target ; return 1
173+ ;;
174+ esac
175+
176+ touch $TUE_INSTALL_STATE_DIR /$target
177+
178+ TUE_INSTALL_CURRENT_TARGET=$parent_target
179+ return 0
180+ else
181+ tue-install-debug " Could not be resolved by rosdep. error: ${rosdep_res[@]} "
182+ TUE_INSTALL_CURRENT_TARGET=$parent_target
183+ return 1
184+ fi
185+ else
186+ tue-install-debug " Target '$target ' already resolved correctly by rosdep, skipping it this time."
187+ TUE_INSTALL_CURRENT_TARGET=$parent_target
188+ return 0
189+ fi
190+ }
191+
192+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
193+
130194function tue-install-target
131195{
132196 tue-install-debug " tue-install-target $* "
133197
134198 local target=$1
135199 local now=$2
136200
137- tue-install-debug " Installing target: $target "
201+ tue-install-debug " Installing $target "
138202
139203 # Check if valid target received as input
140- if [ ! -d " $TUE_INSTALL_TARGETS_DIR " / " $target " ]
204+ if [ ! -d $TUE_INSTALL_TARGETS_DIR / $target ]
141205 then
142- tue-install-debug " Target '$target ' does not exist."
143- return 1
206+ # Check if can be resolved by rosdep
207+ tue-install-rosdep $target
208+ if [ $? -eq 0 ]
209+ then
210+ return 0
211+ else
212+ tue-install-debug " Target '$target ' does not exist."
213+ return 1
214+ fi
144215 fi
145216
146217 local parent_target=$TUE_INSTALL_CURRENT_TARGET
147- TUE_INSTALL_CURRENT_TARGET_DIR=$TUE_INSTALL_TARGETS_DIR /$target
148218 TUE_INSTALL_CURRENT_TARGET=$target
219+ TUE_INSTALL_CURRENT_TARGET_DIR=$TUE_INSTALL_TARGETS_DIR /$target
149220
150221 # If the target has a parent target, add target as a dependency to the parent target
151222 if [ -n " $parent_target " ] && [ " $parent_target " != " main-loop" ]
@@ -230,6 +301,7 @@ function tue-install-target
230301 tue-install-error " Invalid install.yaml: $cmds "
231302 fi
232303 fi
304+ unset cmds # unset cmds as we are not using local, because of the error code.
233305 fi
234306
235307 if [ -f " $install_file " .bash ]
@@ -258,6 +330,8 @@ function tue-install-target
258330 touch " $state_file "
259331 fi
260332
333+ else
334+ tue-install-debug " Target '$target ' already installed, skipping it this time."
261335 fi
262336
263337 TUE_INSTALL_CURRENT_TARGET=$parent_target
0 commit comments