Re: FeatureRequest: Build improvements for Windows

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
From: "Dangling Pointer" <danglingpointer@xxxxxxxxxxx>
I searched in code and found instances of #ifdef _MSC_VER in
https://github.com/git/git (original repository, not the fork).

I am coming from github, where I have found many native lib
repositories have two build files, build.sh and build.cmd with

Git is a *nix code base so rather than using build.*, it obviously uses a Makefile. The makefile can be slightly convoluted because it seeks to have maximum backward compatibility.

some windows-specific code turds like #ifdef _MSC_VER etc. which
nobody appreciate because CL.exe up until last VS release

wasn't C99 complaint. This has changed with VS2015.
https://github.com/git/git/blob/master/Documentation/CodingGuidelines#L174
The C89 compatibility came up recently (2015-04-30). It's still a live issue.


If git/git does not share this philosophy of having a build file for
both nix and win, then I wonder why do we even have MS compiler

The git/git philosophy is maximum backward compatibility, with Gnu/Linux as
a given.

directives in git codebase in first place? That was the main source of
confusion.

If the repo owner is willing to drop the old compiler support for
Windows, since many windows users do not build from source
Surely it's a case of building on the shoulders of former giants. Many
are still using VS200* out in the real world (my work uses V2008 and VS2006 commonly because of the need to support older embedded equipment)

and tend to download the compiled binaries anyway.  If they want, they
can always use MinGW and VS2015 to build.

The G4W projects do provide binaries as well as source code, and support
older compilers... It's the choice here.


The idea is to keep the codebase clean from outdated _MSC_VER
conditions. In this age,
free CI service (like AppVeyor) will build your code with latest
compiler (MinGW GCC and MSVCR 2015) in a matter of minutes
and then make the release artifacts available for download. I really
don't see any point in still using 8 years old compiler on a 15
years old OS
That's only a third of my coding life ;-). It's nice to use the latest
and greatest, but sometimes "if it ain't broke, don't fix it" applies to
choosing what to spend one's free hours on.

when we can just throw a .yml (appveyor config) file in the repo root
and let the cloud handle the build business and
verify the build by running tests. (well we are still using mailing
lists, aren't we ;-)


Besides, I had no idea about this fork: https://github.com/msysgit/git
but it seems to be falling behind significantly from the

upstream master (git/git).

If you look at the home page of the
https://github.com/git-for-windows/git/wiki/ I provided, you'll be able
to see why/how the team decided to leave that fork behind (though it did
get a major security fix applied). Folks on the *nix side can be using
v1.7.x and still have it all work, so there is no shame in using the
msysgit1.9.5.

The main point being that Git seeks to maintain backward compatibility
and is careful about how code is introduced.

It can be frustrating when one's latest and greatest idea is not as
readily picked up as hoped, but a moment (or two's) reflection will help
understand the broader issues that may pertain. That said useful new
fetures (with justification, code, documentation, and review ;-) are
welcome.

Do have a look at the
https://github.com/git-for-windows/git/wiki/How-to-participate


----------------------------------------
From: philipoakley@xxxxxxx
(In-line posting preferred; top-posting deprecated ;-)
(retain all cc's)

Hmm, it is already happening, isn't it? There is already a support
of
MSVCR in git's code base. I am referring to replacing that current
support of 'older' MSVCR in favor of the latest one, so to make the
git's code base comparatively coherent and organized (as some/many
instances of #ifdef _MSC_VER and #if define (_MSC_VER) && _MSC_VER <
xxx etc. will be gone, for instance we don't need fallback for
sprint
or snprintf since C99 std support for those is provisioned).


It's not clear if you (DP) are asking about using being able to use
the
Visual Studio IDE and gui to help visualise and develop the code, or
to
simply use the underlying MS compiler when making (using the
Makefile)
the Git code base.

One can compile the codebase using the MS compiler (given a suitable
environment, and setting the right Makefile flags), but that may not
be
what you were thinking of.

The Windows team recently decided that the older Msysgit approach
should
be retired (can't find the link just now) and a new approach based on
Msys2 started (http://git-for-windows.github.io/ and
https://github.com/git-for-windows/git/wiki/FAQ). This is nearing
completion.

Meanwhile I have been working on fixing the msvc-build script, which
can
produce a git.sln and associated files (targeted originally at
VS2008),
and is now at the 'Validate this with the Windows guys' stage
(http://marc.info/?l=git&m=143750907804881&w=2 et.seq.).

My code, for the new G4W SDK, has been rebased from the msygit
version,
and is now at https://github.com/git-for-windows/git/pull/256

Does that help for creating an IDE compilable version?

Also, many thanks for yournote about the new VS Community edition
(I'm
still mainly working on an XP notebook for ease of carry).

As an open community of independently minded folks it can tae a time
to
gel around a reasonably common approach, especially as Git will
always
be primarily focussed on Linux (it **is** the Linux (Linus's) VCS!).


From: jacob.keller@xxxxxxxxx
On Sat, Jul 25, 2015 at 11:23 PM, Dangling Pointer
<danglingpointer@xxxxxxxxxxx> wrote:
Hello,

In my understanding, the ratio between the mere consumers of git
on
Windows vs. people who compile git for Windows is 100,000 : 1. If
there is a breaking change in the workflow of the latter set, who
use Visual Studio to build git from source, I assume that is
doable
given a good reason, hence this post.

With VS 2015, C99 support is "finally" added with some C11
features
as well. See this blog:
http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx.
One of the edition of new VS is Community edition, which is like
professional edition but is free (also much superior than Express
edition) and meant for open source projects. VS2015 also has the
ability to target compiler for Wind-XP.


I think the big issue is whether it has support for the various
unix
interfaces and unix shell commands we use. MinGW/MSYS comes with
support for the unix interface, which I don't believe is that
actually
supported via MSYS and I don't know if VS2015 is supported? I
don't
think it's due to the C99 but due to need of posix interface which
is
not normally (fully) provided by Windows.

Git's code retains a C89 compatibility (IIUC).


Regards,
Jake --
--
Philip

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]