diff --git a/.gitignore b/.gitignore
index c2e1295..acc83fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,10 @@
/byteman-3.0.4/
/3.0.6.tar.gz
/byteman-3.0.6/
+/4.0.2.tar.gz
+/4.0.3.tar.gz
+/4.0.4.tar.gz
+/4.0.5.tar.gz
+/4.0.15.tar.gz
+/4.0.16.tar.gz
+/4.0.26.tar.gz
diff --git a/byteman.spec b/byteman.spec
index 76f86e5..6cbe24c 100644
--- a/byteman.spec
+++ b/byteman.spec
@@ -1,42 +1,62 @@
-%global javacup_or_asm java_cup:java_cup|org.ow2.asm:asm-all
-%global __requires_exclude ^.*mvn\\(%{javacup_or_asm}\\)$
+# Note to the interested reader:
+# fedpkg mockbuild --without tests
+# will make mvn_build macro skip tests.
+# See: https://github.com/fedora-java/javapackages/issues/62
+
+%global javacup_or_asm java_cup:java_cup|org\\.ow2\\.asm:asm.*
+# Don't have generated mvn()-style requires for java_cup or asm
+%global mvn_javacup_or_asm_matcher .*mvn\\(%{javacup_or_asm}\\)
+# Don't have generated requires for java-headless >= 1:1.9
+%global java_headless_matcher java-headless >= 1:(1\\.9|9)
+%global __requires_exclude ^%{mvn_javacup_or_asm_matcher}|%{java_headless_matcher}$
%global homedir %{_datadir}/%{name}
%global bindir %{homedir}/bin
Name: byteman
-Version: 3.0.6
-Release: 5%{?dist}
+Version: 4.0.26
+Release: 1%{?dist}
Summary: Java agent-based bytecode injection tool
-License: LGPLv2+
+# Automatically converted from old format: LGPLv2+ - review is highly recommended.
+License: LicenseRef-Callaway-LGPLv2+
URL: http://www.jboss.org/byteman
-# wget -O 3.0.6.tar.gz https://github.com/bytemanproject/byteman/archive/3.0.6.tar.gz
+# wget -O 4.0.16.tar.gz https://github.com/bytemanproject/byteman/archive/4.0.16.tar.gz
Source0: https://github.com/bytemanproject/byteman/archive/%{version}.tar.gz
BuildArch: noarch
+ExclusiveArch: %{java_arches} noarch
-BuildRequires: maven-local
+# Byteman 4.x requires JDK 9+ to build. Require JDK 10 explicitly.
+BuildRequires: java-25-devel >= 1:11
+BuildRequires: maven-local-openjdk25
BuildRequires: maven-shade-plugin
BuildRequires: maven-source-plugin
BuildRequires: maven-plugin-plugin
-BuildRequires: maven-plugin-bundle
+BuildRequires: maven-bundle-plugin
+BuildRequires: maven-assembly-plugin
BuildRequires: maven-failsafe-plugin
BuildRequires: maven-jar-plugin
BuildRequires: maven-surefire-plugin
BuildRequires: maven-surefire-provider-testng
BuildRequires: maven-surefire-provider-junit
+BuildRequires: maven-surefire-provider-junit5
BuildRequires: maven-verifier-plugin
BuildRequires: maven-dependency-plugin
BuildRequires: java_cup
-BuildRequires: jarjar
BuildRequires: objectweb-asm
BuildRequires: junit
+BuildRequires: junit5
BuildRequires: testng
-# JBoss modules byteman plugin requires it
-BuildRequires: mvn(org.jboss.modules:jboss-modules)
-Provides: bundled(objectweb-asm) = 0:5.0.4-2
-Provides: bundled(java_cup) = 1:0.11b-3
+Provides: bundled(objectweb-asm) = 9.1
+Provides: bundled(java_cup) = 1:0.11b-17
+# We are filtering java-headless >= 1:1.9 requirement. Add
+# JDK 8 requirement here explicitly which shouldn't match the filter.
+Requires: java-25-headless >= 1:1.8
+
+# Related pieces removed via pom_xpath_remove macros
+Patch1: remove_submit_integration_test_verification.patch
+Patch2: testng7_port.patch
%description
Byteman is a tool which simplifies tracing and testing of Java programs.
@@ -61,14 +81,39 @@ Summary: Maven plugin for checking Byteman rules.
%description rulecheck-maven-plugin
This package contains the Byteman rule check maven plugin.
+%package bmunit
+Summary: TestNG and JUnit integration for Byteman.
+
+%description bmunit
+The Byteman bmunit jar provides integration of Byteman into
+TestNG and JUnit tests.
+
+%package dtest
+Summary: Remote byteman instrumented testing.
+
+%description dtest
+The Byteman dtest jar supports instrumentation of test code executed on
+remote server hosts and validation of assertions describing the expected
+operation of the instrumented methods.
+
%prep
%setup -q -n byteman-%{version}
-# Fix doclint problem
-%pom_xpath_inject "pom:plugin[pom:artifactId = 'maven-javadoc-plugin']/pom:configuration" "-Xdoclint:none"
# Fix the gid:aid for java_cup
sed -i "s|net.sf.squirrel-sql.thirdparty-non-maven|java_cup|" agent/pom.xml
sed -i "s|java-cup|java_cup|" agent/pom.xml
+sed -i "s|net.sf.squirrel-sql.thirdparty-non-maven|java_cup|" tests/pom.xml
+sed -i "s|java-cup|java_cup|" tests/pom.xml
+
+# Remove Submit integration test invocations (agent)
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-failsafe-plugin']/pom:executions/pom:execution[pom:id='submit.TestSubmit']" agent
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-failsafe-plugin']/pom:executions/pom:execution[pom:id='submit.TestSubmit.compiled']" agent
+%patch -P1 -p2
+%patch -P2 -p2
+
+# Remove Submit integration test invocations (tests)
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-failsafe-plugin']/pom:executions/pom:execution[pom:id='submit.TestSubmit']" tests
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-failsafe-plugin']/pom:executions/pom:execution[pom:id='submit.TestSubmit.compiled']" tests
# Remove scope=system and systemPath for com.sun:tools
%pom_xpath_remove "pom:profiles/pom:profile/pom:dependencies/pom:dependency[pom:artifactId='tools']/pom:scope" install
@@ -77,19 +122,40 @@ sed -i "s|java-cup|java_cup|" agent/pom.xml
%pom_xpath_remove "pom:profiles/pom:profile/pom:dependencies/pom:dependency[pom:artifactId='tools']/pom:systemPath" contrib/bmunit
# Some tests fail intermittently during builds. Disable them.
-%pom_disable_module tests contrib/jboss-modules-system
%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-surefire-plugin']/pom:executions" contrib/bmunit
%pom_xpath_set "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-surefire-plugin']/pom:configuration" 'true' contrib/bmunit
+# source/target 1.6 is not supported by 17; default is now 1.8
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-compiler-plugin']/pom:configuration/pom:source" pom.xml
+%pom_xpath_remove "pom:build/pom:plugins/pom:plugin[pom:artifactId='maven-compiler-plugin']/pom:configuration/pom:target" pom.xml
+
# Don't build download, docs modules
%pom_disable_module download
-%pom_disable_module docs
-# Put maven plugin into a separate package
+
+# Don't use javadoc plugin, use XMvn for javadocs
+%pom_remove_plugin -r :maven-javadoc-plugin
+%pom_remove_plugin -r :central-publishing-maven-plugin
+%pom_remove_dep 'org.apache.maven:maven-project' contrib/rulecheck-maven-plugin
+%pom_xpath_remove 'pom:execution[pom:id="make-javadoc-assembly"]' byteman
+
+# Put byteman-rulecheck-maven-plugin into a separate package
%mvn_package ":byteman-rulecheck-maven-plugin" rulecheck-maven-plugin
+# CNFE being thrown without this for bmunit5 in rawhide and with tests enabled
+%pom_add_dep "org.apache.commons:commons-lang3" contrib/bmunit5
+# Put byteman-bmunit/byteman-dtest into a separate packages since they
+# runtime require junit
+%mvn_package ":byteman-bmunit" bmunit
+%mvn_package ":byteman-dtest" dtest
+
%build
-%mvn_build
+export JAVA_HOME=/usr/lib/jvm/java-openjdk
+# Use --xmvn-javadoc so as to avoid maven-javadoc-plugin issue
+# (fixed in 3.1.0, fedora has 3.0.1):
+# See https://issues.apache.org/jira/browse/MJAVADOC-555
+# https://bugs.openjdk.java.net/browse/JDK-8212233
+%mvn_build --xmvn-javadoc -f
%install
%mvn_install
@@ -122,12 +188,23 @@ for m in bmunit dtest install sample submit; do
ln -s %{_javadir}/byteman/byteman-${m}.jar $RPM_BUILD_ROOT%{homedir}/lib/byteman-${m}.jar
done
+# Create contrib/jboss-module-system structure since bminstall expects it
+# for the -m option.
+install -d -m 755 $RPM_BUILD_ROOT%{homedir}/contrib
+install -d -m 755 $RPM_BUILD_ROOT%{homedir}/contrib/jboss-modules-system
+ln -s %{_javadir}/byteman/byteman-jboss-modules-plugin.jar $RPM_BUILD_ROOT%{homedir}/contrib/jboss-modules-system/byteman-jboss-modules-plugin.jar
+
ln -s %{_javadir}/byteman/byteman.jar $RPM_BUILD_ROOT%{homedir}/lib/byteman.jar
%files -f .mfiles
-%{homedir}/*
+%{homedir}/lib/byteman.jar
+%{homedir}/lib/byteman-install.jar
+%{homedir}/lib/byteman-sample.jar
+%{homedir}/lib/byteman-submit.jar
+%{homedir}/contrib/*
+%{bindir}/*
%{_bindir}/*
-%doc README docs/ProgrammersGuide.pdf
+%doc README
%license docs/copyright.txt
%files javadoc -f .mfiles-javadoc
@@ -136,100 +213,13 @@ ln -s %{_javadir}/byteman/byteman.jar $RPM_BUILD_ROOT%{homedir}/lib/byteman.jar
%files rulecheck-maven-plugin -f .mfiles-rulecheck-maven-plugin
%license docs/copyright.txt
+%files bmunit -f .mfiles-bmunit
+%license docs/copyright.txt
+%{homedir}/lib/byteman-bmunit.jar
+
+%files dtest -f .mfiles-dtest
+%license docs/copyright.txt
+%{homedir}/lib/byteman-dtest.jar
+
%changelog
-* Wed Feb 07 2018 Fedora Release Engineering - 3.0.6-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
-
-* Wed Jul 26 2017 Fedora Release Engineering - 3.0.6-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
-
-* Fri Feb 10 2017 Fedora Release Engineering - 3.0.6-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
-
-* Fri Dec 09 2016 Severin Gehwolf - 3.0.6-2
-- Add BRs, maven-plugin-bundle, maven-source-plugin and
- maven-plugin-plugin, fixing FTBFS.
-- Resolves: RHBZ#1402998
-
-* Mon Jun 13 2016 Severin Gehwolf - 3.0.6-1
-- Update to latest upstream release.
-
-* Mon Mar 14 2016 Severin Gehwolf - 3.0.4-2
-- Enable some tests during build
-- Fix generated requires by filtering requires for bundled libs.
-- Split maven plugin into separate package.
-
-* Thu Feb 18 2016 Severin Gehwolf - 3.0.4-1
-- Update to latest upstream 3.0.4 release.
-
-* Wed Feb 03 2016 Fedora Release Engineering - 2.1.4.1-8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
-
-* Thu Aug 06 2015 gil cattaneo 2.1.4.1-7
-- Fix FTBFS rhbz#1239392
-- Remove duplicate files
-- Introduce license macro
-
-* Wed Jun 17 2015 Fedora Release Engineering - 2.1.4.1-6
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
-
-* Fri Feb 27 2015 Michal Srb - 2.1.4.1-5
-- Fix FTBFS
-- Rebuild to generate new metadata
-
-* Sat Jun 07 2014 Fedora Release Engineering - 2.1.4.1-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
-
-* Fri Apr 18 2014 Marek Goldmann - 2.1.4.1-3
-- Rebuilding for objectweb-asm update, RHBZ#1083570
-
-* Fri Mar 28 2014 Michael Simacek - 2.1.4.1-2
-- Use Requires: java-headless rebuild (#1067528)
-
-* Fri Feb 14 2014 Marek Goldmann - 2.1.4.1-1
-- Upstream release 2.1.4.1
-
-* Sat Aug 03 2013 Fedora Release Engineering - 2.1.2-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
-
-* Thu Jul 04 2013 Marek Goldmann - 2.1.2-1
-- Upstream release 2.1.2
-
-* Wed Jun 5 2013 Mikolaj Izdebski - 2.0.4-5
-- Remove tools.jar from dependencyManagement
-
-* Wed May 29 2013 Marek Goldmann - 2.0.4-4
-- New guidelines
-
-* Thu Apr 25 2013 Marek Goldmann - 2.0.4-3
-- Fixes to the launch scripts
-
-* Wed Apr 24 2013 Marek Goldmann - 2.0.4-2
-- Added bmsubmit, bminstall and bmjava scripts, RHBZ#951560
-
-* Thu Feb 21 2013 Marek Goldmann - 2.0.4-1
-- Upstream release 2.0.4
-- Switched to Maven
-- Bundling java_cup and objectweb-asm (fpc#226)
-
-* Wed Feb 13 2013 Fedora Release Engineering - 1.5.2-6
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
-
-* Wed Jul 18 2012 Fedora Release Engineering - 1.5.2-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
-
-* Thu Jan 12 2012 Fedora Release Engineering - 1.5.2-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
-
-* Tue Sep 20 2011 Marek Goldmann 1.5.2-3
-- Removed binary files from src.rpm
-
-* Mon Sep 19 2011 Marek Goldmann 1.5.2-2
-- Cleaned spec file
-
-* Wed Jul 27 2011 Marek Goldmann 1.5.2-1
-- Upstream release: 1.5.2
-
-* Thu Jul 21 2011 Marek Goldmann 1.5.1-1
-- Initial packaging
-
+%autochangelog
diff --git a/remove_submit_integration_test_verification.patch b/remove_submit_integration_test_verification.patch
new file mode 100644
index 0000000..dae9507
--- /dev/null
+++ b/remove_submit_integration_test_verification.patch
@@ -0,0 +1,14 @@
+diff --git a/byteman-4.0.2/agent/verification.xml b/byteman-4.0.2/agent/verification.xml
+index f530cfe..52ece06 100644
+--- a/byteman-4.0.2/agent/verification.xml
++++ b/byteman-4.0.2/agent/verification.xml
+@@ -171,9 +171,5 @@
+ target/failsafe-reports/org.jboss.byteman.tests.misc.TestThrowBinding.txt
+
+
+-
+- target/failsafe-reports/org.jboss.byteman.tests.submit.TestSubmit.txt
+-
+-
+
+
diff --git a/sources b/sources
index de5d31f..1a074db 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-945cf839a10ce71fdf21fb9992555bcb 3.0.6.tar.gz
+SHA512 (4.0.26.tar.gz) = 06c8bf688d237d8dbac1e4558a8e2916f1212d2746d81a64e8bc44f9074f5b1c205bb98ac3a8e835f0c8b225df665e40c93c8b60ff5ff77f6ce8272c25679d76
diff --git a/testng7_port.patch b/testng7_port.patch
new file mode 100644
index 0000000..16e43e9
--- /dev/null
+++ b/testng7_port.patch
@@ -0,0 +1,22 @@
+diff --git a/byteman-4.0.15/contrib/bmunit/src/org/jboss/byteman/contrib/bmunit/BMNGListener.java b/byteman-4.0.15/contrib/bmunit/src/org/jboss/byteman/contrib/bmunit/BMNGListener.java
+index 2f784bc..9e4fec9 100644
+--- a/byteman-4.0.15/contrib/bmunit/src/org/jboss/byteman/contrib/bmunit/BMNGListener.java
++++ b/byteman-4.0.15/contrib/bmunit/src/org/jboss/byteman/contrib/bmunit/BMNGListener.java
+@@ -61,7 +61,7 @@ public class BMNGListener extends BMNGAbstractRunner implements IInvokedMethodLi
+ }
+
+ public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
+- Method javaMethod = method.getTestMethod().getMethod();
++ Method javaMethod = method.getTestMethod().getConstructorOrMethod().getMethod();
+ Class clazz = javaMethod.getDeclaringClass();
+ if (!checkBMNGListener(clazz)) {
+ return;
+@@ -81,7 +81,7 @@ public class BMNGListener extends BMNGAbstractRunner implements IInvokedMethodLi
+ }
+
+ public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
+- Method javaMethod = method.getTestMethod().getMethod();
++ Method javaMethod = method.getTestMethod().getConstructorOrMethod().getMethod();
+ Class clazz = javaMethod.getDeclaringClass();
+ if (!checkBMNGListener(clazz)) {
+ return;
diff --git a/tests/smoke/test-smoke.sh b/tests/smoke/test-smoke.sh
new file mode 100644
index 0000000..24e4322
--- /dev/null
+++ b/tests/smoke/test-smoke.sh
@@ -0,0 +1,147 @@
+#!/bin/bash
+#
+set -e
+
+##############################################################
+#
+# Test 1: bmjava
+#
+##############################################################
+test1_dir=$(mktemp -d)
+pushd $test1_dir
+#####
+## The Java program under test (via bmjava)
+#####
+cat > HelloWait.java < trace1.btm < out1.log
+grep -q "argument was: World!" out1.log
+grep -q "Hello bar" out1.log
+output=$(tail -n1 out1.log)
+if [ ! "${output}_" == "Hello bar_" ]; then
+ echo Test FAILED!
+ exit 1
+fi
+
+echo Test 1 PASSED!
+
+popd
+rm -rf $test1_dir
+
+
+##############################################################
+#
+# Test 2: bminstall + bmsubmit
+#
+##############################################################
+test2_dir=$(mktemp -d)
+pushd $test2_dir
+#####
+## The Java program under test
+#####
+cat > HelloWait.java < out2.log 2>&1 &
+pid_of_java=$$
+echo "Forked java process with pid $pid_of_java"
+sleep 2
+#####
+## The byteman rule(s) (used via bmsubmit)
+#####
+cat > change_arg.btm < throw_excptn.btm <