libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: MSYS+MSVC for libtool branch-2-0, take 2


From: Bob Friesenhahn
Subject: RE: MSYS+MSVC for libtool branch-2-0, take 2
Date: Mon, 11 Jul 2005 09:55:16 -0500 (CDT)

On Mon, 11 Jul 2005, Peter Ekberg wrote:
You don't seem to understand what's going on... On MSYS there
is no "official" way to convert a posix path to a win32 path
(like cygpath on Cygwin). But if you execute any executable
outside of the MSYS /bin or /usr/bin directories (and perhaps
other places as well?), any argument that looks like a posix
path is converted to a win32 path on the assumption that all
such executables expect win32 paths. The problem is that in
this case the conversion needs to be done not on an argument,
but on an environment variable that MSYS does not autoconvert.
So, it needs to be converted manually. So, since there is no
official way to convert paths, I run a program outside of MSYS
and as one of its arguments I have the posix path to be
converted. The program I have chosen to run is the command

This is the script I run under MSYS or Cygwin to convert a POSIX path to a win32 paths with varying amount of escaping in case the result needs to be handled by a script later. It has been pointed out to me that Windows converts forward slashes to backslashes so it is not necessary to generate backslashes, but paths are often seen by Windows users so I try to generate paths which are familiar to them.

#!/bin/sh
# Copyright (C) 2003 GraphicsMagick Group
#
# This program is covered by multiple licenses, which are described in
# Copyright.txt. You should have received a copy of Copyright.txt with this
# package; otherwise see http://www.graphicsmagick.org/www/Copyright.html.
#
# Convert the specified POSIX path to a Windows path under MinGW and Cygwin
# The optional second parameter specifies the level of backslash escaping
# to apply for each Windows backslash position in order to support varying
# levels of variable substitutions in scripts.
#
# Note that Cygwin includes the 'cygpath' utility, which already provides
# path translation capability.
#
# Written by Bob Friesenhahn <address@hidden> June 2002
#
arg="$1"
escapes=0
if test -n "$2"
then
  escapes="$2"
fi
if test $escapes -gt 3
then
  echo "$0: escape level must in range 0 - 3"
  exit 1
fi
result=''
length=0
max_length=0
mount | sed -e 's:\\:/:g'  | (
  IFS="\n"
  while read mount_entry
  do
    win_mount_path=`echo "$mount_entry" | sed -e 's: .*::g'`
    unix_mount_path=`echo "$mount_entry" | sed -e 's:.* on ::;s: type .*::'`
    temp=`echo "$arg" | sed -e "s!^$unix_mount_path!$win_mount_path!"`
    if test "$temp" != "$arg"
    then
      candidate="$temp"
      length=${#unix_mount_path}
      if test $length -gt $max_length
      then
        result=$candidate
        max_length=$length
      fi
    fi
  done
  if test -z "$result"
  then
    echo "$0: path \"$arg\" is not mounted"
    exit 1
  fi
  case $escapes in
    0)
     echo "$result" | sed -e 's:/:\\:g'
     ;;
    1)
     echo "$result" | sed -e 's:/:\\\\:g'
     ;;
    2)
     echo "$result" | sed -e 's:/:\\\\\\\\:g'
     ;;
    3)
     echo "$result" | sed -e 's:/:\\\\\\\\\\\\\\\\:g'
     ;;
  esac
  exit 0;
 )

======================================
Bob Friesenhahn
address@hidden, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]