feat(framework): assets/ subfolder para distribuibles read-only
Refina la convencion de layout: el top de cada app distribuible solo lleva el .exe + DLLs nativas; todo lo demas (TTFs, enrichers, runtime Python, MCP servers) vive en <exe_dir>/assets/. Cambios: - cpp/CMakeLists.txt::add_imgui_app — copia las 5 TTFs (Karla, Roboto, DroidSans, Cousine, tabler-icons) a $<TARGET_FILE_DIR>/assets/ en lugar de junto al exe. - framework/app_base: nuevas funciones fn::asset_dir() y fn::asset_path(name) que resuelven a <exe_dir>/assets/<name>. - functions/core/icon_font.cpp::find_asset — anade fn::asset_path(filename) como PRIMERA ruta de busqueda, antes de las legacy ./<file> y ./assets/<file>. Mantiene los fallbacks para dev (FN_ASSETS_DIR, FN_CPP_ROOT). - .claude/commands/compile.md — el deploy a Desktop pone TTFs + enrichers/ + runtime/ + gx-cli en <DEST>/assets/. Solo .exe y DLLs nativas (duckdb.dll) quedan en el top. local_files/ se preserva si existe. Layout final: Desktop/apps/<APP>/ ├── <APP>.exe + *.dll (binario + DLLs Windows) ├── assets/ (read-only distribuible) │ ├── *.ttf, enrichers/, runtime/, gx-cli, ... └── local_files/ (per-PC, creado al primer arranque) Esto cierra la separacion conceptual de la convencion: la carpeta es trivial de zippear (solo .exe + assets/), el reset/sync es trivial (local_files/), y todas las apps del registry adoptan el mismo layout via fn_framework. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+17
-8
@@ -154,8 +154,11 @@ add_library(fn_framework STATIC
|
||||
functions/core/panel_menu.cpp
|
||||
functions/core/layouts_menu.cpp
|
||||
functions/core/app_menubar.cpp
|
||||
functions/core/logger.cpp
|
||||
functions/core/log_window.cpp
|
||||
functions/gfx/gl_loader.cpp
|
||||
functions/core/layout_storage.cpp
|
||||
functions/core/selectable_text.cpp
|
||||
)
|
||||
target_include_directories(fn_framework PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/framework
|
||||
@@ -194,25 +197,31 @@ function(add_imgui_app target)
|
||||
target_include_directories(${target} PRIVATE
|
||||
${FN_CPP_ROOT_DIR}/functions
|
||||
)
|
||||
# Copia las fuentes junto al ejecutable para deploys autonomos (sin
|
||||
# FN_CPP_ROOT en runtime). 4 TTFs vectoriales para el menu Settings + Tabler
|
||||
# para los iconos TI_*.
|
||||
# Convencion de layout (cpp_apps.md §7):
|
||||
# <exe_dir>/<app>.exe + <app>.dll (binario + DLLs Windows convention)
|
||||
# <exe_dir>/assets/ (read-only: ttfs, enrichers, runtime, etc.)
|
||||
# <exe_dir>/local_files/ (creado en runtime: ini, db, projects)
|
||||
#
|
||||
# add_imgui_app copia las TTFs a <exe_dir>/assets/. La app las
|
||||
# encuentra en runtime via fn::asset_path() (icon_font.cpp).
|
||||
set(_ASSETS_DIR $<TARGET_FILE_DIR:${target}>/assets)
|
||||
add_custom_command(TARGET ${target} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${_ASSETS_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${FN_CPP_ROOT_DIR}/vendor/imgui/misc/fonts/Karla-Regular.ttf
|
||||
$<TARGET_FILE_DIR:${target}>/Karla-Regular.ttf
|
||||
${_ASSETS_DIR}/Karla-Regular.ttf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${FN_CPP_ROOT_DIR}/vendor/imgui/misc/fonts/Roboto-Medium.ttf
|
||||
$<TARGET_FILE_DIR:${target}>/Roboto-Medium.ttf
|
||||
${_ASSETS_DIR}/Roboto-Medium.ttf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${FN_CPP_ROOT_DIR}/vendor/imgui/misc/fonts/DroidSans.ttf
|
||||
$<TARGET_FILE_DIR:${target}>/DroidSans.ttf
|
||||
${_ASSETS_DIR}/DroidSans.ttf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${FN_CPP_ROOT_DIR}/vendor/imgui/misc/fonts/Cousine-Regular.ttf
|
||||
$<TARGET_FILE_DIR:${target}>/Cousine-Regular.ttf
|
||||
${_ASSETS_DIR}/Cousine-Regular.ttf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${FN_CPP_ROOT_DIR}/vendor/tabler-icons/tabler-icons.ttf
|
||||
$<TARGET_FILE_DIR:${target}>/tabler-icons.ttf
|
||||
${_ASSETS_DIR}/tabler-icons.ttf
|
||||
VERBATIM
|
||||
)
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user