Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebase to Cygwin v3.4.8 #168

Merged
merged 40 commits into from
Aug 18, 2023
Merged

Rebase to Cygwin v3.4.8 #168

merged 40 commits into from
Aug 18, 2023

Commits on Aug 17, 2023

  1. Add MSYS2 triplet

    Alexpux authored and lazka committed Aug 17, 2023
    Configuration menu
    Copy the full SHA
    d68cd9a View commit details
    Browse the repository at this point in the history
  2. Fix msys library name in import libraries

    Cygwin's speclib doesn't handle dashes or dots. However, we are about to
    rename the output file name from `cygwin1.dll` to `msys-2.0.dll`.
    
    Let's preemptively fix up all the import libraries that would link
    against `msys_2_0.dll` to correctly link against `msys-2.0.dll` instead.
    ktbarrett authored and lazka committed Aug 17, 2023
    Configuration menu
    Copy the full SHA
    3117dbf View commit details
    Browse the repository at this point in the history
  3. Rename dll from cygwin to msys

    Alexpux authored and lazka committed Aug 17, 2023
    Configuration menu
    Copy the full SHA
    cb29080 View commit details
    Browse the repository at this point in the history

Commits on Aug 18, 2023

  1. Add functionality for converting UNIX paths in arguments and environm…

    …ent variables to Windows form for native Win32 applications.
    Alexpux authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    a6c7c83 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    a17543a View commit details
    Browse the repository at this point in the history
  3. - Move root to /usr. - Change sorting mount points. - By default moun…

    …t without ACLs. - Can read /etc/fstab with short mount point format.
    Alexpux authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    f80a257 View commit details
    Browse the repository at this point in the history
  4. Instead of creating Cygwin symlinks, use deep copy by default

    The new `winsymlinks` mode `deepcopy` (which is made the default) lets
    calls to `symlink()` create (deep) copies of the source file/directory.
    
    This is necessary because unlike Cygwin, MSYS2 does not try to be its
    own little ecosystem that lives its life separate from regular Win32
    programs: the latter have _no idea_ about Cygwin-emulated symbolic links
    (i.e. system files whose contents start with `!<symlink>\xff\xfe` and
    the remainder consists of the NUL-terminated, UTF-16LE-encoded symlink
    target).
    
    To support Cygwin-style symlinks, the new mode `sysfile` is introduced.
    
    Co-authored-by: Johannes Schindelin <[email protected]>
    2 people authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    a6a728f View commit details
    Browse the repository at this point in the history
  5. Automatically rewrite TERM=msys to TERM=cygwin

    With MSys1, it was necessary to set the TERM variable to "msys". To
    allow for a smooth transition from MSys1 to MSys2, let's simply handle
    TERM=msys as if the user had not specified TERM at all and wanted us to
    use our preferred TERM value.
    Alexpux authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    c3b19c3 View commit details
    Browse the repository at this point in the history
  6. Do not convert environment for strace

    Strace is a Windows program so MSYS2 will convert all arguments and environment vars and that makes debugging msys2 software with strace very tricky.
    Alexpux authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    fa7f283 View commit details
    Browse the repository at this point in the history
  7. path_conv: special-case root directory to have trailing slash

    When converting `/c/` to `C:\`, the trailing slash is actually really
    necessary, as `C:` is not an absolute path.
    
    We must be very careful to do this only for root directories, though. If
    we kept the trailing slash also for, say, `/y/directory/`, we would run
    into the following issue: On FAT file systems, the normalized path is
    used to fake inode numbers. As a result, `Y:\directory\` and
    `Y:\directory` have different inode numbers!!!
    
    This would result in very non-obvious symptoms. Back when we were too
    careless about keeping the trailing slash, it was reported to the Git
    for Windows project that the `find` and `rm` commands can error out on
    FAT file systems with very confusing "No such file or directory" errors,
    for no good reason.
    
    During the original investigation, Vasil Minkov pointed out in
    git-for-windows/git#1497 (comment),
    that this bug had been fixed in Cygwin as early as 1997... and the bug
    was unfortunately reintroduced into early MSYS2 versions.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    Alexpux authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    4398443 View commit details
    Browse the repository at this point in the history
  8. dcrt0.cc: Untangle allow_glob from winshell

    Otherwise if globbing is allowed and we get called from a
    Windows program, build_argv thinks we've been called from
    a Cygwin program.
    mingwandroid authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    9058c37 View commit details
    Browse the repository at this point in the history
  9. dcrt0.cc (globify): Don't quote literal strings differently when dos_…

    …spec
    
    Reverts 25ba8f3. I can't figure out what
    the intention was. I'm sure I'll find out soon enough when everything breaks.
    
    This change means that input of:
      '"C:/test.exe SOME_VAR=\"literal quotes\""'
    
    becomes:
      'C:/test.exe SOME_VAR="literal quotes"'
    
    instead of:
      'C:/test.exe SOME_VAR=\literal quotes\'
    
    .. which is at least consistent with the result for:
      '"no_drive_or_colon SOME_VAR=\"literal quotes\""'
    
    The old result of course resulted in the quoted string being split into
    two arguments at the space which is clearly not intended.
    
    I *guess* backslashes in dos paths may have been the issue here?
    If so I don't care since we should not use them, ever, esp. not at
    the expense of sensible forward-slash-containing input.
    mingwandroid authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    171679f View commit details
    Browse the repository at this point in the history
  10. strace.cc: Don't set MSYS=noglob

    Commit message for this code was:
    
    * strace.cc (create_child): Set CYGWIN=noglob when starting new process so that
    
      Cygwin will leave already-parsed the command line alonw."
    
    I can see no reason for it and it badly breaks the ability to use
    strace.exe to investigate calling a Cygwin program from a Windows
    program, for example:
    strace mingw32-make.exe
    .. where mingw32-make.exe finds sh.exe and uses it as the shell.
    The reason it badly breaks this use-case is because dcrt0.cc depends
    on globbing to happen to parse commandlines from Windows programs;
    irrespective of whether they contain any glob patterns or not.
    
    See quoted () comment:
    "This must have been run from a Windows shell, so preserve
     quotes for globify to play with later."
    mingwandroid authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    14c4b68 View commit details
    Browse the repository at this point in the history
  11. Add debugging for build_argv

    mingwandroid authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    62c943b View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    d1d1230 View commit details
    Browse the repository at this point in the history
  13. environ.cc: New facility/environment variable MSYS2_ENV_CONV_EXCL

    Works very much like MSYS2_ARG_CONV_EXCL. In fact it uses the same
    function, arg_heuristic_with_exclusions (). Also refactors parsing
    the env. variables to use new function, string_split_delimited ().
    
    The env. that is searched through is the merged (POSIX + Windows)
    one. It remains to be seen if this should be made an option or not.
    
    This feature was prompted because the R language (Windows exe) calls
    bash to run configure.win, which then calls back into R to read its
    config variables (LOCAL_SOFT) and when this happens, msys2-runtime
    converts R_ARCH from "/x64" to an absolute Windows path and appends
    it to another absolute path, R_HOME, forming an invalid path.
    mingwandroid authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    63c7f86 View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    49c1904 View commit details
    Browse the repository at this point in the history
  15. strace --quiet: be *really* quiet

    The biggest problem with strace spitting out `create_child: ...` despite
    being asked to be real quiet is that its output can very well interfere
    with scripts' operations.
    
    For example, when running any of Git for Windows' shell scripts with
    `GIT_STRACE_COMMANDS=/path/to/logfile` (which is sadly an often needed
    debugging technique while trying to address the many MSYS2 issues Git for
    Windows faces), any time the output of any command is redirected into a
    variable, it will include that `create_child: ...` line, wreaking havoc
    with Git's expectations.
    
    So let's just really be quiet when we're asked to be quiet.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    f60f34b View commit details
    Browse the repository at this point in the history
  16. Introduce the enable_pcon value for MSYS

    It is simply the negation of `disable_pcon`, i.e. `MSYS=enable_pcon` is
    equivalent to `MSYS=nodisable_pcon` (the former is slightly more
    intuitive than the latter) and likewise `MSYS=noenable_pcon` is
    equivalent to `MSYS=disable_pcon` (here, the latter is definitely more
    intuitive than the former).
    
    This is needed because we just demoted the pseudo console feature to be
    opt-in instead of opt-out, and it would be awkward to recommend to users
    to use "nodisable_pcon"... "nodisable" is not even a verb.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    0551e37 View commit details
    Browse the repository at this point in the history
  17. popen: call /usr/bin/sh instead of /bin/sh

    We mount /usr/bin to /bin, but in a chroot this is broken and we
    have no /bin, so try to use the real path.
    
    chroot is used by pacman to run install scripts when called with --root
    and this broke programs in install scripts calling popen()
    (install-info from texinfo for example)
    
    There are more paths hardcoded to /bin in cygwin which might also be broken
    in this scenario, so this maybe should be extended to all of them.
    lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    92799a1 View commit details
    Browse the repository at this point in the history
  18. Disable the 'cygwin' GitHub workflow

    It does not work at all. For example, `rpm -E %fedora` says that there
    should be version 33 of rpmsphere at
    https://github.com/rpmsphere/noarch/tree/master/r, but there is only
    version 32.
    
    Another thing that is broken: Cygwin now assumes that a recent
    mingw-w64-headers version is available, but Fedora apparently only
    offers v7.0.0, which is definitely too old to accommodate for the
    expectation of cygwin/cygwin@c1f7c4d1b6d7.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    f8304c3 View commit details
    Browse the repository at this point in the history
  19. CI: add a GHA for doing a basic build test

    Build with --disable-dependency-tracking because we only build once
    and this saves 3-4 minutes in CI.
    lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    44f878b View commit details
    Browse the repository at this point in the history
  20. Set up a GitHub Action to keep in sync with Cygwin

    This will help us by automating an otherwise tedious task.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    43bf446 View commit details
    Browse the repository at this point in the history
  21. Expose full command-lines to other Win32 processes by default

    In the Cygwin project, it was decided that the command-line of Cygwin
    processes, as shown in the output of `wmic process list`, would suffer
    from being truncated to 32k (and is transmitted to the child process via
    a different mechanism, anyway), and therefore only the absolute path of
    the executable is shown by default.
    
    Users who would like to see the full command-line (even if it is
    truncated) are expected to set `CYGWIN=wincmdln` (or, in MSYS2's case,
    `MSYS=wincmdln`).
    
    Seeing as MSYS2 tries to integrate much better with the surrounding
    Win32 ecosystem than Cygwin, it makes sense to turn this on by default.
    
    Users who wish to suppress it can still set `MSYS=nowincmdln`.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    43b4882 View commit details
    Browse the repository at this point in the history
  22. Do not show Error dialogs by default

    In #18, we discussed a change
    that would allow default Windows error handling of spawned processes to
    kick in (such as registered JIT debuggers). We even agreed that it would
    make sense to hide this functionality behind a flag, `winjitdebug`.
    
    However, when this got upstreamed as 21ec498 (cygwin: use
    CREATE_DEFAULT_ERROR_MODE in spawn, 2020-12-09), that flag was deemed
    unnecessary.
    
    But it would appear that it _is_ necessary: As reported in
    msys2/MSYS2-packages#2414 (comment)
    this new behavior is pretty disruptive e.g. in CI scenarios.
    
    So let's introduce that `winjitdebug` flag (settable via the environment
    variable `MSYS`) at long last.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    ff58985 View commit details
    Browse the repository at this point in the history
  23. Add a helper to obtain a function's address in kernel32.dll

    In particular, we are interested in the address of the CtrlRoutine
    and the ExitProcess functions. Since kernel32.dll is loaded first thing,
    the addresses will be the same for all processes (matching the
    CPU architecture, of course).
    
    This will help us with emulating SIGINT properly (by not sending signals
    to *all* processes attached to the same Console, as
    GenerateConsoleCtrlEvent() would do).
    
    Co-authored-by: Naveen M K <[email protected]>
    Signed-off-by: Johannes Schindelin <[email protected]>
    2 people authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    3f843f6 View commit details
    Browse the repository at this point in the history
  24. Emulate GenerateConsoleCtrlEvent() upon Ctrl+C

    This patch is heavily inspired by the Git for Windows' strategy in
    handling Ctrl+C.
    
    When a process is terminated via TerminateProcess(), it has no chance to
    do anything in the way of cleaning up. This is particularly noticeable
    when a lengthy Git for Windows process tries to update Git's index file
    and leaves behind an index.lock file. Git's idea is to remove the stale
    index.lock file in that case, using the signal and atexit handlers
    available in Linux. But those signal handlers never run.
    
    Note: this is not an issue for MSYS2 processes because MSYS2 emulates
    Unix' signal system accurately, both for the process sending the kill
    signal and the process receiving it. Win32 processes do not have such a
    signal handler, though, instead MSYS2 shuts them down via
    `TerminateProcess()`.
    
    For a while, Git for Windows tried to use a gentler method, described in
    the Dr Dobb's article "A Safer Alternative to TerminateProcess()" by
    Andrew Tucker (July 1, 1999),
    http://www.drdobbs.com/a-safer-alternative-to-terminateprocess/184416547
    
    Essentially, we injected a new thread into the running process that does
    nothing else than running the ExitProcess() function.
    
    However, this was still not in line with the way CMD handles Ctrl+C: it
    gives processes a chance to do something upon Ctrl+C by calling
    SetConsoleCtrlHandler(), and ExitProcess() simply never calls that
    handler.
    
    So for a while we tried to handle SIGINT/SIGTERM by attaching to the
    console of the command to interrupt, and generating the very same event
    as CMD does via GenerateConsoleCtrlEvent().
    
    This method *still* was not correct, though, as it would interrupt
    *every* process attached to that Console, not just the process (and its
    children) that we wanted to signal. A symptom was that hitting Ctrl+C
    while `git log` was shown in the pager would interrupt *the pager*.
    
    The method we settled on is to emulate what GenerateConsoleCtrlEvent()
    does, but on a process by process basis: inject a remote thread and call
    the (private) function kernel32!CtrlRoutine.
    
    To obtain said function's address, we use the dbghelp API to generate a
    stack trace from a handler configured via SetConsoleCtrlHandler() and
    triggered via GenerateConsoleCtrlEvent(). To avoid killing each and all
    processes attached to the same Console as the MSYS2 runtime, we modify
    the cygwin-console-helper to optionally print the address of
    kernel32!CtrlRoutine to stdout, and then spawn it with a new Console.
    
    Note that this also opens the door to handling 32-bit process from a
    64-bit MSYS2 runtime and vice versa, by letting the MSYS2 runtime look
    for the cygwin-console-helper.exe of the "other architecture" in a
    specific place (we choose /usr/libexec/, as it seems to be the
    convention for helper .exe files that are not intended for public
    consumption).
    
    The 32-bit helper implicitly links to libgcc_s_dw2.dll and
    libwinpthread-1.dll, so to avoid cluttering /usr/libexec/, we look for
    the helped of the "other" architecture in the corresponding mingw32/ or
    mingw64/ subdirectory.
    
    Among other bugs, this strategy to handle Ctrl+C fixes the MSYS2 side of
    the bug where interrupting `git clone https://...` would send the
    spawned-off `git remote-https` process into the background instead of
    interrupting it, i.e. the clone would continue and its progress would be
    reported mercilessly to the console window without the user being able
    to do anything about it (short of firing up the task manager and killing
    the appropriate task manually).
    
    Note that this special-handling is only necessary when *MSYS2* handles
    the Ctrl+C event, e.g. when interrupting a process started from within
    MinTTY or any other non-cmd-based terminal emulator. If the process was
    started from within `cmd.exe`'s terminal window, child processes are
    already killed appropriately upon Ctrl+C, by `cmd.exe` itself.
    
    Also, we can't trust the processes to end it's subprocesses upon receiving
    Ctrl+C. For example, `pip.exe` from `python-pip` doesn't kill the python
    it lauches (it tries to but fails), and I noticed that in cmd it kills python
    also correctly, which mean we should kill all the process using
    `exit_process_tree`.
    
    Co-authored-by: Naveen M K <[email protected]>
    Signed-off-by: Johannes Schindelin <[email protected]>
    2 people authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    dcb9283 View commit details
    Browse the repository at this point in the history
  25. kill: kill Win32 processes more gently

    This change is the equivalent to the change to the Ctrl+C handling we
    just made.
    
    Co-authored-by: Naveen M K <[email protected]>
    Signed-off-by: Johannes Schindelin <[email protected]>
    2 people authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    9f8fb29 View commit details
    Browse the repository at this point in the history
  26. Cygwin: make option for native inner link handling.

    This code has been causing issues with SUBST and mapped network drives,
    so add an option (defaulted to on) which can be used to disable it where
    needed.  MSYS=nonativeinnerlinks
    jeremyd2019 authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    b233fd4 View commit details
    Browse the repository at this point in the history
  27. docs: skip building texinfo and PDF files

    The MSYS2 packages lack the infrastructure to build those.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    3760786 View commit details
    Browse the repository at this point in the history
  28. install-libs: depend on the "toollibs"

    Before symlinking libg.a, we need the symlink source `libmsys-2.0.a`: in
    MSYS2, we copy by default (if we were creating Unix-style symlinks, the
    target would not have to exist before symlinking, but when copying we do
    need the source _right away_).
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    f9f90ed View commit details
    Browse the repository at this point in the history
  29. POSIX-ify the SHELL variable

    When calling a non-MSys2 binary, all of the environment is converted from
    POSIX to Win32, including the SHELL environment variable. In Git for
    Windows, for example, `SHELL=/usr/bin/bash` is converted to
    `SHELL=C:\Program Files\Git\usr\bin\bash.exe` when calling the `git.exe`
    binary. This is appropriate because non-MSys2 binaries would not handle
    POSIX paths correctly.
    
    Under certain circumstances, however, `git.exe` calls an *MSys2* binary in
    turn, such as `git config --edit` calling `vim.exe` unless Git is
    configured to use another editor specifically.
    
    Now, when this "improved vi" calls shell commands, it uses that $SHELL
    variable *without quoting*, resulting in a nasty error:
    
    	C:\Program: No such file or directory
    
    Many other programs behave in the same manner, assuming that $SHELL does
    not contain spaces and hence needs no quoting, unfortunately including
    some of Git's own scripts.
    
    Therefore let's make sure that $SHELL gets "posified" again when entering
    MSys2 programs.
    
    Earlier attempts by Git for Windows contributors claimed that adding
    `SHELL` to the `conv_envvars` array does not have the intended effect.
    These reports just missed that the `conv_start_chars` array (which makes
    the code more performant) needs to be adjusted, too.
    
    Note that we set the `immediate` flag to `true` so that the environment
    variable is set immediately by the MSys2 runtime, i.e. not only spawned
    processes will see the POSIX-ified `SHELL` variable, but the MSys2 runtime
    *itself*, too.
    
    This fixes git-for-windows/git#542,
    git-for-windows/git#498, and
    git-for-windows/git#468.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    1f67eb4 View commit details
    Browse the repository at this point in the history
  30. Handle ORIGINAL_PATH just like PATH

    MSYS2 recently introduced that hack where the ORIGINAL_PATH variable is
    set to the original PATH value in /etc/profile, unless previously set.
    In Git for Windows' default mode, that ORIGINAL_PATH value is the used
    to define the PATH variable explicitly.
    
    So far so good.
    
    The problem: when calling from inside an MSYS2 process (such as Bash) a
    MINGW executable (such as git.exe) that then calls another MSYS2
    executable (such as bash.exe), that latter call will try to re-convert
    ORIGINAL_PATH after the previous call converted ORIGINAL_PATH from POSIX
    to Windows paths. And this conversion may very well fail, e.g. when the
    path list contains mixed semicolons and colons.
    
    So let's just *force* the MSYS2 runtime to handle ORIGINAL_PATH in the
    same way as the PATH variable (which conversion works, as we know).
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    732c244 View commit details
    Browse the repository at this point in the history
  31. uname: allow setting the system name to CYGWIN

    We are currently trying to move our cygwin build environment closer
    to cygwin and some autotools/bash based build systems call "uname -s"
    to figure out the OS and in many cases only handle the cygwin case, so
    we have to patch them.
    
    With this instead of patching we can set MSYSTEM=CYGWIN and change
    uname output that way.
    
    The next step would be to always output CYGWIN in an msys env by default,
    but for now this allows us to get rid of all the patches without
    affecting users.
    lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    8a0b656 View commit details
    Browse the repository at this point in the history
  32. Pass environment variables with empty values

    There is a difference between an empty value and an unset environment
    variable. We should not confuse both; If the user wants to unset an
    environment variable, they can certainly do so (unsetenv(3), or in the
    shell: 'unset ABC').
    
    This fixes Git's t3301-notes.sh, which overrides environment variables
    with empty values.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    18541ea View commit details
    Browse the repository at this point in the history
  33. Optionally disallow empty environment values again

    We just disabled the code that skips environment variables whose values
    are empty.
    
    However, this code was introduced a long time ago into Cygwin in
    d6b1ac7 (* environ.cc (build_env): Don't put an empty environment
    variable into the environment.  Optimize use of "len". * errno.cc
    (ERROR_MORE_DATA): Translate to EMSGSIZE rather than EAGAIN.,
    2006-09-07), seemingly without any complaints.
    
    Meaning: There might very well be use cases out there where it makes
    sense to skip empty-valued environment variables.
    
    Therefore, it seems like a good idea to have a "knob" to turn it back
    on. With this commit, we introduce such a knob: by setting
    `noemptyenvvalues` the `MSYS` variable (or appending it if that variable
    is already set), users can tell the MSYS2 runtime to behave just like in
    the olden times.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    a02572d View commit details
    Browse the repository at this point in the history
  34. build_env(): respect the MSYS environment variable

    With this commit, you can call
    
    	MSYS=noemptyenvvalues my-command
    
    and it does what is expected: to pass no empty-valued environment
    variables to `my-command`.
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    df25681 View commit details
    Browse the repository at this point in the history
  35. When converting to a Unix path, avoid double trailing slashes

    When calling `cygpath -u C:/msys64/` in an MSYS2 setup that was
    installed into `C:/msys64/`, the result should be `/`, not `//`.
    
    Let's ensure that we do not append another trailing slash if the
    converted path already ends in a slash.
    
    This fixes #112
    
    Signed-off-by: Johannes Schindelin <[email protected]>
    dscho authored and lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    116dc5c View commit details
    Browse the repository at this point in the history
  36. msys2_path_conv: pass PC_NOFULL to path_conv

    In theory this doesn't make a difference because posix_to_win32_path()
    is only called with rooted/absolute paths, but as pointed out in
    #103 PC_NOFULL will preserve
    the trailing slash of unix paths (for some reason).
    
    See "cygpath -m /bin/" (preserved) vs "cygpath -am /bin/" (dropped)
    
    One use case where we need to trailing slashes to be preserved is the GCC build
    system:
    https://github.com/gcc-mirror/gcc/blob/6d82e0fea5f988e829912a/gcc/Makefile.in#L2314
    
    The Makefile appends a slash to the prefixes and the C code doing relocation will
    treat the path as a directory if there is a trailing slash. See
    msys2/MINGW-packages#14173 for details.
    
    With this change all our MSYS2 path_conv tests pass again.
    lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    aa8a5fb View commit details
    Browse the repository at this point in the history
  37. Revert "Cygwin: Enable dynamicbase on the Cygwin DLL by default"

    This reverts commit 943433b.
    
    This seems to fix fork errors under Docker, see
    https://cygwin.com/pipermail/cygwin/2022-December/252711.html
    lazka committed Aug 18, 2023
    Configuration menu
    Copy the full SHA
    1c014fc View commit details
    Browse the repository at this point in the history