[Libreoffice-commits] core.git: configure.ac
Tor Lillqvist (via logerrit)
logerrit at kemper.freedesktop.org
Sat Oct 24 23:27:02 UTC 2020
configure.ac | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 63 insertions(+), 8 deletions(-)
New commits:
commit a34caaa3e68bb8acadb4051481ceeedcb6827b27
Author: Tor Lillqvist <tml at collabora.com>
AuthorDate: Sun Oct 25 00:09:44 2020 +0300
Commit: Tor Lillqvist <tml at collabora.com>
CommitDate: Sun Oct 25 01:26:20 2020 +0200
Add another return value to the PathFormat function, for WSL
This is just one step towards the goal of being able to build for
Windows on WSL (instead of Cygwin).
Unlike Cygwin, WSL can not use Windows pathnames at all. So to be able
to build for Windows on WSL, we will need to be much more careful in
keeping track of which pathnames are in Windows format and which are
in Unix format. Add a second return value for PathFormat that on WSL
is in Unix format.
Like in c6d8e4b36f9575267244119c0a7e6a2275168625, also add a simple
"unit test" (just for visual inspection) of the new functionality.
Change-Id: Ief4584243227677d0705de2c83e2a0bf54eac0a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104761
Tested-by: Jenkins
Reviewed-by: Tor Lillqvist <tml at collabora.com>
diff --git a/configure.ac b/configure.ac
index 1584480f84bf..18dca65bca86 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,12 +63,20 @@ FilterLibs()
PathFormat()
{
- # Args: $1: A pathname. On Cygwin, in either the Unix or the Windows format.
+ # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
+ # function is called also on Unix.
#
- # Return value: $formatted_path. The pathname in Windows format, but using forward slashes instead
- # of backslashes, using 8.3 pathnames if necessary.
+ # Return value: $formatted_path and $formatted_path_unix.
#
- # Errors out if 8.3 names are needed but aren't present for some of the path component.
+ # $formatted_path is the argument in Windows format, but using forward slashes instead of
+ # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
+ # or shell metacharacters).
+ #
+ # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
+ # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
+ # Unix pathname.
+ #
+ # Errors out if 8.3 names are needed but aren't present for some of the path components.
# Examples:
#
@@ -86,8 +94,16 @@ PathFormat()
#
# /usr/bin/find.exe => C:/cygwin64/bin/find.exe
+ if test -n "$UNITTEST_WSL_PATHFORMAT"; then
+ printf "PathFormat $1 ==> "
+ fi
+
formatted_path="$1"
- if test "$build_os" = "cygwin"; then
+ if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
+ if test "$build_os" = "wsl"; then
+ formatted_path=$(echo "$formatted_path" | tr -d '\r')
+ fi
+
pf_conv_to_dos=
# spaces,parentheses,brackets,braces are problematic in pathname
# so are backslashes
@@ -97,7 +113,14 @@ PathFormat()
;;
esac
if test "$pf_conv_to_dos" = "yes"; then
- if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
+ if test "$build_os" = "wsl"; then
+ case "$formatted_path" in
+ /*)
+ formatted_path=$(wslpath -w "$formatted_path")
+ ;;
+ esac
+ formatted_path=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$formatted_path")
+ elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
formatted_path=`cygpath -sm "$formatted_path"`
else
formatted_path=`cygpath -d "$formatted_path"`
@@ -112,12 +135,20 @@ PathFormat()
if test "$fp_count_colon" = "0"; then
new_formatted_path=`realpath "$formatted_path"`
if test $? -ne 0; then
- AC_MSG_WARN([realpath failed for "$1", not necessarily a problem.])
+ AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
else
formatted_path="$new_formatted_path"
fi
fi
- formatted_path=`cygpath -m "$formatted_path"`
+ if test "$build_os" = "wsl"; then
+ if test "$fp_count_colon" != "0"; then
+ formatted_path=$(wslpath -m $(wslpath "$formatted_path"))
+ else
+ formatted_path=$(wslpath -m "$formatted_path")
+ fi
+ else
+ formatted_path=`cygpath -m "$formatted_path"`
+ fi
if test $? -ne 0; then
AC_MSG_ERROR([path conversion failed for "$1".])
fi
@@ -127,6 +158,13 @@ PathFormat()
AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
fi
fi
+ if test "$build_os" = "wsl"; then
+ # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
+ formatted_path_unix=$(wslpath "$formatted_path")
+ else
+ # But Cygwin can
+ formatted_path_unix="$formatted_path"
+ fi
}
AbsolutePath()
@@ -314,6 +352,23 @@ fi
AC_CANONICAL_HOST
AC_CANONICAL_BUILD
+if test -n "$UNITTEST_WSL_PATHFORMAT"; then
+ BUILDDIR=.
+ GREP=grep
+
+ # Use of PathFormat must be after AC_CANONICAL_BUILD above
+ PathFormat /
+ printf "$formatted_path , $formatted_path_unix\n"
+
+ PathFormat $PWD
+ printf "$formatted_path , $formatted_path_unix\n"
+
+ PathFormat "$PROGRAMFILESX86"
+ printf "$formatted_path , $formatted_path_unix\n"
+
+ exit 0
+fi
+
AC_MSG_CHECKING([for product name])
PRODUCTNAME="AC_PACKAGE_NAME"
if test -n "$with_product_name" -a "$with_product_name" != no; then
More information about the Libreoffice-commits
mailing list