Files
zoitechat/docs/building.rst
T

5.3 KiB

<?xml version="1.0" encoding="utf-8" ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <style type="text/css"> /* :Author: David Goodger (goodger@python.org) :Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. */ /* used to remove borders from tables and images */ .borderless, table.borderless td, table.borderless th { border: 0 } table.borderless td, table.borderless th { /* Override padding for "table.docutils td" with "! important". The right padding separates the table cells. */ padding: 0 0.5em 0 0 ! important } .first { /* Override more specific margin styles with "! important". */ margin-top: 0 ! important } .last, .with-subtitle { margin-bottom: 0 ! important } .hidden { display: none } .subscript { vertical-align: sub; font-size: smaller } .superscript { vertical-align: super; font-size: smaller } a.toc-backref { text-decoration: none ; color: black } blockquote.epigraph { margin: 2em 5em ; } dl.docutils dd { margin-bottom: 0.5em } object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { overflow: hidden; } /* Uncomment (and remove this text!) to get bold-faced definition list terms dl.docutils dt { font-weight: bold } */ div.abstract { margin: 2em 5em } div.abstract p.topic-title { font-weight: bold ; text-align: center } div.admonition, div.attention, div.caution, div.danger, div.error, div.hint, div.important, div.note, div.tip, div.warning { margin: 2em ; border: medium outset ; padding: 1em } div.admonition p.admonition-title, div.hint p.admonition-title, div.important p.admonition-title, div.note p.admonition-title, div.tip p.admonition-title { font-weight: bold ; font-family: sans-serif } div.attention p.admonition-title, div.caution p.admonition-title, div.danger p.admonition-title, div.error p.admonition-title, div.warning p.admonition-title, .code .error { color: red ; font-weight: bold ; font-family: sans-serif } /* Uncomment (and remove this text!) to get reduced vertical space in compound paragraphs. div.compound .compound-first, div.compound .compound-middle { margin-bottom: 0.5em } div.compound .compound-last, div.compound .compound-middle { margin-top: 0.5em } */ div.dedication { margin: 2em 5em ; text-align: center ; font-style: italic } div.dedication p.topic-title { font-weight: bold ; font-style: normal } div.figure { margin-left: 2em ; margin-right: 2em } div.footer, div.header { clear: both; font-size: smaller } div.line-block { display: block ; margin-top: 1em ; margin-bottom: 1em } div.line-block div.line-block { margin-top: 0 ; margin-bottom: 0 ; margin-left: 1.5em } div.sidebar { margin: 0 0 0.5em 1em ; border: medium outset ; padding: 1em ; background-color: #ffffee ; width: 40% ; float: right ; clear: right } div.sidebar p.rubric { font-family: sans-serif ; font-size: medium } div.system-messages { margin: 5em } div.system-messages h1 { color: red } div.system-message { border: medium outset ; padding: 1em } div.system-message p.system-message-title { color: red ; font-weight: bold } div.topic { margin: 2em } h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { margin-top: 0.4em } h1.title { text-align: center } h2.subtitle { text-align: center } hr.docutils { width: 75% } img.align-left, .figure.align-left, object.align-left, table.align-left { clear: left ; float: left ; margin-right: 1em } img.align-right, .figure.align-right, object.align-right, table.align-right { clear: right ; float: right ; margin-left: 1em } img.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } table.align-center { margin-left: auto; margin-right: auto; } .align-left { text-align: left } .align-center { clear: both ; text-align: center } .align-right { text-align: right } /* reset inner alignment in figures */ div.align-right { text-align: inherit } /* div.align-center * { */ /* text-align: left } */ .align-top { vertical-align: top } .align-middle { vertical-align: middle } .align-bottom { vertical-align: bottom } ol.simple, ul.simple { margin-bottom: 1em } ol.arabic { list-style: decimal } ol.loweralpha { list-style: lower-alpha } ol.upperalpha { list-style: upper-alpha } ol.lowerroman { list-style: lower-roman } ol.upperroman { list-style: upper-roman } p.attribution { text-align: right ; margin-left: 50% } p.caption { font-style: italic } p.credits { font-style: italic ; font-size: smaller } p.label { white-space: nowrap } p.rubric { font-weight: bold ; font-size: larger ; color: maroon ; text-align: center } p.sidebar-title { font-family: sans-serif ; font-weight: bold ; font-size: larger } p.sidebar-subtitle { font-family: sans-serif ; font-weight: bold } p.topic-title { font-weight: bold } pre.address { margin-bottom: 0 ; margin-top: 0 ; font: inherit } pre.literal-block, pre.doctest-block, pre.math, pre.code { margin-left: 2em ; margin-right: 2em } pre.code .ln { color: grey; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } pre.code .literal.string, code .literal.string { color: #0C5404 } pre.code .name.builtin, code .name.builtin { color: #352B84 } pre.code .deleted, code .deleted { background-color: #DEB0A1} pre.code .inserted, code .inserted { background-color: #A3D289} span.classifier { font-family: sans-serif ; font-style: oblique } span.classifier-delimiter { font-family: sans-serif ; font-weight: bold } span.interpreted { font-family: sans-serif } span.option { white-space: nowrap } span.pre { white-space: pre } span.problematic { color: red } span.section-subtitle { /* font-size relative to parent (h1..h6 element) */ font-size: 80% } table.citation { border-left: solid 1px gray; margin-left: 1px } table.docinfo { margin: 2em 4em } table.docutils { margin-top: 0.5em ; margin-bottom: 0.5em } table.footnote { border-left: solid 1px black; margin-left: 1px } table.docutils td, table.docutils th, table.docinfo td, table.docinfo th { padding-left: 0.5em ; padding-right: 0.5em ; vertical-align: top } table.docutils th.field-name, table.docinfo th.docinfo-name { font-weight: bold ; text-align: left ; white-space: nowrap ; padding-left: 0 } /* "booktabs" style (no vertical lines) */ table.docutils.booktabs { border: 0px; border-top: 2px solid; border-bottom: 2px solid; border-collapse: collapse; } table.docutils.booktabs * { border: 0px; } table.docutils.booktabs th { border-bottom: thin solid; text-align: left; } h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { font-size: 100% } ul.auto-toc { list-style-type: none } </style> </head>

Building

Windows

The Windows build is currently x64-only and follows the same shape as ZoiteChat's Windows GitHub Actions workflow: prepare C:\gtk-build, put the dependency bundles where win32\zoitechat.props expects them, then build win32\zoitechat.sln with MSBuild.

Software

Install:

Source code

Clone the source and enter the checkout:

git clone https://github.com/zoitechat/zoitechat.git
cd zoitechat

Dependencies

Create the dependency root:

mkdir C:\gtk-build

Download the GTK3 x64 bundle and extract it to C:\gtk-build\gtk\x64\release.

Download the remaining Windows dependency artifacts from the ZoiteChat gvsbuild releases and extract them to these paths:

  • gendef: C:\gtk-build\gendef
  • WinSparkle x64 bundle: C:\gtk-build\WinSparkle\x64
  • Perl 5.42 x64 bundle: C:\gtk-build\perl-5.42.0.1\x64

Set up Python where the project file expects it. From PowerShell, adjust the Python path if your install is elsewhere:

mkdir C:\gtk-build\python-3.14
cmd /c mklink /J C:\gtk-build\python-3.14\x64 C:\Python314
C:\gtk-build\python-3.14\x64\python.exe -m pip install --upgrade pip cffi

Windows runtime updates

Both Windows workflows select the latest stable Python 3.14.x using actions/setup-python with check-latest: true. Python 3.15 and prereleases are excluded. The separate Python 3.8.10 build for older Windows is retained.

tools/prepare-windows-runtimes.py selects the highest stable x64 Strawberry Perl version from its official release feed, verifies the portable ZIP against the published SHA-256, and checks the extracted interpreter's version and architecture before building. Development versions (odd Perl minor numbers) are excluded. The generated MSBuild properties select its headers and DLL; the generated Inno include selects the matching MSI, Python installer URL and component descriptions. Build logs record the exact selected versions.

For a manual build, first install the latest Python 3.14 point release (at least 3.14.8), prepare its junction and CFFI as above, then run from the checkout:

C:\gtk-build\python-3.14\x64\python.exe tools\prepare-windows-runtimes.py

The script downloads the complete Strawberry portable distribution under C:\gtk-build. Generated configuration files are ignored by Git. Running it again refreshes that dependency; builds without generated files retain the original manually configured Perl bundle.

Updates happen when a new ZoiteChat build runs. An existing installation keeps using its installed compatible Python or Perl; installing/updating ZoiteChat does not force an upgrade of an already detected system runtime. MSI/MSIX continue to package the scripting plugins; the Inno installer offers runtime downloads when the corresponding runtime DLL is missing.

If you use different locations, set these environment variables before building instead of editing win32\zoitechat.props:

  • ZOITECHAT_DEPS_PATH
  • ZOITECHAT_GENDEF_PATH
  • ZOITECHAT_PERL_PATH
  • ZOITECHAT_PYTHON3_PATH
  • ZOITECHAT_WINSPARKLE_PATH
  • ZOITECHAT_ISCC_PATH

Building

Open Developer Command Prompt for VS 2022 in the source checkout and run:

msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64

To build the installer, open win32\zoitechat.sln in Visual Studio, set release/installer as the startup project, then run Build.

The build output is written to ..\zoitechat-build\x64. The installer build writes a ZoiteChat*.exe installer in that output tree.

Unix

First of all, you have to install the build dependencies. Package names differ across distros, so be creative and check meson's output if you get an error.

Most package-managers can get the dependencies for you:

  • dnf:

    dnf install -y meson gettext-devel gtk3-devel iso-codes-devel libarchive-devel libayatana-appindicator-gtk3-devel libcanberra-devel lua-devel openssl-devel perl-devel perl-ExtUtils-Embed python3-cffi python3-devel
    
  • apt:

    apt-get install -y meson gettext iso-codes libarchive-dev libayatana-appindicator3-dev libcanberra-dev libglib2.0-dev libgtk-3-dev liblua5.4-dev libpci-dev libperl-dev libssl-dev python3-dev python3-cffi desktop-file-utils
    

ZoiteChat has its source code hosted using Git, so you have to install Git as well. When it's ready, you can start the actual compilation, which is basically:

System Message: WARNING/2 (<stdin>, line 131)

Cannot analyze code. Pygments package not found.

.. code-block:: bash

    git clone https://github.com/zoitechat/zoitechat.git
    cd zoitechat
    meson setup build
    ninja -C build
    sudo ninja -C build install

This will compile with defaults. See meson configure build for more info about flags.

</html>