From 74f8c0def6b0dabf5fc22759349f31d40a80e981 Mon Sep 17 00:00:00 2001 From: Griffin Tabor Date: Sun, 20 Sep 2026 14:11:35 -0400 Subject: [PATCH 1/3] Rebuild launch and launch_ros with patch to handle python nodes correct --- patch/ros-jazzy-launch-ros.win.patch | 17 +++++++++++++++++ patch/ros-jazzy-launch.win.patch | 12 ++++++++++++ pkg_additional_info.yaml | 4 ++++ 3 files changed, 33 insertions(+) create mode 100644 patch/ros-jazzy-launch-ros.win.patch create mode 100644 patch/ros-jazzy-launch.win.patch diff --git a/patch/ros-jazzy-launch-ros.win.patch b/patch/ros-jazzy-launch-ros.win.patch new file mode 100644 index 000000000..b8879b970 --- /dev/null +++ b/patch/ros-jazzy-launch-ros.win.patch @@ -0,0 +1,17 @@ +diff --git a/launch_ros/launch_ros/substitutions/executable_in_package.py b/launch_ros/launch_ros/substitutions/executable_in_package.py +index f300c39..5b77ffc 100644 +--- a/launch_ros/launch_ros/substitutions/executable_in_package.py ++++ b/launch_ros/launch_ros/substitutions/executable_in_package.py +@@ -80,6 +80,12 @@ class ExecutableInPackage(FindPackagePrefix): + "package '{}' found at '{}', but libexec directory '{}' does not exist".format( + package, package_prefix, package_libexec)) + result = which(executable, path=package_libexec) ++ ++ if result is None and os.name == 'nt' and executable.lower().endswith('.py'): ++ candidate = os.path.join(package_libexec, executable) ++ if os.path.isfile(candidate): ++ result = candidate ++ + if result is None: + raise SubstitutionFailure( + "executable '{}' not found on the libexec directory '{}' ".format( \ No newline at end of file diff --git a/patch/ros-jazzy-launch.win.patch b/patch/ros-jazzy-launch.win.patch new file mode 100644 index 000000000..6cf4c782a --- /dev/null +++ b/patch/ros-jazzy-launch.win.patch @@ -0,0 +1,12 @@ +diff --git a/launch/launch/actions/execute_local.py b/launch/launch/actions/execute_local.py +index ce5f4e7..4a9fdb8 100644 +--- a/launch/launch/actions/execute_local.py ++++ b/launch/launch/actions/execute_local.py +@@ -569,7 +569,6 @@ class ExecuteLocal(Action): + try: + # On Windows, Python scripts cannot be passed directly to CreateProcess(). + # Invoke them through the Python interpreter, matching ros2run behavior. +- print('LAUNCH CMD:', cmd) + if os.name == 'nt' and cmd and cmd[0].lower().endswith('.py'): + cmd.insert(0, sys.executable) + transport, self._subprocess_protocol = await async_execute_process( \ No newline at end of file diff --git a/pkg_additional_info.yaml b/pkg_additional_info.yaml index 77b492990..0a5da54da 100644 --- a/pkg_additional_info.yaml +++ b/pkg_additional_info.yaml @@ -214,6 +214,10 @@ coal: build_number: 22 nav2_mppi_controller: build_number: 22 +launch: + build_number: 22 +launch_ros: + build_number: 22 pinocchio: generate_dummy_package_with_run_deps: dep_name: pinocchio From eecd2fee8da65bf7471596ca8da7d8693d02b945 Mon Sep 17 00:00:00 2001 From: Griffin Tabor Date: Sun, 20 Sep 2026 14:19:40 -0400 Subject: [PATCH 2/3] Fix patch --- patch/ros-jazzy-launch.win.patch | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/patch/ros-jazzy-launch.win.patch b/patch/ros-jazzy-launch.win.patch index 6cf4c782a..2f4a2e21c 100644 --- a/patch/ros-jazzy-launch.win.patch +++ b/patch/ros-jazzy-launch.win.patch @@ -1,12 +1,23 @@ diff --git a/launch/launch/actions/execute_local.py b/launch/launch/actions/execute_local.py -index ce5f4e7..4a9fdb8 100644 +index 487ae90..4a9fdb8 100644 --- a/launch/launch/actions/execute_local.py +++ b/launch/launch/actions/execute_local.py -@@ -569,7 +569,6 @@ class ExecuteLocal(Action): +@@ -14,6 +14,7 @@ + + """Module for the ExecuteLocal action.""" + ++import sys + import asyncio + import io + import logging +@@ -566,6 +567,10 @@ class ExecuteLocal(Action): + ) + try: - # On Windows, Python scripts cannot be passed directly to CreateProcess(). - # Invoke them through the Python interpreter, matching ros2run behavior. -- print('LAUNCH CMD:', cmd) - if os.name == 'nt' and cmd and cmd[0].lower().endswith('.py'): - cmd.insert(0, sys.executable) - transport, self._subprocess_protocol = await async_execute_process( \ No newline at end of file ++ # On Windows, Python scripts cannot be passed directly to CreateProcess(). ++ # Invoke them through the Python interpreter, matching ros2run behavior. ++ if os.name == 'nt' and cmd and cmd[0].lower().endswith('.py'): ++ cmd.insert(0, sys.executable) + transport, self._subprocess_protocol = await async_execute_process( + lambda **kwargs: self.__ProcessProtocol( + self, context, process_event_args, **kwargs \ No newline at end of file From f3e4623055e3ca42c185b0888d5c9031862589e9 Mon Sep 17 00:00:00 2001 From: Griffin Tabor Date: Sun, 20 Sep 2026 14:28:25 -0400 Subject: [PATCH 3/3] l is right before n not right after in the alphabet --- pkg_additional_info.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg_additional_info.yaml b/pkg_additional_info.yaml index 0a5da54da..83f71488e 100644 --- a/pkg_additional_info.yaml +++ b/pkg_additional_info.yaml @@ -212,12 +212,12 @@ coal: override_version: '3.0.4' # Remove on next full rebuild: bumped so main rebuilds the 3.0.4 dummy build_number: 22 -nav2_mppi_controller: - build_number: 22 launch: build_number: 22 launch_ros: build_number: 22 +nav2_mppi_controller: + build_number: 22 pinocchio: generate_dummy_package_with_run_deps: dep_name: pinocchio