]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core.git/commitdiff
install-buildtools: add --local-file option
authorJaipaul Cheernam <jaipaul.cheernam@est.tech>
Thu, 25 Jun 2026 17:06:20 +0000 (19:06 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 30 Jun 2026 07:10:14 +0000 (08:10 +0100)
Add --local-file so that bitbake-setup (or any other caller that
already fetched and verified the installer) can pass a local path
directly without re-downloading.

Signed-off-by: Jaipaul Cheernam <jaipaul.cheernam@est.tech>
Reviewed-by: Daniel Turull <daniel.turull@ericsson.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
scripts/install-buildtools

index b438d7a359be07b16f4edcec38e53f83d5fff565..4e6f6e25d724ad2b949984383d266d5938361824 100755 (executable)
@@ -176,6 +176,10 @@ def main():
         description="Buildtools installation helper",
         add_help=False,
         formatter_class=argparse.RawTextHelpFormatter)
+    parser.add_argument('--local-file',
+                        help='path to a pre-downloaded buildtools installer file.\n'
+                             'Cannot be combined with --url or --filename.',
+                        action='store')
     parser.add_argument('-u', '--url',
                         help='URL from where to fetch buildtools SDK installer, not '
                              'including filename (optional)\n'
@@ -289,21 +293,35 @@ def main():
     os.makedirs(sdk_dir, exist_ok=True)
     try:
         # Fetch installer
-        tmpbuildtools = fetch_buildtools(buildtools_url, filename, sdk_dir, args.check)
-        if tmpbuildtools is None:
-            return 1
-
-        # Make installer executable
-        logger.info("Making installer executable")
-        st = os.stat(tmpbuildtools)
-        os.chmod(tmpbuildtools, st.st_mode | stat.S_IEXEC)
-        logger.debug(os.stat(tmpbuildtools))
+        if args.local_file:
+            if args.url or args.filename:
+                parser.error("--local-file cannot be combined with --url or --filename")
+            tmpbuildtools = os.path.abspath(args.local_file)
+            if not os.path.exists(tmpbuildtools):
+                logger.error("Local file not found: %s" % tmpbuildtools)
+                return 1
+            filename = os.path.basename(tmpbuildtools)
+        else:
+            tmpbuildtools = fetch_buildtools(buildtools_url, filename, sdk_dir, args.check)
+            if tmpbuildtools is None:
+                return 1
+
+        # Run installer
+        if args.local_file:
+            # Avoid mutating caller-owned file; invoke via /bin/sh instead
+            cmd = ["/bin/sh", tmpbuildtools]
+        else:
+            logger.info("Making installer executable")
+            st = os.stat(tmpbuildtools)
+            os.chmod(tmpbuildtools, st.st_mode | stat.S_IEXEC)
+            logger.debug(os.stat(tmpbuildtools))
+            cmd = [tmpbuildtools]
         if args.directory:
             install_dir = os.path.abspath(args.directory)
-            ret = subprocess.call([tmpbuildtools, "-d", install_dir, "-y"])
+            ret = subprocess.call(cmd + ["-d", install_dir, "-y"])
         else:
             install_dir = "/opt/poky/%s" % args.installer_version
-            ret = subprocess.call([tmpbuildtools, "-y"])
+            ret = subprocess.call(cmd + ["-y"])
         if ret != 0:
             logger.error("Could not run buildtools installer")
             return ret