diff options
-rw-r--r-- | ocaml.bzl | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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" + |