Skip to content
Snippets Groups Projects
Commit 179d0099 authored by Jesse Chan's avatar Jesse Chan
Browse files

testing/bazel4: new aport

parent 9d6c90a2
No related branches found
No related tags found
1 merge request!22578testing/bazel4: new aport
# Contributor: Oleg Titov <oleg.titov@gmail.com>
# Contributor: Jesse Chan <jc@linux.com>
# Maintainer: Jesse Chan <jc@linux.com>
pkgname=bazel4
pkgver=4.1.0
pkgrel=0
pkgdesc="A fast, scalable, multi-language and extensible build system"
url="https://bazel.build/"
arch="all"
arch="$arch !x86 !armhf !armv7 !mips !mips64" # JDK dropped support
arch="$arch !ppc64le" # absl: Must implement UnscaledCycleClock::Frequency()
arch="$arch !s390x" # aborted: SIGFPE (0x8) at pc=0x000003ffb1f18462 (sent by kill)
license="Apache-2.0"
depends="bash java-jdk libarchive unzip zip"
makedepends="coreutils linux-headers protobuf python3 coreutils"
options="!strip"
subpackages="
$pkgname-doc
$pkgname-bash-completion
$pkgname-fish-completion
$pkgname-zsh-completion
"
source="https://github.com/bazelbuild/bazel/releases/download/$pkgver/bazel-$pkgver-dist.zip
patch_TEMP_FAILURE_RETRY.patch
patch_do_not_use_glibc_prebuilt.patch
patch_default_system_java_toolchain.patch
patch_fix_jdk_13.patch
patch_stop_hardcoding_verify_none_1.patch
patch_stop_hardcoding_verify_none_2.patch
patch_go_back_to_pre16_permit.patch"
build() {
export JAVA_HOME="/usr/lib/jvm/default-jvm"
# horrible of horribles, just to have python in the PATH
# https://github.com/bazelbuild/bazel/issues/8665
mkdir -p ./bin-hack
ln -s /usr/bin/python3 ./bin-hack/python
export PATH=$(pwd)/bin-hack:$PATH
# Stage 1: build Bazel with bootstrap script
# based on
# https://github.com/vbatts/copr-build-bazel/blob/master/bazel.spec
# EXTRA_BAZEL_ARGS is used by bootstrap script only
export EXTRA_BAZEL_ARGS="--sandbox_debug --verbose_failures"
mkdir tmphome-stage1
env HOME="$(pwd)/tmphome-stage1" bash ./compile.sh
env HOME="$(pwd)/tmphome-stage1" ./output/bazel shutdown
# Stage 2: use Bazel to build Bazel in optimized mode
mkdir tmphome-stage2
# We can't use embedded JDK, as there is no alpine support
echo startup --server_javabase=$JAVA_HOME \
>> tmphome-stage2/.bazelrc
env HOME="$(pwd)/tmphome-stage2" ./output/bazel build \
-c opt \
--stamp \
--embed_label $pkgver \
--distdir=derived/distdir \
$EXTRA_BAZEL_ARGS \
//scripts/packages:without-jdk/install.sh
env HOME="$(pwd)/tmphome-stage2" ./output/bazel shutdown
# Copy outputs
rm -rf output && mkdir output
cp bazel-bin/scripts/packages/without-jdk/bazel output
cp bazel-bin/scripts/packages/without-jdk/bazel-real output
cp bazel-bin/scripts/bazel-complete.bash output
cp bazel-bin/scripts/bazel.fish output
cp scripts/zsh_completion/_bazel output
cp tmphome-stage2/.bazelrc output/bazel.bazelrc
}
check() {
mkdir tmphome-check
cp output/bazel.bazelrc tmphome-check/.bazelrc
env HOME="$(pwd)/tmphome-check" ./output/bazel test \
--distdir=derived/distdir \
--spawn_strategy=standalone \
--genrule_strategy=standalone \
--verbose_failures \
--verbose_test_summary \
--test_verbose_timeout_warnings \
examples/cpp:hello-success_test \
examples/py_native:test \
examples/java-starlark/src/test/java/com/example/myproject:pass \
examples/java-native/src/test/java/com/example/myproject:hello
env HOME="$(pwd)/tmphome-check" ./output/bazel shutdown
}
package() {
install -Dm755 output/bazel "$pkgdir"/usr/bin/bazel
install -Dm755 output/bazel-real "$pkgdir"/usr/bin/bazel-real
install -Dm644 output/bazel.bazelrc \
"$pkgdir"/etc/bazel.bazelrc
install -m644 -D -t "$pkgdir"/usr/share/doc/$pkgname README.md
install -Dm644 output/bazel-complete.bash \
"$pkgdir"/usr/share/bash-completion/completions/"$pkgname"
install -Dm644 output/bazel.fish \
"$pkgdir"/usr/share/fish/completions/"$pkgname".fish
install -Dm644 output/_bazel \
"$pkgdir"/usr/share/zsh/site-functions/_"$pkgname"
}
unpack() {
mkdir -p "$builddir"
unzip "$srcdir"/bazel-$pkgver-dist.zip -d "$builddir" > /dev/null
}
sha512sums="
18a8f4087b87e2d1dea118491458981bcb162ca736cc451169da9f638520071d846de77d32e4542a0142641f7e94d56d4cca7b0c17098d3d7dc67875528c634c bazel-4.1.0-dist.zip
85b1a4954c762c0144ba38a5c859ec7a77a0dc4fa0042684ef7113ff167375d89053850541528dbabdd577ebb82b50c5f6d04ba2650c154503a75ee4455b01fb patch_TEMP_FAILURE_RETRY.patch
b8858494f7c600145610d44d2ca81d2cf0e58924b5d876361043b395c88b1166bf9a17de2864ee718e6dce723b7f0c4d71cf8fb9c2ab316eb9013eb5e450ddbe patch_do_not_use_glibc_prebuilt.patch
fe1862bbd392f8a2d7af5f7c5e08fa6cf6dab0ba7b88280c28c4b072241613480e861af60212ceee1aebc10eb629f964c5def2b3e0a75c48453da8c397f4e93b patch_default_system_java_toolchain.patch
0b4b3e541eaa496253e83d6fd88ba98d14c2a53324b7438f57d240b45f2c3c63b659038224e2b66706d4420eccb7c17c834260839f2fd39e3c6b3dea2613b735 patch_fix_jdk_13.patch
f8456643419ac108a7cd72eaccd931e9c269c828611b0a62a79ad80a4f542b83cf5fa69af026e04bfb8d9f2c70527b5b25f9af56edb0a5a696ce66b3032df48d patch_stop_hardcoding_verify_none_1.patch
c5ad25926e5672cd86b27c791c7347b21b57777296cc26d92d2bd9ae6eb39ee81d48008edb666285432135082e91daa9162ea67c719625bcede8f2d5647c9633 patch_stop_hardcoding_verify_none_2.patch
94840b77904cabbaff4d2b011b79699f9b6114e9893af4f8649e397f34ffb0e8c2d9c6d481f9a0cdab39fd00d13c8c76efa8a8fe781c0d3162421764a0a1d6d5 patch_go_back_to_pre16_permit.patch
"
From: philwo <philwo@google.com>
Date: Thu, 20 May 2021 08:13:09 -0700
Subject: [PATCH] Add the TEMP_FAILURE_RETRY macro to linux-sandbox-pid1.cc.
Upstream: yes (https://github.com/bazelbuild/bazel/commit/bcce6dd026e90336e80616a8c1004a79a2f8640c)
This allows us to build Bazel on Linux systems which use a C standard library that does not include this macro, like Alpine Linux (which uses musl).
Fixes #12460.
PiperOrigin-RevId: 374873483
---
src/main/tools/linux-sandbox-pid1.cc | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/main/tools/linux-sandbox-pid1.cc b/src/main/tools/linux-sandbox-pid1.cc
index 5c9c53cb9c..5e7c64a7ac 100644
--- a/src/main/tools/linux-sandbox-pid1.cc
+++ b/src/main/tools/linux-sandbox-pid1.cc
@@ -49,6 +49,19 @@
#include <linux/fs.h>
#endif
+#ifndef TEMP_FAILURE_RETRY
+// Some C standard libraries like musl do not define this macro, so we'll
+// include our own version for compatibility.
+#define TEMP_FAILURE_RETRY(exp) \
+ ({ \
+ decltype(exp) _rc; \
+ do { \
+ _rc = (exp); \
+ } while (_rc == -1 && errno == EINTR); \
+ _rc; \
+ })
+#endif // TEMP_FAILURE_RETRY
+
#include "src/main/tools/linux-sandbox-options.h"
#include "src/main/tools/linux-sandbox.h"
#include "src/main/tools/logging.h"
--
2.31.1
--- a/src/BUILD
+++ b/src/BUILD
@@ -405,7 +405,7 @@ genrule(
],
) for suffix, jdk in [
("-dev", "_jdk_allmodules"),
- ("", "_jdk_minimal"),
+ ("", "_nojdk"),
("_jdk_allmodules", "_jdk_allmodules"),
("_jdk_minimal", "_jdk_minimal"),
("_dev_jdk", "_dev_jdk"),
--- a/src/main/cpp/startup_options.cc
+++ b/src/main/cpp/startup_options.cc
@@ -462,12 +462,6 @@ blaze_util::Path StartupOptions::GetSystemJavabase() const {
}
blaze_util::Path StartupOptions::GetEmbeddedJavabase() const {
- blaze_util::Path bundled_jre_path = blaze_util::Path(
- blaze_util::JoinPath(install_base, "embedded_tools/jdk"));
- if (blaze_util::CanExecuteFile(
- bundled_jre_path.GetRelative(GetJavaBinaryUnderJavabase()))) {
- return bundled_jre_path;
- }
return blaze_util::Path();
}
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -654,7 +654,7 @@ public class JavaOptions extends FragmentOptions {
}
Label defaultHostJavaBase() {
- return Label.parseAbsoluteUnchecked("@bazel_tools//tools/jdk:remote_jdk11");
+ return Label.parseAbsoluteUnchecked("@local_jdk//:jdk");
}
Label defaultJavaToolchain() {
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -340,7 +340,7 @@ alias(
alias(
name = "host_jdk",
- actual = ":remote_jdk11",
+ actual = "jdk",
)
bootclasspath(
@@ -370,8 +370,7 @@ alias(
actual = select({
"//src/conditions:darwin": "@remote_java_tools_darwin//:toolchain",
"//src/conditions:windows": "@remote_java_tools_windows//:toolchain",
- "//src/conditions:linux_x86_64": "@remote_java_tools_linux//:toolchain",
- "//conditions:default": "@bazel_tools//tools/jdk:legacy_toolchain",
+ "//conditions:default": "@bazel_tools//tools/jdk:toolchain_vanilla",
}),
)
@@ -380,8 +379,7 @@ alias(
actual = select({
"//src/conditions:darwin": "@remote_java_tools_darwin//:toolchain",
"//src/conditions:windows": "@remote_java_tools_windows//:toolchain",
- "//src/conditions:linux_x86_64": "@remote_java_tools_linux//:toolchain",
- "//conditions:default": "@bazel_tools//tools/jdk:legacy_toolchain",
+ "//conditions:default": "@bazel_tools//tools/jdk:toolchain_vanilla",
}),
)
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
@@ -189,6 +189,7 @@ maybe(
maybe(
http_archive,
name = "remote_java_tools_linux",
+ patches = ["@bazel_tools//tools/jdk:java_tools.patch"],
sha256 = "085c0ba53ba764e81d4c195524f3c596085cbf9cdc01dd8e6d2ae677e726af35",
urls = [
"https://mirror.bazel.build/bazel_java_tools/releases/javac11/v10.6/java_tools_javac11_linux-v10.6.zip",
--- a/tools/jdk/BUILD.java_tools
+++ b/tools/jdk/BUILD.java_tools
@@ -284,7 +284,7 @@ alias(
name = "singlejar",
actual = select({
"//:remote": ":singlejar_cc_bin",
- "//conditions:default": ":singlejar_prebuilt_or_cc_binary",
+ "//conditions:default": ":singlejar_cc_bin",
}),
)
@@ -312,7 +312,7 @@ alias(
name = "ijar",
actual = select({
":remote": ":ijar_cc_binary",
- "//conditions:default": ":prebuilt_binary_or_cc_binary",
+ "//conditions:default": ":ijar_cc_binary",
}),
)
--- a/tools/jdk/java_toolchain_default.bzl.java_tools
+++ b/tools/jdk/java_toolchain_default.bzl.java_tools
@@ -121,8 +121,6 @@ PREBUILT_TOOLCHAIN_CONFIGURATION = dict(
"//:java_compiler_jar",
"//:jdk_compiler_jar",
],
- ijar = ["//:ijar_prebuilt_binary"],
- singlejar = ["//:prebuilt_singlejar"],
)
_LABEL_LISTS = [
--- /dev/null
+++ b/tools/jdk/java_tools.patch
@@ -0,0 +1,20 @@
+--- BUILD
++++ BUILD
+@@ -284,7 +284,7 @@ alias(
+ name = "singlejar",
+ actual = select({
+ "//:remote": ":singlejar_cc_bin",
+- "//conditions:default": ":singlejar_prebuilt_or_cc_binary",
++ "//conditions:default": ":singlejar_cc_bin",
+ }),
+ )
+
+@@ -312,7 +312,7 @@ alias(
+ name = "ijar",
+ actual = select({
+ ":remote": ":ijar_cc_binary",
+- "//conditions:default": ":prebuilt_binary_or_cc_binary",
++ "//conditions:default": ":ijar_cc_binary",
+ }),
+ )
+
From: philwo <philwo@google.com>
Date: Mon, 8 Feb 2021 10:45:50 -0800
Subject: [PATCH] Fix Bazel #10214: JDK 13 introduced a source compatibility
issue.
Upstream: yes (https://github.com/bazelbuild/bazel/commit/0216ee54417fa1f2fef14f6eb14cbc1e8f595821)
Quote from the Java release notes:
The addition of newFileSystem(Path, Map<String, ?>) creates a source (but not binary) compatibility issue for code that has been using the existing 2-arg newFileSystem(Path, ClassLoader) and specifying the class loader as null. [...] To avoid the ambiguous reference, this code needs to be modified to cast the second parameter to java.lang.ClassLoader.
RELNOTES:
PiperOrigin-RevId: 356301318
---
.../com/google/devtools/build/buildjar/VanillaJavaBuilder.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
index b2a4da2aaa..d63bd8485e 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
@@ -78,7 +78,7 @@ public class VanillaJavaBuilder implements Closeable {
private FileSystem getJarFileSystem(Path sourceJar) throws IOException {
FileSystem fs = filesystems.get(sourceJar);
if (fs == null) {
- filesystems.put(sourceJar, fs = FileSystems.newFileSystem(sourceJar, null));
+ filesystems.put(sourceJar, fs = FileSystems.newFileSystem(sourceJar, (ClassLoader) null));
}
return fs;
}
--
2.31.1
From: Jesse Chan <jc@linux.com>
Date: Thu, 24 Jun 2021 20:20:22 +0800
Subject: [PATCH] Explicitly permit illegal access, go back to pre-JDK16 default
---
scripts/bootstrap/compile.sh | 1 +
src/main/cpp/blaze.cc | 14 +++++++-------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index e9cfbeec3d..095ed901bb 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -436,6 +436,7 @@ function run_bazel_jar() {
done
"${JAVA_HOME}/bin/java" \
+ --illegal-access=permit \
-XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=ISO-8859-1 \
-XX:HeapDumpPath=${OUTPUT_DIR} \
-Djava.util.logging.config.file=${OUTPUT_DIR}/javalog.properties \
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index ecdc707c64..25c4f619bb 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -360,13 +360,13 @@ static vector<string> GetServerExeArgs(const blaze_util::Path &jvm_path,
result.push_back("-XX:HeapDumpPath=" +
startup_options.output_base.AsJvmArgument());
- // TODO(b/109998449): only assume JDK >= 9 for embedded JDKs
- if (!startup_options.GetEmbeddedJavabase().IsEmpty()) {
- // quiet warnings from com.google.protobuf.UnsafeUtil,
- // see: https://github.com/google/protobuf/issues/3781
- result.push_back("--add-opens=java.base/java.nio=ALL-UNNAMED");
- result.push_back("--add-opens=java.base/java.lang=ALL-UNNAMED");
- }
+ // quiet warnings from com.google.protobuf.UnsafeUtil,
+ // see: https://github.com/google/protobuf/issues/3781
+ result.push_back("--add-opens=java.base/java.nio=ALL-UNNAMED");
+ result.push_back("--add-opens=java.base/java.lang=ALL-UNNAMED");
+
+ // explicitly permit illegal access, go back to pre-JDK16 default
+ result.push_back("--illegal-access=permit");
vector<string> user_options = startup_options.host_jvm_args;
--
2.31.1
From: cushon <cushon@google.com>
Date: Mon, 7 Dec 2020 13:00:08 -0800
Subject: [PATCH] Stop hardcoding `-Xverify:none` in `SpawnAction`
Upstream: yes (https://github.com/bazelbuild/bazel/commit/0216ee54417fa1f2fef14f6eb14cbc1e8f595821)
The motivation was to improve startup performance of host tools that we trust.
The hard-coded flags for JavaBuilder and turbine were made obsolete by
`java_toolchain.jvm_opts`, which allows them to be configured in the toolchain
instead.
The option has been deprecated in Java 13 and will be removed in a future
release.
Fixes https://github.com/bazelbuild/bazel/issues/11381
PiperOrigin-RevId: 346160835
---
.../build/lib/analysis/actions/SpawnAction.java | 1 -
.../build/lib/analysis/actions/SpawnActionTest.java | 10 ++++------
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 500ca758a6..de2257776a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -1016,7 +1016,6 @@ public class SpawnAction extends AbstractAction implements CommandAction {
this.executableArgs =
CustomCommandLine.builder()
.addPath(javaExecutable)
- .add("-Xverify:none")
.addAll(ImmutableList.copyOf(jvmArgs))
.addAll(ImmutableList.copyOf(launchArgs));
toolsBuilder.add(deployJar);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java
index 526473aff7..871509533f 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java
@@ -166,8 +166,7 @@ public class SpawnActionTest extends BuildViewTestCase {
collectingAnalysisEnvironment.registerAction(actions);
SpawnAction action = (SpawnAction) actions[0];
assertThat(action.getArguments())
- .containsExactly(
- "/bin/java", "-Xverify:none", "-jvmarg", "-cp", "pkg/exe.jar", "MyMainClass")
+ .containsExactly("/bin/java", "-jvmarg", "-cp", "pkg/exe.jar", "MyMainClass")
.inOrder();
}
@@ -193,8 +192,7 @@ public class SpawnActionTest extends BuildViewTestCase {
// The action reports all arguments, including those inside the param file
assertThat(action.getArguments())
- .containsExactly(
- "/bin/java", "-Xverify:none", "-jvmarg", "-cp", "pkg/exe.jar", "MyMainClass", "-X")
+ .containsExactly("/bin/java", "-jvmarg", "-cp", "pkg/exe.jar", "MyMainClass", "-X")
.inOrder();
Spawn spawn =
@@ -205,7 +203,7 @@ public class SpawnActionTest extends BuildViewTestCase {
assertThat(spawn.getArguments())
.containsExactly(
"/bin/java",
- "-Xverify:none",
+
"-jvmarg",
"-cp",
"pkg/exe.jar",
@@ -241,7 +239,7 @@ public class SpawnActionTest extends BuildViewTestCase {
assertThat(action.getArguments())
.containsExactly(
"/bin/java",
- "-Xverify:none",
+
"-jvmarg",
"-cp",
"pkg/exe.jar",
--
2.31.1
From: Jesse Chan <jc@linux.com>
Date: Thu, 24 Jun 2021 20:15:21 +0800
Subject: [PATCH] Remove remaining hardcoded instances of `-Xverify:none`
Bug: #11381, #13097
Refs: d91e5b4e0
---
scripts/bootstrap/compile.sh | 2 +-
src/main/cpp/blaze.cc | 2 --
.../build/lib/rules/java/JavaHeaderCompileActionBuilder.java | 1 -
3 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index f9a152f145..e9cfbeec3d 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -436,7 +436,7 @@ function run_bazel_jar() {
done
"${JAVA_HOME}/bin/java" \
- -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Dfile.encoding=ISO-8859-1 \
+ -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=ISO-8859-1 \
-XX:HeapDumpPath=${OUTPUT_DIR} \
-Djava.util.logging.config.file=${OUTPUT_DIR}/javalog.properties \
${JNI_FLAGS} \
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index a3fd334f24..ecdc707c64 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -368,8 +368,6 @@ static vector<string> GetServerExeArgs(const blaze_util::Path &jvm_path,
result.push_back("--add-opens=java.base/java.lang=ALL-UNNAMED");
}
- result.push_back("-Xverify:none");
-
vector<string> user_options = startup_options.host_jvm_args;
// Add JVM arguments particular to building blaze64 and particular JVM
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
index 6f855cfdb4..8a543a6e00 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
@@ -337,7 +337,6 @@ public class JavaHeaderCompileActionBuilder {
executableLine =
CustomCommandLine.builder()
.addPath(javaToolchain.getJavaRuntime().javaBinaryExecPathFragment())
- .add("-Xverify:none")
.addAll(javaToolchain.getTurbineJvmOptions())
.add("-jar")
.addExecPath(headerCompiler.getExecutable())
--
2.31.1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment