!m?fMiuC=Sxy@$
zUNi*W)S3doy6^G^igO3hz>z{dE1FYgVBLAr+(@QilLPEOwq#(}dqoR83LA|xOSt;0
z=Szj?L-G3m@qX6)tf`Qnl68^gvN)w-E_Pd_i59F{M^GXVa*#9w%{(OnLp>~$0GfL5XKH!zs*cL$Zq7uOW$qtVDTrndWbho)zX@%w0ScBHM
z%0ZGPe8L1{0euPC5c|+jN{_z~v*~ri`E=A}u-C0v2p&5SH@w@VmkALi$YOCmmmrLb
ziyJn}oYxY+;e;SsnKa(Z>ughlv;L_)?hjAY(iDCN}TFkertsVt-e%)uMcT*!;C0+yos2U#71Uf?DLJ8IG1BG4Xe
z*l7>k^=Y)#=e+Cz$NC3~kI}>N5CJc0g}xpuSh7Ds$9p6=;*(>7jqxgw3Tg)v{NztF
zr6H#*RyN9(C8?T@D8Bma+E=?;IP0*5u)6;@oSrtJhr0j)Dzy)Qtx}Hik~<<%emT3t|0o
zjJ6*_@z?5vEk5e@?$_Mz!^P>na#VIxh)$XJiFgWffgJB0ymVer%pE&J-)%vsK2K6y
zpL58|MCORm!kkYDL9MN`!8m`jEB-p;tLkGzq|McvC|&L%9;-VaXB@l_(tz3;5%cCj
zLl&rJG^X+PDPZ@is6$MsmBOh{s^6f)@y!k%^IpM0NKB3l>O2_^7x?~_j$M0N8`aVRrFn$=SIcfHg>J5{musOOG}M=<)nb+aT_$-|tnCb*B$q}wo5s<6#~z&t
z+WO9P?06Qs`iV_TNCnO9s`0a_^QSy#>L^BXJzT6#!LCzEr=Ms#r{Amyfzv_N>7}Cc
z4^$TfU`k@W=ph2l-?XnZ5?!GT(0M|eYQsML-Y!QMKX+EIMdD+B(aImZqIrEcvY`w5gm2c
z%oxObfNlHI=mS9T1LG2L19pZ2PH%sEKJBs(v)&KPiY#=ltWKc|9wO$|^~c^lHZIQ@
z{Ab?d!XK?ZFsW&V
zMfhZdBAuTnO%11a`_)1*8L8mz@%pm!l1Fry6s+hF{@GD}wimQUA4&Sw7}w|6+GO$t
zZ$Egxh^`iWR8g{3F0hi*#VR*~wn=Bsm5}B}cgxRh!mue&4o->zv1NaYIV1A+LauKo
zijt@i8iYsu7Fulo3+83*MJ(`XZFejL;BcycLrb!z=ywovkLkA-9d=Sb^29C-ppiUm
zn|fTp@(tTF;~RSpN1m(|y@C~*KEk8xE|!N#9T~3rRWEQqQi&W8iN!xn2<1I_D26@D
zZEtO!M`K)PzQU#`hrFh6aQ@=!T|!hbjHw#m<@~9l-hBzPlcR?}5zF9^YUq^66Un@h
z&Y1M4`CGY?m};a`-4I$yJIF=UWrkjwBqnxZStxW1v3_!~TrDkCK*aGlwRdfqON28p
zxtLtQqI+{nC;w#5^r>;>~|nz99hr1;|H
z$_mUU5iRo-_rXzOV$5t=*>zt4uxow{8PqJq{{S?nzvNseu^#<6tLoBiI->bq(p$nS
z_2iv-R&em20lG#q?v|)VgH!pya&UOP7nT7=wIx&|i|#$Hj~Z)M8amWMKJ`=yEMNSL
zmHSV4Yn{t4XcEF4ZSPF_J4b13Z0sre&G*T!ec}f$7wAl4b%FwD0ezxuJmOSep~Gfk
zq*~|B#WqDl#2Tkibp&8N>j{5V0(I%EL@PWcit
zgIhw0iMUijiMYJF6L<8A>3pkLDlo_=y=gI5295D#+K`!#jHKok0g(E0202a!;U`TW
z3JxtNM*lRQ`Qzj?M*_1XeUMZ_iAN+W9foU9IORk{0R2W)rfR13c4Q-waR^?i9F-{t
zuF=5f)}%u0VCH|9Tv9J$1>hIRCjAo_f+A^qph8h_gqXanLLZ}p@Hs4$_+Xqzl$2@9
z@>znHxgu1JW<|wUt^HBzncG7-{tpwxD{Lec-29zk@HuW%HvZo!{?~a6lTAf%UBm8!
zf85!(x^0FLUv7h2HjyT-16lBX$1r{~#pCkH-XAI40)hh!g__##Dtc#f4ps#&w^m$N
z!qNXqG}Bhc$!
zwc$;V{OGFh03r5^--l$6FcLvRkufbIqem1>Usmua#Q115Ju)|)BV^J=N+%1by&_31
zNw1TBJQC$UW?JW6Hh#RpBc8|NWnG#1m1Irxf@{Jh$ofqe?-a7PnLQG23}(w|7r%vX
zNLBk&-owZPWWFEC%?4qL%b&c@q`fbruw-fw2$aEEur$D=v?|eMMLf-OahG9Bl}$bd
z4e*mbmBpvOK&Xlkr`J+CsO6(1+O!Bk5^Ng!!}*wE+u1x+KAzC-q#%NkN<`>j(A$&&
zbw7#CMH0^x3YOM4$5#Bu{;vw}qJ?*8<6QeG^x#f0cLZ7P3GnRlH@t}gt#2SB=6=`7
z@RRB{-g)a3`^8RD|1z#(OjYuGJE%(5B)J+dzp#6C95#I_Riub6s?ttKqnNAG!qGI_
z&+#eU)ZzJF1`K??Sr!7>F9K7xZ|CO${W;X*8VwiMArRy92r&jGkif+i@IPGZcw+tt
zg6iGg*hSq@oL+bLp%zS?z}g5mhiA{~;`oVSCha4(e%slO`ZFY=)5;lt9khytxSyp`
zbI;W9nac6E$cEyB_w)33X$E{$FjhCY{Hr!N@T)!7(Ca&CKm7sh2=)9+B
z*zL6RQ3KkFIEZVY5Fcq0Y7Y)KAa;UHE-3dn>#TP$Nuob2t=oRY%b3r22$s$8hhG-G
zzxG=YXIJ4<+RrM2FiPWJb_j4yJ_*Qv!B|M96AHE>HSe!_DQZbR!7@N-rsFayk|j=T
zS+?Hdz>WV;
zTLB30$UYo+Ut}fbQ*eWzyQ)7y6vtS;f&hQn<)5BZvVf5bf6pi03E=M?B6tl*7+)tF
zf^<;P<-UMZqDl@Gi72w2%6ca@@KpNolES80MGKy*)(I5>eHmT1;@wF}@4bW_WQBS>
zZ(LoI1oc2k7Avy-)OE<4jtIIE{YpJwYWD|}6gH0@|BJrV3)-s%(JncZcfW7iPm^6jQ^nv8cfE*BhRWl%q<7`RGdh8k5|6?XcwU
z@*d&7I0Mkcb{XLXNNfULOaMYwSQB`7j@Hl*#9V(yty%xw^>35>HB-$`G?B0+P~DVO
zBY`?+y@1p+tN?wLjMxEVkBGts`ttgxwTl0A+a-rCAf8X06TtRewg`~4>rXrkoW}Lw
z4kQ@=lxBT6N6d&F!)#3pR5fVos|ZDGedTWZw~ypt=$P43BeeXX?K
z#pek;7jhmwDF~oXu^RtGW;Fe>tY#xT(^~+3;ND@^6EM^ZZ8WhDOEp&hHNAkB)&9K}
z!)GuILHpV#$^j?i>;`^aTqS^;5PJ9x7`sY6KdMoVtE
zmXVP$f}$lN>$c6YNh;J=r%}Q0v7A&X)Uf-jl`DD5ar6dfi^|Jy+aZi%YTyqeDh%ap
zd9g2(J6aa{{D;?hCrS7fnR$Bn81Z{+?C@K^W<>HbFv#!k=;!Lk?7WQUAM2?&X^W=1
z|IPV<@|KPwF`OITkUdox{#_Pd{oI+ziY=7(Bk_wqA9*_w8FhW{?X*3(AYIt<4(l9viNtOdi93;DQ%f)`+yt=om{I1|j{>#Td<&JHLhJ
zpom*`9dIU+E%k++c3$OZw}6dbG%!>v=~5c-^)9rfJG&*5dB^Kkq*n$de?Q+|Q5TZC$H^gxglUf)Yby464NLhrZ^-&aX`C$-vC?A&{BH9j+2`60g0$@NZ%UIhQ=i=NduwFj|+RtwV;
z&);dV>iixlO8n!ZDDi&k`^l*UuA`Rp-mB_+E*O`~j6gk)vUx;b@M2=~u^dqN77RC#06c6;73PU9KpY$UY*y
z<0P(s$ys&5Xab2blC56|`D^S&=>D~@!>@lQK>WneI7{RnqH>S%{B1j}ZEyrjRQAs@
z?t0VyU*pql2bC#>I+1GJGeoij^1AFl2j@Lr6*ROcM*7Q~5B1D_TT^KWxwbk+$RD+y
zyAt@M2GU#aQL_5Y?0IJ$CU@)*7fRd%ObUoP`+Z;%i9`TX!wBGvjola+L;7D_t@%6(
z{SUM20f^hGzz!p9I@U2_7s_K##9UOd?zo%^*Z%J3p4v0O&^ZZ8MugGdkZH_sZI*ti
z=8ZhsM>$ygL}(?&_L}K$Ti~CSNmi@FB9414{Zk~5seQpzV>avMqnK!x6fJ$TEoU@X
zn-k9IevQS|s1LBY#XBBX(_hTZDa6iP|B#fDA=%=U&-F}KrbGIfMuS`~lNnu+6HZ_D
zywUoYqio81oa9d{btVPeBxF*pzt*@oJ95n=eW&fs!-BxZ$xI5>Mtz#uHdcx%uy$MR
fFA`JRw%K_-hZKy?|DV{J0$}u=77(HhqM`jCB1Xt6
literal 0
HcmV?d00001
diff --git a/swri-cli-tools.spec b/swri-cli-tools.spec
new file mode 100644
index 0000000..8381d3c
--- /dev/null
+++ b/swri-cli-tools.spec
@@ -0,0 +1,89 @@
+%bcond_without tests
+%bcond_without weak_deps
+
+%global debug_package %{nil}
+%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$
+%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$
+
+%define RosPkgName swri-cli-tools
+%define ros_distro humble
+%define with_tests 0
+
+Name: ros-%{ros_distro}-%{RosPkgName}
+Version: 3.7.3
+Release: 1%{?dist}%{?release_suffix}
+Summary: Command line tools for introspecting ROS systems
+
+License: BSD 3 Clause
+Source0: %{name}_%{version}.orig.tar.gz
+
+Requires: ros-%{ros_distro}-marti-introspection-msgs
+Requires: python3-natsort
+Requires: ros-%{ros_distro}-rcl-interfaces
+Requires: ros-%{ros_distro}-rclpy
+Requires: ros-%{ros_distro}-ros2cli
+Requires: ros-%{ros_distro}-ros2node
+Requires: ros-%{ros_distro}-ros2param
+Requires: ros-%{ros_distro}-ros2topic
+
+BuildRequires: ros-%{ros_distro}-marti-introspection-msgs
+BuildRequires: python3-natsort
+BuildRequires: ros-%{ros_distro}-rcl-interfaces
+BuildRequires: ros-%{ros_distro}-rclpy
+BuildRequires: ros-%{ros_distro}-ros2cli
+BuildRequires: ros-%{ros_distro}-ros2node
+BuildRequires: ros-%{ros_distro}-ros2param
+BuildRequires: ros-%{ros_distro}-ros2topic
+
+%if 0%{?with_tests}
+BuildRequires: ros-%{ros_distro}-ament-copyright
+BuildRequires: ros-%{ros_distro}-ament-flake8
+BuildRequires: ros-%{ros_distro}-ament-pep257
+BuildRequires: ros-%{ros_distro}-ament-xmllint
+%endif
+
+Provides: %{name}-devel = %{version}-%{release}
+Provides: %{name}-doc = %{version}-%{release}
+Provides: %{name}-runtime = %{version}-%{release}
+
+%description
+Command line tools for introspecting ROS systems
+
+%prep
+%autosetup -p1
+
+%build
+
+# In case we're installing to a non-standard location, look for a setup.sh
+# in the install tree and source it. It will set things like
+# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
+if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi
+%py3_build
+
+%install
+# In case we're installing to a non-standard location, look for a setup.sh
+# in the install tree and source it. It will set things like
+# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
+if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi
+%py3_install -- --prefix "/opt/ros/%{ros_distro}"
+
+%if 0%{?with_tests}
+%check
+# Look for a directory with a name indicating that it contains tests
+TEST_TARGET=$(ls -d * | grep -m1 "\(test\|tests\)" ||:)
+if [ -n "$TEST_TARGET" ] && %__python3 -m pytest --version; then
+# In case we're installing to a non-standard location, look for a setup.sh
+# in the install tree and source it. It will set things like
+# CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
+if [ -f "/opt/ros/%{ros_distro}/setup.sh" ]; then . "/opt/ros/%{ros_distro}/setup.sh"; fi
+%__python3 -m pytest $TEST_TARGET || echo "RPM TESTS FAILED"
+else echo "RPM TESTS SKIPPED"; fi
+%endif
+
+%files
+/opt/ros/%{ros_distro}
+
+%changelog
+* Fri May 23 2025 Southwest Research Institute swri-robotics@swri.org - 3.7.3-1
+- Autogenerated by ros-porting-tools
--
Gitee