Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
3
compat/vcbuild/.gitignore
vendored
Normal file
3
compat/vcbuild/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
/vcpkg/
|
||||
/MSVC-DEFS-GEN
|
||||
/VCPKG-DEFS
|
||||
112
compat/vcbuild/README
Normal file
112
compat/vcbuild/README
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
The Steps to Build Git with VS2015 or VS2017 from the command line.
|
||||
|
||||
1. Install the "vcpkg" open source package manager and build essential
|
||||
third-party libraries. The steps for this have been captured in a
|
||||
set of convenience scripts. These can be run from a stock Command
|
||||
Prompt or from an SDK bash window:
|
||||
|
||||
$ cd <repo_root>
|
||||
$ ./compat/vcbuild/vcpkg_install.bat
|
||||
|
||||
The vcpkg tools and all of the third-party sources will be installed
|
||||
in this folder:
|
||||
<repo_root>/compat/vcbuild/vcpkg/
|
||||
|
||||
A file will be created with a set of Makefile macros pointing to a
|
||||
unified "include", "lib", and "bin" directory (release and debug) for
|
||||
all of the required packages. This file will be included by the main
|
||||
Makefile:
|
||||
<repo_root>/compat/vcbuild/MSVC-DEFS-GEN
|
||||
|
||||
2. OPTIONALLY copy the third-party *.dll and *.pdb files into the repo
|
||||
root to make it easier to run and debug git.exe without having to
|
||||
manipulate your PATH. This is especially true for debug sessions in
|
||||
Visual Studio.
|
||||
|
||||
Use ONE of the following forms which should match how you want to
|
||||
compile git.exe.
|
||||
|
||||
$ ./compat/vcbuild/vcpkg_copy_packages.bat debug
|
||||
$ ./compat/vcbuild/vcpkg_copy_packages.bat release
|
||||
|
||||
3. Build git using MSVC from an SDK bash window using one of the
|
||||
following commands:
|
||||
|
||||
$ make MSVC=1
|
||||
$ make MSVC=1 DEBUG=1
|
||||
|
||||
================================================================
|
||||
|
||||
Alternatively, run `make vcxproj` and then load the generated `git.sln` in
|
||||
Visual Studio. The initial build will install the vcpkg system and build the
|
||||
dependencies automatically. This will take a while.
|
||||
|
||||
Instead of generating the `git.sln` file yourself (which requires a full Git
|
||||
for Windows SDK), you may want to consider fetching the `vs/master` branch of
|
||||
https://github.com/git-for-windows/git instead (which is updated automatically
|
||||
via CI running `make vcxproj`). The `vs/master` branch does not require a Git
|
||||
for Windows to build, but you can run the test scripts in a regular Git Bash.
|
||||
|
||||
Note that `make vcxproj` will automatically add and commit the generated `.sln`
|
||||
and `.vcxproj` files to the repo. This is necessary to allow building a
|
||||
fully-testable Git in Visual Studio, where a regular Git Bash can be used to
|
||||
run the test scripts (as opposed to a full Git for Windows SDK): a number of
|
||||
build targets, such as Git commands implemented as Unix shell scripts (where
|
||||
`@@SHELL_PATH@@` and other placeholders are interpolated) require a full-blown
|
||||
Git for Windows SDK (which is about 10x the size of a regular Git for Windows
|
||||
installation).
|
||||
|
||||
If your plan is to open a Pull Request with Git for Windows, it is a good idea
|
||||
to drop this commit before submitting.
|
||||
|
||||
================================================================
|
||||
The Steps of Build Git with VS2008
|
||||
|
||||
1. You need the build environment, which contains the Git dependencies
|
||||
to be able to compile, link and run Git with MSVC.
|
||||
|
||||
You can either use the binary repository:
|
||||
|
||||
WWW: http://repo.or.cz/w/msvcgit.git
|
||||
Git: git clone git://repo.or.cz/msvcgit.git
|
||||
Zip: http://repo.or.cz/w/msvcgit.git?a=snapshot;h=master;sf=zip
|
||||
|
||||
and call the setup_32bit_env.cmd batch script before compiling Git,
|
||||
(see repo/package README for details), or the source repository:
|
||||
|
||||
WWW: http://repo.or.cz/w/gitbuild.git
|
||||
Git: git clone git://repo.or.cz/gitbuild.git
|
||||
Zip: (None, as it's a project with submodules)
|
||||
|
||||
and build the support libs as instructed in that repo/package.
|
||||
|
||||
2. Ensure you have the msysgit environment in your path, so you have
|
||||
GNU Make, bash and perl available.
|
||||
|
||||
WWW: http://repo.or.cz/w/msysgit.git
|
||||
Git: git clone git://repo.or.cz/msysgit.git
|
||||
Zip: http://repo.or.cz/w/msysgit.git?a=snapshot;h=master;sf=zip
|
||||
|
||||
This environment is also needed when you use the resulting
|
||||
executables, since Git might need to run scripts which are part of
|
||||
the git operations.
|
||||
|
||||
3. Inside Git's directory run the command:
|
||||
make command-list.h
|
||||
to generate the command-list.h file needed to compile git.
|
||||
|
||||
4. Then either build Git with the GNU Make Makefile in the Git projects
|
||||
root
|
||||
make MSVC=1
|
||||
or generate Visual Studio solution/projects (.sln/.vcproj) with the
|
||||
command
|
||||
perl contrib/buildsystems/generate -g Vcproj
|
||||
and open and build the solution with the IDE
|
||||
devenv git.sln /useenv
|
||||
or build with the IDE build engine directly from the command line
|
||||
devenv git.sln /useenv /build "Release|Win32"
|
||||
The /useenv option is required, so Visual Studio picks up the
|
||||
environment variables for the support libraries required to build
|
||||
Git, which you set up in step 1.
|
||||
|
||||
Done!
|
||||
168
compat/vcbuild/find_vs_env.bat
Normal file
168
compat/vcbuild/find_vs_env.bat
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
@ECHO OFF
|
||||
REM ================================================================
|
||||
REM You can use either GCC (the default) or MSVC to build git
|
||||
REM using the GIT-SDK command line tools.
|
||||
REM $ make
|
||||
REM $ make MSVC=1
|
||||
REM
|
||||
REM GIT-SDK BASH windows inherit environment variables with all of
|
||||
REM the bin/lib/include paths for GCC. It DOES NOT inherit values
|
||||
REM for the corresponding MSVC tools.
|
||||
REM
|
||||
REM During normal (non-git) Windows development, you launch one
|
||||
REM of the provided "developer command prompts" to set environment
|
||||
REM variables for the MSVC tools.
|
||||
REM
|
||||
REM Therefore, to allow MSVC command line builds of git from BASH
|
||||
REM and MAKE, we must blend these two different worlds. This script
|
||||
REM attempts to do that.
|
||||
REM ================================================================
|
||||
REM This BAT file starts in a plain (non-developer) command prompt,
|
||||
REM searches for the "best" commmand prompt setup script, installs
|
||||
REM it into the current CMD process, and exports the various MSVC
|
||||
REM environment variables for use by MAKE.
|
||||
REM
|
||||
REM The output of this script should be written to a make "include
|
||||
REM file" and referenced by the top-level Makefile.
|
||||
REM
|
||||
REM See "config.mak.uname" (look for compat/vcbuild/MSVC-DEFS-GEN).
|
||||
REM ================================================================
|
||||
REM The provided command prompts are custom to each VS release and
|
||||
REM filled with lots of internal knowledge (such as Registry settings);
|
||||
REM even their names vary by release, so it is not appropriate for us
|
||||
REM to look inside them. Rather, just run them in a subordinate
|
||||
REM process and extract the settings we need.
|
||||
REM ================================================================
|
||||
REM
|
||||
REM Current (VS2017 and beyond)
|
||||
REM -------------------
|
||||
REM Visual Studio 2017 introduced a new installation layout and
|
||||
REM support for side-by-side installation of multiple versions of
|
||||
REM VS2017. Furthermore, these can all coexist with installations
|
||||
REM of previous versions of VS (which have a completely different
|
||||
REM layout on disk).
|
||||
REM
|
||||
REM VS2017 Update 2 introduced a "vswhere.exe" command:
|
||||
REM https://github.com/Microsoft/vswhere
|
||||
REM https://blogs.msdn.microsoft.com/heaths/2017/02/25/vswhere-available/
|
||||
REM https://blogs.msdn.microsoft.com/vcblog/2017/03/06/finding-the-visual-c-compiler-tools-in-visual-studio-2017/
|
||||
REM
|
||||
REM VS2015
|
||||
REM ------
|
||||
REM Visual Studio 2015 uses the traditional VcVarsAll.
|
||||
REM
|
||||
REM Earlier Versions
|
||||
REM ----------------
|
||||
REM Currently unsupported.
|
||||
REM
|
||||
REM ================================================================
|
||||
REM Note: Throughout this script we use "dir <path> && <cmd>" rather
|
||||
REM than "if exist <path>" because of script problems with pathnames
|
||||
REM containing spaces.
|
||||
REM ================================================================
|
||||
|
||||
REM Sanitize PATH to prevent git-sdk paths from confusing "wmic.exe"
|
||||
REM (called internally in some of the system BAT files).
|
||||
SET PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
|
||||
|
||||
REM ================================================================
|
||||
|
||||
:current
|
||||
SET vs_where=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
|
||||
dir "%vs_where%" >nul 2>nul && GOTO have_vs_where
|
||||
GOTO not_2017
|
||||
|
||||
:have_vs_where
|
||||
REM Try to use VsWhere to get the location of VsDevCmd.
|
||||
|
||||
REM Keep VsDevCmd from cd'ing away.
|
||||
SET VSCMD_START_DIR=.
|
||||
|
||||
REM Get the root of the VS product installation.
|
||||
FOR /F "usebackq tokens=*" %%i IN (`"%vs_where%" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath`) DO @SET vs_ip=%%i
|
||||
|
||||
SET vs_devcmd=%vs_ip%\Common7\Tools\VsDevCmd.bat
|
||||
dir "%vs_devcmd%" >nul 2>nul && GOTO have_vs_devcmd
|
||||
GOTO not_2017
|
||||
|
||||
:have_vs_devcmd
|
||||
REM Use VsDevCmd to setup the environment of this process.
|
||||
REM Setup CL for building 64-bit apps using 64-bit tools.
|
||||
@call "%vs_devcmd%" -no_logo -arch=x64 -host_arch=x64
|
||||
|
||||
SET tgt=%VSCMD_ARG_TGT_ARCH%
|
||||
|
||||
SET mn=%VCToolsInstallDir%
|
||||
SET msvc_includes=-I"%mn%INCLUDE"
|
||||
SET msvc_libs=-L"%mn%lib\%tgt%"
|
||||
SET msvc_bin_dir=%mn%bin\Host%VSCMD_ARG_HOST_ARCH%\%tgt%
|
||||
|
||||
SET sdk_dir=%WindowsSdkDir%
|
||||
SET sdk_ver=%WindowsSDKVersion%
|
||||
SET si=%sdk_dir%Include\%sdk_ver%
|
||||
SET sdk_includes=-I"%si%ucrt" -I"%si%um" -I"%si%shared"
|
||||
SET sl=%sdk_dir%lib\%sdk_ver%
|
||||
SET sdk_libs=-L"%sl%ucrt\%tgt%" -L"%sl%um\%tgt%"
|
||||
|
||||
SET vs_ver=%VisualStudioVersion%
|
||||
|
||||
GOTO print_vars
|
||||
|
||||
REM ================================================================
|
||||
|
||||
:not_2017
|
||||
REM See if VS2015 is installed.
|
||||
|
||||
SET vs_2015_bat=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
|
||||
dir "%vs_2015_bat%" >nul 2>nul && GOTO have_vs_2015
|
||||
GOTO not_2015
|
||||
|
||||
:have_vs_2015
|
||||
REM Use VcVarsAll like the "x64 Native" command prompt.
|
||||
REM Setup CL for building 64-bit apps using 64-bit tools.
|
||||
@call "%vs_2015_bat%" amd64
|
||||
|
||||
REM Note that in VS2015 they use "x64" in some contexts and "amd64" in others.
|
||||
SET mn=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\
|
||||
SET msvc_includes=-I"%mn%INCLUDE"
|
||||
SET msvc_libs=-L"%mn%lib\amd64"
|
||||
SET msvc_bin_dir=%mn%bin\amd64
|
||||
|
||||
SET sdk_dir=%WindowsSdkDir%
|
||||
SET sdk_ver=%WindowsSDKVersion%
|
||||
SET si=%sdk_dir%Include\%sdk_ver%
|
||||
SET sdk_includes=-I"%si%ucrt" -I"%si%um" -I"%si%shared" -I"%si%winrt"
|
||||
SET sl=%sdk_dir%lib\%sdk_ver%
|
||||
SET sdk_libs=-L"%sl%ucrt\x64" -L"%sl%um\x64"
|
||||
|
||||
SET vs_ver=%VisualStudioVersion%
|
||||
|
||||
GOTO print_vars
|
||||
|
||||
REM ================================================================
|
||||
|
||||
:not_2015
|
||||
echo "ERROR: unsupported VS version (older than VS2015)" >&2
|
||||
EXIT /B 1
|
||||
|
||||
REM ================================================================
|
||||
|
||||
:print_vars
|
||||
REM Dump the essential vars to stdout to allow the main
|
||||
REM Makefile to include it. See config.mak.uname.
|
||||
REM Include DOS-style and BASH-style path for bin dir.
|
||||
|
||||
echo msvc_bin_dir=%msvc_bin_dir%
|
||||
SET X1=%msvc_bin_dir:C:=/C%
|
||||
SET X2=%X1:\=/%
|
||||
echo msvc_bin_dir_msys=%X2%
|
||||
|
||||
echo msvc_includes=%msvc_includes%
|
||||
echo msvc_libs=%msvc_libs%
|
||||
|
||||
echo sdk_includes=%sdk_includes%
|
||||
echo sdk_libs=%sdk_libs%
|
||||
|
||||
echo vs_ver=%vs_ver%
|
||||
|
||||
EXIT /B 0
|
||||
1
compat/vcbuild/include/sys/param.h
Normal file
1
compat/vcbuild/include/sys/param.h
Normal file
|
|
@ -0,0 +1 @@
|
|||
/* Intentionally empty file to support building git with MSVC */
|
||||
1
compat/vcbuild/include/sys/time.h
Normal file
1
compat/vcbuild/include/sys/time.h
Normal file
|
|
@ -0,0 +1 @@
|
|||
/* Intentionally empty file to support building git with MSVC */
|
||||
34
compat/vcbuild/include/sys/utime.h
Normal file
34
compat/vcbuild/include/sys/utime.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef _UTIME_H_
|
||||
#define _UTIME_H_
|
||||
/*
|
||||
* UTIME.H
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is a part of the mingw-runtime package.
|
||||
*
|
||||
* The mingw-runtime package and its code is distributed in the hope that it
|
||||
* will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR
|
||||
* IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to
|
||||
* warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You are free to use this package and its code without limitation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Structure used by _utime function.
|
||||
*/
|
||||
struct _utimbuf
|
||||
{
|
||||
time_t actime; /* Access time */
|
||||
time_t modtime; /* Modification time */
|
||||
};
|
||||
|
||||
#ifndef _NO_OLDNAMES
|
||||
/* NOTE: Must be the same as _utimbuf above. */
|
||||
struct utimbuf
|
||||
{
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
#endif /* Not _NO_OLDNAMES */
|
||||
|
||||
#endif
|
||||
103
compat/vcbuild/include/unistd.h
Normal file
103
compat/vcbuild/include/unistd.h
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
#ifndef _UNISTD_
|
||||
#define _UNISTD_
|
||||
|
||||
/* Win32 define for porting git*/
|
||||
|
||||
#ifndef _MODE_T_
|
||||
#define _MODE_T_
|
||||
typedef unsigned short _mode_t;
|
||||
|
||||
#ifndef _NO_OLDNAMES
|
||||
typedef _mode_t mode_t;
|
||||
#endif
|
||||
#endif /* Not _MODE_T_ */
|
||||
|
||||
#ifndef _SSIZE_T_
|
||||
#define _SSIZE_T_
|
||||
typedef long _ssize_t;
|
||||
|
||||
#ifndef _OFF_T_
|
||||
#define _OFF_T_
|
||||
typedef long _off_t;
|
||||
|
||||
#ifndef _NO_OLDNAMES
|
||||
typedef _off_t off_t;
|
||||
#endif
|
||||
#endif /* Not _OFF_T_ */
|
||||
|
||||
|
||||
#ifndef _NO_OLDNAMES
|
||||
typedef _ssize_t ssize_t;
|
||||
#endif
|
||||
#endif /* Not _SSIZE_T_ */
|
||||
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned char uint8_t;
|
||||
typedef short int16_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef int int32_t;
|
||||
typedef unsigned uint32_t;
|
||||
typedef long long int64_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
|
||||
typedef long long intmax_t;
|
||||
typedef unsigned long long uintmax_t;
|
||||
|
||||
typedef int64_t off64_t;
|
||||
|
||||
#if !defined(_MSC_VER) || _MSC_VER < 1600
|
||||
#define INTMAX_MIN _I64_MIN
|
||||
#define INTMAX_MAX _I64_MAX
|
||||
#define UINTMAX_MAX _UI64_MAX
|
||||
|
||||
#define UINT32_MAX 0xffffffff /* 4294967295U */
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
/* Some defines for _access nAccessMode (MS doesn't define them, but
|
||||
* it doesn't seem to hurt to add them). */
|
||||
#define F_OK 0 /* Check for file existence */
|
||||
/* Well maybe it does hurt. On newer versions of MSVCRT, an access mode
|
||||
of 1 causes invalid parameter error. */
|
||||
#define X_OK 0 /* MS access() doesn't check for execute permission. */
|
||||
#define W_OK 2 /* Check for write permission */
|
||||
#define R_OK 4 /* Check for read permission */
|
||||
|
||||
#define _S_IFIFO 0x1000 /* FIFO */
|
||||
#define _S_IFCHR 0x2000 /* Character */
|
||||
#define _S_IFBLK 0x3000 /* Block: Is this ever set under w32? */
|
||||
#define _S_IFDIR 0x4000 /* Directory */
|
||||
#define _S_IFREG 0x8000 /* Regular */
|
||||
|
||||
#define _S_IFMT 0xF000 /* File type mask */
|
||||
|
||||
#define _S_IXUSR _S_IEXEC
|
||||
#define _S_IWUSR _S_IWRITE
|
||||
#define _S_IRUSR _S_IREAD
|
||||
#define _S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
|
||||
|
||||
#define S_IFIFO _S_IFIFO
|
||||
#define S_IFCHR _S_IFCHR
|
||||
#define S_IFBLK _S_IFBLK
|
||||
#define S_IFDIR _S_IFDIR
|
||||
#define S_IFREG _S_IFREG
|
||||
#define S_IFMT _S_IFMT
|
||||
#define S_IEXEC _S_IEXEC
|
||||
#define S_IWRITE _S_IWRITE
|
||||
#define S_IREAD _S_IREAD
|
||||
#define S_IRWXU _S_IRWXU
|
||||
#define S_IXUSR _S_IXUSR
|
||||
#define S_IWUSR _S_IWUSR
|
||||
#define S_IRUSR _S_IRUSR
|
||||
|
||||
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
|
||||
#endif
|
||||
1
compat/vcbuild/include/utime.h
Normal file
1
compat/vcbuild/include/utime.h
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include <sys/utime.h>
|
||||
85
compat/vcbuild/scripts/clink.pl
Executable file
85
compat/vcbuild/scripts/clink.pl
Executable file
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/perl -w
|
||||
######################################################################
|
||||
# Compiles or links files
|
||||
#
|
||||
# This is a wrapper to facilitate the compilation of Git with MSVC
|
||||
# using GNU Make as the build system. So, instead of manipulating the
|
||||
# Makefile into something nasty, just to support non-space arguments
|
||||
# etc, we use this wrapper to fix the command line options
|
||||
#
|
||||
# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>
|
||||
######################################################################
|
||||
use strict;
|
||||
my @args = ();
|
||||
my @cflags = ();
|
||||
my @lflags = ();
|
||||
my $is_linking = 0;
|
||||
my $is_debug = 0;
|
||||
while (@ARGV) {
|
||||
my $arg = shift @ARGV;
|
||||
if ("$arg" eq "-DDEBUG") {
|
||||
# Some vcpkg-based libraries have different names for release
|
||||
# and debug versions. This hack assumes that -DDEBUG comes
|
||||
# before any "-l*" flags.
|
||||
$is_debug = 1;
|
||||
}
|
||||
if ("$arg" =~ /^-[DIMGOZ]/) {
|
||||
push(@cflags, $arg);
|
||||
} elsif ("$arg" eq "-o") {
|
||||
my $file_out = shift @ARGV;
|
||||
if ("$file_out" =~ /exe$/) {
|
||||
$is_linking = 1;
|
||||
# Create foo.exe and foo.pdb
|
||||
push(@args, "-OUT:$file_out");
|
||||
} else {
|
||||
# Create foo.o and foo.o.pdb
|
||||
push(@args, "-Fo$file_out");
|
||||
push(@args, "-Fd$file_out.pdb");
|
||||
}
|
||||
} elsif ("$arg" eq "-lz") {
|
||||
if ($is_debug) {
|
||||
push(@args, "zlibd.lib");
|
||||
} else{
|
||||
push(@args, "zlib.lib");
|
||||
}
|
||||
} elsif ("$arg" eq "-liconv") {
|
||||
push(@args, "libiconv.lib");
|
||||
} elsif ("$arg" eq "-lcrypto") {
|
||||
push(@args, "libeay32.lib");
|
||||
} elsif ("$arg" eq "-lssl") {
|
||||
push(@args, "ssleay32.lib");
|
||||
} elsif ("$arg" eq "-lcurl") {
|
||||
my $lib = "";
|
||||
# Newer vcpkg definitions call this libcurl_imp.lib; Do we
|
||||
# need to use that instead?
|
||||
foreach my $flag (@lflags) {
|
||||
if ($flag =~ /^-LIBPATH:(.*)/) {
|
||||
foreach my $l ("libcurl_imp.lib", "libcurl.lib") {
|
||||
if (-f "$1/$l") {
|
||||
$lib = $l;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
push(@args, $lib);
|
||||
} elsif ("$arg" eq "-lexpat") {
|
||||
push(@args, "expat.lib");
|
||||
} elsif ("$arg" =~ /^-L/ && "$arg" ne "-LTCG") {
|
||||
$arg =~ s/^-L/-LIBPATH:/;
|
||||
push(@lflags, $arg);
|
||||
} elsif ("$arg" =~ /^-R/) {
|
||||
# eat
|
||||
} else {
|
||||
push(@args, $arg);
|
||||
}
|
||||
}
|
||||
if ($is_linking) {
|
||||
push(@args, @lflags);
|
||||
unshift(@args, "link.exe");
|
||||
} else {
|
||||
unshift(@args, "cl.exe");
|
||||
push(@args, @cflags);
|
||||
}
|
||||
printf(STDERR "**** @args\n\n\n") if (!defined($ENV{'QUIET_GEN'}));
|
||||
exit (system(@args) != 0);
|
||||
26
compat/vcbuild/scripts/lib.pl
Executable file
26
compat/vcbuild/scripts/lib.pl
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/perl -w
|
||||
######################################################################
|
||||
# Libifies files on Windows
|
||||
#
|
||||
# This is a wrapper to facilitate the compilation of Git with MSVC
|
||||
# using GNU Make as the build system. So, instead of manipulating the
|
||||
# Makefile into something nasty, just to support non-space arguments
|
||||
# etc, we use this wrapper to fix the command line options
|
||||
#
|
||||
# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>
|
||||
######################################################################
|
||||
use strict;
|
||||
my @args = ();
|
||||
while (@ARGV) {
|
||||
my $arg = shift @ARGV;
|
||||
if ("$arg" eq "rcs") {
|
||||
# Consume the rcs option
|
||||
} elsif ("$arg" =~ /\.a$/) {
|
||||
push(@args, "-OUT:$arg");
|
||||
} else {
|
||||
push(@args, $arg);
|
||||
}
|
||||
}
|
||||
unshift(@args, "lib.exe");
|
||||
# printf("**** @args\n");
|
||||
exit (system(@args) != 0);
|
||||
39
compat/vcbuild/vcpkg_copy_dlls.bat
Normal file
39
compat/vcbuild/vcpkg_copy_dlls.bat
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
@ECHO OFF
|
||||
REM ================================================================
|
||||
REM This script is an optional step. It copies the *.dll and *.pdb
|
||||
REM files (created by vcpkg_install.bat) into the top-level directory
|
||||
REM of the repo so that you can type "./git.exe" and find them without
|
||||
REM having to fixup your PATH.
|
||||
REM
|
||||
REM NOTE: Because the names of some DLL files change between DEBUG and
|
||||
REM NOTE: RELEASE builds when built using "vcpkg.exe", you will need
|
||||
REM NOTE: to copy up the corresponding version.
|
||||
REM ================================================================
|
||||
|
||||
SETLOCAL EnableDelayedExpansion
|
||||
|
||||
@FOR /F "delims=" %%D IN ("%~dp0") DO @SET cwd=%%~fD
|
||||
cd %cwd%
|
||||
|
||||
SET arch=x64-windows
|
||||
SET inst=%cwd%vcpkg\installed\%arch%
|
||||
|
||||
IF [%1]==[release] (
|
||||
echo Copying RELEASE mode DLLs to repo root...
|
||||
) ELSE IF [%1]==[debug] (
|
||||
SET inst=%inst%\debug
|
||||
echo Copying DEBUG mode DLLs to repo root...
|
||||
) ELSE (
|
||||
echo ERROR: Invalid argument.
|
||||
echo Usage: %~0 release
|
||||
echo Usage: %~0 debug
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
xcopy /e/s/v/y %inst%\bin\*.dll ..\..\
|
||||
xcopy /e/s/v/y %inst%\bin\*.pdb ..\..\
|
||||
|
||||
xcopy /e/s/v/y %inst%\bin\*.dll ..\..\t\helper\
|
||||
xcopy /e/s/v/y %inst%\bin\*.pdb ..\..\t\helper\
|
||||
|
||||
EXIT /B 0
|
||||
80
compat/vcbuild/vcpkg_install.bat
Normal file
80
compat/vcbuild/vcpkg_install.bat
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
@ECHO OFF
|
||||
REM ================================================================
|
||||
REM This script installs the "vcpkg" source package manager and uses
|
||||
REM it to build the third-party libraries that git requires when it
|
||||
REM is built using MSVC.
|
||||
REM
|
||||
REM [1] Install VCPKG.
|
||||
REM [a] Create <root>/compat/vcbuild/vcpkg/
|
||||
REM [b] Download "vcpkg".
|
||||
REM [c] Compile using the currently installed version of VS.
|
||||
REM [d] Create <root>/compat/vcbuild/vcpkg/vcpkg.exe
|
||||
REM
|
||||
REM [2] Install third-party libraries.
|
||||
REM [a] Download each (which may also install CMAKE).
|
||||
REM [b] Compile in RELEASE mode and install in:
|
||||
REM vcpkg/installed/<arch>/{bin,lib}
|
||||
REM [c] Compile in DEBUG mode and install in:
|
||||
REM vcpkg/installed/<arch>/debug/{bin,lib}
|
||||
REM [d] Install headers in:
|
||||
REM vcpkg/installed/<arch>/include
|
||||
REM
|
||||
REM [3] Create a set of MAKE definitions for the top-level
|
||||
REM Makefile to allow "make MSVC=1" to find the above
|
||||
REM third-party libraries.
|
||||
REM [a] Write vcpkg/VCPGK-DEFS
|
||||
REM
|
||||
REM https://blogs.msdn.microsoft.com/vcblog/2016/09/19/vcpkg-a-tool-to-acquire-and-build-c-open-source-libraries-on-windows/
|
||||
REM https://github.com/Microsoft/vcpkg
|
||||
REM https://vcpkg.readthedocs.io/en/latest/
|
||||
REM ================================================================
|
||||
|
||||
SETLOCAL EnableDelayedExpansion
|
||||
|
||||
@FOR /F "delims=" %%D IN ("%~dp0") DO @SET cwd=%%~fD
|
||||
cd %cwd%
|
||||
|
||||
dir vcpkg\vcpkg.exe >nul 2>nul && GOTO :install_libraries
|
||||
|
||||
echo Fetching vcpkg in %cwd%vcpkg
|
||||
git.exe clone https://github.com/Microsoft/vcpkg vcpkg
|
||||
IF ERRORLEVEL 1 ( EXIT /B 1 )
|
||||
|
||||
cd vcpkg
|
||||
echo Building vcpkg
|
||||
powershell -exec bypass scripts\bootstrap.ps1
|
||||
IF ERRORLEVEL 1 ( EXIT /B 1 )
|
||||
|
||||
echo Successfully installed %cwd%vcpkg\vcpkg.exe
|
||||
|
||||
:install_libraries
|
||||
SET arch=x64-windows
|
||||
|
||||
echo Installing third-party libraries...
|
||||
FOR %%i IN (zlib expat libiconv openssl libssh2 curl) DO (
|
||||
cd %cwd%vcpkg
|
||||
IF NOT EXIST "packages\%%i_%arch%" CALL :sub__install_one %%i
|
||||
IF ERRORLEVEL 1 ( EXIT /B 1 )
|
||||
)
|
||||
|
||||
:install_defines
|
||||
cd %cwd%
|
||||
SET inst=%cwd%vcpkg\installed\%arch%
|
||||
|
||||
echo vcpkg_inc=-I"%inst%\include">VCPKG-DEFS
|
||||
echo vcpkg_rel_lib=-L"%inst%\lib">>VCPKG-DEFS
|
||||
echo vcpkg_rel_bin="%inst%\bin">>VCPKG-DEFS
|
||||
echo vcpkg_dbg_lib=-L"%inst%\debug\lib">>VCPKG-DEFS
|
||||
echo vcpkg_dbg_bin="%inst%\debug\bin">>VCPKG-DEFS
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:sub__install_one
|
||||
echo Installing package %1...
|
||||
|
||||
.\vcpkg.exe install %1:%arch%
|
||||
IF ERRORLEVEL 1 ( EXIT /B 1 )
|
||||
|
||||
echo Finished %1
|
||||
goto :EOF
|
||||
Loading…
Add table
Add a link
Reference in a new issue