pax_global_header 0000666 0000000 0000000 00000000064 15206174332 0014515 g ustar 00root root 0000000 0000000 52 comment=cd18ea55fe479eb4526d1732b443cbfc3969c540
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/ 0000775 0000000 0000000 00000000000 15206174332 0020607 5 ustar 00root root 0000000 0000000 wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/ 0000775 0000000 0000000 00000000000 15206174332 0022147 5 ustar 00root root 0000000 0000000 wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/workflows/ 0000775 0000000 0000000 00000000000 15206174332 0024204 5 ustar 00root root 0000000 0000000 wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/workflows/build-and-release.yml 0000664 0000000 0000000 00000152645 15206174332 0030221 0 ustar 00root root 0000000 0000000 # .github/workflows/build-and-release.yml
# Build wfview for Windows (x86/x64), Linux (AppImage) and macOS (Universal Qt6 DMG),
# then publish all artifacts under a single release.
name: Build and Release
permissions:
contents: write
on:
push:
workflow_dispatch:
schedule:
- cron: '0 6 * * 1'
jobs:
# ═══════════════════════════════════════════════════════════════════
# Windows 32bit Qt5 Build
# ═══════════════════════════════════════════════════════════════════
build-windows-x86:
runs-on: windows-latest
outputs:
version_string: ${{ steps.version_info.outputs.version_string }}
has_tag: ${{ steps.version_info.outputs.has_tag }}
steps:
- name: Checkout wfview
uses: actions/checkout@v4
with:
path: wfview
fetch-depth: 0
- name: Determine version
id: version_info
shell: bash
run: |
SHORT=$(git -C wfview rev-parse --short HEAD)
TAG=$(git -C wfview tag --points-at HEAD | head -1)
if [ -n "$TAG" ]; then
VERSION_STRING="$TAG"
HAS_TAG=true
else
VERSION_STRING="$SHORT"
HAS_TAG=false
fi
echo "version_string=$VERSION_STRING" >> "$GITHUB_OUTPUT"
echo "git_short=$SHORT" >> "$GITHUB_OUTPUT"
echo "has_tag=$HAS_TAG" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION_STRING (has_tag=$HAS_TAG)"
- name: Cache dependencies
uses: actions/cache@v4
id: cache-deps
with:
path: |
portaudio
opus
hidapi
rtaudio
r8brain-free-src
eigen
qcustomplot
key: windows-x86-deps-${{ hashFiles('wfview/wfview.pro') }}
- name: Checkout dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
shell: bash
run: |
git clone --depth=1 https://github.com/PortAudio/portaudio.git portaudio
git clone --depth=1 https://github.com/xiph/opus.git opus
git clone --depth=1 https://github.com/libusb/hidapi.git hidapi
git clone --depth=1 https://github.com/thestk/rtaudio.git rtaudio
git clone --depth=1 https://github.com/avaneev/r8brain-free-src.git r8brain-free-src
git clone --depth=1 --branch 5.0.1 https://gitlab.com/libeigen/eigen.git eigen
- name: Download QCustomPlot
shell: bash
run: |
mkdir -p qcustomplot
curl -L "https://www.qcustomplot.com/release/2.1.1/QCustomPlot.tar.gz" \
-o qcustomplot.tar.gz
tar -xzf qcustomplot.tar.gz -C qcustomplot --strip-components=1
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: 5.15.2
cache: true
host: windows
target: desktop
arch: win32_msvc2019
- name: Install Qt IFW 4.3.0 (x86)
if: steps.version_info.outputs.has_tag == 'true'
shell: pwsh
run: |
Invoke-WebRequest `
-Uri "https://download.qt.io/archive/qt-installer-framework/4.3.0/QtInstallerFramework-windows-x86-4.3.0.exe" `
-OutFile QtIFW-4.3.0.exe
Start-Process -Wait -FilePath "QtIFW-4.3.0.exe" -ArgumentList `
"--accept-licenses", `
"--accept-obligations", `
"--confirm-command", `
"--default-answer", `
"install", `
"--root", "C:\QtIFW43"
echo "C:\QtIFW43\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Set up MSVC (x86)
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x86
- name: Install jom
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 3
command: choco install jom -y
- name: Write QCustomPlot pro file
shell: bash
run: |
mkdir -p qcustomplot/win32
cat > qcustomplot/qcustomplot-sharedlib.pro << 'EOF'
TEMPLATE = lib
TARGET = qcustomplot2
DESTDIR = win32
QT += widgets printsupport
CONFIG += release shared
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
SOURCES += qcustomplot.cpp
HEADERS += qcustomplot.h
EOF
- name: Build QCustomPlot
shell: cmd
working-directory: ${{ github.workspace }}\qcustomplot
run: |
qmake qcustomplot-sharedlib.pro CONFIG+=release
jom -j %NUMBER_OF_PROCESSORS%
- name: Patch PortAudio output name
shell: bash
run: |
echo "set_target_properties(portaudio PROPERTIES OUTPUT_NAME portaudio_x86)" >> portaudio/CMakeLists.txt
- name: Build PortAudio
shell: cmd
working-directory: ${{ github.workspace }}\portaudio
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A Win32 ^
-DPA_BUILD_SHARED=ON ^
-DPA_BUILD_STATIC=OFF
cmake --build build --config Release
mkdir msvc\Win32\Release
copy build\Release\portaudio_x86.dll msvc\Win32\Release\portaudio_x86.dll
copy build\Release\portaudio_x86.lib msvc\Win32\Release\portaudio_x86.lib
- name: Build HIDAPI
shell: cmd
working-directory: ${{ github.workspace }}\hidapi
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A Win32 ^
-DBUILD_SHARED_LIBS=ON
cmake --build build --config Release
if not exist windows\Release mkdir windows\Release
copy /y build\src\windows\Release\hidapi.dll windows\Release\
copy /y build\src\windows\Release\hidapi.lib windows\Release\
- name: Patch Opus output name
shell: bash
run: |
echo "set_target_properties(opus PROPERTIES OUTPUT_NAME opus-0)" >> opus/CMakeLists.txt
- name: Build Opus
shell: cmd
working-directory: ${{ github.workspace }}\opus
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A Win32 ^
-DBUILD_SHARED_LIBS=ON
cmake --build build --config Release
mkdir win32\VS2015\win32\ReleaseDLL
copy build\Release\opus-0.dll win32\VS2015\win32\ReleaseDLL\opus-0.dll
copy build\Release\opus-0.lib win32\VS2015\win32\ReleaseDLL\opus.lib
- name: Build wfview
shell: cmd
working-directory: wfview
run: |
qmake wfview.pro CONFIG+=release
jom -j %NUMBER_OF_PROCESSORS%
- name: Deploy Qt dependencies
if: steps.version_info.outputs.has_tag == 'true'
shell: cmd
run: |
windeployqt ^
--release ^
--printsupport ^
--no-system-d3d-compiler ^
wfview\wfview-release\wfview.exe
- name: Build Qt Installer
if: steps.version_info.outputs.has_tag == 'true'
shell: pwsh
run: |
$VERSION = "${{ steps.version_info.outputs.version_string }}"
$DATE = Get-Date -Format 'yyyy-MM-dd'
$PKG_DIR = "wfview\installer\packages\org.wfview.wfview"
New-Item -ItemType Directory -Force -Path "$PKG_DIR\data"
Copy-Item -Recurse -Force "wfview\wfview-release\*" "$PKG_DIR\data\"
Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x86.exe" `
-OutFile "$PKG_DIR\data\vc_redist.x64.exe"
(Get-Content "wfview\installer\config\config.xml") `
-replace '.*', "$VERSION" `
-replace '
.*', "Welcome to the wfview v$VERSION (x86) installer" `
-replace 'wfview \(x64\)', 'wfview (x86)' |
Set-Content "wfview\installer\config\config.xml"
(Get-Content "$PKG_DIR\meta\package.xml") `
-replace '.*', "$VERSION" `
-replace '.*', "$DATE" `
-replace 'wfview \(x64\)', 'wfview (x86)' |
Set-Content "$PKG_DIR\meta\package.xml"
binarycreator `
--offline-only `
-c wfview\installer\config\config.xml `
-p wfview\installer\packages `
"wfview-windows-x86-setup.exe"
- name: Upload installer
if: steps.version_info.outputs.has_tag == 'true'
uses: actions/upload-artifact@v4
with:
name: wfview-windows-x86
path: wfview-windows-x86-setup.exe
# ═══════════════════════════════════════════════════════════════════
# Windows 64bit Qt6 Build
# ═══════════════════════════════════════════════════════════════════
build-windows-x64:
runs-on: windows-latest
outputs:
version_string: ${{ steps.version_info.outputs.version_string }}
has_tag: ${{ steps.version_info.outputs.has_tag }}
steps:
- name: Checkout wfview
uses: actions/checkout@v4
with:
path: wfview
fetch-depth: 0
- name: Determine version
id: version_info
shell: bash
run: |
SHORT=$(git -C wfview rev-parse --short HEAD)
TAG=$(git -C wfview tag --points-at HEAD | head -1)
if [ -n "$TAG" ]; then
VERSION_STRING="$TAG"
HAS_TAG=true
else
VERSION_STRING="$SHORT"
HAS_TAG=false
fi
echo "version_string=$VERSION_STRING" >> "$GITHUB_OUTPUT"
echo "git_short=$SHORT" >> "$GITHUB_OUTPUT"
echo "has_tag=$HAS_TAG" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION_STRING (has_tag=$HAS_TAG)"
- name: Cache dependencies
uses: actions/cache@v4
id: cache-deps
with:
path: |
portaudio
opus
hidapi
rtaudio
r8brain-free-src
eigen
qcustomplot
key: windows-deps-${{ hashFiles('wfview/wfview.pro') }}
- name: Checkout dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
shell: bash
run: |
git clone --depth=1 https://github.com/PortAudio/portaudio.git portaudio
git clone --depth=1 https://github.com/xiph/opus.git opus
git clone --depth=1 https://github.com/libusb/hidapi.git hidapi
git clone --depth=1 https://github.com/thestk/rtaudio.git rtaudio
git clone --depth=1 https://github.com/avaneev/r8brain-free-src.git r8brain-free-src
git clone --depth=1 --branch 5.0.1 https://gitlab.com/libeigen/eigen.git eigen
- name: Download QCustomPlot
shell: bash
run: |
mkdir -p qcustomplot
curl -L "https://www.qcustomplot.com/release/2.1.1/QCustomPlot.tar.gz" \
-o qcustomplot.tar.gz
tar -xzf qcustomplot.tar.gz -C qcustomplot --strip-components=1
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: 6.8.1
cache: true
host: windows
target: desktop
arch: win64_msvc2022_64
modules: qtserialport qtwebsockets qtmultimedia
tools: tools_ifw
- name: Set up MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Install jom
uses: nick-fields/retry@v2
with:
timeout_minutes: 5
max_attempts: 3
command: choco install jom -y
- name: Write QCustomPlot pro file
shell: bash
run: |
mkdir -p qcustomplot/x64
cat > qcustomplot/qcustomplot-sharedlib.pro << 'EOF'
TEMPLATE = lib
TARGET = qcustomplot2
DESTDIR = x64
QT += widgets printsupport
CONFIG += release shared
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
SOURCES += qcustomplot.cpp
HEADERS += qcustomplot.h
EOF
- name: Build QCustomPlot
shell: cmd
working-directory: ${{ github.workspace }}\qcustomplot
run: |
qmake qcustomplot-sharedlib.pro CONFIG+=release
jom -j %NUMBER_OF_PROCESSORS%
- name: Patch PortAudio output name
shell: bash
run: |
echo "set_target_properties(portaudio PROPERTIES OUTPUT_NAME portaudio_x64)" >> portaudio/CMakeLists.txt
- name: Build PortAudio
shell: cmd
working-directory: ${{ github.workspace }}\portaudio
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A x64 ^
-DPA_BUILD_SHARED=ON ^
-DPA_BUILD_STATIC=OFF
cmake --build build --config Release
mkdir msvc\X64\Release
copy build\Release\portaudio_x64.dll msvc\X64\Release\portaudio_x64.dll
copy build\Release\portaudio_x64.lib msvc\X64\Release\portaudio_x64.lib
- name: Build HIDAPI
shell: cmd
working-directory: ${{ github.workspace }}\hidapi
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A x64 ^
-DBUILD_SHARED_LIBS=ON
cmake --build build --config Release
mkdir windows\X64\Release
copy build\src\windows\Release\hidapi.dll windows\X64\Release\
copy build\src\windows\Release\hidapi.lib windows\X64\Release\
- name: Patch Opus output name
shell: bash
run: |
echo "set_target_properties(opus PROPERTIES OUTPUT_NAME opus-0)" >> opus/CMakeLists.txt
- name: Build Opus
shell: cmd
working-directory: ${{ github.workspace }}\opus
run: |
cmake -B build ^
-G "Visual Studio 17 2022" ^
-A x64 ^
-DBUILD_SHARED_LIBS=ON
cmake --build build --config Release
mkdir win32\VS2015\x64\ReleaseDLL
copy build\Release\opus-0.dll win32\VS2015\x64\ReleaseDLL\opus-0.dll
copy build\Release\opus-0.lib win32\VS2015\x64\ReleaseDLL\opus.lib
- name: Build wfview
shell: cmd
working-directory: wfview
run: |
qmake wfview.pro CONFIG+=release
jom -j %NUMBER_OF_PROCESSORS%
- name: Deploy Qt dependencies
if: steps.version_info.outputs.has_tag == 'true'
shell: cmd
run: |
windeployqt ^
--release ^
--printsupport ^
--no-system-d3d-compiler ^
wfview\wfview-release\wfview.exe
- name: Build Qt Installer
if: steps.version_info.outputs.has_tag == 'true'
shell: pwsh
run: |
$VERSION = "${{ steps.version_info.outputs.version_string }}"
$DATE = Get-Date -Format 'yyyy-MM-dd'
$PKG_DIR = "wfview\installer\packages\org.wfview.wfview"
# Copy app files into package data
New-Item -ItemType Directory -Force -Path "$PKG_DIR\data"
Copy-Item -Recurse -Force "wfview\wfview-release\*" "$PKG_DIR\data\"
# Download VC redist into package data so installscript.qs can run it
Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" `
-OutFile "$PKG_DIR\data\vc_redist.x64.exe"
# Inject version and date into config.xml and package.xml
(Get-Content "wfview\installer\config\config.xml") `
-replace '.*', "$VERSION" `
-replace '.*', "Welcome to the wfview v$VERSION (x64) installer" |
Set-Content "wfview\installer\config\config.xml"
(Get-Content "$PKG_DIR\meta\package.xml") `
-replace '.*', "$VERSION" `
-replace '.*', "$DATE" |
Set-Content "$PKG_DIR\meta\package.xml"
# Build installer
binarycreator `
--offline-only `
-c wfview\installer\config\config.xml `
-p wfview\installer\packages `
"wfview-windows-x64-setup.exe"
- name: Upload installer
if: steps.version_info.outputs.has_tag == 'true'
uses: actions/upload-artifact@v4
with:
name: wfview-windows-x64
path: wfview-windows-x64-setup.exe
# ═══════════════════════════════════════════════════════════════════
# macOS Universal Qt6 Build
# ═══════════════════════════════════════════════════════════════════
build-macos:
runs-on: macos-latest
outputs:
version_string: ${{ steps.version_info.outputs.version_string }}
has_tag: ${{ steps.version_info.outputs.has_tag }}
env:
SYSROOT: ${{ github.workspace }}/universal_sysroot
steps:
- name: Checkout wfview
uses: actions/checkout@v4
with:
path: wfview
fetch-depth: 0
# ─── Determine version string ──────────────────────────────────
- name: Determine version
id: version_info
run: |
SHORT=$(git -C wfview rev-parse --short HEAD)
TAG=$(git -C wfview tag --points-at HEAD | head -1)
if [ -n "$TAG" ]; then
VERSION_STRING="$TAG"
HAS_TAG=true
else
VERSION_STRING="$SHORT"
HAS_TAG=false
fi
echo "version_string=$VERSION_STRING" >> "$GITHUB_OUTPUT"
echo "git_short=$SHORT" >> "$GITHUB_OUTPUT"
echo "has_tag=$HAS_TAG" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION_STRING (has_tag=$HAS_TAG)"
- name: Install Official Qt6 (Universal)
uses: jurplel/install-qt-action@v4
with:
version: '6.8.1'
cache: true
host: 'mac'
target: 'desktop'
modules: 'qtserialport qtmultimedia qtwebsockets'
- name: Create Universal Sysroot
run: mkdir -p $SYSROOT
- name: Build Opus (Universal)
run: |
git clone --depth 1 https://github.com/xiph/opus.git
cd opus
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Build PortAudio (Universal)
run: |
git clone --depth 1 https://github.com/PortAudio/portaudio.git
cd portaudio
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Build HIDAPI (Universal)
run: |
git clone --depth 1 https://github.com/libusb/hidapi.git
cd hidapi
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Set up sibling directories
run: |
git clone --depth=1 https://github.com/thestk/rtaudio.git rtaudio
git clone --depth=1 https://github.com/avaneev/r8brain-free-src.git r8brain-free-src
git clone --depth=1 --branch 5.0.1 https://gitlab.com/libeigen/eigen.git eigen
mkdir -p opus
ln -s $SYSROOT/include/opus opus/include
- name: Download QCustomPlot tgz
run: |
echo "=== Downloading QCP tgz file ==="
mkdir -p qcustomplot
curl -L "https://www.qcustomplot.com/release/2.1.1/QCustomPlot.tar.gz" \
-o qcustomplot.tar.gz
tar -xzf qcustomplot.tar.gz -C qcustomplot --strip-components=1
- name: Build QCustomPlot (Universal)
run: |
echo "=== Begin QCP build process ==="
mkdir -p qcustomplot/qcustomplot-sharedlib/build
cd qcustomplot/qcustomplot-sharedlib/build
cat > qcustomplot-sharedlib.pro << 'EOF'
TEMPLATE = lib
TARGET = qcustomplot
QT += widgets printsupport
CONFIG += release shared
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
SOURCES += ../../qcustomplot.cpp
HEADERS += ../../qcustomplot.h
EOF
qmake qcustomplot-sharedlib.pro \
CONFIG+=release \
QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64" \
QMAKE_MACOSX_DEPLOYMENT_TARGET=12.0
make -j$(sysctl -n hw.logicalcpu)
cp ../../qcustomplot.h .
- name: Get version
id: version
run: |
VERSION=$(grep 'WFVIEW_VERSION' wfview/wfview.pro | grep -oE '[0-9]+\.[0-9]+')
BUNDLE_VERSION=$(git -C wfview rev-list --count HEAD)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "bundle_version=$BUNDLE_VERSION" >> $GITHUB_OUTPUT
- name: Set version in Info.plist
run: |
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${{ steps.version.outputs.version }}" \
wfview/resources/Info.plist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${{ steps.version.outputs.bundle_version }}" \
wfview/resources/Info.plist
- name: Build wfview
working-directory: wfview
run: |
qmake wfview.pro \
CONFIG+=release \
CONFIG+=sdk_no_version_check \
QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64" \
QMAKE_MACOSX_DEPLOYMENT_TARGET=12.0 \
INCLUDEPATH+="$SYSROOT/include" \
INCLUDEPATH+="../qcustomplot/qcustomplot-sharedlib/build" \
LIBS+="-L$SYSROOT/lib" \
LIBS+="-L../qcustomplot/qcustomplot-sharedlib/build" \
VERSION="${{ steps.version_info.outputs.version_string }}"
make -j$(sysctl -n hw.logicalcpu)
- name: Deploy macOS App
run: |
# Do not remove this line or the build will fail:
echo "ICE == murderers"
echo "=== Copying QCP before macdeployqt ==="
mkdir -p wfview/wfview.app/Contents/Frameworks
cp -a $GITHUB_WORKSPACE/qcustomplot/qcustomplot-sharedlib/build/libqcustomplot*.dylib wfview/wfview.app/Contents/Frameworks/
echo "=== Deploying Qt Frameworks ==="
macdeployqt wfview/wfview.app
echo "=== Bundling 3rd Party Libraries ==="
cp -a $SYSROOT/lib/libportaudio*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libopus*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libhidapi*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavcodec*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavformat*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavutil*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libswresample*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libswscale*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
echo "=== Fixing Library Install Names ==="
for f in wfview/wfview.app/Contents/Frameworks/*.dylib; do
[ -L "$f" ] && continue
LIB_NAME=$(basename "$f")
install_name_tool -id "@rpath/$LIB_NAME" "$f" || true
done
echo "=== Adding rpath to binary ==="
BINARY="wfview/wfview.app/Contents/MacOS/wfview"
install_name_tool -add_rpath "@executable_path/../Frameworks" "$BINARY" || true
echo "=== Fixing bare QCP reference ==="
install_name_tool -change \
"libqcustomplot.1.dylib" \
"@rpath/libqcustomplot.1.dylib" \
"$BINARY" || true
echo "=== Verifying Library References ==="
echo "Remaining non-system external references in binary:"
otool -L "$BINARY" | grep -v '@executable_path' | grep -v '@rpath' | grep -v '/usr/lib' | grep -v '/System/' | grep -v 'wfview' || true
echo "RPaths in binary:"
otool -l "$BINARY" | grep -A2 LC_RPATH || true
- name: Import certificate
env:
CERTIFICATE_DATA: ${{ secrets.MACOS_CERTIFICATE }}
CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }}
run: |
echo "$CERTIFICATE_DATA" | base64 --decode > certificate.p12
security create-keychain -p "" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "" build.keychain
security import certificate.p12 -k build.keychain -P "$CERTIFICATE_PWD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain
- name: Sign application
run: |
IDENTITY="Developer ID Application: Phil Taylor (${{ secrets.MACOS_NOTARY_TEAM }})"
APP="wfview/wfview.app"
ENTITLEMENTS="wfview/resources/wfview.entitlements"
# 1. Sign standalone dylibs in Frameworks
find "$APP/Contents/Frameworks" -maxdepth 1 -name "*.dylib" -exec \
codesign --force --sign "$IDENTITY" --options runtime --timestamp {} \;
# 2. Sign Qt frameworks (sign the versioned binary inside each)
find "$APP/Contents/Frameworks" -name "*.framework" | while read fw; do
codesign --force --sign "$IDENTITY" --options runtime --timestamp "$fw"
done
# 3. Sign all plugin dylibs
find "$APP/Contents/PlugIns" -name "*.dylib" -exec \
codesign --force --sign "$IDENTITY" --options runtime --timestamp {} \;
# 4. Sign the main executable
codesign --force --sign "$IDENTITY" \
--options runtime \
--timestamp \
--entitlements "$ENTITLEMENTS" \
"$APP/Contents/MacOS/wfview"
# 5. Sign the app bundle last
codesign --force --sign "$IDENTITY" \
--options runtime \
--timestamp \
--entitlements "$ENTITLEMENTS" \
"$APP"
# Verify
codesign --verify --deep --strict --verbose=2 "$APP"
- name: Notarize application
env:
NOTARY_USER: ${{ secrets.MACOS_NOTARY_USER }}
NOTARY_PWD: ${{ secrets.MACOS_NOTARY_PWD }}
NOTARY_TEAM: ${{ secrets.MACOS_NOTARY_TEAM }}
run: |
# Package for notarization
ditto -c -k --keepParent wfview/wfview.app wfview.zip
# Submit and wait
xcrun notarytool submit wfview.zip \
--apple-id "$NOTARY_USER" \
--password "$NOTARY_PWD" \
--team-id "$NOTARY_TEAM" \
--wait
# Staple the ticket
xcrun stapler staple wfview/wfview.app
- name: Package macOS App
uses: lethja/create-dmg-action@v0.0.2
with:
name: 'wfview'
srcdir: 'wfview/wfview.app'
- name: Debug Output - Verify Library Linking
run: |
echo "=== Dynamically linked libraries requested by wfview binary ==="
otool -L wfview/wfview.app/Contents/MacOS/wfview
echo ""
echo "=== Contents of wfview.app/Contents/Frameworks/ ==="
ls -l wfview/wfview.app/Contents/Frameworks/ || true
echo ""
echo "=== Verifying 3rd Party Libraries ==="
for lib in $(otool -L wfview/wfview.app/Contents/MacOS/wfview | grep "@executable_path" | awk '{print $1}'); do
lib_basename=$(basename "$lib")
if [ -f "wfview/wfview.app/Contents/Frameworks/$lib_basename" ]; then
echo "SUCCESS: Found $lib_basename properly linked and bundled."
else
echo "ERROR: Missing $lib_basename in Frameworks folder."
fi
done
- name: Rename macOS DMG
run: mv wfview.dmg wfview-macos.dmg
- name: Upload macOS DMG artifact
uses: actions/upload-artifact@v4
with:
name: wfview-macos-dmg
path: wfview-macos.dmg
if-no-files-found: warn
# ═══════════════════════════════════════════════════════════════════
# Linux AppImage Build
# ═══════════════════════════════════════════════════════════════════
build-linux-appimage:
runs-on: ubuntu-22.04
# Build on 22.04 for maximum glibc portability (AppImages built on
# older glibc run on newer distros, but not vice-versa).
steps:
# ─── Checkout ───────────────────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # full history so git describe / rev-parse work
# ─── Determine version string ───────────────────────────────────────
- name: Determine version
id: version_info
run: |
SHORT=$(git rev-parse --short HEAD)
TAG=$(git tag --points-at HEAD | head -1)
if [ -n "$TAG" ]; then
VERSION_STRING="$TAG"
HAS_TAG=true
else
VERSION_STRING="$SHORT"
HAS_TAG=false
fi
echo "version_string=$VERSION_STRING" >> "$GITHUB_OUTPUT"
echo "git_short=$SHORT" >> "$GITHUB_OUTPUT"
echo "has_tag=$HAS_TAG" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION_STRING (has_tag=$HAS_TAG)"
# ─── Capture metadata ───────────────────────────────────────────────
- name: Gather build metadata
id: meta
run: |
echo "git_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
echo "git_msg<> "$GITHUB_OUTPUT"
git log -1 --pretty=format:"%s" >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
echo "timestamp=$(date -u +%Y%m%dT%H%M%SZ)" >> "$GITHUB_OUTPUT"
# ─── Install dependencies ───────────────────────────────────────────
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get -y install \
build-essential \
qt5-qmake \
libqt5core5a \
qtbase5-dev \
libqt5serialport5 libqt5serialport5-dev \
libqt5multimedia5 libqt5multimedia5-plugins qtmultimedia5-dev \
libqt5gamepad5 libqt5gamepad5-dev \
libqt5websockets5 libqt5websockets5-dev \
libhidapi-dev \
libopus-dev \
libeigen3-dev \
libportaudio2 libportaudiocpp0 portaudio19-dev \
librtaudio-dev \
libudev-dev \
libpulse-dev \
libjack-jackd2-dev \
git \
file \
fuse libfuse2 \
makeself
# QCustomPlot — try each version, at least one must succeed
QCPLOT_OK=0
sudo apt-get -y install libqcustomplot2.1 libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
if [ "$QCPLOT_OK" -eq 0 ]; then
sudo apt-get -y install libqcustomplot2.0 libqcustomplot-doc libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
fi
if [ "$QCPLOT_OK" -eq 0 ]; then
sudo apt-get -y install libqcustomplot1.3 libqcustomplot-doc libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
fi
if [ "$QCPLOT_OK" -eq 0 ]; then
echo "::error::Could not install any version of libqcustomplot"
exit 1
fi
echo "QCustomPlot installed successfully"
# ─── DEBUG: Verify toolchain & library availability ─────────────────
- name: "DEBUG: Verify toolchain"
run: |
echo "=== Compiler ==="
g++ --version | head -1
echo ""
echo "=== qmake ==="
qmake --version
echo ""
echo "=== Qt pkg-config modules ==="
pkg-config --list-all 2>/dev/null | grep -i qt || true
echo ""
echo "=== QCustomPlot libraries ==="
/sbin/ldconfig -p | grep -i qcustomplot || true
echo ""
echo "=== Key shared libraries ==="
for lib in librtaudio libopus libportaudio libhidapi libudev libpulse; do
/sbin/ldconfig -p | grep "$lib" | head -2
done
# ─── Build ──────────────────────────────────────────────────────────
- name: Run qmake
run: |
qmake wfview.pro \
CONFIG+=release \
PREFIX=/usr \
VERSION="${{ steps.version_info.outputs.version_string }}"
- name: Build with make
run: |
make -j$(nproc)
# ─── DEBUG: Verify build output ─────────────────────────────────────
- name: "DEBUG: Inspect build artifacts"
run: |
echo "=== Binary info ==="
file wfview
ls -lh wfview
echo ""
echo "=== ldd output ==="
ldd wfview
echo ""
echo "=== Checking for missing libraries ==="
ldd wfview | grep "not found" && echo "::warning::Some libraries are missing!" || echo "All libraries found."
# ─── Prepare AppDir ─────────────────────────────────────────────────
- name: Prepare AppDir structure
run: |
mkdir -p AppDir/usr/bin
mkdir -p AppDir/usr/share/applications
mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
mkdir -p AppDir/usr/share/metainfo
mkdir -p AppDir/usr/share/wfview/rigs
mkdir -p AppDir/usr/share/wfview/qdarkstyle
cp wfview AppDir/usr/bin/
cp resources/wfview.desktop AppDir/usr/share/applications/
cp resources/icons/bitmap/wfview.png AppDir/usr/share/icons/hicolor/256x256/apps/
cp resources/org.wfview.wfview.metainfo.xml AppDir/usr/share/metainfo/ || true
cp -r rigs/* AppDir/usr/share/wfview/rigs/
cp -r qdarkstyle/* AppDir/usr/share/wfview/qdarkstyle/
# linuxdeploy expects these at the AppDir root as well
cp resources/wfview.desktop AppDir/
cp resources/icons/bitmap/wfview.png AppDir/
# ─── DEBUG: Show AppDir contents ────────────────────────────────────
- name: "DEBUG: List AppDir"
run: |
echo "=== AppDir tree ==="
find AppDir -type f | sort
echo ""
echo "=== AppDir size ==="
du -sh AppDir
# ─── Download linuxdeploy ───────────────────────────────────────────
- name: Download linuxdeploy and Qt plugin
run: |
wget -q "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" \
-O linuxdeploy
wget -q "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" \
-O linuxdeploy-plugin-qt
chmod +x linuxdeploy linuxdeploy-plugin-qt
# ─── Create AppImage ────────────────────────────────────────────────
- name: Build AppImage
run: |
export QMAKE=$(which qmake)
export PATH="$(pwd):$PATH"
# Explicitly resolve libjack so linuxdeploy bundles it.
# Qt's JACK audio backend plugin links against libjack.so.0 at
# link time; without it present (and explicitly passed) linuxdeploy
# may skip it, causing "cannot open shared object file: libjack.so.0"
# on target systems that do not have JACK installed.
LIBJACK=$(ldconfig -p | awk '/libjack\.so\.0/{print $NF; exit}')
LIBJACK_ARG=""
if [ -n "$LIBJACK" ]; then
echo "Found libjack at: $LIBJACK"
LIBJACK_ARG="--library=$LIBJACK"
else
echo "::warning::libjack.so.0 not found; AppImage may be missing it"
fi
# linuxdeploy with the Qt plugin bundles all Qt libs/plugins
./linuxdeploy \
--appdir AppDir \
--desktop-file AppDir/usr/share/applications/wfview.desktop \
--icon-file AppDir/usr/share/icons/hicolor/256x256/apps/wfview.png \
$LIBJACK_ARG \
--plugin qt \
--output appimage
# linuxdeploy names it something like wfview-x86_64.AppImage
APPIMAGE_FILE=$(ls wfview*.AppImage 2>/dev/null | head -1)
if [ -z "$APPIMAGE_FILE" ]; then
echo "::error::AppImage was not created!"
ls -la
exit 1
fi
echo "AppImage created: $APPIMAGE_FILE"
mv "$APPIMAGE_FILE" wfview.AppImage
# ─── DEBUG: Verify AppImage ─────────────────────────────────────────
- name: "DEBUG: Verify AppImage"
run: |
ls -lh wfview.AppImage
file wfview.AppImage
echo ""
echo "=== AppImage contents (first 40 entries) ==="
./wfview.AppImage --appimage-list 2>/dev/null | head -40 || true
echo "..."
# ─── Assemble makeself payload ──────────────────────────────────────
- name: Assemble installer payload
run: |
mkdir -p installer-payload
cp wfview.AppImage installer-payload/
cp resources/wfview.desktop installer-payload/
cp resources/icons/bitmap/wfview.png installer-payload/
cp resources/org.wfview.wfview.metainfo.xml installer-payload/ || true
cp -r rigs installer-payload/
cp -r qdarkstyle installer-payload/
# Install script embedded in the payload
cat > installer-payload/install.sh << 'INSTALLER_EOF'
#!/bin/bash
# wfview AppImage Installer
# This script runs from within the makeself self-extracting archive.
#
# Usage:
# ./wfview-installer.sh # non-root install to ~/.local
# sudo ./wfview-installer.sh # root install to /usr/local
#
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APPIMAGE_NAME="wfview.AppImage"
# ─── Detect root vs non-root ──────────────────────────────────
if [ "$(id -u)" -eq 0 ]; then
IS_ROOT=true
PREFIX="/usr/local"
echo "=== wfview installer (root mode) ==="
else
IS_ROOT=false
PREFIX="${HOME}/.local"
echo "=== wfview installer (user mode) ==="
fi
echo "Installing to ${PREFIX}"
BIN_DIR="${PREFIX}/bin"
SHARE_DIR="${PREFIX}/share"
DESKTOP_DIR="${SHARE_DIR}/applications"
ICON_DIR="${SHARE_DIR}/icons/hicolor/256x256/apps"
METAINFO_DIR="${SHARE_DIR}/metainfo"
WFVIEW_SHARE_DIR="${SHARE_DIR}/wfview"
RIGS_DIR="${WFVIEW_SHARE_DIR}/rigs"
STYLE_DIR="${WFVIEW_SHARE_DIR}/qdarkstyle"
# ─── Create directories ───────────────────────────────────────
echo "Creating directories..."
mkdir -p "${BIN_DIR}"
mkdir -p "${DESKTOP_DIR}"
mkdir -p "${ICON_DIR}"
mkdir -p "${METAINFO_DIR}"
mkdir -p "${WFVIEW_SHARE_DIR}"
mkdir -p "${RIGS_DIR}"
mkdir -p "${STYLE_DIR}"
# ─── Backup existing rig files (non-root only) ────────────────
if [ "${IS_ROOT}" = false ] && [ -d "${RIGS_DIR}" ] && [ "$(ls -A "${RIGS_DIR}" 2>/dev/null)" ]; then
BACKUP_NAME="wfview-rigs-backup-$(date +%Y%m%d-%H%M%S).tgz"
BACKUP_PATH="${WFVIEW_SHARE_DIR}/${BACKUP_NAME}"
echo "Backing up existing rig files to ${BACKUP_PATH} ..."
tar czf "${BACKUP_PATH}" -C "${WFVIEW_SHARE_DIR}" rigs/
echo "Backup created."
fi
# ─── Offer to back up prior wfview binaries ───────────────────
PRIOR_BINS=()
[ -f /usr/local/bin/wfview ] && PRIOR_BINS+=("/usr/local/bin/wfview")
[ -f /usr/bin/wfview ] && PRIOR_BINS+=("/usr/bin/wfview")
if [ ${#PRIOR_BINS[@]} -gt 0 ]; then
echo ""
echo "Existing wfview binary detected at:"
for b in "${PRIOR_BINS[@]}"; do echo " $b"; done
echo ""
if [ "${IS_ROOT}" = true ]; then
MV_CMD=(mv -f)
else
MV_CMD=(sudo mv -f)
echo "Note: sudo will be used to move the existing binary (you may be prompted for your password)."
fi
if [ -t 0 ]; then
read -r -p "Back up existing binary to -prior before installing? [Y/n] " REPLY
else
REPLY="Y"
echo "Non-interactive shell; backing up by default."
fi
case "${REPLY}" in
""|y|Y|yes|YES|Yes)
for b in "${PRIOR_BINS[@]}"; do
echo "Moving $b -> ${b}-prior"
"${MV_CMD[@]}" "$b" "${b}-prior"
done
;;
*)
echo "Skipping backup of prior wfview binaries."
;;
esac
fi
# ─── Install AppImage ─────────────────────────────────────────
echo "Installing AppImage to ${BIN_DIR}/wfview ..."
cp "${SCRIPT_DIR}/${APPIMAGE_NAME}" "${BIN_DIR}/wfview"
chmod +x "${BIN_DIR}/wfview"
# ─── Install rig files ────────────────────────────────────────
if [ -d "${SCRIPT_DIR}/rigs" ]; then
echo "Installing rig files to ${RIGS_DIR}/ ..."
cp -r "${SCRIPT_DIR}/rigs/"* "${RIGS_DIR}/"
fi
# ─── Install stylesheets ─────────────────────────────────────
if [ -d "${SCRIPT_DIR}/qdarkstyle" ]; then
echo "Installing stylesheets to ${STYLE_DIR}/ ..."
cp -r "${SCRIPT_DIR}/qdarkstyle/"* "${STYLE_DIR}/"
fi
# ─── Install icon ────────────────────────────────────────────
if [ -f "${SCRIPT_DIR}/wfview.png" ]; then
echo "Installing icon ..."
cp "${SCRIPT_DIR}/wfview.png" "${ICON_DIR}/wfview.png"
fi
# ─── Install metainfo ────────────────────────────────────────
if [ -f "${SCRIPT_DIR}/org.wfview.wfview.metainfo.xml" ]; then
echo "Installing metainfo ..."
cp "${SCRIPT_DIR}/org.wfview.wfview.metainfo.xml" "${METAINFO_DIR}/"
fi
# ─── Install desktop file (rewrite Exec/Icon paths) ──────────
if [ -f "${SCRIPT_DIR}/wfview.desktop" ]; then
echo "Installing desktop launcher ..."
sed -e "s|^Exec=.*|Exec=${BIN_DIR}/wfview|" \
-e "s|^Icon=.*|Icon=${ICON_DIR}/wfview.png|" \
"${SCRIPT_DIR}/wfview.desktop" > "${DESKTOP_DIR}/wfview.desktop"
chmod +x "${DESKTOP_DIR}/wfview.desktop"
fi
# ─── Update desktop database (best-effort) ────────────────────
if command -v update-desktop-database &>/dev/null; then
update-desktop-database "${DESKTOP_DIR}" 2>/dev/null || true
fi
if command -v gtk-update-icon-cache &>/dev/null; then
gtk-update-icon-cache "${SHARE_DIR}/icons/hicolor" 2>/dev/null || true
fi
# ─── Summary ─────────────────────────────────────────────────
echo ""
echo "════════════════════════════════════════════════"
echo " wfview installed successfully!"
echo "════════════════════════════════════════════════"
echo " Binary: ${BIN_DIR}/wfview"
echo " Rig files: ${RIGS_DIR}/"
echo " Stylesheets: ${STYLE_DIR}/"
echo " Desktop: ${DESKTOP_DIR}/wfview.desktop"
echo " Icon: ${ICON_DIR}/wfview.png"
echo "════════════════════════════════════════════════"
echo ""
if [ "${IS_ROOT}" = false ]; then
echo "NOTE: Make sure ${BIN_DIR} is in your PATH."
echo " export PATH=\"${BIN_DIR}:\${PATH}\""
fi
echo "Run wfview with: wfview"
INSTALLER_EOF
chmod +x installer-payload/install.sh
# ─── DEBUG: Show payload contents ───────────────────────────────────
- name: "DEBUG: List installer payload"
run: |
echo "=== Payload contents ==="
find installer-payload -type f | sort
echo ""
du -sh installer-payload
# ─── Build makeself installer ───────────────────────────────────────
- name: Create makeself installer
run: |
makeself \
--gzip \
installer-payload \
wfview-linux-installer.sh \
"wfview AppImage Installer (commit ${{ steps.meta.outputs.git_short }})" \
./install.sh
ls -lh wfview-linux-installer.sh
# ─── Upload artifact ────────────────────────────────────────────────
- name: Upload installer artifact
uses: actions/upload-artifact@v4
with:
name: wfview-linux-appimage-installer
path: wfview-linux-installer.sh
retention-days: 30
# ═══════════════════════════════════════════════════════════════════
# Publish Release (after all builds succeed)
# ═══════════════════════════════════════════════════════════════════
publish-release:
runs-on: ubuntu-latest
needs: [build-windows-x86, build-windows-x64, build-macos, build-linux-appimage]
if: needs.build-macos.outputs.has_tag == 'true'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Gather release metadata
id: meta
run: |
VERSION_STRING="${{ needs.build-macos.outputs.version_string }}"
SHORT=$(git rev-parse --short HEAD)
echo "version_string=$VERSION_STRING" >> "$GITHUB_OUTPUT"
echo "git_short=$SHORT" >> "$GITHUB_OUTPUT"
echo "timestamp=$(date -u +%Y%m%dT%H%M%SZ)" >> "$GITHUB_OUTPUT"
echo "git_msg<> "$GITHUB_OUTPUT"
git log -1 --pretty=format:"%s" >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: Download Windows x86 artifact
uses: actions/download-artifact@v4
with:
name: wfview-windows-x86
path: artifacts/
- name: Download Windows x64 artifact
uses: actions/download-artifact@v4
with:
name: wfview-windows-x64
path: artifacts/
- name: Download macOS DMG artifact
uses: actions/download-artifact@v4
with:
name: wfview-macos-dmg
path: artifacts/
- name: Download Linux installer artifact
uses: actions/download-artifact@v4
with:
name: wfview-linux-appimage-installer
path: artifacts/
- name: Publish Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.meta.outputs.version_string }}
name: "wfview ${{ steps.meta.outputs.version_string }}"
prerelease: ${{ contains(steps.meta.outputs.version_string, 'beta') || contains(steps.meta.outputs.version_string, 'rc') }}
make_latest: ${{ !contains(steps.meta.outputs.version_string, 'beta') && !contains(steps.meta.outputs.version_string, 'rc') }}
files: |
artifacts/wfview-windows-x64-setup.exe
artifacts/wfview-windows-x86-setup.exe
artifacts/wfview-macos.dmg
artifacts/wfview-linux-installer.sh
body: |
## wfview ${{ steps.meta.outputs.version_string }}
| Field | Value |
|-------|-------|
| **Commit** | `${{ steps.meta.outputs.git_short }}` |
| **Built** | ${{ steps.meta.outputs.timestamp }} |
**Commit message:** ${{ steps.meta.outputs.git_msg }}
---
### Windows (x64 / Qt6)
| Field | Value |
|-------|-------|
| **Architecture** | x64 Windows Binary |
| **Framework** | Qt 6.8.1 |
| **Compatibility** | Windows 7 x64 and newer |
**Install:** Download `wfview-windows-x64-setup.exe`, run it and follow the prompts.
---
### Windows (x86 / Qt5)
| Field | Value |
|-------|-------|
| **Architecture** | x86 Windows Binary |
| **Framework** | Qt 5.15.2 |
| **Compatibility** | Windows XP and newer |
**Install:** Download `wfview-windows-x86-setup.exe`, run it and follow the prompts.
---
### macOS (Universal Binary / Qt6)
| Field | Value |
|-------|-------|
| **Architecture** | Universal Binary (Intel + Apple Silicon) |
| **Framework** | Qt 6.8.1 |
| **Compatibility** | macOS 12 (Monterey) and newer |
**Install:** Download `wfview-macos.dmg`, open it, and drag wfview to your Applications folder.
---
### Linux (AppImage / Qt5)
| Field | Value |
|-------|-------|
| **Architecture** | x86_64 |
| **Target OS** | Linux (glibc 2.35+, Ubuntu 22.04 and newer) |
| **Framework** | Qt 5 |
**Install instructions:**
Run **either** the user install **or** the system-wide install — not both.
```bash
cd ~/Downloads
chmod +x wfview-linux-installer.sh
# User install (to ~/.local):
./wfview-linux-installer.sh
# --- OR ---
# System-wide install (to /usr/local):
sudo ./wfview-linux-installer.sh
```
**User install notes:**
- The AppImage binary is placed in `~/.local/bin/wfview`
- Rig files go to `~/.local/share/wfview/rigs/`
- If existing rig files are found, a timestamped `.tgz` backup is created before replacement
- Ensure `~/.local/bin` is in your `PATH`
**System-wide install notes:**
- The AppImage binary is placed in `/usr/local/bin/wfview`
- Rig files go to `/usr/local/share/wfview/rigs/`
- Existing rig files in the system location are left as-is (not backed up)
**Requirements:** FUSE must be available to run AppImages. On Ubuntu/Debian:
```bash
sudo apt install libfuse2
```
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/workflows/linux-appimage.bak 0000664 0000000 0000000 00000045351 15206174332 0027613 0 ustar 00root root 0000000 0000000 # .github/workflows/linux-appimage.yml
# Build wfview AppImage and create a makeself self-extracting installer
# Triggered on every push to any branch
name: Linux AppImage Build
#
# Required for the GitHub Action bot to publish releases
permissions:
contents: write
on:
push:
branches: ['**']
env:
QT_SELECT: qt5
DEBIAN_FRONTEND: noninteractive
jobs:
build-appimage:
runs-on: ubuntu-22.04
# Build on 22.04 for maximum glibc portability (AppImages built on
# older glibc run on newer distros, but not vice-versa).
steps:
# ─── Checkout ───────────────────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # full history so git describe / rev-parse work
# ─── Capture metadata ───────────────────────────────────────────────
- name: Gather build metadata
id: meta
run: |
echo "git_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
echo "git_msg<> "$GITHUB_OUTPUT"
git log -1 --pretty=format:"%s" >> "$GITHUB_OUTPUT"
echo "" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
echo "timestamp=$(date -u +%Y%m%dT%H%M%SZ)" >> "$GITHUB_OUTPUT"
# ─── Install dependencies ───────────────────────────────────────────
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get -y install \
build-essential \
qt5-qmake \
libqt5core5a \
qtbase5-dev \
libqt5serialport5 libqt5serialport5-dev \
libqt5multimedia5 libqt5multimedia5-plugins qtmultimedia5-dev \
libqt5gamepad5 libqt5gamepad5-dev \
libqt5websockets5 libqt5websockets5-dev \
libhidapi-dev \
libopus-dev \
libeigen3-dev \
libportaudio2 libportaudiocpp0 portaudio19-dev \
librtaudio-dev \
libudev-dev \
libpulse-dev \
libjack-jackd2-dev \
git \
file \
fuse libfuse2 \
makeself
# QCustomPlot — try each version, at least one must succeed
QCPLOT_OK=0
sudo apt-get -y install libqcustomplot2.1 libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
if [ "$QCPLOT_OK" -eq 0 ]; then
sudo apt-get -y install libqcustomplot2.0 libqcustomplot-doc libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
fi
if [ "$QCPLOT_OK" -eq 0 ]; then
sudo apt-get -y install libqcustomplot1.3 libqcustomplot-doc libqcustomplot-dev 2>/dev/null && QCPLOT_OK=1 || true
fi
if [ "$QCPLOT_OK" -eq 0 ]; then
echo "::error::Could not install any version of libqcustomplot"
exit 1
fi
echo "QCustomPlot installed successfully"
# ─── DEBUG: Verify toolchain & library availability ─────────────────
- name: "DEBUG: Verify toolchain"
run: |
echo "=== Compiler ==="
g++ --version | head -1
echo ""
echo "=== qmake ==="
qmake --version
echo ""
echo "=== Qt pkg-config modules ==="
pkg-config --list-all 2>/dev/null | grep -i qt || true
echo ""
echo "=== QCustomPlot libraries ==="
/sbin/ldconfig -p | grep -i qcustomplot || true
echo ""
echo "=== Key shared libraries ==="
for lib in librtaudio libopus libportaudio libhidapi libudev libpulse; do
/sbin/ldconfig -p | grep "$lib" | head -2
done
# ─── Build ──────────────────────────────────────────────────────────
- name: Run qmake
run: |
qmake wfview.pro \
CONFIG+=release \
PREFIX=/usr
- name: Build with make
run: |
make -j$(nproc)
# ─── DEBUG: Verify build output ─────────────────────────────────────
- name: "DEBUG: Inspect build artifacts"
run: |
echo "=== Binary info ==="
file wfview
ls -lh wfview
echo ""
echo "=== ldd output ==="
ldd wfview
echo ""
echo "=== Checking for missing libraries ==="
ldd wfview | grep "not found" && echo "::warning::Some libraries are missing!" || echo "All libraries found."
# ─── Prepare AppDir ─────────────────────────────────────────────────
- name: Prepare AppDir structure
run: |
mkdir -p AppDir/usr/bin
mkdir -p AppDir/usr/share/applications
mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
mkdir -p AppDir/usr/share/metainfo
mkdir -p AppDir/usr/share/wfview/rigs
mkdir -p AppDir/usr/share/wfview/qdarkstyle
cp wfview AppDir/usr/bin/
cp resources/wfview.desktop AppDir/usr/share/applications/
cp resources/icons/bitmap/wfview.png AppDir/usr/share/icons/hicolor/256x256/apps/
cp resources/org.wfview.wfview.metainfo.xml AppDir/usr/share/metainfo/ || true
cp -r rigs/* AppDir/usr/share/wfview/rigs/
cp -r qdarkstyle/* AppDir/usr/share/wfview/qdarkstyle/
# linuxdeploy expects these at the AppDir root as well
cp resources/wfview.desktop AppDir/
cp resources/icons/bitmap/wfview.png AppDir/
# ─── DEBUG: Show AppDir contents ────────────────────────────────────
- name: "DEBUG: List AppDir"
run: |
echo "=== AppDir tree ==="
find AppDir -type f | sort
echo ""
echo "=== AppDir size ==="
du -sh AppDir
# ─── Download linuxdeploy ───────────────────────────────────────────
- name: Download linuxdeploy and Qt plugin
run: |
wget -q "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" \
-O linuxdeploy
wget -q "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" \
-O linuxdeploy-plugin-qt
chmod +x linuxdeploy linuxdeploy-plugin-qt
# ─── Create AppImage ────────────────────────────────────────────────
- name: Build AppImage
run: |
export QMAKE=$(which qmake)
export PATH="$(pwd):$PATH"
# Explicitly resolve libjack so linuxdeploy bundles it.
# Qt's JACK audio backend plugin links against libjack.so.0 at
# link time; without it present (and explicitly passed) linuxdeploy
# may skip it, causing "cannot open shared object file: libjack.so.0"
# on target systems that do not have JACK installed.
LIBJACK=$(ldconfig -p | awk '/libjack\.so\.0/{print $NF; exit}')
LIBJACK_ARG=""
if [ -n "$LIBJACK" ]; then
echo "Found libjack at: $LIBJACK"
LIBJACK_ARG="--library=$LIBJACK"
else
echo "::warning::libjack.so.0 not found; AppImage may be missing it"
fi
# linuxdeploy with the Qt plugin bundles all Qt libs/plugins
./linuxdeploy \
--appdir AppDir \
--desktop-file AppDir/usr/share/applications/wfview.desktop \
--icon-file AppDir/usr/share/icons/hicolor/256x256/apps/wfview.png \
$LIBJACK_ARG \
--plugin qt \
--output appimage
# linuxdeploy names it something like wfview-x86_64.AppImage
APPIMAGE_FILE=$(ls wfview*.AppImage 2>/dev/null | head -1)
if [ -z "$APPIMAGE_FILE" ]; then
echo "::error::AppImage was not created!"
ls -la
exit 1
fi
echo "AppImage created: $APPIMAGE_FILE"
mv "$APPIMAGE_FILE" wfview.AppImage
# ─── DEBUG: Verify AppImage ─────────────────────────────────────────
- name: "DEBUG: Verify AppImage"
run: |
ls -lh wfview.AppImage
file wfview.AppImage
echo ""
echo "=== AppImage contents (first 40 entries) ==="
./wfview.AppImage --appimage-list 2>/dev/null | head -40 || true
echo "..."
# ─── Assemble makeself payload ──────────────────────────────────────
- name: Assemble installer payload
run: |
mkdir -p installer-payload
cp wfview.AppImage installer-payload/
cp resources/wfview.desktop installer-payload/
cp resources/icons/bitmap/wfview.png installer-payload/
cp resources/org.wfview.wfview.metainfo.xml installer-payload/ || true
cp -r rigs installer-payload/
cp -r qdarkstyle installer-payload/
# Install script embedded in the payload
cat > installer-payload/install.sh << 'INSTALLER_EOF'
#!/bin/bash
# wfview AppImage Installer
# This script runs from within the makeself self-extracting archive.
#
# Usage:
# ./wfview-installer.sh # non-root install to ~/.local
# sudo ./wfview-installer.sh # root install to /usr/local
#
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APPIMAGE_NAME="wfview.AppImage"
# ─── Detect root vs non-root ──────────────────────────────────
if [ "$(id -u)" -eq 0 ]; then
IS_ROOT=true
PREFIX="/usr/local"
echo "=== wfview installer (root mode) ==="
else
IS_ROOT=false
PREFIX="${HOME}/.local"
echo "=== wfview installer (user mode) ==="
fi
echo "Installing to ${PREFIX}"
BIN_DIR="${PREFIX}/bin"
SHARE_DIR="${PREFIX}/share"
DESKTOP_DIR="${SHARE_DIR}/applications"
ICON_DIR="${SHARE_DIR}/icons/hicolor/256x256/apps"
METAINFO_DIR="${SHARE_DIR}/metainfo"
WFVIEW_SHARE_DIR="${SHARE_DIR}/wfview"
RIGS_DIR="${WFVIEW_SHARE_DIR}/rigs"
STYLE_DIR="${WFVIEW_SHARE_DIR}/qdarkstyle"
# ─── Create directories ───────────────────────────────────────
echo "Creating directories..."
mkdir -p "${BIN_DIR}"
mkdir -p "${DESKTOP_DIR}"
mkdir -p "${ICON_DIR}"
mkdir -p "${METAINFO_DIR}"
mkdir -p "${WFVIEW_SHARE_DIR}"
mkdir -p "${RIGS_DIR}"
mkdir -p "${STYLE_DIR}"
# ─── Backup existing rig files (non-root only) ────────────────
if [ "${IS_ROOT}" = false ] && [ -d "${RIGS_DIR}" ] && [ "$(ls -A "${RIGS_DIR}" 2>/dev/null)" ]; then
BACKUP_NAME="wfview-rigs-backup-$(date +%Y%m%d-%H%M%S).tgz"
BACKUP_PATH="${WFVIEW_SHARE_DIR}/${BACKUP_NAME}"
echo "Backing up existing rig files to ${BACKUP_PATH} ..."
tar czf "${BACKUP_PATH}" -C "${WFVIEW_SHARE_DIR}" rigs/
echo "Backup created."
fi
# ─── Install AppImage ─────────────────────────────────────────
echo "Installing AppImage to ${BIN_DIR}/wfview ..."
cp "${SCRIPT_DIR}/${APPIMAGE_NAME}" "${BIN_DIR}/wfview"
chmod +x "${BIN_DIR}/wfview"
# ─── Install rig files ────────────────────────────────────────
if [ -d "${SCRIPT_DIR}/rigs" ]; then
echo "Installing rig files to ${RIGS_DIR}/ ..."
cp -r "${SCRIPT_DIR}/rigs/"* "${RIGS_DIR}/"
fi
# ─── Install stylesheets ─────────────────────────────────────
if [ -d "${SCRIPT_DIR}/qdarkstyle" ]; then
echo "Installing stylesheets to ${STYLE_DIR}/ ..."
cp -r "${SCRIPT_DIR}/qdarkstyle/"* "${STYLE_DIR}/"
fi
# ─── Install icon ────────────────────────────────────────────
if [ -f "${SCRIPT_DIR}/wfview.png" ]; then
echo "Installing icon ..."
cp "${SCRIPT_DIR}/wfview.png" "${ICON_DIR}/wfview.png"
fi
# ─── Install metainfo ────────────────────────────────────────
if [ -f "${SCRIPT_DIR}/org.wfview.wfview.metainfo.xml" ]; then
echo "Installing metainfo ..."
cp "${SCRIPT_DIR}/org.wfview.wfview.metainfo.xml" "${METAINFO_DIR}/"
fi
# ─── Install desktop file (rewrite Exec/Icon paths) ──────────
if [ -f "${SCRIPT_DIR}/wfview.desktop" ]; then
echo "Installing desktop launcher ..."
sed -e "s|^Exec=.*|Exec=${BIN_DIR}/wfview|" \
-e "s|^Icon=.*|Icon=${ICON_DIR}/wfview.png|" \
"${SCRIPT_DIR}/wfview.desktop" > "${DESKTOP_DIR}/wfview.desktop"
chmod +x "${DESKTOP_DIR}/wfview.desktop"
fi
# ─── Update desktop database (best-effort) ────────────────────
if command -v update-desktop-database &>/dev/null; then
update-desktop-database "${DESKTOP_DIR}" 2>/dev/null || true
fi
if command -v gtk-update-icon-cache &>/dev/null; then
gtk-update-icon-cache "${SHARE_DIR}/icons/hicolor" 2>/dev/null || true
fi
# ─── Summary ─────────────────────────────────────────────────
echo ""
echo "════════════════════════════════════════════════"
echo " wfview installed successfully!"
echo "════════════════════════════════════════════════"
echo " Binary: ${BIN_DIR}/wfview"
echo " Rig files: ${RIGS_DIR}/"
echo " Stylesheets: ${STYLE_DIR}/"
echo " Desktop: ${DESKTOP_DIR}/wfview.desktop"
echo " Icon: ${ICON_DIR}/wfview.png"
echo "════════════════════════════════════════════════"
echo ""
if [ "${IS_ROOT}" = false ]; then
echo "NOTE: Make sure ${BIN_DIR} is in your PATH."
echo " export PATH=\"${BIN_DIR}:\${PATH}\""
fi
echo "Run wfview with: wfview"
INSTALLER_EOF
chmod +x installer-payload/install.sh
# ─── DEBUG: Show payload contents ───────────────────────────────────
- name: "DEBUG: List installer payload"
run: |
echo "=== Payload contents ==="
find installer-payload -type f | sort
echo ""
du -sh installer-payload
# ─── Build makeself installer ───────────────────────────────────────
- name: Create makeself installer
run: |
makeself \
--gzip \
installer-payload \
wfview-installer.sh \
"wfview AppImage Installer (commit ${{ steps.meta.outputs.git_short }})" \
./install.sh
ls -lh wfview-installer.sh
# ─── Upload artifact (available even if release step fails) ─────────
- name: Upload installer artifact
uses: actions/upload-artifact@v4
with:
name: wfview-linux-appimage-installer
path: wfview-installer.sh
retention-days: 30
# ─── Publish Beta Release ───────────────────────────────────────────
- name: Publish Beta Release
uses: softprops/action-gh-release@v2
with:
tag_name: linux-appimage-beta-${{ github.run_number }}
name: "wfview Linux AppImage Beta #${{ github.run_number }}"
prerelease: true
make_latest: false
files: wfview-installer.sh
body: |
## wfview Linux AppImage — Beta Build #${{ github.run_number }}
| Field | Value |
|-------|-------|
| **Architecture** | x86_64 |
| **Target OS** | Linux (glibc 2.35+, Ubuntu 22.04 and newer) |
| **Framework** | Qt 5 |
| **Commit** | `${{ steps.meta.outputs.git_short }}` |
| **Built** | ${{ steps.meta.outputs.timestamp }} |
**Commit message:** ${{ steps.meta.outputs.git_msg }}
---
### Install instructions
```bash
cd ~/Downloads
chmod +x wfview-installer.sh
# User install (to ~/.local):
./wfview-installer.sh
# System-wide install (to /usr/local):
sudo ./wfview-installer.sh
```
**User install notes:**
- The AppImage binary is placed in `~/.local/bin/wfview`
- Rig files go to `~/.local/share/wfview/rigs/`
- If existing rig files are found, a timestamped `.tgz` backup is created before replacement
- Ensure `~/.local/bin` is in your `PATH`
**System-wide install notes:**
- The AppImage binary is placed in `/usr/local/bin/wfview`
- Rig files go to `/usr/local/share/wfview/rigs/`
- Existing rig files in the system location are left as-is (not backed up)
**Requirements:** FUSE must be available to run AppImages. On Ubuntu/Debian:
```bash
sudo apt install libfuse2
```
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/workflows/macos-intel-qt5-bak 0000664 0000000 0000000 00000013305 15206174332 0027606 0 ustar 00root root 0000000 0000000 name: macOS Build
# permissions needed for release mechanism
permissions:
contents: write
on:
push:
branches: [ master, devel ]
workflow_dispatch: # allows manual trigger from GitHub Actions UI
schedule:
- cron: '0 6 * * 1' # every Monday 6am UTC, adjust as desired
jobs:
build-macos:
runs-on: macos-latest
steps:
- name: Checkout wfview
uses: actions/checkout@v4
with:
path: wfview
- name: Install Homebrew dependencies
run: |
brew install qt@5 portaudio hidapi opus eigen
- name: Set up sibling directories
run: |
BREW_PREFIX=$(brew --prefix)
# RTAudio - compiled directly into wfview by qmake
git clone --depth=1 https://github.com/thestk/rtaudio.git rtaudio
# r8brain resampler - headers only
git clone --depth=1 https://github.com/avaneev/r8brain-free-src.git r8brain-free-src
# Eigen - headers only
# The .pro expects ../eigen, brew installs it elsewhere so we clone it
git clone --depth=1 --branch 3.4.0 https://gitlab.com/libeigen/eigen.git eigen
# Opus headers - .pro expects ../opus/include
# Brew has them, just symlink into expected location
mkdir -p opus
ln -s ${BREW_PREFIX}/include/opus opus/include
# QCustomPlot - clone and build shared library
# git clone --depth=1 https://gitlab.com/DerManu/QCustomPlot.git qcustomplot
- name: Download QCustomPlot tgz
run: |
echo "=== Downloading QCP tgz file ==="
mkdir -p qcustomplot
curl -L "https://www.qcustomplot.com/release/2.1.1/QCustomPlot.tar.gz" \
-o qcustomplot.tar.gz
tar -xzf qcustomplot.tar.gz -C qcustomplot --strip-components=1
#echo "=== QCustomPlot contents after extract ==="
#ls qcustomplot/
echo "=== Finished with QCP downloading step. ==="
- name: Inspect structure
run: |
echo "=== Begin diagnostic output ==="
echo "=== Top level ==="
ls qcustomplot/
#echo "=== Complete listing ==="
#ls -R .
echo "=== End diagnostic output ==="
- name: Build QCustomPlot shared library
run: |
echo "=== Begin QCP build process ==="
BREW_PREFIX=$(brew --prefix)
export PATH="${BREW_PREFIX}/opt/qt@5/bin:$PATH"
mkdir -p qcustomplot/qcustomplot-sharedlib/build
cd qcustomplot/qcustomplot-sharedlib/build
# Note, add QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64" for universal build
# Otherwise will default to just arm64.
cat > qcustomplot-sharedlib.pro << 'EOF'
TEMPLATE = lib
TARGET = qcustomplot
QT += widgets printsupport
CONFIG += release shared
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
SOURCES += ../../qcustomplot.cpp
HEADERS += ../../qcustomplot.h
EOF
qmake qcustomplot-sharedlib.pro CONFIG+=release
make -j$(sysctl -n hw.logicalcpu)
cp ../../qcustomplot.h .
echo "Checking QCP build..."
pwd
ls -lR .
echo "=== Done with QCP build.==="
- name: Add Qt5 to PATH
run: |
BREW_PREFIX=$(brew --prefix)
echo "${BREW_PREFIX}/opt/qt@5/bin" >> $GITHUB_PATH
echo "PKG_CONFIG_PATH=${BREW_PREFIX}/opt/qt@5/lib/pkgconfig" >> $GITHUB_ENV
echo "BREW_PREFIX=${BREW_PREFIX}" >> $GITHUB_ENV
- name: Verify qmake
run: |
qmake --version
pwd
ls
- name: Run qmake
working-directory: wfview
run: |
# Note, you can change QMAKE_APPLE_DEVICE_ARCHS to "x86_64 arm64"
# Must also change this on QCP.
sed -i '' 's/x86_64 arm64/arm64/g' wfview.pro
qmake wfview.pro \
CONFIG+=release \
CONFIG+=sdk_no_version_check \
QMAKE_APPLE_DEVICE_ARCHS="arm64" \
INCLUDEPATH+="${BREW_PREFIX}/include" \
INCLUDEPATH+="../qcustomplot/qcustomplot-sharedlib/build" \
LIBS+="-L${BREW_PREFIX}/lib" \
LIBS+="-L../qcustomplot/qcustomplot-sharedlib/build"
- name: Build
working-directory: wfview
run: make -j$(sysctl -n hw.logicalcpu)
- name: Deploy and Package macOS App
run: |
echo "=== Fixing QCustomPlot dependency path ==="
# Point the executable to the absolute path of our locally built QCustomPlot library
# so macdeployqt can find it, bundle it, and fix the internal relative paths.
install_name_tool -change \
"libqcustomplot.1.dylib" \
"$PWD/qcustomplot/qcustomplot-sharedlib/build/libqcustomplot.1.dylib" \
wfview/wfview.app/Contents/MacOS/wfview
# Use Qt's deployment tool to bundle libraries and create a .dmg
echo "=== Deploying ==="
${BREW_PREFIX}/opt/qt@5/bin/macdeployqt wfview/wfview.app -dmg
echo "=== DONE deploying ==="
- name: Publish Beta Release
uses: softprops/action-gh-release@v2
with:
# Creates a unique tag for each run, e.g., "beta-142"
tag_name: beta-${{ github.run_number }}
name: "macOS Beta Build #${{ github.run_number }}"
body: "Automated beta build generated from commit ${{ github.sha }}."
prerelease: true # This is the magic flag that marks it as a beta!
files: wfview/wfview.dmg
- name: Upload wfview DMG artifact
uses: actions/upload-artifact@v4
with:
name: wfview-macos-installer
path: wfview/wfview.dmg # Uploads the single .dmg file
if-no-files-found: warn
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.github/workflows/macos-universal-qt6.bak 0000664 0000000 0000000 00000027617 15206174332 0030520 0 ustar 00root root 0000000 0000000 name: macOS Universal Qt6 Build
# Required for the GitHub Action bot to publish releases
permissions:
contents: write
on:
push:
branches: [ master, devel, audioprocessing ]
workflow_dispatch:
schedule:
- cron: '0 6 * * 1'
jobs:
build-macos:
runs-on: macos-latest
env:
SYSROOT: ${{ github.workspace }}/universal_sysroot
steps:
- name: Checkout wfview
uses: actions/checkout@v4
with:
path: wfview
fetch-depth: 0
- name: Install Official Qt6 (Universal)
uses: jurplel/install-qt-action@v4
with:
version: '6.8.1'
cache: true
host: 'mac'
target: 'desktop'
modules: 'qtserialport qtmultimedia qtwebsockets'
- name: Create Universal Sysroot
run: mkdir -p $SYSROOT
- name: Build Opus (Universal)
run: |
git clone --depth 1 https://github.com/xiph/opus.git
cd opus
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Build PortAudio (Universal)
run: |
git clone --depth 1 https://github.com/PortAudio/portaudio.git
cd portaudio
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Build HIDAPI (Universal)
run: |
git clone --depth 1 https://github.com/libusb/hidapi.git
cd hidapi
cmake -B build \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_INSTALL_PREFIX=$SYSROOT \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
- name: Set up sibling directories
run: |
git clone --depth=1 https://github.com/thestk/rtaudio.git rtaudio
git clone --depth=1 https://github.com/avaneev/r8brain-free-src.git r8brain-free-src
git clone --depth=1 --branch 5.0.1 https://gitlab.com/libeigen/eigen.git eigen
mkdir -p opus
ln -s $SYSROOT/include/opus opus/include
- name: Download QCustomPlot tgz
run: |
echo "=== Downloading QCP tgz file ==="
mkdir -p qcustomplot
curl -L "https://www.qcustomplot.com/release/2.1.1/QCustomPlot.tar.gz" \
-o qcustomplot.tar.gz
tar -xzf qcustomplot.tar.gz -C qcustomplot --strip-components=1
- name: Build QCustomPlot (Universal)
run: |
echo "=== Begin QCP build process ==="
mkdir -p qcustomplot/qcustomplot-sharedlib/build
cd qcustomplot/qcustomplot-sharedlib/build
cat > qcustomplot-sharedlib.pro << 'EOF'
TEMPLATE = lib
TARGET = qcustomplot
QT += widgets printsupport
CONFIG += release shared
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
SOURCES += ../../qcustomplot.cpp
HEADERS += ../../qcustomplot.h
EOF
qmake qcustomplot-sharedlib.pro \
CONFIG+=release \
QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64" \
QMAKE_MACOSX_DEPLOYMENT_TARGET=12.0
make -j$(sysctl -n hw.logicalcpu)
cp ../../qcustomplot.h .
- name: Get version
id: version
run: |
VERSION=$(grep 'WFVIEW_VERSION' wfview/wfview.pro | grep -oE '[0-9]+\.[0-9]+')
BUNDLE_VERSION=$(git -C wfview rev-list --count HEAD)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "bundle_version=$BUNDLE_VERSION" >> $GITHUB_OUTPUT
- name: Set version in Info.plist
run: |
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${{ steps.version.outputs.version }}" \
wfview/resources/Info.plist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${{ steps.version.outputs.bundle_version }}" \
wfview/resources/Info.plist
- name: Build wfview
working-directory: wfview
run: |
qmake wfview.pro \
CONFIG+=release \
CONFIG+=sdk_no_version_check \
QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64" \
QMAKE_MACOSX_DEPLOYMENT_TARGET=12.0 \
INCLUDEPATH+="$SYSROOT/include" \
INCLUDEPATH+="../qcustomplot/qcustomplot-sharedlib/build" \
LIBS+="-L$SYSROOT/lib" \
LIBS+="-L../qcustomplot/qcustomplot-sharedlib/build"
make -j$(sysctl -n hw.logicalcpu)
- name: Deploy macOS App
run: |
# Do not remove this line or the build will fail:
echo "ICE == murderers"
echo "=== Copying QCP before macdeployqt ==="
mkdir -p wfview/wfview.app/Contents/Frameworks
cp -a $GITHUB_WORKSPACE/qcustomplot/qcustomplot-sharedlib/build/libqcustomplot*.dylib wfview/wfview.app/Contents/Frameworks/
echo "=== Deploying Qt Frameworks ==="
macdeployqt wfview/wfview.app
echo "=== Bundling 3rd Party Libraries ==="
cp -a $SYSROOT/lib/libportaudio*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libopus*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libhidapi*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavcodec*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavformat*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libavutil*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libswresample*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
cp -a $SYSROOT/lib/libswscale*.dylib wfview/wfview.app/Contents/Frameworks/ 2>/dev/null || true
echo "=== Fixing Library Install Names ==="
for f in wfview/wfview.app/Contents/Frameworks/*.dylib; do
[ -L "$f" ] && continue
LIB_NAME=$(basename "$f")
install_name_tool -id "@rpath/$LIB_NAME" "$f" || true
done
echo "=== Adding rpath to binary ==="
BINARY="wfview/wfview.app/Contents/MacOS/wfview"
install_name_tool -add_rpath "@executable_path/../Frameworks" "$BINARY" || true
echo "=== Fixing bare QCP reference ==="
install_name_tool -change \
"libqcustomplot.1.dylib" \
"@rpath/libqcustomplot.1.dylib" \
"$BINARY" || true
echo "=== Verifying Library References ==="
echo "Remaining non-system external references in binary:"
otool -L "$BINARY" | grep -v '@executable_path' | grep -v '@rpath' | grep -v '/usr/lib' | grep -v '/System/' | grep -v 'wfview' || true
echo "RPaths in binary:"
otool -l "$BINARY" | grep -A2 LC_RPATH || true
- name: Import certificate
env:
CERTIFICATE_DATA: ${{ secrets.MACOS_CERTIFICATE }}
CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }}
run: |
echo "$CERTIFICATE_DATA" | base64 --decode > certificate.p12
security create-keychain -p "" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "" build.keychain
security import certificate.p12 -k build.keychain -P "$CERTIFICATE_PWD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain
- name: Sign application
run: |
IDENTITY="Developer ID Application: Phil Taylor (${{ secrets.MACOS_NOTARY_TEAM }})"
APP="wfview/wfview.app"
ENTITLEMENTS="wfview/resources/wfview.entitlements"
# 1. Sign standalone dylibs in Frameworks
find "$APP/Contents/Frameworks" -maxdepth 1 -name "*.dylib" -exec \
codesign --force --sign "$IDENTITY" --options runtime --timestamp {} \;
# 2. Sign Qt frameworks (sign the versioned binary inside each)
find "$APP/Contents/Frameworks" -name "*.framework" | while read fw; do
codesign --force --sign "$IDENTITY" --options runtime --timestamp "$fw"
done
# 3. Sign all plugin dylibs
find "$APP/Contents/PlugIns" -name "*.dylib" -exec \
codesign --force --sign "$IDENTITY" --options runtime --timestamp {} \;
# 4. Sign the main executable
codesign --force --sign "$IDENTITY" \
--options runtime \
--timestamp \
--entitlements "$ENTITLEMENTS" \
"$APP/Contents/MacOS/wfview"
# 5. Sign the app bundle last
codesign --force --sign "$IDENTITY" \
--options runtime \
--timestamp \
--entitlements "$ENTITLEMENTS" \
"$APP"
# Verify
codesign --verify --deep --strict --verbose=2 "$APP"
- name: Notarize application
env:
NOTARY_USER: ${{ secrets.MACOS_NOTARY_USER }}
NOTARY_PWD: ${{ secrets.MACOS_NOTARY_PWD }}
NOTARY_TEAM: ${{ secrets.MACOS_NOTARY_TEAM }}
run: |
# Package for notarization
ditto -c -k --keepParent wfview/wfview.app wfview.zip
# Submit and wait
xcrun notarytool submit wfview.zip \
--apple-id "$NOTARY_USER" \
--password "$NOTARY_PWD" \
--team-id "$NOTARY_TEAM" \
--wait
# Staple the ticket
xcrun stapler staple wfview/wfview.app
- name: Package macOS App
uses: lethja/create-dmg-action@v0.0.2
with:
name: 'wfview'
srcdir: 'wfview/wfview.app'
- name: Debug Output - Verify Library Linking
run: |
echo "=== Dynamically linked libraries requested by wfview binary ==="
otool -L wfview/wfview.app/Contents/MacOS/wfview
echo ""
echo "=== Contents of wfview.app/Contents/Frameworks/ ==="
ls -l wfview/wfview.app/Contents/Frameworks/ || true
echo ""
echo "=== Verifying 3rd Party Libraries ==="
for lib in $(otool -L wfview/wfview.app/Contents/MacOS/wfview | grep "@executable_path" | awk '{print $1}'); do
lib_basename=$(basename "$lib")
if [ -f "wfview/wfview.app/Contents/Frameworks/$lib_basename" ]; then
echo "SUCCESS: Found $lib_basename properly linked and bundled."
else
echo "ERROR: Missing $lib_basename in Frameworks folder."
fi
done
- name: Upload DMG Artifact (Failsafe)
uses: actions/upload-artifact@v4
with:
name: wfview-macos-beta-${{ github.run_number }}
path: wfview.dmg
if-no-files-found: warn
- name: Publish Beta Release
uses: softprops/action-gh-release@v2
with:
tag_name: beta-qt6-mac-${{ github.run_number }}
#target_commitish: ${{ github.sha }} # Forces the action to use this exact commit
name: "macOS Beta Build #${{ github.run_number }} (Universal / Qt6)"
body: |
Automated beta build generated from commit ${{ github.sha }}.
**Build Details:**
* 🏗️ **Architecture:** Universal Binary (Native support for Intel and Apple Silicon)
* 🖼️ **Framework:** Qt 6.8.1
* 💻 **Compatibility:** macOS 12 (Monterey) and newer.
prerelease: true
make_latest: false
files: wfview.dmg
token: ${{ secrets.GITHUB_TOKEN }} # Explicitly provides the permission token
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.gitignore 0000664 0000000 0000000 00000000341 15206174332 0022575 0 ustar 00root root 0000000 0000000 *.pro.user
*.pro.user*
.vscode
.vs
.qmake.stash
.qtc_clangd
debug
release
wfview-debug
wfserver-debug
wfview-release
wfserver-release
ui_*
portaudio_x86.dll
qcustomplot2.dll
Makefile
Makefile.Debug
Makefile.Release
.DS_Store
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.gitlab-ci.yml 0000664 0000000 0000000 00000003662 15206174332 0023252 0 ustar 00root root 0000000 0000000 stages:
- deploy
variables:
# Branches to mirror to GitHub. Edit this list as needed.
MIRROR_BRANCHES: "master newscope audioprocessing accessibility"
mirror-to-github:
stage: deploy
variables:
GIT_DEPTH: "0"
rules:
- if: $CI_COMMIT_BRANCH
image:
name: alpine/git:latest
entrypoint: [""]
script:
- |
# Check if current branch is in the mirror list
SHOULD_MIRROR=false
for BRANCH in $MIRROR_BRANCHES; do
if [ "$CI_COMMIT_BRANCH" = "$BRANCH" ]; then
SHOULD_MIRROR=true
break
fi
done
if [ "$SHOULD_MIRROR" = "false" ]; then
echo "Branch '$CI_COMMIT_BRANCH' is not in mirror list, skipping."
exit 0
fi
echo "Mirroring branch '$CI_COMMIT_BRANCH' to GitHub..."
GITHUB_URL="https://x-access-token:${GITHUB_PAT}@github.com/eliggett/wfview.git"
# Set up git identity (required for some git operations)
git config user.email "ci@mirror"
git config user.name "GitLab Mirror"
# Check if the original commit has a tag before we rewrite history
ORIGINAL_TAG=$(git tag --points-at "$CI_COMMIT_SHA" | head -1)
if [ -n "$ORIGINAL_TAG" ]; then
echo "Found tag '$ORIGINAL_TAG' on commit $CI_COMMIT_SHA"
else
echo "No tag on this commit."
fi
# Create orphan branch with the current tree
git checkout --orphan mirror_branch
git add -A
git commit -m "Mirror of $CI_COMMIT_SHORT_SHA"
# If the original commit had a tag, recreate it on the new commit
PUSH_REFS="HEAD:refs/heads/$CI_COMMIT_BRANCH"
if [ -n "$ORIGINAL_TAG" ]; then
git tag -f "$ORIGINAL_TAG" HEAD
PUSH_REFS="$PUSH_REFS refs/tags/$ORIGINAL_TAG"
echo "Tag '$ORIGINAL_TAG' applied to mirrored commit."
fi
# Push branch (and tag if present) to GitHub in one operation
git push --force --no-thin "$GITHUB_URL" $PUSH_REFS
echo "Done."
wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/.gitmodules 0000664 0000000 0000000 00000000000 15206174332 0022752 0 ustar 00root root 0000000 0000000 wfview-v2.23-cd18ea55fe479eb4526d1732b443cbfc3969c540/CHANGELOG 0000664 0000000 0000000 00001610263 15206174332 0022032 0 ustar 00root root 0000000 0000000 commit 375acead898ee98ca46bc9946d7338fa4630e719
Merge: e274271 34655f6
Author: Roeland Jansen
Date: Wed Apr 19 07:36:20 2023 +0200
Merge branch 'multi-usb'
commit e274271820f4562423a6cd89bfaa6033b9a4e609
Author: Phil Taylor
Date: Mon Apr 17 11:19:00 2023 +0100
Add support for IC-905
commit 34655f63488d4b998255c4dfa5a03f96939d5a67
Author: Phil Taylor
Date: Sat Apr 15 21:13:43 2023 +0100
Allow user to select which LED is updated by the button.
commit 8ad74ac7f66e4f2201751f6590431324c88df720
Author: Phil Taylor
Date: Sat Apr 15 20:13:20 2023 +0100
First step at improving LED support
commit 5d897c127a1f066753834dc718f7adff7c72cadd
Author: Phil Taylor
Date: Sat Apr 15 11:34:41 2023 +0100
Make TX LED work on RC28
commit 3c90a9363b994240ec8f8b6417b5db31839c97e6
Author: Phil Taylor
Date: Sat Apr 15 11:25:35 2023 +0100
Various fixes
commit c392874b3b58bd90196f47b936ea54ac38cbc95f
Author: Phil Taylor
Date: Fri Apr 14 21:36:46 2023 +0100
Comment out RC28 LED for now.
commit 7b101d5ad4c03082c5bcc2f0ca0c17ad80722434
Author: Phil Taylor
Date: Fri Apr 14 21:33:45 2023 +0100
Another attempt to fix for GCC
commit 6a2e2024ef1e7cb8ea1b6641f751ecff5a404445
Author: Phil Taylor
Date: Fri Apr 14 21:03:15 2023 +0100
Fix compile error
commit d941c831f357f294d29b6a39421e82f71d3810d4
Author: Phil Taylor
Date: Fri Apr 14 10:26:54 2023 +0100
Resize the controller display on tab change
commit f35ac25ad35ac3e3736caf9db15051e61f20c748
Author: Phil Taylor
Date: Thu Apr 13 15:28:46 2023 +0100
Various other fixes
commit 58f38c17357661333218fe8202c069760c3a13ca
Author: Phil Taylor
Date: Thu Apr 13 14:36:16 2023 +0100
Add RC28 LED Control to the features and disable controls that don't make sense
commit 59bc2077e4e931293ffe2a0f262d99d2e07157ea
Author: Phil Taylor
Date: Thu Apr 13 14:02:43 2023 +0100
Replace + with | in keyboard shortcuts
commit 8b786c1821f80708a2726cd5369736d6f8ae8ca3
Author: Phil Taylor
Date: Wed Apr 12 11:14:40 2023 +0100
Fix recursive calling of pageChanged()
commit 5ded2a0e79d88b4422bd782c6036f1effd72c089
Author: Phil Taylor
Date: Wed Apr 12 10:24:00 2023 +0100
Some more fixes
commit c9300f4d865968d017626c3617350965e01ad465
Author: M0VSE
Date: Tue Apr 11 20:25:29 2023 +0100
Add linux USB hotplug
commit 1549819ad6890ec2a554575eddfe6caf3454cd94
Author: Roeland Jansen
Date: Tue Apr 11 19:17:11 2023 +0200
Fedora 36 instr. added 2023-04-11/Knud OZ1DGN
commit 4874d70215b19bd8a4c6e14618b2a04e051030ce
Author: M0VSE
Date: Mon Apr 10 13:46:29 2023 +0100
Fix linux compile
commit d5f0e0f63c37eced89c70fc2bd65fbaddfa53434
Author: Phil Taylor
Date: Sun Apr 9 23:53:51 2023 +0100
Lots more features and other fixes
commit 1da3696ba23ce5593c864beb365df23fa493aba0
Merge: a0f3f7d 289170e
Author: Phil Taylor
Date: Mon Apr 3 14:31:48 2023 +0100
Merge branch 'tristate' into multi-usb
commit 289170e22d8e1a0a8e09ad8000f8fc24126c5fb1
Author: Phil Taylor
Date: Sun Apr 2 21:11:14 2023 +0100
Enable wf by default
commit ae0271c7f90d80233a1f3f2a2fce3116b12b34cc
Author: Phil Taylor
Date: Sun Apr 2 21:09:37 2023 +0100
Use tristate checkbox for Scope enable/disable (also add saving state)
commit a0f3f7de07da006799cdbff86251ee7f8d29a739
Author: Phil Taylor
Date: Sun Apr 2 20:07:13 2023 +0100
More work, tidying and improving stablity
commit 0304ac67f6a928624b1dd3850bab75525c4cbc9f
Author: Phil Taylor
Date: Wed Mar 29 23:33:18 2023 +0100
Add backup/restore of button config
commit 468cd2de0d716238fbb3f0f558a7e98f5b05ac6d
Author: Phil Taylor
Date: Tue Mar 28 21:58:46 2023 +0100
Add various commands, monitor, NB, NR etc.
commit 592c583d19aef88941c039d7fa3df0e727f8b363
Author: Phil Taylor
Date: Tue Mar 28 19:07:54 2023 +0100
Add USB hotplug support in Windows
commit cadf835d958050be5f7b58074c0e9f5f27cb065d
Author: Phil Taylor
Date: Mon Mar 27 12:38:01 2023 +0100
Receive current knob values from rig
commit 75288b5e7826ca05fc32263163d03334ada1d29d
Author: Phil Taylor
Date: Sun Mar 26 23:23:40 2023 +0100
Allow storing of icons and various other fixes
commit 6fd0d4e76310794a5b5a19d93bfcd3f890eb0ea0
Author: Phil Taylor
Date: Sun Mar 26 16:08:53 2023 +0100
various other fixes and stability improvements
commit 03c45663dcc9c9b7eb2246d93ce0329c779b0d3b
Author: Phil Taylor
Date: Sat Mar 25 16:58:28 2023 +0000
Fix crash when clicking on a knob.
commit ac582891886fd1706f0bf217a7b3b1e0d06bc20a
Author: Phil Taylor
Date: Sat Mar 25 09:09:42 2023 +0000
Initial support for Stream Deck Pro (other Stream Deck support to follow)
commit d7ba3d9d9ac7f47709ba52c20bbce54b2ff920f1
Author: Phil Taylor
Date: Tue Mar 21 15:37:57 2023 +0000
Fix for wrong VFO being set on haveBandStackReg
commit d1688a99c5207cacdc6f6d1025d36c8664afe58d
Author: Phil Taylor
Date: Tue Mar 21 13:24:48 2023 +0000
Fix controller setup window resizing
commit a74f68d9d410f8531ec59fc19941c4626eccd758
Author: Phil Taylor
Date: Tue Mar 21 13:17:35 2023 +0000
Various fixes
commit f663550da77131ea8b70438d8c022114197752a6
Author: Phil Taylor
Date: Mon Mar 20 15:37:11 2023 +0000
Set tab name correctly
commit 9d63c5cb71ba226e1e0d6f92c18c4cb17b3271ff
Author: M0VSE
Date: Mon Mar 20 15:32:04 2023 +0000
Fix window issue in linux
commit eb65ae0b1ce8a190c734f62e803d5a6e0e108034
Author: Phil Taylor
Date: Sat Mar 18 16:38:24 2023 +0000
Various fixes
Improve UI handling, add disable option
commit 898d5960d8525184efc89bb4f26ce65c4e14c88d
Author: Phil Taylor
Date: Sat Mar 18 01:34:40 2023 +0000
Allow main knob to be used for other values than VFO
commit a461babf73f156c08b83b9160098fb8f2a34f9ce
Author: Phil Taylor
Date: Sat Mar 18 00:17:33 2023 +0000
Fix warning
commit 792fac11d67328d1443e591b25d4d70f96db12ef
Author: Phil Taylor
Date: Fri Mar 17 23:35:40 2023 +0000
Support multiple USB controllers
commit f3a25fade42ad6b99bbb3de033ccbfd6c40d86dc
Author: Phil Taylor
Date: Sun Mar 12 18:25:17 2023 +0000
Remove unnecessary stepType setting from cwsender.ui
commit 3fa14ebc37c4e6c2f9d5fba47103e293e0a96d51
Author: Roeland Jansen
Date: Sun Mar 12 12:44:46 2023 +0100
v1.62 released; performance fix 9700 and cw sidetone
commit 6049e1dee67e981625652b43492f1f2f6c8edac1
Merge: e8ca39c 5328838
Author: Roeland Jansen
Date: Sun Mar 12 12:34:47 2023 +0100
Merge branch 'sidetone'
commit e8ca39ca18981c3bf1bb3e888efdc3b4b9ed9489
Author: Roeland Jansen
Date: Fri Mar 10 08:19:03 2023 +0100
fixes the dreaded connection timeouts some 9700 users have
commit 48a9710c118dfe0d154706180bfd2d22ca542dec
Author: Phil Taylor
Date: Thu Mar 9 17:47:52 2023 +0000
Add improved connection timeout for IC9700
commit 5328838c7399c943d8ac4556c8071157c38d267c
Author: Phil Taylor
Date: Tue Feb 21 11:46:14 2023 +0000
better control of rapid commands when mode changes
commit 87a261be1220bc2e3908d274b77ce961912e6f90
Author: Phil Taylor
Date: Tue Feb 21 11:11:55 2023 +0000
Move periodic pbt/passband to rapid queue
commit b738a38cbe1f2bce23088946898aab01b5470e8e
Author: Phil Taylor
Date: Tue Feb 21 10:53:58 2023 +0000
fix compile warnings from rigctl
commit b2af4c898efbd2475ebcb72294b7067f886e4fc6
Merge: 7901ceb cf4e872
Author: Phil Taylor
Date: Tue Feb 21 10:48:01 2023 +0000
Merge branch 'master' into sidetone
commit cf4e872e4ff9c68095017ab0159d3aaec4a4da3f
Merge: 37c3040 5b9a5ba
Author: Phil Taylor
Date: Mon Feb 20 22:20:14 2023 +0000
Merge branch 'master' of https://gitlab.com/eliggett/wfview
commit 37c30404d81c2550ce0ce7552126a9f747e791c8
Author: Phil Taylor
Date: Mon Feb 20 22:19:55 2023 +0000
Fix for shuttle detection on Linux
commit 5b9a5baaa1ee704220fe63f100a362a6f13e79d0
Author: Phil Taylor
Date: Mon Feb 20 18:26:22 2023 +0000
Add printsupport back
commit fc0bd2232dedf95705a04d7834a95cc27d00fa98
Author: Roeland Jansen
Date: Mon Feb 20 19:24:44 2023 +0100
changelog updated after rigctld-fixes
commit 2186a74490d6d62ee5581ba9956aac7e738f9791
Author: Phil Taylor
Date: Mon Feb 20 13:05:23 2023 +0000
Minor change to p and P commands in rigctld
commit b9288175bd67df8609996ba008268514c80515c1
Author: Phil Taylor
Date: Mon Feb 20 12:43:26 2023 +0000
Add remaining rigctld commands (mainly unimplemented)
commit 7901ceba79e4e28fddeaa134e213dc756173f747
Author: Phil Taylor
Date: Mon Feb 20 12:43:26 2023 +0000
Add remaining rigctld commands (mainly unimplemented)
commit e49eb2878e941f52e6f75f97888ae09fd20c0791
Author: Phil Taylor
Date: Mon Feb 20 11:48:53 2023 +0000
Rearrange signals
commit c8b97e895286f1143c65e4e5c89d65185ed31304
Author: Phil Taylor
Date: Mon Feb 20 10:34:21 2023 +0000
Emit finished() if sending is stopped prematurely
commit a6b1bce69eb4e196a815749dbb46bc0f67b4487a
Author: Phil Taylor
Date: Mon Feb 20 10:31:09 2023 +0000
Disconnect signals when not in use
commit e6644cdc1116e0ae22ca7464111ba26cf3ff96b7
Author: Phil Taylor
Date: Sat Feb 18 15:14:05 2023 +0000
Update cwsidetone.cpp
commit fe0fc0a5bb8f611004cdc3a8dac724e53276e309
Author: Phil Taylor
Date: Sat Feb 18 15:13:05 2023 +0000
Compile issue
commit 5fb9588c4aee25d18a6b3bb2e644c2558020dc28
Author: Phil Taylor
Date: Sat Feb 18 14:25:36 2023 +0000
Bit more tidying
commit 62f923d8ad38f4823d62569df71d8726c01616cd
Author: Phil Taylor
Date: Sat Feb 18 13:18:42 2023 +0000
Add support for push audio and various other fixes
commit 9f97df0ea5ea01d032c264619bbd929e122346b8
Author: Phil Taylor
Date: Sat Feb 18 11:03:13 2023 +0000
Make generateData more readable
commit ed1e8c3a8e87e2811639c5f4d989530c49890c10
Author: Phil Taylor
Date: Fri Feb 17 23:57:53 2023 +0000
Add message stacking
commit acec37ea17161ff0a7e6c30e5fcf0997f5217ed1
Author: Phil Taylor
Date: Fri Feb 17 23:21:29 2023 +0000
Improve timing
commit 428ea9156c03d85abe9fdb88d514e6e8601785f9
Author: Phil Taylor
Date: Fri Feb 17 18:08:44 2023 +0000
Change way we set sidetone volume
commit 18254cad1006292e75c29c67e886fcb138efe7d0
Author: Phil Taylor
Date: Fri Feb 17 17:56:10 2023 +0000
Log if write fails
commit 67685dc100affd1376085764c9f813044bf0b986
Author: Phil Taylor
Date: Fri Feb 17 17:46:12 2023 +0000
Stop writing sidetone audio on error
commit 71fd70f78bb512c9b3118bd450f888c173752abf
Author: Phil Taylor
Date: Fri Feb 17 17:26:21 2023 +0000
Sample type fixes
commit f9ca8e7e844d99fa14a8c36597ad454176a903cb
Author: Phil Taylor
Date: Fri Feb 17 16:56:01 2023 +0000
Restart audio device if stopped/suspended
commit acaed4601e215b13766cd69f9f7805809cfa4150
Author: Phil Taylor
Date: Fri Feb 17 16:49:19 2023 +0000
Hopefully fix audio.
commit 1177fa34198fbe5aac589242d99445d939593616
Author: Phil Taylor
Date: Fri Feb 17 16:28:56 2023 +0000
Disable sidetone if unchecked
commit 97ed3f6f424494c4305588558a32e6b79a4e68ef
Author: Phil Taylor
Date: Fri Feb 17 14:34:08 2023 +0000
Fix compile in linux
commit e594efdbbc9dd0e0e88eb4eb9d5a49a622a2fc83
Author: Phil Taylor
Date: Fri Feb 17 14:30:22 2023 +0000
Try to stop crash if there is no default audio device
commit 3ce35500b9f3861f3aea00f2becbf3e43d861826
Author: Phil Taylor
Date: Fri Feb 17 14:01:09 2023 +0000
Fix Qt5 compile (hopefully)
commit 9eb89a9cb1279ee7e8badeba0230fce19baf77d6
Author: Phil Taylor
Date: Fri Feb 17 13:58:02 2023 +0000
First working cw sidetone
Still needs better timing and volume
commit fd6d132fd3616f6681b1924f9b46dcdd69b1aaba
Author: Phil Taylor
Date: Tue Feb 14 20:27:32 2023 +0000
Various fixes
commit 6f1d4e24b7676bebae425c778cae4085355cdb99
Merge: 8b7377f ce9e3e9
Author: Phil Taylor
Date: Tue Feb 14 18:48:10 2023 +0000
Merge branch 'master' into sidetone
commit 8b7377f0960ff1b2936e4eccebd831312e673b56
Author: Phil Taylor
Date: Tue Feb 14 18:47:32 2023 +0000
Add some feature in the hope of supporting sidetone
commit ce9e3e9f2cd8a343ab65d068904475126bfc8483
Author: Roeland Jansen
Date: Tue Feb 14 16:10:38 2023 +0100
ecoder, collission-detection added
commit dd4770a85ff462913c223fcb1a9aeff65cce0a5d
Merge: 32e6622 3582c95
Author: Phil Taylor
Date: Mon Feb 13 15:37:26 2023 +0000
Merge branch 'collision-detection' into ecoder
commit 32e662237bebcf46f337d173a195849f4d98ee7a
Author: Phil Taylor
Date: Mon Feb 13 15:14:27 2023 +0000
Make ptt react correctly
commit 3582c95c58185a951ecb1b242bec974d835082df
Author: Phil Taylor
Date: Sun Feb 12 23:14:39 2023 +0000
Fixes to collision detection.
commit da71bb3bc3d244a6d33307d180d8cc5f4069b7aa
Author: Phil Taylor
Date: Sun Feb 12 23:14:51 2023 +0000
Remove debugging
commit 0397b4b68aab860bd1aa8ca9ab1a4ff0828b11df
Author: Phil Taylor
Date: Sun Feb 12 23:14:39 2023 +0000
Fixes to collision detection.
commit feac83b997da6dfff3170813fa0b16150482d7fb
Author: Phil Taylor
Date: Sat Feb 11 11:40:30 2023 +0000
Attempt at simple collision detection
commit 9afc661c4c52276fafb5b866f09e4d52024b5943
Author: Phil Taylor
Date: Sun Feb 12 17:17:29 2023 +0000
Update usbcontroller.cpp
commit 6de14df1da5e2303c6c2b89e2b399ae3312657be
Author: Phil Taylor
Date: Sun Feb 12 17:14:26 2023 +0000
Fix compile warnings
commit 7e89e9f457f2867bd2f5a00f2299281cd6100eef
Author: Phil Taylor
Date: Sun Feb 12 16:45:21 2023 +0000
Add support for Xencelabs QuickKeys
commit 3cb54f9cd7c512ada7b63bc1507a4dee805f85e6
Author: Phil Taylor
Date: Sat Feb 11 11:40:30 2023 +0000
Attempt at simple collision detection
commit 80838e4f82068a6e7ad042e06abc073626f4ad69
Author: Phil Taylor
Date: Sat Feb 11 11:39:18 2023 +0000
Some more changes
commit 54c75d5defaff2014f96b8256d621f832b557211
Author: Phil Taylor
Date: Fri Feb 10 18:52:51 2023 +0000
Multiply knob values * 10
commit 8b59efbf336bae5bae8d2f85ed4e94c2067bf492
Author: Phil Taylor
Date: Fri Feb 10 18:40:11 2023 +0000
Another try
commit 9db06989279270b03f5d968c03015e4d249d6e49
Author: Phil Taylor
Date: Fri Feb 10 18:26:34 2023 +0000
Quick test
commit 251239e445b2faf2f1ee5d4eae8668b522de5268
Author: Phil Taylor
Date: Fri Feb 10 18:13:50 2023 +0000
Update usbcontroller.cpp
commit a3a82cd442a2a6a2fa428e99e9401d360996e9b1
Merge: 3461a0e 6e5e22a
Author: Phil Taylor
Date: Fri Feb 10 18:11:42 2023 +0000
Merge branch 'master' into ecoder
commit 3461a0e5e51b68517561cbdfbedd19141725f7c6
Author: Phil Taylor
Date: Fri Feb 10 18:10:32 2023 +0000
Correct usbMutex
commit 3429786e106f2c145c8987d5b4a39e63134a789b
Author: Phil Taylor
Date: Fri Feb 10 15:51:01 2023 +0000
Reset knobValues to 0 after sending
commit c2e9100a40f4550fd51e312ac359034d8323f552
Author: Phil Taylor
Date: Fri Feb 10 15:47:23 2023 +0000
Hopefully fix random buttons
commit c8a29bb40096de3fd4b77d7c7f218531a1372647
Author: Phil Taylor
Date: Fri Feb 10 15:23:57 2023 +0000
Add mutex to ensure thread safety
commit fa47bfb4bc37fe96e0e602eabf8ed267342a9928
Author: Phil Taylor
Date: Fri Feb 10 13:34:04 2023 +0000
Update usbcontroller.cpp
commit 82425b445e21a6ef1381a39d10c666cc4910e082
Author: Phil Taylor
Date: Fri Feb 10 13:28:09 2023 +0000
Try again
commit 7aa75466600a50578e335ae5f47c8ef257382596
Author: Phil Taylor
Date: Fri Feb 10 09:52:51 2023 +0000
More work on knobs
commit 4e61a455b5cf7f9679d7182c494c8ea2b6156b81
Author: Phil Taylor
Date: Fri Feb 10 00:31:12 2023 +0000
Hide setup screen if disabled
commit cad3bb9418020ff9583d25d688b397afd88f6fea
Author: Phil Taylor
Date: Fri Feb 10 00:27:01 2023 +0000
Various (I hope) improvements!
commit 1f1800f046a32a969c17d1d48d2dd826ffc4081e
Author: Phil Taylor
Date: Thu Feb 9 18:43:42 2023 +0000
Flip bits in knob command
commit 5ed380c03d792de91ba15a14549b46ca8d8cabca
Author: Phil Taylor
Date: Thu Feb 9 18:35:07 2023 +0000
Remove debug setup
commit a8951813f5a69f17d044f8f723fc23702c0f7bc1
Author: Phil Taylor
Date: Thu Feb 9 13:21:51 2023 +0000
Provisional support for knobs
commit 6e5e22a672e430d872eddb232bcc8491134dc13d
Author: Roeland Jansen
Date: Wed Feb 8 19:00:44 2023 +0100
another compile fix
commit bbbfe38e0bfc5280e349049c126dcf2792c06b52
Author: Elliott Liggett
Date: Wed Feb 8 08:26:36 2023 -0800
Very minor thing to help compiling with older hidapi.
commit 6a76efa368b9d0fa88d8ae3761229dbefcd25c87
Author: Roeland Jansen
Date: Wed Feb 8 11:26:33 2023 +0100
compilation fixes
commit 17a65472646b1113da2c4b7dcccf3763f41d3085
Merge: cb339ed 0ff2551
Author: Phil Taylor
Date: Wed Feb 8 10:15:16 2023 +0000
Merge branch 'master' into ecoder
commit 1515e135e5434ab7c334214ff10165e484536906
Author: Phil Taylor
Date: Wed Feb 8 10:12:48 2023 +0000
Fix for old hidapi without version info.
commit 0ff2551026c7861ab1dc2194388ea3c5cbbfdf67
Author: Phil Taylor
Date: Tue Feb 7 23:29:50 2023 +0000
Fix compile if controller disabled
commit cb339edc1f4881df29db1d4d9f93b38e8316aa8d
Author: Phil Taylor
Date: Tue Feb 7 23:29:50 2023 +0000
Fix compile if controller disabled
commit f4a86ac02e5996d61bdddef0f69b4ce92b19a4de
Author: Phil Taylor
Date: Tue Feb 7 23:05:42 2023 +0000
Add more buttons
commit b783f8057a8e1d4e85db4e89de14c059b22e8169
Author: Phil Taylor
Date: Tue Feb 7 22:37:26 2023 +0000
tuning knob?
commit 10640381387bac9893122e9fd7a2530e52522e50
Author: Phil Taylor
Date: Tue Feb 7 21:12:02 2023 +0000
Another try
commit dda3c8ee9d52855be21cfcf3288664bf52d7c8de
Author: Phil Taylor
Date: Tue Feb 7 21:01:54 2023 +0000
Update usbcontroller.cpp
commit 63b8a356e85528ec8dbbbfc403a7d317e6e2705f
Author: Phil Taylor
Date: Tue Feb 7 20:59:53 2023 +0000
Another try for buttons
commit 4fc37290e516e8507137b4f91084967749f22381
Author: Phil Taylor
Date: Tue Feb 7 20:51:20 2023 +0000
try to fix ecoder buttons
commit 72e8bc6fa6903e6094de58084e96509f1b8f6f7c
Author: Phil Taylor
Date: Tue Feb 7 20:32:46 2023 +0000
Remove debug code
commit 8a28a8976090f433c0822fc66d9aa01b107bc215
Author: Phil Taylor
Date: Tue Feb 7 19:41:39 2023 +0000
Correct order!
commit 5298949f3a50ebb7fba6e265ba656a300679a2be
Author: Phil Taylor
Date: Tue Feb 7 19:37:33 2023 +0000
Add support for ecoder buttons
commit 1e217bc5b82b43f63d75e3f3db4f6f8b29bcbeb2
Author: Phil Taylor
Date: Tue Feb 7 19:02:05 2023 +0000
Some initial updates
commit fbea7f1a136f9f5e2b6b3cc599be14c344294fd7
Merge: b373685 32639c5
Author: Phil Taylor
Date: Tue Feb 7 18:41:02 2023 +0000
Merge branch 'ecoderplus' into 'ecoder'
Ecoderplus
See merge request eliggett/wfview!17
commit 32639c5394409abb05b95c7d292c09d9bda375f3
Author: Dawid Szymanski - SQ6EMM/SN6M
Date: Tue Feb 7 18:41:02 2023 +0000
Ecoderplus
commit b373685fd31f7d6cf21a117650a9bbdf17e5d107
Author: Roeland Jansen
Date: Tue Feb 7 18:56:41 2023 +0100
v1.61
commit ea1fefc219017856df6bf3c1f79b596213c97403
Merge: 6e0ebcd 3d2c162
Author: Roeland Jansen
Date: Tue Feb 7 18:52:37 2023 +0100
Merge branch 'wf-fix'
commit 3d2c16201be5fa6a92f2931cfad754cee48448a1
Author: Phil Taylor
Date: Tue Feb 7 17:51:52 2023 +0000
Fix invalid scope data in combine mode
commit 6e0ebcdd5a109695ca95da5cb41bb13d6e08ac79
Author: Roeland Jansen
Date: Tue Feb 7 18:20:18 2023 +0100
removed empty file
commit 2488d62f2e429e1607fc12966db8d4f03312ad7f
Author: Roeland Jansen
Date: Tue Feb 7 18:17:57 2023 +0100
fixes stuff after 1.60 release
commit 40f49c56e7553ca907c533b5d0fe5f277a1420f3
Author: Phil Taylor
Date: Tue Feb 7 17:11:53 2023 +0000
Try again
commit 529d1015409ee326e6bd81132f41e07bc34bc1dd
Author: Phil Taylor
Date: Tue Feb 7 16:50:02 2023 +0000
Quick fix
commit 14a4b25e9740d39213c9036e9415751db7dc700a
Author: Phil Taylor
Date: Tue Feb 7 15:22:22 2023 +0000
Add a comment about usb device types
commit 78fa2489634d1dcdecf27de05af0aa3f7a5f5538
Author: Phil Taylor
Date: Tue Feb 7 14:49:17 2023 +0000
Slightly better way of defining USB device types
commit 7de515b70d58ce9f1775bd7b13c202029fce0a40
Author: Phil Taylor
Date: Tue Feb 7 10:10:04 2023 +0000
Add spacer
commit 76694361b58d3f7312847e32e79e97feecd36a82
Author: Phil Taylor
Date: Tue Feb 7 09:40:38 2023 +0000
Add small space above sensitivity slider
commit 0e28f288ff6e9349971466d453b7c447f971b46f
Author: Phil Taylor
Date: Tue Feb 7 09:32:33 2023 +0000
Add sensitivity control to USB controllers.
commit b619be3e2a3b2ad66e6a2056fb73e7fdb0ca86be
Author: Phil Taylor
Date: Mon Feb 6 19:54:52 2023 +0000
Another fix
commit 64c0007c78cbc4914d5a731654362596214ab8dc
Author: Phil Taylor
Date: Mon Feb 6 19:51:30 2023 +0000
More USB fixes
commit b566a760ed0f252137c4703c4db01f8309c47563
Author: Phil Taylor
Date: Mon Feb 6 18:50:49 2023 +0000
Add device path
commit 69afce7712101ed1d35981bfa0465a5119318c66
Author: Phil Taylor
Date: Mon Feb 6 18:19:12 2023 +0000
Check hidapi version
commit 5654fa524e57f8c8462d4395a551e33768e5db4e
Author: Phil Taylor
Date: Mon Feb 6 17:52:47 2023 +0000
More attempts to fix MacOS
commit 3d053c3c96312b3310583d1c0e3a87ce358cd4a8
Author: Phil Taylor
Date: Mon Feb 6 15:54:35 2023 +0000
Require exclusive access for MacOS
commit 872c8aee302819b0aef9b333fce841db54be837f
Author: Phil Taylor
Date: Mon Feb 6 15:48:04 2023 +0000
Update usbcontroller.cpp
commit e2d6101a530fb49863ecbc3773b2fe983f16454e
Author: Phil Taylor
Date: Mon Feb 6 15:46:48 2023 +0000
Fic mac build
commit b35e1af185b2bd68eeb37d910aa1e0bbd9d0a89c
Author: Phil Taylor
Date: Mon Feb 6 15:43:53 2023 +0000
Update usbcontroller.h
commit a60cb39483428a2ee54fe24391c8ff954a236ab9
Author: Phil Taylor
Date: Mon Feb 6 15:33:59 2023 +0000
More improvements to device enumeration
commit 6464f28159ae2fb52fd6590974ba07b103ec3741
Merge: 7b7d21d 16eb459
Author: Phil Taylor
Date: Mon Feb 6 15:03:19 2023 +0000
Merge branch 'master' into usb-macfix
commit 7b7d21d3a72e840ee61681495156f309fe2c86ed
Author: Phil Taylor
Date: Mon Feb 6 15:02:48 2023 +0000
Improve USB device enumeration and fix for MacOS
commit 16eb4591eb767797125ea134de87cd1931536dbf
Author: Roeland Jansen
Date: Mon Feb 6 10:45:08 2023 +0100
updated CHANGELOG
commit eae5b93f0e404fc15561ad310e39fd3be9d01ccf
Merge: 2128e6f 02c1dcd
Author: Roeland Jansen
Date: Mon Feb 6 10:44:34 2023 +0100
Merge branch 'wsjtx-fix'
commit 02c1dcdb8b2abefe0e78bb53cea4c1e17914746a
Author: Phil Taylor
Date: Sun Feb 5 21:58:49 2023 +0000
Request passband at startup
commit f4e772e1c7903e0d31492917a053e849da38236f
Author: Phil Taylor
Date: Sun Feb 5 21:51:00 2023 +0000
Update wfmain.cpp
commit 4a3f8692b553ad3d5030cf04796fd9f08e966cf6
Author: Phil Taylor
Date: Sun Feb 5 21:50:24 2023 +0000
Update rigState on receipt of new passband from rig.
commit 2ec62b6c807702fb96bc0a10eaa2614ec7bea5b4
Author: Phil Taylor
Date: Sun Feb 5 21:43:51 2023 +0000
Make CRC hex
commit 01e01321d397ef812ceb5d2b2c5e97082d99268b
Author: Phil Taylor
Date: Sun Feb 5 21:40:59 2023 +0000
This might cause a compile warning?
commit f0c8842c058c3481463e8b99e542302eaf96b7a5
Author: Phil Taylor
Date: Sun Feb 5 21:33:02 2023 +0000
Actually send the response!
commit 979dffc1761c5e86821be46b2f16faf5db20c58a
Author: Phil Taylor
Date: Sun Feb 5 21:28:24 2023 +0000
Add some more commands
commit 2128e6fc1080ea7c7a31597e5c23626f97dd4ae4
Merge: fd86efa 27ac972
Author: Phil Taylor
Date: Sun Feb 5 20:15:42 2023 +0000
Merge branch 'wsjtx-fix' into pbt-color-picker
commit fd86efa4b90123882d45a2d86474f69784d35dcc
Author: Phil Taylor
Date: Sun Feb 5 13:21:12 2023 +0000
Add color picker for PBT
commit 27ac972f4a1e5a0d9606d74df47d0a490b1298a0
Author: Phil Taylor
Date: Sun Feb 5 11:30:38 2023 +0000
Add support for latest version of wsjt-x to rigctld
commit bb632b8e2b1115c5e4cf7d56726e6c55046b93a8
Author: Elliott Liggett
Date: Sat Feb 4 09:57:12 2023 -0800
Fixed placement of "out of range" data byte reading.
commit 11f8cb702ff236f96b40ee1e9b255f97becb1a72
Author: Roeland Jansen
Date: Sat Feb 4 14:49:58 2023 +0100
v1.60 milestone released
commit 82f268508ea210a8a3c89fcc31c7799833cb26ea
Merge: a08ada4 a1db8d1
Author: Roeland Jansen
Date: Sat Feb 4 12:34:17 2023 +0100
Merge branch 'pbt-lsb-fix'
commit a1db8d1d60c5af60d15173f18204d0edda7ec476
Author: Phil Taylor
Date: Sat Feb 4 11:32:52 2023 +0000
Another attempt to fix
commit a08ada4cabb4366e83a5a7ab3f044385b04a4ed1
Merge: 953399d 5671e26
Author: Roeland Jansen
Date: Sat Feb 4 12:31:23 2023 +0100
Merge branch 'pbt-lsb-fix'
commit 5671e2659196cbec667785ce158467f143191842
Author: Phil Taylor
Date: Sat Feb 4 11:30:30 2023 +0000
Hopefully fix wfserver compiling
commit 953399de063606a883bc04b7cdc168d9930ee1b0
Merge: c70bbb0 903d196
Author: Roeland Jansen
Date: Sat Feb 4 12:11:20 2023 +0100
Merge branch 'pbt-lsb-fix'
commit 903d1965ba03074c30ccb90ad35a463206bdc6ee
Author: Phil Taylor
Date: Sat Feb 4 10:26:42 2023 +0000
Hide half duplex combo to avoid confusion
commit eae1fc725ee6599fc24276169c627ea56fa1289e
Author: Phil Taylor
Date: Sat Feb 4 00:02:59 2023 +0000
Fix some more bits in wfview.pro
commit 857c62f99f64d8745f435b4294fbfa26f08985bb
Author: Phil Taylor
Date: Fri Feb 3 23:10:40 2023 +0000
Move opus to .dll for 1.60R
commit 7b2aca6cbd1457a3860886e8507c3d2326db4eb4
Author: Phil Taylor
Date: Fri Feb 3 20:34:59 2023 +0000
Same PBT fix for CW and RTTY
commit f3da86940fb53708b5ce119625be3c6c5756f473
Author: Phil Taylor
Date: Fri Feb 3 19:58:37 2023 +0000
Fix for displaying PBT in LSB mode
commit c70bbb0998fa063e64dc7fb436a38444a4aeae7b
Merge: 0af2615 d7fa78f
Author: Roeland Jansen
Date: Fri Feb 3 20:15:58 2023 +0100
Merge branch 'usb-ui-help-text'
commit d7fa78fcd22de57ea8d5878cd3c5d09bf2832803
Author: Phil Taylor
Date: Fri Feb 3 19:08:08 2023 +0000
Add Help text to usbControllerSetup
commit 0af2615833a06cd974b3a956786c1f3cc058423b
Merge: 41aa951 b928f23
Author: Roeland
Date: Fri Feb 3 19:51:34 2023 +0100
Merge branch 'tx-rx-missed-fix'
commit b928f230519c0379c4aa76313ed1617e51e97c26
Author: Phil Taylor
Date: Fri Feb 3 18:08:19 2023 +0000
Only accept rigstate updates from rig if value is not in updated condition
commit 41aa95129a136cfd9eac6df4baa66eda2d7748d1
Author: Roeland Jansen
Date: Fri Feb 3 18:39:10 2023 +0100
small steps... until 1.60 hits
commit 072ab1967f2c39b27a50b7d4e2fb4f04b20bb172
Merge: c6bd93a 75b86a0
Author: Roeland Jansen
Date: Fri Feb 3 18:32:57 2023 +0100
Merge branch 'band-switching'
commit 75b86a0e4af92615f7f3caa7f002a132272ebf4e
Author: Phil Taylor
Date: Fri Feb 3 17:29:39 2023 +0000
Remove setting that causes error
commit b334241ea05558ad8cd4e558d75fa0808c50b773
Author: Phil Taylor
Date: Fri Feb 3 11:21:11 2023 +0000
Allow plot click to display frequency if nothing else is under it
commit a5112825054fd51402ad32cf634bfc6241893369
Author: Phil Taylor
Date: Thu Feb 2 23:46:39 2023 +0000
Simplify command creation
commit 4ea80af164c1cca9a3a833228d2b768bd8e829c1
Merge: 80dc5d2 156f45d
Author: Phil Taylor
Date: Thu Feb 2 23:12:43 2023 +0000
Merge branch 'morecontrols' into band-switching
commit 80dc5d2df680979e406d9ccb93cdbfd0b8ee8ef0
Author: Phil Taylor
Date: Thu Feb 2 23:11:49 2023 +0000
Bit of tidying
commit 3993046771d83a5130d0c683e4e1b6a034e52638
Author: Phil Taylor
Date: Thu Feb 2 22:53:52 2023 +0000
Remove UDP congestion mitigation
commit 06c3e33b4d0a91aafc1c7bf719eaf143199b80ce
Author: Phil Taylor
Date: Thu Feb 2 17:45:24 2023 +0000
Initialize lastdata first.
commit d0cd7e2eb3eac3f519e29eaf569927f95f1d633c
Author: Phil Taylor
Date: Thu Feb 2 16:45:45 2023 +0000
Use correct data for F1 key
commit 5237c930e5d5fdce238d7cdce562433293a48da0
Author: Phil Taylor
Date: Thu Feb 2 16:23:41 2023 +0000
Ensure link LED is turned on at startup
commit 777d08ef24882e5fbf1346c615642396b63b933f
Author: Phil Taylor
Date: Thu Feb 2 16:21:59 2023 +0000
Turn off link LED when shutdown
commit c4fcc8983092bb6846bb97df667abee749de8fec
Author: Phil Taylor
Date: Thu Feb 2 16:17:41 2023 +0000
Reduce to only send 3 bytes (report+data)
commit 193e07284e335c73dba4fc405ffb8db8655545c7
Author: Phil Taylor
Date: Thu Feb 2 15:47:59 2023 +0000
LED not working, maybe due to data size?
commit 6c44ea9e0d93ef2b90ee26efc81f87bde6eca3f9
Author: Phil Taylor
Date: Thu Feb 2 15:02:32 2023 +0000
More fixes
commit ad50d4107162290fa0c54e2f5099df45ec96738f
Author: Phil Taylor
Date: Thu Feb 2 11:24:22 2023 +0000
Fix warning
commit 1ac8f5c2f0f9e72a88ac6d18c8151bfe1b840eb9
Author: Phil Taylor
Date: Thu Feb 2 11:23:17 2023 +0000
Fix GCC build error
commit e20900dbcf02a533dbf5d6a62120b9dac2991b77
Author: Phil Taylor
Date: Thu Feb 2 00:03:13 2023 +0000
Query RC-28 for version
commit a192e6643b15e89a692bc1015af96a2f31f19859
Author: Phil Taylor
Date: Thu Feb 2 00:02:59 2023 +0000
Tidy-up wfserver.pro
commit c6bd93a2b688d34330ce26017f946e0d140e3b09
Author: Phil Taylor
Date: Wed Feb 1 18:29:26 2023 +0000
Stop shuttle emitting a signal every 100ms!
commit 4816427954dd03140164cffe44ad65967b83fde9
Author: Phil Taylor
Date: Wed Feb 1 18:29:26 2023 +0000
Stop shuttle emitting a signal every 100ms!
commit 156f45d42ffe390d63fe0b1346d109fe29e6ae77
Author: Elliott Liggett
Date: Wed Feb 1 09:21:17 2023 -0800
Added quicksplit checkbox
commit bbcc0e484286043ecb8507caad489100c5115313
Author: Elliott Liggett
Date: Wed Feb 1 08:46:13 2023 -0800
Added "only available in FM" repeater setup warning.
commit 4411c1480ead7d70dbd73927ccc13a504f45d99b
Author: Elliott Liggett
Date: Wed Feb 1 08:14:36 2023 -0800
Cleaned up some debug code, checked repter-split checkbox by default.
commit 5fa14d13e1da33db47dd1295d80bed6980126eea
Author: Phil Taylor
Date: Wed Feb 1 12:16:04 2023 +0000
Try to get RC-28 LEDs working
commit 180b7b0095af9014d7614bae145e867136544ebb
Merge: 071606f eaf7eb1
Author: Phil Taylor
Date: Wed Feb 1 09:42:09 2023 +0000
Merge branch 'morecontrols' into band-switching
commit 071606fe5a4159db43fa671424f85c2252e1f2e1
Author: Phil Taylor
Date: Wed Feb 1 09:41:18 2023 +0000
More commands
commit 096c223715cbb2e40670c867f42d1c58e8de15b7
Author: Phil Taylor
Date: Wed Feb 1 09:24:26 2023 +0000
I've added a "Swap VFOs" command to the USB controller, which seems to work.
commit eaf7eb126eea20e61919b3f0a9027975874e5f96
Author: Elliott Liggett
Date: Tue Jan 31 22:38:22 2023 -0800
Disabled function that does not work with the cw combo box.
commit 38e6cb2ef4da044fa5c91bdf1cadba8a7dee0249
Author: Elliott Liggett
Date: Tue Jan 31 22:36:37 2023 -0800
removed unused functions
commit 3c31687b158c5884f106e570aec620e8c9c73396
Author: Elliott Liggett
Date: Tue Jan 31 22:11:45 2023 -0800
Added additional tone and tone mode sync up for split mode
commit a5f3750988323e5762139dc683857bf5754b180f
Author: Elliott Liggett
Date: Tue Jan 31 22:08:27 2023 -0800
Cleaned up repeater-related debug code.
commit eea17e5e09c70784ebb8ac251d3686b296590881
Author: Elliott Liggett
Date: Tue Jan 31 21:52:24 2023 -0800
Possibly the tone issue is solved.
commit d503df03bd675b8c2cc665a62dd548e3fecafc9d
Author: Elliott Liggett
Date: Tue Jan 31 18:00:12 2023 -0800
Continued repeater status work...
commit 17d6493338a57c77348041844953038e6987dd63
Author: Elliott Liggett
Date: Tue Jan 31 14:03:51 2023 -0800
Potentially fixed TONE and TSQL for rigs other than the mighty IC-9700.
commit cb7cf6c2185b39ea933ecf6ac3778776342eded8
Author: Elliott Liggett
Date: Tue Jan 31 09:35:55 2023 -0800
Added "scope out of range" notification.
commit 2696d2c8d94cf391086be35854078dc454155359
Author: Phil Taylor
Date: Mon Jan 30 23:54:45 2023 +0000
Fix for band +/- buttons
commit 63a7ec0a2149a83ec319622d8d944fcbe81de159
Author: Phil Taylor
Date: Mon Jan 30 21:43:47 2023 +0000
Final tidying for Windows Builld
commit 28c9d1beb2fdfb3434805e732f87b287ba2a2f6f
Author: Phil Taylor
Date: Mon Jan 30 19:12:42 2023 +0000
More fixes for windows building
commit db9f6cb933a4806125b149522dc04681330655f4
Author: Phil Taylor
Date: Mon Jan 30 19:06:23 2023 +0000
Improve windows compile fix
commit 2c9c30484477c7497f2f7ba957dcf07c83c64eed
Author: Phil Taylor
Date: Mon Jan 30 18:51:50 2023 +0000
Fix windows build error
commit b2915b9f5e6fdcb73437a63b07f684c770c2b62b
Author: Roeland Jansen
Date: Mon Jan 30 19:49:49 2023 +0100
fixed build info for opensuse 15.x
commit 3bdee82501525a9ef27833efb28a17b254c19a32
Author: Roeland Jansen
Date: Mon Jan 30 19:16:19 2023 +0100
v1.59
commit 199295b6ae6ef8e90a0619e9ed67c701ca0a2c1e
Merge: c89a7bd fc4bce8
Author: Roeland Jansen
Date: Mon Jan 30 18:53:20 2023 +0100
Merge branch 'morecontrols'
commit c89a7bde97effe9b1469ade5c2c4b3f655572dd2
Merge: 5afcfb4 0b37b1f
Author: Roeland Jansen
Date: Mon Jan 30 18:53:13 2023 +0100
Merge branch 'rc28-shuttle'
commit 0b37b1f9848cbc9aa97a3148c320140726a1157b
Author: Phil Taylor
Date: Mon Jan 30 17:49:42 2023 +0000
Fix compile warning
commit fc4bce8cd7dd1af84c998ec73b4175da018b1868
Author: Elliott Liggett
Date: Mon Jan 30 09:10:39 2023 -0800
Fixed issue with number 3 in frequency button tab.
commit 5d5723fae61d16a4eb51bc38b476e24e13351c58
Author: Elliott Liggett
Date: Mon Jan 30 08:44:06 2023 -0800
Added focus protection to the split tx frequency box. It will not update
while it has keyboard focus.
commit eec2fff4ceccc7d6dba4fd1ec5b7b56453dd4c31
Author: Elliott Liggett
Date: Mon Jan 30 08:40:10 2023 -0800
Added focus protection around the offset frequency box.
commit db686b1c8b4b2f1314def845b7cee373285e3c0e
Author: Phil Taylor
Date: Mon Jan 30 16:27:40 2023 +0000
Enable USB_CONTROLLER build by default
commit 5afcfb4e1dfb1339af927b26c7b4e3d848b16a1e
Author: Phil Taylor
Date: Mon Jan 30 16:16:07 2023 +0000
Fix for MAC compiling
commit cb81bef3bc6dd94383eb9dccf306070ad7bb80e9
Author: Phil Taylor
Date: Mon Jan 30 16:16:07 2023 +0000
Fix for MAC compiling
commit db5f8a08931833fa88e7065e29615ba0de091693
Author: Phil Taylor
Date: Mon Jan 30 16:15:43 2023 +0000
Add buttons to reset buttons/commands
commit 479671386e045da0285c2fa1e559eb09d36997af
Author: Phil Taylor
Date: Mon Jan 30 12:01:29 2023 +0000
Various fixes to USB controllers
commit 3faf8d331c1702e877a59be5960abf835004dd1d
Author: Elliott Liggett
Date: Sun Jan 29 21:54:41 2023 -0800
Added Mode AM and removed some annoying signed warnings.
commit 3ca82deb6c6a482afe71713eea9ba88f2f250be7
Author: Phil Taylor
Date: Mon Jan 30 00:31:33 2023 +0000
Add some more USB commands
commit 8d8f945cfa6ffef861dca71df459d72633f35b1f
Author: Phil Taylor
Date: Sun Jan 29 19:46:13 2023 +0000
Add support for band+/band- buttons
commit 12f7a9cf0aed929849875de8b410fc970902f286
Merge: 9d711f3 78ec6b1
Author: Phil Taylor
Date: Sun Jan 29 19:26:54 2023 +0000
Merge branch 'morecontrols' into rc28-shuttle
commit 9d711f3a173f24958b2f80b1494c6736d86dddc3
Author: Phil Taylor
Date: Sun Jan 29 19:26:21 2023 +0000
Add some more USB controller features/fixes
commit 78ec6b1423c51e61746d50dcc60cf8ea9d732650
Author: Elliott Liggett
Date: Sun Jan 29 11:04:12 2023 -0800
Fixed issue with auto track getting unchecked.
commit 0e9a26dbc10f4d77acabb92aedc8c59f0b9660ec
Merge: 5926c12 e13d854
Author: Phil Taylor
Date: Sun Jan 29 18:46:06 2023 +0000
Merge branch 'rc28-shuttle' into 'rc28-shuttle'
space/typo fix
See merge request eliggett/wfview!15
commit de9f510d769f2a0bb3a61806f4a09787761fdf42
Merge: 2d17737 166905e
Author: Elliott Liggett
Date: Sun Jan 29 10:40:39 2023 -0800
Merge branch 'morecontrols' of gitlab.com:eliggett/wfview into morecontrols
commit 2d1773720dc1fdd838a0fb9b335ebd3487c1ce73
Author: Elliott Liggett
Date: Sun Jan 29 10:39:24 2023 -0800
Added split state LED for split.
commit e13d85489db8f92c2d08e9b06d60bfbcfd68caa0
Author: Dawid SQ6EMM
Date: Sun Jan 29 19:15:41 2023 +0100
space/typo fix
commit 5926c12a20b2a998141367218de18a11f5b6343e
Merge: c55ff52 166905e
Author: Phil Taylor
Date: Sun Jan 29 16:30:59 2023 +0000
Merge branch 'morecontrols' into rc28-shuttle
commit c55ff52fc033f6460aad9de207a4ebbd68cce05d
Author: Phil Taylor
Date: Sun Jan 29 13:09:04 2023 +0000
Remove passband/PBT commands for FM
commit 79decc552b8f5d2ddb7cf1cfc3db71825dd0d895
Merge: 5d5ea25 eb782da
Author: Phil Taylor
Date: Sun Jan 29 16:25:34 2023 +0000
Merge branch 'pbt-fixes' into rc28-shuttle
commit 5d5ea25fb64deeb8df0a72c601edb8657961bba4
Author: Phil Taylor
Date: Sun Jan 29 15:15:41 2023 +0000
Remove a bit of debugging and fix compile warning
commit 7e7dceaa99987e0e1032dc60f672fd9a86d846b3
Author: Phil Taylor
Date: Sun Jan 29 15:08:47 2023 +0000
Various shuttle fixes incorporating #54
commit 166905ee76f1bed50df2caf4c47b129e5f07308e
Author: Phil Taylor