aboutsummaryrefslogtreecommitdiff
path: root/msvc-mt-common
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-08-02 08:45:03 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-08-02 08:45:03 +0200
commitc3302ca3e31d8140210bc978277ac71fc2a89c6b (patch)
tree3bee943000373dc88c6307e15635361ac2da9ef2 /msvc-mt-common
parentb0e0ca4e60483b76383ae3575ef39423fda608d6 (diff)
Add mt.exe driver
Diffstat (limited to 'msvc-mt-common')
-rwxr-xr-xmsvc-mt-common109
1 files changed, 109 insertions, 0 deletions
diff --git a/msvc-mt-common b/msvc-mt-common
new file mode 100755
index 0000000..25c9c8e
--- /dev/null
+++ b/msvc-mt-common
@@ -0,0 +1,109 @@
+#! /usr/bin/env bash
+
+# Common mt.exe driver that expects the SDKBIN variable to be set for the
+# specific MSVC version/configuration.
+
+trap "{ exit 1; }" ERR
+set -o errtrace # Trap in functions.
+
+function info () { echo "$*" 1>&2; }
+function error () { info "$*"; exit 1; }
+
+source $(dirname $(realpath ${BASH_SOURCE[0]}))/msvc-common
+
+# Translate absolute paths from POSIX to Windows. Use bash array to store
+# arguments in case they contain spaces. This needs to be done for both
+# certain option values and arguments.
+#
+# Note that we assume mt.exe options start with '-' and are case-sensitive.
+#
+args=()
+
+while [ $# -gt 0 ]; do
+ case $1 in
+
+ # @@ TODO: handle for [;[#]<resource_id>]
+ #
+ # -rgs:<file>
+ # -tlb:<file>
+ # -dll:<file>
+ # -replacements:<file>
+ # -managedassemblyname:<file>
+ # -out:<file>
+ # -inputresource:<file>[;[#]<resource_id>]
+ # -outputresource:<file>[;[#]<resource_id>]
+ # -updateresource:<file>[;[#]<resource_id>]
+ # -hashupdate[:<path to the files>]
+ # -validate_file_hashes:<file>
+
+ -rgs:* | \
+ -tlb:* | \
+ -dll:* | \
+ -out:*)
+ args=("${args[@]}" "$(split_translate 5 $1)")
+ shift
+ ;;
+
+ -hashupdate:*)
+ args=("${args[@]}" "$(split_translate 12 $1)")
+ shift
+ ;;
+
+ -replacements:*)
+ args=("${args[@]}" "$(split_translate 14 $1)")
+ shift
+ ;;
+
+ -inputresource:*)
+ args=("${args[@]}" "$(split_translate 15 $1)")
+ shift
+ ;;
+
+ -outputresource:* | \
+ -updateresource:*)
+ args=("${args[@]}" "$(split_translate 16 $1)")
+ shift
+ ;;
+
+ -managedassemblyname:*)
+ args=("${args[@]}" "$(split_translate 21 $1)")
+ shift
+ ;;
+
+ -validate_file_hashes:*)
+ args=("${args[@]}" "$(split_translate 22 $1)")
+ shift
+ ;;
+
+ # Handle other options with separate values. This makes sure we don't try
+ # to path-translate them.
+ #
+
+ # None.
+
+ # Handle other options with combined values that could possibly be
+ # interpreted as paths.
+ #
+ -identity:*)
+ args=("${args[@]}" "$1")
+ shift
+ ;;
+
+ # Option or argument.
+ #
+ *)
+ # If starts with a slash, treat it as a path (options start with dash).
+ #
+ if [[ "$1" == /* ]]; then
+ args=("${args[@]}" "$(translate $1)")
+ else
+ args=("${args[@]}" "$1")
+ fi
+ shift
+ ;;
+ esac
+done
+
+# mt.exe always sends diagnostics to stdout.
+#
+msvc_exec 1 "$SDKBIN\\mt.exe" "${args[@]}"