From a41e644c73b97fbac18479ec86cfb975c3758ae2 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Wed, 14 Jun 2017 22:27:02 +0200 Subject: Update build_appimage.py for CentOS 6 support * Adjust script to support older Python version, 2.6.6 * Add ability to include arbitrary libs in AppImage * Make debuglink via objcopy optional Test-Information: Tested on 64-bit CentOS 6.9 with non-system g++ 4.9.4 and tested generated AppImage on 64-bit Ubuntu 16.04. Change-Id: Ib75b07b30e1b1cdf875ec0b45c9f7bab91c59fbf diff --git a/Swift/Packaging/appimage/build_appimage.py b/Swift/Packaging/appimage/build_appimage.py index e188c4f..b49ef7f 100644 --- a/Swift/Packaging/appimage/build_appimage.py +++ b/Swift/Packaging/appimage/build_appimage.py @@ -17,8 +17,10 @@ # # The appimage will be for the same architecture as the host architecture. # Pass `--qt5=False` to the tool to build against legacy Qt4. +# +# To include newer libstdc++.so or similar libs in an AppImage, use -li parameters. -from plumbum import local, FG, BG, colors, commands +from plumbum import local, FG, BG, RETCODE, colors, commands import click import os import re @@ -38,7 +40,8 @@ resources_dir = os.path.join(git_working_dir, "Swift/resources/") @click.command() @click.option('--qt5', default=True, type=bool, help='Build with Qt5.') -def build_appimage(qt5): +@click.option('--includelib', '-il', type=click.Path(), multiple=True, help='Copy extra library into AppImage.') +def build_appimage(qt5, includelib): print(colors.bold & colors.info | "Switch to git working directory root " + git_working_dir) with local.cwd(git_working_dir): @@ -53,7 +56,7 @@ def build_appimage(qt5): scons = local['./scons'] print(colors.bold & colors.info | "Building Swift") - scons['qt5={}'.format("1" if qt5 else "0"), 'Swift'] & FG + scons['qt5={0}'.format("1" if qt5 else "0"), 'Swift'] & FG swift = local['./Swift/QtUI/swift-im'] swift_version = swift('--version').strip() @@ -76,7 +79,7 @@ def build_appimage(qt5): swift_install_dir = os.path.join(appdir_path, 'usr') print(colors.bold & colors.info | "Install Swift to AppDir") - scons['qt5={}'.format("1" if qt5 else "0"), 'Swift', 'SWIFT_INSTALLDIR=' + swift_install_dir , swift_install_dir] & FG + scons['qt5={0}'.format("1" if qt5 else "0"), 'Swift', 'SWIFT_INSTALLDIR=' + swift_install_dir , swift_install_dir] & FG print(colors.bold & colors.info | "Download dynamic lib exclude list from https://raw.githubusercontent.com/AppImage/AppImages/master/excludelist") local['wget']['--no-check-certificate', '-O', '/tmp/excludelist', 'https://raw.githubusercontent.com/AppImage/AppImages/master/excludelist'] & FG @@ -117,6 +120,11 @@ def build_appimage(qt5): for plugin_path in local.path(appdir_qt5_plugin_path) // "plugins/*/*.so": copy_dependencies_into_appdir(excludelist, plugin_path, os.path.join(swift_install_dir, "lib")) + if includelib: + for includelib_path in includelib: + print(colors.bold & colors.info | "Copy " + includelib_path + " to AppDir.") + local['cp']('-v', '-L', includelib_path, os.path.join(swift_install_dir, "lib")) + print(colors.bold & colors.info | "Download https://github.com/AppImage/AppImageKit/raw/appimagetool/master/resources/AppRun to " + os.path.join(appdir_path, 'AppRun')) local['wget']('--no-check-certificate', '-O', os.path.join(appdir_path, 'AppRun'), "https://github.com/AppImage/AppImageKit/raw/appimagetool/master/resources/AppRun") local['chmod']('+x', os.path.join(appdir_path, 'AppRun')) @@ -132,7 +140,12 @@ def build_appimage(qt5): local['cp']('-v', '-L', os.path.join(resources_dir, "logo/logo-icon-32.xpm"), os.path.join(appdir_path, "swift.xpm")) print(colors.bold & colors.info | "Download appimagetool to /tmp/appimagetool and make it executable") - local['wget']['-O', '/tmp/appimagetool', 'https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-' + ("x86_64.AppImage" if swift_architecture_string == ".amd64": else "i686.AppImage")] & FG + appimage_url_suffix = "" + if swift_architecture_string == ".amd64": + appimage_url_suffix = "x86_64.AppImage" + else: + appimage_url_suffix = "i686.AppImage" + local['wget']['-O', '/tmp/appimagetool', 'https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-' + appimage_url_suffix] & FG local['chmod']['a+x', '/tmp/appimagetool']() local['mkdir']('-p', os.path.join(git_working_dir, "Packages/Swift")) @@ -142,7 +155,9 @@ def build_appimage(qt5): print(colors.bold & colors.info | "Extract debug information from swift-im") local['objcopy']('--only-keep-debug', appdir_swift_im_binary, debug_symbol_path) local['strip']('-g', appdir_swift_im_binary) - local['objcopy']('--add-gnu-debuglink', debug_symbol_path, os.path.join(swift_install_dir, 'bin/swift-im')) + debuglink_retcode = local['objcopy']['--add-gnu-debuglink', debug_symbol_path, os.path.join(swift_install_dir, 'bin/swift-im')] & RETCODE + if debuglink_retcode != 0: + print(colors.bold & colors.warn | "Failed to create debuglink in binary.") print(colors.bold & colors.info | "Generate AppImage from Swift.AppDir") local['/tmp/appimagetool'][appdir_path, appimage_path] & FG -- cgit v0.10.2-6-g49f6