diff --git a/python_appimage/__main__.py b/python_appimage/__main__.py index 84b023e..62458d0 100644 --- a/python_appimage/__main__.py +++ b/python_appimage/__main__.py @@ -7,6 +7,11 @@ import sys __all__ = ['main'] +def exists(path): + if not os.path.exists(path): + raise argparse.ArgumentTypeError("could not find: {}".format(path)) + return os.path.abspath(path) + def main(): '''Entry point for the CLI ''' @@ -73,6 +78,8 @@ def main(): help='force pip in-tree-build', action='store_true', default=False) + build_app_parser.add_argument('-x', '--extra-data', type=exists, + help='extra application data (bundled under $APPDIR/)', nargs='+') list_parser = subparsers.add_parser('list', description='List Python versions installed in a manylinux image') diff --git a/python_appimage/commands/build/app.py b/python_appimage/commands/build/app.py index 00c0c3e..856c643 100644 --- a/python_appimage/commands/build/app.py +++ b/python_appimage/commands/build/app.py @@ -26,14 +26,16 @@ def _unpack_args(args): '''Unpack command line arguments ''' return args.appdir, args.name, args.python_version, args.linux_tag, \ - args.python_tag, args.base_image, args.in_tree_build + args.python_tag, args.base_image, args.in_tree_build, \ + args.extra_data _tag_pattern = re.compile('python([^-]+)[-]([^.]+)[.]AppImage') _linux_pattern = re.compile('manylinux([0-9]+)_' + platform.machine()) def execute(appdir, name=None, python_version=None, linux_tag=None, - python_tag=None, base_image=None, in_tree_build=False): + python_tag=None, base_image=None, in_tree_build=False, + extra_data=None): '''Build a Python application using a base AppImage ''' @@ -287,6 +289,15 @@ def execute(appdir, name=None, python_version=None, linux_tag=None, '--no-warn-script-location', requirement), exclude=(deprecation + git_warnings)) + # Bundle auxilliary application data + if extra_data is not None: + for path in extra_data: + basename = os.path.basename(path) + log('BUNDLE', basename) + if os.path.isdir(path): + copy_tree(path, 'AppDir/' + basename) + else: + copy_file(path, 'AppDir/') # Bundle the entry point entrypoint_path = glob.glob(appdir + '/entrypoint.*')