# Pakiety systemu, ktore instalator systemowy (install.sh) doklada przed
# zaleznosciami Pythona. To jedyne miejsce, w ktorym trzyma sie te liste -
# skrypt niczego nie wie o nazwach pakietow, tylko czyta ten plik.
#
# Format wiersza:
#
#     <menedzer> <grupa> <pakiet>
#
# menedzer  narzedzie pakietow systemu: apt, dnf, pacman, apk, zypper, pkg.
#           Skrypt wybiera je sam (uname + /etc/os-release), a wierszy innych
#           menedzerow nie czyta.
# grupa     "podstawa" instaluje sie zawsze; "sqlite", "mysql" i "postgresql"
#           tylko przy tym silniku bazy, ktory wybrano w instalatorze.
# pakiet    nazwa dla tego menedzera. Znacznik %PY% skrypt zamienia na
#           przedrostek pakietow Pythona w tym systemie (FreeBSD: py311,
#           py312 - zaleznie od wybranego interpretera).
#
# Wiersz z # to komentarz, pusty wiersz jest pomijany. Wlasne biblioteki
# systemu dopisuje sie tutaj - instalator wezmie je bez zmian w kodzie.
#
# Bibliotek Pythona tu nie ma: te stoja w requirements.txt, w plikach
# sterownikow bazy (requirements-mysql.txt, requirements-postgresql.txt)
# i w requirements-extra.txt, a instaluje je pip w srodowisku .venv.


# --- Linux: Debian, Ubuntu i pochodne (apt) --------------------------------
#
# Na Linuksie z PyPI schodza gotowe kola (wheel) na wszystko z
# requirements.txt - Pillow, cryptography i psycopg maja tam wkompilowane
# swoje biblioteki. Stad lista tak krotka: wystarczy Python z modulem venv
# i zestaw certyfikatow, zeby pip mial czym sprawdzic polaczenie z PyPI.
apt podstawa python3
apt podstawa python3-venv
apt podstawa python3-pip
apt podstawa ca-certificates

# Kompilator i naglowki libpq - potrzebne tylko wtedy, gdy pip nie znajdzie
# gotowego kola psycopg (stary Linux, egzotyczna architektura) i probuje
# zbudowac je ze zrodel.
apt postgresql libpq-dev
apt postgresql build-essential


# --- Linux: Fedora, RHEL, Rocky, Alma (dnf) --------------------------------
dnf podstawa python3
dnf podstawa python3-pip
dnf podstawa ca-certificates
dnf postgresql libpq-devel
dnf postgresql gcc


# --- Linux: Arch i pochodne (pacman) ---------------------------------------
pacman podstawa python
pacman podstawa python-pip
pacman podstawa ca-certificates
pacman postgresql postgresql-libs


# --- Linux: Alpine (apk) ---------------------------------------------------
#
# Alpine stoi na musl, wiec kol manylinux z PyPI tam nie ma i kazdy pakiet
# z czescia binarna buduje sie ze zrodel. Stad naglowki i kompilator juz
# w podstawie - bez nich nie wejdzie ani Pillow, ani cryptography.
apk podstawa python3
apk podstawa py3-pip
apk podstawa ca-certificates
apk podstawa build-base
apk podstawa python3-dev
apk podstawa libffi-dev
apk podstawa jpeg-dev
apk podstawa zlib-dev
apk postgresql libpq-dev


# --- Linux: openSUSE (zypper) ----------------------------------------------
zypper podstawa python3
zypper podstawa python3-pip
zypper podstawa ca-certificates
zypper postgresql postgresql-devel


# --- FreeBSD (pkg) ---------------------------------------------------------
#
# Na FreeBSD kol binarnych na PyPI nie ma - kazdy pakiet z czescia binarna
# pip buduje ze zrodel, a cryptography wymaga do tego jeszcze Rusta. Dlatego
# biblioteki bierzemy z pakietow systemu, a srodowisko .venv instalator
# zaklada tam z dostepem do nich (--system-site-packages).
#
# Osobno modul sqlite3: na FreeBSD nie przychodzi on z pakietem Pythona,
# tylko stoi obok. Bez niego nie ruszy ani baza SQLite, ani nawet migracje
# na innym silniku - Django siega po sqlite3 w kilku miejscach.
pkg podstawa python3
pkg podstawa %PY%-pip
pkg podstawa %PY%-sqlite3
pkg podstawa %PY%-pillow
pkg podstawa %PY%-cryptography
pkg podstawa ca_root_nss

# Sterowniki baz: czysty Python dla MySQL-a, pakiet systemu dla PostgreSQL-a
# (psycopg2 przychodzi z libpq, wiec nie trzeba go budowac).
pkg mysql %PY%-pymysql
pkg postgresql %PY%-psycopg2
