# Compile Python JackCAD → .exe

## Cakupan

| File | Status | Alasan |
|---|---|---|
| `setting\txt2xlsx.py` | ✅ di-compile | Hanya library bawaan Python (`sys`, `os`, `zipfile`, `re`, `xml`) |
| `subroutine\tif_georef.py` | ✅ di-compile | Hanya `os`, `sys`, `struct` untuk parser utama |
| `QGIS\HeriAdsQgis\*.py` (21 file) | ❌ **jangan disentuh** | Plugin QGIS — `import qgis.core` / `qgis.PyQt`, berjalan di dalam interpreter Python milik QGIS. Bukan program mandiri, tidak bisa dan tidak boleh di-exe-kan. Distribusinya lewat `.zip` plugin QGIS. |

## Cara build

Jalankan **di komputer Windows** (PyInstaller tidak bisa lintas-platform):

```
C:\jackcad2027\build\build_exe.bat
```

Syarat: Python 3 terpasang dan ada di PATH. Skrip akan memasang PyInstaller sendiri.

Hasil:

```
C:\jackcad2027\bin\txt2xlsx.exe
C:\jackcad2027\bin\tif_georef.exe
```

## Cara kerja setelah di-patch

LISP sekarang memakai pola **exe dulu, `.py` sebagai cadangan**:

```
1. Ada C:\jackcad2027\bin\*.exe  ->  pakai exe, Python tidak diperlukan
2. Tidak ada exe                 ->  berburu python.exe seperti dulu
```

Artinya **tidak ada yang rusak sebelum exe dibangun** — semua tetap berjalan seperti sebelumnya. Kalau exe dihapus, sistem otomatis kembali ke `.py`.

Cara memastikan exe benar-benar terpakai: lihat baris perintah AutoCAD saat konversi. Muncul tulisan `via txt2xlsx.exe` = exe aktif; `via Python` = masih pakai interpreter.

## File LISP yang diubah

| File | Perubahan |
|---|---|
| `subroutine\txt2xls.lsp` | + `jc_locate_exe`, `jc_runpy2xls` pilih exe/py |
| `template\halbaru\gridtoc.lsp` | + `locate_exe`, `txt_to_xlsx` pilih exe/py |
| `template\halbaru\gridkrib.LSP` | + `locate_exe`, `txt_to_xlsx` pilih exe/py |
| `template\halbaru\attachtif.lsp` | + `jc:tifexe`, `jc:run-python-world` pilih exe/py |

Override manual bila exe ditaruh di tempat lain:

```lisp
(setq *JCTIFEXE* "d:\\folder\\tif_georef.exe")
```

## Yang perlu diperhatikan

**Antivirus.** Exe hasil PyInstaller sering ditandai malware secara keliru. Kalau menyebar ke klien, siapkan pengecualian antivirus atau pertimbangkan code-signing certificate.

**`tif_georef.exe` kehilangan 2 backend.** Skrip aslinya punya 3 cara baca georeferensi: parser TIFF manual → `rasterio` → GDAL. Build ini sengaja meng-`exclude` rasterio/GDAL supaya exe tidak membengkak ratusan MB. Parser manual cukup untuk GeoTIFF umum, tapi file dengan format tidak biasa yang dulu tertolong GDAL bisa gagal. Kalau ini terjadi, hapus `bin\tif_georef.exe` — sistem otomatis kembali ke `.py` yang masih punya semua backend.

**Startup ±0,5 detik lebih lambat** karena `--onefile` diekstrak ke folder temp. Ganti ke `--onedir` di `build_exe.bat` kalau ingin lebih cepat (tapi jadi banyak file).

**Rebuild setiap kali `.py` diubah.** Kalau lupa, exe lama tetap dipakai dan perubahan tidak terasa.

**`_work\`** adalah folder sementara PyInstaller, boleh dihapus setelah build.

## Dampak ke installer

`JackCAD2027_Installer.exe` perlu diperbarui agar ikut memaketkan folder `bin\`. Kalau exe ikut didistribusikan, Python tidak lagi jadi syarat pemasangan di komputer klien — kecuali mereka memakai plugin QGIS.
