a few mods to get over the DOS problems we've had a while. these were multifarious...
authorChris Koeritz <fred@gruntose.com>
Tue, 23 Jun 2015 20:09:35 +0000 (16:09 -0400)
committerChris Koeritz <fred@gruntose.com>
Tue, 23 Jun 2015 20:09:35 +0000 (16:09 -0400)
scripts/clam/cpp/rebuild_oldies.sh
scripts/core/functions.sh
scripts/generator/vis_stu_vars.sh
scripts/generator/wrapdoze.sh

index 21a49c29e2b491237f6f91f0528dad899e34703e..92e83a748a054c946cdb8eb290ae7e6409429ae7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 if [ -f "$BUILD_LIST_FILE" ]; then
-       echo Compiling [$(cat $BUILD_LIST_FILE | while read line; do echo $(basename $line); done )]
+  echo Compiling [$(cat $BUILD_LIST_FILE | while read line; do echo $(basename $line); done )]
   rm -f $(cat $BUILD_WHACK_FILE)
 #echo got line to run: $*
   eval "${@}"
index 0f185ee5288710a4657fc0ae05ad25b1601f2695..006851be33a35e2ba54fd9922c07cb780da6892d 100644 (file)
@@ -237,11 +237,22 @@ if [ -z "$skip_all" ]; then
   # switches from a /X/path form to an X:/ form.  this also processes cygwin paths.
   function unix_to_dos_path() {
     # we usually remove dos slashes in favor of forward slashes.
+    local DOSSYHOME
+    if [[ ! "$OS" =~ ^WIN ]]; then
+      # fake this value for non-windows (non-cygwin) platforms.
+      DOSSYHOME="$HOME"
+    else
+      # for cygwin, we must replace the /home/X path with an absolute one, since cygwin
+      # insists on the /home form instead of /c/cygwin/home being possible.  this is
+      # super frustrating and nightmarish.
+      DOSSYHOME="$(cygpath -am "$HOME")"
+    fi
+
     if [ ! -z "$SERIOUS_SLASH_TREATMENT" ]; then
       # unless this flag is set, in which case we force dos slashes.
-      echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
+      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
     else
-      echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/'
+      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/'
     fi
   }
   
index 3f9c50ecdff1c881293e8fc59f79193f78cb2a46..1fe1a43866bc073b3c86593c933583ce8a64d1d1 100644 (file)
@@ -60,7 +60,23 @@ function setup_visual_studio_variables()
 #on hold:    export PLATFORM_DIR="$(short_path "$PROGRAMFILES/Microsoft SDKs/Windows/v7.0A" | tr "A-Z" "a-z" | sed -e 's/^\(.*\)\/[^\/]*\/[^\/]*[\/]$/\1/' )"
 ##| sed -e 's/^\(.\):/\/\1/' )"
 
-export PLATFORM_DIR="c:\progra~2\micros~1\windows\v7.0a"
+    # guess at where we can find this damned directory in its short form.
+#hmmm: this is needed until there's a replacement for short path, or we can build again.
+    export PLATFORM_DIR="c:/progra~2/micros~1/windows/v7.0a"
+    if [ ! -d "$PLATFORM_DIR" ]; then
+      PLATFORM_DIR="c:/progra~1/micros~1/windows/v7.0a"
+      if [ ! -d "$PLATFORM_DIR" ]; then
+        PLATFORM_DIR="c:/progra~1/micros~2/windows/v7.0a"
+        if [ ! -d "$PLATFORM_DIR" ]; then
+          PLATFORM_DIR="c:/progra~2/micros~2/windows/v7.0a"
+        fi
+      fi
+    fi
+
+    if [ ! -d "$PLATFORM_DIR" ]; then
+      echo "*** Failure to calculate the platform directory based on several attempts using c:\\program files\\microsoft sdks\\windows\\v7.0a as the basic pattern"
+    fi
+  
 
   fi
   export WindowsSdkDir="$PLATFORM_DIR"
index ab0a9998ddd1a8b443d0137b16f0a61bf8d1a017..b3a3dd1c61c75730e418e8bd35a5dd9dfded591f 100755 (executable)
@@ -49,6 +49,14 @@ function dossify_and_run_commands()
 #echo "first two chars are $flag"
 #echo "last after that are $filename"
       recombined="$flag$filename"
+#echo combined flag and file is $recombined
+      darc_commands+=("$recombined")
+    elif [[ "$i" =~ ^-libpath:.* ]]; then
+      flag="-libpath:"
+      filename="$(unix_to_dos_path ${i:9})"
+#echo "libflag flag is $flag"
+#echo "name after that is $filename"
+      recombined="$flag$filename"
 #echo combined flag and file is $recombined
       darc_commands+=("$recombined")
     else 
@@ -58,7 +66,7 @@ function dossify_and_run_commands()
 
   declare -a real_commands=()
   for i in "${darc_commands[@]}"; do
-    real_commands+=($(echo $i | sed -e 's/\\/\\\\/g'))
+    real_commands+=($(echo $i | sed -e 's/\//\\/g'))
   done
 
   if [ ! -z "$SHELL_DEBUG" ]; then
@@ -69,8 +77,26 @@ function dossify_and_run_commands()
     echo
   fi
 
+# this nonsense is only necessary because cygwin is screwing up our carefully constructed
+# command line.  it can't seem to leave the dos style paths alone in some cases, and insists
+# on changing their form to use forward slashes, which breaks the windows compiler.
+# this is NOT what cygwin is supposed to be doing, according to their documentation that
+# claims all styles of paths are supported.  and of course this worked fine in msys.
+
   # now actually run the chewed command.
-  cmd /c "${real_commands[@]}"
+
+# old approach, not working since cygwin is hosing us on some paths.
+#cmd /c "${real_commands[@]}"
+
+#new approach that creates a cmd file.
+  cmdfile="$(mktemp $CLAM_TMP/build_cmds.XXXXXX)"
+  echo "${real_commands[@]}" >"$cmdfile"
+#echo "**** cmd file is $cmdfile"
+  cmd /c $(cat "$cmdfile")
+  retval=$?
+  rm "$cmdfile"
+
+  return $retval
 }
 
 dossify_and_run_commands "$@"