summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ocaml.bzl14
1 files changed, 13 insertions, 1 deletions
diff --git a/ocaml.bzl b/ocaml.bzl
index 9fcd6a7..3065d80 100644
--- a/ocaml.bzl
+++ b/ocaml.bzl
@@ -12,13 +12,25 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+def _change_extension(path, new_extension):
+ # TODO(bbarenblat): Don’t hard-code "/" as the path separator.
+ basename_start = path.rfind("/")
+ if basename_start == -1:
+ basename_start = 0
+ extension_start = path.rfind(".", basename_start)
+ if extension_start == -1:
+ # No extension, so add one.
+ return path + "." + new_extension
+ else:
+ return path[:extension_start] + "." + new_extension
+
def _ocaml_interface_impl(ctx):
# ocamlopt completely ignores the -o option if you’re compiling OCaml. (It
# works correctly if you’re compiling C using ocamlopt as a driver.) As a
# workaround, compute the path to the file ocamlopt will generate and then
# move it into its final (Bazel-approved) location.
input_file_path = ctx.files.src[0].path
- generated_interface_path = input_file_path.replace(".mli", ".cmi")
+ generated_interface_path = _change_extension(input_file_path, "cmi")
cmd = (
"set -e;" +
"ocamlopt" +