Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unleashed Pascal Installer

Official installer for the Unleashed Pascal project. Downloads source, builds the Unleashed Pascal compiler and IDE into a self-contained directory of your choice. No registry side effects, no PATH modification, no overwriting of system FPC.

Release artifacts

  • installer_win64_x86_64.exe - Windows host
  • installer_linux_x86_64 - Linux host (raw ELF64)
  • installer_linux_x86_64.AppImage - Linux host (AppImage, self-contained)

All three are published to the nightly release; pick whichever suits your distro / preference.

What the installer does

Pick a target directory, optionally pin commits, tick the cross compilers you want, click Install. The installer then:

  1. Downloads a bootstrap FPC and the Unleashed Pascal compiler + Unleashed Pascal IDE source.
  2. Builds the native compiler for the host OS, then any cross targets you ticked.
  3. Builds the IDE and any optional addons you ticked.
  4. Drops a desktop shortcut to the IDE, wired to a per-install IDE config so the install stays isolated from anything else on the system.

Re-runs are idempotent: unchanged components self-skip, ticked-but-missing targets get filled in, unticked-but-present targets get removed, addon toggles trigger a surgical IDE rebuild. State lives in <install>/installer.ini.

Install dir defaults: C:\unleashed\ on Windows, $HOME/unleashed/ on Linux.

Cross-target support matrix

Target From win64 host From linux64 host
x86_64-win64 native cross via the compiler's internal PE/COFF linker (-Xi)
x86_64-linux cross native
i386-win32 cross cross
i386-linux cross cross; needs i386-win32 as prereq
wasm32-wasip1 cross cross

Linux host requirements

The native compile and the GTK3 build of the IDE need a working toolchain on the host:

# Debian / Ubuntu / Mint
sudo apt install -y curl build-essential libgtk-3-dev xdg-utils

# Fedora
sudo dnf install -y curl make gcc binutils glibc-devel gtk3-devel xdg-utils

# openSUSE
sudo zypper --non-interactive install curl make gcc binutils glibc-devel gtk3-devel xdg-utils

# Arch / Manjaro
sudo pacman -S --needed curl base-devel gtk3 xdg-utils

Tested baseline: glibc 2.28+ (Ubuntu 18.04+, Debian 10+, Fedora 29+).

Filename hash pin

A release binary can carry a compact <len><payload> blob in its filename so the installer pre-fills the compiler / IDE commit and branch fields on startup - without baking long commit SHAs or branch names into the binary name.

Layout (4 positional fields, all optional, concatenated with no separators):

Pos Meaning
1 compiler commit / predefined branch
2 ide commit / predefined branch
3 compiler branch hash override (optional, hash-only)
4 ide branch hash override (optional, hash-only)

Each field is <L><L-hex-chars>:

For pos 1 and 2:

  • 0X - predefined namespace, X selects a built-in branch:

    • 0 = main
    • 1 = devel

    Commit is "latest of that branch" semantically.

  • <L><L-hex> with L in 1..9 - L hex chars follow = pinned commit-SHA prefix. Branch is implicitly main. Override the implicit main via pos 3 if you want a different branch.

For pos 3 and 4 (branch override, hash-only):

  • <L><L-hex> with L in 1..9 - L hex chars = murmur3 prefix of the branch name. Picks whichever currently-active branch hashes to that prefix; collisions are resolved by encoding a longer prefix at build time.

The override slot has no predefined namespace - if you want a predefined branch, write it in pos 1 / 2 instead.

Branch hashes are generated by the branchhash CLI tool sitting next to the installer source:

branchhash <branch-name> [<total-len>]
  • 1st arg: branch name (e.g. feat/composable-records)
  • 2nd arg (optional): total chars to emit including the length digit, default 3, max 9. So branchhash feat/composable-records outputs a 3-char token (2xx = len 2 + 2 hex chars).

Examples

Filename token Pin
00 compiler on main, latest commit. ide defaults to main + latest.
0000 both compiler and ide on main + latest (explicit).
0101 both compiler and ide on devel + latest.
1a1b compiler commit pin a, ide commit pin b, both on main (implicit).
00011a compiler on main, ide on devel, compiler branch overridden to whatever hashes to a.
0001266 compiler on main, ide on devel, compiler branch override hash 66 (3-char field).
1a2bc266266 compiler commit a, ide commit bc, then both branches overridden via hash 66.

The parser picks the LAST hex+digit run of >= 2 chars in the filename. There is no fallback to an earlier run - if the chosen run fails to parse, the install just starts at defaults.

Cmdline override (for testing)

You can pass the blob as the first cmdline argument to the installer; it parses with the exact same rules as the filename and overrides whatever the filename encodes:

installer_win64_x86_64.exe 0000366f366f

The Commit edit fields and Branch combos fill in on startup.

License

Source published for audit. See LICENSE - free to run, free to read, free to build yourself, no forks.

Releases

Used by

Contributors

Languages