5. Adding a post-build step copying the executables to the
appropriate locations (as done at the end of the Linux MSVC
'Makefile')
I'd be grateful for any reports of success, or failure, so that we
(I) can at least make it easier for fellow VS users to get started on
supporting Git development on Windows.
--
Philip
[1] http://msysgit.github.io/ (scroll down to the Contribute area for
the developer download)
[2] https://github.com/msysgit/msysgit/blob/master/bin/msvc-build
[3] https://github.com/msysgit/git/pull/318/files
[4]
https://github.com/msysgit/git/blob/master/contrib/buildsystems/Generators/Vcproj.pm
Combined diff of all the changes I've made (which will be white space
mangled, but allows easy browsing). See the PR for all the commit
messages.
--------->8--------------
diff --git a/.gitignore b/.gitignore
index b5f9def..962e7bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -175,6 +175,7 @@
/gitweb/gitweb.cgi
/gitweb/static/gitweb.js
/gitweb/static/gitweb.min.*
+/libgit
/test-chmtime
/test-ctype
/test-date
@@ -182,6 +183,7 @@
/test-dump-cache-tree
/test-scrap-cache-tree
/test-genrandom
+/test-hashmap
/test-index-version
/test-line-buffer
/test-match-trees
@@ -202,6 +204,8 @@
/test-urlmatch-normalization
/test-wildmatch
/common-cmds.h
+/vcs-svn_lib
+/xdiff_lib
*.tar.gz
*.dsc
*.deb
@@ -238,5 +242,6 @@
*.user
*.idb
*.pdb
-/Debug/
-/Release/
+*.manifest
+**/Debug/
+**/Release/
diff --git a/Makefile b/Makefile
index f6b5847..65ef181 100644
--- a/Makefile
+++ b/Makefile
@@ -1793,6 +1793,9 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)):
perl/perl.mak
perl/perl.mak: perl/PM.stamp
+# 'make -n' (dry-run) will not execute this target which
creates/updates the PM.stamp file.
+# To avoid the error of failing to find the target PM.stamp, either
use NO_PERL=1 (YesPlease),
+# or add a leading '+' to the recipe '+$(QUIET_GEN)$(FIND) perl ...'
so that it is executed.
perl/PM.stamp: FORCE
$(QUIET_GEN)$(FIND) perl -type f -name '*.pm' | sort >$@+ && \
{ cmp $@+ $@ >/dev/null 2>/dev/null || mv $@+ $@; } && \
diff --git a/compat/vcbuild/README b/compat/vcbuild/README
index df8a657..7548dc4 100644
--- a/compat/vcbuild/README
+++ b/compat/vcbuild/README
@@ -3,20 +3,24 @@ 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:
+ 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:
+ and call the setup_32bit_env.cmd batch script before compiling
Git,
+ (see repo/package README for details),
+
+ or:
+ use 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.
+ 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.
@@ -33,18 +37,25 @@ The Steps of Build Git with VS2008
make common-cmds.h
to generate the common-cmds.h file needed to compile git.
-4. Then either build Git with the GNU Make Makefile in the Git
projects
- root
+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
+ 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
+ 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!
+
+Or, use the Msysgit msvc-build script; available from that project.
diff --git a/contrib/buildsystems/Generators/Vcproj.pm
b/contrib/buildsystems/Generators/Vcproj.pm
index cfa74ad..1b01d58 100644
--- a/contrib/buildsystems/Generators/Vcproj.pm
+++ b/contrib/buildsystems/Generators/Vcproj.pm
@@ -52,7 +52,6 @@ my @GUIDS = (
"{00785268-A9CC-4E40-AC29-BAC0019159CE}",
"{4C06F56A-DCDB-46A6-B67C-02339935CF12}",
"{3A62D3FD-519E-4EC9-8171-D2C1BFEA022F}",
- "{3A62D3FD-519E-4EC9-8171-D2C1BFEA022F}",
"{9392EB58-D7BA-410B-B1F0-B2FAA6BC89A7}",
"{2ACAB2D5-E0CE-4027-BCA0-D78B2D7A6C66}",
"{86E216C3-43CE-481A-BCB2-BE5E62850635}",
diff --git a/contrib/buildsystems/engine.pl
b/contrib/buildsystems/engine.pl
old mode 100755
new mode 100644
index 23da787..9c85845
--- a/contrib/buildsystems/engine.pl
+++ b/contrib/buildsystems/engine.pl
@@ -12,6 +12,7 @@ use File::Basename;
use File::Spec;
use Cwd;
use Generators;
+use Text::ParseWords;
my (%build_structure, %compile_options, @makedry);
my $out_dir = getcwd();
@@ -40,6 +41,7 @@ EOM
# Parse command-line options
while (@ARGV) {
my $arg = shift @ARGV;
+ #print "Arg: $arg \n";
if ("$arg" eq "-h" || "$arg" eq "--help" || "$arg" eq "-?") {
showUsage();
exit(0);
@@ -72,7 +74,13 @@ Running GNU Make to figure out build structure...
EOM
# Pipe a make --dry-run into a variable, if not already loaded from
file
-@makedry = `cd $git_dir && make -n MSVC=1 V=1 2>/dev/null` if
!@makedry;
+# Capture the make dry stderr to file for review (will be empty for
a release build).
+
+my $ErrsFile = "msvc-build-makedryerrors.txt";
+#@makedry = `cd $git_dir && make -n MSVC=1 NO_PERL=1 V=1
1>makedry.txt 2>$ErrsFile`; # capture the dry run as a text file
+@makedry = `cd $git_dir && make -n MSVC=1 NO_PERL=1 V=1 2>$ErrsFile`
if !@makedry;
+# test for an empty Errors file and remove it
+for ($ErrsFile) {unlink $_ if (-f $_) && (!-s $_);}
# Parse the make output into usable info
parseMakeOutput();
@@ -122,6 +130,7 @@ sub parseMakeOutput
print "Parsing GNU Make output to figure out build
structure...\n";
my $line = 0;
while (my $text = shift @makedry) {
+ #print "Make: $text\n"; # show the makedry line
my $ate_next;
do {
$ate_next = 0;
@@ -140,6 +149,12 @@ sub parseMakeOutput
next;
}
+ if ($text =~ /^(mkdir|msgfmt) /) {
+ # options to the Portable Object translations
+ # the line "mkdir ... && msgfmt ..." contains no linker
options
+ next;
+ }
+
if($text =~ / -c /) {
# compilation
handleCompileLine($text, $line);
@@ -231,7 +246,7 @@ sub removeDuplicates
sub handleCompileLine
{
my ($line, $lineno) = @_;
- my @parts = split(' ', $line);
+ my @parts = shellwords($line);
my $sourcefile;
shift(@parts); # ignore cmd
while (my $part = shift @parts) {
@@ -250,6 +265,7 @@ sub handleCompileLine
} elsif ($part =~ /\.(c|cc|cpp)$/) {
$sourcefile = $part;
} else {
+ print "full line: $line\n";
die "Unhandled compiler option @ line $lineno: $part";
}
}
@@ -265,7 +281,7 @@ sub handleLibLine
my (@objfiles, @lflags, $libout, $part);
# kill cmd and rm 'prefix'
$line =~ s/^rm -f .* && .* rcs //;
- my @parts = split(' ', $line);
+ my @parts = shellwords($line);
while ($part = shift @parts) {
if ($part =~ /^-/) {
push(@lflags, $part);
@@ -275,6 +291,7 @@ sub handleLibLine
$libout = $part;
$libout =~ s/\.a$//;
} else {
+ print "full line: $line\n";
die "Unhandled lib option @ line $lineno: $part";
}
}
@@ -282,7 +299,7 @@ sub handleLibLine
# exit(1);
foreach (@objfiles) {
my $sourcefile = $_;
- $sourcefile =~ s/\.o/.c/;
+ $sourcefile =~ s/\.o$/.c/;
push(@sources, $sourcefile);
push(@cflags, @{$compile_options{"${sourcefile}_CFLAGS"}});
push(@defines, @{$compile_options{"${sourcefile}_DEFINES"}});
@@ -306,7 +323,7 @@ sub handleLinkLine
{
my ($line, $lineno) = @_;
my (@objfiles, @lflags, @libs, $appout, $part);
- my @parts = split(' ', $line);
+ my @parts = shellwords($line);
shift(@parts); # ignore cmd
while ($part = shift @parts) {
if ($part =~ /^-IGNORE/) {
@@ -326,8 +343,12 @@ sub handleLinkLine
} elsif ($part =~ /\.(a|lib)$/) {
$part =~ s/\.a$/.lib/;
push(@libs, $part);
- } elsif ($part =~ /\.(o|obj)$/) {
+ } elsif ($part eq 'invalidcontinue.obj') {
+ # ignore - known to MSVC
+ } elsif ($part =~ /\.o$/) {
push(@objfiles, $part);
+ } elsif ($part =~ /\.obj$/) {
+ # do nothing, 'make' should not be producing .obj, only
.o files
} else {
die "Unhandled lib option @ line $lineno: $part";
}
@@ -336,7 +357,7 @@ sub handleLinkLine
# exit(1);
foreach (@objfiles) {
my $sourcefile = $_;
- $sourcefile =~ s/\.o/.c/;
+ $sourcefile =~ s/\.o$/.c/;
push(@sources, $sourcefile);
push(@cflags, @{$compile_options{"${sourcefile}_CFLAGS"}});
push(@defines, @{$compile_options{"${sourcefile}_DEFINES"}});
--
--
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki -
Github accounts are free.
You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msys...@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscr...@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en
---
You received this message because you are subscribed to the Google
Groups "Git for Windows" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to msysgit+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.