@@ -145,7 +145,6 @@ def get_depmods(vinca_conf, pkg_name):
145
145
add_deps [dep_type ].append (dict (el ))
146
146
else :
147
147
add_deps [dep_type ].append (el )
148
-
149
148
return rm_deps , add_deps
150
149
151
150
@@ -174,13 +173,18 @@ def read_vinca_yaml(filepath):
174
173
if splitted [1 ] in ("osx" , "linux" , "win" ):
175
174
patches [splitted [0 ]][splitted [1 ]].append (x )
176
175
continue
176
+ if splitted [1 ] == "unix" :
177
+ patches [splitted [0 ]]["linux" ].append (x )
178
+ patches [splitted [0 ]]["osx" ].append (x )
179
+ continue
180
+
177
181
patches [splitted [0 ]]["any" ].append (x )
178
182
179
183
vinca_conf ["_patches" ] = patches
180
184
181
185
if (patch_dir / "dependencies.yaml" ).exists ():
182
186
vinca_conf ["depmods" ] = yaml .load (open (patch_dir / "dependencies.yaml" ))
183
- else :
187
+ if not vinca_conf . get ( "depmods" ) :
184
188
vinca_conf ["depmods" ] = {}
185
189
186
190
config .ros_distro = vinca_conf ["ros_distro" ]
@@ -189,7 +193,7 @@ def read_vinca_yaml(filepath):
189
193
return vinca_conf
190
194
191
195
192
- def generate_output (pkg_shortname , vinca_conf , distro , version ):
196
+ def generate_output (pkg_shortname , vinca_conf , distro , version , all_pkgs = [] ):
193
197
if pkg_shortname not in vinca_conf ["_selected_pkgs" ]:
194
198
return None
195
199
@@ -211,6 +215,7 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
211
215
"{{ compiler('c') }}" ,
212
216
"ninja" ,
213
217
{"sel(unix)" : "make" },
218
+ {"sel(osx)" : "tapi" },
214
219
"cmake" ,
215
220
{"sel(build_platform != target_platform)" : "python" },
216
221
{"sel(build_platform != target_platform)" : "cross-python_{{ target_platform }}" },
@@ -258,15 +263,23 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
258
263
output ["requirements" ]["host" ].append (vinca_conf ["mutex_package" ])
259
264
output ["requirements" ]["run" ].append (vinca_conf ["mutex_package" ])
260
265
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" )
261
268
262
269
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
263
275
264
276
build_deps = pkg .build_depends
265
277
build_deps += pkg .buildtool_depends
266
278
build_deps += pkg .build_export_depends
267
279
build_deps += pkg .buildtool_export_depends
268
280
build_deps += pkg .test_depends
269
281
build_deps = [d .name for d in build_deps if d .evaluated_condition ]
282
+ build_deps += gdeps
270
283
271
284
for dep in build_deps :
272
285
if dep in ["REQUIRE_OPENGL" , "REQUIRE_GL" ]:
@@ -284,6 +297,7 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
284
297
run_deps += pkg .build_export_depends
285
298
run_deps += pkg .buildtool_export_depends
286
299
run_deps = [d .name for d in run_deps if d .evaluated_condition ]
300
+ run_deps += gdeps
287
301
288
302
for dep in run_deps :
289
303
if dep in ["REQUIRE_OPENGL" , "REQUIRE_GL" ]:
@@ -303,8 +317,13 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
303
317
while dep in output ["requirements" ][dep_type ]:
304
318
output ["requirements" ][dep_type ].remove (dep )
305
319
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 )
308
327
309
328
output ["requirements" ]["run" ] += [
310
329
{
@@ -401,9 +420,19 @@ def generate_output(pkg_shortname, vinca_conf, distro, version):
401
420
402
421
def generate_outputs (distro , vinca_conf ):
403
422
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
+
404
433
for pkg_shortname in vinca_conf ["_selected_pkgs" ]:
405
434
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
407
436
)
408
437
if output is not None :
409
438
outputs .append (output )
@@ -523,87 +552,33 @@ def get_selected_packages(distro, vinca_conf):
523
552
if vinca_conf .get ("build_all" , False ):
524
553
selected_packages = set (distro ._distro .release_packages .keys ())
525
554
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 )
526
563
for i in vinca_conf ["packages_select_by_deps" ]:
527
564
i = i .replace ("-" , "_" )
528
565
selected_packages = selected_packages .union ([i ])
529
566
if "skip_all_deps" not in vinca_conf or not vinca_conf ["skip_all_deps" ]:
567
+ if i in skipped_packages :
568
+ continue
530
569
try :
531
- pkgs = distro .get_depends (i )
570
+ pkgs = distro .get_depends (i , ignore_pkgs = skipped_packages )
532
571
except KeyError :
533
572
# handle (rare) package names that use "-" as separator
534
573
pkgs = distro .get_depends (i .replace ("_" , "-" ))
535
574
selected_packages .remove (i )
536
575
selected_packages .add (i .replace ("_" , "-" ))
537
576
selected_packages = selected_packages .union (pkgs )
538
577
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 ))
556
579
return result
557
580
558
581
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
-
607
582
def parse_package (pkg , distro , vinca_conf , path ):
608
583
609
584
name = pkg ["name" ].replace ("_" , "-" )
0 commit comments