# Builds — Como gerar fc-uniao.exe, fc-alianca.exe, fc-ambos.exe ## Conceito O mesmo código gera 3 binários diferentes. A diferença entre eles é apenas o valor da variável de ambiente `DOBRADO_LOJA` passado na hora da compilação Rust. - **Build fixa (União ou Aliança):** o operador **não consegue trocar a loja** no formulário - **Build livre (Ambós):** o operador escolhe entre União e Aliança no dropdown --- ## Mecanismo: `option_env!` em Rust Em `src-tauri/src/plugins/app.rs`: ```rust /// DOBRADO_LOJA é uma variável de ambiente lida em TEMPO DE COMPILAÇÃO. /// Se não definida, retorna None. pub const LOJA_FIXA: Option<&'static str> = option_env!("DOBRADO_LOJA"); ``` O `option_env!` é uma macro built-in do Rust que avalia expressões const em tempo de compilação. Se `DOBRADO_LOJA` estiver definida como env var, `LOJA_FIXA` contém o valor. Se não, `None`. ### Por que compile-time? Se fosse runtime (`std::env::var`), o valor estaría hardcoded no binário da mesma forma, mas compile-time é mais limpo porque o Rust elimina código morto (dead code elimination). Se `LOJA_FIXA` é `None`, o Rust pode optimizar o código de "loja fixa" para fora do binário final. --- ## Comportamento por build | Build | `DOBRADO_LOJA` | Seletor loja | `set_loja` | `get_loja_fixa` | |-------|----------------|-------------|-------------|-----------------| | União | `Uniao` | **Escondido** | Bloqueado com erro | `"Uniao"` | | Aliança | `Alianca` | **Escondido** | Bloqueado com erro | `"Alianca"` | | Ambos | _(não definido)_ | Visível + funcional | Permitido | `null` | --- ## Como buildar (Linux → Windows cross-compile) ### Pré-requisitos ```bash # Instalar target cross-compile rustup target add x86_64-pc-windows-gnu # Ou via apt (Ubuntu/Debian) sudo apt install mingw-w64 ``` ### Comandos ```bash cd src-tauri/ # ── UNIÃO ───────────────────────────────────────────── DOBRADO_LOJA=Uniao \ cargo build --release --target x86_64-pc-windows-gnu # Binário gerado: # src-tauri/target/x86_64-pc-windows-gnu/release/fechamento-caixa.exe # ── ALIANÇA ────────────────────────────────────────── DOBRADO_LOJA=Alianca \ cargo build --release --target x86_64-pc-windows-gnu # ── AMBOS ──────────────────────────────────────────── cargo build --release --target x86_64-pc-windows-gnu # (sem DOBRADO_LOJA → loja livre) ``` ### Local do binário ``` src-tauri/target/x86_64-pc-windows-gnu/release/fechamento-caixa.exe ``` Renomear para `fc-uniao.exe`, `fc-alianca.exe`, `fc-ambos.exe` antes de distribuir. --- ## O que acontece no frontend quando a loja é fixa Em `src/index.html`, `DOMContentLoaded`: ```javascript document.addEventListener('DOMContentLoaded', async () => { try { const fixa = await window.__TAURI__.core.invoke('get_loja_fixa'); if (fixa) { // Build fixa: esconde o