Skip to content

Commit c934fdc

Browse files
committed
Merge branch 'visual-studio'
This topic branch teaches the project generator to generate a Visual Studio solution, ready to be opened in Visual Studio 2010 or later. The idea, of course, is to let some automatic build job generate and commit the project files with make MSVC=1 vcxproj and then (force-)push to a special-purpose branch. The major part of this branch thicket concerns itself not only with generating the Visual Studio project files, but making sure that the user can then run the test suite from a regular Git Bash (i.e. *not* requiring a Git for Windows SDK), e.g. by running cd t prove --timer --jobs 15 ./t[0-9]*.sh Signed-off-by: Johannes Schindelin <[email protected]>
2 parents dc1eed3 + 35cd187 commit c934fdc

25 files changed

+729
-59
lines changed

.gitignore

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,43 @@
179179
/gitweb/gitweb.cgi
180180
/gitweb/static/gitweb.js
181181
/gitweb/static/gitweb.min.*
182+
/libgit
183+
/test-chmtime
184+
/test-ctype
185+
/test-config
186+
/test-date
187+
/test-delta
188+
/test-dump-cache-tree
189+
/test-dump-split-index
190+
/test-dump-untracked-cache
191+
/test-fake-ssh
192+
/test-scrap-cache-tree
193+
/test-genrandom
194+
/test-hashmap
195+
/test-index-version
196+
/test-line-buffer
197+
/test-match-trees
198+
/test-mergesort
199+
/test-mktemp
200+
/test-parse-options
201+
/test-path-utils
202+
/test-prio-queue
203+
/test-read-cache
204+
/test-regex
205+
/test-revision-walking
206+
/test-run-command
207+
/test-sha1
208+
/test-sha1-array
209+
/test-sigchain
210+
/test-string-list
211+
/test-submodule-config
212+
/test-subprocess
213+
/test-svn-fe
214+
/test-urlmatch-normalization
215+
/test-wildmatch
182216
/common-cmds.h
217+
/vcs-svn_lib
218+
/xdiff_lib
183219
*.tar.gz
184220
*.dsc
185221
*.deb
@@ -217,6 +253,13 @@
217253
*.idb
218254
*.pdb
219255
*.ilk
256+
*.iobj
257+
*.ipdb
258+
*.dll
220259
.vs/
221-
/Debug/
222-
/Release/
260+
*.manifest
261+
Debug/
262+
Release/
263+
/UpgradeLog*.htm
264+
/git.VC.VC.opendb
265+
/git.VC.db

.nuget/NuGet.config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<config>
4+
<add key="repositoryPath" value="..\compat\vcbuild\GEN.PKGS" />
5+
</config>
6+
</configuration>

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,7 +2133,7 @@ exec_cmd.sp exec_cmd.s exec_cmd.o: GIT-PREFIX
21332133
exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
21342134
'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
21352135
'-DBINDIR="$(bindir_relative_SQ)"' \
2136-
'-DPREFIX="$(prefix_SQ)"'
2136+
'-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"'
21372137

21382138
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: GIT-PREFIX
21392139
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
@@ -2368,6 +2368,7 @@ GIT-BUILD-OPTIONS: FORCE
23682368
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
23692369
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
23702370
@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
2371+
@echo X=\'$(X)\' >>$@+
23712372
ifdef TEST_OUTPUT_DIRECTORY
23722373
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
23732374
endif
@@ -2402,6 +2403,9 @@ ifdef GIT_INTEROP_MAKE_OPTS
24022403
endif
24032404
ifdef TEST_GIT_INDEX_VERSION
24042405
@echo TEST_GIT_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(TEST_GIT_INDEX_VERSION)))'\' >>$@+
2406+
endif
2407+
ifdef MSVC_DEPS
2408+
@echo MSVC_DEPS=\''$(subst ','\'',$(subst ','\'',$(MSVC_DEPS)))'\' >>$@+
24052409
endif
24062410
@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
24072411

@@ -2426,7 +2430,7 @@ bin-wrappers/%: wrap-for-bin.sh
24262430
@mkdir -p bin-wrappers
24272431
$(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
24282432
-e 's|@@BUILD_DIR@@|$(shell pwd)|' \
2429-
-e 's|@@PROG@@|$(patsubst test-%,t/helper/test-%,$(@F))|' < $< > $@ && \
2433+
-e 's|@@PROG@@|$(patsubst test-%,t/helper/test-%$(X),$(@F))$(patsubst git%,$(X),$(filter $(@F),$(BINDIR_PROGRAMS_NEED_X)))|' < $< > $@ && \
24302434
chmod +x $@
24312435

24322436
# GNU make supports exporting all variables by "export" without parameters.

builtin/rev-list.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
395395
mark_edges_uninteresting(&revs, show_edge);
396396

397397
if (bisect_list) {
398-
int reaches = reaches, all = all;
398+
FAKE_INIT(int, reaches, 0);
399+
FAKE_INIT(int, all, 0);
399400

400401
revs.commits = find_bisection(revs.commits, &reaches, &all,
401402
bisect_find_all);

compat/msvc.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
#include <malloc.h>
77
#include <io.h>
88

9+
#pragma warning(disable: 4018) /* signed/unsigned comparison */
10+
#pragma warning(disable: 4244) /* type conversion, possible loss of data */
11+
#pragma warning(disable: 4090) /* 'function' : different 'const' qualifiers (ALLOC_GROW etc.)*/
12+
913
/* porting function */
1014
#define inline __inline
1115
#define __inline__ __inline

compat/obstack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ __extension__ \
493493
( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk, \
494494
((((h)->temp.tempint > 0 \
495495
&& (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk)) \
496-
? (int) ((h)->next_free = (h)->object_base \
496+
? (ptrdiff_t) ((h)->next_free = (h)->object_base \
497497
= (h)->temp.tempint + (char *) (h)->chunk) \
498498
: (((obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0)))
499499

compat/terminal.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
#ifndef NO_INTTYPES_H
12
#include <inttypes.h>
3+
#endif
24
#include "git-compat-util.h"
35
#include "run-command.h"
46
#include "compat/terminal.h"

config.mak.uname

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Platform specific Makefile tweaks based on uname detection
22

3+
# Define NO_SAFESEH if you need MSVC/Visual Studio to ignore the lack of
4+
# Microsoft's Safe Exception Handling in libraries (such as zlib).
5+
# Typically required for VS2013+/32-bit compilation on Vista+ versions.
6+
37
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
48
uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
59
uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
@@ -354,6 +358,7 @@ ifeq ($(uname_S),Windows)
354358
NEEDS_LIBICONV = YesPlease
355359
NO_STRTOUMAX = YesPlease
356360
NO_MKDTEMP = YesPlease
361+
NO_INTTYPES_H = YesPlease
357362
# VS2015 with UCRT claims that snprintf and friends are C99 compliant,
358363
# so we don't need this.
359364
#
@@ -388,6 +393,9 @@ ifeq ($(uname_S),Windows)
388393
compat/win32/dirent.o compat/win32/fscache.o
389394
COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
390395
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE
396+
# invalidcontinue.obj allows Git's source code to close the same file
397+
# handle twice, or to access the osfhandle of an already-closed stdout
398+
# See https://msdn.microsoft.com/en-us/library/ms235330.aspx
391399
EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib invalidcontinue.obj kernel32.lib ntdll.lib
392400
PTHREAD_LIBS =
393401
lib =
@@ -420,6 +428,11 @@ ifeq ($(uname_S),Windows)
420428
# release mode) to force a PDB to be generated (like RelWithDebInfo).
421429
BASIC_CFLAGS += -Zi
422430
BASIC_LDFLAGS += -debug
431+
432+
ifdef NO_SAFESEH
433+
LDFLAGS += -SAFESEH:NO
434+
endif
435+
423436
ifndef DEBUG
424437
BASIC_CFLAGS += -GL -Gy -O2 -Oy- -MD -DNDEBUG
425438
BASIC_LDFLAGS += -release -LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:CV,FIXUP
@@ -430,6 +443,65 @@ endif
430443
X = .exe
431444

432445
compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS
446+
447+
vcxproj:
448+
# Require clean work tree
449+
git update-index -q --refresh && \
450+
git diff-files --quiet && \
451+
git diff-index --cached --quiet HEAD --
452+
453+
# Make .vcxproj files and add them
454+
unset QUIET_GEN QUIET_BUILT_IN; \
455+
perl contrib/buildsystems/generate -g Vcxproj
456+
git add -f git.sln {*,*/lib,t/helper/*}/{packages.config,*.vcxproj}
457+
458+
# Add common-cmds.h
459+
$(MAKE) MSVC=1 prefix=/mingw64 common-cmds.h
460+
git add -f common-cmds.h
461+
462+
# Add scripts
463+
rm -f perl/perl.mak
464+
$(MAKE) MSVC=1 prefix=/mingw64 \
465+
$(SCRIPT_LIB) $(SCRIPT_SH_GEN) $(SCRIPT_PERL_GEN)
466+
# Strip out the sane tool path, needed only for building
467+
sed -i '/^git_broken_path_fix ".*/d' git-sh-setup
468+
git add -f $(SCRIPT_LIB) $(SCRIPT_SH_GEN) $(SCRIPT_PERL_GEN)
469+
470+
# Add Perl module
471+
$(MAKE) -C perl
472+
git add -f perl/blib/lib
473+
474+
# Add bin-wrappers, for testing
475+
rm -rf bin-wrappers/
476+
$(MAKE) MSVC=1 prefix=/mingw64 $(test_bindir_programs)
477+
# Ensure that the GIT_EXEC_PATH is a Unix-y one, and that the absolute
478+
# path of the repository is not hard-coded (GIT_EXEC_PATH will be set
479+
# by test-lib.sh according to the current setup)
480+
sed -i -e 's/^\(GIT_EXEC_PATH\)=.*/test -n "$${\1##*:*}" ||\
481+
\1="$$(cygpath -u "$$\1")"/' \
482+
-e "s|'$$(pwd)|\"\$$GIT_EXEC_PATH\"'|g" bin-wrappers/*
483+
# Ensure that test-* helpers find the .dll files copied to top-level
484+
sed -i 's|^PATH=.*|&:"$$GIT_EXEC_PATH"|' bin-wrappers/test-*
485+
# We do not want to force hard-linking builtins
486+
sed -i 's|\(git\)-\([-a-z]*\)\.exe"|\1.exe" \2|g' \
487+
bin-wrappers/git-{receive-pack,upload-archive}
488+
git add -f $(test_bindir_programs)
489+
# remote-ext is a builtin, but invoked as if it were external
490+
sed 's|receive-pack|remote-ext|g' \
491+
<bin-wrappers/git-receive-pack >bin-wrappers/git-remote-ext
492+
git add -f bin-wrappers/git-remote-ext
493+
494+
# Add templates
495+
$(MAKE) -C templates
496+
git add -f templates/boilerplates.made templates/blt/
497+
498+
# Add build options
499+
$(MAKE) MSVC=1 prefix=/mingw64 GIT-BUILD-OPTIONS
500+
git add -f GIT-BUILD-OPTIONS
501+
502+
# Commit the whole shebang
503+
git commit -m "Generate Visual Studio solution" \
504+
-m "Auto-generated by \`$(MAKE)$(MAKEFLAGS) $@\`"
433505
endif
434506
ifeq ($(uname_S),Interix)
435507
NO_INITGROUPS = YesPlease

contrib/buildsystems/Generators.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ BEGIN {
1717
$me = dirname($me);
1818
if (opendir(D,"$me/Generators")) {
1919
foreach my $gen (readdir(D)) {
20-
next if ($gen =~ /^\.\.?$/);
20+
next unless ($gen =~ /\.pm$/);
2121
require "${me}/Generators/$gen";
2222
$gen =~ s,\.pm,,;
2323
push(@AVAILABLE, $gen);

0 commit comments

Comments
 (0)