[Libreoffice-commits] core.git: configure.ac

Tor Lillqvist (via logerrit) logerrit at kemper.freedesktop.org
Mon Oct 5 20:12:24 UTC 2020


 configure.ac |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)

New commits:
commit c6d8e4b36f9575267244119c0a7e6a2275168625
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Sun Oct 4 22:45:48 2020 +0300
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Mon Oct 5 22:11:40 2020 +0200

    Pre-set the host and build platform on WSL
    
    WSL is otherwise detected as Linux, which it of course is, but on WSL
    we typically (?) don't want to build LibreOffice for Linux, but for
    Windows. Do this only if no explicit host platform has been passed on
    the command line. We do want it to be possible to actually build for
    Linux on WSL, too.
    
    For WSL, define an emulation of the cygpath command on Cygwin.  Also
    add a simple "test" for it, for visual inspection, not an actual unit
    test.
    
    Change-Id: I9d9fd8f8039692d754fb96762ed00727e97130b6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103936
    Tested-by: Jenkins
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/configure.ac b/configure.ac
index 255410b50063..9ec9527a6120 100644
--- a/configure.ac
+++ b/configure.ac
@@ -205,6 +205,108 @@ dnl ===================================================================
 dnl checks build and host OSes
 dnl do this before argument processing to allow for platform dependent defaults
 dnl ===================================================================
+
+# Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
+# Linux on WSL) trust that.
+if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
+    ac_cv_host="x86_64-pc-wsl"
+    ac_cv_build="$ac_cv_host"
+
+    # Emulation of Cygwin's cygpath command for WSL.
+    cygpath()
+    {
+        if test -n "$UNITTEST_WSL_CYGPATH"; then
+            echo -n cygpath "$@" "==> "
+        fi
+
+        # Cygwin's real cygpath has a plethora of options but we use only a few here.
+        local args="$@"
+        local opt
+        local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
+        OPTIND=1
+
+        while getopts dmuwlsp opt; do
+            case "$opt" in
+                \?)
+                    AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
+                    ;;
+                ?)
+                    eval opt_$opt=yes
+                    ;;
+            esac
+        done
+
+        shift $((OPTIND-1))
+
+        if test $# -ne 1; then
+            AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
+        fi
+
+        local input="$1"
+
+        local result
+
+        if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
+            # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
+
+            if test -n "$opt_u"; then
+                AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
+            fi
+
+            case "$input" in
+                [[a-zA-Z]]:\\* | \\*)
+                    # Already in Windows format
+                    ;;
+                /*)
+                    input=$(wslpath -w "$input")
+                    ;;
+                *)
+                    AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
+                    ;;
+            esac
+            if test -n "$opt_d" -o -n "$opt_s"; then
+                input=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --8.3 "$input")
+            fi
+            if test -n "$opt_m"; then
+                input="${input//\\//}"
+            fi
+            echo "$input"
+        else
+            # Print Unix path
+
+            case "$input" in
+                [[a-zA-Z]]:\\* | \\*)
+                    wslpath -u "$input"
+                    ;;
+                /)
+                    echo "$input"
+                    ;;
+                *)
+                    AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
+                    ;;
+            esac
+        fi
+    }
+
+    if test -n "$UNITTEST_WSL_CYGPATH"; then
+        BUILDDIR=.
+
+        cygpath -d /usr/lib64/ld-linux-x86-64.so.2
+        cygpath -w /usr/lib64/ld-linux-x86-64.so.2
+        cygpath -m /usr/lib64/ld-linux-x86-64.so.2
+        cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
+        cygpath -d /mnt/c/windows/system32/AboutSettingsHandlers.dll
+        cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
+        cygpath -ws /mnt/c/windows/system32/AboutSettingsHandlers.dll
+        cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
+        cygpath -ms /mnt/c/windows/system32/AboutSettingsHandlers.dll
+
+        cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
+
+        exit 0
+    fi
+fi
+
 AC_CANONICAL_HOST
 
 AC_MSG_CHECKING([for product name])


More information about the Libreoffice-commits mailing list