diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2d7f8e48..6548bc98 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -22,10 +22,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 25 + - name: Set up JDK 26 uses: actions/setup-java@v3 with: - java-version: '25' + java-version: '26' distribution: 'liberica' java-package: 'jdk+fx' - name: Build with Gradle diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5eebd232..b2434920 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -15,10 +15,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 25 + - name: Set up JDK 26 uses: actions/setup-java@v3 with: - java-version: '25' + java-version: '26' distribution: 'liberica' java-package: 'jdk+fx' diff --git a/.idea/misc.xml b/.idea/misc.xml index 669e0e68..e3d71a77 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -47,7 +47,7 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 01640454..800e4ca0 100644 --- a/build.gradle +++ b/build.gradle @@ -17,16 +17,18 @@ * **************************************************************************** */ +import org.beryx.runtime.RuntimeZipTask +import org.gradle.internal.jvm.Jvm +import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform + import java.text.SimpleDateFormat - - /** * Instructions for building/compiling the sdrtrunk application. * * Prerequisites: - * Install and configure an OpenJDK version 22+ that includes the JavaFX modules (e.g. Bellsoft Liberica JDK) - * - Optional: install and configure Gradle 8.10+ + * Install and configure an OpenJDK version 26+ that includes the JavaFX modules (e.g. Bellsoft Liberica JDK) + * - Optional: install and configure Gradle 9.6+ * * Scenario 1: run the application via gradle command line from the source code root directory: * command: ./gradlew run @@ -58,10 +60,10 @@ repositories { //Version is defined in gradle.properties so that we can CLI override it for nightly builds. version = project.findProperty('projectVersion') -//Java 24 is required for this version of the Project Panama preview/incubator feature +//Java 26 is required for this version of the Project Panama preview/incubator feature java { toolchain { - languageVersion = JavaLanguageVersion.of(25) + languageVersion = JavaLanguageVersion.of(26) vendor = JvmVendorSpec.BELLSOFT } } @@ -85,22 +87,22 @@ dependencies { implementation 'com.github.nwaldispuehl:java-lame:v3.98.4' //mavenCentral/jcenter imports - implementation 'ch.qos.logback:logback-classic:1.5.21' - implementation 'ch.qos.logback:logback-core:1.5.21' - implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.20.1' + implementation 'ch.qos.logback:logback-classic:1.5.38' + implementation 'ch.qos.logback:logback-core:1.5.38' + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.22.1' implementation 'com.fazecast:jSerialComm:2.11.4' - implementation 'com.formdev:flatlaf:3.5.4' - implementation 'com.formdev:flatlaf-intellij-themes:3.5.4' + implementation 'com.formdev:flatlaf:3.7.2' + implementation 'com.formdev:flatlaf-intellij-themes:3.7.2' implementation 'com.github.jiconfont:jiconfont-font_awesome:4.7.0.1' implementation 'com.github.jiconfont:jiconfont-javafx:1.0.0' implementation 'com.github.jiconfont:jiconfont-swing:1.0.1' - implementation 'com.github.wendykierp:JTransforms:3.1' - implementation 'com.google.code.gson:gson:2.13.2' - implementation 'com.google.guava:guava:33.5.0-jre' + implementation 'com.github.wendykierp:JTransforms:3.2' + implementation 'com.google.code.gson:gson:2.14.0' + implementation 'com.google.guava:guava:33.6.0-jre' implementation 'com.jidesoft:jide-oss:3.6.18' - implementation 'com.miglayout:miglayout-swing:11.4.2' + implementation 'com.miglayout:miglayout-swing:11.4.3' implementation 'com.mpatric:mp3agic:0.9.1' - implementation 'commons-io:commons-io:2.21.0' + implementation 'commons-io:commons-io:2.22.0' implementation 'eu.hansolo:charts:1.0.5' implementation 'io.github.dsheirer:radio-reference-api:18.0.0' implementation 'io.github.dsheirer:usb4java-native-libraries:1.3.3' //OSX & Windows aarch64 native libs @@ -108,12 +110,12 @@ dependencies { implementation 'javax.usb:usb-api:1.0.2' implementation 'net.coderazzi:tablefilter-swing:5.5.4' implementation 'org.apache.commons:commons-compress:1.28.0' - implementation 'org.apache.commons:commons-lang3:3.19.0' + implementation 'org.apache.commons:commons-lang3:3.20.0' implementation 'org.apache.commons:commons-math3:3.6.1' implementation 'org.apache.commons:commons-csv:1.14.1' - implementation 'org.apache.mina:mina-core:2.2.4' - implementation 'org.apache.mina:mina-http:2.2.4' - implementation 'org.controlsfx:controlsfx:11.2.2' + implementation 'org.apache.mina:mina-core:2.2.9' + implementation 'org.apache.mina:mina-http:2.2.9' + implementation 'org.controlsfx:controlsfx:11.2.3' implementation 'org.rauschig:jarchivelib:1.2.0' implementation 'org.slf4j:slf4j-api:2.0.17' implementation 'org.usb4java:libusb4java:1.3.0' @@ -121,12 +123,12 @@ dependencies { implementation 'pl.edu.icm:JLargeArrays:1.6' } -def os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem +def os = DefaultNativePlatform.currentOperatingSystem /** * This is needed for the JDK23 vector API ... until it moves out of incubation or preview */ -tasks.withType(JavaCompile) { +tasks.withType(JavaCompile).configureEach { options.compilerArgs.add("--enable-preview") //Project Panama Vector API is still in incubator options.compilerArgs.add("--add-modules=jdk.incubator.vector") //Project Panama Vector API is still in incubator } @@ -227,7 +229,7 @@ String jdk_windows_aarch64 = jdk_base + 'windows-arm64/jdk-25.0.1-full' /** * Download URLs to download the JDK as part of the gradle build packaging process */ -def jdk_download_base = "https://download.bell-sw.com/java/25.0.1+11/bellsoft-jdk25.0.1+11-" +def jdk_download_base = "https://download.bell-sw.com/java/26.0.2+13/bellsoft-jdk26.0.2+13-" def jdk_download_suffix = "-full.tar.gz" def jdk_download_linux_aarch64 = jdk_download_base + "linux-aarch64" + jdk_download_suffix def jdk_download_linux_x86_64 = jdk_download_base + "linux-amd64" + jdk_download_suffix @@ -242,7 +244,7 @@ def jdk_download_windows_aarch64 = jdk_download_base + "windows-aarch64-full.zip * @param jvmArgs to use (windows or linux) * @return configured task. */ -def configure(org.beryx.runtime.RuntimeZipTask rt, List jvmArgs) { +def configure(RuntimeZipTask rt, List jvmArgs) { //Use the correct set of JVM arguments rt.extension.launcherData.get().jvmArgs = jvmArgs @@ -261,7 +263,8 @@ def configure(org.beryx.runtime.RuntimeZipTask rt, List jvmArgs) { rt.extension.addOptions('--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages') //Runtime images have auto appended version in image zip name. Override to include version in single target image. - rt.extension.imageZip.set(file("$buildDir/image/sdr-trunk.zip")) +// rt.extension.imageDir=layout.buildDirectory.dir('image') + rt.extension.imageZip.set(file(layout.buildDirectory.dir('image').get().file('sdr-trunk.zip'))) } /** @@ -273,35 +276,35 @@ def configure(org.beryx.runtime.RuntimeZipTask rt, List jvmArgs) { * Usage: gradlew runtimeZipCurrent (windows - using gradlew) * Usage: ./gradlew runtimeZipCurrent (linux - using gradlew) */ -tasks.register('runtimeZipCurrent', org.beryx.runtime.RuntimeZipTask) {rt -> +tasks.register('runtimeZipCurrent', RuntimeZipTask) {rt -> def arch = System.properties.getProperty("os.arch") - def javaHome = org.gradle.internal.jvm.Jvm.current().getJavaHome().toString() + def javaHome = Jvm.current().getJavaHome().toString() if(os.isWindows()) { - if(arch.equals("amd64")) { + if(arch == "amd64") { rt.extension.targetPlatform(targetWindowsX86_64, javaHome) } - else if(arch.equals("aarch64")) { + else if(arch == "aarch64") { rt.extension.targetPlatform(targetWindowsAarch64, javaHome) } configure(rt, jvmArgsWindows) } else if(os.isLinux()) { - if(arch.equals("amd64")) { + if(arch == "amd64") { rt.extension.targetPlatform(targetLinuxX86_64, javaHome) } - else if(arch.equals("aarch64")) { + else if(arch == "aarch64") { rt.extension.targetPlatform(targetLinuxAarch64, javaHome) } configure(rt, jvmArgsLinux) } else if(os.isMacOsX()) { - if(arch.equals("amd64")) { + if(arch == "amd64") { rt.extension.targetPlatform(targetOsxX86_64, javaHome) } - else if(arch.equals("aarch64")) { + else if(arch == "aarch64") { rt.extension.targetPlatform(targetOsxAarch64, javaHome) } configure(rt, jvmArgsLinux) @@ -318,7 +321,7 @@ tasks.register('runtimeZipCurrent', org.beryx.runtime.RuntimeZipTask) {rt -> * Usage: gradlew runtimeZipWindows (windows - using gradlew) * Usage: ./gradlew runtimeZipWindows (linux - using gradlew) */ -tasks.register('runtimeZipWindows', org.beryx.runtime.RuntimeZipTask) {rt -> +tasks.register('runtimeZipWindows', RuntimeZipTask) {rt -> //Windows aarch64 if(file(jdk_windows_aarch64).exists()) { rt.extension.targetPlatform(targetWindowsAarch64, jdk_windows_aarch64, []) @@ -350,7 +353,7 @@ tasks.register('runtimeZipWindows', org.beryx.runtime.RuntimeZipTask) {rt -> * Usage: gradlew runtimeZipOthers (windows - using gradlew) * Usage: ./gradlew runtimeZipOthers (linux - using gradlew) */ -tasks.register('runtimeZipOthers', org.beryx.runtime.RuntimeZipTask) {rt -> +tasks.register('runtimeZipOthers', RuntimeZipTask) {rt -> //Linux aarch64 if(file(jdk_linux_aarch64).exists()) { rt.extension.targetPlatform(targetLinuxAarch64, jdk_linux_aarch64, []) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55b..b1b8ef56 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 423d21c0..a9db1155 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,26 +1,9 @@ -# -# ****************************************************************************** -# Copyright (C) 2014-2025 Dennis Sheirer -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# ***************************************************************************** -# - distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index d26729f3..249efbb0 100755 --- a/gradlew +++ b/gradlew @@ -1,27 +1,26 @@ #!/bin/sh # -# ****************************************************************************** -# Copyright (C) 2014-2025 Dennis Sheirer +# Copyright © 2015 the original authors. # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# https://www.apache.org/licenses/LICENSE-2.0 # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# ***************************************************************************** +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 # ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -30,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -58,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -115,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -173,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -213,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee8..8508ef68 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,12 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -51,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH= -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL%