threads / patch / 31745

patchAllow generating a non-default set of documentation

Subject: [PATCH] Allow generating a non-default set of documentation

## tl;dr

12 messages between Oct 7, 2012 and Oct 8, 2012. Diffs are folded; open one to read it.

replies: 11people: 2as markdown or json

Junio C Hamano· Oct 7, 2012, 20:39 UTC · lore

By default, "make doc" generates the manpages and htmldocs in the Documentation directory, but you may want to change this depending on the target environment, e.g. to include 'pdf'. Introduce a new Makefile variable DEFAULT_DOC_TARGET to allow customizing this.

The primary motivation is to let us check documentation patches with
    $ DEFAULT_DOC_TARGET=git-push.1 make doc

but it is not so far-fetched to imagine that Windows users may want to omit manpages with

    $ DEFAULT_DOC_TARGET=html make doc

or somesuch; this lets interested people to enhance the install-doc target in a similar way.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Makefile | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
Show changes to diff +10 −2
diff --git c/Makefile w/Makefile
index 8413606..250b87a 100644
--- c/Makefile
+++ w/Makefile
@@ -299,6 +299,12 @@ all::
 #   DEFAULT_EDITOR='$GIT_FALLBACK_EDITOR',
 #   DEFAULT_EDITOR='"C:\Program Files\Vim\gvim.exe" --nofork'
 #
+# You can define DEFAULT_DOC_TARGET to something other than "all" to change it
+# from the built-in default of generating manpages and htmldocs.  e.g.
+#
+#   DEFAULT_DOC_TARGET='man html info pdf'
+#   DEFAULT_DOC_TARGET='html'
+#
 # Define COMPUTE_HEADER_DEPENDENCIES to "yes" if you want dependencies on
 # header files to be automatically computed, to avoid rebuilding objects when
 # an unrelated header file changes.  Define it to "no" to use the hard-coded
@@ -1496,6 +1502,8 @@ ifneq (,$(SOCKLEN_T))
 	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
 endif
 
+DEFAULT_DOC_TARGET ?= all
+
 ifeq ($(uname_S),Darwin)
 	ifndef NO_FINK
 		ifeq ($(shell test -d /sw/lib && echo y),y)
@@ -2468,10 +2476,10 @@ $(XDIFF_LIB): $(XDIFF_OBJS)
 $(VCSSVN_LIB): $(VCSSVN_OBJS)
 	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
 
-export DEFAULT_EDITOR DEFAULT_PAGER
+export DEFAULT_EDITOR DEFAULT_PAGER DEFAULT_DOC_TARGET
 
 doc:
-	$(MAKE) -C Documentation all
+	$(MAKE) -C Documentation $(DEFAULT_DOC_TARGET)
 
 man:
 	$(MAKE) -C Documentation man
Jeff King· Oct 7, 2012, 21:48 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

On Sun, Oct 07, 2012 at 01:39:32PM -0700, Junio C Hamano wrote:
> By default, "make doc" generates the manpages and htmldocs in the
> Documentation directory, but you may want to change this depending
> on the target environment, e.g. to include 'pdf'.  Introduce a new
> Makefile variable DEFAULT_DOC_TARGET to allow customizing this.
Makes sense (we have DEFAULT_TEST_TARGET for similar reasons).
> The primary motivation is to let us check documentation patches with
> 
>     $ DEFAULT_DOC_TARGET=git-push.1 make doc
Wouldn't it be just as easy to say:
  $ make -C Documentation git-push.1
?
> but it is not so far-fetched to imagine that Windows users may want to
> omit manpages with
> 
>     $ DEFAULT_DOC_TARGET=html make doc

That use case makes a lot more sense to me (or more likely setting it in config.mak).

>  Makefile | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
No change to Documentation/Makefile? So this will work:
  $ echo DEFAULT_DOC_TARGET=html >config.mak
  $ make doc
but this will not:
  $ cd Documentation
  $ make
Why not do it like this:
Show changes to Documentation/Makefile +2 −2
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 267dfe1..ca10313 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -152,7 +152,8 @@ endif
 endif
 endif
 
-all: html man
+DEFAULT_DOC_TARGET ?= html man
+all: $(DEFAULT_DOC_TARGET)
 
 html: $(DOC_HTML)
 

which covers both cases? That is also how we handle DEFAULT_TEST_TARGET.

-Peff
Junio C Hamano· Oct 7, 2012, 22:32 UTC · re: Jeff King · lore

Re: [PATCH] Allow generating a non-default set of documentation

Jeff King <peff@peff.net> writes:
Show 18 quoted lines
> Why not do it like this:
>
> diff --git a/Documentation/Makefile b/Documentation/Makefile
> index 267dfe1..ca10313 100644
> --- a/Documentation/Makefile
> +++ b/Documentation/Makefile
> @@ -152,7 +152,8 @@ endif
>  endif
>  endif
>  
> -all: html man
> +DEFAULT_DOC_TARGET ?= html man
> +all: $(DEFAULT_DOC_TARGET)
>  
>  html: $(DOC_HTML)
>  
>
> which covers both cases? That is also how we handle DEFAULT_TEST_TARGET.
Surely, and thanks.
Junio C Hamano· Oct 7, 2012, 22:45 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

Junio C Hamano <gitster@pobox.com> writes:
Show 22 quoted lines
> Jeff King <peff@peff.net> writes:
>
>> Why not do it like this:
>>
>> diff --git a/Documentation/Makefile b/Documentation/Makefile
>> index 267dfe1..ca10313 100644
>> --- a/Documentation/Makefile
>> +++ b/Documentation/Makefile
>> @@ -152,7 +152,8 @@ endif
>>  endif
>>  endif
>>  
>> -all: html man
>> +DEFAULT_DOC_TARGET ?= html man
>> +all: $(DEFAULT_DOC_TARGET)
>>  
>>  html: $(DOC_HTML)
>>  
>>
>> which covers both cases? That is also how we handle DEFAULT_TEST_TARGET.
>
> Surely, and thanks.

So here is a proposed update based on your idea, to be squashed on top (i.e. the change to the top-level Makefile in the posted patch is not reverted).

Does it make sense?
 Documentation/Makefile | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
Show changes to diff +6 −1
diff --git c/Documentation/Makefile w/Documentation/Makefile
index 063fa69..0f8fdf8 100644
--- c/Documentation/Makefile
+++ w/Documentation/Makefile
@@ -1,3 +1,6 @@
+# The default target of this Makefile is...
+all::
+
 MAN1_TXT= \
 	$(filter-out $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
 		$(wildcard git-*.txt)) \
@@ -65,6 +68,8 @@ endif
 -include ../config.mak.autogen
 -include ../config.mak
 
+DEFAULT_DOC_TARGET ?= html man
+
 #
 # For docbook-xsl ...
 #	-1.68.1,	no extra settings are needed?
@@ -151,7 +156,7 @@ ifndef V
 endif
 endif
 
-all: html man
+all:: $(DEFAULT_DOC_TARGET)
 
 html: $(DOC_HTML)
 
Jeff King· Oct 7, 2012, 23:01 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

On Sun, Oct 07, 2012 at 03:45:52PM -0700, Junio C Hamano wrote:
Show 5 quoted lines
> So here is a proposed update based on your idea, to be squashed on
> top (i.e. the change to the top-level Makefile in the posted patch
> is not reverted).
> 
> Does it make sense?

The change to Documentation/Makefile makes sense, but what then is the point of the second half of this hunk from your original:

Show changes to diff +2 −3
@@ -2468,10 +2476,10 @@ $(XDIFF_LIB): $(XDIFF_OBJS)
 $(VCSSVN_LIB): $(VCSSVN_OBJS)
 	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
 
-export DEFAULT_EDITOR DEFAULT_PAGER
+export DEFAULT_EDITOR DEFAULT_PAGER DEFAULT_DOC_TARGET
 
 doc:
-	$(MAKE) -C Documentation all
+	$(MAKE) -C Documentation $(DEFAULT_DOC_TARGET)
 
 man:
 	$(MAKE) -C Documentation man

We know that "all" is simply a redirect to DEFAULT_DOC_TARGET internally
within the documentation Makefile, and we know that it is propagated by
the export line above.  I do not think it creates the wrong behavior,
but it is unnecessary, and omitting a target at all demonstrates to a
reader how they can get the same behavior from within Documentation
(namely by running just "make").

-Peff
Junio C Hamano· Oct 7, 2012, 22:40 UTC · re: Jeff King · lore

Re: [PATCH] Allow generating a non-default set of documentation

Jeff King <peff@peff.net> writes:
Show 9 quoted lines
> On Sun, Oct 07, 2012 at 01:39:32PM -0700, Junio C Hamano wrote:
> ...
>> but it is not so far-fetched to imagine that Windows users may want to
>> omit manpages with
>> 
>>     $ DEFAULT_DOC_TARGET=html make doc
>
> That use case makes a lot more sense to me (or more likely setting it in
> config.mak).

I actually had "ifeq ($(uname_S),Windows)" at the top-level in mind, not config.mak. I think that is far more important use case than going down to Documentation yourself and run make there (which is not a workflow I deeply care about in the first place).

Show 33 quoted lines
>>  Makefile | 12 ++++++++++--
>>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> No change to Documentation/Makefile? So this will work:
>
>   $ echo DEFAULT_DOC_TARGET=html >config.mak
>   $ make doc
>
> but this will not:
>
>   $ cd Documentation
>   $ make
>
> Why not do it like this:
>
> diff --git a/Documentation/Makefile b/Documentation/Makefile
> index 267dfe1..ca10313 100644
> --- a/Documentation/Makefile
> +++ b/Documentation/Makefile
> @@ -152,7 +152,8 @@ endif
>  endif
>  endif
>  
> -all: html man
> +DEFAULT_DOC_TARGET ?= html man
> +all: $(DEFAULT_DOC_TARGET)
>  
>  html: $(DOC_HTML)
>  
>
> which covers both cases? That is also how we handle DEFAULT_TEST_TARGET.
>
> -Peff
Jeff King· Oct 7, 2012, 23:07 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

On Sun, Oct 07, 2012 at 03:40:19PM -0700, Junio C Hamano wrote:
Show 16 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > On Sun, Oct 07, 2012 at 01:39:32PM -0700, Junio C Hamano wrote:
> > ...
> >> but it is not so far-fetched to imagine that Windows users may want to
> >> omit manpages with
> >> 
> >>     $ DEFAULT_DOC_TARGET=html make doc
> >
> > That use case makes a lot more sense to me (or more likely setting it in
> > config.mak).
> 
> I actually had "ifeq ($(uname_S),Windows)" at the top-level in mind,
> not config.mak.  I think that is far more important use case than
> going down to Documentation yourself and run make there (which is
> not a workflow I deeply care about in the first place).

Hmm. Unfortunately that does not work from within Documentation, because Documentation/Makefile never gets to see our default-system tweaks (it sees only config.mak).

I know it is a case you do not care about (and nor do I; if I use this at all, it would be to limit my build by setting the variable in my config.mak), but it highlights a subtle issue. The subdir Makefiles receive their config from config.mak.autogen and config.mak, but never get to see any of the default tweaks we do based on $(uname). Which the contents of config.mak could very well depend on, if somebody were trying to be very clever.

Would it make sense to pull all of our platform-specific tweaks out into a config.mak.platform (right before config.mak.autogen)? That would be less surprising for cases like this, and I think it would make the Makefile a lot more readable.

-Peff
Jeff King· Oct 7, 2012, 23:11 UTC · re: Jeff King · lore

Re: [PATCH] Allow generating a non-default set of documentation

On Sun, Oct 07, 2012 at 07:07:03PM -0400, Jeff King wrote:
> Would it make sense to pull all of our platform-specific tweaks out into
> a config.mak.platform (right before config.mak.autogen)? That would be
> less surprising for cases like this, and I think it would make the
> Makefile a lot more readable.

Something like the patch below. Note that you could then base even more decisions on the existing DEFAULT_HELP_FORMAT that is already in the Makefile (and after my patch, in config.mak.defaults). For example, when it is set to html, make both the default build and install targets in Documentation/Makefile do html instead of man.

Show changes to 2 files +521 −520

Makefile, config.mak.defaults

diff --git a/Makefile b/Makefile
index e3e3cd5..c00fd32 100644
--- a/Makefile
+++ b/Makefile
@@ -326,19 +326,6 @@ GIT-VERSION-FILE: FORCE
 	@$(SHELL_PATH) ./GIT-VERSION-GEN
 -include GIT-VERSION-FILE
 
-uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
-uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
-uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
-uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
-uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
-uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
-
-ifdef MSVC
-	# avoid the MingW and Cygwin configuration sections
-	uname_S := Windows
-	uname_O := Windows
-endif
-
 # CFLAGS and LDFLAGS are for the users to override from the command line.
 
 CFLAGS = -g -O2 -Wall
@@ -976,513 +963,7 @@ GIT_USER_AGENT = git/$(GIT_VERSION)
 
 GIT_USER_AGENT = git/$(GIT_VERSION)
 
-#
-# Platform specific tweaks
-#
-
-# We choose to avoid "if .. else if .. else .. endif endif"
-# because maintaining the nesting to match is a pain.  If
-# we had "elif" things would have been much nicer...
-
-ifeq ($(uname_M),x86_64)
-	XDL_FAST_HASH = YesPlease
-endif
-ifeq ($(uname_S),OSF1)
-	# Need this for u_short definitions et al
-	BASIC_CFLAGS += -D_OSF_SOURCE
-	SOCKLEN_T = int
-	NO_STRTOULL = YesPlease
-	NO_NSEC = YesPlease
-endif
-ifeq ($(uname_S),Linux)
-	NO_STRLCPY = YesPlease
-	NO_MKSTEMPS = YesPlease
-	HAVE_PATHS_H = YesPlease
-	LIBC_CONTAINS_LIBINTL = YesPlease
-	HAVE_DEV_TTY = YesPlease
-endif
-ifeq ($(uname_S),GNU/kFreeBSD)
-	NO_STRLCPY = YesPlease
-	NO_MKSTEMPS = YesPlease
-	HAVE_PATHS_H = YesPlease
-	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
-	LIBC_CONTAINS_LIBINTL = YesPlease
-endif
-ifeq ($(uname_S),UnixWare)
-	CC = cc
-	NEEDS_SOCKET = YesPlease
-	NEEDS_NSL = YesPlease
-	NEEDS_SSL_WITH_CRYPTO = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	SHELL_PATH = /usr/local/bin/bash
-	NO_IPV6 = YesPlease
-	NO_HSTRERROR = YesPlease
-	NO_MKSTEMPS = YesPlease
-	BASIC_CFLAGS += -Kthread
-	BASIC_CFLAGS += -I/usr/local/include
-	BASIC_LDFLAGS += -L/usr/local/lib
-	INSTALL = ginstall
-	TAR = gtar
-	NO_STRCASESTR = YesPlease
-	NO_MEMMEM = YesPlease
-endif
-ifeq ($(uname_S),SCO_SV)
-	ifeq ($(uname_R),3.2)
-		CFLAGS = -O2
-	endif
-	ifeq ($(uname_R),5)
-		CC = cc
-		BASIC_CFLAGS += -Kthread
-	endif
-	NEEDS_SOCKET = YesPlease
-	NEEDS_NSL = YesPlease
-	NEEDS_SSL_WITH_CRYPTO = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	SHELL_PATH = /usr/bin/bash
-	NO_IPV6 = YesPlease
-	NO_HSTRERROR = YesPlease
-	NO_MKSTEMPS = YesPlease
-	BASIC_CFLAGS += -I/usr/local/include
-	BASIC_LDFLAGS += -L/usr/local/lib
-	NO_STRCASESTR = YesPlease
-	NO_MEMMEM = YesPlease
-	INSTALL = ginstall
-	TAR = gtar
-endif
-ifeq ($(uname_S),Darwin)
-	NEEDS_CRYPTO_WITH_SSL = YesPlease
-	NEEDS_SSL_WITH_CRYPTO = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
-		OLD_ICONV = UnfortunatelyYes
-	endif
-	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
-		NO_STRLCPY = YesPlease
-	endif
-	NO_MEMMEM = YesPlease
-	USE_ST_TIMESPEC = YesPlease
-	HAVE_DEV_TTY = YesPlease
-	COMPAT_OBJS += compat/precompose_utf8.o
-	BASIC_CFLAGS += -DPRECOMPOSE_UNICODE
-endif
-ifeq ($(uname_S),SunOS)
-	NEEDS_SOCKET = YesPlease
-	NEEDS_NSL = YesPlease
-	SHELL_PATH = /bin/bash
-	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
-	NO_STRCASESTR = YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_REGEX = YesPlease
-	NO_FNMATCH_CASEFOLD = YesPlease
-	NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
-	HAVE_DEV_TTY = YesPlease
-	ifeq ($(uname_R),5.6)
-		SOCKLEN_T = int
-		NO_HSTRERROR = YesPlease
-		NO_IPV6 = YesPlease
-		NO_SOCKADDR_STORAGE = YesPlease
-		NO_UNSETENV = YesPlease
-		NO_SETENV = YesPlease
-		NO_STRLCPY = YesPlease
-		NO_STRTOUMAX = YesPlease
-		GIT_TEST_CMP = cmp
-	endif
-	ifeq ($(uname_R),5.7)
-		NEEDS_RESOLV = YesPlease
-		NO_IPV6 = YesPlease
-		NO_SOCKADDR_STORAGE = YesPlease
-		NO_UNSETENV = YesPlease
-		NO_SETENV = YesPlease
-		NO_STRLCPY = YesPlease
-		NO_STRTOUMAX = YesPlease
-		GIT_TEST_CMP = cmp
-	endif
-	ifeq ($(uname_R),5.8)
-		NO_UNSETENV = YesPlease
-		NO_SETENV = YesPlease
-		NO_STRTOUMAX = YesPlease
-		GIT_TEST_CMP = cmp
-	endif
-	ifeq ($(uname_R),5.9)
-		NO_UNSETENV = YesPlease
-		NO_SETENV = YesPlease
-		NO_STRTOUMAX = YesPlease
-		GIT_TEST_CMP = cmp
-	endif
-	INSTALL = /usr/ucb/install
-	TAR = gtar
-	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
-endif
-ifeq ($(uname_O),Cygwin)
-	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
-		NO_D_TYPE_IN_DIRENT = YesPlease
-		NO_D_INO_IN_DIRENT = YesPlease
-		NO_STRCASESTR = YesPlease
-		NO_MEMMEM = YesPlease
-		NO_MKSTEMPS = YesPlease
-		NO_SYMLINK_HEAD = YesPlease
-		NO_IPV6 = YesPlease
-		OLD_ICONV = UnfortunatelyYes
-	endif
-	NO_THREAD_SAFE_PREAD = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
-	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
-	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
-	# There are conflicting reports about this.
-	# On some boxes NO_MMAP is needed, and not so elsewhere.
-	# Try commenting this out if you suspect MMAP is more efficient
-	NO_MMAP = YesPlease
-	X = .exe
-	COMPAT_OBJS += compat/cygwin.o
-	UNRELIABLE_FSTAT = UnfortunatelyYes
-	SPARSE_FLAGS = -isystem /usr/include/w32api -Wno-one-bit-signed-bitfield
-endif
-ifeq ($(uname_S),FreeBSD)
-	NEEDS_LIBICONV = YesPlease
-	OLD_ICONV = YesPlease
-	NO_MEMMEM = YesPlease
-	BASIC_CFLAGS += -I/usr/local/include
-	BASIC_LDFLAGS += -L/usr/local/lib
-	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
-	USE_ST_TIMESPEC = YesPlease
-	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
-		PTHREAD_LIBS = -pthread
-		NO_UINTMAX_T = YesPlease
-		NO_STRTOUMAX = YesPlease
-	endif
-	PYTHON_PATH = /usr/local/bin/python
-	HAVE_PATHS_H = YesPlease
-endif
-ifeq ($(uname_S),OpenBSD)
-	NO_STRCASESTR = YesPlease
-	NO_MEMMEM = YesPlease
-	USE_ST_TIMESPEC = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	BASIC_CFLAGS += -I/usr/local/include
-	BASIC_LDFLAGS += -L/usr/local/lib
-	HAVE_PATHS_H = YesPlease
-endif
-ifeq ($(uname_S),NetBSD)
-	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
-		NEEDS_LIBICONV = YesPlease
-	endif
-	BASIC_CFLAGS += -I/usr/pkg/include
-	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
-	USE_ST_TIMESPEC = YesPlease
-	NO_MKSTEMPS = YesPlease
-	HAVE_PATHS_H = YesPlease
-endif
-ifeq ($(uname_S),AIX)
-	DEFAULT_PAGER = more
-	NO_STRCASESTR=YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_STRLCPY = YesPlease
-	NO_NSEC = YesPlease
-	FREAD_READS_DIRECTORIES = UnfortunatelyYes
-	INTERNAL_QSORT = UnfortunatelyYes
-	NEEDS_LIBICONV=YesPlease
-	BASIC_CFLAGS += -D_LARGE_FILES
-	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
-		NO_PTHREADS = YesPlease
-	else
-		PTHREAD_LIBS = -lpthread
-	endif
-	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
-		INLINE=''
-	endif
-	GIT_TEST_CMP = cmp
-endif
-ifeq ($(uname_S),GNU)
-	# GNU/Hurd
-	NO_STRLCPY=YesPlease
-	NO_MKSTEMPS = YesPlease
-	HAVE_PATHS_H = YesPlease
-	LIBC_CONTAINS_LIBINTL = YesPlease
-endif
-ifeq ($(uname_S),IRIX)
-	NO_SETENV = YesPlease
-	NO_UNSETENV = YesPlease
-	NO_STRCASESTR = YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_MKDTEMP = YesPlease
-	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
-	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
-	# git dies with a segmentation fault when trying to access the first
-	# entry of a reflog.  The conservative choice is made to always set
-	# NO_MMAP.  If you suspect that your compiler is not affected by this
-	# issue, comment out the NO_MMAP statement.
-	NO_MMAP = YesPlease
-	NO_REGEX = YesPlease
-	NO_FNMATCH_CASEFOLD = YesPlease
-	SNPRINTF_RETURNS_BOGUS = YesPlease
-	SHELL_PATH = /usr/gnu/bin/bash
-	NEEDS_LIBGEN = YesPlease
-endif
-ifeq ($(uname_S),IRIX64)
-	NO_SETENV=YesPlease
-	NO_UNSETENV = YesPlease
-	NO_STRCASESTR=YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_MKDTEMP = YesPlease
-	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
-	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
-	# git dies with a segmentation fault when trying to access the first
-	# entry of a reflog.  The conservative choice is made to always set
-	# NO_MMAP.  If you suspect that your compiler is not affected by this
-	# issue, comment out the NO_MMAP statement.
-	NO_MMAP = YesPlease
-	NO_REGEX = YesPlease
-	NO_FNMATCH_CASEFOLD = YesPlease
-	SNPRINTF_RETURNS_BOGUS = YesPlease
-	SHELL_PATH=/usr/gnu/bin/bash
-	NEEDS_LIBGEN = YesPlease
-endif
-ifeq ($(uname_S),HP-UX)
-	INLINE = __inline
-	NO_IPV6=YesPlease
-	NO_SETENV=YesPlease
-	NO_STRCASESTR=YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_STRLCPY = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_UNSETENV = YesPlease
-	NO_HSTRERROR = YesPlease
-	NO_SYS_SELECT_H = YesPlease
-	NO_FNMATCH_CASEFOLD = YesPlease
-	SNPRINTF_RETURNS_BOGUS = YesPlease
-	NO_NSEC = YesPlease
-	ifeq ($(uname_R),B.11.00)
-		NO_INET_NTOP = YesPlease
-		NO_INET_PTON = YesPlease
-	endif
-	ifeq ($(uname_R),B.10.20)
-		# Override HP-UX 11.x setting:
-		INLINE =
-		SOCKLEN_T = size_t
-		NO_PREAD = YesPlease
-		NO_INET_NTOP = YesPlease
-		NO_INET_PTON = YesPlease
-	endif
-	GIT_TEST_CMP = cmp
-endif
-ifeq ($(uname_S),Windows)
-	GIT_VERSION := $(GIT_VERSION).MSVC
-	pathsep = ;
-	NO_PREAD = YesPlease
-	NEEDS_CRYPTO_WITH_SSL = YesPlease
-	NO_LIBGEN_H = YesPlease
-	NO_POLL = YesPlease
-	NO_SYMLINK_HEAD = YesPlease
-	NO_IPV6 = YesPlease
-	NO_UNIX_SOCKETS = YesPlease
-	NO_SETENV = YesPlease
-	NO_UNSETENV = YesPlease
-	NO_STRCASESTR = YesPlease
-	NO_STRLCPY = YesPlease
-	NO_STRTOK_R = YesPlease
-	NO_FNMATCH = YesPlease
-	NO_MEMMEM = YesPlease
-	# NEEDS_LIBICONV = YesPlease
-	NO_ICONV = YesPlease
-	NO_STRTOUMAX = YesPlease
-	NO_STRTOULL = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_MKSTEMPS = YesPlease
-	SNPRINTF_RETURNS_BOGUS = YesPlease
-	NO_SVN_TESTS = YesPlease
-	NO_PERL_MAKEMAKER = YesPlease
-	RUNTIME_PREFIX = YesPlease
-	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
-	NO_NSEC = YesPlease
-	USE_WIN32_MMAP = YesPlease
-	# USE_NED_ALLOCATOR = YesPlease
-	UNRELIABLE_FSTAT = UnfortunatelyYes
-	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
-	NO_REGEX = YesPlease
-	NO_CURL = YesPlease
-	NO_PYTHON = YesPlease
-	BLK_SHA1 = YesPlease
-	NO_POSIX_GOODIES = UnfortunatelyYes
-	NATIVE_CRLF = YesPlease
-	DEFAULT_HELP_FORMAT = html
-
-	CC = compat/vcbuild/scripts/clink.pl
-	AR = compat/vcbuild/scripts/lib.pl
-	CFLAGS =
-	BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
-	COMPAT_OBJS = compat/msvc.o compat/winansi.o \
-		compat/win32/pthread.o compat/win32/syslog.o \
-		compat/win32/dirent.o
-	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
-	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
-	EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
-	PTHREAD_LIBS =
-	lib =
-ifndef DEBUG
-	BASIC_CFLAGS += -GL -Os -MT
-	BASIC_LDFLAGS += -LTCG
-	AR += -LTCG
-else
-	BASIC_CFLAGS += -Zi -MTd
-endif
-	X = .exe
-endif
-ifeq ($(uname_S),Interix)
-	NO_INITGROUPS = YesPlease
-	NO_IPV6 = YesPlease
-	NO_MEMMEM = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_STRTOUMAX = YesPlease
-	NO_NSEC = YesPlease
-	NO_MKSTEMPS = YesPlease
-	ifeq ($(uname_R),3.5)
-		NO_INET_NTOP = YesPlease
-		NO_INET_PTON = YesPlease
-		NO_SOCKADDR_STORAGE = YesPlease
-		NO_FNMATCH_CASEFOLD = YesPlease
-	endif
-	ifeq ($(uname_R),5.2)
-		NO_INET_NTOP = YesPlease
-		NO_INET_PTON = YesPlease
-		NO_SOCKADDR_STORAGE = YesPlease
-		NO_FNMATCH_CASEFOLD = YesPlease
-	endif
-endif
-ifeq ($(uname_S),Minix)
-	NO_IPV6 = YesPlease
-	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
-	NO_NSEC = YesPlease
-	NEEDS_LIBGEN =
-	NEEDS_CRYPTO_WITH_SSL = YesPlease
-	NEEDS_IDN_WITH_CURL = YesPlease
-	NEEDS_SSL_WITH_CURL = YesPlease
-	NEEDS_RESOLV =
-	NO_HSTRERROR = YesPlease
-	NO_MMAP = YesPlease
-	NO_CURL =
-	NO_EXPAT =
-endif
-ifeq ($(uname_S),NONSTOP_KERNEL)
-	# Needs some C99 features, "inline" is just one of them.
-	# INLINE='' would just replace one set of warnings with another and
-	# still not compile in c89 mode, due to non-const array initializations.
-	CC = cc -c99
-	# Disable all optimization, seems to result in bad code, with -O or -O2
-	# or even -O1 (default), /usr/local/libexec/git-core/git-pack-objects
-	# abends on "git push". Needs more investigation.
-	CFLAGS = -g -O0
-	# We'd want it to be here.
-	prefix = /usr/local
-	# Our's are in ${prefix}/bin (perl might also be in /usr/bin/perl).
-	PERL_PATH = ${prefix}/bin/perl
-	PYTHON_PATH = ${prefix}/bin/python
-
-	# As detected by './configure'.
-	# Missdetected, hence commented out, see below.
-	#NO_CURL = YesPlease
-	# Added manually, see above.
-	NEEDS_SSL_WITH_CURL = YesPlease
-	HAVE_LIBCHARSET_H = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	NEEDS_LIBINTL_BEFORE_LIBICONV = YesPlease
-	NO_SYS_SELECT_H = UnfortunatelyYes
-	NO_D_TYPE_IN_DIRENT = YesPlease
-	NO_HSTRERROR = YesPlease
-	NO_STRCASESTR = YesPlease
-	NO_FNMATCH_CASEFOLD = YesPlease
-	NO_MEMMEM = YesPlease
-	NO_STRLCPY = YesPlease
-	NO_SETENV = YesPlease
-	NO_UNSETENV = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_MKSTEMPS = YesPlease
-	# Currently libiconv-1.9.1.
-	OLD_ICONV = UnfortunatelyYes
-	NO_REGEX = YesPlease
-	NO_PTHREADS = UnfortunatelyYes
-
-	# Not detected (nor checked for) by './configure'.
-	# We don't have SA_RESTART on NonStop, unfortunalety.
-	COMPAT_CFLAGS += -DSA_RESTART=0
-	# Apparently needed in compat/fnmatch/fnmatch.c.
-	COMPAT_CFLAGS += -DHAVE_STRING_H=1
-	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
-	NO_NSEC = YesPlease
-	NO_PREAD = YesPlease
-	NO_MMAP = YesPlease
-	NO_POLL = YesPlease
-	NO_INTPTR_T = UnfortunatelyYes
-	# Bug report 10-120822-4477 submitted to HP NonStop development.
-	MKDIR_WO_TRAILING_SLASH = YesPlease
-	# RFE 10-120912-4693 submitted to HP NonStop development.
-	NO_SETITIMER = UnfortunatelyYes
-endif
-ifneq (,$(findstring MINGW,$(uname_S)))
-	pathsep = ;
-	NO_PREAD = YesPlease
-	NEEDS_CRYPTO_WITH_SSL = YesPlease
-	NO_LIBGEN_H = YesPlease
-	NO_POLL = YesPlease
-	NO_SYMLINK_HEAD = YesPlease
-	NO_UNIX_SOCKETS = YesPlease
-	NO_SETENV = YesPlease
-	NO_UNSETENV = YesPlease
-	NO_STRCASESTR = YesPlease
-	NO_STRLCPY = YesPlease
-	NO_STRTOK_R = YesPlease
-	NO_FNMATCH = YesPlease
-	NO_MEMMEM = YesPlease
-	NEEDS_LIBICONV = YesPlease
-	OLD_ICONV = YesPlease
-	NO_STRTOUMAX = YesPlease
-	NO_MKDTEMP = YesPlease
-	NO_MKSTEMPS = YesPlease
-	NO_SVN_TESTS = YesPlease
-	NO_PERL_MAKEMAKER = YesPlease
-	RUNTIME_PREFIX = YesPlease
-	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
-	NO_NSEC = YesPlease
-	USE_WIN32_MMAP = YesPlease
-	USE_NED_ALLOCATOR = YesPlease
-	UNRELIABLE_FSTAT = UnfortunatelyYes
-	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
-	NO_REGEX = YesPlease
-	NO_PYTHON = YesPlease
-	BLK_SHA1 = YesPlease
-	ETAGS_TARGET = ETAGS
-	NO_INET_PTON = YesPlease
-	NO_INET_NTOP = YesPlease
-	NO_POSIX_GOODIES = UnfortunatelyYes
-	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
-	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
-	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
-		compat/win32/pthread.o compat/win32/syslog.o \
-		compat/win32/dirent.o
-	EXTLIBS += -lws2_32
-	PTHREAD_LIBS =
-	X = .exe
-	SPARSE_FLAGS = -Wno-one-bit-signed-bitfield
-ifneq (,$(wildcard ../THIS_IS_MSYSGIT))
-	htmldir=doc/git/html/
-	prefix =
-	INSTALL = /bin/install
-	EXTLIBS += /mingw/lib/libz.a
-	NO_R_TO_GCC_LINKER = YesPlease
-	INTERNAL_QSORT = YesPlease
-	HAVE_LIBCHARSET_H = YesPlease
-else
-	NO_CURL = YesPlease
-endif
-endif
-
+-include config.mak.defaults
 -include config.mak.autogen
 -include config.mak
 
diff --git a/config.mak.defaults b/config.mak.defaults
new file mode 100644
index 0000000..13f185b
--- /dev/null
+++ b/config.mak.defaults
@@ -0,0 +1,520 @@
+#
+# Platform specific tweaks
+#
+
+uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
+uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
+uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
+uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
+uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
+
+ifdef MSVC
+	# avoid the MingW and Cygwin configuration sections
+	uname_S := Windows
+	uname_O := Windows
+endif
+
+# We choose to avoid "if .. else if .. else .. endif endif"
+# because maintaining the nesting to match is a pain.  If
+# we had "elif" things would have been much nicer...
+
+ifeq ($(uname_M),x86_64)
+	XDL_FAST_HASH = YesPlease
+endif
+ifeq ($(uname_S),OSF1)
+	# Need this for u_short definitions et al
+	BASIC_CFLAGS += -D_OSF_SOURCE
+	SOCKLEN_T = int
+	NO_STRTOULL = YesPlease
+	NO_NSEC = YesPlease
+endif
+ifeq ($(uname_S),Linux)
+	NO_STRLCPY = YesPlease
+	NO_MKSTEMPS = YesPlease
+	HAVE_PATHS_H = YesPlease
+	LIBC_CONTAINS_LIBINTL = YesPlease
+	HAVE_DEV_TTY = YesPlease
+endif
+ifeq ($(uname_S),GNU/kFreeBSD)
+	NO_STRLCPY = YesPlease
+	NO_MKSTEMPS = YesPlease
+	HAVE_PATHS_H = YesPlease
+	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
+	LIBC_CONTAINS_LIBINTL = YesPlease
+endif
+ifeq ($(uname_S),UnixWare)
+	CC = cc
+	NEEDS_SOCKET = YesPlease
+	NEEDS_NSL = YesPlease
+	NEEDS_SSL_WITH_CRYPTO = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	SHELL_PATH = /usr/local/bin/bash
+	NO_IPV6 = YesPlease
+	NO_HSTRERROR = YesPlease
+	NO_MKSTEMPS = YesPlease
+	BASIC_CFLAGS += -Kthread
+	BASIC_CFLAGS += -I/usr/local/include
+	BASIC_LDFLAGS += -L/usr/local/lib
+	INSTALL = ginstall
+	TAR = gtar
+	NO_STRCASESTR = YesPlease
+	NO_MEMMEM = YesPlease
+endif
+ifeq ($(uname_S),SCO_SV)
+	ifeq ($(uname_R),3.2)
+		CFLAGS = -O2
+	endif
+	ifeq ($(uname_R),5)
+		CC = cc
+		BASIC_CFLAGS += -Kthread
+	endif
+	NEEDS_SOCKET = YesPlease
+	NEEDS_NSL = YesPlease
+	NEEDS_SSL_WITH_CRYPTO = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	SHELL_PATH = /usr/bin/bash
+	NO_IPV6 = YesPlease
+	NO_HSTRERROR = YesPlease
+	NO_MKSTEMPS = YesPlease
+	BASIC_CFLAGS += -I/usr/local/include
+	BASIC_LDFLAGS += -L/usr/local/lib
+	NO_STRCASESTR = YesPlease
+	NO_MEMMEM = YesPlease
+	INSTALL = ginstall
+	TAR = gtar
+endif
+ifeq ($(uname_S),Darwin)
+	NEEDS_CRYPTO_WITH_SSL = YesPlease
+	NEEDS_SSL_WITH_CRYPTO = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
+		OLD_ICONV = UnfortunatelyYes
+	endif
+	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
+		NO_STRLCPY = YesPlease
+	endif
+	NO_MEMMEM = YesPlease
+	USE_ST_TIMESPEC = YesPlease
+	HAVE_DEV_TTY = YesPlease
+	COMPAT_OBJS += compat/precompose_utf8.o
+	BASIC_CFLAGS += -DPRECOMPOSE_UNICODE
+endif
+ifeq ($(uname_S),SunOS)
+	NEEDS_SOCKET = YesPlease
+	NEEDS_NSL = YesPlease
+	SHELL_PATH = /bin/bash
+	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
+	NO_STRCASESTR = YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_REGEX = YesPlease
+	NO_FNMATCH_CASEFOLD = YesPlease
+	NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
+	HAVE_DEV_TTY = YesPlease
+	ifeq ($(uname_R),5.6)
+		SOCKLEN_T = int
+		NO_HSTRERROR = YesPlease
+		NO_IPV6 = YesPlease
+		NO_SOCKADDR_STORAGE = YesPlease
+		NO_UNSETENV = YesPlease
+		NO_SETENV = YesPlease
+		NO_STRLCPY = YesPlease
+		NO_STRTOUMAX = YesPlease
+		GIT_TEST_CMP = cmp
+	endif
+	ifeq ($(uname_R),5.7)
+		NEEDS_RESOLV = YesPlease
+		NO_IPV6 = YesPlease
+		NO_SOCKADDR_STORAGE = YesPlease
+		NO_UNSETENV = YesPlease
+		NO_SETENV = YesPlease
+		NO_STRLCPY = YesPlease
+		NO_STRTOUMAX = YesPlease
+		GIT_TEST_CMP = cmp
+	endif
+	ifeq ($(uname_R),5.8)
+		NO_UNSETENV = YesPlease
+		NO_SETENV = YesPlease
+		NO_STRTOUMAX = YesPlease
+		GIT_TEST_CMP = cmp
+	endif
+	ifeq ($(uname_R),5.9)
+		NO_UNSETENV = YesPlease
+		NO_SETENV = YesPlease
+		NO_STRTOUMAX = YesPlease
+		GIT_TEST_CMP = cmp
+	endif
+	INSTALL = /usr/ucb/install
+	TAR = gtar
+	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
+endif
+ifeq ($(uname_O),Cygwin)
+	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
+		NO_D_TYPE_IN_DIRENT = YesPlease
+		NO_D_INO_IN_DIRENT = YesPlease
+		NO_STRCASESTR = YesPlease
+		NO_MEMMEM = YesPlease
+		NO_MKSTEMPS = YesPlease
+		NO_SYMLINK_HEAD = YesPlease
+		NO_IPV6 = YesPlease
+		OLD_ICONV = UnfortunatelyYes
+	endif
+	NO_THREAD_SAFE_PREAD = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
+	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
+	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	# There are conflicting reports about this.
+	# On some boxes NO_MMAP is needed, and not so elsewhere.
+	# Try commenting this out if you suspect MMAP is more efficient
+	NO_MMAP = YesPlease
+	X = .exe
+	COMPAT_OBJS += compat/cygwin.o
+	UNRELIABLE_FSTAT = UnfortunatelyYes
+	SPARSE_FLAGS = -isystem /usr/include/w32api -Wno-one-bit-signed-bitfield
+endif
+ifeq ($(uname_S),FreeBSD)
+	NEEDS_LIBICONV = YesPlease
+	OLD_ICONV = YesPlease
+	NO_MEMMEM = YesPlease
+	BASIC_CFLAGS += -I/usr/local/include
+	BASIC_LDFLAGS += -L/usr/local/lib
+	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
+	USE_ST_TIMESPEC = YesPlease
+	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
+		PTHREAD_LIBS = -pthread
+		NO_UINTMAX_T = YesPlease
+		NO_STRTOUMAX = YesPlease
+	endif
+	PYTHON_PATH = /usr/local/bin/python
+	HAVE_PATHS_H = YesPlease
+endif
+ifeq ($(uname_S),OpenBSD)
+	NO_STRCASESTR = YesPlease
+	NO_MEMMEM = YesPlease
+	USE_ST_TIMESPEC = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	BASIC_CFLAGS += -I/usr/local/include
+	BASIC_LDFLAGS += -L/usr/local/lib
+	HAVE_PATHS_H = YesPlease
+endif
+ifeq ($(uname_S),NetBSD)
+	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
+		NEEDS_LIBICONV = YesPlease
+	endif
+	BASIC_CFLAGS += -I/usr/pkg/include
+	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
+	USE_ST_TIMESPEC = YesPlease
+	NO_MKSTEMPS = YesPlease
+	HAVE_PATHS_H = YesPlease
+endif
+ifeq ($(uname_S),AIX)
+	DEFAULT_PAGER = more
+	NO_STRCASESTR=YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_STRLCPY = YesPlease
+	NO_NSEC = YesPlease
+	FREAD_READS_DIRECTORIES = UnfortunatelyYes
+	INTERNAL_QSORT = UnfortunatelyYes
+	NEEDS_LIBICONV=YesPlease
+	BASIC_CFLAGS += -D_LARGE_FILES
+	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
+		NO_PTHREADS = YesPlease
+	else
+		PTHREAD_LIBS = -lpthread
+	endif
+	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
+		INLINE=''
+	endif
+	GIT_TEST_CMP = cmp
+endif
+ifeq ($(uname_S),GNU)
+	# GNU/Hurd
+	NO_STRLCPY=YesPlease
+	NO_MKSTEMPS = YesPlease
+	HAVE_PATHS_H = YesPlease
+	LIBC_CONTAINS_LIBINTL = YesPlease
+endif
+ifeq ($(uname_S),IRIX)
+	NO_SETENV = YesPlease
+	NO_UNSETENV = YesPlease
+	NO_STRCASESTR = YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_MKDTEMP = YesPlease
+	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
+	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
+	# git dies with a segmentation fault when trying to access the first
+	# entry of a reflog.  The conservative choice is made to always set
+	# NO_MMAP.  If you suspect that your compiler is not affected by this
+	# issue, comment out the NO_MMAP statement.
+	NO_MMAP = YesPlease
+	NO_REGEX = YesPlease
+	NO_FNMATCH_CASEFOLD = YesPlease
+	SNPRINTF_RETURNS_BOGUS = YesPlease
+	SHELL_PATH = /usr/gnu/bin/bash
+	NEEDS_LIBGEN = YesPlease
+endif
+ifeq ($(uname_S),IRIX64)
+	NO_SETENV=YesPlease
+	NO_UNSETENV = YesPlease
+	NO_STRCASESTR=YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_MKDTEMP = YesPlease
+	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
+	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
+	# git dies with a segmentation fault when trying to access the first
+	# entry of a reflog.  The conservative choice is made to always set
+	# NO_MMAP.  If you suspect that your compiler is not affected by this
+	# issue, comment out the NO_MMAP statement.
+	NO_MMAP = YesPlease
+	NO_REGEX = YesPlease
+	NO_FNMATCH_CASEFOLD = YesPlease
+	SNPRINTF_RETURNS_BOGUS = YesPlease
+	SHELL_PATH=/usr/gnu/bin/bash
+	NEEDS_LIBGEN = YesPlease
+endif
+ifeq ($(uname_S),HP-UX)
+	INLINE = __inline
+	NO_IPV6=YesPlease
+	NO_SETENV=YesPlease
+	NO_STRCASESTR=YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_STRLCPY = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_UNSETENV = YesPlease
+	NO_HSTRERROR = YesPlease
+	NO_SYS_SELECT_H = YesPlease
+	NO_FNMATCH_CASEFOLD = YesPlease
+	SNPRINTF_RETURNS_BOGUS = YesPlease
+	NO_NSEC = YesPlease
+	ifeq ($(uname_R),B.11.00)
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+	endif
+	ifeq ($(uname_R),B.10.20)
+		# Override HP-UX 11.x setting:
+		INLINE =
+		SOCKLEN_T = size_t
+		NO_PREAD = YesPlease
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+	endif
+	GIT_TEST_CMP = cmp
+endif
+ifeq ($(uname_S),Windows)
+	GIT_VERSION := $(GIT_VERSION).MSVC
+	pathsep = ;
+	NO_PREAD = YesPlease
+	NEEDS_CRYPTO_WITH_SSL = YesPlease
+	NO_LIBGEN_H = YesPlease
+	NO_POLL = YesPlease
+	NO_SYMLINK_HEAD = YesPlease
+	NO_IPV6 = YesPlease
+	NO_UNIX_SOCKETS = YesPlease
+	NO_SETENV = YesPlease
+	NO_UNSETENV = YesPlease
+	NO_STRCASESTR = YesPlease
+	NO_STRLCPY = YesPlease
+	NO_STRTOK_R = YesPlease
+	NO_FNMATCH = YesPlease
+	NO_MEMMEM = YesPlease
+	# NEEDS_LIBICONV = YesPlease
+	NO_ICONV = YesPlease
+	NO_STRTOUMAX = YesPlease
+	NO_STRTOULL = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_MKSTEMPS = YesPlease
+	SNPRINTF_RETURNS_BOGUS = YesPlease
+	NO_SVN_TESTS = YesPlease
+	NO_PERL_MAKEMAKER = YesPlease
+	RUNTIME_PREFIX = YesPlease
+	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	NO_NSEC = YesPlease
+	USE_WIN32_MMAP = YesPlease
+	# USE_NED_ALLOCATOR = YesPlease
+	UNRELIABLE_FSTAT = UnfortunatelyYes
+	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
+	NO_REGEX = YesPlease
+	NO_CURL = YesPlease
+	NO_PYTHON = YesPlease
+	BLK_SHA1 = YesPlease
+	NO_POSIX_GOODIES = UnfortunatelyYes
+	NATIVE_CRLF = YesPlease
+	DEFAULT_HELP_FORMAT = html
+
+	CC = compat/vcbuild/scripts/clink.pl
+	AR = compat/vcbuild/scripts/lib.pl
+	CFLAGS =
+	BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
+	COMPAT_OBJS = compat/msvc.o compat/winansi.o \
+		compat/win32/pthread.o compat/win32/syslog.o \
+		compat/win32/dirent.o
+	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
+	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
+	EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
+	PTHREAD_LIBS =
+	lib =
+ifndef DEBUG
+	BASIC_CFLAGS += -GL -Os -MT
+	BASIC_LDFLAGS += -LTCG
+	AR += -LTCG
+else
+	BASIC_CFLAGS += -Zi -MTd
+endif
+	X = .exe
+endif
+ifeq ($(uname_S),Interix)
+	NO_INITGROUPS = YesPlease
+	NO_IPV6 = YesPlease
+	NO_MEMMEM = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_STRTOUMAX = YesPlease
+	NO_NSEC = YesPlease
+	NO_MKSTEMPS = YesPlease
+	ifeq ($(uname_R),3.5)
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+		NO_SOCKADDR_STORAGE = YesPlease
+		NO_FNMATCH_CASEFOLD = YesPlease
+	endif
+	ifeq ($(uname_R),5.2)
+		NO_INET_NTOP = YesPlease
+		NO_INET_PTON = YesPlease
+		NO_SOCKADDR_STORAGE = YesPlease
+		NO_FNMATCH_CASEFOLD = YesPlease
+	endif
+endif
+ifeq ($(uname_S),Minix)
+	NO_IPV6 = YesPlease
+	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	NO_NSEC = YesPlease
+	NEEDS_LIBGEN =
+	NEEDS_CRYPTO_WITH_SSL = YesPlease
+	NEEDS_IDN_WITH_CURL = YesPlease
+	NEEDS_SSL_WITH_CURL = YesPlease
+	NEEDS_RESOLV =
+	NO_HSTRERROR = YesPlease
+	NO_MMAP = YesPlease
+	NO_CURL =
+	NO_EXPAT =
+endif
+ifeq ($(uname_S),NONSTOP_KERNEL)
+	# Needs some C99 features, "inline" is just one of them.
+	# INLINE='' would just replace one set of warnings with another and
+	# still not compile in c89 mode, due to non-const array initializations.
+	CC = cc -c99
+	# Disable all optimization, seems to result in bad code, with -O or -O2
+	# or even -O1 (default), /usr/local/libexec/git-core/git-pack-objects
+	# abends on "git push". Needs more investigation.
+	CFLAGS = -g -O0
+	# We'd want it to be here.
+	prefix = /usr/local
+	# Our's are in ${prefix}/bin (perl might also be in /usr/bin/perl).
+	PERL_PATH = ${prefix}/bin/perl
+	PYTHON_PATH = ${prefix}/bin/python
+
+	# As detected by './configure'.
+	# Missdetected, hence commented out, see below.
+	#NO_CURL = YesPlease
+	# Added manually, see above.
+	NEEDS_SSL_WITH_CURL = YesPlease
+	HAVE_LIBCHARSET_H = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	NEEDS_LIBINTL_BEFORE_LIBICONV = YesPlease
+	NO_SYS_SELECT_H = UnfortunatelyYes
+	NO_D_TYPE_IN_DIRENT = YesPlease
+	NO_HSTRERROR = YesPlease
+	NO_STRCASESTR = YesPlease
+	NO_FNMATCH_CASEFOLD = YesPlease
+	NO_MEMMEM = YesPlease
+	NO_STRLCPY = YesPlease
+	NO_SETENV = YesPlease
+	NO_UNSETENV = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_MKSTEMPS = YesPlease
+	# Currently libiconv-1.9.1.
+	OLD_ICONV = UnfortunatelyYes
+	NO_REGEX = YesPlease
+	NO_PTHREADS = UnfortunatelyYes
+
+	# Not detected (nor checked for) by './configure'.
+	# We don't have SA_RESTART on NonStop, unfortunalety.
+	COMPAT_CFLAGS += -DSA_RESTART=0
+	# Apparently needed in compat/fnmatch/fnmatch.c.
+	COMPAT_CFLAGS += -DHAVE_STRING_H=1
+	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	NO_NSEC = YesPlease
+	NO_PREAD = YesPlease
+	NO_MMAP = YesPlease
+	NO_POLL = YesPlease
+	NO_INTPTR_T = UnfortunatelyYes
+	# Bug report 10-120822-4477 submitted to HP NonStop development.
+	MKDIR_WO_TRAILING_SLASH = YesPlease
+	# RFE 10-120912-4693 submitted to HP NonStop development.
+	NO_SETITIMER = UnfortunatelyYes
+endif
+ifneq (,$(findstring MINGW,$(uname_S)))
+	pathsep = ;
+	NO_PREAD = YesPlease
+	NEEDS_CRYPTO_WITH_SSL = YesPlease
+	NO_LIBGEN_H = YesPlease
+	NO_POLL = YesPlease
+	NO_SYMLINK_HEAD = YesPlease
+	NO_UNIX_SOCKETS = YesPlease
+	NO_SETENV = YesPlease
+	NO_UNSETENV = YesPlease
+	NO_STRCASESTR = YesPlease
+	NO_STRLCPY = YesPlease
+	NO_STRTOK_R = YesPlease
+	NO_FNMATCH = YesPlease
+	NO_MEMMEM = YesPlease
+	NEEDS_LIBICONV = YesPlease
+	OLD_ICONV = YesPlease
+	NO_STRTOUMAX = YesPlease
+	NO_MKDTEMP = YesPlease
+	NO_MKSTEMPS = YesPlease
+	NO_SVN_TESTS = YesPlease
+	NO_PERL_MAKEMAKER = YesPlease
+	RUNTIME_PREFIX = YesPlease
+	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	NO_NSEC = YesPlease
+	USE_WIN32_MMAP = YesPlease
+	USE_NED_ALLOCATOR = YesPlease
+	UNRELIABLE_FSTAT = UnfortunatelyYes
+	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
+	NO_REGEX = YesPlease
+	NO_PYTHON = YesPlease
+	BLK_SHA1 = YesPlease
+	ETAGS_TARGET = ETAGS
+	NO_INET_PTON = YesPlease
+	NO_INET_NTOP = YesPlease
+	NO_POSIX_GOODIES = UnfortunatelyYes
+	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
+	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
+	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
+		compat/win32/pthread.o compat/win32/syslog.o \
+		compat/win32/dirent.o
+	EXTLIBS += -lws2_32
+	PTHREAD_LIBS =
+	X = .exe
+	SPARSE_FLAGS = -Wno-one-bit-signed-bitfield
+ifneq (,$(wildcard ../THIS_IS_MSYSGIT))
+	htmldir=doc/git/html/
+	prefix =
+	INSTALL = /bin/install
+	EXTLIBS += /mingw/lib/libz.a
+	NO_R_TO_GCC_LINKER = YesPlease
+	INTERNAL_QSORT = YesPlease
+	HAVE_LIBCHARSET_H = YesPlease
+else
+	NO_CURL = YesPlease
+endif
+endif
+
Junio C Hamano· Oct 7, 2012, 23:25 UTC · re: Jeff King · lore

Re: [PATCH] Allow generating a non-default set of documentation

Jeff King <peff@peff.net> writes:
Show 12 quoted lines
> On Sun, Oct 07, 2012 at 07:07:03PM -0400, Jeff King wrote:
>
>> Would it make sense to pull all of our platform-specific tweaks out into
>> a config.mak.platform (right before config.mak.autogen)? That would be
>> less surprising for cases like this, and I think it would make the
>> Makefile a lot more readable.
>
> Something like the patch below. Note that you could then base even more
> decisions on the existing DEFAULT_HELP_FORMAT that is already in the
> Makefile (and after my patch, in config.mak.defaults). For example, when
> it is set to html, make both the default build and install targets in
> Documentation/Makefile do html instead of man.

Yeah, modulo that the "defaults" is tracked and does not have to have the dash before "include" (it is an error if it is missing, no?). It may want to be named with s/defaults/autodetect/, though.

Show 10 quoted lines
> diff --git a/Makefile b/Makefile
> index e3e3cd5..c00fd32 100644
> --- a/Makefile
> +++ b/Makefile
> ...
> -endif
> -
> +-include config.mak.defaults
>  -include config.mak.autogen
>  -include config.mak
Jeff King· Oct 7, 2012, 23:29 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

On Sun, Oct 07, 2012 at 04:25:58PM -0700, Junio C Hamano wrote:
Show 14 quoted lines
> Yeah, modulo that the "defaults" is tracked and does not have to
> have the dash before "include" (it is an error if it is missing,
> no?).  It may want to be named with s/defaults/autodetect/, though.
> 
> > diff --git a/Makefile b/Makefile
> > index e3e3cd5..c00fd32 100644
> > --- a/Makefile
> > +++ b/Makefile
> > ...
> > -endif
> > -
> > +-include config.mak.defaults
> >  -include config.mak.autogen
> >  -include config.mak

Yeah, sorry, mindless copying on my part from the lines below. It clearly should not have the "-".

I'm fine with something besides "defaults". I meant it to be "these are the config defaults before you tweak them", but yeah, it is more like "these are the config options we picked up from uname".

-Peff
Junio C Hamano· Oct 7, 2012, 23:44 UTC · re: Jeff King · lore

Re: [PATCH] Allow generating a non-default set of documentation

Jeff King <peff@peff.net> writes:
Show 23 quoted lines
> On Sun, Oct 07, 2012 at 04:25:58PM -0700, Junio C Hamano wrote:
>
>> Yeah, modulo that the "defaults" is tracked and does not have to
>> have the dash before "include" (it is an error if it is missing,
>> no?).  It may want to be named with s/defaults/autodetect/, though.
>> 
>> > diff --git a/Makefile b/Makefile
>> > index e3e3cd5..c00fd32 100644
>> > --- a/Makefile
>> > +++ b/Makefile
>> > ...
>> > -endif
>> > -
>> > +-include config.mak.defaults
>> >  -include config.mak.autogen
>> >  -include config.mak
>
> Yeah, sorry, mindless copying on my part from the lines below. It
> clearly should not have the "-".
>
> I'm fine with something besides "defaults". I meant it to be "these are
> the config defaults before you tweak them", but yeah, it is more like
> "these are the config options we picked up from uname".

Let's put this on hold in the "possibly a good direction to go in" pile, and defer it to post 1.8.0; I haven't even looked at (and do not plan to before the release) these "auto-detect" bits are all safe to be included in Makefiles in subdirectories.

Junio C Hamano· Oct 8, 2012, 16:33 UTC · re: Junio C Hamano · lore

Re: [PATCH] Allow generating a non-default set of documentation

Junio C Hamano <gitster@pobox.com> writes:
Show 30 quoted lines
> Jeff King <peff@peff.net> writes:
>
>> On Sun, Oct 07, 2012 at 04:25:58PM -0700, Junio C Hamano wrote:
>>
>>> Yeah, modulo that the "defaults" is tracked and does not have to
>>> have the dash before "include" (it is an error if it is missing,
>>> no?).  It may want to be named with s/defaults/autodetect/, though.
>>> 
>>> > diff --git a/Makefile b/Makefile
>>> > index e3e3cd5..c00fd32 100644
>>> > --- a/Makefile
>>> > +++ b/Makefile
>>> > ...
>>> > -endif
>>> > -
>>> > +-include config.mak.defaults
>>> >  -include config.mak.autogen
>>> >  -include config.mak
>>
>> Yeah, sorry, mindless copying on my part from the lines below. It
>> clearly should not have the "-".
>>
>> I'm fine with something besides "defaults". I meant it to be "these are
>> the config defaults before you tweak them", but yeah, it is more like
>> "these are the config options we picked up from uname".
>
> Let's put this on hold in the "possibly a good direction to go in"
> pile, and defer it to post 1.8.0; I haven't even looked at (and do
> not plan to before the release) these "auto-detect" bits are all
> safe to be included in Makefiles in subdirectories.

Oh by the way, by "this (on hold)" I meant not just your "move the default-by-platform to a separate include", but the whole "a platform may not want manpages" topic. The patch posted was merely me wanting to format git-push.txt and nothing else when sanity checking a patch to that file, and it is insufficient for the purpose of "a platform may not want manpages" without a matching change to the install target.

Even though your "include" thing was primarily done to make it easier to include it from Makefiles in subdirectories, I very much like it even without that benefit. The change makes it clear that there is another platform specific bit after '-include config.mak' (yes, I am looking at you, Darwin), which is a huge eyesore we would want to do something about.

← back to recent threads