X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fgenerator%2Fwrapdoze.sh;h=d38b432b2c229f414f60249099ff3b8d55c0cbba;hb=bf9f2d280d6e70876876238116d88a8e27791888;hp=758fc76243fb27fcabfcd4575395243be446ecff;hpb=b51411a29f1a751a09e69f5676afeea24a94ac83;p=feisty_meow.git diff --git a/scripts/generator/wrapdoze.sh b/scripts/generator/wrapdoze.sh index 758fc762..d38b432b 100644 --- a/scripts/generator/wrapdoze.sh +++ b/scripts/generator/wrapdoze.sh @@ -1,42 +1,110 @@ #!/bin/bash -source $FEISTY_MEOW_SCRIPTS/core/functions.sh +source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh" +#hmmm: make this support multiple vars as parameters. +# replaces a specific environment variable with a dos approved equivalent. +function dossify_environment_variable() +{ + local var="$1"; shift + +#cygpath doesn't handle multiple path variables properly and otherwise operates only on one path element. +## new_value="$(cygpath -p -d ${!var})" +## eval "export $var=\"$new_value\"" +##echo "hey now the var is '${!var}'" + + old_value="${!var}" +#echo "var is '$var' and old value is '$old_value'" + if [[ ! "$old_value" =~ \/cygdrive\/ ]]; then +#echo didnt have a cygdrive in it: $old_value + return 0 +#hmmm: want this to continue in multi parm version. + fi + + # replace single back-slashes with double ones. + local new_value="$(unix_to_dos_path "${old_value}")" + + # remove any quote characters in the value. + new_value="${new_value//\"/}" + + eval "export $var=\"$new_value\"" + echo "new value established: $var='${!var}'" +} + +# for a windows build, this will replace any forward slashes +# and other cygwin notation with the appropriate dos style paths. function dossify_and_run_commands() { + if [ "$OS" != "Windows_NT" ]; then + # for non windows, just run the commands straight up. + eval "${@}" + return $? + fi + + # force all slashes to be dossy. +# export SERIOUS_SLASH_TREATMENT=true + + dossify_environment_variable INCLUDE + declare -a darc_commands=() for i in "$@"; do - # we only mess with the command line on windows. - if [ "$OS" == "Windows_NT" ]; then - if [[ "$i" =~ ^-[a-zA-z][/\"].* ]]; then -#echo matched on our pattern for parameters - flag="${i:0:2}" - filename="$(unix_to_dos_path ${i:2})" - + if [[ "$i" =~ ^-[a-zA-z][/\"].* ]]; then + flag="${i:0:2}" + filename="$(unix_to_dos_path ${i:2})" #echo "first two chars are $flag" #echo "last after that are $filename" -#combined="$flag$filename" -#echo combined is $combined - - darc_commands+=("$flag$filename") - else - darc_commands+=($(unix_to_dos_path $i)) - fi - else - darc_commands+=("$i") + 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 + darc_commands+=($(unix_to_dos_path $i)) fi done -#temp! - echo commands are now: >>/tmp/wrapdoze.log + declare -a real_commands=() for i in "${darc_commands[@]}"; do - echo $i >>/tmp/wrapdoze.log + real_commands+=($(echo $i | sed -e 's/\//\\/g')) done -#end temp - # now actually run the possibly chewed command. - "${darc_commands[@]}" + if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then + echo commands are now: + for i in "${real_commands[@]}"; do + echo -n "$i " + done + 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. + +# 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=$? + # leave the file for inspection if there was an error. + if [ $retval -eq 0 ]; then + \rm "$cmdfile" + fi + return $retval } dossify_and_run_commands "$@"