Browse Source

BundleUtilities: Avoid a cryptic and unhelpful error message

When the path to "resolved_embedded_item" was shorter than
the path to the bundle being fixed up, fixup_bundle would
fail with a cmake error like:

  "string end index: 110 is out of range 0 - 85"

Detect when the path of resolved_embedded_item is too short
to be embedded in the bundle, and report the proper error
message, so the poor developer reading it has a snowball's
chance of actually fixing the issue.
David Cole 14 years ago
parent
commit
8f0667c113
1 changed files with 15 additions and 3 deletions
  1. 15 3
      Modules/BundleUtilities.cmake

+ 15 - 3
Modules/BundleUtilities.cmake

@@ -546,13 +546,25 @@ function(fixup_bundle_item resolved_embedded_item exepath dirs)
   #
   get_dotapp_dir("${exepath}" exe_dotapp_dir)
   string(LENGTH "${exe_dotapp_dir}/" exe_dotapp_dir_length)
-  string(SUBSTRING "${resolved_embedded_item}" 0 ${exe_dotapp_dir_length} item_substring)
-  if(NOT "${exe_dotapp_dir}/" STREQUAL "${item_substring}")
+  string(LENGTH "${resolved_embedded_item}" resolved_embedded_item_length)
+  set(path_too_short 0)
+  set(is_embedded 0)
+  if(${resolved_embedded_item_length} LESS ${exe_dotapp_dir_length})
+    set(path_too_short 1)
+  endif()
+  if(NOT path_too_short)
+    string(SUBSTRING "${resolved_embedded_item}" 0 ${exe_dotapp_dir_length} item_substring)
+    if("${exe_dotapp_dir}/" STREQUAL "${item_substring}")
+      set(is_embedded 1)
+    endif()
+  endif()
+  if(NOT is_embedded)
     message("  exe_dotapp_dir/='${exe_dotapp_dir}/'")
     message("  item_substring='${item_substring}'")
     message("  resolved_embedded_item='${resolved_embedded_item}'")
     message("")
-    message("Install or copy the item into the bundle before calling fixup_bundle")
+    message("Install or copy the item into the bundle before calling fixup_bundle.")
+    message("Or maybe there's a typo or incorrect path in one of the args to fixup_bundle?")
     message("")
     message(FATAL_ERROR "cannot fixup an item that is not in the bundle...")
   endif()