/
Team8
/
kittycad
Обзор
Документация
Войти
/
Team8
/
kittycad
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
codegen/deployAppimage.nim
219 строк
6 KB
levovix
init;
05 ноя 2025, 16:17
05 ноя 2025, 16:17
1b77203
Код
Авторство
О чём код?
import std/[strformat, strutils, tables, os] import ../thirdparty/cligen/cligen proc exec(cmd: string) = echo "\27[36mExec:\27[37m ", cmd, "\27[0m" let errcode = execShellCmd(cmd) if errcode != 0: quit errcode const AppRun = """ #!/bin/bash HERE="$(dirname "$(readlink -f "${0}")")" export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}" export QT_STYLE_OVERRIDE=Breeze export XDG_CURRENT_DESKTOP=KDE # export ICON_DIR="${HERE}/usr/share/icons" # export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS}" # export ICON_DIR="/home/levovix/.local/share/icons" # export ICON_THEME="hicolor" exec "${HERE}/usr/bin/kittycad" "$@" """ const Desktop = """ [Desktop Entry] Comment= Exec=/usr/bin/kittycad Icon=kittycad Name=KittyCAD NoDisplay=false Path=/usr/share/kittycad StartupNotify=true Terminal=false Categories=Graphics Type=Application """ const Ldd_full = @[ "libQt6SvgWidgets.so.6", "libQt6OpenGLWidgets.so.6", "libQt6Svg.so.6", "libQt6Widgets.so.6", "libQt6OpenGL.so.6", "libQt6Gui.so.6", "libGLX.so.0", "libGLX_indirect.so.0", "libGLU.so.1", "libOpenGL.so.0", "libQt6Core.so.6", "libstdc++.so.6", "libm.so.6", "libgcc_s.so.1", "libc.so.6", "librt.so.1", "libdl.so.2", "libpthread.so.0", "libgomp.so.1", "libz.so.1", "libEGL.so.1", "libfontconfig.so.1", "libX11.so.6", "libglib-2.0.so.0", "libQt6DBus.so.6", "libxkbcommon.so.0", "libpng16.so.16", "libharfbuzz.so.0", "libmd4c.so.0", "libfreetype.so.6", "libGLdispatch.so.0", "libicui18n.so.76", "libicuuc.so.76", "libsystemd.so.0", "libdouble-conversion.so.3", "libb2.so.1", "libpcre2-16.so.0", "libzstd.so.1", "libexpat.so.1", "libxcb.so.1", "libpcre2-8.so.0", "libdbus-1.so.3", "libgraphite2.so.3", "libbz2.so.1.0", "libbrotlidec.so.1", "libicudata.so.76", "libcap.so.2", "libXau.so.6", "libXdmcp.so.6", "libbrotlicommon.so.1", "libxcb-cursor.so.0", ] const Ldd_minimal = @[ "libQt6SvgWidgets.so.6", "libQt6OpenGLWidgets.so.6", "libQt6Svg.so.6", "libQt6Widgets.so.6", "libQt6OpenGL.so.6", "libQt6Gui.so.6", "libQt6Core.so.6", "libicui18n.so.76", ] const no_libs = true const full_mode = false const Ldd = if full_mode: Ldd_full else: Ldd_minimal proc buildAppimage( srcDir: string = ".", deployDir: string = "./deploy", outAppimage: string = "./kittycad.AppImage", c3dKernel_binPath: string = "./thirdparty/c3d-kernel/linux-amd64/release", c3dVision_binPath: string = "./thirdparty/c3d-vision/linux-amd64/release", ) = let srcDir = srcDir.absolutePath let deployDir = deployDir.absolutePath let buildDir = deployDir/"build" let packageDir = deployDir/"package" let outAppimage = outAppimage.absolutePath let c3dKernel_binPath = c3dKernel_binPath.absolutePath let c3dVision_binPath = c3dVision_binPath.absolutePath block preclean: if false: removeDir packageDir removeDir buildDir removeDir deployDir createDir deployDir createDir buildDir block build: if false: setCurrentDir buildDir exec "cmake " & quoteShell(srcDir) exec "cmake --build " & quoteShell(buildDir) block install: if true: removeDir packageDir createDir packageDir proc installFile(file: string, toDir: string = ".", fromDir = buildDir) = createDir packageDir/toDir copyFile fromDir/file, packageDir/toDir/file proc installSysFile(file: string, toDir: string = "usr/lib") = createDir packageDir/toDir copyFile ("/" & toDir)/file, packageDir/toDir/file setCurrentDir packageDir installFile "kittycad.svg", ".", fromDir = srcDir/"resources"/"icons" installFile "kittycad", "usr"/"bin" installFile "libc3d.so", "usr"/"lib", fromDir = c3dKernel_binPath installFile "libc3dvision.so", "usr"/"lib", fromDir = c3dVision_binPath if not no_libs: for lib in Ldd: installFile lib, "usr"/"lib", fromDir = "/usr/lib" installSysFile "libqxcb.so", "usr/lib/qt6/plugins/platforms" installSysFile "libqxcb-egl-integration.so", "usr/lib/qt6/plugins/xcbglintegrations" installSysFile "libqxcb-glx-integration.so", "usr/lib/qt6/plugins/xcbglintegrations" if full_mode: installSysFile "breezestyleconfig.so", "usr/lib/qt6/plugins/kstyle_config" installSysFile "org.kde.breeze.so", "usr/lib/qt6/plugins/org.kde.kdecoration3" installSysFile "kcm_breezedecoration.so", "usr/lib/qt6/plugins/org.kde.kdecoration3.kcm" installSysFile "breeze6.so", "usr/lib/qt6/plugins/styles" installSysFile "KF6WindowSystemX11Plugin.so", "usr/lib/qt6/plugins/kf6/kwindowsystem" copyDir getHomeDir()/".local/share/icons/Tela-dark", packageDir/"usr/share/icons/Tela-dark" copyDir "/usr/share/QtCurve", packageDir/"usr/share/QtCurve" copyDir "/usr/share/color-schemes", packageDir/"usr/share/color-schemes" copyDir "/usr/share/kstyle", packageDir/"usr/share/kstyle" # installSysFile "libKF6BreezeIcons.so.6.18.0", "usr/lib" # installSysFile "libKF6BreezeIcons.so.6", "usr/lib" # installSysFile "libKF6BreezeIcons.so", "usr/lib" installSysFile "libqsvg.so", "usr/lib/qt6/plugins/imageformats" installSysFile "libqsvgicon.so", "usr/lib/qt6/plugins/iconengines" installSysFile "KDEPlasmaPlatformTheme6.so", "usr/lib/qt6/plugins/platformthemes" installSysFile "KIconEnginePlugin.so", "usr/lib/qt6/plugins/kiconthemes6/iconengines" block pack: if true: writeFile packageDir/"AppRun", AppRun writeFile packageDir/"kittycad.desktop", Desktop exec "chmod +x " & quoteShell(packageDir/"AppRun") exec "chmod +x " & quoteShell(packageDir/"usr/bin/kittycad") exec "ARCH=x86_64 appimagetool " & quoteShell(packageDir) & " " & quoteShell(outAppimage) exec "chmod +x " & quoteShell(outAppimage) block clear: if false: removeDir buildDir removeDir deployDir dispatch buildAppimage