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

Update to 3.5.4 #225

Merged
merged 44 commits into from
Aug 27, 2024
Merged

Update to 3.5.4 #225

merged 44 commits into from
Aug 27, 2024

Commits on Aug 25, 2024

  1. Add MSYS2 triplet

    Alexpux authored and lazka committed Aug 25, 2024
    Configuration menu
    Copy the full SHA
    51380ec 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 25, 2024
    Configuration menu
    Copy the full SHA
    a116f41 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 25, 2024
    Configuration menu
    Copy the full SHA
    f858c02 View commit details
    Browse the repository at this point in the history
  4. 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 25, 2024
    Configuration menu
    Copy the full SHA
    b084abe View commit details
    Browse the repository at this point in the history

Commits on Aug 27, 2024

  1. Configuration menu
    Copy the full SHA
    f160385 View commit details
    Browse the repository at this point in the history
  2. - 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    6393488 View commit details
    Browse the repository at this point in the history
  3. 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 <johannes.schindelin@gmx.de>
    Alexpux and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    06ea20e View commit details
    Browse the repository at this point in the history
  4. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    222fd37 View commit details
    Browse the repository at this point in the history
  5. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    41e8ada View commit details
    Browse the repository at this point in the history
  6. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    766e55c View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    4f01c3f View commit details
    Browse the repository at this point in the history
  8. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    d43f1ee View commit details
    Browse the repository at this point in the history
  9. 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 <johannes.schindelin@gmx.de>
    Alexpux authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    0053f7b View commit details
    Browse the repository at this point in the history
  10. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    1e8a891 View commit details
    Browse the repository at this point in the history
  11. 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 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    673065d View commit details
    Browse the repository at this point in the history
  12. path-conversion: Introduce ability to switch off conversion.

    When calling windows native apps from MSYS2, the runtime tries to
    convert commandline arguments by a specific set of rules. This idea was
    inherited from the MSys/MinGW project (which is now seemingly stale, yet
    must be credited with championing this useful feature, see MinGW wiki
    https://web.archive.org/web/20201112005258/http://www.mingw.org/wiki/Posix_path_conversion).
    
    If the user does not want that behavior on a big scale, e.g. inside a
    Bash script, with the changes introduced in this commit, the user can
    now set the the environment variable `MSYS_NO_PATHCONV` when calling
    native windows commands.
    
    This is a feature that has been introduced in Git for Windows via
    git-for-windows/msys2-runtime#11 and it predates
    support for the `MSYS2_ENV_CONV_EXCL` and `MSYS2_ARG_CONV_EXCL`
    environment variables in the MSYS2 runtime; Many users find the
    simplicity of `MSYS_NO_PATHCONV` appealing.
    
    So let's teach MSYS2 proper this simple trick that still allows using
    the sophisticated `MSYS2_*_CONV_EXCL` facilities but also offers a
    convenient catch-all "just don't convert anything" knob.
    
    Signed-off-by: 마누엘 <nalla@hamal.uberspace.de>
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    마누엘 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    e1db148 View commit details
    Browse the repository at this point in the history
  13. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    f6e516d View commit details
    Browse the repository at this point in the history
  14. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    1059fbb View commit details
    Browse the repository at this point in the history
  15. Add debugging for build_argv

    mingwandroid authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    f8da08f View commit details
    Browse the repository at this point in the history
  16. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    03d6fe1 View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    90d66ee View commit details
    Browse the repository at this point in the history
  18. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    7b84fed View commit details
    Browse the repository at this point in the history
  19. 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 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    6f87e23 View commit details
    Browse the repository at this point in the history
  20. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    df7a56e View commit details
    Browse the repository at this point in the history
  21. 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 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    cf56ccd View commit details
    Browse the repository at this point in the history
  22. CI: fix the build with gcc 13

    lazka authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    083c245 View commit details
    Browse the repository at this point in the history
  23. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    91f46df View commit details
    Browse the repository at this point in the history
  24. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    4dd6aad View commit details
    Browse the repository at this point in the history
  25. 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 <naveen@syrusdark.website>
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho and naveen521kk committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    6ef58ed View commit details
    Browse the repository at this point in the history
  26. 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 <naveen@syrusdark.website>
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho and naveen521kk committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    38a8880 View commit details
    Browse the repository at this point in the history
  27. 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 <naveen@syrusdark.website>
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho and naveen521kk committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    b9d1fad View commit details
    Browse the repository at this point in the history
  28. 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 dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    715f6ce View commit details
    Browse the repository at this point in the history
  29. docs: skip building texinfo and PDF files

    The MSYS2 packages lack the infrastructure to build those.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    abeeb31 View commit details
    Browse the repository at this point in the history
  30. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    fbe8ae3 View commit details
    Browse the repository at this point in the history
  31. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    38abc7c View commit details
    Browse the repository at this point in the history
  32. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    9c758e8 View commit details
    Browse the repository at this point in the history
  33. 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 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    312f766 View commit details
    Browse the repository at this point in the history
  34. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    e19af20 View commit details
    Browse the repository at this point in the history
  35. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    4deb751 View commit details
    Browse the repository at this point in the history
  36. 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 <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    a1f282d 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 authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    d1b382b View commit details
    Browse the repository at this point in the history
  38. CI: set -Wno-error=maybe-uninitialized

    After the update of msys2-w32api from v11.0.1 to current master (and soon to be v12)
    we get: winsup/cygwin/exceptions.cc:1736:33: error: '<anonymous>' may be used uninitialized [-Werror=maybe-uninitialized]
    
    Ignore it like the rest.
    
    Fixes #214
    lazka authored and dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    997f6f3 View commit details
    Browse the repository at this point in the history
  39. Avoid sharing cygheaps across Cygwin versions

    It frequently leads to problems when trying, say, to call from MSYS2's
    Bash into Cygwin's or Git for Windows', merely because sharing that data
    is pretty finicky.
    
    For example, using the MSYS2' Bash using the MSYS2 runtime version that
    is current at time of writing, trying to call Cygwin's programs fails
    in manners like this:
    
        $ /c/cygwin64/bin/uname -r
          0 [main] uname (9540) child_copy: cygheap read copy failed, 0x800000000..0x800010BE0, done 0, windows pid 9540, Win32 error 6
        680 [main] uname 880 C:\cygwin64\bin\uname.exe: *** fatal error - couldn't create signal pipe, Win32 error 5
    
    with the rather misleading exit code 127 (a code which is reserved to
    indicate that a command was not found).
    
    Let's just treat the MSYS2 runtime and the Cygwin runtime as completely
    incompatible with one another, by virtue of using a different
    magic constant than merely `CHILD_INFO_MAGIC`.
    
    By using the msys2-runtime commit to modify that magic constant, we can
    even spawn programs using a different MSYS2 runtime (such as Git for
    Windows') because the commit serves as the tell-tale whether two MSYS2
    runtime versions are compatible with each other. To support building in
    the MSYS2-packages repository (where we do not check out the
    `msys2-runtime` but instead check out Cygwin and apply patches on top),
    let's accept a hard-coded commit hash as `./configure` option.
    
    One consequence is that spawned MSYS processes using a different MSYS2
    runtime will not be visible as such to the parent process, i.e. they
    cannot share any resources such as pseudo terminals. But that's okay,
    they are simply treated as if they were regular Win32 programs.
    
    Note: We have to use a very rare form of encoding the brackets in the
    `expr` calls: quadrigraphs (for a thorough explanation, see
    https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.70/html_node/Quadrigraphs.html#Quadrigraphs).
    This is necessary because it is apparently impossible to encode brackets
    in `configure.ac` files otherwise.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    e347515 View commit details
    Browse the repository at this point in the history
  40. uname: report msys2-runtime commit hash, too

    Having just Cygwin's version in the output of `uname` is not helpful, as
    both MSYS2 as well as Git for Windows release intermediate versions of
    the MSYS2 runtime much more often than Cygwin runtime versions are
    released.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    dscho committed Aug 27, 2024
    Configuration menu
    Copy the full SHA
    dd9d970 View commit details
    Browse the repository at this point in the history