• J
    config.mak.uname: support MSys2 · df5218b4
    Johannes Schindelin 提交于
    For a long time, Git for Windows lagged behind Git's 2.x releases because
    the Git for Windows developers wanted to let that big jump coincide with
    a well-needed jump away from MSys to MSys2.
    
    To understand why this is such a big issue, it needs to be noted that
    many parts of Git are not written in portable C, but instead Git relies
    on a POSIX shell and Perl to be available.
    
    To support the scripts, Git for Windows has to ship a minimal POSIX
    emulation layer with Bash and Perl thrown in, and when the Git for
    Windows effort started in August 2007, this developer settled on using
    MSys, a stripped down version of Cygwin. Consequently, the original name
    of the project was "msysGit" (which, sadly, caused a *lot* of confusion
    because few Windows users know about MSys, and even less care).
    
    To compile the C code of Git for Windows, MSys was used, too: it sports
    two versions of the GNU C Compiler: one that links implicitly to the
    POSIX emulation layer, and another one that targets the plain Win32 API
    (with a few convenience functions thrown in).  Git for Windows'
    executables are built using the latter, and therefore they are really
    just Win32 programs. To discern executables requiring the POSIX
    emulation layer from the ones that do not, the latter are called MinGW
    (Minimal GNU for Windows) when the former are called MSys executables.
    
    This reliance on MSys incurred challenges, too, though: some of our
    changes to the MSys runtime -- necessary to support Git for Windows
    better -- were not accepted upstream, so we had to maintain our own
    fork. Also, the MSys runtime was not developed further to support e.g.
    UTF-8 or 64-bit, and apart from lacking a package management system
    until much later (when mingw-get was introduced), many packages provided
    by the MSys/MinGW project lag behind the respective source code
    versions, in particular Bash and OpenSSL. For a while, the Git for
    Windows project tried to remedy the situation by trying to build newer
    versions of those packages, but the situation quickly became untenable,
    especially with problems like the Heartbleed bug requiring swift action
    that has nothing to do with developing Git for Windows further.
    
    Happily, in the meantime the MSys2 project (https://msys2.github.io/)
    emerged, and was chosen to be the base of the Git for Windows 2.x. Just
    like MSys, MSys2 is a stripped down version of Cygwin, but it is
    actively kept up-to-date with Cygwin's source code.  Thereby, it already
    supports Unicode internally, and it also offers the 64-bit support that
    we yearned for since the beginning of the Git for Windows project.
    
    MSys2 also ported the Pacman package management system from Arch Linux
    and uses it heavily. This brings the same convenience to which Linux
    users are used to from `yum` or `apt-get`, and to which MacOSX users are
    used to from Homebrew or MacPorts, or BSD users from the Ports system,
    to MSys2: a simple `pacman -Syu` will update all installed packages to
    the newest versions currently available.
    
    MSys2 is also *very* active, typically providing package updates
    multiple times per week.
    
    It still required a two-month effort to bring everything to a state
    where Git's test suite passes, many more months until the first official
    Git for Windows 2.x was released, and a couple of patches still await
    their submission to the respective upstream projects. Yet without MSys2,
    the modernization of Git for Windows would simply not have happened.
    
    This commit lays the ground work to supporting MSys2-based Git builds.
    Assisted-by: NWaldek Maleska <weakcamel@users.github.com>
    Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    df5218b4
config.mak.uname 16.3 KB