mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 16:00:18 +00:00
Compare commits
53 Commits
theme-feat
...
macosbuild
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a4f744093 | ||
| 0e5d7dfb9f | |||
| ec875e0709 | |||
| a88eae5318 | |||
| 29a35843f1 | |||
| 819535679c | |||
| 1efba4ffdf | |||
| c2d0e7860c | |||
| e45c86249d | |||
| 8a166a9824 | |||
| 7ab4b8d2eb | |||
|
|
29f1ac31ec | ||
|
|
b0c1388d45 | ||
| 676e8c7305 | |||
| 02a0b02f03 | |||
| 5ce88345ee | |||
| 8d51b02ca0 | |||
| 7d49831886 | |||
| d2e6dabdca | |||
| 36c9504a4d | |||
| 98208cbc44 | |||
| c3c5731a58 | |||
| cbc6844987 | |||
| 5f0a8a4c1f | |||
| b3f31004e6 | |||
| c16dc8754d | |||
| 93854e42df | |||
| cf2d5e5778 | |||
| 8a1dcee8e1 | |||
| de9a78b38d | |||
| f6942c7f3c | |||
| ca45939144 | |||
| f558c99c22 | |||
| ff77f32033 | |||
| 858f9daf64 | |||
| d3ae9d9d5d | |||
| a68a49f394 | |||
| fdea5b25cb | |||
| 83143ff89d | |||
| e9869db82b | |||
| f1fe8f924e | |||
| 3d9833ce4f | |||
| 2c4da1ff5e | |||
| bf24249001 | |||
| 505449f165 | |||
| 125c69c1b0 | |||
| 55d2dab620 | |||
| 590b44946b | |||
| 857c8918d8 | |||
| 04b8f1d5fa | |||
| 1ab7e14422 | |||
| 815df2aeb0 | |||
| 668c391a8a |
87
.github/workflows/appimage-build.yml
vendored
87
.github/workflows/appimage-build.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
|
||||
jobs:
|
||||
appimage_build:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -29,13 +29,12 @@ jobs:
|
||||
build-essential pkg-config meson ninja-build cmake \
|
||||
gettext \
|
||||
libcanberra-dev libdbus-glib-1-dev libglib2.0-dev \
|
||||
libarchive-dev \
|
||||
libgtk-3-dev \
|
||||
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
|
||||
libxkbcommon0 \
|
||||
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
|
||||
libluajit-5.1-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
|
||||
perl python3 python3-minimal python3-dev python3-cffi mono-devel desktop-file-utils \
|
||||
python3-dev python3-cffi mono-devel desktop-file-utils \
|
||||
patchelf file curl
|
||||
|
||||
- name: Configure
|
||||
@@ -44,11 +43,11 @@ jobs:
|
||||
rm -rf build
|
||||
meson setup build \
|
||||
--prefix=/usr \
|
||||
-Dgtk3=true \
|
||||
-Dtext-frontend=true \
|
||||
-Dwith-perl=perl \
|
||||
-Dwith-python=python3 \
|
||||
-Dauto_features=enabled \
|
||||
-Dappindicator=enabled
|
||||
-Dauto_features=enabled
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
@@ -61,60 +60,6 @@ jobs:
|
||||
rm -rf AppDir
|
||||
DESTDIR="${PWD}/AppDir" ninja -C build install
|
||||
|
||||
- name: Bundle scripting runtimes in AppDir
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
python3_version="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
|
||||
|
||||
install -Dm755 "$(command -v python3)" "AppDir/usr/bin/python3"
|
||||
if [ -x "/usr/bin/perl" ]; then
|
||||
install -Dm755 /usr/bin/perl AppDir/usr/bin/perl
|
||||
fi
|
||||
|
||||
install -d AppDir/usr/lib
|
||||
cp -a "/usr/lib/python${python3_version}" "AppDir/usr/lib/"
|
||||
|
||||
if [ -d "/usr/lib/python3/dist-packages" ]; then
|
||||
install -d AppDir/usr/lib/python3
|
||||
cp -a /usr/lib/python3/dist-packages AppDir/usr/lib/python3/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/python3/dist-packages" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu/python3
|
||||
cp -a /usr/lib/x86_64-linux-gnu/python3/dist-packages AppDir/usr/lib/x86_64-linux-gnu/python3/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/perl" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/perl AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/share/perl" ]; then
|
||||
install -d AppDir/usr/share
|
||||
cp -a /usr/share/perl AppDir/usr/share/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/share/perl5" ]; then
|
||||
install -d AppDir/usr/share
|
||||
cp -a /usr/share/perl5 AppDir/usr/share/
|
||||
fi
|
||||
if compgen -G '/usr/lib/x86_64-linux-gnu/libpython3*.so*' > /dev/null; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/libpython3*.so* AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
- name: Verify bundled plugins
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
# Include every built-in plugin except the Windows-only update plugin.
|
||||
find AppDir/usr/lib -maxdepth 4 -type f -name '*.so' -path '*/zoitechat/plugins/*' -print | sort
|
||||
|
||||
for plugin in checksum fishlim lua perl python sysinfo; do
|
||||
find "AppDir/usr/lib" -maxdepth 4 -type f -name "${plugin}.so" -path '*/zoitechat/plugins/*' -print -quit | grep -q .
|
||||
done
|
||||
|
||||
- name: Build AppImage
|
||||
env:
|
||||
APPIMAGE_EXTRACT_AND_RUN: 1
|
||||
@@ -141,16 +86,10 @@ jobs:
|
||||
|
||||
APPDIR="${APPDIR:-$(dirname "$(readlink -f "$0")")}"
|
||||
|
||||
export PATH="${PATH:-/usr/bin:/bin}:$APPDIR/usr/bin"
|
||||
export PATH="$APPDIR/usr/bin:${PATH:-/usr/bin:/bin}"
|
||||
export LD_LIBRARY_PATH="$APPDIR/usr/lib:$APPDIR/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}"
|
||||
export XDG_DATA_DIRS="$APPDIR/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
||||
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins" ]; then
|
||||
export ZOITECHAT_LIBDIR="$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins"
|
||||
elif [ -d "$APPDIR/usr/lib/zoitechat/plugins" ]; then
|
||||
export ZOITECHAT_LIBDIR="$APPDIR/usr/lib/zoitechat/plugins"
|
||||
fi
|
||||
|
||||
if [ -d "$APPDIR/usr/share/glib-2.0/schemas" ]; then
|
||||
export GSETTINGS_SCHEMA_DIR="$APPDIR/usr/share/glib-2.0/schemas${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
|
||||
fi
|
||||
@@ -161,22 +100,6 @@ jobs:
|
||||
export GIO_EXTRA_MODULES="$APPDIR/usr/lib/gio/modules${GIO_EXTRA_MODULES:+:$GIO_EXTRA_MODULES}"
|
||||
fi
|
||||
|
||||
export PYTHONHOME="$APPDIR/usr"
|
||||
python_stdlib_dir="$(find "$APPDIR/usr/lib" -maxdepth 1 -type d -name 'python3.*' | head -n 1 || true)"
|
||||
pythonpath_entries=""
|
||||
if [ -n "$python_stdlib_dir" ] && [ -d "$python_stdlib_dir/dist-packages" ]; then
|
||||
pythonpath_entries="$python_stdlib_dir/dist-packages"
|
||||
fi
|
||||
if [ -d "$APPDIR/usr/lib/python3/dist-packages" ]; then
|
||||
pythonpath_entries="${pythonpath_entries:+$pythonpath_entries:}$APPDIR/usr/lib/python3/dist-packages"
|
||||
fi
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/python3/dist-packages" ]; then
|
||||
pythonpath_entries="${pythonpath_entries:+$pythonpath_entries:}$APPDIR/usr/lib/x86_64-linux-gnu/python3/dist-packages"
|
||||
fi
|
||||
if [ -n "$pythonpath_entries" ]; then
|
||||
export PYTHONPATH="$pythonpath_entries${PYTHONPATH:+:$PYTHONPATH}"
|
||||
fi
|
||||
|
||||
# OpenSSL trust store override
|
||||
export SSL_CERT_FILE="${SSL_CERT_FILE:-$APPDIR/etc/ssl/certs/ca-certificates.crt}"
|
||||
export SSL_CERT_DIR="${SSL_CERT_DIR:-$APPDIR/etc/ssl/certs}"
|
||||
|
||||
48
.github/workflows/debian-build.yml
vendored
Normal file
48
.github/workflows/debian-build.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
name: Debian Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
debian_build:
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: debian:bookworm
|
||||
|
||||
steps:
|
||||
- name: Install packaging tooling and build dependencies
|
||||
run: |
|
||||
set -eux
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update
|
||||
apt-get install -y --no-install-recommends \
|
||||
git ca-certificates \
|
||||
build-essential dpkg-dev debhelper fakeroot \
|
||||
pkg-config meson ninja-build \
|
||||
gettext iso-codes \
|
||||
libcanberra-dev libdbus-glib-1-dev libglib2.0-dev libgtk-3-dev libayatana-appindicator3-dev \
|
||||
liblua5.3-dev libpci-dev libperl-dev libssl-dev \
|
||||
python3-dev python3-cffi desktop-file-utils
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Build Debian packages
|
||||
run: |
|
||||
set -eux
|
||||
dpkg-buildpackage -us -uc -b
|
||||
|
||||
- name: Collect Debian artifacts
|
||||
run: |
|
||||
set -eux
|
||||
mkdir -p artifacts
|
||||
cp -v ../*.deb ../*.changes ../*.buildinfo artifacts/
|
||||
|
||||
- name: Upload Debian artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-debian-packages
|
||||
path: artifacts/*
|
||||
3
.github/workflows/flatpak-build.yml
vendored
3
.github/workflows/flatpak-build.yml
vendored
@@ -31,8 +31,7 @@ jobs:
|
||||
with:
|
||||
bundle: zoitechat.flatpak
|
||||
manifest-path: flatpak/net.zoite.Zoitechat.json
|
||||
cache: false
|
||||
restore-cache: false
|
||||
cache-key: flatpak-builder-${{ github.sha }}
|
||||
|
||||
- name: Upload Flatpak Bundle
|
||||
id: upload_flatpak
|
||||
|
||||
359
.github/workflows/macos-build.yml
vendored
Normal file
359
.github/workflows/macos-build.yml
vendored
Normal file
@@ -0,0 +1,359 @@
|
||||
name: macOS Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
macos_build_arm64:
|
||||
runs-on: macos-15-arm64
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
set -eux
|
||||
brew update
|
||||
brew install \
|
||||
meson ninja pkg-config gettext perl \
|
||||
gtk+3 gdk-pixbuf pango adwaita-icon-theme \
|
||||
hicolor-icon-theme glib dbus \
|
||||
enchant gtk-mac-integration
|
||||
|
||||
if ! command -v gtk-mac-bundler >/dev/null 2>&1 && ! python3 -c 'import gtk_mac_bundler' >/dev/null 2>&1; then
|
||||
curl -fsSL https://codeload.github.com/jralls/gtk-mac-bundler/tar.gz/refs/heads/master -o /tmp/gtk-mac-bundler.tar.gz
|
||||
rm -rf /tmp/gtk-mac-bundler
|
||||
mkdir -p /tmp/gtk-mac-bundler
|
||||
tar -xzf /tmp/gtk-mac-bundler.tar.gz -C /tmp/gtk-mac-bundler --strip-components=1
|
||||
(cd /tmp/gtk-mac-bundler && make install)
|
||||
fi
|
||||
|
||||
- name: Configure and build (arm64)
|
||||
run: |
|
||||
set -eux
|
||||
rm -rf build-macos-arm64 stage/arm64
|
||||
|
||||
CFLAGS="-arch arm64" LDFLAGS="-arch arm64" meson setup build-macos-arm64 \
|
||||
--prefix="$PWD/stage/arm64" \
|
||||
-Dgtk3=true \
|
||||
-Dtext-frontend=true \
|
||||
-Dlibcanberra=disabled \
|
||||
-Dwith-perl=perl \
|
||||
-Dwith-python=python3 \
|
||||
-Dauto_features=enabled
|
||||
|
||||
CFLAGS="-arch arm64" LDFLAGS="-arch arm64" meson compile -C build-macos-arm64
|
||||
meson install -C build-macos-arm64
|
||||
|
||||
- name: Stage runtime dependencies for bundling (arm64)
|
||||
run: |
|
||||
set -eux
|
||||
STAGE_PREFIX="$PWD/stage/arm64"
|
||||
BREW_PREFIX="$(brew --prefix)"
|
||||
ENCHANT_PREFIX="$(brew --prefix enchant)"
|
||||
|
||||
mkdir -p "$STAGE_PREFIX/lib" "$STAGE_PREFIX/share"
|
||||
rsync -a "$BREW_PREFIX/lib/gtk-3.0" "$STAGE_PREFIX/lib/"
|
||||
rsync -a "$BREW_PREFIX/lib/gdk-pixbuf-2.0" "$STAGE_PREFIX/lib/"
|
||||
rsync -a "$BREW_PREFIX/share/locale/" "$STAGE_PREFIX/share/locale/"
|
||||
|
||||
mkdir -p "$STAGE_PREFIX/opt"
|
||||
rm -rf "$STAGE_PREFIX/opt/enchant"
|
||||
rsync -aL "$ENCHANT_PREFIX/" "$STAGE_PREFIX/opt/enchant/"
|
||||
|
||||
- name: Package unsigned .app (arm64)
|
||||
run: |
|
||||
set -eux
|
||||
VERSION="$(git describe --tags --always)"
|
||||
export VERSION
|
||||
|
||||
(
|
||||
cd osx
|
||||
BUNDLE_PREFIX="$PWD/../stage/arm64/" \
|
||||
ENCHANT_PREFIX="$PWD/../stage/arm64/opt/enchant" \
|
||||
TARGET_ARCHES="arm64" \
|
||||
./makebundle.sh
|
||||
)
|
||||
|
||||
mv osx/ZoiteChat-*.app.zip ./ZoiteChat-arm64.app.zip
|
||||
|
||||
- name: Upload arm64 macOS app artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-arm64
|
||||
path: ZoiteChat-arm64.app.zip
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
macos_build_x86_64:
|
||||
runs-on: macos-15-intel
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
set -eux
|
||||
brew update
|
||||
brew install \
|
||||
meson ninja pkg-config gettext perl \
|
||||
gtk+3 gdk-pixbuf pango adwaita-icon-theme \
|
||||
hicolor-icon-theme glib dbus \
|
||||
enchant gtk-mac-integration
|
||||
|
||||
if ! command -v gtk-mac-bundler >/dev/null 2>&1 && ! python3 -c 'import gtk_mac_bundler' >/dev/null 2>&1; then
|
||||
curl -fsSL https://codeload.github.com/jralls/gtk-mac-bundler/tar.gz/refs/heads/master -o /tmp/gtk-mac-bundler.tar.gz
|
||||
rm -rf /tmp/gtk-mac-bundler
|
||||
mkdir -p /tmp/gtk-mac-bundler
|
||||
tar -xzf /tmp/gtk-mac-bundler.tar.gz -C /tmp/gtk-mac-bundler --strip-components=1
|
||||
(cd /tmp/gtk-mac-bundler && make install)
|
||||
fi
|
||||
|
||||
- name: Configure and build (x86_64)
|
||||
run: |
|
||||
set -eux
|
||||
rm -rf build-macos-x86_64 stage/x86_64
|
||||
|
||||
CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" meson setup build-macos-x86_64 \
|
||||
--prefix="$PWD/stage/x86_64" \
|
||||
-Dgtk3=true \
|
||||
-Dtext-frontend=true \
|
||||
-Dlibcanberra=disabled \
|
||||
-Ddarwin-arch-sanity-check=true \
|
||||
-Dwith-perl=perl \
|
||||
-Dwith-python=python3 \
|
||||
-Dauto_features=enabled
|
||||
|
||||
CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" meson compile -C build-macos-x86_64
|
||||
meson install -C build-macos-x86_64
|
||||
|
||||
|
||||
- name: Stage runtime dependencies for bundling (x86_64)
|
||||
run: |
|
||||
set -eux
|
||||
STAGE_PREFIX="$PWD/stage/x86_64"
|
||||
BREW_PREFIX="$(brew --prefix)"
|
||||
ENCHANT_PREFIX="$(brew --prefix enchant)"
|
||||
|
||||
mkdir -p "$STAGE_PREFIX/lib" "$STAGE_PREFIX/share"
|
||||
rsync -a "$BREW_PREFIX/lib/gtk-3.0" "$STAGE_PREFIX/lib/"
|
||||
rsync -a "$BREW_PREFIX/lib/gdk-pixbuf-2.0" "$STAGE_PREFIX/lib/"
|
||||
rsync -a "$BREW_PREFIX/share/locale/" "$STAGE_PREFIX/share/locale/"
|
||||
|
||||
mkdir -p "$STAGE_PREFIX/opt"
|
||||
rm -rf "$STAGE_PREFIX/opt/enchant"
|
||||
rsync -aL "$ENCHANT_PREFIX/" "$STAGE_PREFIX/opt/enchant/"
|
||||
|
||||
- name: Package unsigned .app (x86_64)
|
||||
run: |
|
||||
set -eux
|
||||
VERSION="$(git describe --tags --always)"
|
||||
export VERSION
|
||||
|
||||
(
|
||||
cd osx
|
||||
BUNDLE_PREFIX="$PWD/../stage/x86_64/" \
|
||||
ENCHANT_PREFIX="$PWD/../stage/x86_64/opt/enchant" \
|
||||
TARGET_ARCHES="x86_64" \
|
||||
./makebundle.sh
|
||||
)
|
||||
|
||||
mv osx/ZoiteChat-*.app.zip ./ZoiteChat-x86_64.app.zip
|
||||
|
||||
- name: Upload x86_64 macOS app artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-x86_64
|
||||
path: ZoiteChat-x86_64.app.zip
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
macos_assemble_universal_unsigned:
|
||||
needs:
|
||||
- macos_build_arm64
|
||||
- macos_build_x86_64
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- name: Download arm64 app artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-arm64
|
||||
path: dist/arm64
|
||||
|
||||
- name: Download x86_64 app artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-x86_64
|
||||
path: dist/x86_64
|
||||
|
||||
- name: Merge app bundles into universal
|
||||
run: |
|
||||
set -eux
|
||||
unzip -q dist/arm64/ZoiteChat-arm64.app.zip -d dist/arm64
|
||||
unzip -q dist/x86_64/ZoiteChat-x86_64.app.zip -d dist/x86_64
|
||||
|
||||
ARM_APP="$(find dist/arm64 -maxdepth 2 -name 'ZoiteChat.app' -type d | head -n 1)"
|
||||
X86_APP="$(find dist/x86_64 -maxdepth 2 -name 'ZoiteChat.app' -type d | head -n 1)"
|
||||
UNIVERSAL_APP="dist/universal/ZoiteChat.app"
|
||||
|
||||
rm -rf "$UNIVERSAL_APP"
|
||||
mkdir -p dist/universal
|
||||
cp -a "$ARM_APP" "$UNIVERSAL_APP"
|
||||
|
||||
while IFS= read -r relpath; do
|
||||
arm_file="$ARM_APP/$relpath"
|
||||
x86_file="$X86_APP/$relpath"
|
||||
out_file="$UNIVERSAL_APP/$relpath"
|
||||
|
||||
if [ -f "$x86_file" ] && file -b "$arm_file" | grep -q 'Mach-O'; then
|
||||
mkdir -p "$(dirname "$out_file")"
|
||||
lipo -create "$arm_file" "$x86_file" -output "$out_file"
|
||||
fi
|
||||
done < <(cd "$ARM_APP" && find . -type f | sed 's|^./||')
|
||||
|
||||
while IFS= read -r macho_path; do
|
||||
archs="$(lipo -archs "$macho_path")"
|
||||
echo "$macho_path -> $archs"
|
||||
echo " $archs " | grep -q ' arm64 '
|
||||
echo " $archs " | grep -q ' x86_64 '
|
||||
done < <(find "$UNIVERSAL_APP" -type f -exec sh -c 'file -b "$1" | grep -q "Mach-O" && printf "%s\n" "$1"' _ {} \;)
|
||||
|
||||
VERSION="$(git -C "$GITHUB_WORKSPACE" describe --tags --always)"
|
||||
ditto -c -k --sequesterRsrc --keepParent "$UNIVERSAL_APP" "dist/ZoiteChat-$VERSION.app.zip"
|
||||
- name: Upload unsigned macOS app artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-unsigned
|
||||
|
||||
path: dist/ZoiteChat-*.app.zip
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
macos_release_signed:
|
||||
needs: macos_assemble_universal_unsigned
|
||||
runs-on: macos-latest
|
||||
if: >-
|
||||
github.event_name == 'push' &&
|
||||
github.ref == 'refs/heads/master'
|
||||
|
||||
steps:
|
||||
- name: Check signing secrets availability
|
||||
id: signing_secrets
|
||||
env:
|
||||
APPLE_DEVELOPER_ID_APPLICATION: ${{ secrets.APPLE_DEVELOPER_ID_APPLICATION }}
|
||||
APPLE_DEVELOPER_ID_CERT_P12: ${{ secrets.APPLE_DEVELOPER_ID_CERT_P12 }}
|
||||
APPLE_DEVELOPER_ID_CERT_P12_PASSWORD: ${{ secrets.APPLE_DEVELOPER_ID_CERT_P12_PASSWORD }}
|
||||
APPLE_NOTARY_API_KEY: ${{ secrets.APPLE_NOTARY_API_KEY }}
|
||||
APPLE_NOTARY_API_KEY_ID: ${{ secrets.APPLE_NOTARY_API_KEY_ID }}
|
||||
APPLE_NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
|
||||
run: |
|
||||
set -eu
|
||||
required_secrets=(
|
||||
APPLE_DEVELOPER_ID_APPLICATION
|
||||
APPLE_DEVELOPER_ID_CERT_P12
|
||||
APPLE_DEVELOPER_ID_CERT_P12_PASSWORD
|
||||
APPLE_NOTARY_API_KEY
|
||||
APPLE_NOTARY_API_KEY_ID
|
||||
APPLE_NOTARY_ISSUER_ID
|
||||
)
|
||||
|
||||
missing=0
|
||||
for key in "${required_secrets[@]}"; do
|
||||
if [ -z "${!key:-}" ]; then
|
||||
echo "Missing secret: $key"
|
||||
missing=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$missing" -eq 1 ]; then
|
||||
echo "ready=false" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "ready=true" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Skip signing because required secrets are missing
|
||||
if: steps.signing_secrets.outputs.ready != 'true'
|
||||
run: echo "Signing and notarization skipped due to missing required secrets."
|
||||
|
||||
- name: Download unsigned app artifact
|
||||
if: steps.signing_secrets.outputs.ready == 'true'
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-unsigned
|
||||
path: dist
|
||||
|
||||
- name: Import Developer ID certificate
|
||||
if: steps.signing_secrets.outputs.ready == 'true'
|
||||
env:
|
||||
CERT_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_ID_CERT_P12 }}
|
||||
CERT_PASSWORD: ${{ secrets.APPLE_DEVELOPER_ID_CERT_P12_PASSWORD }}
|
||||
run: |
|
||||
set -eux
|
||||
echo "$CERT_P12_BASE64" | base64 --decode > certificate.p12
|
||||
|
||||
security create-keychain -p "" build.keychain
|
||||
security set-keychain-settings -lut 21600 build.keychain
|
||||
security unlock-keychain -p "" build.keychain
|
||||
security import certificate.p12 -k build.keychain -P "$CERT_PASSWORD" -A -T /usr/bin/codesign
|
||||
security list-keychains -d user -s build.keychain $(security list-keychains -d user | tr -d '"')
|
||||
security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain
|
||||
|
||||
- name: Codesign app bundle
|
||||
if: steps.signing_secrets.outputs.ready == 'true'
|
||||
env:
|
||||
CODESIGN_IDENTITY: ${{ secrets.APPLE_DEVELOPER_ID_APPLICATION }}
|
||||
run: |
|
||||
set -eux
|
||||
unzip -q dist/ZoiteChat-*.app.zip -d dist
|
||||
APP_PATH="$(find dist -maxdepth 1 -name 'ZoiteChat.app' -type d | head -n 1)"
|
||||
|
||||
codesign --force --deep --options runtime --timestamp \
|
||||
--sign "$CODESIGN_IDENTITY" "$APP_PATH"
|
||||
|
||||
codesign --verify --deep --strict --verbose=2 "$APP_PATH"
|
||||
spctl --assess --type execute --verbose "$APP_PATH"
|
||||
|
||||
- name: Notarize and staple
|
||||
if: steps.signing_secrets.outputs.ready == 'true'
|
||||
env:
|
||||
NOTARY_API_KEY_BASE64: ${{ secrets.APPLE_NOTARY_API_KEY }}
|
||||
NOTARY_KEY_ID: ${{ secrets.APPLE_NOTARY_API_KEY_ID }}
|
||||
NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
|
||||
run: |
|
||||
set -eux
|
||||
APP_PATH="$(find dist -maxdepth 1 -name 'ZoiteChat.app' -type d | head -n 1)"
|
||||
NOTARY_ZIP="dist/ZoiteChat-notarize.zip"
|
||||
SIGNED_ZIP="dist/ZoiteChat-signed.app.zip"
|
||||
|
||||
echo "$NOTARY_API_KEY_BASE64" | base64 --decode > AuthKey_${NOTARY_KEY_ID}.p8
|
||||
ditto -c -k --keepParent "$APP_PATH" "$NOTARY_ZIP"
|
||||
|
||||
xcrun notarytool submit "$NOTARY_ZIP" \
|
||||
--key "AuthKey_${NOTARY_KEY_ID}.p8" \
|
||||
--key-id "$NOTARY_KEY_ID" \
|
||||
--issuer "$NOTARY_ISSUER_ID" \
|
||||
--wait
|
||||
|
||||
xcrun stapler staple "$APP_PATH"
|
||||
xcrun stapler validate "$APP_PATH"
|
||||
|
||||
ditto -c -k --sequesterRsrc --keepParent "$APP_PATH" "$SIGNED_ZIP"
|
||||
|
||||
- name: Upload signed macOS app artifact
|
||||
if: steps.signing_secrets.outputs.ready == 'true'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-macos-signed
|
||||
path: dist/ZoiteChat-signed.app.zip
|
||||
if-no-files-found: error
|
||||
retention-days: 30
|
||||
81
.github/workflows/manjaro-package-build.yml
vendored
81
.github/workflows/manjaro-package-build.yml
vendored
@@ -1,81 +0,0 @@
|
||||
name: Manjaro Package Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, main]
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
manjaro-package:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: manjarolinux/base:latest
|
||||
|
||||
steps:
|
||||
- name: Install packaging toolchain
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
pacman -Syu --noconfirm
|
||||
pacman -S --noconfirm --needed \
|
||||
base-devel \
|
||||
git \
|
||||
namcap \
|
||||
meson \
|
||||
ninja \
|
||||
pkgconf \
|
||||
glib2 \
|
||||
glib2-devel \
|
||||
gtk3 \
|
||||
openssl \
|
||||
dbus-glib \
|
||||
libcanberra \
|
||||
libayatana-appindicator \
|
||||
luajit \
|
||||
iso-codes \
|
||||
lua \
|
||||
perl \
|
||||
python \
|
||||
python-cffi \
|
||||
pciutils
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
|
||||
- name: Build package and generate .SRCINFO (non-root)
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
id -u builder >/dev/null 2>&1 || useradd -m builder
|
||||
chown -R builder:builder "$GITHUB_WORKSPACE"
|
||||
su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --noconfirm --syncdeps --cleanbuild"
|
||||
su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --printsrcinfo > .SRCINFO"
|
||||
|
||||
- name: Lint PKGBUILD and package with namcap
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
cd "$GITHUB_WORKSPACE/packaging/manjaro"
|
||||
namcap PKGBUILD
|
||||
pkg_file="$(find . -maxdepth 1 -type f -name '*.pkg.tar.*' | head -n1)"
|
||||
namcap "$pkg_file"
|
||||
|
||||
- name: Collect artifacts
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
mkdir -p artifacts
|
||||
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/*.pkg.tar.* artifacts/
|
||||
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/PKGBUILD artifacts/
|
||||
cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/.SRCINFO artifacts/
|
||||
|
||||
- name: Upload package artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zoitechat-manjaro-package
|
||||
path: artifacts/*
|
||||
if-no-files-found: error
|
||||
72
.github/workflows/solus-eopkg-build.yml
vendored
Normal file
72
.github/workflows/solus-eopkg-build.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
name: Solus eopkg build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
package_yml:
|
||||
description: "Path to Solus package.yml for ypkg build"
|
||||
required: false
|
||||
default: "packaging/solus/package.yml"
|
||||
solus_image:
|
||||
description: "Solus container image"
|
||||
required: false
|
||||
default: "ghcr.io/getsolus/solus:latest"
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: read
|
||||
|
||||
jobs:
|
||||
build-eopkg:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SOLUS_IMAGE: ${{ inputs.solus_image || 'ghcr.io/getsolus/solus:latest' }}
|
||||
PACKAGE_YML: ${{ inputs.package_yml || 'packaging/solus/package.yml' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Log in to GHCR (for ghcr.io images)
|
||||
if: startsWith(env.SOLUS_IMAGE, 'ghcr.io/')
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build eopkg package in Solus container
|
||||
run: |
|
||||
if [ ! -f "$PACKAGE_YML" ]; then
|
||||
echo "Expected Solus packaging file at $PACKAGE_YML" >&2
|
||||
echo "Available package.yml files:" >&2
|
||||
find . -name "package.yml" -print >&2 || true
|
||||
echo "Add a package.yml (ypkg) file or update the workflow input PACKAGE_YML." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker pull "$SOLUS_IMAGE"
|
||||
|
||||
docker run --rm \
|
||||
-v "$PWD":/workspace \
|
||||
-w /workspace \
|
||||
-e PACKAGE_YML="$PACKAGE_YML" \
|
||||
"$SOLUS_IMAGE" \
|
||||
sh -lc '
|
||||
set -euo pipefail
|
||||
eopkg update-repo -y
|
||||
eopkg install -y ypkg git
|
||||
ypkg build "$PACKAGE_YML"
|
||||
mkdir -p /workspace/artifacts
|
||||
find . -maxdepth 3 -name "*.eopkg" -type f -exec cp -v {} /workspace/artifacts/ \;
|
||||
'
|
||||
|
||||
- name: Upload eopkg artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: solus-eopkg
|
||||
path: artifacts/*.eopkg
|
||||
if-no-files-found: error
|
||||
71
.github/workflows/windows-build.yml
vendored
71
.github/workflows/windows-build.yml
vendored
@@ -36,79 +36,29 @@ jobs:
|
||||
run: |
|
||||
New-Item -Name "deps" -ItemType "Directory" -Force | Out-Null
|
||||
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
python -m pip install zstandard
|
||||
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
function Download-WithRetry {
|
||||
param(
|
||||
[string]$Url,
|
||||
[string]$OutFile,
|
||||
[int]$MaxAttempts = 5,
|
||||
[int]$InitialDelaySeconds = 2
|
||||
)
|
||||
for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) {
|
||||
try {
|
||||
Invoke-WebRequest -Uri $Url -OutFile $OutFile -ErrorAction Stop
|
||||
return
|
||||
}
|
||||
catch {
|
||||
if ($attempt -eq $MaxAttempts) {
|
||||
throw
|
||||
}
|
||||
Start-Sleep -Seconds ($InitialDelaySeconds * [math]::Pow(2, $attempt - 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://files.jrsoftware.org/is/6/innosetup-6.7.0.exe -OutFile deps\innosetup-unicode.exe
|
||||
Invoke-WebRequest https://files.jrsoftware.org/is/6/innosetup-6.7.0.exe -OutFile deps\innosetup-unicode.exe
|
||||
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
|
||||
|
||||
Download-WithRetry -Url https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe
|
||||
& deps\idpsetup.exe /VERYSILENT
|
||||
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre1/GTK3_Gvsbuild_zoitechat-2.18.0-pre1_${{ matrix.platform }}.7z -OutFile deps\gtk-${{ matrix.arch }}.7z
|
||||
Invoke-WebRequest https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre1/GTK3_Gvsbuild_zoitechat-2.18.0-pre1_${{ matrix.platform }}.7z -OutFile deps\gtk-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\gtk-${{ matrix.arch }}.7z -oC:\gtk-build\gtk\x64\release
|
||||
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
|
||||
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-libarchive-3.8.1-1-any.pkg.tar.zst -OutFile deps\libarchive.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\libarchive.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith(('mingw64/include/archive','mingw64/lib/libarchive','mingw64/bin/libarchive'))];tf.close();reader.close();f.close()"
|
||||
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\share\icons -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor -Destination C:\gtk-build\gtk\x64\release\share\icons\hicolor -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\include) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\include -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\include\archive* -Destination C:\gtk-build\gtk\x64\release\include -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\lib) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\lib -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\lib\libarchive* -Destination C:\gtk-build\gtk\x64\release\lib -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\bin) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\bin -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\bin\libarchive*.dll -Destination C:\gtk-build\gtk\x64\release\bin -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64) {
|
||||
Remove-Item -Path C:\gtk-build\gtk\x64\release\mingw64 -Recurse -Force
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/gendef-20111031.7z -OutFile deps\gendef.7z
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/gendef-20111031.7z -OutFile deps\gendef.7z
|
||||
& 7z.exe x deps\gendef.7z -oC:\gtk-build
|
||||
|
||||
Download-WithRetry -Url https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z
|
||||
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
|
||||
|
||||
Download-WithRetry -Url https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }}
|
||||
|
||||
# Resolve python root from setup-python
|
||||
$pyRoot = $env:pythonLocation
|
||||
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
||||
|
||||
# Create BOTH paths because the .vcxproj hard-codes python-3.14\...
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.14.2", "C:\gtk-build\python-3.14")) {
|
||||
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
||||
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
||||
@@ -116,6 +66,9 @@ jobs:
|
||||
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
||||
}
|
||||
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
@@ -130,8 +83,6 @@ jobs:
|
||||
set "LIB=%PYTHON_DIR%\libs;%LIB%"
|
||||
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
|
||||
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "$archiveLib='C:\gtk-build\gtk\x64\release\lib\libarchive.lib'; if (-not (Test-Path $archiveLib)) { $archiveDll = Get-ChildItem 'C:\gtk-build\gtk\x64\release\bin\libarchive*.dll' | Select-Object -First 1; if ($archiveDll) { Push-Location 'C:\gtk-build\gtk\x64\release\lib'; & 'C:\gtk-build\gendef\gendef.exe' $archiveDll.FullName | Out-Null; $archiveDef = Get-ChildItem 'libarchive*.def' | Select-Object -First 1; if ($archiveDef) { & lib /def:$archiveDef.Name /machine:${{ matrix.platform }} /out:libarchive.lib | Out-Null }; Pop-Location } }"
|
||||
|
||||
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
|
||||
shell: cmd
|
||||
|
||||
|
||||
1
Makefile
1
Makefile
@@ -14,6 +14,7 @@ CONFIG_STAMP := $(BUILD_DIR)/build.ninja
|
||||
|
||||
all: build
|
||||
|
||||
# Only run initial meson setup if we don't have a configured build dir yet.
|
||||
$(CONFIG_STAMP):
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@env NINJA=$(NINJA) $(MESON) setup $(BUILD_DIR) --prefix=$(PREFIX) $(MESON_SETUP_ARGS)
|
||||
|
||||
@@ -1,16 +1,6 @@
|
||||
ZoiteChat ChangeLog
|
||||
=================
|
||||
|
||||
2.18.0~pre2 (2026-02-25)
|
||||
------------------------
|
||||
|
||||
- Added HexChat plugin compatibility improvements.
|
||||
- Fixed the user info right-click menu so it updates properly.
|
||||
- Added support for emoji characters in alert highlights.
|
||||
- clicking links in chat window with appimage build now works.
|
||||
- Removed remaining unused GTK2 code paths.
|
||||
- Continued GTK3 cleanup and packaging alignment work.
|
||||
|
||||
2.18.0-pre1 (2026-02-16)
|
||||
------------------------
|
||||
|
||||
|
||||
@@ -43,6 +43,10 @@ if get_option('gtk-frontend')
|
||||
install_dir: appdir
|
||||
)
|
||||
|
||||
install_data('net.zoite.Zoitechat.mime.xml',
|
||||
install_dir: mimedir
|
||||
)
|
||||
|
||||
if desktop_utils.found()
|
||||
test('Validate net.zoite.Zoitechat.desktop', desktop_utils,
|
||||
args: [zoitechat_desktop]
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
<url type="homepage">https://zoitechat.zoite.net/</url>
|
||||
<project_license>@LICENSE@</project_license>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<update_contact>deepend_AT_zoite.net</update_contact>
|
||||
</component>
|
||||
<update_contact>tingping_AT_fedoraproject.org</update_contact>
|
||||
</component>
|
||||
@@ -3,11 +3,7 @@
|
||||
<id>net.zoite.Zoitechat</id>
|
||||
<name>ZoiteChat</name>
|
||||
<launchable type="desktop-id">net.zoite.Zoitechat.desktop</launchable>
|
||||
|
||||
<developer id="net.zoite">
|
||||
<name translate="no">ZoiteChat</name>
|
||||
</developer>
|
||||
|
||||
<developer_name>ZoiteChat</developer_name>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<translation type="gettext">zoitechat</translation>
|
||||
@@ -16,9 +12,9 @@
|
||||
<p>ZoiteChat is an easy to use yet extensible IRC Client based on Hexchat. It allows you to securely join multiple networks and talk to users privately or in channels using a customizable interface. You can even transfer files.</p>
|
||||
<p>ZoiteChat supports features such as: DCC, SASL, proxies, spellcheck, alerts, logging, custom themes, and Python/Perl scripts.</p>
|
||||
</description>
|
||||
<url type="homepage">https://zoitechat.zoite.net</url>
|
||||
<url type="homepage">http://zoitechat.zoite.net</url>
|
||||
<url type="bugtracker">https://github.com/zoitechat/zoitechat</url>
|
||||
<url type="help">https://docs.zoitechat.zoite.net/en/latest/</url>
|
||||
<url type="help">https://zoitechat.zoite.net/docs</url>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://zoitechat.zoite.net/assets/ZoiteChat.png</image>
|
||||
@@ -29,18 +25,7 @@
|
||||
<id>zoitechat.desktop</id>
|
||||
</provides>
|
||||
<releases>
|
||||
<release date="2026-02-25" version="2.18.0~pre2">
|
||||
<description>
|
||||
<p>Compatibility and UI improvements:</p>
|
||||
<ul>
|
||||
<li>Added HexChat plugin compatibility improvements.</li>
|
||||
<li>Fixed the user info right-click menu so it updates properly.</li>
|
||||
<li>Added support for emoji characters in alert highlights.</li>
|
||||
<li>Removed remaining unused GTK2 code paths.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-02-16" version="2.18.0~pre1">
|
||||
<release date="2026-02-16" version="2.18.0-pre1">
|
||||
<description>
|
||||
<p>Packaging and GTK3 improvements:</p>
|
||||
<ul>
|
||||
@@ -238,5 +223,5 @@
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
</content_rating>
|
||||
<update_contact>deepend_at_zoite.net</update_contact>
|
||||
<update_contact>tingping_at_fedoraproject.org</update_contact>
|
||||
</component>
|
||||
|
||||
@@ -11,7 +11,7 @@ Categories=GTK;Network;IRCClient;
|
||||
StartupNotify=true
|
||||
StartupWMClass=net.zoite.Zoitechat
|
||||
X-GNOME-UsesNotifications=true
|
||||
MimeType=x-scheme-handler/irc;x-scheme-handler/ircs;
|
||||
MimeType=x-scheme-handler/irc;x-scheme-handler/ircs;application/x-zoitechat-theme;application/x-hexchat-theme;
|
||||
Actions=SafeMode;
|
||||
|
||||
[Desktop Action SafeMode]
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-zoitechat-theme">
|
||||
<comment>ZoiteChat Theme</comment>
|
||||
<glob pattern="*.zct"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-hexchat-theme">
|
||||
<comment>HexChat Theme</comment>
|
||||
<glob pattern="*.hct"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
|
||||
@@ -22,117 +22,61 @@
|
||||
<file alias="tree_util.png" preprocess="to-pixdata">icons/tree_util.png</file>
|
||||
|
||||
<file alias="menu/light/new.png" preprocess="to-pixdata">icons/menu/light/new.png</file>
|
||||
<file alias="menu/light/new.svg">icons/menu/light/new.svg</file>
|
||||
<file alias="menu/light/network-list.png" preprocess="to-pixdata">icons/menu/light/network-list.png</file>
|
||||
<file alias="menu/light/network-list.svg">icons/menu/light/network-list.svg</file>
|
||||
<file alias="menu/light/load-plugin.png" preprocess="to-pixdata">icons/menu/light/load-plugin.png</file>
|
||||
<file alias="menu/light/load-plugin.svg">icons/menu/light/load-plugin.svg</file>
|
||||
<file alias="menu/light/detach.png" preprocess="to-pixdata">icons/menu/light/detach.png</file>
|
||||
<file alias="menu/light/detach.svg">icons/menu/light/detach.svg</file>
|
||||
<file alias="menu/light/close.png" preprocess="to-pixdata">icons/menu/light/close.png</file>
|
||||
<file alias="menu/light/close.svg">icons/menu/light/close.svg</file>
|
||||
<file alias="menu/light/quit.png" preprocess="to-pixdata">icons/menu/light/quit.png</file>
|
||||
<file alias="menu/light/quit.svg">icons/menu/light/quit.svg</file>
|
||||
<file alias="menu/light/disconnect.png" preprocess="to-pixdata">icons/menu/light/disconnect.png</file>
|
||||
<file alias="menu/light/disconnect.svg">icons/menu/light/disconnect.svg</file>
|
||||
<file alias="menu/light/connect.png" preprocess="to-pixdata">icons/menu/light/connect.png</file>
|
||||
<file alias="menu/light/connect.svg">icons/menu/light/connect.svg</file>
|
||||
<file alias="menu/light/join.png" preprocess="to-pixdata">icons/menu/light/join.png</file>
|
||||
<file alias="menu/light/join.svg">icons/menu/light/join.svg</file>
|
||||
<file alias="menu/light/chanlist.png" preprocess="to-pixdata">icons/menu/light/chanlist.png</file>
|
||||
<file alias="menu/light/chanlist.svg">icons/menu/light/chanlist.svg</file>
|
||||
<file alias="menu/light/preferences.png" preprocess="to-pixdata">icons/menu/light/preferences.png</file>
|
||||
<file alias="menu/light/preferences.svg">icons/menu/light/preferences.svg</file>
|
||||
<file alias="menu/light/clear.png" preprocess="to-pixdata">icons/menu/light/clear.png</file>
|
||||
<file alias="menu/light/clear.svg">icons/menu/light/clear.svg</file>
|
||||
<file alias="menu/light/copy.png" preprocess="to-pixdata">icons/menu/light/copy.png</file>
|
||||
<file alias="menu/light/copy.svg">icons/menu/light/copy.svg</file>
|
||||
<file alias="menu/light/delete.png" preprocess="to-pixdata">icons/menu/light/delete.png</file>
|
||||
<file alias="menu/light/delete.svg">icons/menu/light/delete.svg</file>
|
||||
<file alias="menu/light/add.png" preprocess="to-pixdata">icons/menu/light/add.png</file>
|
||||
<file alias="menu/light/add.svg">icons/menu/light/add.svg</file>
|
||||
<file alias="menu/light/remove.png" preprocess="to-pixdata">icons/menu/light/remove.png</file>
|
||||
<file alias="menu/light/remove.svg">icons/menu/light/remove.svg</file>
|
||||
<file alias="menu/light/spell-check.png" preprocess="to-pixdata">icons/menu/light/spell-check.png</file>
|
||||
<file alias="menu/light/spell-check.svg">icons/menu/light/spell-check.svg</file>
|
||||
<file alias="menu/light/save.png" preprocess="to-pixdata">icons/menu/light/save.png</file>
|
||||
<file alias="menu/light/save.svg">icons/menu/light/save.svg</file>
|
||||
<file alias="menu/light/save-as.png" preprocess="to-pixdata">icons/menu/light/save-as.png</file>
|
||||
<file alias="menu/light/save-as.svg">icons/menu/light/save-as.svg</file>
|
||||
<file alias="menu/light/refresh.png" preprocess="to-pixdata">icons/menu/light/refresh.png</file>
|
||||
<file alias="menu/light/refresh.svg">icons/menu/light/refresh.svg</file>
|
||||
<file alias="menu/light/search.png" preprocess="to-pixdata">icons/menu/light/search.png</file>
|
||||
<file alias="menu/light/search.svg">icons/menu/light/search.svg</file>
|
||||
<file alias="menu/light/find.png" preprocess="to-pixdata">icons/menu/light/find.png</file>
|
||||
<file alias="menu/light/find.svg">icons/menu/light/find.svg</file>
|
||||
<file alias="menu/light/previous.png" preprocess="to-pixdata">icons/menu/light/previous.png</file>
|
||||
<file alias="menu/light/previous.svg">icons/menu/light/previous.svg</file>
|
||||
<file alias="menu/light/next.png" preprocess="to-pixdata">icons/menu/light/next.png</file>
|
||||
<file alias="menu/light/next.svg">icons/menu/light/next.svg</file>
|
||||
<file alias="menu/light/help.png" preprocess="to-pixdata">icons/menu/light/help.png</file>
|
||||
<file alias="menu/light/help.svg">icons/menu/light/help.svg</file>
|
||||
<file alias="menu/light/about.png" preprocess="to-pixdata">icons/menu/light/about.png</file>
|
||||
<file alias="menu/light/about.svg">icons/menu/light/about.svg</file>
|
||||
<file alias="menu/light/update.png" preprocess="to-pixdata">icons/menu/light/update.png</file>
|
||||
<file alias="menu/light/update.svg">icons/menu/light/update.svg</file>
|
||||
<file alias="menu/light/emoji.png" preprocess="to-pixdata">icons/menu/light/emoji.png</file>
|
||||
<file alias="menu/light/emoji.svg">icons/menu/light/emoji.svg</file>
|
||||
|
||||
<file alias="menu/dark/new.png" preprocess="to-pixdata">icons/menu/dark/new.png</file>
|
||||
<file alias="menu/dark/new.svg">icons/menu/dark/new.svg</file>
|
||||
<file alias="menu/dark/network-list.png" preprocess="to-pixdata">icons/menu/dark/network-list.png</file>
|
||||
<file alias="menu/dark/network-list.svg">icons/menu/dark/network-list.svg</file>
|
||||
<file alias="menu/dark/load-plugin.png" preprocess="to-pixdata">icons/menu/dark/load-plugin.png</file>
|
||||
<file alias="menu/dark/load-plugin.svg">icons/menu/dark/load-plugin.svg</file>
|
||||
<file alias="menu/dark/detach.png" preprocess="to-pixdata">icons/menu/dark/detach.png</file>
|
||||
<file alias="menu/dark/detach.svg">icons/menu/dark/detach.svg</file>
|
||||
<file alias="menu/dark/close.png" preprocess="to-pixdata">icons/menu/dark/close.png</file>
|
||||
<file alias="menu/dark/close.svg">icons/menu/dark/close.svg</file>
|
||||
<file alias="menu/dark/quit.png" preprocess="to-pixdata">icons/menu/dark/quit.png</file>
|
||||
<file alias="menu/dark/quit.svg">icons/menu/dark/quit.svg</file>
|
||||
<file alias="menu/dark/disconnect.png" preprocess="to-pixdata">icons/menu/dark/disconnect.png</file>
|
||||
<file alias="menu/dark/disconnect.svg">icons/menu/dark/disconnect.svg</file>
|
||||
<file alias="menu/dark/connect.png" preprocess="to-pixdata">icons/menu/dark/connect.png</file>
|
||||
<file alias="menu/dark/connect.svg">icons/menu/dark/connect.svg</file>
|
||||
<file alias="menu/dark/join.png" preprocess="to-pixdata">icons/menu/dark/join.png</file>
|
||||
<file alias="menu/dark/join.svg">icons/menu/dark/join.svg</file>
|
||||
<file alias="menu/dark/chanlist.png" preprocess="to-pixdata">icons/menu/dark/chanlist.png</file>
|
||||
<file alias="menu/dark/chanlist.svg">icons/menu/dark/chanlist.svg</file>
|
||||
<file alias="menu/dark/preferences.png" preprocess="to-pixdata">icons/menu/dark/preferences.png</file>
|
||||
<file alias="menu/dark/preferences.svg">icons/menu/dark/preferences.svg</file>
|
||||
<file alias="menu/dark/clear.png" preprocess="to-pixdata">icons/menu/dark/clear.png</file>
|
||||
<file alias="menu/dark/clear.svg">icons/menu/dark/clear.svg</file>
|
||||
<file alias="menu/dark/copy.png" preprocess="to-pixdata">icons/menu/dark/copy.png</file>
|
||||
<file alias="menu/dark/copy.svg">icons/menu/dark/copy.svg</file>
|
||||
<file alias="menu/dark/delete.png" preprocess="to-pixdata">icons/menu/dark/delete.png</file>
|
||||
<file alias="menu/dark/delete.svg">icons/menu/dark/delete.svg</file>
|
||||
<file alias="menu/dark/add.png" preprocess="to-pixdata">icons/menu/dark/add.png</file>
|
||||
<file alias="menu/dark/add.svg">icons/menu/dark/add.svg</file>
|
||||
<file alias="menu/dark/remove.png" preprocess="to-pixdata">icons/menu/dark/remove.png</file>
|
||||
<file alias="menu/dark/remove.svg">icons/menu/dark/remove.svg</file>
|
||||
<file alias="menu/dark/spell-check.png" preprocess="to-pixdata">icons/menu/dark/spell-check.png</file>
|
||||
<file alias="menu/dark/spell-check.svg">icons/menu/dark/spell-check.svg</file>
|
||||
<file alias="menu/dark/save.png" preprocess="to-pixdata">icons/menu/dark/save.png</file>
|
||||
<file alias="menu/dark/save.svg">icons/menu/dark/save.svg</file>
|
||||
<file alias="menu/dark/save-as.png" preprocess="to-pixdata">icons/menu/dark/save-as.png</file>
|
||||
<file alias="menu/dark/save-as.svg">icons/menu/dark/save-as.svg</file>
|
||||
<file alias="menu/dark/refresh.png" preprocess="to-pixdata">icons/menu/dark/refresh.png</file>
|
||||
<file alias="menu/dark/refresh.svg">icons/menu/dark/refresh.svg</file>
|
||||
<file alias="menu/dark/search.png" preprocess="to-pixdata">icons/menu/dark/search.png</file>
|
||||
<file alias="menu/dark/search.svg">icons/menu/dark/search.svg</file>
|
||||
<file alias="menu/dark/find.png" preprocess="to-pixdata">icons/menu/dark/find.png</file>
|
||||
<file alias="menu/dark/find.svg">icons/menu/dark/find.svg</file>
|
||||
<file alias="menu/dark/previous.png" preprocess="to-pixdata">icons/menu/dark/previous.png</file>
|
||||
<file alias="menu/dark/previous.svg">icons/menu/dark/previous.svg</file>
|
||||
<file alias="menu/dark/next.png" preprocess="to-pixdata">icons/menu/dark/next.png</file>
|
||||
<file alias="menu/dark/next.svg">icons/menu/dark/next.svg</file>
|
||||
<file alias="menu/dark/help.png" preprocess="to-pixdata">icons/menu/dark/help.png</file>
|
||||
<file alias="menu/dark/help.svg">icons/menu/dark/help.svg</file>
|
||||
<file alias="menu/dark/about.png" preprocess="to-pixdata">icons/menu/dark/about.png</file>
|
||||
<file alias="menu/dark/about.svg">icons/menu/dark/about.svg</file>
|
||||
<file alias="menu/dark/update.png" preprocess="to-pixdata">icons/menu/dark/update.png</file>
|
||||
<file alias="menu/dark/update.svg">icons/menu/dark/update.svg</file>
|
||||
<file alias="menu/dark/emoji.png" preprocess="to-pixdata">icons/menu/dark/emoji.png</file>
|
||||
<file alias="menu/dark/emoji.svg">icons/menu/dark/emoji.svg</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
||||
511
debian/changelog
vendored
Normal file
511
debian/changelog
vendored
Normal file
@@ -0,0 +1,511 @@
|
||||
zoitechat (2.18.0~pre1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream pre-release 2.18.0~pre1.
|
||||
* Debian packaging updates in this branch:
|
||||
- switch package builds to GTK 3 and pass -Dgtk3=true to Meson.
|
||||
- add/install split-package manifests for generated binary packages.
|
||||
- include manpage and MIME package XML in package installs.
|
||||
- adjust CI artifact staging/upload paths for actions/upload-artifact@v4.
|
||||
|
||||
-- ZoiteChat Maintainers <zoitechat@users.noreply.github.com> Sun, 16 Feb 2026 00:00:00 +0000
|
||||
|
||||
zoitechat (2.17.0-1) unstable; urgency=medium
|
||||
|
||||
* Switch Debian build to GTK 3 packaging:
|
||||
- replace libgtk2.0-dev with libgtk-3-dev in Build-Depends.
|
||||
- pass -Dgtk3=true to Meson during package builds.
|
||||
- update package description to explicitly reference GTK 3.
|
||||
|
||||
-- ZoiteChat Maintainers <zoitechat@users.noreply.github.com> Sun, 16 Feb 2026 00:00:00 +0000
|
||||
|
||||
zoitechat (2.17.0-0) stable; urgency=medium
|
||||
|
||||
* Initial ZoiteChat packaging (forked from HexChat's Debian packaging).
|
||||
* Rename packages/binaries to zoitechat.
|
||||
* Move Python plugin package to Suggests (known to be unstable in Flatpak builds).
|
||||
|
||||
-- ZoiteChat Maintainers <zoitechat@users.noreply.github.com> Wed, 07 Jan 2026 00:00:00 +0000
|
||||
|
||||
hexchat (2.16.2-1) unstable; urgency=medium
|
||||
|
||||
* Update watch file for new github tarball location
|
||||
* New upstream version 2.16.2
|
||||
* Update copyright file
|
||||
* Update copyright years also for Debian packaging
|
||||
* Drop patch 0001-Be-even-more-picky-about-invalid-URLs.patch: upstream
|
||||
* Add three patches from <pabs>:
|
||||
- Add-channel-context-menu-item-to-close-the-channel,
|
||||
- Automatically-reconnect-when-there-is-a-TLS-error,
|
||||
- Do-not-insert-an-extra-space-on-all-lines-when-loading-scrollback-with-colours
|
||||
|
||||
-- Gianfranco Costamagna <locutusofborg@debian.org> Sat, 09 Mar 2024 11:51:16 +0100
|
||||
|
||||
hexchat (2.16.1-2) unstable; urgency=medium
|
||||
|
||||
[ Gianfranco Costamagna ]
|
||||
* Team upload
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Drop versioned constraint on python3-dev.
|
||||
|
||||
[ Sudip Mukherjee ]
|
||||
* Fix hexchat crash for specific links. (LP: #2029314)
|
||||
+ This is an upstream cherry-pick
|
||||
|
||||
-- Gianfranco Costamagna <locutusofborg@debian.org> Wed, 06 Mar 2024 07:30:56 +0100
|
||||
|
||||
hexchat (2.16.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.16.1.
|
||||
* Drop all patches, applied upstream.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 22 Apr 2022 21:52:27 +0200
|
||||
|
||||
hexchat (2.16.0-4) unstable; urgency=medium
|
||||
|
||||
* d/copyright: bump copyright year
|
||||
* Add some patches from upstream, while waiting for the new release:
|
||||
+ Fix build with OpenSSL 3.
|
||||
+ Improve the fishlim tests.
|
||||
+ Fix the URL opening to not double-encode already encoded URLs.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 17 Jan 2022 13:26:58 +0100
|
||||
|
||||
hexchat (2.16.0-3) unstable; urgency=medium
|
||||
|
||||
* Increase the tests timeout even more.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 31 Oct 2021 17:45:43 +0100
|
||||
|
||||
hexchat (2.16.0-2) unstable; urgency=medium
|
||||
|
||||
* Add patch to increase the tests timeout.
|
||||
* Update our copy of the upstream changelog.
|
||||
* Recommends:hexchat-lua from hexchat. Closes: #996172
|
||||
Thanks to Jesse Rhodes <jesse@sney.ca> for the patch!
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 15 Oct 2021 14:20:31 +0200
|
||||
|
||||
hexchat (2.16.0-1) unstable; urgency=medium
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* New upstream version 2.16.0.
|
||||
+ Drop all patches applied upstream.
|
||||
+ Refresh the patches tweaking the default channels/networks.
|
||||
* Refresh the upstream signing key.
|
||||
* Update copyright.
|
||||
* Drop our patch renaming the Python plugin into Python3.
|
||||
There doesn't seem to be any transition needed.
|
||||
* d/control:
|
||||
+ Drop Build-Depends on libnotify-dev and libproxy-dev,
|
||||
not used anymore starting with v2.16.
|
||||
+ Have hexchat-python3 Depend on python3-cffi-backend;
|
||||
seems like I missed this dependency since v2.14.3-4.
|
||||
+ Bump Standards-Version to 4.6.0, no changes needed.
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Remove constraints unnecessary since buster:
|
||||
* Build-Depends: Drop versioned constraint on meson.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 04 Oct 2021 17:12:52 +0200
|
||||
|
||||
hexchat (2.14.3-6) unstable; urgency=medium
|
||||
|
||||
* Add Recommends:ca-certificates.
|
||||
* Add patches from upstream to add Libera.Chat to the network list.
|
||||
* Adapt default servers patches for the upstream changes.
|
||||
* Ubuntu default server: LP: #1933681
|
||||
+ Change from Freenode to Libera.Chat.
|
||||
+ Pre-select the "join channel" button, like we do in Debian.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 26 May 2021 14:55:10 +0200
|
||||
|
||||
hexchat (2.14.3-5) unstable; urgency=medium
|
||||
|
||||
* Bump copyright for 2021.
|
||||
* Apply patch from upstream to fix font height calculation with Pango>=1.44.
|
||||
LP: #1920974
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 02 Jan 2021 16:31:39 +0100
|
||||
|
||||
hexchat (2.14.3-4) unstable; urgency=medium
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Set upstream metadata fields: Bug-Submit.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Bump Standards-Version to 4.5.1, no changes needed.
|
||||
* Bump debhelper compat version to 13.
|
||||
+ Drop dh_missing override, now that --fail-missing is the default.
|
||||
* Add a patch series from upstream to refactor the whole Python plugin,
|
||||
using CFFI. This fixes support for Python 3.9. Closes: #975393
|
||||
+ Replace my naive patch to fix the build with Python 3.8, using instead
|
||||
the fix that comes from upstream.
|
||||
+ Install the new files produced by cffi.
|
||||
+ Add new Build-Depends python3-cffi.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 16 Dec 2020 22:03:57 +0100
|
||||
|
||||
hexchat (2.14.3-3) unstable; urgency=medium
|
||||
|
||||
* Add patch to use the new -embed variant of python3.pc.
|
||||
Fix linking with Python 3.8. LP: #1866081
|
||||
* Swap the Recommends:hwdata with Recommends:pci.ids. Closes: #953300
|
||||
* Bump Standards-Version to 4.5.0, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 11 Mar 2020 17:08:25 +0100
|
||||
|
||||
hexchat (2.14.3-2) unstable; urgency=medium
|
||||
|
||||
[ Gianfranco Costamagna ]
|
||||
* Refresh the Ubuntu servlist patch.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Import patch from upstream (from James Clarke) to properly prioritize
|
||||
MODE commands, that were delaying PINGs in some cases.
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Set upstream metadata fields: Bug-Database, Repository,
|
||||
Repository-Browse.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 02 Jan 2020 09:46:24 +0100
|
||||
|
||||
hexchat (2.14.3-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.3.
|
||||
+ Drop patches applied upstream.
|
||||
* d/control:
|
||||
+ Bump build-dependency on meson to >= 0.40.
|
||||
+ Bump Standards-Version to 4.4.1, no changes needed.
|
||||
* Update the boundled upstream docs.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 31 Dec 2019 15:24:45 +0100
|
||||
|
||||
hexchat (2.14.2-5) unstable; urgency=medium
|
||||
|
||||
* Stop building the Python2 plugin. Closes: #936697
|
||||
Simplify the patch used to build py2 and py3; we need to keep it because
|
||||
we used to rename the 'python' plugin to 'python3'. We should check if
|
||||
some kind of transition should be done to go back to the upstream
|
||||
defaults.
|
||||
* d/control:
|
||||
+ Drop a bunch of old Breaks/Replaces that shouldn't be needed anymore.
|
||||
+ Bump Standards-Version to 4.4.0, no changes needed.
|
||||
+ Bump debhelper compat level to 12, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 31 Aug 2019 11:57:51 +0200
|
||||
|
||||
hexchat (2.14.2-4) unstable; urgency=medium
|
||||
|
||||
* Add a patch to fix a probable crash while unloading the Python plugin
|
||||
when using Python 3.7. LP: #1830246; Closes: #921208
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 25 May 2019 11:48:26 +0200
|
||||
|
||||
hexchat (2.14.2-3) unstable; urgency=medium
|
||||
|
||||
[ Ondřej Nový ]
|
||||
* d/copyright: Change Format URL to correct one.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Move the patches tweaking the default servers out of d/patches, and inject
|
||||
them through d/rules. The ctte decided that vendored series files are not
|
||||
allowed in the Debian archive, see #904302. Closes: #915350
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 03 Dec 2018 14:17:35 +0100
|
||||
|
||||
hexchat (2.14.2-2) unstable; urgency=medium
|
||||
|
||||
* Add patch to fix FTBFS on !linux.
|
||||
* d/control: Use the new debhelper-compat(=11) build-dep and drop d/compat.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 23 Sep 2018 20:38:39 +0200
|
||||
|
||||
hexchat (2.14.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.2.
|
||||
* d/patches:
|
||||
+ Drop patches applied upstream.
|
||||
+ Refresh remaining patches.
|
||||
* d/control: Bump Standards-Version to 4.2.1, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 01 Sep 2018 22:28:20 +0200
|
||||
|
||||
hexchat (2.14.1-2) unstable; urgency=medium
|
||||
|
||||
* Add some patches from upstream:
|
||||
+ upstream/0003-Remove-shift-click-to-close-tab-binding.patch
|
||||
- LP: #1756402
|
||||
+ upstream/0004-build-Add-metainfo-files-for-addons.patch
|
||||
+ upstream/0005-build-Fix-id-in-plugin-metainfo-files.patch
|
||||
+ upstream/0006-build-Correctly-set-plugin-licenses.patch
|
||||
+ upstream/0007-build-Re-add-support-for-the-legacy-perl-api.patch
|
||||
+ upstream/0008-Deiconify-window-on-tray-click.-Closes-2136.patch
|
||||
* Fixup our py2+py3 patch after the above patches have been applied.
|
||||
* Install the new metainfo files representing the various plugins.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 20 Mar 2018 16:10:27 +0100
|
||||
|
||||
hexchat (2.14.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.1.
|
||||
* Drop all patches applied upstream.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 14 Mar 2018 03:35:41 +0100
|
||||
|
||||
hexchat (2.14.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.0. Closes: #892085
|
||||
* Refresh patches:
|
||||
+ drop 4c178782a779f013fafab476506f7d4dae372b8a.patch, applied upstream.
|
||||
+ Rewrite the local patch used to build for both python2 and python3 after
|
||||
the change of build system upstream.
|
||||
+ Add all the commits from upstream after the release:
|
||||
- 0003-build-Remove-pie-from-global-ldflags.patch
|
||||
- 0004-Fix-fscanf-usage-without-size-limit.patch
|
||||
- 0005-fix-typo-in-comment.patch
|
||||
- 0006-Revert-xtext-Always-use-Pango-to-get-correct-glyph-w.patch
|
||||
* d/control:
|
||||
+ Update build dependencies for the new upstream:
|
||||
- New build-deps: gettext, iso-codes, liblua5.3-dev, meson (>= 0.38).
|
||||
- Drop build-deps: dh-lua, intltool, libtool.
|
||||
- Drop version restriction from libgtk2.0-dev (>= 2.10.0).
|
||||
+ Set Rules-Requires-Root:no.
|
||||
* d/changelog.txt: Update from upstream.
|
||||
* d/hexchat.install: Slightly update the paths.
|
||||
* d/rules:
|
||||
+ Drop override_dh_install not needed anymore with meson.
|
||||
+ Explicitly build with lua 5.3. The new build system defaults on luajit
|
||||
only now.
|
||||
* d/copyright: Update.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 14 Mar 2018 02:36:37 +0100
|
||||
|
||||
hexchat (2.12.4-6) unstable; urgency=medium
|
||||
|
||||
* d/control:
|
||||
+ Move packaging to salsa.debian.org.
|
||||
+ Replace recomendency on gvfs-bin to libglib2.0-bin. Closes: #877746
|
||||
+ Bump Standards-Version to 4.1.3, no changes needed.
|
||||
* d/copyright: Bump copyright years for debian/*.
|
||||
* d/rules: Replace dh_install --fail-missing by dh_missing.
|
||||
* d/watch: Use HTTPS.
|
||||
* Bump debhelper compat level to 11.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 24 Feb 2018 18:26:41 +0100
|
||||
|
||||
hexchat (2.12.4-5) unstable; urgency=medium
|
||||
|
||||
* Add a short description to the previous changelog entry on how to manually
|
||||
preserve the scrollback that would otherwise get lost.
|
||||
* Remove the patch also for Ubuntu (fixing FTBFS there).
|
||||
* d/control:
|
||||
+ Add a bunch of Multi-Arch:same notation, suggested by the M-A hinter.
|
||||
+ Remove the transitional package hexchat-python.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 15 Jul 2017 18:34:27 +0200
|
||||
|
||||
hexchat (2.12.4-4) unstable; urgency=medium
|
||||
|
||||
* Stop reverting upstream commit 15600f405f2d5bda6ccf0dd73957395716e0d4d3.
|
||||
This means users will lose their scrollback right after updating, but
|
||||
that's what upstream did and we have no real reasons to undefinitely
|
||||
diverge from them just to wait for a nicer fix.
|
||||
Closes: #852275; CVE-2016-2087
|
||||
For users who care about their scrollback, it's enough to manually rename
|
||||
the directories in ~/.config/hexchat/scrollback to all-lowercase characters
|
||||
before restarting hexchat after the update.
|
||||
* d/control: Bump Standards-Version to 4.0.0, no changes needed
|
||||
* d/copyright: bump my copyright year for debian/ to cover 2017
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 14 Jul 2017 16:12:32 +0200
|
||||
|
||||
hexchat (2.12.4-3) unstable; urgency=medium
|
||||
|
||||
* Demote hexchat-otr from Recommends to Suggests.
|
||||
It reportely causes noise and problems for unexperienced users, and it's
|
||||
a mostly unmaintained plugin, so don't install it by default.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 30 May 2017 21:50:09 +0200
|
||||
|
||||
hexchat (2.12.4-2) unstable; urgency=medium
|
||||
|
||||
* Also apply patch 4c178782a779f013fafab476506f7d4dae372b8a.patch on ubuntu.
|
||||
* d/p/0001-Debian-server-defaults.patch: Add missing braces around the `if`.
|
||||
Thanks to Lauri Alanko <la@iki.fi> for the patch. Closes: #779892
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 26 Jan 2017 09:54:41 +0100
|
||||
|
||||
hexchat (2.12.4-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.12.4.
|
||||
* d/copyright: update (removal of the doat plugin).
|
||||
* d/watch: improve:
|
||||
+ Bump version to 4.
|
||||
+ Use substitution strings @ANY_VERSION@ and @ARCHIVE_EXT@.
|
||||
+ Ignore version 2.12.4-repack by mangling it into 2.12.4.
|
||||
* d/control: mark hexchat-dev and hexchat-lua as Multi-Arch:same.
|
||||
* d/patches/:
|
||||
+ openssl/*: drop, applied upstream.
|
||||
+ clean.patch: drop, applied upstream.
|
||||
+ 4c178782a779f013fafab476506f7d4dae372b8a.patch: include from upstream to
|
||||
work around a gdk-pixbuf bug which would prevent the hexchat icon from
|
||||
being displayed in panels/systrays. Closes: #848615
|
||||
* d/rules: add a 'udoc' target to update the bundled copy of upstream doc.
|
||||
* Update upstream documentation.
|
||||
* d/hexchat-plugins.install: upstream converted the 'doat' plugin into an
|
||||
internal command, so stop trying to install the plugin.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 26 Dec 2016 01:16:19 +0100
|
||||
|
||||
hexchat (2.12.3-4) unstable; urgency=medium
|
||||
|
||||
* Re-enable Lua support everywhere now that #845929 is fixed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 19 Dec 2016 12:47:31 +0100
|
||||
|
||||
hexchat (2.12.3-3) unstable; urgency=medium
|
||||
|
||||
* Actually disable Lua support when building.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 05 Dec 2016 16:03:26 +0100
|
||||
|
||||
hexchat (2.12.3-2) unstable; urgency=medium
|
||||
|
||||
* Temporary restrict the build of hexchat-lua to the architectures where lua
|
||||
is usable right now (see #845929).
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 05 Dec 2016 14:02:40 +0100
|
||||
|
||||
hexchat (2.12.3-1) unstable; urgency=medium
|
||||
|
||||
[ Jesse Rhodes ]
|
||||
* Add hexchat-dev package for .pc and .h files.
|
||||
* Include dbus service file in hexchat-common.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Take over maintenance from Jasse Rhodes.
|
||||
Thank you for all your work these years! Closes: #844574
|
||||
* debian/control:
|
||||
+ wrap-and-sort -ast.
|
||||
+ Bump Standards-Version to 3.9.8, no changes needed.
|
||||
+ Add proper Breaks/Replaces for the hexchat-dev addition-
|
||||
+ Have hexchat-plugins recommend hwdata for the sysinfo plugin.
|
||||
Closes: #845940
|
||||
+ Have hexchat recommend the hexchat-otr plugin.
|
||||
Thanks to Petter Reinholdtsen <pere@hungry.com> for the suggestion
|
||||
+ Bump the Breaks/Replaces of hexchat-plugins against hexchat;
|
||||
hexchat-plugin.pc has been moved from hexchat to hexchat-plugins
|
||||
in 2.12.0-1. LP: #1586239
|
||||
+ Set appropriate Breaks/Replaces to cope with the Ubuntu delta and
|
||||
make the package syncable.
|
||||
+ Mark hexchat-common as Multi-Arch:foreign (from the m-a hinter).
|
||||
* debian/rules:
|
||||
+ Remove huge override_dh_auto_clean: if anything of that is needed,
|
||||
it should be done on the upstream side.
|
||||
+ Remove *.la files before running dh_install.
|
||||
+ Use dh_install --fail-missing.
|
||||
* Package the Lua plugin. Closes: #834491
|
||||
* Update upstream changelog for 2.13.2.
|
||||
* Use dh_installchangelogs to install the upstream changelog, instead of
|
||||
manually compressing in rules and the install with d/*.docs.
|
||||
* Let the upstream build system put the manpage in place, instead of copying
|
||||
it of our own.
|
||||
* Add patch to properly clean the upstream sources and make possible to build
|
||||
the package twice in a row.
|
||||
* Bump debhelper compat level to 10.
|
||||
+ --with autoreconf is now default.
|
||||
* debian/copyright:
|
||||
+ Make it DEP-5 compliant.
|
||||
+ Update.
|
||||
* Drop nearly all lintian overrides; they are either fixed or unused.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 01 Dec 2016 18:30:03 +0100
|
||||
|
||||
hexchat (2.12.3-0.1) unstable; urgency=medium
|
||||
|
||||
* Non-maintainer upload, with maintainer ACK.
|
||||
|
||||
[ Jesse Rhodes ]
|
||||
* Fixed vcs-git url.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Imported Upstream version 2.12.3. Closes: #836809
|
||||
* Refresh patches
|
||||
* d/rules: disable LUA bindings, as they would require a new binary package.
|
||||
* Add several patches from upstream to add support to OpenSSL 1.1.0.
|
||||
Closes: #828339
|
||||
* Revert upstream commit 15600f405f2d5bda6ccf0dd73957395716e0d4d3, which
|
||||
would cause users to lose their scrollback.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 27 Nov 2016 13:41:25 +0100
|
||||
|
||||
hexchat (2.12.0-2) unstable; urgency=medium
|
||||
|
||||
* Removed patch correcting for missing translations,
|
||||
as translations are no longer missing
|
||||
* Removed patch correcting spelling error that would break
|
||||
some scripts and themes
|
||||
* Updated ubuntu server/channel defaults
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Wed, 30 Mar 2016 11:44:04 -0600
|
||||
|
||||
hexchat (2.12.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Iceweasel no longer called Firefox in url dialog
|
||||
* Building both python2 and python3 plugins
|
||||
* Including hexchat-plugin.pc (Closes: 801767)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Fri, 25 Mar 2016 10:54:57 -0600
|
||||
|
||||
hexchat (2.10.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Includes upstream fixes for POODLE vulnerability
|
||||
(CVE-2014-3566)
|
||||
* Split plugins into modular packages rather than having all
|
||||
binaries in the main hexchat package
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Fri, 28 Nov 2014 18:35:39 -0700
|
||||
|
||||
hexchat (2.10.1-2) unstable; urgency=medium
|
||||
|
||||
* Fix ubuntu_defaults.patch (LP: #1390851)
|
||||
* Disable SSLv3
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Sun, 16 Nov 2014 11:47:12 -0700
|
||||
|
||||
hexchat (2.10.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* No longer build-depend on libsexy-dev
|
||||
* URL handler dialog now labeled Iceweasel rather than Firefox
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Mon, 18 Aug 2014 21:18:55 -0600
|
||||
|
||||
hexchat (2.10.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Removed patches for issues fixed by upstream
|
||||
* Added default servers and recommended channels for debian
|
||||
and ubuntu (LP: #1294415)
|
||||
* Upstream commit fa955a0f fixes xdcc segfault (Closes: #745764)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Sun, 01 Jun 2014 16:45:22 -0600
|
||||
|
||||
hexchat (2.9.6.1-2) unstable; urgency=low
|
||||
|
||||
* Now using dh-autoreconf instead of autotools-dev (Closes: #739630)
|
||||
* Added gvfs-bin as Recommends so default url handlers work
|
||||
(Closes: #740006)
|
||||
* Added unifont as Suggests for unicode symbol support
|
||||
* Included png,svg icons in package
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Tue, 25 Feb 2014 16:45:42 -0700
|
||||
|
||||
hexchat (2.9.6.1-1) unstable; urgency=low
|
||||
|
||||
* Initial release (Closes: #702075)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Mon, 03 Feb 2014 19:09:17 -0700
|
||||
126
debian/control
vendored
Normal file
126
debian/control
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
Source: zoitechat
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: ZoiteChat Maintainers <zoitechat@users.noreply.github.com>
|
||||
Build-Depends:
|
||||
debhelper-compat (= 13),
|
||||
gettext,
|
||||
iso-codes,
|
||||
libcanberra-dev,
|
||||
libdbus-glib-1-dev,
|
||||
libglib2.0-dev,
|
||||
libgtk-3-dev,
|
||||
liblua5.3-dev,
|
||||
libpci-dev,
|
||||
libperl-dev,
|
||||
libssl-dev,
|
||||
meson,
|
||||
python3-cffi,
|
||||
python3-dev
|
||||
Standards-Version: 4.6.0
|
||||
Rules-Requires-Root: no
|
||||
Vcs-Git: https://github.com/zoitechat/zoitechat.git
|
||||
Vcs-Browser: https://github.com/zoitechat/zoitechat
|
||||
Homepage: https://zoitechat.zoite.net
|
||||
|
||||
Package: zoitechat
|
||||
Architecture: any
|
||||
Depends:
|
||||
zoitechat-common (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Recommends:
|
||||
ca-certificates,
|
||||
zoitechat-lua,
|
||||
zoitechat-perl,
|
||||
zoitechat-plugins,
|
||||
libglib2.0-bin
|
||||
Suggests:
|
||||
zoitechat-python3,
|
||||
zoitechat-otr,
|
||||
unifont
|
||||
Description: IRC client for GNOME (fork of HexChat 2.18.0-pre1 base)
|
||||
ZoiteChat is a graphical IRC client with a GTK 3 GUI. Features include Python,
|
||||
Perl and Lua scripting support, a plugin API, multiple server/channel
|
||||
windows, spell checking, multiple authentication methods including SASL, and
|
||||
customizable notifications. For more information on IRC, see
|
||||
http://irchelp.org/.
|
||||
|
||||
Package: zoitechat-common
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Provides: irc-client
|
||||
Depends: ${misc:Depends}
|
||||
Recommends:
|
||||
ca-certificates,
|
||||
zoitechat-lua,
|
||||
zoitechat-perl,
|
||||
zoitechat-plugins,
|
||||
libglib2.0-bin
|
||||
Suggests:
|
||||
zoitechat,
|
||||
zoitechat-python3,
|
||||
zoitechat-otr,
|
||||
unifont
|
||||
Description: Common data files for ZoiteChat
|
||||
This package includes architecture-independent files for ZoiteChat, such as
|
||||
translations, desktop integration, and shared data.
|
||||
|
||||
Package: zoitechat-perl
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Perl plugin for ZoiteChat
|
||||
This package contains the Perl plugin for ZoiteChat. It is split out from the
|
||||
main package because it is optional.
|
||||
|
||||
Package: zoitechat-python3
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
python3-cffi-backend,
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Python 3 plugin for ZoiteChat
|
||||
This package contains the Python 3 plugin for ZoiteChat. It is split out from
|
||||
the main package because it is optional.
|
||||
.
|
||||
Known issue: the Python plugin may freeze the client in some builds.
|
||||
|
||||
Package: zoitechat-lua
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Lua plugin for ZoiteChat
|
||||
This package contains the Lua plugin for ZoiteChat. It is split out from the
|
||||
main package because it is optional.
|
||||
|
||||
Package: zoitechat-plugins
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Suggests: pciutils
|
||||
Description: Extra plugins for ZoiteChat
|
||||
This package contains optional plugins (e.g. FiSHLiM, Sysinfo, Do At and
|
||||
Checksum). These are split out from the main package because they are not
|
||||
required for core functionality.
|
||||
|
||||
Package: zoitechat-dev
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat-common (= ${binary:Version}),
|
||||
${misc:Depends}
|
||||
Description: Development files for ZoiteChat plugins
|
||||
This package contains zoitechat-plugin.h and zoitechat-plugin.pc, which
|
||||
facilitate building binary plugins for ZoiteChat.
|
||||
188
debian/copyright
vendored
Normal file
188
debian/copyright
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: zoitechat
|
||||
Source: https://zoitechat.zoite.net
|
||||
|
||||
Files: *
|
||||
Copyright: 1998-2010 Peter Zelezny
|
||||
2009-2013 Berke Viktor
|
||||
2015-2021 Patrick Griffis
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2014 Jesse Rhodes <drubo@drubo.net>
|
||||
2016-2022 Mattia Rizzolo <mattia@debian.org>
|
||||
2020-2024 Gianfranco Costamagna <locutusofborg@debian.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: data/man/zoitechat.1.in
|
||||
Copyright: Davide Puricelli <evo@debian.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: osx/gtkrc
|
||||
Copyright: 2012 Xamarin Inc.
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/checksum/* plugins/exec/*
|
||||
Copyright: 2010-2012 Berke Viktor
|
||||
License: Expat
|
||||
|
||||
Files: plugins/fishlim/*
|
||||
Copyright: 2010 Samuel Lidén Borell <samuel@kodafritt.se>
|
||||
2015 <the.cypher@gmail.com>
|
||||
2019-2020 <bakasura@protonmail.ch>
|
||||
License: Expat
|
||||
|
||||
Files: plugins/lua/*
|
||||
Copyright: 2015-2016 mniip
|
||||
License: Expat
|
||||
|
||||
Files: plugins/perl/*
|
||||
Copyright: 1998-2002 Peter Zelezny
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/python/*
|
||||
Copyright: 2002-2003 Gustavo Niemeyer <niemeyer@conectiva.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/sysinfo/*
|
||||
Copyright: 2003-2005 Michael Shoup
|
||||
2005-2007 Tony Vroon
|
||||
2012 Berke Viktor
|
||||
2015 Patrick Griffis
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/winamp/*
|
||||
Copyright: Leo <leo.nard@free.fr>
|
||||
Silverex <SilvereX@karklas.mif.vu.lt>
|
||||
Derek Buitenhuis <daemon404@gmail.com>
|
||||
Berke Viktor <berkeviktor@aol.com>
|
||||
License: GPL-1.0
|
||||
|
||||
Files: src/common/dbus/*
|
||||
Copyright: 2006 Claessens Xavier
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/dbus/example.py
|
||||
Copyright: 1998-2010 Peter Zelezny
|
||||
2009-2013 Berke Viktor
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/scram.*
|
||||
Copyright: 2023 Patrick Okraku
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/ssl.c
|
||||
Copyright: 2000 DaP <profeta@freemail.c3.hu>
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
|
||||
Files: src/dirent/dirent-win32.h
|
||||
Copyright: 2006-2012 Toni Ronkko
|
||||
License: Expat
|
||||
|
||||
Files: src/fe-gtk/sexy-iso-codes.c src/fe-gtk/sexy-iso-codes.h
|
||||
Copyright: 2008 Novell, Inc.
|
||||
2013 Sandro Mani
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/fe-gtk/sexy-spell-entry.c src/fe-gtk/sexy-spell-entry.h
|
||||
Copyright: 2002 Evan Martin
|
||||
2004-2006 Christian Hammond
|
||||
License: LGPL-2.1+
|
||||
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
.
|
||||
In addition, as a special exception, the copyright holders give permission
|
||||
to link the code of portions of this program with the OpenSSL library.
|
||||
You must obey the GNU General Public License in all respects for all of
|
||||
the code used other than OpenSSL. If you modify file(s) with this
|
||||
exception, you may extend this exception to your version of the file(s),
|
||||
but you are not obligated to do so. If you do not wish to do so, delete
|
||||
this exception statement from your version. If you delete this exception
|
||||
statement from all source files in the program, then also delete it here.
|
||||
|
||||
License: Expat
|
||||
.
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
.
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
License: GPL-2+
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
|
||||
License: GPL-1.0
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
02110-1301, USA.
|
||||
|
||||
License: LGPL-2.1+
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
.
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA
|
||||
40
debian/default_servers/debian
vendored
Normal file
40
debian/default_servers/debian
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
Description: Changed default network to OFTC,
|
||||
suggests to join #debian on OFTC and Freenode
|
||||
|
||||
diff --git a/src/common/servlist.c b/src/common/servlist.c
|
||||
index a203e702..22fcd92b 100644
|
||||
--- a/src/common/servlist.c
|
||||
+++ b/src/common/servlist.c
|
||||
@@ -902,7 +902,7 @@ servlist_load_defaults (void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
ircnet *net = NULL;
|
||||
- guint def_hash = g_str_hash ("Libera.Chat");
|
||||
+ guint def_hash = g_str_hash ("OFTC");
|
||||
|
||||
while (1)
|
||||
{
|
||||
diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c
|
||||
index ce3cbcae..7f6b1116 100644
|
||||
--- a/src/fe-gtk/joind.c
|
||||
+++ b/src/fe-gtk/joind.c
|
||||
@@ -247,10 +247,18 @@ joind_show_dialog (server *serv)
|
||||
G_CALLBACK (joind_ok_cb), serv);
|
||||
|
||||
if (serv->network)
|
||||
+ {
|
||||
+ if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "OFTC") == 0)
|
||||
+ {
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#debian");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
+ }
|
||||
if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
|
||||
{
|
||||
- gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#debian");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
}
|
||||
+ }
|
||||
|
||||
gtk_widget_grab_focus (okbutton1);
|
||||
gtk_widget_show_all (dialog1);
|
||||
43
debian/default_servers/ubuntu
vendored
Normal file
43
debian/default_servers/ubuntu
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
Description: Changed default channel to join from #hexchat to #ubuntu
|
||||
Also adds a "Ubuntu servers" entry, same as connecting to libera.chat.
|
||||
|
||||
diff --git a/src/common/servlist.c b/src/common/servlist.c
|
||||
index a203e702..18a6c4b3 100644
|
||||
--- a/src/common/servlist.c
|
||||
+++ b/src/common/servlist.c
|
||||
@@ -206,6 +206,9 @@ static const struct defaultserver def[] =
|
||||
{"Libera.Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
{0, "irc.libera.chat"},
|
||||
|
||||
+ {"Ubuntu Servers (Libera.Chat)", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
+ {0, "irc.libera.chat"},
|
||||
+
|
||||
#ifdef USE_OPENSSL
|
||||
{"LibertaCasa", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
{0, "irc.liberta.casa"},
|
||||
@@ -902,7 +905,7 @@ servlist_load_defaults (void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
ircnet *net = NULL;
|
||||
- guint def_hash = g_str_hash ("Libera.Chat");
|
||||
+ guint def_hash = g_str_hash ("Ubuntu Servers (Libera.Chat)");
|
||||
|
||||
while (1)
|
||||
{
|
||||
diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c
|
||||
index ce3cbcae..e94e562a 100644
|
||||
--- a/src/fe-gtk/joind.c
|
||||
+++ b/src/fe-gtk/joind.c
|
||||
@@ -247,9 +247,10 @@ joind_show_dialog (server *serv)
|
||||
G_CALLBACK (joind_ok_cb), serv);
|
||||
|
||||
if (serv->network)
|
||||
- if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
|
||||
+ if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Ubuntu Servers (Libera.Chat)") == 0)
|
||||
{
|
||||
- gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#ubuntu");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
}
|
||||
|
||||
gtk_widget_grab_focus (okbutton1);
|
||||
20
debian/net.zoite.Zoitechat.appdata.xml
vendored
Normal file
20
debian/net.zoite.Zoitechat.appdata.xml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>net.zoite.Zoitechat</id>
|
||||
<name>ZoiteChat</name>
|
||||
<summary>IRC client for GNOME</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
|
||||
<description>
|
||||
<p>ZoiteChat is a graphical IRC client based on HexChat.</p>
|
||||
<p>Current Flatpak builds have a known issue where the Python plugin can freeze the client.</p>
|
||||
</description>
|
||||
|
||||
<launchable type="desktop-id">net.zoite.Zoitechat.desktop</launchable>
|
||||
<provides>
|
||||
<binary>zoitechat</binary>
|
||||
</provides>
|
||||
|
||||
<url type="homepage">https://zoitechat.zoite.net/</url>
|
||||
</component>
|
||||
1
debian/patches/series
vendored
Normal file
1
debian/patches/series
vendored
Normal file
@@ -0,0 +1 @@
|
||||
readmechanges.patch
|
||||
23
debian/rules
vendored
Executable file
23
debian/rules
vendored
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
export DH_VERBOSE=1
|
||||
|
||||
%:
|
||||
dh $@ --buildsystem=meson
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- \
|
||||
-Dgtk3=true \
|
||||
-Dinstall-plugin-metainfo=false \
|
||||
-Dwith-lua=lua53
|
||||
|
||||
override_dh_installchangelogs:
|
||||
install -m0755 -d \
|
||||
debian/zoitechat/usr/share/doc/zoitechat \
|
||||
debian/zoitechat-common/usr/share/doc/zoitechat-common \
|
||||
debian/zoitechat-perl/usr/share/doc/zoitechat-perl \
|
||||
debian/zoitechat-python3/usr/share/doc/zoitechat-python3 \
|
||||
debian/zoitechat-lua/usr/share/doc/zoitechat-lua \
|
||||
debian/zoitechat-plugins/usr/share/doc/zoitechat-plugins \
|
||||
debian/zoitechat-dev/usr/share/doc/zoitechat-dev
|
||||
dh_installchangelogs changelog.rst
|
||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
||||
3.0 (quilt)
|
||||
2
debian/source/lintian-overrides
vendored
Normal file
2
debian/source/lintian-overrides
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# the upstream maintainer says that he doesn't have time to go fish out his GPG key for now
|
||||
orig-tarball-missing-upstream-signature
|
||||
4
debian/upstream/metadata
vendored
Normal file
4
debian/upstream/metadata
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
Bug-Database: https://github.com/zoitechat/zoitechat/issues
|
||||
Bug-Submit: https://github.com/zoitechat/zoitechat/issues/new
|
||||
Repository: https://github.com/zoitechat/zoitechat.git
|
||||
Repository-Browse: https://github.com/zoitechat/zoitechat
|
||||
72
debian/upstream/signing-key.asc
vendored
Normal file
72
debian/upstream/signing-key.asc
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
pub rsa4096 2014-02-13 [SC] [expires: 2024-02-08]
|
||||
108BF2212A051F4A72B18448B3C7CE210DE76DFC
|
||||
uid [ unknown] Patrick Griffis <tingping@tingping.se>
|
||||
uid [ unknown] TingPing <tingping@fedoraproject.org>
|
||||
sub rsa4096 2014-02-13 [E] [expires: 2024-02-08]
|
||||
C6CAF2A624B9C2ECBF83ACBF488A9319DABACE61
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBFL9JHIBEADDKL+vc3MHctXCWxG0IcuLPm4i+WO9jH6MdF8p2bokaL5lilcJ
|
||||
o2i0RHImP83FpqCDj/hE7AeB3Ix3Oq3tIe6lpCz468OVbLivErX/yL8rYUhC+yba
|
||||
zlSJcBipTIezD3pZI/vpFyCIC8mSEI4PJGiLotioNJWQBStQuuPqMKo4cd6cRWx6
|
||||
WovQMKa85rQPvv+wYCseBqU6xBx1xSgpkjDJnAH7We5G6T8TYVM2gqXtii/JYyUC
|
||||
8E7Z2BBdSGkq1Dma1W6paOw7VOtLu6YbAH9v/VUVx0UdzwiyXHQ8qLKbxeXkex9d
|
||||
zoe+oy8wt3bvVHirxU42IlJJVLY4NcUYhr/xOq/YqT+3sWAqgdVM/WnzY3bPiMnQ
|
||||
XqQ3UZ0LKXXsF2+9u2qM6FTiAHIMLtH95IlOQo1qXmDl1HRJTNq3B41UduLDRUhP
|
||||
uGBaXbOtb6ql4nV3/BTxcHumisMh5ALhqXHRNOdn+mEjvT2HT6pp07ZfVhFwM4U0
|
||||
K78f52S+NppiS0cWtn9ibq+UmqZyvw9HMOHYt51lSUOueg/sOvsxrG1gjvcUMlJw
|
||||
nCgS3b+QUmZYo+pl/l13fiWPQpteVGZqKPMBBaQ4MCrwHgvikN8uppKDw8fFGs44
|
||||
LgbCsDoQA8wKxNzMEMTvuhFFgCiOxMCzR0XKxlcKr8CiHZjYwovJLFfLvwARAQAB
|
||||
tCVUaW5nUGluZyA8dGluZ3BpbmdAZmVkb3JhcHJvamVjdC5vcmc+iQJVBBMBAgA/
|
||||
AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgBYhBBCL8iEqBR9KcrGESLPHziEN
|
||||
5238BQJcXuBtBQkSx717AAoJELPHziEN5238pfAP/331a2PASeS1toBRNbMVyXcB
|
||||
8zEb5Q4MFiTmgy7aOOo2MDzV4VBiYEUa93pmWrozWudqZl1u+Cm7XC0Kxv7b6HRC
|
||||
/2UBDKY0FUk7xALFQN+XycNDweflT9SlJ+4IcgfHX3/FcF0Obl0fnNfr8DXXqdsj
|
||||
hxWqlXRkyvRC8VuJJkkufi4CxUBQPSSG+dGgskACP6e210rogPq7LyUIMKkKqKSV
|
||||
69RUHDJZOsObNA6q1gTNcb8G/lIGaqbVTJ/d+6X/iDkgMrxRi++OyAUa7aXMHGBn
|
||||
5PnFjqPKBP7qrEEl1nA0LcXhr1hCEVVXGosuqR1WjbbyOTOq50oGvk8zbTy/1mOc
|
||||
UwkJYbaMv20wAYXx9QSbYoTDMx+DXrB3NCtBHeM7o9igoom8n9khoVmC1SPMOsQM
|
||||
1xLAk22RuyeDw3C3K3xoar4tcrwXKRmTyUxDBvkR7gtySiAKWFZOEPbeeRzprpG+
|
||||
Fg48Zh7buqh3Rdk5rmXOeATbyRq9+D0p6WhtO6UdEbi9yNCGo/eTTs2a9CcxfW6E
|
||||
7gGrX/wP6eKrP7KiT5NqcM01R961IxRpNLM0Uy15Jf5paP9VoJBtR0hO+94Vc9ZJ
|
||||
jS9yv5iJ62FIqSkqXZ7v+59XFZjm84pI7ywHuzjv9poBi3W19jM1eyYeryLj8362
|
||||
w2z5UgLfllZv1o2NTLx6tCZQYXRyaWNrIEdyaWZmaXMgPHRpbmdwaW5nQHRpbmdw
|
||||
aW5nLnNlPokCVAQTAQgAPgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgBYhBBCL
|
||||
8iEqBR9KcrGESLPHziEN5238BQJcXuBtBQkSx717AAoJELPHziEN5238J9cP/3SX
|
||||
UCZBFKf79LUfKVOxZYgAMKzL2CQdglNKrtE0aqMJwga6AUrSLEBWUqKHOFrcWYDi
|
||||
qKldpWGWv52lSlZL4YCIcgymOyYMbjQXkHUUaAH4tCzjT0yhFKKAAokJKBSinaO4
|
||||
cA6i3p3XdyUWbvjqnc8/2Mn31cyxiqj58EN5r7naS/5DaD+0q2dxhLW5/A+IKukk
|
||||
l12NhMpDbTkQ18brttBMCW5h5LPR7HDN5hVPCztj4BN5JqPeMyspemvGMT6G12vA
|
||||
5N+S83rAushIyu8Y88iKhPsNLbLgi3PCOZJDKeNlqdPoXJX7mau41U08/8NiORUP
|
||||
R4Dj9942c6rdHHXDyZ3puvsVK0YjwcmG5uSdG2tpyhNOBiyNQXgpPVHU5YKTob75
|
||||
vGs4uuxKYxNns/UULiC4fp/gGOIRh9f0veJG2DbMnEHXhnpQzIbsYSo1yeJ+8vFM
|
||||
FhbkHlylrkTUtOzQwFqybhgYGbfDvT4weMvCc9jEQXfIfI39/Tjx/JD0VVKu577X
|
||||
oZhtsb4rX2qEmiEnMrWAMM97LGyCNEi6DJipHse4Z5cc54/VswGF8Ze4VYF5hF8o
|
||||
DaIQfGXmuceMS3l4FXK0x6CYKpr7e0pY3zrsGIJ8Zwd11T9ubilAvK68Ix7j1puJ
|
||||
x8/ZD9NYP/NUNpriRVyFNiPlfKRqauDBnSKjiTiguQINBFL9JHIBEACx1FJWBK1R
|
||||
ORu+rHa52Uc0+Jkcr791A10Itwyv6fsA0RT6moob6s8Rvet8NQH6SZVRqiGy3d8g
|
||||
lxnedT32ZxHWRoLC8Pc6PnQhVXB3RSZoE9VVm9z+7nHOGXXCj0a0OsgyGSHLerE9
|
||||
7MvlMlkf2EsOTj6irZZDvJH4Eblbk1WzC4K5EC5r7FL/4sdHLbDWEUR3wemC7s0n
|
||||
9IusHwNBiTSSxpag/dq9+6eVyoA3opsqSU3wlSqfm3U/0G3MG4JkwDmS3nK4hmmq
|
||||
nCakdXZaqKZDGZjfaztTuO5RP73KfNHSNfsreOXY3ldX7Jy1qdHp/hBp6CFXhHul
|
||||
d4ZyWL+O6uMRcNQdfd/b8VBDe3z2LYw3AHnhjAnmwJqjfnhH3r7ibM2+HAtrj8J5
|
||||
Qwe/28QJOR3UfT1+tYW8I0bpnBesfzgm9Vp2t3IzkaGdXQOsB9KdcKRV4viiq4VP
|
||||
S1HdtvpLAxxrNxFguIlYAkLMJwwuaaK8X+K/kgAm3q5+txsxR/jDmDaFqqj0YnfT
|
||||
7s+czbSkkvXDG68sTVr1c2u71i8Q0XXSSrL30/j/+//CN9mP6oI6dYRDK5wCFaYw
|
||||
cQe5Td/biJDWXsXolOC0CHny1TTfNvaK+b0Yksas7aLypHOc5xfVJI1eovwkBpXA
|
||||
QQDFJoWlZudXXUvjPFsEyt9jd2LUl5fZcQARAQABiQI8BBgBAgAmAhsMFiEEEIvy
|
||||
ISoFH0pysYRIs8fOIQ3nbfwFAlxe4JAFCRLHvZ4ACgkQs8fOIQ3nbfwvsQ//QE7v
|
||||
neqZdFBq9PxIgu6S95PTchBI3BsCH6M3uv/hIpLgZwGzymHjCQlwYzjPYRAycphk
|
||||
VjsWP5T6hFPDfFhtAkdPuDd6LW+asUky1B8t802jGrVSmEA81s9jkjKBpdNR5JJr
|
||||
a8fAhUvZz9HW2SUwJyvVaO+q4GZep7VrNMKoCvC0K123V442wOYOLC3cldRgVRKY
|
||||
tXs4KHEjYaR0+zvX2zJvn/CIHWaxw2/qgArXIbTqwiqOWeXAkQWwcArZzkughGIb
|
||||
iv1DgkttTBLOZbiEUerwoMlGERlSTurhahoNInXD8vPPOrYMl7RSV8XUmgTKCJeN
|
||||
Xv/Jdg7ejfmPH9zABh8kh+eiL/yINwh2mmRK2aM+u8wghU7i0g72GSKBNgPHzw7X
|
||||
FDIN4diVX8MB93yeMOMzXGuyHzy3mQhj5LcqMKtTSOeqREAUTHoC0KvQ8kTeZ4N3
|
||||
czHndwBNEVxluR4ljQeqMdJHWoy6GxFGdrcAHqLZZyxbBQq2cYMwAdbscnQqIhhC
|
||||
luJgu4vA+7b8RQIZ725Ij+05J5vpHbPtEGACD09YChQL0OtLIZfS8RKP1lKLrmXC
|
||||
cnJzweMcISPi5PxPXlqXNFzwspK2PLHpmwZ1zSoARXB3BzzCYTE4Mw8UxsCqpbDG
|
||||
cBfbvGaxikGVOqMEoNo/umEhsyleb0gqXIoZJrc=
|
||||
=kssP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
5
debian/watch
vendored
Normal file
5
debian/watch
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
version=4
|
||||
opts="searchmode=plain,\
|
||||
filenamemangle=s%.*/v?@ANY_VERSION@%@PACKAGE@-$1.tar.xz%" \
|
||||
https://api.github.com/repos/zoitechat/zoitechat/releases?per_page=50 \
|
||||
https://api.github.com/repos/[^/]+/[^/]+/tarball/v?@ANY_VERSION@
|
||||
7
debian/zoitechat-common.install
vendored
Normal file
7
debian/zoitechat-common.install
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
usr/share/applications/net.zoite.Zoitechat.desktop
|
||||
usr/share/dbus-1/services/org.zoitechat.service.service
|
||||
usr/share/icons/hicolor/48x48/apps/net.zoite.Zoitechat.png
|
||||
usr/share/icons/hicolor/scalable/apps/net.zoite.Zoitechat.svg
|
||||
usr/share/locale/*/LC_MESSAGES/zoitechat.mo
|
||||
usr/share/metainfo/net.zoite.Zoitechat.appdata.xml
|
||||
usr/share/mime/packages/net.zoite.Zoitechat.mime.xml
|
||||
2
debian/zoitechat-dev.install
vendored
Normal file
2
debian/zoitechat-dev.install
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
usr/include/zoitechat-plugin.h
|
||||
usr/lib/*/pkgconfig/zoitechat-plugin.pc
|
||||
1
debian/zoitechat-lua.install
vendored
Normal file
1
debian/zoitechat-lua.install
vendored
Normal file
@@ -0,0 +1 @@
|
||||
usr/lib/*/zoitechat/plugins/lua.so
|
||||
1
debian/zoitechat-perl.install
vendored
Normal file
1
debian/zoitechat-perl.install
vendored
Normal file
@@ -0,0 +1 @@
|
||||
usr/lib/*/zoitechat/plugins/perl.so
|
||||
3
debian/zoitechat-plugins.install
vendored
Normal file
3
debian/zoitechat-plugins.install
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
usr/lib/*/zoitechat/plugins/checksum.so
|
||||
usr/lib/*/zoitechat/plugins/fishlim.so
|
||||
usr/lib/*/zoitechat/plugins/sysinfo.so
|
||||
4
debian/zoitechat-python3.install
vendored
Normal file
4
debian/zoitechat-python3.install
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
usr/lib/*/zoitechat/plugins/python.so
|
||||
usr/lib/*/zoitechat/python/_zoitechat.py
|
||||
usr/lib/*/zoitechat/python/xchat.py
|
||||
usr/lib/*/zoitechat/python/zoitechat.py
|
||||
1
debian/zoitechat.debhelper.log
vendored
Normal file
1
debian/zoitechat.debhelper.log
vendored
Normal file
@@ -0,0 +1 @@
|
||||
dh_installchangelogs
|
||||
2
debian/zoitechat.install
vendored
Normal file
2
debian/zoitechat.install
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
usr/bin/zoitechat
|
||||
usr/share/man/man1/zoitechat.1
|
||||
6
debian/zoitechat.lintian-overrides
vendored
Normal file
6
debian/zoitechat.lintian-overrides
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
# intentional typo as example for autoreplace function
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat teh the
|
||||
# upstream will not correct misspelled variable names
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat hilight highlight
|
||||
# fixing this spelling error would break scripting/theming
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat Conection Connection
|
||||
@@ -1,31 +1,24 @@
|
||||
{
|
||||
"app-id": "net.zoite.Zoitechat",
|
||||
"branch": "master",
|
||||
"branch": "stable",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "49",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "zoitechat",
|
||||
"finish-args": [
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=wayland",
|
||||
"--share=network",
|
||||
"--socket=pulseaudio",
|
||||
"--filesystem=xdg-download",
|
||||
"--filesystem=xdg-data/themes:ro",
|
||||
"--filesystem=xdg-data/icons:ro",
|
||||
"--filesystem=~/.themes:ro",
|
||||
"--filesystem=~/.icons:ro",
|
||||
"--filesystem=xdg-run/tray-icon:create",
|
||||
|
||||
"--talk-name=org.freedesktop.Notifications",
|
||||
"--talk-name=org.kde.StatusNotifierWatcher",
|
||||
"--talk-name=com.canonical.AppMenu.Registrar",
|
||||
|
||||
"--talk-name=org.mpris.MediaPlayer2.*"
|
||||
],
|
||||
"add-extensions": {
|
||||
"net.zoite.Zoitechat.Plugin": {
|
||||
"version": "49",
|
||||
"version": "20.08",
|
||||
"directory": "extensions",
|
||||
"add-ld-path": "lib",
|
||||
"merge-dirs": "lib/zoitechat/plugins",
|
||||
@@ -36,7 +29,7 @@
|
||||
},
|
||||
"modules": [
|
||||
"shared-modules/dbus-glib/dbus-glib.json",
|
||||
"shared-modules/lua5.4/lua-5.4.json",
|
||||
"shared-modules/lua5.3/lua-5.3.5.json",
|
||||
"shared-modules/libcanberra/libcanberra.json",
|
||||
"shared-modules/libayatana-appindicator/libayatana-appindicator-gtk3.json",
|
||||
"python3-cffi.json",
|
||||
@@ -47,7 +40,7 @@
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/pavouk/lgi.git",
|
||||
"commit": "c9b8e4473c6421f2a215d8c06c0d94b86eb0b26a"
|
||||
"commit": "95418635aa8151a516d43166227ea2b9d4c4403f"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55,6 +48,8 @@
|
||||
"name": "zoitechat",
|
||||
"buildsystem": "meson",
|
||||
"config-opts": [
|
||||
"--buildtype=release",
|
||||
"-Dgtk3=true",
|
||||
"-Ddbus-service-use-appid=true",
|
||||
"-Dwith-perl=false",
|
||||
"-Dwith-python=false",
|
||||
|
||||
Submodule flatpak/shared-modules updated: 55a86b3da4...137a4f488c
90
meson.build
90
meson.build
@@ -1,5 +1,5 @@
|
||||
project('zoitechat', 'c',
|
||||
version: '2.18.0~pre2',
|
||||
version: '2.18.0-pre1',
|
||||
meson_version: '>= 0.55.0',
|
||||
default_options: [
|
||||
'c_std=c17',
|
||||
@@ -10,6 +10,7 @@ project('zoitechat', 'c',
|
||||
|
||||
i18n = import('i18n')
|
||||
gnome = import('gnome')
|
||||
fs = import('fs')
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
|
||||
@@ -18,7 +19,14 @@ libgmodule_dep = dependency('gmodule-2.0')
|
||||
|
||||
libcanberra_dep = dependency('libcanberra', version: '>= 0.22',
|
||||
required: get_option('libcanberra'))
|
||||
dbus_glib_dep = dependency('dbus-glib-1', required: get_option('dbus'))
|
||||
dbus_required = get_option('dbus')
|
||||
if host_machine.system() == 'darwin'
|
||||
if dbus_required.enabled()
|
||||
warning('dbus-glib is not available on macOS; disabling DBus support')
|
||||
endif
|
||||
dbus_required = false
|
||||
endif
|
||||
dbus_glib_dep = dependency('dbus-glib-1', required: dbus_required)
|
||||
|
||||
global_deps = []
|
||||
if cc.get_id() == 'msvc'
|
||||
@@ -28,6 +36,82 @@ else
|
||||
required: get_option('tls'))
|
||||
endif
|
||||
|
||||
darwin_arch_sanity_check = get_option('darwin-arch-sanity-check')
|
||||
if host_machine.system() == 'darwin' and darwin_arch_sanity_check
|
||||
darwin_arch_sanity_check_env = run_command('sh', '-c', 'printf %s "$ZOITECHAT_DARWIN_ARCH_SANITY_CHECK"', check: false).stdout().strip().to_lower()
|
||||
if ['0', 'false', 'no', 'off'].contains(darwin_arch_sanity_check_env)
|
||||
darwin_arch_sanity_check = false
|
||||
endif
|
||||
endif
|
||||
|
||||
if host_machine.system() == 'darwin' and darwin_arch_sanity_check
|
||||
cflags_env = run_command('sh', '-c', 'printf %s "$CFLAGS"', check: false).stdout().strip()
|
||||
ldflags_env = run_command('sh', '-c', 'printf %s "$LDFLAGS"', check: false).stdout().strip()
|
||||
c_args_opt = ' ' + ' '.join(get_option('c_args')) + ' '
|
||||
c_link_args_opt = ' ' + ' '.join(get_option('c_link_args')) + ' '
|
||||
all_cflags = cflags_env + ' ' + c_args_opt
|
||||
all_ldflags = ldflags_env + ' ' + c_link_args_opt
|
||||
pkgconfig_glib = run_command('pkg-config', '--libs-only-L', 'glib-2.0', check: false)
|
||||
|
||||
targeting_x86_64 = all_cflags.contains('-arch x86_64') or all_ldflags.contains('-arch x86_64')
|
||||
targeting_arm64 = all_cflags.contains('-arch arm64') or all_ldflags.contains('-arch arm64')
|
||||
targeting_universal = targeting_x86_64 and targeting_arm64
|
||||
using_arm_homebrew = pkgconfig_glib.returncode() == 0 and pkgconfig_glib.stdout().contains('/opt/homebrew/')
|
||||
|
||||
if targeting_x86_64 and not targeting_universal and using_arm_homebrew
|
||||
error('Detected x86_64 build flags (-arch x86_64) while pkg-config resolves glib from /opt/homebrew (arm64). ' +
|
||||
'Use arm64 build flags with /opt/homebrew, use a universal build (-arch arm64 -arch x86_64) with universal dependencies, or run an x86_64/Rosetta environment with an x86_64 dependency stack (typically /usr/local). ' +
|
||||
'To bypass this safety check, configure with -Ddarwin-arch-sanity-check=false or set ZOITECHAT_DARWIN_ARCH_SANITY_CHECK=0.')
|
||||
endif
|
||||
|
||||
if targeting_x86_64
|
||||
# When building x86_64-only or universal binaries on Apple Silicon,
|
||||
# pkg-config can still resolve arm64-only Homebrew libraries.
|
||||
# Detect this at configure time and fail fast with a clear message.
|
||||
macos_link_deps = [
|
||||
['gio-2.0', 'libgio-2.0.dylib'],
|
||||
['gobject-2.0', 'libgobject-2.0.dylib'],
|
||||
['glib-2.0', 'libglib-2.0.dylib'],
|
||||
['gmodule-2.0', 'libgmodule-2.0.dylib'],
|
||||
['openssl', 'libssl.dylib'],
|
||||
['openssl', 'libcrypto.dylib'],
|
||||
['libintl', 'libintl.dylib'],
|
||||
]
|
||||
|
||||
foreach dep_spec : macos_link_deps
|
||||
dep_pkg = dep_spec[0]
|
||||
dep_lib = dep_spec[1]
|
||||
dep_libdir_cmd = run_command('pkg-config', '--libs-only-L', dep_pkg, check: false)
|
||||
if dep_libdir_cmd.returncode() != 0
|
||||
continue
|
||||
endif
|
||||
|
||||
foreach dep_libdir_arg : dep_libdir_cmd.stdout().strip().split()
|
||||
if not dep_libdir_arg.startswith('-L')
|
||||
continue
|
||||
endif
|
||||
|
||||
dep_lib_path = join_paths(dep_libdir_arg.substring(2), dep_lib)
|
||||
if not fs.exists(dep_lib_path)
|
||||
continue
|
||||
endif
|
||||
|
||||
dep_archs = run_command('lipo', '-archs', dep_lib_path, check: false)
|
||||
if dep_archs.returncode() != 0
|
||||
continue
|
||||
endif
|
||||
|
||||
if not dep_archs.stdout().contains('x86_64')
|
||||
error('Detected x86_64 build flags, but dependency ' + dep_lib_path +
|
||||
' does not contain x86_64 architecture (archs: ' + dep_archs.stdout().strip() + '). ' +
|
||||
'Use dependencies that include x86_64 (or universal) slices, or build only arm64. ' +
|
||||
'To bypass this safety check, configure with -Ddarwin-arch-sanity-check=false or set ZOITECHAT_DARWIN_ARCH_SANITY_CHECK=0.')
|
||||
endif
|
||||
endforeach
|
||||
endforeach
|
||||
endif
|
||||
endif
|
||||
|
||||
config_h = configuration_data()
|
||||
config_h.set_quoted('PACKAGE_VERSION', meson.project_version())
|
||||
config_h.set_quoted('PACKAGE_NAME', meson.project_name())
|
||||
@@ -42,7 +126,6 @@ config_h.set('USE_OPENSSL', libssl_dep.found())
|
||||
config_h.set('USE_LIBCANBERRA', libcanberra_dep.found())
|
||||
config_h.set('USE_DBUS', dbus_glib_dep.found())
|
||||
config_h.set('USE_PLUGIN', get_option('plugin'))
|
||||
config_h.set('USE_GTK_FRONTEND', get_option('gtk-frontend'))
|
||||
|
||||
config_h.set('G_DISABLE_SINGLE_INCLUDES', true)
|
||||
config_h.set('GTK_DISABLE_DEPRECATED', true)
|
||||
@@ -178,7 +261,6 @@ if meson.version().version_compare('>= 0.55.0')
|
||||
}, section: 'Directories')
|
||||
|
||||
summary({
|
||||
'GTK Frontend': get_option('gtk-frontend') ? 'enabled (GTK+ 3.22+)' : 'disabled',
|
||||
'TLS (openssl)': libssl_dep.found(),
|
||||
'Plugin Support': get_option('plugin'),
|
||||
'DBus Support': dbus_glib_dep.found(),
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
option('gtk-frontend', type: 'boolean',
|
||||
description: 'Main graphical interface'
|
||||
)
|
||||
option('gtk3', type: 'boolean', value: false,
|
||||
description: 'Build GTK frontend against GTK 3'
|
||||
)
|
||||
option('text-frontend', type: 'boolean', value: false,
|
||||
description: 'Text interface (not generally useful)'
|
||||
)
|
||||
@@ -19,8 +22,8 @@ option('dbus', type: 'feature', value: 'auto',
|
||||
option('libcanberra', type: 'feature', value: 'auto',
|
||||
description: 'Support for sound alerts, Unix only'
|
||||
)
|
||||
option('appindicator', type: 'feature', value: 'auto',
|
||||
description: 'Use Ayatana/AppIndicator-based tray backend for GTK frontend (non-Windows only)'
|
||||
option('darwin-arch-sanity-check', type: 'boolean', value: true,
|
||||
description: 'Fail fast when macOS build flags and Homebrew dependency architectures are mixed'
|
||||
)
|
||||
|
||||
# Install options
|
||||
|
||||
@@ -3,16 +3,24 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import shutil
|
||||
|
||||
prefix = os.environ.get('MESON_INSTALL_PREFIX', '/usr/local')
|
||||
datadir = os.path.join(prefix, 'share')
|
||||
|
||||
# Packaging tools define DESTDIR and this isn't needed for them
|
||||
if 'DESTDIR' not in os.environ:
|
||||
def run_if_available(command, *args):
|
||||
if shutil.which(command) is None:
|
||||
print(f'Skipping {command}: command not found')
|
||||
return
|
||||
|
||||
subprocess.call([command, *args])
|
||||
|
||||
print('Updating icon cache...')
|
||||
subprocess.call(['gtk-update-icon-cache', '-qtf',
|
||||
os.path.join(datadir, 'icons', 'hicolor')])
|
||||
run_if_available('gtk-update-icon-cache', '-qtf',
|
||||
os.path.join(datadir, 'icons', 'hicolor'))
|
||||
|
||||
print('Updating desktop database...')
|
||||
subprocess.call(['update-desktop-database', '-q',
|
||||
os.path.join(datadir, 'applications')])
|
||||
run_if_available('update-desktop-database', '-q',
|
||||
os.path.join(datadir, 'applications'))
|
||||
|
||||
207
osx/DEBUGGING.md
Normal file
207
osx/DEBUGGING.md
Normal file
@@ -0,0 +1,207 @@
|
||||
# Debugging ZoiteChat on macOS (Xcode + CLI)
|
||||
|
||||
If the unsigned `.app` launches but does nothing (or immediately exits), use the steps below to get actionable logs and a debugger session.
|
||||
|
||||
## 1) Build with debug symbols
|
||||
|
||||
ZoiteChat uses Meson. Build a debug configuration first so LLDB can show useful backtraces.
|
||||
|
||||
```bash
|
||||
meson setup build-macos-debug --buildtype=debug
|
||||
meson compile -C build-macos-debug
|
||||
```
|
||||
|
||||
This project default is `debugoptimized`, but a full `debug` build is better while diagnosing crashes/startup issues.
|
||||
|
||||
## 2) Bundle the app and verify deployment target
|
||||
|
||||
Use the existing bundle script:
|
||||
|
||||
```bash
|
||||
cd osx
|
||||
./makebundle.sh
|
||||
```
|
||||
|
||||
The generated `Info.plist` should keep:
|
||||
|
||||
- `LSMinimumSystemVersion = 11.0`
|
||||
|
||||
That is the project’s explicit minimum runtime target for macOS 11+.
|
||||
|
||||
## 3) Sanity-check the Mach-O binary in the bundle
|
||||
|
||||
Confirm architecture(s), deployment target, and linked libraries:
|
||||
|
||||
```bash
|
||||
file ZoiteChat.app/Contents/MacOS/ZoiteChat-bin
|
||||
otool -l ZoiteChat.app/Contents/MacOS/ZoiteChat-bin | rg -n "LC_BUILD_VERSION|minos|sdk"
|
||||
otool -L ZoiteChat.app/Contents/MacOS/ZoiteChat-bin
|
||||
```
|
||||
|
||||
For widest compatibility, build universal (`arm64` + `x86_64`) or build separately per arch and test each on matching hosts.
|
||||
|
||||
## 4) Ad-hoc sign for local debugging
|
||||
|
||||
Unsigned GUI binaries can fail in unhelpful ways because of hardened runtime/quarantine/Gatekeeper interactions. For local debugging, ad-hoc sign the app:
|
||||
|
||||
```bash
|
||||
xattr -dr com.apple.quarantine ZoiteChat.app
|
||||
codesign --force --deep --sign - ZoiteChat.app
|
||||
codesign --verify --deep --strict --verbose=2 ZoiteChat.app
|
||||
```
|
||||
|
||||
## 5) Launch from Terminal first (before Xcode)
|
||||
|
||||
Direct launch exposes stdout/stderr and validates the launcher environment:
|
||||
|
||||
```bash
|
||||
./ZoiteChat.app/Contents/MacOS/ZoiteChat
|
||||
```
|
||||
|
||||
The launcher script sets GTK/Pango/GDK environment variables. If direct launch fails, capture that output first.
|
||||
|
||||
## 6) Debug with LLDB (reliable baseline)
|
||||
|
||||
Debug the real executable inside the bundle:
|
||||
|
||||
```bash
|
||||
lldb -- ZoiteChat.app/Contents/MacOS/ZoiteChat-bin
|
||||
(lldb) run
|
||||
(lldb) bt
|
||||
```
|
||||
|
||||
If it exits instantly, set breakpoints on startup entry points (for example `main`) and re-run.
|
||||
|
||||
## 7) Debug with Xcode (if you prefer GUI)
|
||||
|
||||
Xcode works best when opening the executable directly instead of importing build scripts.
|
||||
|
||||
1. **File → Open…** and select `ZoiteChat.app/Contents/MacOS/ZoiteChat-bin`.
|
||||
2. In **Product → Scheme → Edit Scheme…**
|
||||
- Executable: `ZoiteChat-bin`
|
||||
- Working directory: repo root (or `osx/`)
|
||||
- Add environment variables equivalent to the launcher if needed.
|
||||
3. Run under debugger.
|
||||
|
||||
If Xcode “runs” but no UI appears, compare its environment to `osx/launcher.sh` and copy missing GTK-related variables into the scheme.
|
||||
|
||||
## 8) Capture macOS crash diagnostics
|
||||
|
||||
Even if no dialog appears, macOS usually logs termination reasons:
|
||||
|
||||
```bash
|
||||
log stream --style compact --predicate 'process == "ZoiteChat-bin"'
|
||||
```
|
||||
|
||||
Also check:
|
||||
|
||||
- `~/Library/Logs/DiagnosticReports/`
|
||||
|
||||
## 9) Frequent root causes for “silent” startup failures
|
||||
|
||||
- Missing GTK runtime libraries in app bundle (`otool -L` shows unresolved paths).
|
||||
- Incorrect `@rpath`/install names after bundling.
|
||||
- Running under Rosetta mismatch (x86_64 binary with arm64-only deps or vice versa).
|
||||
- Quarantine/signature issues on unsigned artifacts.
|
||||
- Missing `GDK_PIXBUF_MODULE_FILE`, `GTK_IM_MODULE_FILE`, or schema paths.
|
||||
|
||||
|
||||
### "Bad CPU type in executable"
|
||||
|
||||
This means the bundled `ZoiteChat-bin` architecture does not match the Mac you are running on.
|
||||
|
||||
- Intel Mac requires `x86_64`
|
||||
- Apple Silicon requires `arm64` (or Rosetta + `x86_64`)
|
||||
|
||||
Check the binary quickly:
|
||||
|
||||
```bash
|
||||
file ZoiteChat.app/Contents/MacOS/ZoiteChat-bin
|
||||
```
|
||||
|
||||
Build for Intel explicitly when needed:
|
||||
|
||||
```bash
|
||||
export CFLAGS="-arch x86_64"
|
||||
export LDFLAGS="-arch x86_64"
|
||||
meson setup build-macos-intel --buildtype=debug
|
||||
meson compile -C build-macos-intel
|
||||
```
|
||||
|
||||
If your dependency stack supports it, build universal (`arm64` + `x86_64`) and verify with `lipo -info`.
|
||||
|
||||
### Linker says `found architecture 'arm64', required architecture 'x86_64'`
|
||||
|
||||
If you see warnings like this during `meson compile`:
|
||||
|
||||
```text
|
||||
ld: warning: ignoring file '/opt/homebrew/.../libgio-2.0.dylib': found architecture 'arm64', required architecture 'x86_64'
|
||||
Undefined symbols for architecture x86_64: ...
|
||||
```
|
||||
|
||||
your compile target architecture and dependency architecture do not match.
|
||||
|
||||
On Apple Silicon, this usually means you are trying to build `x86_64` while linking against ARM Homebrew libraries from `/opt/homebrew`.
|
||||
|
||||
Quick checks:
|
||||
|
||||
```bash
|
||||
echo "$CFLAGS" "$LDFLAGS"
|
||||
pkg-config --libs glib-2.0
|
||||
lipo -info "$(brew --prefix glib)/lib/libglib-2.0.dylib"
|
||||
```
|
||||
|
||||
Use one of these consistent setups:
|
||||
|
||||
- Native Apple Silicon build (`arm64`) with `/opt/homebrew` dependencies.
|
||||
- Intel build (`x86_64`) with an x86_64 dependency stack (typically Homebrew under `/usr/local` run under Rosetta).
|
||||
|
||||
Example x86_64 setup on Apple Silicon:
|
||||
|
||||
```bash
|
||||
# Open a Rosetta shell first (or prefix commands with `arch -x86_64`)
|
||||
arch -x86_64 /bin/bash -lc '
|
||||
export PATH="/usr/local/bin:$PATH"
|
||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig"
|
||||
export CFLAGS="-arch x86_64"
|
||||
export LDFLAGS="-arch x86_64"
|
||||
meson setup build-macos-x86_64 --prefix="/usr/local"
|
||||
meson compile -C build-macos-x86_64
|
||||
'
|
||||
```
|
||||
|
||||
If you do not specifically need Intel compatibility, remove any forced `-arch x86_64` flags and build native `arm64`.
|
||||
|
||||
Example with this repo's scripts:
|
||||
|
||||
```bash
|
||||
PREFIX="$(brew --prefix)"
|
||||
|
||||
CFLAGS="-arch arm64" LDFLAGS="-arch arm64" meson setup build-macos-arm64 --prefix="$PREFIX"
|
||||
CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" meson setup build-macos-x86_64 --prefix="$PREFIX"
|
||||
|
||||
CFLAGS="-arch arm64" LDFLAGS="-arch arm64" meson compile -C build-macos-arm64
|
||||
CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" meson compile -C build-macos-x86_64
|
||||
|
||||
sudo meson install -C build-macos-arm64
|
||||
|
||||
cd osx
|
||||
UNIVERSAL=1 \
|
||||
UNIVERSAL_BINARIES="../build-macos-arm64/src/fe-gtk/zoitechat ../build-macos-x86_64/src/fe-gtk/zoitechat" \
|
||||
./makebundle.sh
|
||||
```
|
||||
|
||||
## 10) Recommended compatibility settings for macOS 11+
|
||||
|
||||
- Keep `LSMinimumSystemVersion` at `11.0`.
|
||||
- Build on the oldest macOS SDK/toolchain that still supports your dependencies, or explicitly set:
|
||||
|
||||
```bash
|
||||
export MACOSX_DEPLOYMENT_TARGET=11.0
|
||||
```
|
||||
|
||||
- Verify with `otool -l` that `minos` is actually `11.0` in the final executable.
|
||||
|
||||
---
|
||||
|
||||
If you want, we can add an Xcode scheme file to this repo that mirrors `osx/launcher.sh` so “Run” in Xcode behaves exactly like launching the app bundle from Finder/Terminal.
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>zoitechat.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.zoitechat</string>
|
||||
<string>net.zoite.Zoitechat</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@@ -41,6 +41,6 @@
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.4</string>
|
||||
<string>11.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if test "x$GTK_DEBUG_LAUNCHER" != x; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
if test "x$GTK_DEBUG_GDB" != x; then
|
||||
EXEC="gdb --args"
|
||||
EXEC_PREFIX=(gdb --args)
|
||||
else
|
||||
EXEC=exec
|
||||
EXEC_PREFIX=()
|
||||
fi
|
||||
|
||||
name=`basename "$0"`
|
||||
@@ -23,25 +23,34 @@ bundle_data="$bundle_res"/share
|
||||
bundle_etc="$bundle_res"/etc
|
||||
|
||||
export PREFIX="$bundle_res"
|
||||
export DYLD_LIBRARY_PATH="$bundle_lib"
|
||||
|
||||
# launcher-script: runtime environment for bundled GTK3 on macOS.
|
||||
# Expected package prefixes when building the app bundle:
|
||||
# Homebrew: /opt/homebrew (Apple Silicon) or /usr/local (Intel)
|
||||
# MacPorts: /opt/local
|
||||
# Required libraries include GTK3, Pango, GDK-Pixbuf and enchant.
|
||||
|
||||
# Keep DYLD path hacks to a minimum; install_name_tool should resolve most libs.
|
||||
if test -n "${DYLD_LIBRARY_PATH:-}"; then
|
||||
export DYLD_LIBRARY_PATH="$bundle_lib:$DYLD_LIBRARY_PATH"
|
||||
fi
|
||||
|
||||
export XDG_CONFIG_DIRS="$bundle_etc"/xdg
|
||||
export XDG_DATA_DIRS="$bundle_data"
|
||||
export GTK_DATA_PREFIX="$bundle_res"
|
||||
export GTK_EXE_PREFIX="$bundle_res"
|
||||
export GTK_PATH="$bundle_res"
|
||||
|
||||
export GTK_THEME="Mac"
|
||||
export GTK_KEY_THEME="Mac"
|
||||
export GTK_IM_MODULE_FILE="$bundle_etc/gtk-3.0/gtk.immodules"
|
||||
export GDK_PIXBUF_MODULE_FILE="$bundle_etc/gtk-3.0/gdk-pixbuf.loaders"
|
||||
export PANGO_LIBDIR="$bundle_lib"
|
||||
export PANGO_SYSCONFDIR="$bundle_etc"
|
||||
export GSETTINGS_SCHEMA_DIR="$bundle_data/glib-2.0/schemas"
|
||||
|
||||
export OPENSSL_CONF="/System/Library/OpenSSL/openssl.cnf"
|
||||
|
||||
export ZOITECHAT_LIBDIR="$bundle_lib/zoitechat/plugins"
|
||||
|
||||
APP=name
|
||||
APP=zoitechat
|
||||
I18NDIR="$bundle_data/locale"
|
||||
# Set the locale-related variables appropriately:
|
||||
unset LANG LC_MESSAGES LC_MONETARY LC_COLLATE
|
||||
@@ -49,7 +58,7 @@ unset LANG LC_MESSAGES LC_MONETARY LC_COLLATE
|
||||
# Has a language ordering been set?
|
||||
# If so, set LC_MESSAGES and LANG accordingly; otherwise skip it.
|
||||
# First step uses sed to clean off the quotes and commas, to change - to _, and change the names for the chinese scripts from "Hans" to CN and "Hant" to TW.
|
||||
APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages | sed -En -e 's/\-/_/' -e 's/Hant/TW/' -e 's/Hans/CN/' -e 's/[[:space:]]*\"?([[:alnum:]_]+)\"?,?/\1/p' `
|
||||
APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages 2>/dev/null | sed -En -e 's/\-/_/' -e 's/Hant/TW/' -e 's/Hans/CN/' -e 's/[[:space:]]*\"?([[:alnum:]_]+)\"?,?/\1/p' `
|
||||
if test "$APPLELANGUAGES"; then
|
||||
# A language ordering exists.
|
||||
# Test, item per item, to see whether there is an corresponding locale.
|
||||
@@ -80,26 +89,26 @@ fi
|
||||
unset APPLELANGUAGES L
|
||||
|
||||
# If we didn't get a language from the language list, try the Collation preference, in case it's the only setting that exists.
|
||||
APPLECOLLATION=`defaults read .GlobalPreferences AppleCollationOrder`
|
||||
if test -z ${LANG} -a -n $APPLECOLLATION; then
|
||||
APPLECOLLATION=`defaults read .GlobalPreferences AppleCollationOrder 2>/dev/null || true`
|
||||
if test -z "${LANG:-}" -a -n "${APPLECOLLATION:-}"; then
|
||||
if test -f "$I18NDIR/${APPLECOLLATION:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG=${APPLECOLLATION:0:2}
|
||||
fi
|
||||
fi
|
||||
if test ! -z $APPLECOLLATION; then
|
||||
if test -n "${APPLECOLLATION:-}"; then
|
||||
export LC_COLLATE=$APPLECOLLATION
|
||||
fi
|
||||
unset APPLECOLLATION
|
||||
|
||||
# Continue by attempting to find the Locale preference.
|
||||
APPLELOCALE=`defaults read .GlobalPreferences AppleLocale`
|
||||
APPLELOCALE=`defaults read .GlobalPreferences AppleLocale 2>/dev/null || true`
|
||||
|
||||
if test -f "$I18NDIR/${APPLELOCALE:0:5}/LC_MESSAGES/$APP.mo"; then
|
||||
if test -z $LANG; then
|
||||
if test -z "${LANG:-}"; then
|
||||
export LANG="${APPLELOCALE:0:5}"
|
||||
fi
|
||||
|
||||
elif test -z $LANG -a -f "$I18NDIR/${APPLELOCALE:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
elif test -z "${LANG:-}" -a -f "$I18NDIR/${APPLELOCALE:0:2}/LC_MESSAGES/$APP.mo"; then
|
||||
export LANG="${APPLELOCALE:0:2}"
|
||||
fi
|
||||
|
||||
@@ -107,20 +116,20 @@ fi
|
||||
#5-character locale to avoid the "Locale not supported by C library"
|
||||
#warning from Gtk -- even though Gtk will translate with a
|
||||
#two-character code.
|
||||
if test -n $LANG; then
|
||||
if test -n "${LANG:-}"; then
|
||||
#If the language code matches the applelocale, then that's the message
|
||||
#locale; otherwise, if it's longer than two characters, then it's
|
||||
#probably a good message locale and we'll go with it.
|
||||
if test $LANG == ${APPLELOCALE:0:5} -o $LANG != ${LANG:0:2}; then
|
||||
if test "$LANG" = "${APPLELOCALE:0:5}" -o "$LANG" != "${LANG:0:2}"; then
|
||||
export LC_MESSAGES=$LANG
|
||||
#Next try if the Applelocale is longer than 2 chars and the language
|
||||
#bit matches $LANG
|
||||
elif test $LANG == ${APPLELOCALE:0:2} -a $APPLELOCALE > ${APPLELOCALE:0:2}; then
|
||||
elif test "$LANG" = "${APPLELOCALE:0:2}" -a "$APPLELOCALE" \> "${APPLELOCALE:0:2}"; then
|
||||
export LC_MESSAGES=${APPLELOCALE:0:5}
|
||||
#Fail. Get a list of the locales in $PREFIX/share/locale that match
|
||||
#our two letter language code and pick the first one, special casing
|
||||
#english to set en_US
|
||||
elif test $LANG == "en"; then
|
||||
elif test "$LANG" = "en"; then
|
||||
export LC_MESSAGES="en_US"
|
||||
else
|
||||
LOC=`find $PREFIX/share/locale -name $LANG???`
|
||||
@@ -172,4 +181,18 @@ if /bin/expr "x$1" : '^x-psn_' > /dev/null; then
|
||||
shift 1
|
||||
fi
|
||||
|
||||
$EXEC "$bundle_contents/MacOS/$name-bin" "$@" $EXTRA_ARGS
|
||||
BIN_PATH="$bundle_contents/MacOS/$name-bin"
|
||||
if test ${#EXEC_PREFIX[@]} -gt 0; then
|
||||
"${EXEC_PREFIX[@]}" "$BIN_PATH" "$@" $EXTRA_ARGS
|
||||
else
|
||||
"$BIN_PATH" "$@" $EXTRA_ARGS
|
||||
fi
|
||||
status=$?
|
||||
if test "$status" -eq 126; then
|
||||
echo "error: $BIN_PATH could not execute on this Mac (possible architecture mismatch)." >&2
|
||||
if command -v file >/dev/null 2>&1; then
|
||||
file "$BIN_PATH" >&2 || true
|
||||
fi
|
||||
echo "hint: build ZoiteChat for this architecture (x86_64 on Intel, arm64 on Apple Silicon) or as a universal binary." >&2
|
||||
fi
|
||||
exit "$status"
|
||||
|
||||
@@ -1,9 +1,210 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -rf ZoiteChat.app
|
||||
rm -f *.app.zip
|
||||
set -eu
|
||||
|
||||
python $HOME/.local/bin/gtk-mac-bundler zoitechat.bundle
|
||||
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
BUNDLE_DEF="zoitechat.bundle"
|
||||
APP_NAME="ZoiteChat.app"
|
||||
|
||||
HOST_ARCH="$(uname -m 2>/dev/null || echo unknown)"
|
||||
if [ -z "${TARGET_ARCHES+x}" ]; then
|
||||
TARGET_ARCHES="$HOST_ARCH"
|
||||
fi
|
||||
UNIVERSAL_BINARIES="${UNIVERSAL_BINARIES:-}"
|
||||
UNIVERSAL_BUILD_DIRS="${UNIVERSAL_BUILD_DIRS:-../build-macos-arm64 ../build-macos-x86_64}"
|
||||
|
||||
if [ "${UNIVERSAL:-0}" = "1" ]; then
|
||||
TARGET_ARCHES="arm64 x86_64"
|
||||
fi
|
||||
|
||||
# Expected prefixes for macOS GTK dependencies:
|
||||
# - Homebrew: /opt/homebrew (Apple Silicon) or /usr/local (Intel)
|
||||
# - MacPorts: /opt/local
|
||||
# Required runtime stack includes GTK3, Pango, GDK-Pixbuf and enchant.
|
||||
|
||||
if command -v gtk-mac-bundler >/dev/null 2>&1; then
|
||||
BUNDLER_CMD="gtk-mac-bundler"
|
||||
elif command -v python3 >/dev/null 2>&1 && python3 -c 'import gtk_mac_bundler' >/dev/null 2>&1; then
|
||||
BUNDLER_CMD="python3 -m gtk_mac_bundler"
|
||||
else
|
||||
cat >&2 <<'MSG'
|
||||
error: gtk-mac-bundler not found.
|
||||
Install one of the following before running osx/makebundle.sh:
|
||||
- executable: gtk-mac-bundler
|
||||
- python module: gtk_mac_bundler (invoked via: python3 -m gtk_mac_bundler)
|
||||
MSG
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$APP_NAME"
|
||||
rm -f ./*.app.zip
|
||||
|
||||
# Enchant packaging changed between releases/package managers:
|
||||
# - some installs provide share/enchant
|
||||
# - others provide share/enchant-2
|
||||
# - some have no share-level config dir at all
|
||||
# Keep the bundle definition in sync with what's actually available so
|
||||
# gtk-mac-bundler doesn't fail on a missing source path.
|
||||
|
||||
# Resolve package-manager prefix dynamically so Intel (/usr/local) and
|
||||
# Apple Silicon (/opt/homebrew) hosts both bundle correctly.
|
||||
BUNDLE_PREFIX="${BUNDLE_PREFIX:-}"
|
||||
if [ -z "$BUNDLE_PREFIX" ] && command -v brew >/dev/null 2>&1; then
|
||||
BUNDLE_PREFIX="$(brew --prefix 2>/dev/null || true)"
|
||||
fi
|
||||
if [ -z "$BUNDLE_PREFIX" ]; then
|
||||
BUNDLE_PREFIX="/usr/local"
|
||||
fi
|
||||
|
||||
# Keep a caller-provided trailing slash so gtk-mac-bundler path concatenation
|
||||
# does not produce malformed locale paths like ".../x86_64locale/...".
|
||||
# CI explicitly sets BUNDLE_PREFIX with a trailing slash.
|
||||
BUNDLE_PREFIX_XML="$BUNDLE_PREFIX"
|
||||
|
||||
ENCHANT_PREFIX_DEFAULT="${BUNDLE_PREFIX}/opt/enchant"
|
||||
ENCHANT_PREFIX_PATH="${ENCHANT_PREFIX:-$ENCHANT_PREFIX_DEFAULT}"
|
||||
|
||||
perl -0pi -e 's|(<prefix\s+name="default">)[^<]+(</prefix>)|$1'"$BUNDLE_PREFIX_XML"'$2|s' "$BUNDLE_DEF"
|
||||
perl -0pi -e 's|(<prefix\s+name="enchant">)[^<]+(</prefix>)|$1'"$ENCHANT_PREFIX_PATH"'$2|s' "$BUNDLE_DEF"
|
||||
|
||||
if command -v brew >/dev/null 2>&1; then
|
||||
BREW_ENCHANT_PREFIX="$(brew --prefix enchant 2>/dev/null || true)"
|
||||
if [ -n "$BREW_ENCHANT_PREFIX" ]; then
|
||||
ENCHANT_PREFIX_PATH="$BREW_ENCHANT_PREFIX"
|
||||
perl -0pi -e 's|(<prefix\s+name="enchant">)[^<]+(</prefix>)|$1'"$ENCHANT_PREFIX_PATH"'$2|s' "$BUNDLE_DEF"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$ENCHANT_PREFIX_PATH" ]; then
|
||||
if [ -d "$ENCHANT_PREFIX_PATH/share/enchant" ]; then
|
||||
perl -0pi -e 's|(<data>\s*)\$\{prefix:enchant\}/share/enchant(?:-2)?(\s*</data>)|$1\$\{prefix:enchant\}/share/enchant$2|s' "$BUNDLE_DEF"
|
||||
elif [ -d "$ENCHANT_PREFIX_PATH/share/enchant-2" ]; then
|
||||
perl -0pi -e 's|(<data>\s*)\$\{prefix:enchant\}/share/enchant(?:-2)?(\s*</data>)|$1\$\{prefix:enchant\}/share/enchant-2$2|s' "$BUNDLE_DEF"
|
||||
else
|
||||
perl -0pi -e 's|\n\s*<data>\s*\$\{prefix:enchant\}/share/enchant(?:-2)?\s*</data>\n|\n|s' "$BUNDLE_DEF"
|
||||
fi
|
||||
fi
|
||||
|
||||
# GTK module extension differs across package manager builds:
|
||||
# - Homebrew commonly installs .dylib modules
|
||||
# - Some environments still ship .so modules
|
||||
# Detect what exists in the staged prefix and rewrite the bundle definition
|
||||
# so gtk-mac-bundler does not fail on a missing glob.
|
||||
GTK_MODULE_EXT="so"
|
||||
if find "$BUNDLE_PREFIX/lib/gtk-3.0" -type f \( -path '*/immodules/*.dylib' -o -path '*/printbackends/*.dylib' \) -print -quit 2>/dev/null | grep -q . \
|
||||
|| find "$BUNDLE_PREFIX/lib/gdk-pixbuf-2.0" -type f -path '*/loaders/*.dylib' -print -quit 2>/dev/null | grep -q .; then
|
||||
GTK_MODULE_EXT="dylib"
|
||||
fi
|
||||
if [ "$GTK_MODULE_EXT" = "dylib" ]; then
|
||||
perl -0pi -e 's|(/immodules/)\*\.so|$1*.dylib|g; s|(/printbackends/)\*\.so|$1*.dylib|g; s|(/loaders/)\*\.so|$1*.dylib|g' "$BUNDLE_DEF"
|
||||
else
|
||||
perl -0pi -e 's|(/immodules/)\*\.dylib|$1*.so|g; s|(/printbackends/)\*\.dylib|$1*.so|g; s|(/loaders/)\*\.dylib|$1*.so|g' "$BUNDLE_DEF"
|
||||
fi
|
||||
|
||||
# Some staged builds omit GTK runtime module directories entirely
|
||||
# (for example stripped-down CI artifacts). Remove bundle entries for
|
||||
# missing globs so gtk-mac-bundler does not abort.
|
||||
if ! find "$BUNDLE_PREFIX/lib/gtk-3.0" -type f -path "*/immodules/*.${GTK_MODULE_EXT}" -print -quit 2>/dev/null | grep -q .; then
|
||||
perl -0pi -e 's#\n\s*<binary>\s*\$\{prefix\}/lib/\$\{gtkdir\}/\$\{pkg:\$\{gtk\}:gtk_binary_version\}/immodules/\*\.(?:so|dylib)\s*</binary>\n#\n#g' "$BUNDLE_DEF"
|
||||
fi
|
||||
if ! find "$BUNDLE_PREFIX/lib/gtk-3.0" -type f -path "*/printbackends/*.${GTK_MODULE_EXT}" -print -quit 2>/dev/null | grep -q .; then
|
||||
perl -0pi -e 's#\n\s*<binary>\s*\$\{prefix\}/lib/\$\{gtkdir\}/\$\{pkg:\$\{gtk\}:gtk_binary_version\}/printbackends/\*\.(?:so|dylib)\s*</binary>\n#\n#g' "$BUNDLE_DEF"
|
||||
fi
|
||||
if ! find "$BUNDLE_PREFIX/lib/gdk-pixbuf-2.0" -type f -path "*/loaders/*.${GTK_MODULE_EXT}" -print -quit 2>/dev/null | grep -q .; then
|
||||
perl -0pi -e 's#\n\s*<binary>\s*\$\{prefix\}/lib/gdk-pixbuf-2\.0/\$\{pkg:gdk-pixbuf-2\.0:gdk_pixbuf_binary_version\}/loaders/\*\.(?:so|dylib)\s*</binary>\n#\n#g' "$BUNDLE_DEF"
|
||||
fi
|
||||
|
||||
|
||||
# Keep Info.plist generation deterministic by always rendering from template
|
||||
# using a single, explicit version source.
|
||||
VERSION_STRING="${VERSION:-$(sed -n "s/^ version: '\([^']*\)',$/\1/p" ../meson.build | head -n1)}"
|
||||
if [ -z "$VERSION_STRING" ]; then
|
||||
echo "error: unable to determine VERSION_STRING for Info.plist" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TMP_PLIST="Info.plist.tmp"
|
||||
LC_ALL=C sed "s/@VERSION@/$VERSION_STRING/g" Info.plist.in > "$TMP_PLIST"
|
||||
mv -f "$TMP_PLIST" Info.plist
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
$BUNDLER_CMD "$BUNDLE_DEF"
|
||||
|
||||
if [ ! -d "$APP_NAME" ]; then
|
||||
echo "error: bundler finished but $APP_NAME was not created" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BIN_PATH="$APP_NAME/Contents/MacOS/ZoiteChat-bin"
|
||||
|
||||
if [ "${UNIVERSAL:-0}" = "1" ] && [ -z "$UNIVERSAL_BINARIES" ]; then
|
||||
for build_dir in $UNIVERSAL_BUILD_DIRS; do
|
||||
candidate="$build_dir/src/fe-gtk/zoitechat"
|
||||
if [ -f "$candidate" ]; then
|
||||
UNIVERSAL_BINARIES="${UNIVERSAL_BINARIES:+$UNIVERSAL_BINARIES }$candidate"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$UNIVERSAL_BINARIES" ]; then
|
||||
cat >&2 <<'MSG'
|
||||
error: UNIVERSAL=1 requested, but no source binaries were found.
|
||||
Set UNIVERSAL_BINARIES to one or more architecture-specific zoitechat binaries,
|
||||
or place builds at:
|
||||
../build-macos-arm64/src/fe-gtk/zoitechat
|
||||
../build-macos-x86_64/src/fe-gtk/zoitechat
|
||||
MSG
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$UNIVERSAL_BINARIES" ]; then
|
||||
if ! command -v lipo >/dev/null 2>&1; then
|
||||
echo "error: UNIVERSAL_BINARIES requires lipo, but lipo is unavailable" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for binary in $UNIVERSAL_BINARIES; do
|
||||
if [ ! -f "$binary" ]; then
|
||||
echo "error: universal source binary not found: $binary" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Creating universal ZoiteChat-bin from: $UNIVERSAL_BINARIES"
|
||||
# shellcheck disable=SC2086
|
||||
lipo -create $UNIVERSAL_BINARIES -output "$BIN_PATH"
|
||||
fi
|
||||
|
||||
if command -v lipo >/dev/null 2>&1; then
|
||||
BIN_ARCHS="$(lipo -archs "$BIN_PATH" 2>/dev/null || true)"
|
||||
if [ -z "$BIN_ARCHS" ]; then
|
||||
echo "error: unable to detect architectures for $BIN_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for required_arch in $TARGET_ARCHES; do
|
||||
if ! echo " $BIN_ARCHS " | grep -q " $required_arch "; then
|
||||
cat >&2 <<MSG
|
||||
error: bundled binary architecture mismatch.
|
||||
required: $TARGET_ARCHES
|
||||
actual: $BIN_ARCHS
|
||||
hint: rebuild ZoiteChat-bin with matching architecture(s) before bundling.
|
||||
MSG
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if command -v file >/dev/null 2>&1; then
|
||||
echo "Bundled binary architecture:"
|
||||
file "$BIN_PATH" || true
|
||||
fi
|
||||
|
||||
echo "Compressing bundle"
|
||||
zip -9rXq ./ZoiteChat-$(git describe --tags).app.zip ./ZoiteChat.app
|
||||
ARCHIVE_VERSION="$(git describe --tags --always 2>/dev/null || true)"
|
||||
if [ -z "$ARCHIVE_VERSION" ]; then
|
||||
ARCHIVE_VERSION="$VERSION_STRING"
|
||||
fi
|
||||
zip -9rXq "./ZoiteChat-$ARCHIVE_VERSION.app.zip" "./$APP_NAME"
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Mac
|
||||
gtk-key-theme-name=Mac
|
||||
gtk-menu-images=0
|
||||
gtk-button-images=0
|
||||
@@ -2,12 +2,15 @@
|
||||
<app-bundle>
|
||||
|
||||
<meta>
|
||||
<!-- Expected prefixes:
|
||||
Homebrew: /opt/homebrew (Apple Silicon) or /usr/local (Intel)
|
||||
MacPorts: /opt/local -->
|
||||
<prefix name="default">/usr/local</prefix>
|
||||
<prefix name="enchant">/usr/local/opt/enchant-applespell</prefix>
|
||||
<prefix name="enchant">/usr/local/opt/enchant</prefix>
|
||||
<destination overwrite="yes">${project}</destination>
|
||||
|
||||
<run-install-name-tool/>
|
||||
<launcher-script>${project}/launcher.sh</launcher-script >
|
||||
<run-install-name-tool>yes</run-install-name-tool>
|
||||
<launcher-script>${project}/launcher.sh</launcher-script>
|
||||
<gtk>gtk+-3.0</gtk>
|
||||
</meta>
|
||||
|
||||
@@ -21,35 +24,31 @@
|
||||
${prefix}/lib/zoitechat/plugins/*.so
|
||||
</binary>
|
||||
|
||||
<!-- Enchant 2 runtime layout (Homebrew/MacPorts):
|
||||
- core dylib in lib/
|
||||
- provider modules in lib/enchant-2/ loaded via dlopen()
|
||||
- config files in share/enchant/ -->
|
||||
<binary>
|
||||
${prefix:enchant}/lib/libenchant.dylib
|
||||
${prefix:enchant}/lib/libenchant-2*.dylib
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix:enchant}/lib/enchant/libenchant_applespell.so
|
||||
${prefix:enchant}/lib/enchant-2
|
||||
</binary>
|
||||
<data>
|
||||
${prefix:enchant}/share/enchant
|
||||
</data>
|
||||
|
||||
<!-- GTK3 runtime modules: ${prefix}/lib/${gtkdir} -->
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/modules/*.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/engines/libquartz.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/engines/libxamarin.so
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/immodules/*.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/printbackends/*.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/gdk-pixbuf-2.0/${pkg:${gtk}:gtk_binary_version}/loaders/*.so
|
||||
</binary>
|
||||
<binary>
|
||||
${prefix}/lib/pango/${pkg:pango:pango_module_version}/modules/
|
||||
</binary>
|
||||
<data>
|
||||
${prefix}/share/themes/Mac/gtk-3.0/gtk-keys.css
|
||||
</data>
|
||||
|
||||
<binary>
|
||||
${prefix}/lib/gdk-pixbuf-2.0/${pkg:gdk-pixbuf-2.0:gdk_pixbuf_binary_version}/loaders/*.so
|
||||
</binary>
|
||||
<translations name="gtk30">
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
@@ -57,10 +56,6 @@
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
|
||||
<data dest="${bundle}/Contents/Resources/etc/${gtkdir}/settings.ini">
|
||||
${project}/settings.ini
|
||||
</data>
|
||||
|
||||
<data dest="${bundle}/Contents/Resources">
|
||||
${project}/zoitechat.icns
|
||||
</data>
|
||||
|
||||
Binary file not shown.
@@ -1,70 +0,0 @@
|
||||
# Maintainer: ZoiteChat Maintainers <zoitechat@users.noreply.github.com>
|
||||
|
||||
pkgname=zoitechat-git
|
||||
pkgver=0
|
||||
pkgrel=1
|
||||
pkgdesc='IRC client for GNOME (ZoiteChat development snapshot)'
|
||||
arch=('x86_64')
|
||||
url='https://github.com/zoitechat/zoitechat'
|
||||
license=('GPL-2.0-or-later')
|
||||
depends=(
|
||||
'dbus-glib'
|
||||
'glib2'
|
||||
'gtk3'
|
||||
'iso-codes'
|
||||
'libcanberra'
|
||||
'lua'
|
||||
'openssl'
|
||||
'perl'
|
||||
'python-cffi'
|
||||
)
|
||||
makedepends=(
|
||||
'git'
|
||||
'meson'
|
||||
'ninja'
|
||||
'pkgconf'
|
||||
'python'
|
||||
)
|
||||
optdepends=(
|
||||
'libayatana-appindicator: Ayatana/AppIndicator tray backend'
|
||||
'pciutils: sysinfo plugin hardware detection details'
|
||||
)
|
||||
provides=('zoitechat')
|
||||
conflicts=('zoitechat')
|
||||
|
||||
_repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
source=("zoitechat::git+file://${_repo_root}")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/zoitechat"
|
||||
|
||||
if git describe --long --tags --abbrev=7 >/dev/null 2>&1; then
|
||||
git describe --long --tags --abbrev=7 \
|
||||
| sed 's/^v//' \
|
||||
| sed -E 's/([^-]+)-([0-9]+)-g/\1.r\2.g/' \
|
||||
| sed 's/-/./g'
|
||||
else
|
||||
printf '0.r%s.%s\n' \
|
||||
"$(git rev-list --count HEAD)" \
|
||||
"$(git rev-parse --short=7 HEAD)"
|
||||
fi
|
||||
}
|
||||
|
||||
build() {
|
||||
arch-meson zoitechat build \
|
||||
-Dtext-frontend=false \
|
||||
-Dwith-checksum=true \
|
||||
-Dwith-fishlim=true \
|
||||
-Dwith-lua=lua \
|
||||
-Dwith-perl=perl \
|
||||
-Dwith-python=python3 \
|
||||
-Dwith-sysinfo=true \
|
||||
-Dinstall-plugin-metainfo=true
|
||||
|
||||
meson compile -C build
|
||||
}
|
||||
|
||||
package() {
|
||||
meson install -C build --destdir "$pkgdir"
|
||||
}
|
||||
34
packaging/solus/package.yml
Normal file
34
packaging/solus/package.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
name : zoitechat
|
||||
version : 2.18.0-pre1
|
||||
release : 1
|
||||
source :
|
||||
- https://github.com/ZoiteChat/zoitechat/archive/refs/tags/zoitechat-2.18.0-pre1.tar.gz : 77d787cf00abd533326440eab01ca077c21cdfd2eb56807fc21d6fb70f34ada6
|
||||
homepage : https://zoitechat.zoite.net/
|
||||
license : GPL-2.0-only
|
||||
component : network.irc
|
||||
summary : HexChat-based IRC client
|
||||
description: |
|
||||
ZoiteChat is a HexChat-based IRC client for Windows and UNIX-like systems.
|
||||
builddeps :
|
||||
- pkgconfig(glib-2.0)
|
||||
- pkgconfig(gmodule-2.0)
|
||||
- pkgconfig(gtk+-3.0)
|
||||
- pkgconfig(ayatana-appindicator3-0.1)
|
||||
- pkgconfig(dbus-glib-1)
|
||||
- pkgconfig(libcanberra)
|
||||
- pkgconfig(openssl)
|
||||
- pkgconfig(iso-codes)
|
||||
- meson
|
||||
- ninja
|
||||
- pkgconfig
|
||||
- gcc
|
||||
- gettext
|
||||
setup : |
|
||||
%meson_configure \
|
||||
-Dgtk-frontend=true \
|
||||
-Dgtk3=true \
|
||||
-Dinstall-appdata=true
|
||||
build : |
|
||||
%ninja_build
|
||||
install : |
|
||||
%ninja_install
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include "zoitechat-plugin.h"
|
||||
|
||||
static zoitechat_plugin *ph;
|
||||
static zoitechat_plugin *ph; /* plugin handle */
|
||||
static char name[] = "Checksum";
|
||||
static char desc[] = "Calculate checksum for DCC file transfers";
|
||||
static char version[] = "4.0";
|
||||
@@ -42,14 +42,18 @@ typedef struct {
|
||||
static void
|
||||
print_sha256_result (ChecksumCallbackInfo *info, const char *checksum, const char *filename, GError *error)
|
||||
{
|
||||
// So then we get the next best available channel, since we always want to print at least somewhere, it's fine
|
||||
zoitechat_context *ctx = zoitechat_find_context(ph, info->servername, info->channel);
|
||||
if (!ctx) {
|
||||
// before we print a private message to the wrong channel, we exit early
|
||||
if (info->send_message) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if the context isn't found the first time, we search in the server
|
||||
ctx = zoitechat_find_context(ph, info->servername, NULL);
|
||||
if (!ctx) {
|
||||
// The second time we exit early, since printing in another server isn't desireable
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,10 +27,21 @@
|
||||
<TargetName>hcchecksum</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CHECKSUM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>checksum.def</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;CHECKSUM_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>checksum.def</ModuleDefinitionFile>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
#include "zoitechat-plugin.h"
|
||||
|
||||
static zoitechat_plugin *ph;
|
||||
static zoitechat_plugin *ph; /* plugin handle */
|
||||
static char name[] = "Exec";
|
||||
static char desc[] = "Execute commands inside ZoiteChat";
|
||||
static char version[] = "1.2";
|
||||
@@ -71,7 +71,7 @@ run_command (char *word[], char *word_eol[], void *userdata)
|
||||
strcat (commandLine, word_eol[2]);
|
||||
}
|
||||
|
||||
CreatePipe (&readPipe, &writePipe, &secattr, 0);
|
||||
CreatePipe (&readPipe, &writePipe, &secattr, 0); /* might be replaced with MyCreatePipeEx */
|
||||
|
||||
ZeroMemory (&sInfo, sizeof (sInfo));
|
||||
ZeroMemory (&pInfo, sizeof (pInfo));
|
||||
@@ -91,10 +91,12 @@ run_command (char *word[], char *word_eol[], void *userdata)
|
||||
{
|
||||
if (ReadFile (readPipe, buffer, sizeof (buffer) - 1, &dwRead, NULL) && dwRead != 0 )
|
||||
{
|
||||
/* avoid garbage */
|
||||
buffer[dwRead] = '\0';
|
||||
|
||||
if (announce)
|
||||
{
|
||||
/* Say each line seperately, TODO: improve... */
|
||||
token = strtok_s (buffer, "\n", &context);
|
||||
while (token != NULL)
|
||||
{
|
||||
@@ -108,11 +110,13 @@ run_command (char *word[], char *word_eol[], void *userdata)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* this way we'll more likely get full lines */
|
||||
SleepEx (100, TRUE);
|
||||
}
|
||||
timeElapsed = difftime (time (0), start);
|
||||
}
|
||||
|
||||
/* display a newline to separate things */
|
||||
if (!announce)
|
||||
zoitechat_printf (ph, "\n");
|
||||
|
||||
@@ -145,7 +149,7 @@ zoitechat_plugin_init (zoitechat_plugin *plugin_handle, char **plugin_name, char
|
||||
zoitechat_hook_command (ph, "EXEC", ZOITECHAT_PRI_NORM, run_command, "Usage: /EXEC [-O] - execute commands inside ZoiteChat", 0);
|
||||
zoitechat_printf (ph, "%s plugin loaded\n", name);
|
||||
|
||||
return 1;
|
||||
return 1; /* return 1 for success */
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,6 +27,15 @@
|
||||
<TargetName>hcexec</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXEC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>exec.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;EXEC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
||||
@@ -75,7 +75,7 @@ dh1080_init (void)
|
||||
|
||||
BN_set_word (g, 2);
|
||||
|
||||
#ifndef HAVE_DH_SET0_PQG
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||
g_dh->p = p;
|
||||
g_dh->g = g;
|
||||
#else
|
||||
@@ -163,7 +163,7 @@ dh1080_generate_key (char **priv_key, char **pub_key)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef HAVE_DH_GET0_KEY
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||
dh_pub_key = dh->pub_key;
|
||||
dh_priv_key = dh->priv_key;
|
||||
#else
|
||||
@@ -190,9 +190,6 @@ dh1080_compute_key (const char *priv_key, const char *pub_key, char **secret_key
|
||||
gsize pub_key_len;
|
||||
BIGNUM *pk;
|
||||
DH *dh;
|
||||
#ifdef HAVE_DH_SET0_KEY
|
||||
BIGNUM *temp_pub_key = BN_new();
|
||||
#endif
|
||||
|
||||
g_assert (secret_key != NULL);
|
||||
|
||||
@@ -217,10 +214,10 @@ dh1080_compute_key (const char *priv_key, const char *pub_key, char **secret_key
|
||||
|
||||
priv_key_data = dh1080_decode_b64 (priv_key, &priv_key_len);
|
||||
priv_key_num = BN_bin2bn(priv_key_data, priv_key_len, NULL);
|
||||
#ifndef HAVE_DH_SET0_KEY
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||
dh->priv_key = priv_key_num;
|
||||
#else
|
||||
DH_set0_key (dh, temp_pub_key, priv_key_num);
|
||||
DH_set0_key (dh, NULL, priv_key_num);
|
||||
#endif
|
||||
|
||||
shared_len = DH_compute_key (shared_key, pk, dh);
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,10 +27,21 @@
|
||||
<TargetName>hcfishlim</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FISHLIM_EXPORTS;HAVE_DH_SET0_PQG;HAVE_DH_GET0_KEY;HAVE_DH_SET0_KEY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>fishlim.def</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;FISHLIM_EXPORTS;HAVE_DH_SET0_PQG;HAVE_DH_GET0_KEY;HAVE_DH_SET0_KEY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>fishlim.def</ModuleDefinitionFile>
|
||||
|
||||
@@ -39,11 +39,13 @@ gboolean irc_parse_message(const char *words[],
|
||||
if (prefix) *prefix = NULL;
|
||||
if (command) *command = NULL;
|
||||
|
||||
/* See if the message starts with a prefix (sender user) */
|
||||
if (words[w][0] == ':') {
|
||||
if (prefix) *prefix = &words[w][1];
|
||||
w++;
|
||||
}
|
||||
|
||||
|
||||
/* Check command */
|
||||
if (words[w][0] == '\0') return FALSE;
|
||||
if (command) *command = words[w];
|
||||
w++;
|
||||
@@ -70,9 +72,11 @@ char *irc_prefix_get_nick(const char *prefix) {
|
||||
|
||||
if (!prefix) return NULL;
|
||||
|
||||
/* Find end of nick */
|
||||
end = prefix;
|
||||
while (*end != '\0' && *end != '!' && *end != '@') end++;
|
||||
|
||||
|
||||
/* Allocate string */
|
||||
length = end - prefix;
|
||||
return g_strndup (prefix, length);
|
||||
}
|
||||
|
||||
@@ -277,6 +277,15 @@ char *decrypt_raw_message(const char *message, const char *key) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*static int handle_debug(char *word[], char *word_eol[], void *userdata) {
|
||||
zoitechat_printf(ph, "debug incoming: ");
|
||||
for (size_t i = 1; word[i] != NULL && word[i][0] != '\0'; i++) {
|
||||
zoitechat_printf(ph, ">%s< ", word[i]);
|
||||
}
|
||||
zoitechat_printf(ph, "\n");
|
||||
return ZOITECHAT_EAT_NONE;
|
||||
}*/
|
||||
|
||||
/**
|
||||
* Called when a message is to be sent.
|
||||
*/
|
||||
@@ -802,6 +811,7 @@ int zoitechat_plugin_init(zoitechat_plugin *plugin_handle,
|
||||
zoitechat_hook_server(ph, "NOTICE", ZOITECHAT_PRI_HIGHEST, handle_keyx_notice, NULL);
|
||||
zoitechat_hook_server_attrs(ph, "NOTICE", ZOITECHAT_PRI_NORM, handle_incoming, NULL);
|
||||
zoitechat_hook_server_attrs(ph, "PRIVMSG", ZOITECHAT_PRI_NORM, handle_incoming, NULL);
|
||||
/* zoitechat_hook_server(ph, "RAW LINE", ZOITECHAT_PRI_NORM, handle_debug, NULL); */
|
||||
zoitechat_hook_server_attrs(ph, "TOPIC", ZOITECHAT_PRI_NORM, handle_incoming, NULL);
|
||||
zoitechat_hook_server_attrs(ph, "332", ZOITECHAT_PRI_NORM, handle_incoming, NULL);
|
||||
|
||||
@@ -826,3 +836,4 @@ int zoitechat_plugin_deinit(void) {
|
||||
zoitechat_printf(ph, "%s plugin unloaded\n", plugin_name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1105,8 +1105,6 @@ static int luaopen_zoitechat(lua_State *L)
|
||||
lua_pushinteger(L, ZOITECHAT_PRI_LOWEST); lua_setfield(L, -2, "PRI_LOWEST");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_NONE); lua_setfield(L, -2, "EAT_NONE");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_ZOITECHAT); lua_setfield(L, -2, "EAT_ZOITECHAT");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_ZOITECHAT); lua_setfield(L, -2, "EAT_XCHAT");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_ZOITECHAT); lua_setfield(L, -2, "EAT_HEXCHAT");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_PLUGIN); lua_setfield(L, -2, "EAT_PLUGIN");
|
||||
lua_pushinteger(L, ZOITECHAT_EAT_ALL); lua_setfield(L, -2, "EAT_ALL");
|
||||
|
||||
@@ -1273,13 +1271,6 @@ static void prepare_state(lua_State *L, script_info *info)
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, registry_field);
|
||||
luaopen_zoitechat(L);
|
||||
lua_setglobal(L, "zoitechat");
|
||||
|
||||
lua_getglobal(L, "zoitechat");
|
||||
lua_setglobal(L, "xchat");
|
||||
|
||||
lua_getglobal(L, "zoitechat");
|
||||
lua_setglobal(L, "hexchat");
|
||||
|
||||
lua_getglobal(L, "zoitechat");
|
||||
lua_getfield(L, -1, "print");
|
||||
lua_setglobal(L, "print");
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,6 +27,16 @@
|
||||
<TargetName>$(LuaOutput)</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(Glib);$(LuaInclude);..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>"$(LuaLib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
||||
@@ -22,7 +22,31 @@ if get_option('with-fishlim')
|
||||
subdir('fishlim')
|
||||
endif
|
||||
|
||||
if get_option('with-lua') != 'false'
|
||||
lua_option = get_option('with-lua')
|
||||
if lua_option == 'auto' or lua_option == 'luajit'
|
||||
lua_auto_dep = dependency('luajit', required: false)
|
||||
if not lua_auto_dep.found()
|
||||
lua_auto_dep = dependency('lua-5.4', required: false)
|
||||
endif
|
||||
if not lua_auto_dep.found()
|
||||
lua_auto_dep = dependency('lua5.4', required: false)
|
||||
endif
|
||||
if not lua_auto_dep.found()
|
||||
lua_auto_dep = dependency('lua-5.3', required: false)
|
||||
endif
|
||||
if not lua_auto_dep.found()
|
||||
lua_auto_dep = dependency('lua5.3', required: false)
|
||||
endif
|
||||
if not lua_auto_dep.found()
|
||||
lua_auto_dep = dependency('lua', required: false)
|
||||
endif
|
||||
|
||||
if lua_auto_dep.found()
|
||||
subdir('lua')
|
||||
else
|
||||
warning('LuaJIT/Lua development files not found, disabling Lua plugin')
|
||||
endif
|
||||
elif lua_option != 'false'
|
||||
subdir('lua')
|
||||
endif
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
require ZoiteChat;
|
||||
@@ -53,16 +53,14 @@ sub ZoiteChat::Internal::print;
|
||||
|
||||
#keep compatibility with Xchat scripts
|
||||
sub EAT_XCHAT ();
|
||||
sub EAT_HEXCHAT ();
|
||||
BEGIN {
|
||||
*Xchat:: = *ZoiteChat::;
|
||||
*HexChat:: = *ZoiteChat::;
|
||||
}
|
||||
|
||||
our %EXPORT_TAGS = (
|
||||
constants => [
|
||||
qw(PRI_HIGHEST PRI_HIGH PRI_NORM PRI_LOW PRI_LOWEST), # priorities
|
||||
qw(EAT_NONE EAT_ZOITECHAT EAT_XCHAT EAT_HEXCHAT EAT_PLUGIN EAT_ALL), # callback return values
|
||||
qw(EAT_NONE EAT_ZOITECHAT EAT_XCHAT EAT_PLUGIN EAT_ALL), # callback return values
|
||||
qw(FD_READ FD_WRITE FD_EXCEPTION FD_NOTSOCKET), # fd flags
|
||||
qw(KEEP REMOVE), # timers
|
||||
],
|
||||
|
||||
@@ -4,7 +4,6 @@ zoitechat_perl_module = custom_target('zoitechat-perl-header',
|
||||
input: [
|
||||
'lib/ZoiteChat.pm',
|
||||
'lib/Xchat.pm',
|
||||
'lib/HexChat.pm',
|
||||
'lib/ZoiteChat/Embed.pm',
|
||||
'lib/ZoiteChat/List/Network.pm',
|
||||
'lib/ZoiteChat/List/Network/Entry.pm',
|
||||
@@ -28,9 +27,10 @@ endif
|
||||
|
||||
perl = find_program(get_option('with-perl'))
|
||||
|
||||
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ccopts'])
|
||||
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ccopts'], check: false)
|
||||
if ret.returncode() != 0
|
||||
error('perl: Failed to get cflags')
|
||||
warning('Perl development files not found, disabling Perl plugin')
|
||||
subdir_done()
|
||||
endif
|
||||
foreach flag : ret.stdout().strip().split(' ')
|
||||
if flag.startswith('-I') or flag.startswith('-D')
|
||||
@@ -38,9 +38,10 @@ foreach flag : ret.stdout().strip().split(' ')
|
||||
endif
|
||||
endforeach
|
||||
|
||||
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ldopts'])
|
||||
ret = run_command([perl, '-MExtUtils::Embed', '-e', 'ldopts'], check: false)
|
||||
if ret.returncode() != 0
|
||||
error('perl: Failed to get ldflags')
|
||||
warning('Perl development files not found, disabling Perl plugin')
|
||||
subdir_done()
|
||||
endif
|
||||
perl_ldflags = []
|
||||
perl_rpath = ''
|
||||
@@ -74,7 +75,8 @@ int main(void) {
|
||||
return 0;
|
||||
}
|
||||
''', args: perl_cflags + perl_ldflags)
|
||||
error('found perl not suitable for plugin')
|
||||
warning('Found perl is not suitable for plugin, disabling Perl plugin')
|
||||
subdir_done()
|
||||
endif
|
||||
|
||||
perl_dep = declare_dependency(
|
||||
|
||||
@@ -440,6 +440,8 @@ server_cb (char *word[], char *word_eol[], void *userdata)
|
||||
if (data->depth)
|
||||
return ZOITECHAT_EAT_NONE;
|
||||
|
||||
/* zoitechat_printf (ph, */
|
||||
/* "Received %d words in server callback", av_len (wd)); */
|
||||
PUSHMARK (SP);
|
||||
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
||||
XPUSHs (newRV_noinc ((SV *) array2av (word_eol)));
|
||||
@@ -487,6 +489,8 @@ command_cb (char *word[], char *word_eol[], void *userdata)
|
||||
if (data->depth)
|
||||
return ZOITECHAT_EAT_NONE;
|
||||
|
||||
/* zoitechat_printf (ph, "Received %d words in command callback", */
|
||||
/* av_len (wd)); */
|
||||
PUSHMARK (SP);
|
||||
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
||||
XPUSHs (newRV_noinc ((SV *) array2av (word_eol)));
|
||||
@@ -563,6 +567,7 @@ print_cb (char *word[], void *userdata)
|
||||
}
|
||||
}
|
||||
|
||||
/*zoitechat_printf (ph, "Received %d words in print callback", av_len (wd)+1); */
|
||||
PUSHMARK (SP);
|
||||
XPUSHs (newRV_noinc ((SV *) wd));
|
||||
XPUSHs (data->userdata);
|
||||
@@ -1360,7 +1365,6 @@ xs_init (pTHX)
|
||||
newCONSTSUB (stash, "EAT_NONE", newSViv (ZOITECHAT_EAT_NONE));
|
||||
newCONSTSUB (stash, "EAT_ZOITECHAT", newSViv (ZOITECHAT_EAT_ZOITECHAT));
|
||||
newCONSTSUB (stash, "EAT_XCHAT", newSViv (ZOITECHAT_EAT_ZOITECHAT)); /* for compatibility */
|
||||
newCONSTSUB (stash, "EAT_HEXCHAT", newSViv (ZOITECHAT_EAT_ZOITECHAT)); /* for compatibility */
|
||||
newCONSTSUB (stash, "EAT_PLUGIN", newSViv (ZOITECHAT_EAT_PLUGIN));
|
||||
newCONSTSUB (stash, "EAT_ALL", newSViv (ZOITECHAT_EAT_ALL));
|
||||
newCONSTSUB (stash, "FD_READ", newSViv (ZOITECHAT_FD_READ));
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,6 +27,26 @@
|
||||
<TargetName>hcperl</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PERL520_EXPORTS;HAS_BOOL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(IntDir);..\..\src\common;$(ZoiteChatLib);$(PerlPath)\lib\CORE;$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(IntDir);$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(PerlLib).lib;$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>perl.def</ModuleDefinitionFile>
|
||||
<DelayLoadDLLs>$(PerlLib).dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>"$(GendefPath)\gendef" "$(PerlPath)\bin\$(PerlLib).dll"
|
||||
move $(PerlLib).def "$(IntDir)"
|
||||
lib /nologo /machine:x86 "/def:$(IntDir)$(PerlLib).def" "/out:$(IntDir)\$(PerlLib).lib"
|
||||
"$(PerlPath)\bin\perl.exe" generate_header
|
||||
move irc.pm.h "$(IntDir)"
|
||||
move zoitechat.pm.h "$(IntDir)"</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PERL520_EXPORTS;HAS_BOOL;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
||||
@@ -5,7 +5,7 @@ from contextlib import contextmanager
|
||||
from _zoitechat_embedded import ffi, lib
|
||||
|
||||
__all__ = [
|
||||
'EAT_ALL', 'EAT_ZOITECHAT', 'EAT_NONE', 'EAT_PLUGIN', 'EAT_XCHAT', 'EAT_HEXCHAT',
|
||||
'EAT_ALL', 'EAT_ZOITECHAT', 'EAT_NONE', 'EAT_PLUGIN', 'EAT_XCHAT',
|
||||
'PRI_HIGH', 'PRI_HIGHEST', 'PRI_LOW', 'PRI_LOWEST', 'PRI_NORM',
|
||||
'__doc__', '__version__', 'command', 'del_pluginpref', 'emit_print',
|
||||
'find_context', 'get_context', 'get_info',
|
||||
@@ -22,7 +22,6 @@ __license__ = 'GPL-2.0+'
|
||||
EAT_NONE = 0
|
||||
EAT_ZOITECHAT = 1
|
||||
EAT_XCHAT = EAT_ZOITECHAT
|
||||
EAT_HEXCHAT = EAT_ZOITECHAT
|
||||
EAT_PLUGIN = 2
|
||||
EAT_ALL = EAT_ZOITECHAT | EAT_PLUGIN
|
||||
|
||||
@@ -79,6 +78,7 @@ def emit_print(event_name, *args, **kwargs):
|
||||
return ret
|
||||
|
||||
|
||||
# TODO: this shadows itself. command should be changed to cmd
|
||||
def command(command):
|
||||
lib.zoitechat_command(lib.ph, command.encode())
|
||||
|
||||
@@ -220,6 +220,7 @@ def get_list(name):
|
||||
return ret
|
||||
|
||||
|
||||
# TODO: 'command' here shadows command above, and should be renamed to cmd
|
||||
def hook_command(command, callback, userdata=None, priority=PRI_NORM, help=None):
|
||||
plugin = __get_current_plugin()
|
||||
hook = plugin.add_hook(callback, userdata)
|
||||
|
||||
@@ -5,9 +5,11 @@ import cffi
|
||||
|
||||
builder = cffi.FFI()
|
||||
|
||||
# zoitechat-plugin.h
|
||||
with open(sys.argv[1]) as f:
|
||||
output = []
|
||||
eat_until_endif = 0
|
||||
# This is very specific to zoitechat-plugin.h, it is not a cpp
|
||||
for line in f:
|
||||
if line.startswith('#define'):
|
||||
continue
|
||||
@@ -79,7 +81,9 @@ int zoitechat_plugin_deinit(void)
|
||||
}
|
||||
''')
|
||||
|
||||
# python.py
|
||||
with open(sys.argv[2]) as f:
|
||||
builder.embedding_init_code(f.read())
|
||||
|
||||
# python.c
|
||||
builder.emit_c_code(sys.argv[3])
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
from _zoitechat import *
|
||||
@@ -19,7 +19,7 @@ python3_source = custom_target('python-bindings',
|
||||
command: [find_program('generate_plugin.py'), '@INPUT@', '@OUTPUT@']
|
||||
)
|
||||
|
||||
install_data(['_zoitechat.py', 'zoitechat.py', 'xchat.py', 'hexchat.py'],
|
||||
install_data(['_zoitechat.py', 'zoitechat.py', 'xchat.py'],
|
||||
install_dir: join_paths(get_option('libdir'), 'zoitechat/python')
|
||||
)
|
||||
|
||||
|
||||
@@ -19,11 +19,12 @@ else:
|
||||
if not hasattr(sys, 'argv'):
|
||||
sys.argv = ['<zoitechat>']
|
||||
|
||||
VERSION = b'2.18.0~pre2'
|
||||
VERSION = b'2.18.0-pre1' # Sync with zoitechat.__version__
|
||||
PLUGIN_NAME = ffi.new('char[]', b'Python')
|
||||
PLUGIN_DESC = ffi.new('char[]', b'Python %d.%d scripting interface' % (sys.version_info[0], sys.version_info[1]))
|
||||
PLUGIN_VERSION = ffi.new('char[]', VERSION)
|
||||
|
||||
# TODO: Constants should be screaming snake case
|
||||
zoitechat = None
|
||||
local_interp = None
|
||||
zoitechat_stdout = None
|
||||
@@ -105,6 +106,8 @@ if sys.version_info[0] == 2:
|
||||
return compile(string, '<string>', 'eval', dont_inherit=True)
|
||||
|
||||
except SyntaxError:
|
||||
# For some reason `print` is invalid for eval
|
||||
# This will hide any return value though
|
||||
return compile(string, '<string>', 'exec', dont_inherit=True)
|
||||
else:
|
||||
def compile_file(data, filename):
|
||||
@@ -112,6 +115,7 @@ else:
|
||||
|
||||
|
||||
def compile_line(string):
|
||||
# newline appended to solve unexpected EOF issues
|
||||
return compile(string + '\n', '<string>', 'single', optimize=2, dont_inherit=True)
|
||||
|
||||
|
||||
@@ -196,6 +200,8 @@ else:
|
||||
return string.decode()
|
||||
|
||||
|
||||
# There can be empty entries between non-empty ones so find the actual last value
|
||||
|
||||
def _cstr(ptr):
|
||||
"""Safely convert a C char* (possibly NULL) to bytes."""
|
||||
if ptr == ffi.NULL:
|
||||
@@ -206,6 +212,7 @@ def _cstr(ptr):
|
||||
return b''
|
||||
|
||||
def wordlist_len(words):
|
||||
# ZoiteChat passes a fixed-size array (typically 32) where unused entries may be NULL.
|
||||
for i in range(31, 0, -1):
|
||||
if _cstr(words[i]):
|
||||
return i
|
||||
@@ -292,8 +299,12 @@ def _on_timer_hook(userdata):
|
||||
return 1
|
||||
|
||||
try:
|
||||
# Avoid calling zoitechat_unhook twice if unnecessary
|
||||
hook.is_unload = True
|
||||
except ReferenceError:
|
||||
# hook is a weak reference, it might have been destroyed by the callback
|
||||
# in which case it has already been removed from hook.plugin.hooks and
|
||||
# we wouldn't be able to test it with h == hook anyway.
|
||||
return 0
|
||||
|
||||
for h in hook.plugin.hooks:
|
||||
@@ -327,9 +338,11 @@ def _on_say_command(word, word_eol, userdata):
|
||||
if not python:
|
||||
return 1
|
||||
|
||||
# Don’t let exceptions here swallow core commands or wedge the UI.
|
||||
try:
|
||||
exec_in_interp(python)
|
||||
except Exception:
|
||||
# Best effort: surface the traceback in the python tab.
|
||||
exc = traceback.format_exc().encode('utf-8', errors='replace')
|
||||
lib.zoitechat_print(lib.ph, exc)
|
||||
return 1
|
||||
@@ -384,10 +397,11 @@ def autoload():
|
||||
configdir = __decode(_cstr(lib.zoitechat_get_info(lib.ph, b'configdir')))
|
||||
addondir = os.path.join(configdir, 'addons')
|
||||
try:
|
||||
with change_cwd(addondir):
|
||||
with change_cwd(addondir): # Maintaining old behavior
|
||||
for f in os.listdir(addondir):
|
||||
if f.endswith('.py'):
|
||||
log('Autoloading', f)
|
||||
# TODO: Set cwd
|
||||
load_filename(os.path.join(addondir, f))
|
||||
|
||||
except FileNotFoundError as e:
|
||||
@@ -524,28 +538,8 @@ def _on_plugin_init(plugin_name, plugin_desc, plugin_version, arg, libdir):
|
||||
|
||||
try:
|
||||
libdir = __decode(_cstr(libdir))
|
||||
modpaths = [
|
||||
os.path.abspath(os.path.join(libdir, '..', 'python')),
|
||||
os.path.abspath(os.path.join(libdir, 'python')),
|
||||
]
|
||||
|
||||
appdir = os.getenv('APPDIR')
|
||||
if appdir:
|
||||
modpaths.extend([
|
||||
os.path.join(appdir, 'usr', 'lib', 'zoitechat', 'python'),
|
||||
os.path.join(appdir, 'usr', 'lib', 'x86_64-linux-gnu', 'zoitechat', 'python'),
|
||||
])
|
||||
|
||||
if os.getenv('FLATPAK_ID'):
|
||||
modpaths.extend([
|
||||
'/app/lib/zoitechat/python',
|
||||
'/app/lib/x86_64-linux-gnu/zoitechat/python',
|
||||
])
|
||||
|
||||
for modpath in modpaths:
|
||||
if os.path.isdir(modpath) and modpath not in sys.path:
|
||||
sys.path.append(modpath)
|
||||
|
||||
modpath = os.path.join(libdir, '..', 'python')
|
||||
sys.path.append(os.path.abspath(modpath))
|
||||
zoitechat = importlib.import_module('zoitechat')
|
||||
|
||||
except (UnicodeDecodeError, ImportError) as e:
|
||||
|
||||
@@ -27,6 +27,23 @@
|
||||
<TargetName>$(Python3Output)</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;Py_NO_LINK_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<UndefinePreprocessorDefinitions>_DEBUG;Py_DEBUG;Py_REF_DEBUG;Py_TRACE_REFS;%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
|
||||
<AdditionalOptions>/U_DEBUG /UPy_DEBUG /UPy_REF_DEBUG /UPy_TRACE_REFS %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>$(Glib);$(Python3Path)\include;..\..\src\common;$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>python.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>"$(Python3Lib).lib";$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(Python3Path)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>"$(Python3Path)\python.exe" generate_plugin.py ..\..\src\common\zoitechat-plugin.h python.py "$(IntDir)python.c"</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PYTHON_EXPORTS;Py_NO_LINK_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -50,7 +67,6 @@
|
||||
<None Include="python.def" />
|
||||
<None Include="python.py" />
|
||||
<None Include="xchat.py" />
|
||||
<None Include="hexchat.py" />
|
||||
<None Include="_zoitechat.py" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -30,8 +30,5 @@
|
||||
<None Include="xchat.py">
|
||||
<Filter>Source Files</Filter>
|
||||
</None>
|
||||
<None Include="hexchat.py">
|
||||
<Filter>Source Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -10,7 +10,7 @@ sysinfo_deps = [
|
||||
]
|
||||
|
||||
sysinfo_includes = []
|
||||
sysinfo_cargs = ['-DHAVE_CONFIG_H']
|
||||
sysinfo_cargs = []
|
||||
|
||||
system = host_machine.system()
|
||||
if system == 'linux' or system == 'gnu' or system.startswith('gnu/') or system == 'darwin' or system == 'freebsd'
|
||||
@@ -19,10 +19,6 @@ if system == 'linux' or system == 'gnu' or system.startswith('gnu/') or system =
|
||||
'shared/df.c'
|
||||
]
|
||||
|
||||
if get_option('gtk-frontend')
|
||||
sysinfo_cargs += '-DUSE_GTK_FRONTEND'
|
||||
endif
|
||||
|
||||
if system == 'linux' or system == 'gnu' or system.startswith('gnu/') or system == 'freebsd'
|
||||
libpci = dependency('libpci', required: false, method: 'pkg-config')
|
||||
if libpci.found()
|
||||
@@ -34,10 +30,6 @@ if system == 'linux' or system == 'gnu' or system.startswith('gnu/') or system =
|
||||
pciids = join_paths(picidsdir, 'pci.ids')
|
||||
sysinfo_cargs += '-DPCIIDS_FILE="@0@"'.format(pciids)
|
||||
endif
|
||||
if get_option('gtk-frontend')
|
||||
sysinfo_deps += dependency('gtk+-3.0', version: '>= 3.22')
|
||||
endif
|
||||
|
||||
sysinfo_includes += 'unix'
|
||||
sysinfo_sources += [
|
||||
'unix/backend.c',
|
||||
@@ -60,7 +52,7 @@ endif
|
||||
|
||||
shared_module('sysinfo', sysinfo_sources,
|
||||
dependencies: sysinfo_deps,
|
||||
include_directories: [config_h_include, include_directories(sysinfo_includes)],
|
||||
include_directories: include_directories(sysinfo_includes),
|
||||
c_args: sysinfo_cargs,
|
||||
install: true,
|
||||
install_dir: plugindir,
|
||||
|
||||
@@ -32,10 +32,6 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "format.h"
|
||||
#include "df.h"
|
||||
|
||||
@@ -280,8 +276,12 @@ sysinfo_backend_get_network(void)
|
||||
|
||||
static const char *sysinfo_detect_toolkit(void)
|
||||
{
|
||||
#if defined(USE_GTK_FRONTEND)
|
||||
#if defined(HAVE_GTK3)
|
||||
return "GTK3";
|
||||
#elif defined(HAVE_GTK2)
|
||||
return "GTK2";
|
||||
#elif defined(HAVE_GTK)
|
||||
return "GTK";
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
@@ -32,7 +32,7 @@ char *sysinfo_backend_get_network(void);
|
||||
|
||||
/*
|
||||
* Short description of the UI/toolkit + display backend.
|
||||
* Examples: "GTK3 / Wayland", "Windows / GTK3".
|
||||
* Examples: "GTK3 / Wayland", "GTK2 / X11", "Windows / GTK3".
|
||||
*/
|
||||
char *sysinfo_backend_get_ui(void);
|
||||
|
||||
|
||||
@@ -208,6 +208,7 @@ sysinfo_cb (char *word[], char *word_eol[], void *userdata)
|
||||
int offset = 0, channel_type;
|
||||
char *cmd;
|
||||
|
||||
/* Allow overriding global announce setting */
|
||||
if (!strcmp ("-e", word[2]))
|
||||
{
|
||||
announce = FALSE;
|
||||
@@ -219,6 +220,7 @@ sysinfo_cb (char *word[], char *word_eol[], void *userdata)
|
||||
offset++;
|
||||
}
|
||||
|
||||
/* Cannot send to server tab */
|
||||
channel_type = zoitechat_list_int (ph, NULL, "type");
|
||||
if (channel_type != 2 /* SESS_CHANNEL */ && channel_type != 3 /* SESS_DIALOG */)
|
||||
announce = FALSE;
|
||||
@@ -244,6 +246,7 @@ zoitechat_plugin_init (zoitechat_plugin *plugin_handle, char **plugin_name, char
|
||||
|
||||
zoitechat_hook_command (ph, "SYSINFO", ZOITECHAT_PRI_NORM, sysinfo_cb, sysinfo_help, NULL);
|
||||
|
||||
/* Match the classic label from HexChat so people can actually find it. */
|
||||
zoitechat_command (ph, "MENU ADD \"Window/Display System Info\" \"SYSINFO\"");
|
||||
zoitechat_printf (ph, _("%s plugin loaded\n"), name);
|
||||
return 1;
|
||||
@@ -252,6 +255,7 @@ zoitechat_plugin_init (zoitechat_plugin *plugin_handle, char **plugin_name, char
|
||||
int
|
||||
zoitechat_plugin_deinit (void)
|
||||
{
|
||||
/* Keep both in case older builds used a different label. */
|
||||
zoitechat_command (ph, "MENU DEL \"Window/Send System Info\"");
|
||||
zoitechat_command (ph, "MENU DEL \"Window/Display System Info\"");
|
||||
zoitechat_printf (ph, _("%s plugin unloaded\n"), name);
|
||||
|
||||
@@ -28,15 +28,29 @@
|
||||
<TargetName>hcsysinfo</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;SYSINFO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(DepsRoot)\include;$(OpenSslInclude);$(Glib);$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSINFO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(DepsRoot)\include;$(OpenSslInclude);$(Glib);$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(ZoiteChatLib)common.lib;wbemuuid.lib;$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>$(ZoiteChatLib)common.lib;wbemuuid.lib;comsupp.lib;$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<IgnoreSpecificDefaultLibraries>comsupp.lib</IgnoreSpecificDefaultLibraries>
|
||||
<ModuleDefinitionFile>sysinfo.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;SYSINFO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(DepsRoot)\include;$(OpenSslInclude);$(Glib);$(ZoiteChatLib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(ZoiteChatLib)common.lib;wbemuuid.lib;comsupp.lib;$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<IgnoreSpecificDefaultLibraries>comsupp.lib</IgnoreSpecificDefaultLibraries>
|
||||
<ModuleDefinitionFile>sysinfo.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -54,4 +68,4 @@
|
||||
<ClInclude Include="sysinfo.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -19,11 +19,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if defined(USE_GTK_FRONTEND)
|
||||
#if defined(HAVE_GTK3) || defined(HAVE_GTK2) || defined(HAVE_GTK)
|
||||
#include <gdk/gdk.h>
|
||||
#endif
|
||||
#include "parse.h"
|
||||
@@ -179,8 +175,12 @@ char *sysinfo_backend_get_network(void)
|
||||
|
||||
static const char *sysinfo_detect_toolkit(void)
|
||||
{
|
||||
#if defined(USE_GTK_FRONTEND)
|
||||
#if defined(HAVE_GTK3)
|
||||
return "GTK3";
|
||||
#elif defined(HAVE_GTK2)
|
||||
return "GTK2";
|
||||
#elif defined(HAVE_GTK)
|
||||
return "GTK";
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
@@ -194,7 +194,7 @@ static const char *sysinfo_detect_display_backend(void)
|
||||
const gboolean session_wayland = session && g_ascii_strcasecmp(session, "wayland") == 0;
|
||||
|
||||
/* Best-effort: ask GDK what it actually opened, if available. */
|
||||
#if defined(USE_GTK_FRONTEND)
|
||||
#if defined(HAVE_GTK3) || defined(HAVE_GTK2) || defined(HAVE_GTK)
|
||||
{
|
||||
GdkDisplay *display = gdk_display_get_default();
|
||||
if (display)
|
||||
|
||||
@@ -132,6 +132,7 @@ void pci_find_fullname(char *fullname, char *vendor, char *device)
|
||||
if(fp == NULL)
|
||||
{
|
||||
g_snprintf(fullname, bsize, "%s:%s", vendor, device);
|
||||
//sysinfo_print_error ("pci.ids file not found! You might want to adjust your pciids setting with /SYSINFO SET pciids (you can query its current value with /SYSINFO LIST).\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,10 +26,6 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "../../../src/common/sysinfo/sysinfo.h"
|
||||
|
||||
#include "../format.h"
|
||||
@@ -110,8 +106,12 @@ static char *get_memory_info (void)
|
||||
|
||||
static const char *sysinfo_detect_toolkit(void)
|
||||
{
|
||||
#if defined(USE_GTK_FRONTEND)
|
||||
#if defined(HAVE_GTK3)
|
||||
return "GTK3";
|
||||
#elif defined(HAVE_GTK2)
|
||||
return "GTK2";
|
||||
#elif defined(HAVE_GTK)
|
||||
return "GTK";
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#define APPCAST_URL "https://zoitechat.zoite.net/appcast.xml"
|
||||
|
||||
static zoitechat_plugin *ph;
|
||||
static zoitechat_plugin *ph; /* plugin handle */
|
||||
static char name[] = "Update Checker";
|
||||
static char desc[] = "Check for ZoiteChat updates automatically";
|
||||
static char version[] = "5.0";
|
||||
|
||||
@@ -27,6 +27,17 @@
|
||||
<TargetName>hcupd</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;UPD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(WinSparklePath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>upd.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>$(DepLibs);WinSparkle.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;$(WinSparklePath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;UPD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#define PLAYING 1
|
||||
#define PAUSED 3
|
||||
|
||||
static zoitechat_plugin *ph;
|
||||
static zoitechat_plugin *ph; /* plugin handle */
|
||||
|
||||
static int
|
||||
winamp(char *word[], char *word_eol[], void *userdata)
|
||||
@@ -130,6 +130,7 @@ zoitechat_plugin_init(zoitechat_plugin *plugin_handle,
|
||||
char **plugin_version,
|
||||
char *arg)
|
||||
{
|
||||
/* we need to save this for use with any zoitechat_* functions */
|
||||
ph = plugin_handle;
|
||||
|
||||
*plugin_name = "Winamp";
|
||||
@@ -141,7 +142,7 @@ zoitechat_plugin_init(zoitechat_plugin *plugin_handle,
|
||||
|
||||
zoitechat_print (ph, "Winamp plugin loaded\n");
|
||||
|
||||
return 1;
|
||||
return 1; /* return 1 for success */
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -23,6 +27,11 @@
|
||||
<TargetName>hcwinamp</TargetName>
|
||||
<OutDir>$(ZoiteChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WINAMP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;WINAMP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
@@ -30,7 +39,7 @@
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(DepsRoot)\include;$(OpenSslInclude);$(Glib);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<ModuleDefinitionFile>winamp.def</ModuleDefinitionFile>
|
||||
|
||||
10
readme.md
10
readme.md
@@ -1,10 +1,11 @@
|
||||
<div align="center">
|
||||
<img src="data/icons/zoitechat.svg" height="230">
|
||||
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/debian-build.yml)
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/flatpak-build.yml)
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/appimage-build.yml)
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/windows-build.yml)
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/manjaro-package-build.yml)
|
||||
[](https://github.com/ZoiteChat/zoitechat/actions/workflows/openbsd-build.yml)
|
||||
|
||||
[![Version][github-version-img]][github-version-uri] [![Downloads][github-downloads-img]][github-downloads-uri] [![Size][github-size-img]][github-size-img] [![Last Commit][github-commit-img]][github-commit-img] [![Contributors][contribs-all-img]](#contributors-)
|
||||
|
||||
@@ -36,9 +37,6 @@ See [IRCHelp.org](http://irchelp.org) for information about IRC in general.
|
||||
For more information on ZoiteChat please read our [documentation](https://docs.zoitechat.zoite.net/):
|
||||
- [Downloads](https://zoitechat.zoite.net/download)
|
||||
|
||||
- [Troubleshooting](troubleshooting.md)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<sub>
|
||||
@@ -54,3 +52,7 @@ provide binary packages linked to the OpenSSL libraries, provided that
|
||||
all other requirements of the GPL are met.
|
||||
See file COPYING for details.
|
||||
</sub>
|
||||
|
||||
## macOS debugging
|
||||
|
||||
If you are troubleshooting local macOS build/run/debug issues (including Xcode setup), see `osx/DEBUGGING.md`.
|
||||
|
||||
@@ -258,13 +258,12 @@ int
|
||||
cfg_get_color (char *cfg, char *var, guint16 *r, guint16 *g, guint16 *b)
|
||||
{
|
||||
char str[128];
|
||||
int matched;
|
||||
|
||||
if (!cfg_get_str (cfg, var, str, sizeof (str)))
|
||||
return 0;
|
||||
|
||||
matched = sscanf (str, "%04hx %04hx %04hx", r, g, b);
|
||||
return matched == 3;
|
||||
sscanf (str, "%04hx %04hx %04hx", r, g, b);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -439,7 +438,6 @@ const struct prefs vars[] =
|
||||
{"gui_tab_dots", P_OFFINT (hex_gui_tab_dots), TYPE_BOOL},
|
||||
{"gui_tab_icons", P_OFFINT (hex_gui_tab_icons), TYPE_BOOL},
|
||||
{"gui_dark_mode", P_OFFINT (hex_gui_dark_mode), TYPE_INT},
|
||||
{"gui_gtk3_variant", P_OFFINT (hex_gui_gtk3_variant), TYPE_INT},
|
||||
{"gui_tab_layout", P_OFFINT (hex_gui_tab_layout), TYPE_INT},
|
||||
{"gui_tab_middleclose", P_OFFINT (hex_gui_tab_middleclose), TYPE_BOOL},
|
||||
{"gui_tab_newtofront", P_OFFINT (hex_gui_tab_newtofront), TYPE_INT},
|
||||
@@ -569,7 +567,6 @@ const struct prefs vars[] =
|
||||
{"text_font", P_OFFSET (hex_text_font), TYPE_STR},
|
||||
{"text_font_main", P_OFFSET (hex_text_font_main), TYPE_STR},
|
||||
{"text_font_alternative", P_OFFSET (hex_text_font_alternative), TYPE_STR},
|
||||
{"gui_gtk3_theme", P_OFFSET (hex_gui_gtk3_theme), TYPE_STR},
|
||||
{"text_indent", P_OFFINT (hex_text_indent), TYPE_BOOL},
|
||||
{"text_max_indent", P_OFFINT (hex_text_max_indent), TYPE_INT},
|
||||
{"text_max_lines", P_OFFINT (hex_text_max_lines), TYPE_INT},
|
||||
@@ -767,6 +764,7 @@ load_default_config(void)
|
||||
prefs.hex_gui_input_style = 1;
|
||||
prefs.hex_gui_join_dialog = 1;
|
||||
prefs.hex_gui_quit_dialog = 1;
|
||||
/* prefs.hex_gui_slist_skip = 1; */
|
||||
prefs.hex_gui_tab_chans = 1;
|
||||
prefs.hex_gui_tab_dialogs = 1;
|
||||
prefs.hex_gui_tab_icons = 1;
|
||||
@@ -790,7 +788,7 @@ load_default_config(void)
|
||||
prefs.hex_irc_reconnect_rejoin = 1;
|
||||
prefs.hex_irc_cap_server_time = 1;
|
||||
prefs.hex_irc_logging = 1;
|
||||
prefs.hex_irc_who_join = 1;
|
||||
prefs.hex_irc_who_join = 1; /* Can kick with inordinate amount of channels, required for some of our features though, TODO: add cap like away check? */
|
||||
prefs.hex_irc_whois_front = 1;
|
||||
prefs.hex_net_auto_reconnect = 1;
|
||||
prefs.hex_net_throttle = 1;
|
||||
@@ -821,7 +819,7 @@ load_default_config(void)
|
||||
prefs.hex_flood_ctcp_num = 5;
|
||||
prefs.hex_flood_ctcp_time = 30;
|
||||
prefs.hex_flood_msg_num = 5;
|
||||
prefs.hex_flood_msg_time = 30;
|
||||
/*FIXME*/ prefs.hex_flood_msg_time = 30;
|
||||
prefs.hex_gui_chanlist_maxusers = 9999;
|
||||
prefs.hex_gui_chanlist_minusers = 5;
|
||||
prefs.hex_gui_dialog_height = 256;
|
||||
|
||||
@@ -99,6 +99,8 @@ str_to_chanopt (const char *str)
|
||||
return SET_DEFAULT;
|
||||
}
|
||||
|
||||
/* handle the /CHANOPT command */
|
||||
|
||||
int
|
||||
chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
{
|
||||
@@ -133,13 +135,13 @@ chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
{
|
||||
if (find[0] == 0 || match (find, chanopt[i].name) || (chanopt[i].alias && match (find, chanopt[i].alias)))
|
||||
{
|
||||
if (newval != -1)
|
||||
if (newval != -1) /* set new value */
|
||||
{
|
||||
*(guint8 *)G_STRUCT_MEMBER_P(sess, chanopt[i].offset) = newval;
|
||||
chanopt_changed = TRUE;
|
||||
}
|
||||
|
||||
if (!quiet)
|
||||
if (!quiet) /* print value */
|
||||
{
|
||||
strcpy (tbuf, chanopt[i].name);
|
||||
p = strlen (tbuf);
|
||||
@@ -175,13 +177,18 @@ chanopt_is_set (unsigned int global, guint8 per_chan_setting)
|
||||
return global;
|
||||
}
|
||||
|
||||
/* === below is LOADING/SAVING stuff only === */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* Per-Channel Alerts */
|
||||
/* use a byte, because we need a pointer to each element */
|
||||
guint8 alert_balloon;
|
||||
guint8 alert_beep;
|
||||
guint8 alert_taskbar;
|
||||
guint8 alert_tray;
|
||||
|
||||
/* Per-Channel Settings */
|
||||
guint8 text_hidejoinpart;
|
||||
guint8 text_logging;
|
||||
guint8 text_scrollback;
|
||||
@@ -211,10 +218,12 @@ chanopt_find (char *network, char *channel, gboolean add_new)
|
||||
if (!add_new)
|
||||
return NULL;
|
||||
|
||||
/* allocate a new one */
|
||||
co = g_new0 (chanopt_in_memory, 1);
|
||||
co->channel = g_strdup (channel);
|
||||
co->network = g_strdup (network);
|
||||
|
||||
/* set all values to SET_DEFAULT */
|
||||
i = 0;
|
||||
while (i < sizeof (chanopt) / sizeof (channel_options))
|
||||
{
|
||||
@@ -245,6 +254,8 @@ chanopt_add_opt (chanopt_in_memory *co, char *var, int new_value)
|
||||
}
|
||||
}
|
||||
|
||||
/* load chanopt.conf from disk into our chanopt_list GSList */
|
||||
|
||||
static void
|
||||
chanopt_load_all (void)
|
||||
{
|
||||
@@ -254,6 +265,7 @@ chanopt_load_all (void)
|
||||
char *network = NULL;
|
||||
chanopt_in_memory *current = NULL;
|
||||
|
||||
/* 1. load the old file into our GSList */
|
||||
fh = zoitechat_open_file ("chanopt.conf", O_RDONLY, 0, 0);
|
||||
if (fh != -1)
|
||||
{
|
||||
@@ -314,6 +326,7 @@ chanopt_load (session *sess)
|
||||
if (!co)
|
||||
return;
|
||||
|
||||
/* fill in all the sess->xxxxx fields */
|
||||
i = 0;
|
||||
while (i < sizeof (chanopt) / sizeof (channel_options))
|
||||
{
|
||||
@@ -339,6 +352,8 @@ chanopt_save (session *sess)
|
||||
if (!network)
|
||||
return;
|
||||
|
||||
/* 2. reconcile sess with what we loaded from disk */
|
||||
|
||||
co = chanopt_find (network, sess->session_name, TRUE);
|
||||
|
||||
i = 0;
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
@@ -45,8 +49,6 @@
|
||||
<ClInclude Include="zoitechat-plugin.h" />
|
||||
<ClInclude Include="zoitechat.h" />
|
||||
<ClInclude Include="zoitechatc.h" />
|
||||
<ClInclude Include="theme-service.h" />
|
||||
<ClInclude Include="gtk3-theme-service.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="cfgfiles.c" />
|
||||
@@ -77,8 +79,6 @@
|
||||
<ClCompile Include="userlist.c" />
|
||||
<ClCompile Include="util.c" />
|
||||
<ClCompile Include="zoitechat.c" />
|
||||
<ClCompile Include="theme-service.c" />
|
||||
<ClCompile Include="gtk3-theme-service.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\win32\config.h.tt" />
|
||||
@@ -96,10 +96,16 @@
|
||||
<PropertyGroup>
|
||||
<OutDir>$(ZoiteChatLib)</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(ZoiteChatLib);$(DepsRoot)\include;$(OpenSslInclude);$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_LIB;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(ZoiteChatLib);$(DepsRoot)\include;$(ArchiveInclude);$(OpenSslInclude);$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(ZoiteChatLib);$(DepsRoot)\include;$(OpenSslInclude);$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
||||
@@ -119,12 +119,6 @@
|
||||
<ClInclude Include="sysinfo\sysinfo.h">
|
||||
<Filter>Source Files\sysinfo</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="theme-service.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="gtk3-theme-service.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="cfgfiles.c">
|
||||
@@ -208,12 +202,6 @@
|
||||
<ClCompile Include="sysinfo\win32\backend.c">
|
||||
<Filter>Source Files\sysinfo\win32</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="theme-service.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="gtk3-theme-service.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\win32\config.h.tt" />
|
||||
|
||||
@@ -743,6 +743,9 @@ dcc_read (GIOChannel *source, GIOCondition condition, struct DCC *dcc)
|
||||
EMIT_SIGNAL (XP_TE_DCCRECVERR, dcc->serv->front_session, dcc->file,
|
||||
dcc->destfile, dcc->nick,
|
||||
errorstring ((n < 0) ? sock_error () : 0), 0);
|
||||
/* send ack here? but the socket is dead */
|
||||
/*if (need_ack)
|
||||
dcc_send_ack (dcc);*/
|
||||
dcc_close (dcc, STAT_FAILED, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1380,6 +1383,7 @@ dcc_connect (struct DCC *dcc)
|
||||
dcc_close (dcc, STAT_FAILED, FALSE);
|
||||
return;
|
||||
}
|
||||
/* possible problems with filenames containing spaces? */
|
||||
if (dcc->type == TYPE_RECV)
|
||||
g_snprintf (tbuf, sizeof (tbuf), strchr (dcc->file, ' ') ?
|
||||
"DCC SEND \"%s\" %u %d %" G_GUINT64_FORMAT " %d" :
|
||||
@@ -1656,14 +1660,17 @@ dcc_listen_init (struct DCC *dcc, session *sess)
|
||||
|
||||
SAddr.sin_family = AF_INET;
|
||||
|
||||
/*if local_ip is specified use that*/
|
||||
if (prefs.local_ip != 0xffffffff)
|
||||
{
|
||||
my_addr = prefs.local_ip;
|
||||
SAddr.sin_addr.s_addr = prefs.local_ip;
|
||||
}
|
||||
/*otherwise use the default*/
|
||||
else
|
||||
my_addr = SAddr.sin_addr.s_addr;
|
||||
|
||||
/*if we have a valid portrange try to use that*/
|
||||
if (prefs.hex_dcc_port_first > 0)
|
||||
{
|
||||
SAddr.sin_port = 0;
|
||||
@@ -1673,6 +1680,7 @@ dcc_listen_init (struct DCC *dcc, session *sess)
|
||||
{
|
||||
SAddr.sin_port = htons (prefs.hex_dcc_port_first + i);
|
||||
i++;
|
||||
/*printf("Trying to bind against port: %d\n",ntohs(SAddr.sin_port));*/
|
||||
bindretval = bind (dcc->sok, (struct sockaddr *) &SAddr, sizeof (SAddr));
|
||||
}
|
||||
|
||||
@@ -1699,8 +1707,12 @@ dcc_listen_init (struct DCC *dcc, session *sess)
|
||||
|
||||
dcc->port = ntohs (SAddr.sin_port);
|
||||
|
||||
/*if we have a dcc_ip, we use that, so the remote client can connect*/
|
||||
/*else we try to take an address from hex_dcc_ip*/
|
||||
/*if something goes wrong we tell the client to connect to our LAN ip*/
|
||||
dcc->addr = dcc_get_my_address (sess);
|
||||
|
||||
/*if nothing else worked we use the address we bound to*/
|
||||
if (dcc->addr == 0)
|
||||
dcc->addr = my_addr;
|
||||
|
||||
@@ -1716,7 +1728,7 @@ dcc_listen_init (struct DCC *dcc, session *sess)
|
||||
}
|
||||
|
||||
static struct session *dccsess;
|
||||
static char *dccto;
|
||||
static char *dccto; /* lame!! */
|
||||
static gint64 dccmaxcps;
|
||||
static int recursive = FALSE;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,32 +0,0 @@
|
||||
#ifndef ZOITECHAT_GTK3_THEME_SERVICE_H
|
||||
#define ZOITECHAT_GTK3_THEME_SERVICE_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ZOITECHAT_GTK3_THEME_SOURCE_SYSTEM = 0,
|
||||
ZOITECHAT_GTK3_THEME_SOURCE_USER = 1
|
||||
} ZoitechatGtk3ThemeSource;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *id;
|
||||
char *display_name;
|
||||
char *path;
|
||||
gboolean has_dark_variant;
|
||||
char *thumbnail_path;
|
||||
ZoitechatGtk3ThemeSource source;
|
||||
} ZoitechatGtk3Theme;
|
||||
|
||||
char *zoitechat_gtk3_theme_service_get_user_themes_dir (void);
|
||||
GPtrArray *zoitechat_gtk3_theme_service_discover (void);
|
||||
void zoitechat_gtk3_theme_free (ZoitechatGtk3Theme *theme);
|
||||
ZoitechatGtk3Theme *zoitechat_gtk3_theme_find_by_id (const char *theme_id);
|
||||
gboolean zoitechat_gtk3_theme_service_import (const char *source_path, char **imported_id, GError **error);
|
||||
gboolean zoitechat_gtk3_theme_service_remove_user_theme (const char *theme_id, GError **error);
|
||||
char *zoitechat_gtk3_theme_pick_css_dir_for_minor (const char *theme_root, int preferred_minor);
|
||||
char *zoitechat_gtk3_theme_pick_css_dir (const char *theme_root);
|
||||
GPtrArray *zoitechat_gtk3_theme_build_inheritance_chain (const char *theme_root);
|
||||
|
||||
#endif
|
||||
@@ -153,6 +153,8 @@ ignore_showlist (session *sess)
|
||||
strcat (tbuf, _("NO "));
|
||||
strcat (tbuf, "\n");
|
||||
PrintText (sess, tbuf);
|
||||
/*EMIT_SIGNAL (XP_TE_IGNORELIST, sess, ig->mask, 0, 0, 0, 0); */
|
||||
/* use this later, when TE's support 7 args */
|
||||
list = list->next;
|
||||
}
|
||||
|
||||
@@ -411,3 +413,4 @@ flood_check (char *nick, char *ip, server *serv, session *sess, int what) /*0=ct
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ find_session_from_nick (char *nick, server *serv)
|
||||
|
||||
if (serv->front_session)
|
||||
{
|
||||
// If we are here for ChanServ, then it is usually a reply for the user
|
||||
if (!g_ascii_strcasecmp(nick, "ChanServ") || userlist_find (serv->front_session, nick))
|
||||
return serv->front_session;
|
||||
}
|
||||
@@ -221,51 +222,15 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id,
|
||||
|
||||
/* used for Alerts section. Masks can be separated by commas and spaces. */
|
||||
|
||||
static char *
|
||||
alert_normalize_word (const char *text)
|
||||
{
|
||||
GString *normalized;
|
||||
char *composed;
|
||||
const char *p;
|
||||
|
||||
composed = g_utf8_normalize (text, -1, G_NORMALIZE_ALL_COMPOSE);
|
||||
if (!composed)
|
||||
composed = g_strdup (text);
|
||||
|
||||
normalized = g_string_sized_new (strlen (composed));
|
||||
p = composed;
|
||||
|
||||
while (*p)
|
||||
{
|
||||
gunichar ch = g_utf8_get_char ((const guchar *)p);
|
||||
|
||||
/* Ignore selector/joiner codepoints that vary by input method. */
|
||||
if (ch != 0x200D && ch != 0xFE0E && ch != 0xFE0F)
|
||||
g_string_append_unichar (normalized, ch);
|
||||
|
||||
p = g_utf8_next_char (p);
|
||||
}
|
||||
|
||||
g_free (composed);
|
||||
return g_string_free (normalized, FALSE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
alert_match_word (char *word, char *masks)
|
||||
{
|
||||
char *p = masks;
|
||||
char endchar;
|
||||
char *word_normalized;
|
||||
char *mask_normalized;
|
||||
int res;
|
||||
|
||||
word_normalized = alert_normalize_word (word);
|
||||
|
||||
if (masks[0] == 0)
|
||||
{
|
||||
g_free (word_normalized);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
@@ -274,23 +239,15 @@ alert_match_word (char *word, char *masks)
|
||||
{
|
||||
endchar = *p;
|
||||
*p = 0;
|
||||
mask_normalized = alert_normalize_word (g_strchug (masks));
|
||||
res = match (mask_normalized, word_normalized);
|
||||
g_free (mask_normalized);
|
||||
res = match (g_strchug (masks), word);
|
||||
*p = endchar;
|
||||
|
||||
if (res)
|
||||
{
|
||||
g_free (word_normalized);
|
||||
return TRUE; /* yes, matched! */
|
||||
}
|
||||
|
||||
masks = p + 1;
|
||||
if (*p == 0)
|
||||
{
|
||||
g_free (word_normalized);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
@@ -301,8 +258,6 @@ alert_match_text (char *text, char *masks)
|
||||
{
|
||||
unsigned char *p = text;
|
||||
unsigned char endchar;
|
||||
gunichar ch;
|
||||
GUnicodeType ch_type;
|
||||
int res;
|
||||
|
||||
if (masks[0] == 0)
|
||||
@@ -310,38 +265,26 @@ alert_match_text (char *text, char *masks)
|
||||
|
||||
while (1)
|
||||
{
|
||||
ch = g_utf8_get_char (p);
|
||||
ch_type = g_unichar_type (ch);
|
||||
|
||||
if (g_unichar_isdigit (ch) || g_unichar_isalpha (ch))
|
||||
if (*p >= '0' && *p <= '9')
|
||||
{
|
||||
p += g_utf8_skip [p[0]];
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* if it's RFC1459 <special>, it can be inside a word */
|
||||
switch (ch)
|
||||
switch (*p)
|
||||
{
|
||||
case '-': case '[': case ']': case '\\':
|
||||
case '`': case '^': case '{': case '}':
|
||||
case '_': case '|':
|
||||
p += g_utf8_skip [p[0]];
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Symbols (including emoji) can be part of highlighted words. */
|
||||
if (ch_type == G_UNICODE_MATH_SYMBOL ||
|
||||
ch_type == G_UNICODE_CURRENCY_SYMBOL ||
|
||||
ch_type == G_UNICODE_MODIFIER_SYMBOL ||
|
||||
ch_type == G_UNICODE_OTHER_SYMBOL)
|
||||
{
|
||||
p += g_utf8_skip [p[0]];
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Delimiters end the word. */
|
||||
if (*p == 0 || g_unichar_isspace (ch) || g_unichar_ispunct (ch) ||
|
||||
g_unichar_iscntrl (ch))
|
||||
/* if it's a 0, space or comma, the word has ended. */
|
||||
if (*p == 0 || *p == ' ' || *p == ',' ||
|
||||
/* if it's anything BUT a letter, the word has ended. */
|
||||
(!g_unichar_isalpha (g_utf8_get_char (p))))
|
||||
{
|
||||
endchar = *p;
|
||||
*p = 0;
|
||||
@@ -2120,6 +2063,7 @@ scram_authenticate (server *serv, const char *data, const char *digest,
|
||||
|
||||
if (status == SCRAM_IN_PROGRESS)
|
||||
{
|
||||
// Authentication is still in progress
|
||||
encoded = g_base64_encode ((guchar *) output, output_len);
|
||||
tcp_sendf (serv, "AUTHENTICATE %s\r\n", encoded);
|
||||
g_free (encoded);
|
||||
@@ -2127,11 +2071,13 @@ scram_authenticate (server *serv, const char *data, const char *digest,
|
||||
}
|
||||
else if (status == SCRAM_SUCCESS)
|
||||
{
|
||||
// Authentication succeeded
|
||||
tcp_sendf (serv, "AUTHENTICATE +\r\n");
|
||||
g_clear_pointer (&serv->scram_session, scram_session_free);
|
||||
}
|
||||
else if (status == SCRAM_ERROR)
|
||||
{
|
||||
// Authentication failed
|
||||
tcp_sendf (serv, "AUTHENTICATE *\r\n");
|
||||
|
||||
if (serv->scram_session->error != NULL)
|
||||
|
||||
@@ -3,7 +3,6 @@ common_sources = [
|
||||
'chanopt.c',
|
||||
'ctcp.c',
|
||||
'dcc.c',
|
||||
'gtk3-theme-service.c',
|
||||
'zoitechat.c',
|
||||
'history.c',
|
||||
'ignore.c',
|
||||
@@ -28,17 +27,12 @@ common_sources = [
|
||||
]
|
||||
|
||||
common_sysinfo_deps = []
|
||||
libarchive_dep = dependency('libarchive', required: host_machine.system() != 'windows')
|
||||
|
||||
common_deps = [
|
||||
libgio_dep,
|
||||
libcanberra_dep,
|
||||
] + global_deps
|
||||
|
||||
if libarchive_dep.found()
|
||||
common_deps += libarchive_dep
|
||||
endif
|
||||
|
||||
common_includes = [
|
||||
config_h_include,
|
||||
include_directories('.')
|
||||
@@ -61,39 +55,12 @@ if host_machine.system() == 'windows'
|
||||
common_includes += include_directories('sysinfo')
|
||||
endif
|
||||
|
||||
glib_genmarshal = find_program(
|
||||
'glib-genmarshal',
|
||||
'glib-genmarshal-2.0',
|
||||
required: true,
|
||||
marshal = gnome.genmarshal('marshal',
|
||||
sources: 'marshalers.list',
|
||||
prefix: '_zoitechat_marshal',
|
||||
internal: true
|
||||
)
|
||||
|
||||
marshal = [
|
||||
custom_target('marshal_h',
|
||||
input: 'marshalers.list',
|
||||
output: 'marshal.h',
|
||||
command: [
|
||||
glib_genmarshal,
|
||||
'--prefix=_zoitechat_marshal',
|
||||
'--header',
|
||||
'@INPUT@',
|
||||
'--output',
|
||||
'@OUTPUT@',
|
||||
]
|
||||
),
|
||||
custom_target('marshal_c',
|
||||
input: 'marshalers.list',
|
||||
output: 'marshal.c',
|
||||
command: [
|
||||
glib_genmarshal,
|
||||
'--prefix=_zoitechat_marshal',
|
||||
'--body',
|
||||
'@INPUT@',
|
||||
'--output',
|
||||
'@OUTPUT@',
|
||||
]
|
||||
)
|
||||
]
|
||||
|
||||
make_te = find_program('make-te.py')
|
||||
|
||||
textevents = custom_target('textevents',
|
||||
@@ -102,6 +69,11 @@ textevents = custom_target('textevents',
|
||||
command: [make_te, '@INPUT@', '@OUTPUT0@', '@OUTPUT1@']
|
||||
)
|
||||
|
||||
# TODO:
|
||||
# LOOKUPD
|
||||
# SIGACTION
|
||||
# HAVE_GTK_MAC
|
||||
|
||||
if libssl_dep.found()
|
||||
common_sources += 'ssl.c'
|
||||
common_deps += libssl_dep
|
||||
@@ -131,7 +103,7 @@ zoitechat_common_dep = declare_dependency(
|
||||
link_with: zoitechat_common,
|
||||
include_directories: common_includes,
|
||||
compile_args: common_cflags,
|
||||
dependencies: libgio_dep,
|
||||
dependencies: common_deps,
|
||||
)
|
||||
|
||||
zoitechat_plugin_dep = declare_dependency(
|
||||
@@ -139,18 +111,3 @@ zoitechat_plugin_dep = declare_dependency(
|
||||
compile_args: common_cflags,
|
||||
dependencies: global_deps,
|
||||
)
|
||||
|
||||
|
||||
gtk3_theme_service_tests = executable('gtk3_theme_service_tests',
|
||||
[
|
||||
'tests/test-gtk3-theme-service.c',
|
||||
'gtk3-theme-service.c',
|
||||
],
|
||||
include_directories: [config_h_include, include_directories('.')],
|
||||
dependencies: [libgio_dep] + (libarchive_dep.found() ? [libarchive_dep] : []),
|
||||
)
|
||||
|
||||
test('GTK3 Theme Service Tests', gtk3_theme_service_tests,
|
||||
protocol: 'tap',
|
||||
timeout: 120,
|
||||
)
|
||||
|
||||
@@ -87,7 +87,7 @@ notify_do_network (struct notify *notify, server *serv)
|
||||
return TRUE;
|
||||
|
||||
if (token_foreach (notify->networks, ',', notify_netcmp, serv))
|
||||
return FALSE;
|
||||
return FALSE; /* network list doesn't contain this one */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -106,6 +106,8 @@ notify_find_server_entry (struct notify *notify, struct server *serv)
|
||||
list = list->next;
|
||||
}
|
||||
|
||||
/* not found, should we add it, or is this not a network where
|
||||
we're monitoring this nick? */
|
||||
if (!notify_do_network (notify, serv))
|
||||
return NULL;
|
||||
|
||||
@@ -121,7 +123,11 @@ notify_save (void)
|
||||
{
|
||||
int fh;
|
||||
struct notify *notify;
|
||||
GSList *list = g_slist_reverse (g_slist_copy (notify_list));
|
||||
// while reading the notify.conf file, elements are added by prepending to the
|
||||
// list. reverse the list before writing to disk to keep the original
|
||||
// order of the list
|
||||
GSList *list = g_slist_copy(notify_list);
|
||||
list = g_slist_reverse(list);
|
||||
|
||||
fh = zoitechat_open_file ("notify.conf", O_TRUNC | O_WRONLY | O_CREAT, 0600, XOF_DOMODE);
|
||||
if (fh != -1)
|
||||
@@ -140,7 +146,7 @@ notify_save (void)
|
||||
}
|
||||
close (fh);
|
||||
}
|
||||
g_slist_free (list);
|
||||
g_slist_free(list);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -42,16 +42,19 @@ struct notify_per_server
|
||||
extern GSList *notify_list;
|
||||
extern int notify_tag;
|
||||
|
||||
/* the WATCH stuff */
|
||||
void notify_set_online (server * serv, char *nick,
|
||||
const message_tags_data *tags_data);
|
||||
void notify_set_offline (server * serv, char *nick, int quiet,
|
||||
const message_tags_data *tags_data);
|
||||
const message_tags_data *tags_data);
|
||||
/* the MONITOR stuff */
|
||||
void notify_set_online_list (server * serv, char *users,
|
||||
const message_tags_data *tags_data);
|
||||
void notify_set_offline_list (server * serv, char *users, int quiet,
|
||||
const message_tags_data *tags_data);
|
||||
const message_tags_data *tags_data);
|
||||
void notify_send_watches (server * serv);
|
||||
|
||||
/* the general stuff */
|
||||
void notify_adduser (char *name, char *networks);
|
||||
int notify_deluser (char *name);
|
||||
void notify_cleanup (void);
|
||||
@@ -62,6 +65,7 @@ gboolean notify_is_in_list (server *serv, char *name);
|
||||
int notify_isnotify (session *sess, char *name);
|
||||
struct notify_per_server *notify_find_server_entry (struct notify *notify, struct server *serv);
|
||||
|
||||
/* the old ISON stuff - remove me? */
|
||||
void notify_markonline (server *serv, char *word[],
|
||||
const message_tags_data *tags_data);
|
||||
int notify_checklist (void);
|
||||
|
||||
@@ -3770,6 +3770,45 @@ cmd_url (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
{
|
||||
if (word[2][0])
|
||||
{
|
||||
char *theme_path = NULL;
|
||||
if (zoitechat_theme_path_from_arg (word[2], &theme_path))
|
||||
{
|
||||
GError *error = NULL;
|
||||
char *basename = g_path_get_basename (theme_path);
|
||||
char *dot = strrchr (basename, '.');
|
||||
char *message;
|
||||
|
||||
if (dot)
|
||||
*dot = '\0';
|
||||
|
||||
if (zoitechat_import_theme (theme_path, &error))
|
||||
{
|
||||
if (zoitechat_apply_theme (basename, &error))
|
||||
{
|
||||
message = g_strdup_printf (_("Theme \"%s\" imported and applied."), basename);
|
||||
fe_message (message, FE_MSG_INFO);
|
||||
handle_command (sess, "gui apply", FALSE);
|
||||
g_free (message);
|
||||
}
|
||||
else
|
||||
{
|
||||
fe_message (error ? error->message : _("Theme imported, but failed to apply."),
|
||||
FE_MSG_ERROR);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fe_message (error ? error->message : _("Failed to import theme."),
|
||||
FE_MSG_ERROR);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
g_free (basename);
|
||||
g_free (theme_path);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
char *server_name = NULL;
|
||||
char *port = NULL;
|
||||
char *channel = NULL;
|
||||
@@ -4070,7 +4109,7 @@ const struct commands xc_cmds[] = {
|
||||
{"ME", cmd_me, 0, 0, 1,
|
||||
N_("ME <action>, sends the action to the current channel (actions are written in the 3rd person, like /me jumps)")},
|
||||
{"MENU", cmd_menu, 0, 0, 1, "MENU [-eX] [-i<ICONFILE>] [-k<mod>,<key>] [-m] [-pX] [-r<X,group>] [-tX] {ADD|DEL} <path> [command] [unselect command]\n"
|
||||
" See https://docs.zoitechat.zoite.net/en/latest/en/latest/plugins.html#controlling-the-gui for more details."},
|
||||
" See http://zoitechat.zoite.net/docs/en/latest/plugins.html#controlling-the-gui for more details."},
|
||||
{"MHOP", cmd_mhop, 1, 1, 1,
|
||||
N_("MHOP, Mass hop's all users in the current channel (needs chanop)")},
|
||||
{"MKICK", cmd_mkick, 1, 1, 1,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user