1#!/usr/bin/env python3 2 3import os 4import sys 5import subprocess 6 7p = subprocess.Popen("file --dereference `which python3`", 8 shell=True, stdout=subprocess.PIPE) 9exe_info = p.stdout.read().decode("UTF-8") 10if "386," in exe_info: 11 # arch = "i386" 12 arch = "x86" 13elif "x86-64," in exe_info: 14 # arch = "amd64" 15 arch = "x86-64" 16else: 17 raise Exception("unrecognized arch") 18 19# if os.environ.get("STEAM_RUNTIME", ""): 20if os.environ.get("STEAMOS", ""): 21 os_name = "steamos" 22 # if arch == "i386": 23 # # steam runtime sdk compiles with -mtune=generic -march=i686 24 # arch = "i686" 25else: 26 os_name = "linux" 27 os_name_pretty = "Linux" 28 29package_name = "fs-uae-launcher" 30package_version = sys.argv[1] 31dbg_package_dir = "{0}-dbg_{1}_{2}_{3}".format( 32 package_name, package_version, os_name, arch) 33 34package_dir = "../linux/Launcher/Linux//{}".format(arch) 35 36full_package_name = "{0}_{1}_{2}_{3}".format( 37 package_name, package_version, os_name, arch) 38full_package_name_2 = "Launcher_{}_{}_{}".format( 39 package_version, os_name_pretty, arch) 40 41 42def s(command): 43 c = command.format(**globals()) 44 print(c) 45 assert os.system(c) == 0 46 47 48def wrap(name, target=None, args=None): 49 if target is None: 50 target = name + ".bin" 51 os.rename(os.path.join(package_dir, name), 52 os.path.join(package_dir, target)) 53 if args is None: 54 args = ["$@"] 55 path = os.path.join(package_dir, name) 56 with open(path, "w") as f: 57 f.write("#!/bin/sh\n") 58 f.write("MYDIR=$(dirname \"$0\")\n") 59 # f.write("export LD_LIBRARY_PATH=\"$MYDIR:$LD_LIBRARY_PATH\"\n") 60 command = "\"$MYDIR/{0}\"".format(target) 61 for arg in args: 62 command += " \"{0}\"".format(arg) 63 if os_name == "steamos": 64 # if arch == "i686": 65 if arch == "x86": 66 bin_dir = "bin32" 67 # elif arch == "amd64": 68 elif arch == "x86-64": 69 bin_dir = "bin32" 70 else: 71 raise Exception("unsupported steamos arch?") 72 f.write("if [ -e \"$HOME/.steam/{0}/steam-runtime/" 73 "run.sh\" ]; then\n".format(bin_dir)) 74 f.write("RUN_SH=\"$HOME/.steam/{0}/steam-runtime/" 75 "run.sh\"\n".format(bin_dir)) 76 f.write("else\n") 77 f.write("RUN_SH=\"/home/steam/.steam/{0}/steam-runtime/" 78 "run.sh\"\n".format(bin_dir)) 79 f.write("fi\n") 80 f.write("exec $RUN_SH {0}\n".format(command)) 81 else: 82 f.write("exec {0}\n".format(command)) 83 os.chmod(path, 0o755) 84 85 86s("rm -Rf Launcher") 87s("mkdir -p Launcher/Linux") 88# s("make -C ..") 89# s("rm -Rf ../build ../dist") 90 91# Trying to get deterministic .pyc creation 92s("cd ../.. && PYTHONHASHSEED=1 python3 setup.py build_exe") 93s("mv ../../build/exe.linux-*-3.6 {package_dir}") 94 95# we want to perform our own standalone/library management, so we remove the 96# libraries added by cx_Freeze 97s("rm -f {package_dir}/*.so.*") 98s("rm -f {package_dir}/imageformats/*.so.*") 99 100s("rm -f {package_dir}/platforms/libqdirectfb.so") 101s("rm -f {package_dir}/platforms/libqlinuxfb.so") 102s("rm -f {package_dir}/platforms/libqminimal.so") 103s("rm -f {package_dir}/platforms/libqoffscreen.so") 104s("./standalone-linux.py {package_dir}/platforms") 105s("mv {package_dir}/platforms/*.so.* {package_dir}") 106s("./standalone-linux.py --no-copy --strip --rpath='$ORIGIN/..' {package_dir}/platforms") 107# s("rm {package_dir}/platforms/*.so.*") 108 109s("rm -f {package_dir}/imageformats/libqdds.so") 110s("rm -f {package_dir}/imageformats/libqicns.so") 111s("rm -f {package_dir}/imageformats/libqjp2.so") 112s("rm -f {package_dir}/imageformats/libqmng.so") 113s("rm -f {package_dir}/imageformats/libqsvg.so") 114s("rm -f {package_dir}/imageformats/libqtga.so") 115s("rm -f {package_dir}/imageformats/libqtiff.so") 116s("rm -f {package_dir}/imageformats/libqwbmp.so") 117s("rm -f {package_dir}/imageformats/libqwebp.so") 118s("./standalone-linux.py {package_dir}/imageformats") 119s("mv {package_dir}/imageformats/*.so.* {package_dir}") 120s("./standalone-linux.py --no-copy --strip --rpath='$ORIGIN/..' {package_dir}/imageformats") 121# s("rm {package_dir}/imageformats/*.so.*") 122 123from PyQt5 import QtCore 124dir0 = os.path.join(os.path.dirname(QtCore.__file__), "plugins") 125for libpath in QtCore.QCoreApplication.libraryPaths() + [dir0]: 126 print(libpath) 127 p = os.path.join(libpath, "xcbglintegrations") 128 if os.path.exists(p): 129 s("cp -a \"{0}\" {{package_dir}}/".format(p)) 130s("./standalone-linux.py {package_dir}/xcbglintegrations") 131s("mv {package_dir}/xcbglintegrations/*.so.* {package_dir}") 132s("./standalone-linux.py --no-copy --strip --rpath='$ORIGIN/..' {package_dir}/xcbglintegrations") 133# s("rm {package_dir}/xcbglintegrations/*.so.*") 134 135# s("mv {package_dir}/platforms/* {package_dir}") 136# s("mv {package_dir}/imageformats/* {package_dir}") 137# s("mv {package_dir}/xcbglintegrations/* {package_dir}") 138# s("rm -Rf {package_dir}/platforms") 139# s("rm -Rf {package_dir}/imageformats") 140# s("rm -Rf {package_dir}/xcbglintegrations") 141 142# s("./standalone-linux.py {package_dir}") 143# s("strip {package_dir}/*.so.*") 144# s("strip {package_dir}/*.so") 145 146# Must remove .standalone files to force processing the ones copied 147# from the Qt plugin dirs 148s("find {package_dir} -name '*.standalone' -delete") 149s("./standalone-linux.py --strip --rpath='$ORIGIN' {package_dir}") 150s("find {package_dir} -name '*.standalone' -delete") 151 152s("chmod a-x {package_dir}/*.so") 153s("cd ../.. && make") 154s("mkdir Launcher/Data") 155s("cp ../../cacert.pem Launcher/Data") 156s("cp -a ../../share/locale Launcher/Data/Locale") 157# s("cp -a ../../share {package_dir}") 158# s("rm -Rf {package_dir}/share/applications") 159# s("rm -Rf {package_dir}/share/icons") 160 161s("rm -Rf {package_dir}/amitools") 162s("rm -Rf {package_dir}/arcade") 163s("rm -Rf {package_dir}/fsbc") 164# s("rm -Rf {package_dir}/fsboot") 165s("rm -Rf {package_dir}/fsgs") 166s("rm -Rf {package_dir}/fspy") 167s("rm -Rf {package_dir}/fstd") 168s("rm -Rf {package_dir}/fsui") 169s("rm -Rf {package_dir}/launcher") 170s("rm -Rf {package_dir}/OpenGL") 171s("rm -Rf {package_dir}/oyoyo") 172s("rm -Rf {package_dir}/workspace") 173 174s("zip -d {package_dir}/library.zip amitools/\*") 175s("zip -d {package_dir}/library.zip arcade/\*") 176s("zip -d {package_dir}/library.zip fsbc/\*") 177# s("zip -d {package_dir}/library.zip fsboot/\*") 178s("zip -d {package_dir}/library.zip fsgs/\*") 179s("zip -d {package_dir}/library.zip fspy/\*") 180s("zip -d {package_dir}/library.zip fstd/\*") 181s("zip -d {package_dir}/library.zip fsui/\*") 182s("zip -d {package_dir}/library.zip launcher/\*") 183s("zip -d {package_dir}/library.zip OpenGL/\*") 184s("zip -d {package_dir}/library.zip oyoyo/\*") 185s("zip -d {package_dir}/library.zip workspace/\*") 186 187s("zip -d {package_dir}/library.zip BUILD_CONSTANTS.pyc") 188s("PYTHONPATH=../.. python3 -m fspy.zipfile deterministic " 189 "--fix-pyc-timestamps {package_dir}/library.zip") 190 191# s("cp -a ../python/*.zip {package_dir}") 192s("mkdir Launcher/Python") 193s("cp -a ../python/*.zip Launcher/Python") 194 195s("echo {package_version} > Launcher/Version.txt") 196s("echo {package_version} > {package_dir}/Version.txt") 197 198if os_name == "steamos": 199 # s("mv {package_dir}/fs-uae-launcher {package_dir}/fs-uae-launcher.bin") 200 wrap("fs-uae-launcher") 201 wrap("fs-uae-arcade", "fs-uae-launcher.bin", ["--fs-uae-arcade", "$@"]) 202 203# s("cd {package_dir} && tar Jcfv ../../../{full_package_name}.tar.xz *") 204s("tar Jcfv ../../{full_package_name}.tar.xz Launcher") 205s("cp ../../{full_package_name}.tar.xz ../../{full_package_name_2}.tar.xz") 206 207# s("rm -Rf {dbg_package_dir}") 208# s("mkdir {dbg_package_dir}") 209# s("cp -a ../fs-uae.dbg {dbg_package_dir}/") 210# s("cp -a ../fs-uae-device-helper.dbg {dbg_package_dir}/") 211# s("cd {dbg_package_dir} && tar Jcfv ../../{dbg_package_dir}.tar.xz *") 212