@@ -145,7 +145,6 @@ def get_depmods(vinca_conf, pkg_name):
145145 add_deps [dep_type ].append (dict (el ))
146146 else :
147147 add_deps [dep_type ].append (el )
148-
149148 return rm_deps , add_deps
150149
151150
@@ -174,13 +173,18 @@ def read_vinca_yaml(filepath):
174173 if splitted [1 ] in ("osx" , "linux" , "win" ):
175174 patches [splitted [0 ]][splitted [1 ]].append (x )
176175 continue
176+ if splitted [1 ] == "unix" :
177+ patches [splitted [0 ]]["linux" ].append (x )
178+ patches [splitted [0 ]]["osx" ].append (x )
179+ continue
180+
177181 patches [splitted [0 ]]["any" ].append (x )
178182
179183 vinca_conf ["_patches" ] = patches
180184
181185 if (patch_dir / "dependencies.yaml" ).exists ():
182186 vinca_conf ["depmods" ] = yaml .load (open (patch_dir / "dependencies.yaml" ))
183- else :
187+ if not vinca_conf . get ( "depmods" ) :
184188 vinca_conf ["depmods" ] = {}
185189
186190 config .ros_distro = vinca_conf ["ros_distro" ]
@@ -189,7 +193,7 @@ def read_vinca_yaml(filepath):
189193 return vinca_conf
190194
191195
192- def generate_output (pkg_shortname , vinca_conf , distro , version ):
196+ def generate_output (pkg_shortname , vinca_conf , distro , version , all_pkgs = [] ):
193197 if pkg_shortname not in vinca_conf ["_selected_pkgs" ]:
194198 return None
195199
@@ -211,6 +215,7 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
211215 "{{ compiler('c') }}" ,
212216 "ninja" ,
213217 {"sel(unix)" : "make" },
218+ {"sel(osx)" : "tapi" },
214219 "cmake" ,
215220 {"sel(build_platform != target_platform)" : "python" },
216221 {"sel(build_platform != target_platform)" : "cross-python_{{ target_platform }}" },
@@ -258,15 +263,23 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
258263 output ["requirements" ]["host" ].append (vinca_conf ["mutex_package" ])
259264 output ["requirements" ]["run" ].append (vinca_conf ["mutex_package" ])
260265
266+ if not distro .check_ros1 () and pkg_shortname not in ['ament_cmake_core' , 'ament_package' , 'ros_workspace' ]:
267+ output ["requirements" ]["run" ].append (f"ros-{ config .ros_distro } -ros-workspace" )
261268
262269 rm_deps , add_deps = get_depmods (vinca_conf , pkg .name )
270+ gdeps = []
271+ if pkg .group_depends :
272+ for gdep in pkg .group_depends :
273+ gdep .extract_group_members (all_pkgs )
274+ gdeps += gdep .members
263275
264276 build_deps = pkg .build_depends
265277 build_deps += pkg .buildtool_depends
266278 build_deps += pkg .build_export_depends
267279 build_deps += pkg .buildtool_export_depends
268280 build_deps += pkg .test_depends
269281 build_deps = [d .name for d in build_deps if d .evaluated_condition ]
282+ build_deps += gdeps
270283
271284 for dep in build_deps :
272285 if dep in ["REQUIRE_OPENGL" , "REQUIRE_GL" ]:
@@ -284,6 +297,7 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
284297 run_deps += pkg .build_export_depends
285298 run_deps += pkg .buildtool_export_depends
286299 run_deps = [d .name for d in run_deps if d .evaluated_condition ]
300+ run_deps += gdeps
287301
288302 for dep in run_deps :
289303 if dep in ["REQUIRE_OPENGL" , "REQUIRE_GL" ]:
@@ -303,8 +317,13 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
303317 while dep in output ["requirements" ][dep_type ]:
304318 output ["requirements" ][dep_type ].remove (dep )
305319
306- output ["requirements" ]["run" ] = sorted (output ["requirements" ]["run" ])
307- output ["requirements" ]["host" ] = sorted (output ["requirements" ]["host" ])
320+ def sortkey (k ):
321+ if isinstance (k , dict ):
322+ return list (k .values ())[0 ]
323+ return k
324+
325+ output ["requirements" ]["run" ] = sorted (output ["requirements" ]["run" ], key = sortkey )
326+ output ["requirements" ]["host" ] = sorted (output ["requirements" ]["host" ], key = sortkey )
308327
309328 output ["requirements" ]["run" ] += [
310329 {
@@ -401,9 +420,19 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
401420
402421def generate_outputs (distro , vinca_conf ):
403422 outputs = []
423+
424+ def get_pkg (pkg_name ):
425+ pkg = catkin_pkg .package .parse_package_string (
426+ distro .get_release_package_xml (pkg_name )
427+ )
428+ pkg .evaluate_conditions (os .environ )
429+ return pkg
430+
431+ all_pkgs = [get_pkg (pkg ) for pkg in distro .get_depends ('ros_base' )]
432+
404433 for pkg_shortname in vinca_conf ["_selected_pkgs" ]:
405434 output = generate_output (
406- pkg_shortname , vinca_conf , distro , distro .get_version (pkg_shortname )
435+ pkg_shortname , vinca_conf , distro , distro .get_version (pkg_shortname ), all_pkgs
407436 )
408437 if output is not None :
409438 outputs .append (output )
@@ -523,87 +552,33 @@ def get_selected_packages(distro, vinca_conf):
523552 if vinca_conf .get ("build_all" , False ):
524553 selected_packages = set (distro ._distro .release_packages .keys ())
525554 elif vinca_conf ["packages_select_by_deps" ]:
555+
556+ if (
557+ "packages_skip_by_deps" in vinca_conf
558+ and vinca_conf ["packages_skip_by_deps" ] is not None
559+ ):
560+ for i in vinca_conf ["packages_skip_by_deps" ]:
561+ skipped_packages = skipped_packages .union ([i , i .replace ("-" , "_" )])
562+ print ("Skipped pkgs: " , skipped_packages )
526563 for i in vinca_conf ["packages_select_by_deps" ]:
527564 i = i .replace ("-" , "_" )
528565 selected_packages = selected_packages .union ([i ])
529566 if "skip_all_deps" not in vinca_conf or not vinca_conf ["skip_all_deps" ]:
567+ if i in skipped_packages :
568+ continue
530569 try :
531- pkgs = distro .get_depends (i )
570+ pkgs = distro .get_depends (i , ignore_pkgs = skipped_packages )
532571 except KeyError :
533572 # handle (rare) package names that use "-" as separator
534573 pkgs = distro .get_depends (i .replace ("_" , "-" ))
535574 selected_packages .remove (i )
536575 selected_packages .add (i .replace ("_" , "-" ))
537576 selected_packages = selected_packages .union (pkgs )
538577
539- if (
540- "packages_skip_by_deps" in vinca_conf
541- and vinca_conf ["packages_skip_by_deps" ] is not None
542- ):
543- for i in vinca_conf ["packages_skip_by_deps" ]:
544- i = i .replace ("-" , "_" )
545- skipped_packages = skipped_packages .union ([i ])
546- try :
547- pkgs = distro .get_depends (i )
548- except KeyError :
549- # handle (rare) package names that use "-" as separator
550- pkgs = distro .get_depends (i .replace ("_" , "-" ))
551- selected_packages .remove (i )
552- selected_packages .add (i .replace ("_" , "-" ))
553- skipped_packages = skipped_packages .union (pkgs )
554- result = selected_packages .difference (skipped_packages )
555- result = sorted (list (result ))
578+ result = sorted (list (selected_packages ))
556579 return result
557580
558581
559- # def parse_dep(dep, vinca_conf, distro):
560- # res = dep.name
561- # res = resolve_pkgname(res, vinca_conf, distro)
562-
563- # if dep.version_eq :
564- # return res + " ==" + dep.version_eq
565-
566- # if dep.version_gt :
567- # res = res + " >" + dep.version_gt
568-
569- # if dep.version_lt :
570- # res = res + ", <" + dep.version_lt
571-
572- # if dep.version_lte :
573- # res = res + ", <=" + dep.version_lte
574-
575- # return res
576-
577- # if dep.version_gte :
578- # res = res + " >=" + dep.version_gte
579-
580- # if dep.version_lt :
581- # res = res + ", <" + dep.version_lt
582-
583- # return res
584-
585- # if dep.version_lt :
586- # res = res + " <" + dep.version_lt
587-
588- # if dep.version_gt :
589- # res = res + ", >" + dep.version_gt
590-
591- # if dep.version_gte :
592- # res = res + ", >=" + dep.version_gte
593-
594- # return res
595-
596- # if dep.version_lte :
597- # res = res + " <=" + dep.version_lte
598-
599- # if dep.version_gt :
600- # res = res + ", >" + dep.version_gt
601-
602- # return res
603-
604- # return res
605-
606-
607582def parse_package (pkg , distro , vinca_conf , path ):
608583
609584 name = pkg ["name" ].replace ("_" , "-" )
0 commit comments