Allow building the Bazel server for OpenBSD.

This change, split out of the larger PR https://github.com/bazelbuild/bazel/pull/10274, is part of the OpenBSD port in https://github.com/bazelbuild/bazel/issues/10250.

Closes #10386.

PiperOrigin-RevId: 285973120
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java
index 7da070a..28e5637 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java
@@ -36,6 +36,7 @@
       ImmutableMap.<OS, PathFragment>builder()
           .put(OS.WINDOWS, PathFragment.create("c:/tools/msys64/usr/bin/bash.exe"))
           .put(OS.FREEBSD, PathFragment.create("/usr/local/bin/bash"))
+          .put(OS.OPENBSD, PathFragment.create("/usr/local/bin/bash"))
           .build();
 
   private final PathFragment shellExecutable;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/AutoCpuConverter.java b/src/main/java/com/google/devtools/build/lib/analysis/config/AutoCpuConverter.java
index 32d25c8..c0edc7c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/AutoCpuConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/AutoCpuConverter.java
@@ -37,6 +37,8 @@
           return "darwin";
         case FREEBSD:
           return "freebsd";
+        case OPENBSD:
+          return "openbsd";
         case WINDOWS:
           switch (CPU.getCurrent()) {
             case X86_64:
@@ -81,6 +83,8 @@
       return Pair.of(CPU.getCurrent(), OS.DARWIN);
     } else if (input.startsWith("freebsd")) {
       return Pair.of(CPU.getCurrent(), OS.FREEBSD);
+    } else if (input.startsWith("openbsd")) {
+      return Pair.of(CPU.getCurrent(), OS.OPENBSD);
     } else if (input.startsWith("x64_windows")) {
       return Pair.of(CPU.getCurrent(), OS.WINDOWS);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
index a47defb..1728028 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunction.java
@@ -129,6 +129,8 @@
         return "@platforms//os:osx";
       case FREEBSD:
         return "@platforms//os:freebsd";
+      case OPENBSD:
+        return "@platforms//os:openbsd";
       case LINUX:
         return "@platforms//os:linux";
       case WINDOWS:
diff --git a/src/main/java/com/google/devtools/build/lib/platform/JniLoader.java b/src/main/java/com/google/devtools/build/lib/platform/JniLoader.java
index 6cefb2b..312b2fd 100644
--- a/src/main/java/com/google/devtools/build/lib/platform/JniLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/platform/JniLoader.java
@@ -28,6 +28,7 @@
       switch (OS.getCurrent()) {
         case LINUX:
         case FREEBSD:
+        case OPENBSD:
         case UNKNOWN:
         case DARWIN:
           UnixJniLoader.loadJni();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
index 20c20b4..92a02ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
@@ -1573,7 +1573,7 @@
   }
 
   private static String ifLinux(CppPlatform platform, String... lines) {
-    // Platform `LINUX` also includes FreeBSD.
+    // Platform `LINUX` also includes FreeBSD and OpenBSD.
     return ifTrue(platform == CppPlatform.LINUX, lines);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
index 79d4eb7..9b5d9ff 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java
@@ -326,6 +326,8 @@
         return "windows";
       case FREEBSD:
         return "freebsd";
+      case OPENBSD:
+        return "openbsd";
       default:
         return OS.getCurrent().getCanonicalName();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
index 9542381..5fb95f7 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
@@ -65,8 +65,8 @@
       help =
           "If true, Bazel picks up host-OS-specific config lines from bazelrc files. For example, "
               + "if the host OS is Linux and you run bazel build, Bazel picks up lines starting "
-              + "with build:linux. Supported OS identifiers are linux, macos, windows, and "
-              + "freebsd. Enabling this flag is equivalent to using --config=linux on Linux, "
+              + "with build:linux. Supported OS identifiers are linux, macos, windows, freebsd, "
+              + "and openbsd. Enabling this flag is equivalent to using --config=linux on Linux, "
               + "--config=windows on Windows, etc.")
   public boolean enablePlatformSpecificConfig;
 
diff --git a/src/main/java/com/google/devtools/build/lib/util/OS.java b/src/main/java/com/google/devtools/build/lib/util/OS.java
index 317f4e3..c986813 100644
--- a/src/main/java/com/google/devtools/build/lib/util/OS.java
+++ b/src/main/java/com/google/devtools/build/lib/util/OS.java
@@ -21,11 +21,12 @@
 public enum OS {
   DARWIN("osx", "Mac OS X"),
   FREEBSD("freebsd", "FreeBSD"),
+  OPENBSD("openbsd", "OpenBSD"),
   LINUX("linux", "Linux"),
   WINDOWS("windows", "Windows"),
   UNKNOWN("unknown", "");
 
-  private static final EnumSet<OS> POSIX_COMPATIBLE = EnumSet.of(DARWIN, FREEBSD, LINUX);
+  private static final EnumSet<OS> POSIX_COMPATIBLE = EnumSet.of(DARWIN, FREEBSD, OPENBSD, LINUX);
 
   private final String canonicalName;
   private final String detectionName;
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/OsPathPolicy.java b/src/main/java/com/google/devtools/build/lib/vfs/OsPathPolicy.java
index 6b0380f..f1df6a5 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/OsPathPolicy.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/OsPathPolicy.java
@@ -87,6 +87,7 @@
     switch (OS.getCurrent()) {
       case LINUX:
       case FREEBSD:
+      case OPENBSD:
       case UNKNOWN:
         return UnixOsPathPolicy.INSTANCE;
       case DARWIN:
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ShellConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ShellConfigurationTest.java
index 8d077ad..3a4d07e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/ShellConfigurationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/ShellConfigurationTest.java
@@ -34,6 +34,8 @@
         .isEqualTo(PathFragment.create("/bin/bash"));
     assertThat(determineShellExecutable(OS.FREEBSD, null))
         .isEqualTo(PathFragment.create("/usr/local/bin/bash"));
+    assertThat(determineShellExecutable(OS.OPENBSD, null))
+        .isEqualTo(PathFragment.create("/usr/local/bin/bash"));
     assertThat(determineShellExecutable(OS.WINDOWS, null))
         .isEqualTo(PathFragment.create("c:/tools/msys64/usr/bin/bash.exe"));
   }
@@ -45,6 +47,8 @@
         .isEqualTo(PathFragment.create("/bin/bash"));
     assertThat(determineShellExecutable(OS.FREEBSD, binBash))
         .isEqualTo(PathFragment.create("/bin/bash"));
+    assertThat(determineShellExecutable(OS.OPENBSD, binBash))
+        .isEqualTo(PathFragment.create("/bin/bash"));
     assertThat(determineShellExecutable(OS.WINDOWS, binBash))
         .isEqualTo(PathFragment.create("/bin/bash"));
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
index bc509e0..9c6c2bd 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/LocalConfigPlatformFunctionTest.java
@@ -84,6 +84,7 @@
           new Object[] {OS.LINUX, "@platforms//os:linux"},
           new Object[] {OS.DARWIN, "@platforms//os:osx"},
           new Object[] {OS.FREEBSD, "@platforms//os:freebsd"},
+          new Object[] {OS.OPENBSD, "@platforms//os:openbsd"},
           new Object[] {OS.WINDOWS, "@platforms//os:windows"});
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockPlatformSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockPlatformSupport.java
index 53ac8f1..9032f93 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockPlatformSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockPlatformSupport.java
@@ -84,6 +84,10 @@
         "constraint_value(",
         "    name = 'freebsd',",
         "    constraint_setting = ':os',",
+        ")",
+        "constraint_value(",
+        "    name = 'openbsd',",
+        "    constraint_setting = ':os',",
         ")");
     String basePlatform;
     if (TestConstants.LOCAL_CONFIG_PLATFORM_PATH != null) {
diff --git a/src/test/java/com/google/devtools/build/lib/platform/SleepPreventionModuleTest.java b/src/test/java/com/google/devtools/build/lib/platform/SleepPreventionModuleTest.java
index f69bd5f..71a30ec 100644
--- a/src/test/java/com/google/devtools/build/lib/platform/SleepPreventionModuleTest.java
+++ b/src/test/java/com/google/devtools/build/lib/platform/SleepPreventionModuleTest.java
@@ -32,6 +32,7 @@
         return true;
       case LINUX:
       case FREEBSD:
+      case OPENBSD:
       case UNKNOWN:
         return false;
     }
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
index 3771809..f769fe0 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
@@ -163,6 +163,7 @@
     structuredArgs.put("c0:windows", new RcChunkOfArgs("rc1", ImmutableList.of("command_windows")));
     structuredArgs.put("c0:macos", new RcChunkOfArgs("rc1", ImmutableList.of("command_macos")));
     structuredArgs.put("c0:freebsd", new RcChunkOfArgs("rc1", ImmutableList.of("command_freebsd")));
+    structuredArgs.put("c0:openbsd", new RcChunkOfArgs("rc1", ImmutableList.of("command_openbsd")));
     structuredArgs.put(
         "c0:platform_config",
         new RcChunkOfArgs("rc1", ImmutableList.of("--enable_platform_specific_config")));
@@ -328,6 +329,9 @@
       case FREEBSD:
         assertThat(parser.getResidue()).containsExactly("command_freebsd");
         break;
+      case OPENBSD:
+        assertThat(parser.getResidue()).containsExactly("command_openbsd");
+        break;
       default:
         assertThat(parser.getResidue()).isEmpty();
     }
@@ -353,6 +357,9 @@
       case FREEBSD:
         assertThat(parser.getResidue()).containsExactly("command_freebsd");
         break;
+      case OPENBSD:
+        assertThat(parser.getResidue()).containsExactly("command_openbsd");
+        break;
       default:
         assertThat(parser.getResidue()).isEmpty();
     }
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index 0bdd29d..dc1edf4 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -116,6 +116,11 @@
     srcs = ["include/freebsd/jni_md.h"],
 )
 
+java_runtime_files(
+    name = "jni_md_header-openbsd",
+    srcs = ["include/openbsd/jni_md.h"],
+)
+
 alias(
     name = "java",
     actual = "@local_jdk//:java",