Also implement the bypy freeze on macOS
This commit is contained in:
parent
9114bda24c
commit
e0620fbb1d
@ -110,7 +110,8 @@ def copy_python(env):
|
|||||||
pdir = os.path.join(env.lib_dir, 'kitty-extensions')
|
pdir = os.path.join(env.lib_dir, 'kitty-extensions')
|
||||||
os.makedirs(pdir, exist_ok=True)
|
os.makedirs(pdir, exist_ok=True)
|
||||||
kitty_dir = os.path.join(env.base, 'lib', 'kitty')
|
kitty_dir = os.path.join(env.base, 'lib', 'kitty')
|
||||||
for x in ('kitty', 'kittens'):
|
bases = ('kitty', 'kittens')
|
||||||
|
for x in bases:
|
||||||
dest = os.path.join(env.py_dir, x)
|
dest = os.path.join(env.py_dir, x)
|
||||||
os.rename(os.path.join(kitty_dir, x), dest)
|
os.rename(os.path.join(kitty_dir, x), dest)
|
||||||
if x == 'kitty':
|
if x == 'kitty':
|
||||||
@ -120,9 +121,10 @@ def copy_python(env):
|
|||||||
print('Extracting extension modules from', env.py_dir, 'to', pdir)
|
print('Extracting extension modules from', env.py_dir, 'to', pdir)
|
||||||
ext_map = extract_extension_modules(env.py_dir, pdir)
|
ext_map = extract_extension_modules(env.py_dir, pdir)
|
||||||
shutil.copy(os.path.join(os.path.dirname(self_dir), 'site.py'), os.path.join(env.py_dir, 'site.py'))
|
shutil.copy(os.path.join(os.path.dirname(self_dir), 'site.py'), os.path.join(env.py_dir, 'site.py'))
|
||||||
for q in walk(os.path.join(env.py_dir, 'kitty')):
|
for x in bases:
|
||||||
if os.path.splitext(q)[1] not in ('.py', '.glsl'):
|
for q in walk(os.path.join(env.py_dir, x)):
|
||||||
os.unlink(q)
|
if os.path.splitext(q)[1] not in ('.py', '.glsl'):
|
||||||
|
os.unlink(q)
|
||||||
py_compile(env.py_dir)
|
py_compile(env.py_dir)
|
||||||
freeze_python(env.py_dir, pdir, env.obj_dir, ext_map, develop_mode_env_var='KITTY_DEVELOP_FROM')
|
freeze_python(env.py_dir, pdir, env.obj_dir, ext_map, develop_mode_env_var='KITTY_DEVELOP_FROM')
|
||||||
|
|
||||||
|
|||||||
@ -13,16 +13,23 @@ import tempfile
|
|||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
from bypy.constants import PREFIX, PYTHON, SW, python_major_minor_version
|
from bypy.constants import PREFIX, PYTHON, SW, python_major_minor_version
|
||||||
|
from bypy.freeze import (
|
||||||
|
extract_extension_modules, freeze_python, path_to_freeze_dir
|
||||||
|
)
|
||||||
from bypy.macos_sign import (
|
from bypy.macos_sign import (
|
||||||
codesign, create_entitlements_file, make_certificate_useable, notarize_app,
|
codesign, create_entitlements_file, make_certificate_useable, notarize_app,
|
||||||
verify_signature
|
verify_signature
|
||||||
)
|
)
|
||||||
from bypy.utils import current_dir, py_compile, run_shell, timeit, walk
|
from bypy.utils import (
|
||||||
|
current_dir, mkdtemp, py_compile, run_shell, timeit, walk
|
||||||
|
)
|
||||||
|
|
||||||
iv = globals()['init_env']
|
iv = globals()['init_env']
|
||||||
kitty_constants = iv['kitty_constants']
|
kitty_constants = iv['kitty_constants']
|
||||||
|
self_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
join = os.path.join
|
join = os.path.join
|
||||||
basename = os.path.basename
|
basename = os.path.basename
|
||||||
|
dirname = os.path.dirname
|
||||||
abspath = os.path.abspath
|
abspath = os.path.abspath
|
||||||
APPNAME = kitty_constants['appname']
|
APPNAME = kitty_constants['appname']
|
||||||
VERSION = kitty_constants['version']
|
VERSION = kitty_constants['version']
|
||||||
@ -147,6 +154,7 @@ class Freeze(object):
|
|||||||
self.py_ver = py_ver
|
self.py_ver = py_ver
|
||||||
self.python_stdlib = join(self.resources_dir, 'Python', 'lib', 'python' + self.py_ver)
|
self.python_stdlib = join(self.resources_dir, 'Python', 'lib', 'python' + self.py_ver)
|
||||||
self.site_packages = self.python_stdlib # hack to avoid needing to add site-packages to path
|
self.site_packages = self.python_stdlib # hack to avoid needing to add site-packages to path
|
||||||
|
self.obj_dir = mkdtemp('launchers-')
|
||||||
|
|
||||||
self.run()
|
self.run()
|
||||||
|
|
||||||
@ -160,10 +168,10 @@ class Freeze(object):
|
|||||||
self.add_site_packages()
|
self.add_site_packages()
|
||||||
self.add_stdlib()
|
self.add_stdlib()
|
||||||
self.add_misc_libraries()
|
self.add_misc_libraries()
|
||||||
self.compile_py_modules()
|
self.freeze_python()
|
||||||
self.fix_dependencies_in_kitty()
|
|
||||||
if not self.dont_strip:
|
if not self.dont_strip:
|
||||||
self.strip_files()
|
self.strip_files()
|
||||||
|
self.check_build()
|
||||||
# self.run_shell()
|
# self.run_shell()
|
||||||
|
|
||||||
ret = self.makedmg(self.build_dir, APPNAME + '-' + VERSION)
|
ret = self.makedmg(self.build_dir, APPNAME + '-' + VERSION)
|
||||||
@ -175,6 +183,10 @@ class Freeze(object):
|
|||||||
print('\nStripping files...')
|
print('\nStripping files...')
|
||||||
strip_files(self.to_strip)
|
strip_files(self.to_strip)
|
||||||
|
|
||||||
|
@flush
|
||||||
|
def check_build(self):
|
||||||
|
iv['check_build'](os.path.join(self.contents_dir, 'MacOS', 'kitty'))
|
||||||
|
|
||||||
@flush
|
@flush
|
||||||
def set_id(self, path_to_lib, new_id):
|
def set_id(self, path_to_lib, new_id):
|
||||||
old_mode = flipwritable(path_to_lib)
|
old_mode = flipwritable(path_to_lib)
|
||||||
@ -239,7 +251,6 @@ class Freeze(object):
|
|||||||
self.set_id(
|
self.set_id(
|
||||||
join(currd, 'Python'),
|
join(currd, 'Python'),
|
||||||
self.FID + '/Python.framework/Versions/%s/Python' % basename(curr))
|
self.FID + '/Python.framework/Versions/%s/Python' % basename(curr))
|
||||||
self.fix_dependencies_in_lib(join(self.contents_dir, 'MacOS', 'kitty'))
|
|
||||||
# The following is needed for codesign
|
# The following is needed for codesign
|
||||||
with current_dir(x):
|
with current_dir(x):
|
||||||
os.symlink(basename(curr), 'Versions/Current')
|
os.symlink(basename(curr), 'Versions/Current')
|
||||||
@ -265,6 +276,7 @@ class Freeze(object):
|
|||||||
'lcms2.2',
|
'lcms2.2',
|
||||||
'crypto.1.1',
|
'crypto.1.1',
|
||||||
'ssl.1.1',
|
'ssl.1.1',
|
||||||
|
'ffi.7',
|
||||||
):
|
):
|
||||||
print('\nAdding', x)
|
print('\nAdding', x)
|
||||||
x = 'lib%s.dylib' % x
|
x = 'lib%s.dylib' % x
|
||||||
@ -273,11 +285,6 @@ class Freeze(object):
|
|||||||
dest = join(self.frameworks_dir, x)
|
dest = join(self.frameworks_dir, x)
|
||||||
self.set_id(dest, self.FID + '/' + x)
|
self.set_id(dest, self.FID + '/' + x)
|
||||||
self.fix_dependencies_in_lib(dest)
|
self.fix_dependencies_in_lib(dest)
|
||||||
base = join(self.frameworks_dir, 'kitty')
|
|
||||||
for lib in walk(base):
|
|
||||||
if lib.endswith('.so'):
|
|
||||||
self.set_id(lib, self.FID + '/' + os.path.relpath(lib, self.frameworks_dir))
|
|
||||||
self.fix_dependencies_in_lib(lib)
|
|
||||||
|
|
||||||
@flush
|
@flush
|
||||||
def add_package_dir(self, x, dest=None):
|
def add_package_dir(self, x, dest=None):
|
||||||
@ -295,21 +302,10 @@ class Freeze(object):
|
|||||||
dest = self.site_packages
|
dest = self.site_packages
|
||||||
dest = join(dest, basename(x))
|
dest = join(dest, basename(x))
|
||||||
shutil.copytree(x, dest, symlinks=True, ignore=ignore)
|
shutil.copytree(x, dest, symlinks=True, ignore=ignore)
|
||||||
self.postprocess_package(x, dest)
|
|
||||||
for f in walk(dest):
|
for f in walk(dest):
|
||||||
if f.endswith('.so'):
|
if f.endswith('.so'):
|
||||||
self.fix_dependencies_in_lib(f)
|
self.fix_dependencies_in_lib(f)
|
||||||
|
|
||||||
@flush
|
|
||||||
def fix_dependencies_in_kitty(self):
|
|
||||||
for f in walk(join(self.resources_dir, 'kitty')):
|
|
||||||
if f.endswith('.so'):
|
|
||||||
self.fix_dependencies_in_lib(f)
|
|
||||||
|
|
||||||
@flush
|
|
||||||
def postprocess_package(self, src_path, dest_path):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@flush
|
@flush
|
||||||
def add_stdlib(self):
|
def add_stdlib(self):
|
||||||
print('\nAdding python stdlib')
|
print('\nAdding python stdlib')
|
||||||
@ -331,6 +327,37 @@ class Freeze(object):
|
|||||||
if dest2.endswith('.so'):
|
if dest2.endswith('.so'):
|
||||||
self.fix_dependencies_in_lib(dest2)
|
self.fix_dependencies_in_lib(dest2)
|
||||||
|
|
||||||
|
@flush
|
||||||
|
def freeze_python(self):
|
||||||
|
print('\nFreezing python')
|
||||||
|
kitty_dir = join(self.resources_dir, 'kitty')
|
||||||
|
bases = ('kitty', 'kittens')
|
||||||
|
for x in bases:
|
||||||
|
dest = os.path.join(self.python_stdlib, x)
|
||||||
|
os.rename(os.path.join(kitty_dir, x), dest)
|
||||||
|
if x == 'kitty':
|
||||||
|
shutil.rmtree(os.path.join(dest, 'launcher'))
|
||||||
|
os.rename(os.path.join(kitty_dir, '__main__.py'), os.path.join(self.python_stdlib, 'kitty_main.py'))
|
||||||
|
shutil.rmtree(os.path.join(kitty_dir, '__pycache__'))
|
||||||
|
pdir = os.path.join(dirname(self.python_stdlib), 'kitty-extensions')
|
||||||
|
os.mkdir(pdir)
|
||||||
|
print('Extracting extension modules from', self.python_stdlib, 'to', pdir)
|
||||||
|
ext_map = extract_extension_modules(self.python_stdlib, pdir)
|
||||||
|
shutil.copy(os.path.join(os.path.dirname(self_dir), 'site.py'), os.path.join(self.python_stdlib, 'site.py'))
|
||||||
|
for x in bases:
|
||||||
|
for q in walk(os.path.join(self.python_stdlib, x)):
|
||||||
|
if os.path.splitext(q)[1] not in ('.py', '.glsl'):
|
||||||
|
os.unlink(q)
|
||||||
|
self.compile_py_modules()
|
||||||
|
freeze_python(self.python_stdlib, pdir, self.obj_dir, ext_map, develop_mode_env_var='KITTY_DEVELOP_FROM')
|
||||||
|
iv['build_frozen_launcher']([path_to_freeze_dir(), self.obj_dir])
|
||||||
|
os.rename(join(dirname(self.contents_dir), 'bin', 'kitty'), join(self.contents_dir, 'MacOS', 'kitty'))
|
||||||
|
shutil.rmtree(join(dirname(self.contents_dir), 'bin'))
|
||||||
|
self.fix_dependencies_in_lib(join(self.contents_dir, 'MacOS', 'kitty'))
|
||||||
|
for f in walk(pdir):
|
||||||
|
if f.endswith('.so') or f.endswith('.dylib'):
|
||||||
|
self.fix_dependencies_in_lib(f)
|
||||||
|
|
||||||
@flush
|
@flush
|
||||||
def add_site_packages(self):
|
def add_site_packages(self):
|
||||||
print('\nAdding site-packages')
|
print('\nAdding site-packages')
|
||||||
@ -389,11 +416,8 @@ class Freeze(object):
|
|||||||
|
|
||||||
@flush
|
@flush
|
||||||
def compile_py_modules(self):
|
def compile_py_modules(self):
|
||||||
print('\nCompiling Python modules')
|
|
||||||
self.remove_bytecode(join(self.resources_dir, 'Python'))
|
self.remove_bytecode(join(self.resources_dir, 'Python'))
|
||||||
py_compile(join(self.resources_dir, 'Python'))
|
py_compile(join(self.resources_dir, 'Python'))
|
||||||
self.remove_bytecode(join(self.resources_dir, 'kitty'))
|
|
||||||
py_compile(join(self.resources_dir, 'kitty'))
|
|
||||||
|
|
||||||
@flush
|
@flush
|
||||||
def makedmg(self, d, volname, internet_enable=True, format='ULFO'):
|
def makedmg(self, d, volname, internet_enable=True, format='ULFO'):
|
||||||
|
|||||||
@ -119,6 +119,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "xcrypt",
|
"name": "xcrypt",
|
||||||
|
"os": "linux",
|
||||||
"unix": {
|
"unix": {
|
||||||
"filename": "xcrypt-4.4.17.tar.gz",
|
"filename": "xcrypt-4.4.17.tar.gz",
|
||||||
"hash": "sha256:7665168d0409574a03f7b484682e68334764c29c21ca5df438955a381384ca07",
|
"hash": "sha256:7665168d0409574a03f7b484682e68334764c29c21ca5df438955a381384ca07",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user