changeset 437:e75c6da1d261

fix: exe-bundling not working correctly
author Sam <sam@basx.dev>
date Sun, 11 Feb 2024 19:26:07 +0700
parents 36b907544820
children 1ab09f8cc68d
files semicongine/build.nim semicongine/resources.nim semicongine/text.nim
diffstat 3 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/build.nim	Sun Feb 11 18:47:13 2024 +0700
+++ b/semicongine/build.nim	Sun Feb 11 19:26:07 2024 +0700
@@ -9,7 +9,7 @@
 
 const BLENDER_CONVERT_SCRIPT = currentSourcePath().parentDir().parentDir().joinPath("scripts/blender_gltf_converter.py")
 
-proc semicongine_builddir*(buildname: string, builddir="./build"): string =
+proc semicongine_builddir*(buildname: string, builddir = "./build"): string =
   var platformDir = "unkown"
 
   if defined(linux):
@@ -19,7 +19,7 @@
 
   return builddir / buildname / platformDir / projectName()
 
-proc semicongine_build_switches*(buildname: string, builddir="./build") =
+proc semicongine_build_switches*(buildname: string, builddir = "./build") =
   switch("experimental", "strictEffects")
   switch("experimental", "strictFuncs")
   switch("define", "nimPreviewHashRef")
@@ -27,7 +27,7 @@
   if defined(windows):
     switch("define", "VK_USE_PLATFORM_WIN32_KHR")
     switch("app", "gui")
-  switch("outdir", semicongine_builddir(buildname, builddir=builddir))
+  switch("outdir", semicongine_builddir(buildname, builddir = builddir))
 
 proc semicongine_pack*(outdir: string, bundleType: string, resourceRoot: string) =
   switch("define", "BUNDLETYPE=" & bundleType)
@@ -48,6 +48,8 @@
           exec &"zip -r {outputfile} ."
         elif defined(windows):
           exec &"powershell Compress-Archive * {outputfile}"
+  elif bundleType == "exe":
+    switch("define", "BUILD_RESOURCEROOT=" & joinPath(getCurrentDir(), resourceRoot)) # required for in-exe packing of resources, must be absolute
 
 proc semicongine_zip*(dir: string) =
   withdir dir.parentDir:
--- a/semicongine/resources.nim	Sun Feb 11 18:47:13 2024 +0700
+++ b/semicongine/resources.nim	Sun Feb 11 19:26:07 2024 +0700
@@ -88,15 +88,15 @@
   import std/tables
   import std/sequtils
 
-  proc loadResources(): Table[string, Table[string, string]] {.compileTime.} =
+  const BUILD_RESOURCEROOT* {.strdefine.}: string = ""
 
-    let srcdir = joinPath(parentDir(querySetting(projectFull)), RESOURCEROOT)
-    for kind, moddir in walkDir(srcdir):
+  proc loadResources(): Table[string, Table[string, string]] {.compileTime.} =
+    assert BUILD_RESOURCEROOT != "", "define BUILD_RESOURCEROOT to build for bundle type 'exe'"
+    for kind, moddir in walkDir(BUILD_RESOURCEROOT):
       if kind == pcDir:
         let modname = moddir.splitPath.tail
         result[modname] = Table[string, string]()
         for resourcefile in walkDirRec(moddir, relative = true):
-        # TODO: add Lempel–Ziv–Welch compression or something similar simple
           result[modname][resourcefile] = staticRead(joinPath(moddir, resourcefile))
   const bundledResources = loadResources()
 
--- a/semicongine/text.nim	Sun Feb 11 18:47:13 2024 +0700
+++ b/semicongine/text.nim	Sun Feb 11 19:26:07 2024 +0700
@@ -62,7 +62,7 @@
     dirty: bool                 # is true if any of the attributes changed
     processedText: seq[Rune]    # used to store processed (word-wrapper) text to preserve original
     lastRenderedText: seq[Rune] # stores the last rendered text, to prevent unnecessary updates
-    mesh: Mesh
+    mesh*: Mesh
 
 func `$`*(text: Text): string =
   "\"" & $text.text[0 ..< min(text.text.len, 16)] & "\""
@@ -286,6 +286,3 @@
   inc instanceCounter
 
   result.refresh()
-
-proc initText*(font: Font, text = "", maxLen: int = text.len, color = newVec4f(0.07, 0.07, 0.07, 1), scale = 1'f32, position = newVec2f(), verticalAlignment = VerticalAlignment.Center, horizontalAlignment = HorizontalAlignment.Center, maxWidth = 0'f32): Text =
-  initText(font = font, text = text.toRunes, maxLen = maxLen, color = color, scale = scale, position = position, horizontalAlignment = horizontalAlignment, verticalAlignment = verticalAlignment, maxWidth = maxWidth)