Esempio n. 1
0
def create_appbundle(destdir, name, extension='.app', module=py2app.apptemplate,
        platform='MacOS', copy=mergecopy, mergetree=mergetree,
        condition=skipscm, plist={}):
    kw = module.plist_template.infoPlistDict(
        plist.get('CFBundleExecutable', name), plist)
    app = os.path.join(destdir, kw['CFBundleName'] + extension)
    contents = os.path.join(app, 'Contents')
    resources = os.path.join(contents, 'Resources')
    platdir = os.path.join(contents, platform)
    dirs = [contents, resources, platdir]
    plist = plistlib.Plist()
    plist.update(kw)
    plistPath = os.path.join(contents, 'Info.plist')
    if os.path.exists(plistPath):
        if plist != plistlib.Plist.fromFile(plistPath):
            for d in dirs:
                shutil.rmtree(d, ignore_errors=True)
    for d in dirs:
        makedirs(d)
    plist.write(plistPath)
    srcmain = module.setup.main()
    destmain = os.path.join(platdir, kw['CFBundleExecutable'])
    open(os.path.join(contents, 'PkgInfo'), 'w').write(
        kw['CFBundlePackageType'] + kw['CFBundleSignature']
    )
    copy(srcmain, destmain)
    make_exec(destmain)
    mergetree(
        resource_filename(module.__name__, 'lib'),
        resources,
        condition=condition,
        copyfn=copy,
    )
    return app, plist
Esempio n. 2
0
def create_appbundle(destdir,
                     name,
                     extension='.app',
                     module=py2app.apptemplate,
                     platform='MacOS',
                     copy=mergecopy,
                     mergetree=mergetree,
                     condition=skipscm,
                     plist={},
                     arch=None,
                     redirect_stdout=False):

    kw = module.plist_template.infoPlistDict(
        plist.get('CFBundleExecutable', name), plist)
    app = os.path.join(destdir, kw['CFBundleName'] + extension)
    if os.path.exists(app):
        # Remove any existing build artifacts to ensure that
        # we're getting a clean build
        shutil.rmtree(app)
    contents = os.path.join(app, 'Contents')
    resources = os.path.join(contents, 'Resources')
    platdir = os.path.join(contents, platform)
    dirs = [contents, resources, platdir]
    plist = plistlib.Plist()
    plist.update(kw)
    plistPath = os.path.join(contents, 'Info.plist')
    if os.path.exists(plistPath):
        if plist != plistlib.Plist.fromFile(plistPath):
            for d in dirs:
                shutil.rmtree(d, ignore_errors=True)
    for d in dirs:
        makedirs(d)
    plist.write(plistPath)
    srcmain = module.setup.main(arch=arch, redirect_asl=redirect_stdout)
    if sys.version_info[0] == 2 \
            and isinstance(kw['CFBundleExecutable'], unicode):
        destmain = os.path.join(platdir,
                                kw['CFBundleExecutable'].encode('utf-8'))
    else:
        destmain = os.path.join(platdir, kw['CFBundleExecutable'])

    with open(os.path.join(contents, 'PkgInfo'), 'w') as fp:
        fp.write(kw['CFBundlePackageType'] + kw['CFBundleSignature'])

    print("Copy %r -> %r" % (srcmain, destmain))
    copy(srcmain, destmain)
    make_exec(destmain)
    mergetree(
        resource_filename(module.__name__, 'lib'),
        resources,
        condition=condition,
        copyfn=copy,
    )
    return app, plist
Esempio n. 3
0
def create_appbundle(destdir, name, extension='.app', module=py2app.apptemplate,
        platform='MacOS', copy=mergecopy, mergetree=mergetree,
        condition=skipscm, plist={}, arch=None, redirect_stdout=False):
    kw = module.plist_template.infoPlistDict(
        plist.get('CFBundleExecutable', name), plist)
    app = os.path.join(destdir, kw['CFBundleName'] + extension)
    if os.path.exists(app):
        # Remove any existing build artifacts to ensure that
        # we're getting a clean build
        shutil.rmtree(app)
    contents = os.path.join(app, 'Contents')
    resources = os.path.join(contents, 'Resources')
    platdir = os.path.join(contents, platform)
    dirs = [contents, resources, platdir]
    plist = plistlib.Plist()
    plist.update(kw)
    plistPath = os.path.join(contents, 'Info.plist')
    if os.path.exists(plistPath):
        if plist != plistlib.Plist.fromFile(plistPath):
            for d in dirs:
                shutil.rmtree(d, ignore_errors=True)
    for d in dirs:
        makedirs(d)
    plist.write(plistPath)
    srcmain = module.setup.main(arch=arch, secondary=not redirect_stdout)
    if sys.version_info[0] == 2 and isinstance(kw['CFBundleExecutable'], unicode):
        destmain = os.path.join(platdir, kw['CFBundleExecutable'].encode('utf-8'))
    else:
        destmain = os.path.join(platdir, kw['CFBundleExecutable'])

    with open(os.path.join(contents, 'PkgInfo'), 'w') as fp:
        fp.write(
            kw['CFBundlePackageType'] + kw['CFBundleSignature']
        )
    copy(srcmain, destmain)
    make_exec(destmain)
    mergetree(
        resource_filename(module.__name__, 'lib'),
        resources,
        condition=condition,
        copyfn=copy,
    )
    return app, plist
Esempio n. 4
0
def create_appbundle(
    destdir,
    name,
    extension=".app",
    module=py2app.apptemplate,
    platform="MacOS",
    copy=mergecopy,
    mergetree=mergetree,
    condition=skipscm,
    plist=None,
    arch=None,
    use_old_sdk=False,
    redirect_stdout=False,
):
    if plist is None:
        plist = {}

    kw = module.plist_template.infoPlistDict(
        plist.get("CFBundleExecutable", name), plist)
    app = os.path.join(destdir, kw["CFBundleName"] + extension)
    if os.path.exists(app):
        # Remove any existing build artifacts to ensure that
        # we're getting a clean build
        shutil.rmtree(app)
    contents = os.path.join(app, "Contents")
    resources = os.path.join(contents, "Resources")
    platdir = os.path.join(contents, platform)
    dirs = [contents, resources, platdir]
    plist = {}
    plist.update(kw)
    plistPath = os.path.join(contents, "Info.plist")
    if os.path.exists(plistPath):
        with open(plistPath, "rb") as fp:
            if hasattr(plistlib, "load"):
                contents = plistlib.load(fp)
            else:
                # 2.7
                contents = plistlib.readPlist(fp)

            if plist != contents:
                for d in dirs:
                    shutil.rmtree(d, ignore_errors=True)
    for d in dirs:
        makedirs(d)

    with open(plistPath, "wb") as fp:
        if hasattr(plistlib, "dump"):
            plistlib.dump(plist, fp)
        else:
            plistlib.writePlist(plist, fp)

    srcmain = module.setup.main(arch=arch,
                                redirect_asl=redirect_stdout,
                                use_old_sdk=use_old_sdk)
    if sys.version_info[0] == 2 and isinstance(
            kw["CFBundleExecutable"],
            unicode  # noqa: F821
    ):
        destmain = os.path.join(platdir,
                                kw["CFBundleExecutable"].encode("utf-8"))
    else:
        destmain = os.path.join(platdir, kw["CFBundleExecutable"])

    with open(os.path.join(contents, "PkgInfo"), "w") as fp:
        fp.write(kw["CFBundlePackageType"] + kw["CFBundleSignature"])

    print("Copy %r -> %r" % (srcmain, destmain))
    copy(srcmain, destmain)
    make_exec(destmain)
    mergetree(
        resource_filename(module.__name__, "lib"),
        resources,
        condition=condition,
        copyfn=copy,
    )
    return app, plist
Esempio n. 5
0
def create_pluginbundle(destdir,
                        name,
                        extension='.plugin',
                        module=py2app.bundletemplate,
                        platform='MacOS',
                        copy=mergecopy,
                        mergetree=mergetree,
                        condition=skipscm,
                        plist={},
                        arch=None):

    kw = module.plist_template.infoPlistDict(
        plist.get('CFBundleExecutable', name), plist)
    plugin = os.path.join(destdir, kw['CFBundleName'] + extension)
    if os.path.exists(plugin):
        # Remove any existing build artifacts to ensure
        # we're getting a clean build
        shutil.rmtree(plugin)
    contents = os.path.join(plugin, 'Contents')
    resources = os.path.join(contents, 'Resources')
    platdir = os.path.join(contents, platform)
    dirs = [contents, resources, platdir]
    plist = {}
    plist.update(kw)
    plistPath = os.path.join(contents, 'Info.plist')
    if os.path.exists(plistPath):
        with open(plistPath, 'rb') as fp:
            if hasattr(plistlib, 'load'):
                contents = plistlib.load(fp)
            else:
                # 2.7
                contents = plistlib.readPlist(fp)

            if plist != contents:
                for d in dirs:
                    shutil.rmtree(d, ignore_errors=True)
    for d in dirs:
        makedirs(d)

    with open(plistPath, 'wb') as fp:
        if hasattr(plistlib, 'dump'):
            plistlib.dump(plist, fp)
        else:
            plistlib.writePlist(plist, fp)
    srcmain = module.setup.main(arch=arch)
    if sys.version_info[0] == 2 and \
            isinstance(kw['CFBundleExecutable'], unicode):
        destmain = os.path.join(platdir,
                                kw['CFBundleExecutable'].encode('utf-8'))
    else:
        destmain = os.path.join(platdir, kw['CFBundleExecutable'])
    with open(os.path.join(contents, 'PkgInfo'), 'w') as fp:
        fp.write(kw['CFBundlePackageType'] + kw['CFBundleSignature'])
    copy(srcmain, destmain)
    make_exec(destmain)
    mergetree(
        resource_filename(module.__name__, 'lib'),
        resources,
        condition=condition,
        copyfn=copy,
    )
    return plugin, plist