git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* bug: git-sh-setup should not be in $PATH
@ 2006-12-06 12:14 Han-Wen Nienhuys
  2006-12-06 12:23 ` Johannes Schindelin
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 12:14 UTC (permalink / raw)
  To: git


Hello,

I often install tools locally so I can run SVN/CVS/etc versions 
in my own account. To do this, I install into

  $HOME/usr/pkg/PACKAGE

and a script that generates scripts in $HOME/usr/bin/ (which is in my $PATH)
like

 #!/bin/sh

 exec /home/lilydev/usr/pkg/git/bin/git-prune "$@"
 # generated: update-pkgs 


this breaks with git-sh-setup; all sh scripts are broken with this
setup.

git-sh-setup isn't a 'normal' binary, in that it should be called by
bash only and not run in a subshell. Therefore I propose that it

- be installed in <prefix>/share/git/

- be invoked with an explicit path, i.e.

  . <prefix>/share/git/



--
 Han-Wen Nienhuys - hanwen@xs4all.nl - http://www.xs4all.nl/~hanwen

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 12:14 bug: git-sh-setup should not be in $PATH Han-Wen Nienhuys
@ 2006-12-06 12:23 ` Johannes Schindelin
  2006-12-06 12:34   ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Johannes Schindelin @ 2006-12-06 12:23 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Hi,

On Wed, 6 Dec 2006, Han-Wen Nienhuys wrote:

> I often install tools locally so I can run SVN/CVS/etc versions 
> in my own account. To do this, I install into
> 
>   $HOME/usr/pkg/PACKAGE

Why not just set

$ export GIT_EXEC_PATH=$HOME/usr/pkg/git
$ export PATH=$PATH:$GIT_EXEC_PATH

?

Ciao,

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 12:23 ` Johannes Schindelin
@ 2006-12-06 12:34   ` Han-Wen Nienhuys
  2006-12-06 12:56     ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 12:34 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin escreveu:
> Hi,
> 
> On Wed, 6 Dec 2006, Han-Wen Nienhuys wrote:
> 
>> I often install tools locally so I can run SVN/CVS/etc versions 
>> in my own account. To do this, I install into
>>
>>   $HOME/usr/pkg/PACKAGE
> 
> Why not just set
> 
> $ export GIT_EXEC_PATH=$HOME/usr/pkg/git
> $ export PATH=$PATH:$GIT_EXEC_PATH
> 
> ?

Because it requires brain cycles from my part.  I rather spend those
constructively.

GIT is the only package I've seen in a long time that breaks this
setup.

Here is the patch that I proposed


From 988813912c4c7b310c489bfffa1b81e2663b7b6f Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Wed, 6 Dec 2006 13:27:16 +0100
Subject: [PATCH] Install git-sh-setup.sh into $(prefix)/share/git-core.  Call with
explicit path.

Signed-off-by: Han-Wen Nienhuys <hanwen@xs4all.nl>
---
 Makefile            |   10 ++++++++--
 git-am.sh           |    2 +-
 git-applymbox.sh    |    2 +-
 git-applypatch.sh   |    2 +-
 git-bisect.sh       |    2 +-
 git-checkout.sh     |    2 +-
 git-clean.sh        |    2 +-
 git-commit.sh       |    2 +-
 git-fetch.sh        |    2 +-
 git-instaweb.sh     |    2 +-
 git-lost-found.sh   |    2 +-
 git-merge.sh        |    2 +-
 git-pull.sh         |    2 +-
 git-quiltimport.sh  |    2 +-
 git-rebase.sh       |    2 +-
 git-repack.sh       |    2 +-
 git-request-pull.sh |    2 +-
 git-reset.sh        |    2 +-
 git-resolve.sh      |    2 +-
 git-revert.sh       |    2 +-
 git-tag.sh          |    2 +-
 git-verify-tag.sh   |    2 +-
 22 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/Makefile b/Makefile
index a1861de..cb9b745 100644
--- a/Makefile
+++ b/Makefile
@@ -116,8 +116,10 @@ STRIP ?= strip
 
 prefix = $(HOME)
 bindir = $(prefix)/bin
+datadir = $(prefix)/share
+GIT_datadir = $(datadir)/git-core
 gitexecdir = $(bindir)
-template_dir = $(prefix)/share/git-core/templates/
+template_dir = $(GIT_datadir)/templates/
 # DESTDIR=
 
 # default configuration for gitweb
@@ -166,7 +168,7 @@ SCRIPT_SH = \
 	git-merge-one-file.sh git-parse-remote.sh \
 	git-pull.sh git-rebase.sh \
 	git-repack.sh git-request-pull.sh git-reset.sh \
-	git-resolve.sh git-revert.sh git-sh-setup.sh \
+	git-resolve.sh git-revert.sh \
 	git-tag.sh git-verify-tag.sh \
 	git-applymbox.sh git-applypatch.sh git-am.sh \
 	git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
@@ -550,6 +552,7 @@ endif
 # Shell quote (do not use $(call) to accommodate ancient setups);
 
 SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
+GIT_datadir_SQ = $(subst ','\'',$(GIT_datadir))
 
 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 bindir_SQ = $(subst ','\'',$(bindir))
@@ -604,6 +607,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+	    -e 's!@@GIT_datadir@@!$(GIT_datadir)!g' \
 	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
 	    $@.sh >$@+
 	chmod +x $@+
@@ -816,6 +820,8 @@ install: all
 			'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X'; \
 	fi
 	$(foreach p,$(BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)
+	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_datadir_SQ)'
+	$(INSTALL) -m755 git-sh-setup.sh '$(DESTDIR_SQ)$(GIT_datadir_SQ)'
 
 install-doc:
 	$(MAKE) -C Documentation install
diff --git a/git-am.sh b/git-am.sh
index afe322b..b9dfcf0 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -5,7 +5,7 @@
 USAGE='[--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way]
   [--interactive] [--whitespace=<option>] <mbox>...
   or, when resuming [--skip | --resolved]'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 git var GIT_COMMITTER_IDENT >/dev/null || exit
 
diff --git a/git-applymbox.sh b/git-applymbox.sh
index 5569fdc..eaab50d 100755
--- a/git-applymbox.sh
+++ b/git-applymbox.sh
@@ -19,7 +19,7 @@
 ## git-am is supposed to be the newer and better tool for this job.
 
 USAGE='[-u] [-k] [-q] [-m] (-c .dotest/<num> | mbox) [signoff]'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 git var GIT_COMMITTER_IDENT >/dev/null || exit
 
diff --git a/git-applypatch.sh b/git-applypatch.sh
index 8df2aee..7ddf5d3 100755
--- a/git-applypatch.sh
+++ b/git-applypatch.sh
@@ -12,7 +12,7 @@
 ##
 
 USAGE='<msg> <patch> <info> [<signoff>]'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 case "$#" in 3|4) ;; *) usage ;; esac
 
diff --git a/git-bisect.sh b/git-bisect.sh
index 6da31e8..6fa92e2 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -10,7 +10,7 @@ git bisect visualize            show bisect status in gitk.
 git bisect replay <logfile>	replay bisection log
 git bisect log			show bisect log.'
 
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 sq() {
 	@@PERL@@ -e '
diff --git a/git-checkout.sh b/git-checkout.sh
index 737abd0..beea113 100755
--- a/git-checkout.sh
+++ b/git-checkout.sh
@@ -2,7 +2,7 @@
 
 USAGE='[-f] [-b <new_branch>] [-m] [<branch>] [<paths>...]'
 SUBDIRECTORY_OK=Sometimes
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 old_name=HEAD
 old=$(git-rev-parse --verify $old_name 2>/dev/null)
diff --git a/git-clean.sh b/git-clean.sh
index 3834323..7a7ce6e 100755
--- a/git-clean.sh
+++ b/git-clean.sh
@@ -13,7 +13,7 @@ LONG_USAGE='Clean untracked files from the working directory
 When optional <paths>... arguments are given, the paths
 affected are further limited to those that match them.'
 SUBDIRECTORY_OK=Yes
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 ignored=
 ignoredonly=
diff --git a/git-commit.sh b/git-commit.sh
index 81c3a0c..5a388f5 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -5,7 +5,7 @@
 
 USAGE='[-a] [-s] [-v] [--no-verify] [-m <message> | -F <logfile> | (-C|-c) <commit>] [-u] [--amend] [-e] [--author <author>] [[-i | -o] <path>...]'
 SUBDIRECTORY_OK=Yes
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 git-rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t
 branch=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD)
diff --git a/git-fetch.sh b/git-fetch.sh
index 4eecf14..efe44ea 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -2,7 +2,7 @@
 #
 
 USAGE='<fetch-options> <repository> <refspec>...'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 . git-parse-remote
 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-instaweb.sh b/git-instaweb.sh
index 16cd351..ae9fbc1 100755
--- a/git-instaweb.sh
+++ b/git-instaweb.sh
@@ -6,7 +6,7 @@ USAGE='[--start] [--stop] [--restart]
   [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
   [--module-path=<path> (for Apache2 only)]'
 
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 case "$GIT_DIR" in
 /*)
diff --git a/git-lost-found.sh b/git-lost-found.sh
index b928f2c..5f612f2 100755
--- a/git-lost-found.sh
+++ b/git-lost-found.sh
@@ -2,7 +2,7 @@
 
 USAGE=''
 SUBDIRECTORY_OK='Yes'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 if [ "$#" != "0" ]
 then
diff --git a/git-merge.sh b/git-merge.sh
index 272f004..07ceaf0 100755
--- a/git-merge.sh
+++ b/git-merge.sh
@@ -5,7 +5,7 @@
 
 USAGE='[-n] [--no-commit] [--squash] [-s <strategy>] [--reflog-action=<action>] [-m=<merge-message>] <commit>+'
 
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 LF='
 '
diff --git a/git-pull.sh b/git-pull.sh
index e23beb6..8c0f292 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -6,7 +6,7 @@
 
 USAGE='[-n | --no-summary] [--no-commit] [-s strategy]... [<fetch-options>] <repo> <head>...'
 LONG_USAGE='Fetch one or more remote refs and merge it/them into the current HEAD.'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 strategy_args= no_summary= no_commit= squash=
 while case "$#,$1" in 0) break ;; *,-*) ;; *) break ;; esac
diff --git a/git-quiltimport.sh b/git-quiltimport.sh
index 10135da..2f1e7b7 100755
--- a/git-quiltimport.sh
+++ b/git-quiltimport.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 USAGE='--dry-run --author <author> --patches </path/to/quilt/patch/directory>'
 SUBDIRECTORY_ON=Yes
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 dry_run=""
 quilt_author=""
diff --git a/git-rebase.sh b/git-rebase.sh
index 25530df..3220291 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -27,7 +27,7 @@ Example:       git-rebase master~1 topic
        /                   -->           /
   D---E---F---G master          D---E---F---G master
 '
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 RESOLVEMSG="
 When you have resolved this problem run \"git rebase --continue\".
diff --git a/git-repack.sh b/git-repack.sh
index f150a55..e85f0b6 100755
--- a/git-repack.sh
+++ b/git-repack.sh
@@ -5,7 +5,7 @@
 
 USAGE='[-a] [-d] [-f] [-l] [-n] [-q] [--window=N] [--depth=N]'
 SUBDIRECTORY_OK='Yes'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 no_update_info= all_into_one= remove_redundant=
 local= quiet= no_reuse_delta= extra=
diff --git a/git-request-pull.sh b/git-request-pull.sh
index 4eacc3a..fd02d55 100755
--- a/git-request-pull.sh
+++ b/git-request-pull.sh
@@ -8,7 +8,7 @@ USAGE='<commit> <url> [<head>]'
 LONG_USAGE='Summarizes the changes since <commit> to the standard output,
 and includes <url> in the message generated.'
 SUBDIRECTORY_OK='Yes'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 revision=$1
 url=$2
diff --git a/git-reset.sh b/git-reset.sh
index 3133b5b..9e3dd5b 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 USAGE='[--mixed | --soft | --hard]  [<commit-ish>]'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 update=
 reset_type=--mixed
diff --git a/git-resolve.sh b/git-resolve.sh
index 36b90e3..4c2d7da 100755
--- a/git-resolve.sh
+++ b/git-resolve.sh
@@ -10,7 +10,7 @@ echo 'WARNING: Please use git-merge or git-pull instead.' >&2
 sleep 2
 
 USAGE='<head> <remote> <merge-message>'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 dropheads() {
 	rm -f -- "$GIT_DIR/MERGE_HEAD" \
diff --git a/git-revert.sh b/git-revert.sh
index 6eab3c7..8a30297 100755
--- a/git-revert.sh
+++ b/git-revert.sh
@@ -18,7 +18,7 @@ case "$0" in
 * )
 	die "What are you talking about?" ;;
 esac
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 no_commit=
 while case "$#" in 0) break ;; esac
diff --git a/git-tag.sh b/git-tag.sh
index d53f94c..a7d6223 100755
--- a/git-tag.sh
+++ b/git-tag.sh
@@ -3,7 +3,7 @@
 
 USAGE='-l [<pattern>] | [-a | -s | -u <key-id>] [-f | -d] [-m <msg>] <tagname> [<head>]'
 SUBDIRECTORY_OK='Yes'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 message_given=
 annotate=
diff --git a/git-verify-tag.sh b/git-verify-tag.sh
index 36f171b..d265150 100755
--- a/git-verify-tag.sh
+++ b/git-verify-tag.sh
@@ -2,7 +2,7 @@
 
 USAGE='<tag>'
 SUBDIRECTORY_OK='Yes'
-. git-sh-setup
+. @@GIT_datadir@@/git-sh-setup.sh
 
 verbose=
 while case $# in 0) break;; esac
-- 
1.4.4.1.gc9922-dirty


-- 

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 12:34   ` Han-Wen Nienhuys
@ 2006-12-06 12:56     ` Jakub Narebski
  2006-12-06 14:16       ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 12:56 UTC (permalink / raw)
  To: git

Han-Wen Nienhuys wrote:

> Subject: [PATCH] Install git-sh-setup.sh into $(prefix)/share/git-core. Call with explicit path.

I like it... but could you check if you don't need to change
config.mak.in accordingly for ./configure script to generate proper
config.mak.autogen?
-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 12:56     ` Jakub Narebski
@ 2006-12-06 14:16       ` Han-Wen Nienhuys
  2006-12-06 14:51         ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 14:16 UTC (permalink / raw)
  To: git

Jakub Narebski escreveu:
> Han-Wen Nienhuys wrote:
> 
>> Subject: [PATCH] Install git-sh-setup.sh into $(prefix)/share/git-core. Call with explicit path.
> 
> I like it... but could you check if you don't need to change
> config.mak.in accordingly for ./configure script to generate proper
> config.mak.autogen?

I couldn't see anything, but while I was looking at it, I also added
support for non-srcdir builds. Can someone with a perl clue look over
the braindamaged messing-around with perl/perl.mak  and figure out why
perl insists

make -C perl PERL_PATH='/usr/bin/perl' prefix='/tmp/test' perl.mak
make[1]: Entering directory `/home/lilydev/vc/go2/perl'
'/usr/bin/perl' -I/home/lilydev/vc/g2/perl /home/lilydev/vc/g2/perl/Makefile.PL FIRST_MAKEFILE='perl.mak' PREFIX='/tmp/test'
Could not open 'Git.pm': No such file or directory at /usr/lib/perl5/5.8.8/ExtUtils/MM_Unix.pm line 2649.


despite the -I option?


From 7bbd698891d9102fa26ae53848c9812f6d1b665e Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@lilypond.org>
Date: Wed, 6 Dec 2006 15:14:08 +0100
Subject: [PATCH] Allow non-srcdir builds using cd $builddir && $srcdir/configure


Signed-off-by: Han-Wen Nienhuys <hanwen@xs4all.nl>
---
 Makefile            |   19 +++++++++++--------
 config.mak.in       |    5 +----
 configure.ac        |   31 ++++++++++++++++++++++++++++++-
 generate-cmdlist.sh |    2 +-
 perl/Makefile       |    2 +-
 5 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/Makefile b/Makefile
index cb9b745..d64a5bd 100644
--- a/Makefile
+++ b/Makefile
@@ -97,7 +97,7 @@ all:
 #
 
 GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
-	@$(SHELL_PATH) ./GIT-VERSION-GEN
+	@$(SHELL_PATH) $(srcdir)/GIT-VERSION-GEN
 -include GIT-VERSION-FILE
 
 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
@@ -120,7 +120,10 @@ datadir = $(prefix)/share
 GIT_datadir = $(datadir)/git-core
 gitexecdir = $(bindir)
 template_dir = $(GIT_datadir)/templates/
-# DESTDIR=
+srcdir = .
+
+# this is usually set on the make command line.
+DESTDIR=
 
 # default configuration for gitweb
 GITWEB_CONFIG = gitweb_config.perl
@@ -598,8 +601,8 @@ git-merge-recur$X: git-merge-recursive$X
 $(BUILT_INS): git$X
 	rm -f $@ && ln git$X $@
 
-common-cmds.h: Documentation/git-*.txt
-	./generate-cmdlist.sh > $@+
+common-cmds.h: $(wildcard $(srcdir)/Documentation/git-*.txt)
+	$(srcdir)/generate-cmdlist.sh $(srcdir)/Documentation/ > $@+
 	mv $@+ $@
 
 $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
@@ -609,7 +612,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
 	    -e 's!@@GIT_datadir@@!$(GIT_datadir)!g' \
 	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
-	    $@.sh >$@+
+	    $^ >$@+
 	chmod +x $@+
 	mv $@+ $@
 
@@ -630,7 +633,7 @@ $(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
 	    -e '}' \
 	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
-	    $@.perl >$@+
+	    $^ >$@+
 	chmod +x $@+
 	mv $@+ $@
 
@@ -674,7 +677,7 @@ git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
 	    -e '/@@GITWEB_CGI@@/d' \
 	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
 	    -e '/@@GITWEB_CSS@@/d' \
-	    $@.sh > $@+
+	    $< > $@+
 	chmod +x $@+
 	mv $@+ $@
 
@@ -821,7 +824,7 @@ install: all
 	fi
 	$(foreach p,$(BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)
 	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_datadir_SQ)'
-	$(INSTALL) -m755 git-sh-setup.sh '$(DESTDIR_SQ)$(GIT_datadir_SQ)'
+	$(INSTALL) -m755 $(srcdir)/git-sh-setup.sh '$(DESTDIR_SQ)$(GIT_datadir_SQ)'
 
 install-doc:
 	$(MAKE) -C Documentation install
diff --git a/config.mak.in b/config.mak.in
index 9a57840..902a392 100644
--- a/config.mak.in
+++ b/config.mak.in
@@ -2,7 +2,7 @@
 # @configure_input@
 
 CC = @CC@
-CFLAGS = @CFLAGS@
+CFLAGS = @CFLAGS@ -I.
 AR = @AR@
 TAR = @TAR@
 #INSTALL = @INSTALL@		# needs install-sh or install.sh in sources
@@ -10,9 +10,6 @@ TAR = @TAR@
 prefix = @prefix@
 exec_prefix = @exec_prefix@
 bindir = @bindir@
-#gitexecdir = @libexecdir@/git-core/
-datarootdir = @datarootdir@
-template_dir = @datadir@/git-core/templates/
 
 mandir=@mandir@
 
diff --git a/configure.ac b/configure.ac
index 34e3478..ccf9374 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,11 +5,13 @@ AC_PREREQ(2.59)
 AC_INIT([git], [@@GIT_VERSION@@], [git@vger.kernel.org])
 
 AC_CONFIG_SRCDIR([git.c])
-
+srcdir=`cd $srcdir && pwd`
 config_file=config.mak.autogen
 config_append=config.mak.append
 config_in=config.mak.in
 
+
+	
 echo "# ${config_append}.  Generated by configure." > "${config_append}"
 
 
@@ -330,10 +332,37 @@ GIT_PARSE_WITH(iconv))
 # change being considered an inode change from the update-cache perspective.
 
 
+    
+  
+
 ## Output files
 AC_CONFIG_FILES(["${config_file}":"${config_in}":"${config_append}"])
 AC_OUTPUT
 
+	
+## generate subdirectories and sub Makefiles. 
+for d in `cd $srcdir &&  find . -type d -print | grep -v '\.git'` ;
+do
+  if test ! -d  $d ; then
+    echo creating $d 
+    mkdir $d
+  fi
+  
+  if test -f $srcdir/$d/Makefile ; then
+    
+    dnl [[]] is to keep m4 happy
+    depth=`echo $d/ | sed -e 's!^\./!!g' -e 's![[^/]]*/!../!g'`
+    echo creating $d/Makefile
+    cat << EOF > $d/Makefile
+include ${depth}config.mak.autogen
+here-srcdir=\$(srcdir)/$d/
+VPATH=\$(here-srcdir)
+include \$(here-srcdir)/Makefile
+EOF
+
+  fi 
+done
+exit 1
 
 ## Cleanup
 rm -f "${config_append}"
diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
index 5450918..e744fbb 100755
--- a/generate-cmdlist.sh
+++ b/generate-cmdlist.sh
@@ -47,6 +47,6 @@ do
             x
             s/.*git-'"$cmd"' - \(.*\)/  {"'"$cmd"'", "\1"},/
 	    p
-     }' "Documentation/git-$cmd.txt"
+     }' "$1/git-$cmd.txt"
 done
 echo "};"
diff --git a/perl/Makefile b/perl/Makefile
index bd483b0..5706095 100644
--- a/perl/Makefile
+++ b/perl/Makefile
@@ -29,7 +29,7 @@ $(makfile): ../GIT-CFLAGS Makefile
 	echo '	echo $(instdir_SQ)' >> $@
 else
 $(makfile): Makefile.PL ../GIT-CFLAGS
-	'$(PERL_PATH_SQ)' $< FIRST_MAKEFILE='$@' PREFIX='$(prefix_SQ)'
+	'$(PERL_PATH_SQ)' -I$(srcdir)/perl $< FIRST_MAKEFILE='$@' PREFIX='$(prefix_SQ)'
 endif
 
 # this is just added comfort for calling make directly in perl dir
-- 
1.4.4.1.gc9922-dirty

 


-- 
 Han-Wen Nienhuys - hanwen@xs4all.nl - http://www.xs4all.nl/~hanwen

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 14:16       ` Han-Wen Nienhuys
@ 2006-12-06 14:51         ` Jakub Narebski
  2006-12-06 15:03           ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 14:51 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Han-Wen Nienhuys wrote::
> Jakub Narebski escreveu:
>> Han-Wen Nienhuys wrote:
>> 
>>> Subject: [PATCH] Install git-sh-setup.sh into $(prefix)/share/git-core. Call with explicit path.
>> 
>> I like it... but could you check if you don't need to change
>> config.mak.in accordingly for ./configure script to generate proper
>> config.mak.autogen?
> 
> I couldn't see anything, but while I was looking at it, I also added
> support for non-srcdir builds.

[...]
> From 7bbd698891d9102fa26ae53848c9812f6d1b665e Mon Sep 17 00:00:00 2001
> From: Han-Wen Nienhuys <hanwen@lilypond.org>
> Date: Wed, 6 Dec 2006 15:14:08 +0100
> Subject: [PATCH] Allow non-srcdir builds using cd $builddir && $srcdir/configure

Please add some longer commit message.

> Signed-off-by: Han-Wen Nienhuys <hanwen@xs4all.nl>
> ---
>  Makefile            |   19 +++++++++++--------
>  config.mak.in       |    5 +----
>  configure.ac        |   31 ++++++++++++++++++++++++++++++-
>  generate-cmdlist.sh |    2 +-
>  perl/Makefile       |    2 +-
>  5 files changed, 44 insertions(+), 15 deletions(-)
[...]
> diff --git a/config.mak.in b/config.mak.in
> index 9a57840..902a392 100644
> --- a/config.mak.in
> +++ b/config.mak.in
[...]
> @@ -10,9 +10,6 @@ TAR = @TAR@
>  prefix = @prefix@
>  exec_prefix = @exec_prefix@
>  bindir = @bindir@
> -#gitexecdir = @libexecdir@/git-core/
> -datarootdir = @datarootdir@
> -template_dir = @datadir@/git-core/templates/
>  
>  mandir=@mandir@

Why have you removed setting datarootdir and template_dir? I would
have thought that you would rather change it to

  #gitexecdir = @libexecdir@/git-core/
  datarootdir = @datarootdir@
  GIT_datadir = @datadir@/git-core/
  template_dir= @datadir@/git-core/templates/
  
in config.mak.in

I have been told that setting 'datarootdir' is required to avoid
warnings with new versions of autoconf.

> diff --git a/configure.ac b/configure.ac
> index 34e3478..ccf9374 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -5,11 +5,13 @@ AC_PREREQ(2.59)
>  AC_INIT([git], [@@GIT_VERSION@@], [git@vger.kernel.org])
>  
>  AC_CONFIG_SRCDIR([git.c])
> -
> +srcdir=`cd $srcdir && pwd`
>  config_file=config.mak.autogen
>  config_append=config.mak.append

AC_CONFIG_SRCDIR should set 'srcdir' correctly.

> @@ -330,10 +332,37 @@ GIT_PARSE_WITH(iconv))
[...]
> +## generate subdirectories and sub Makefiles. 
> +for d in `cd $srcdir &&  find . -type d -print | grep -v '\.git'` ;
> +do
> +  if test ! -d  $d ; then
> +    echo creating $d 
> +    mkdir $d
> +  fi
> +  
> +  if test -f $srcdir/$d/Makefile ; then
> +    
> +    dnl [[]] is to keep m4 happy
> +    depth=`echo $d/ | sed -e 's!^\./!!g' -e 's![[^/]]*/!../!g'`
> +    echo creating $d/Makefile
> +    cat << EOF > $d/Makefile
> +include ${depth}config.mak.autogen
> +here-srcdir=\$(srcdir)/$d/
> +VPATH=\$(here-srcdir)
> +include \$(here-srcdir)/Makefile
> +EOF
> +
> +  fi 
> +done
> +exit 1

What is this for? The ./configure script, generated by autoconf from
configure.ac (by "make configure"), generates config.mak.autogen file
from config.mak.in, which is included in main (top) Makefile.

The variables defined in config.mak.autogen are of course visible in
make in subdirectories (make invoked from main makefile). Why the change?
What about user-generated config.mak?

This part IMHO has no sense, and has no place here.
-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 14:51         ` Jakub Narebski
@ 2006-12-06 15:03           ` Han-Wen Nienhuys
  2006-12-06 15:27             ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 15:03 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git

Jakub Narebski escreveu:
> Please add some longer commit message.

do you have any specifics you would like me to mention?

>>  exec_prefix = @exec_prefix@
>>  bindir = @bindir@
>> -#gitexecdir = @libexecdir@/git-core/
>> -datarootdir = @datarootdir@
>> -template_dir = @datadir@/git-core/templates/
>>  
>>  mandir=@mandir@
> 
> Why have you removed setting datarootdir and template_dir? I would
> have thought that you would rather change it to
> 
>   #gitexecdir = @libexecdir@/git-core/
>   datarootdir = @datarootdir@
>   GIT_datadir = @datadir@/git-core/
>   template_dir= @datadir@/git-core/templates/

The Makefile already has this code, so adding it here is duplication of work
and code.

If you think putting code in the generated file is a good idea, I
propose we just generate the entire Makefile, as is the standard usage
for autoconf.

>> +## generate subdirectories and sub Makefiles. 
>> +for d in `cd $srcdir &&  find . -type d -print | grep -v '\.git'` ;
>> +do
>> +  if test ! -d  $d ; then
>> +    echo creating $d 
>> +    mkdir $d
>> +  fi
>> +  
>> +  if test -f $srcdir/$d/Makefile ; then
>> +    
>> +    dnl [[]] is to keep m4 happy
>> +    depth=`echo $d/ | sed -e 's!^\./!!g' -e 's![[^/]]*/!../!g'`
>> +    echo creating $d/Makefile
>> +    cat << EOF > $d/Makefile
>> +include ${depth}config.mak.autogen
>> +here-srcdir=\$(srcdir)/$d/
>> +VPATH=\$(here-srcdir)
>> +include \$(here-srcdir)/Makefile
>> +EOF
>> +
>> +  fi 
>> +done
>> +exit 1
> 
> What is this for? The ./configure script, generated by autoconf from
> configure.ac (by "make configure"), generates config.mak.autogen file
> from config.mak.in, which is included in main (top) Makefile.

in some cases, the files can also be called stand alone, eg.

  [lilydev@haring perl]$ pwd
  /home/lilydev/vc/git/perl

  [lilydev@haring perl]$ make
  make -f perl.mak all
  make[1]: Entering directory `/home/lilydev/vc/git/perl'
  make[1]: Leaving directory `/home/lilydev/vc/git/perl'

The above Makefile generation makes sure that this behavior is
mirrored in the builddir. Also, I'm not sure if the vpath settings get
exported automatically.

Having multiple Makefiles in the builddir is the standard behavior for
autotool'ed packages. 

> The variables defined in config.mak.autogen are of course visible in
> make in subdirectories (make invoked from main makefile). Why the change?
> What about user-generated config.mak?

good point. I'll include it too.

> This part IMHO has no sense, and has no place here.


-- 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 15:03           ` Han-Wen Nienhuys
@ 2006-12-06 15:27             ` Jakub Narebski
  2006-12-06 15:36               ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 15:27 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Han-Wen Nienhuys wrote:
> Jakub Narebski escreveu:
> 
>> Please add some longer commit message.
> 
> do you have any specifics you would like me to mention?

More detailed description what "Allow non-srcdir builds using cd
$builddir && $srcdir/configure" mean and why we might want to do that.

For example:

  We might want to build git from outside source directory. For this we
  need...

By the way, I think this patch is about _two_ changes. Allow to build
outside source directory, by providing srcdir AND separate change to
allow builds of separate parts of git, with separate Makefile, to
include user-generated configuration file config.mak and ./configure
generated config.mak.autogen configuration file.

Shouldn't this patch be split into two?

>>>  exec_prefix = @exec_prefix@
>>>  bindir = @bindir@
>>> -#gitexecdir = @libexecdir@/git-core/
>>> -datarootdir = @datarootdir@
>>> -template_dir = @datadir@/git-core/templates/
>>>  
>>>  mandir=@mandir@
>> 
>> Why have you removed setting datarootdir and template_dir? I would
>> have thought that you would rather change it to
>> 
>>   #gitexecdir = @libexecdir@/git-core/
>>   datarootdir = @datarootdir@
>>   GIT_datadir = @datadir@/git-core/
>>   template_dir= @datadir@/git-core/templates/
> 
> The Makefile already has this code, so adding it here is duplication
> of work and code.

Good call. Well, at least now, when ./configure script doesn't provide
means to change template_dir etc. from command line, via options.

Still I think that at least

  datarootdir = @datarootdir@

should be not removed.

> If you think putting code in the generated file is a good idea, I
> propose we just generate the entire Makefile, as is the standard usage
> for autoconf.

The stance on autoconf is that it has to be _optional_ part of
compilation. And I think it does good job of this.

>>> +## generate subdirectories and sub Makefiles. 
>>> +for d in `cd $srcdir &&  find . -type d -print | grep -v '\.git'` ;
>>> +do
>>> +  if test ! -d  $d ; then
>>> +    echo creating $d 
>>> +    mkdir $d
>>> +  fi
>>> +  
>>> +  if test -f $srcdir/$d/Makefile ; then
>>> +    
>>> +    dnl [[]] is to keep m4 happy
>>> +    depth=`echo $d/ | sed -e 's!^\./!!g' -e 's![[^/]]*/!../!g'`
>>> +    echo creating $d/Makefile
>>> +    cat << EOF> $d/Makefile
>>> +include ${depth}config.mak.autogen
>>> +here-srcdir=\$(srcdir)/$d/
>>> +VPATH=\$(here-srcdir)
>>> +include \$(here-srcdir)/Makefile
>>> +EOF
>>> +
>>> +  fi 
>>> +done
>>> +exit 1
>> 
>> What is this for? The ./configure script, generated by autoconf from
>> configure.ac (by "make configure"), generates config.mak.autogen file
>> from config.mak.in, which is included in main (top) Makefile.
> 
> in some cases, the files can also be called stand alone, eg.
> 
>   [lilydev@haring perl]$ pwd
>   /home/lilydev/vc/git/perl
> 
>   [lilydev@haring perl]$ make
>   make -f perl.mak all
>   make[1]: Entering directory `/home/lilydev/vc/git/perl'
>   make[1]: Leaving directory `/home/lilydev/vc/git/perl'
> 
> The above Makefile generation makes sure that this behavior is
> mirrored in the builddir. Also, I'm not sure if the vpath settings get
> exported automatically.
> 
> Having multiple Makefiles in the builddir is the standard behavior for
> autotool'ed packages. 

Git is not autotool'ed package. Autoconf is used only for _optional_
compile and installation configuration.

>> The variables defined in config.mak.autogen are of course visible in
>> make in subdirectories (make invoked from main makefile). Why the
>> change? What about user-generated config.mak?
> 
> good point. I'll include it too.
> 
>> This part IMHO has no sense, and has no place here.

If you want to create or modify Makefiles, do that. Not generate
"minimal" Makefiles in every and each subdirectory.

You would be able to compile git fully only from top directory. So what?
-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 15:27             ` Jakub Narebski
@ 2006-12-06 15:36               ` Han-Wen Nienhuys
  2006-12-06 15:56                 ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 15:36 UTC (permalink / raw)
  To: git

Jakub Narebski escreveu:
> Still I think that at least
> 
>   datarootdir = @datarootdir@
> 
> should be not removed.

yes, agreed.

>>>> +  if test -f $srcdir/$d/Makefile ; then
  [..]
>>>> +    echo creating $d/Makefile
>>>> +    cat << EOF> $d/Makefile

>>> This part IMHO has no sense, and has no place here.
> 
> If you want to create or modify Makefiles, do that. Not generate
> "minimal" Makefiles in every and each subdirectory.

Look more closely at the patch. It only generates Makefiles in 
directories that have makefiles in the source dir. The makefiles are
short because that is the easiest to do.

I'm happy to amend the patch, bUt I can't properly test
it until the perl problem gets sorted out. 

-- 
 Han-Wen Nienhuys - hanwen@xs4all.nl - http://www.xs4all.nl/~hanwen

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 15:36               ` Han-Wen Nienhuys
@ 2006-12-06 15:56                 ` Jakub Narebski
  2006-12-06 16:03                   ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 15:56 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Dnia środa 6. grudnia 2006 16:36, Han-Wen Nienhuys napisał:
> Jakub Narebski escreveu:
[...]
>>>>> +  if test -f $srcdir/$d/Makefile ; then
>   [..]
>>>>> +    echo creating $d/Makefile
>>>>> +    cat << EOF> $d/Makefile
> 
>>>> This part IMHO has no sense, and has no place here.
>> 
>> If you want to create or modify Makefiles, do that. Not generate
>> "minimal" Makefiles in every and each subdirectory.
> 
> Look more closely at the patch. It only generates Makefiles in 
> directories that have makefiles in the source dir. The makefiles are
> short because that is the easiest to do.

The fact that I didn't understood what this part of patch is meant
to do should be the big hint that this commit needs some longer commit
message explaining purpose of such mess.

I still don't understand what this part do (and how come it is
in configure.ac which should be _only_ about generating 
config.mak.autogen Makefile configuration file and _not_ about
generating Makefiles). You want what sequence of commands to work?

  $ $srcdir/configure --srcdir=$srcdir
  $ make -D $srcdir
  $ make -D $srcdir DESTDIR=$DESTDIR install

or what? Why this part is needed?

Once again: git is NOT autotool'ed project. And shouldn't be.

> I'm happy to amend the patch, but I can't properly test
> it until the perl problem gets sorted out. 

I'll be waiting.

-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 15:56                 ` Jakub Narebski
@ 2006-12-06 16:03                   ` Han-Wen Nienhuys
  2006-12-06 16:27                     ` Jakub Narebski
  2006-12-07 13:36                     ` Andreas Ericsson
  0 siblings, 2 replies; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 16:03 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git

Jakub Narebski escreveu:
> The fact that I didn't understood what this part of patch is meant
> to do should be the big hint that this commit needs some longer commit
> message explaining purpose of such mess.
> 
> I still don't understand what this part do (and how come it is
> in configure.ac which should be _only_ about generating 
> config.mak.autogen Makefile configuration file and _not_ about
> generating Makefiles). You want what sequence of commands to work?
> 
>   $ $srcdir/configure --srcdir=$srcdir
>   $ make -D $srcdir
>   $ make -D $srcdir DESTDIR=$DESTDIR install

make -D doesn't exist.

This is about 

  mkdir git-build
  cd git-build
  $my_git_source/configure  
  make 

this _was_ actually documented in that one-line commit message, that
you found to be too short.

Since git does recursive makes, among others in 

 perl/ 
 Documentation/
 templates/
 contrib/
  
there should be Makefiles in said directories. Otherwise, every rule
in the toplevel Makefile saying


  $(MAKE) -C subdir/

will fail because $builddir/ does not have a Makefile in
$builddir/subdir.

The part you don't understand is a generic way of duplicating the
Makefiles from the git sources, while making sure that they work when
$srcdir != $builddir


Yes, if builddir != srcdir , then configure is about more than
generating config.mak.autogen


-- 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:03                   ` Han-Wen Nienhuys
@ 2006-12-06 16:27                     ` Jakub Narebski
  2006-12-06 16:40                       ` Han-Wen Nienhuys
  2006-12-07 13:36                     ` Andreas Ericsson
  1 sibling, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 16:27 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Dnia środa 6. grudnia 2006 17:03, Han-Wen Nienhuys napisał:

> Jakub Narebski escreveu:
>
>> The fact that I didn't understood what this part of patch is meant
>> to do should be the big hint that this commit needs some longer commit
>> message explaining purpose of such mess.
>> 
>> I still don't understand what this part do (and how come it is
>> in configure.ac which should be _only_ about generating 
>> config.mak.autogen Makefile configuration file and _not_ about
>> generating Makefiles). You want what sequence of commands to work?
>> 
>>   $ $srcdir/configure --srcdir=$srcdir
>>   $ make -D $srcdir
>>   $ make -D $srcdir DESTDIR=$DESTDIR install
> 
> make -D doesn't exist.

Oops. I meant make -C, not make -D.

> This is about 
> 
>   mkdir git-build
>   cd git-build
>   $my_git_source/configure  
>   make 
> 
> this _was_ actually documented in that one-line commit message, that
> you found to be too short.

Because it was so short (one line) while being long for one line.
Why don't you write above in commit message?

> Since git does recursive makes, among others in 
> 
>  perl/ 
>  Documentation/
>  templates/
>  contrib/
>   
> there should be Makefiles in said directories. Otherwise, every rule
> in the toplevel Makefile saying
> 
> 
>   $(MAKE) -C subdir/
> 
> will fail because $builddir/ does not have a Makefile in
> $builddir/subdir.

Wouldn't it be better just to modify toplevel Makefile to say:

   $(MAKE) -C $(srcdir)/subdir/

without messing with ./configure script, and creating "redirect"
Makefiles?

> The part you don't understand is a generic way of duplicating the
> Makefiles from the git sources, while making sure that they work when
> $srcdir != $builddir
> 
> 
> Yes, if builddir != srcdir , then configure is about more than
> generating config.mak.autogen

Once again: git is not autotool'ed project. Everything you want to
do should work regardless if you would run ./configure, or if you
would hand-craft config.mak file.

-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:27                     ` Jakub Narebski
@ 2006-12-06 16:40                       ` Han-Wen Nienhuys
  2006-12-06 16:52                         ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 16:40 UTC (permalink / raw)
  To: git; +Cc: git

Jakub Narebski escreveu:
>> there should be Makefiles in said directories. Otherwise, every rule
>> in the toplevel Makefile saying
>>
>>
>>   $(MAKE) -C subdir/
>>
>> will fail because $builddir/ does not have a Makefile in
>> $builddir/subdir.
> 
> Wouldn't it be better just to modify toplevel Makefile to say:
> 
>    $(MAKE) -C $(srcdir)/subdir/
> 
> without messing with ./configure script, and creating "redirect"
> Makefiles?
> 

that doesn't work.

  make -C foo bla

just does 

  (cd foo && make bla)

If you did this, part of the object files would end up in the source dir; 
The idea of separate srcdir builds,is to keep the srcdir completely clean 
of generated files.  That can't really be done without aid of a script,
to setup the builddir. In this case that is the configure script.

I did forget to add a check 

  if "$srcdir" != "." ; then
    ..
  fi

around the messy stuff.



-- 
 Han-Wen Nienhuys - hanwen@xs4all.nl - http://www.xs4all.nl/~hanwen

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:40                       ` Han-Wen Nienhuys
@ 2006-12-06 16:52                         ` Jakub Narebski
  2006-12-06 16:56                           ` Han-Wen Nienhuys
  0 siblings, 1 reply; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 16:52 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Han-Wen Nienhuys wrote:
> Jakub Narebski escreveu:

>>> there should be Makefiles in said directories. Otherwise, every rule
>>> in the toplevel Makefile saying
>>>
>>>
>>>   $(MAKE) -C subdir/
>>>
>>> will fail because $builddir/ does not have a Makefile in
>>> $builddir/subdir.
>> 
>> Wouldn't it be better just to modify toplevel Makefile to say:
>> 
>>    $(MAKE) -C $(srcdir)/subdir/
>> 
>> without messing with ./configure script, and creating "redirect"
>> Makefiles?
>> 
> 
> that doesn't work.
> 
>   make -C foo bla
> 
> just does 
> 
>   (cd foo && make bla)
> 
> If you did this, part of the object files would end up in the source dir; 
> The idea of separate srcdir builds,is to keep the srcdir completely clean 
> of generated files.  That can't really be done without aid of a script,
> to setup the builddir. In this case that is the configure script.

Thanks for an explanation. At least some of it should be in commit
message, to explain what you want the patch to do.

I don't know autotools enough to check if autotools (autoconf) doesn't
have it's own way to do this, some autoconf macro, to not need to write
this script creating redirect Makefiles.

I'm still not sure if this has place in git. Is it really common to
support building outside source directory? If git didn't support this,
so what?
-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:52                         ` Jakub Narebski
@ 2006-12-06 16:56                           ` Han-Wen Nienhuys
  2006-12-06 17:11                             ` Jakub Narebski
  0 siblings, 1 reply; 17+ messages in thread
From: Han-Wen Nienhuys @ 2006-12-06 16:56 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git

Jakub Narebski escreveu:
> I'm still not sure if this has place in git. Is it really common to
> support building outside source directory? If git didn't support this,
> so what?

lots of serious tools support it, as it this comes automatically
when using automake. Eg. emacs, gcc, make, pango, lilypond, etc etc. 

It's a quite standard feature ; you should be asking why git 
shouldn't support it.

Another option is to make a special solution based on makefiles, so 
make is run inside the srcdir, but output shunted output to a 
separate objects/ subdirectory.  However, it's more work, and less 
standardized.

-- 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:56                           ` Han-Wen Nienhuys
@ 2006-12-06 17:11                             ` Jakub Narebski
  0 siblings, 0 replies; 17+ messages in thread
From: Jakub Narebski @ 2006-12-06 17:11 UTC (permalink / raw)
  To: Han-Wen Nienhuys; +Cc: git

Dnia środa 6. grudnia 2006 17:56, Han-Wen Nienhuys napisał:
> Jakub Narebski escreveu:
>
>> I'm still not sure if this has place in git. Is it really common to
>> support building outside source directory? If git didn't support this,
>> so what?
> 
> lots of serious tools support it, as it this comes automatically
> when using automake. Eg. emacs, gcc, make, pango, lilypond, etc etc. 
> 
> It's a quite standard feature ; you should be asking why git 
> shouldn't support it.

Because git is not autotool'ed project. And people protested vehemently
against adding yet another dependency. So from the whole autotools suite
only autoconf is used, and only to generate config.mak.autogen Makefile
configuration, which otherwise would be needed to be generated by hand.

BTW git tries to guess configuration based on uname -a result.

There was also for a little while hand-generated configure script, but
it got abandoned when it appeared that it is hard to be portable (and
autoconf did the work; perhaps too hard but did, not using features
which weren't common but now are in standard, but did), and the fact
that it was possible to have _optional_ autoconf support.
 
Add to that the fact that people said that ./configure on Cygwin is slow
(can be slow), so they prefer _not_ to run this.


Besides, the fact that some tools suport some feature is not the reason
to add it. You have to look at how often is this feature _used_. For
example you don't need it (you need only DESTDIR support) for creating
RPMS from sources.

-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: bug: git-sh-setup should not be in $PATH
  2006-12-06 16:03                   ` Han-Wen Nienhuys
  2006-12-06 16:27                     ` Jakub Narebski
@ 2006-12-07 13:36                     ` Andreas Ericsson
  1 sibling, 0 replies; 17+ messages in thread
From: Andreas Ericsson @ 2006-12-07 13:36 UTC (permalink / raw)
  To: hanwen; +Cc: Jakub Narebski, git

Han-Wen Nienhuys wrote:
> Since git does recursive makes, among others in 
> 
>  perl/ 
>  Documentation/
>  templates/
>  contrib/
>   
> there should be Makefiles in said directories. Otherwise, every rule
> in the toplevel Makefile saying
> 
> 
>   $(MAKE) -C subdir/
> 
> will fail because $builddir/ does not have a Makefile in
> $builddir/subdir.
> 

This part should have been in the commit message, possibly without the 
"among others ... (examples)" and possibly with an added "This patch 
makes it so by letting fnurg create them through smurfing the frotz".

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2006-12-07 13:36 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-06 12:14 bug: git-sh-setup should not be in $PATH Han-Wen Nienhuys
2006-12-06 12:23 ` Johannes Schindelin
2006-12-06 12:34   ` Han-Wen Nienhuys
2006-12-06 12:56     ` Jakub Narebski
2006-12-06 14:16       ` Han-Wen Nienhuys
2006-12-06 14:51         ` Jakub Narebski
2006-12-06 15:03           ` Han-Wen Nienhuys
2006-12-06 15:27             ` Jakub Narebski
2006-12-06 15:36               ` Han-Wen Nienhuys
2006-12-06 15:56                 ` Jakub Narebski
2006-12-06 16:03                   ` Han-Wen Nienhuys
2006-12-06 16:27                     ` Jakub Narebski
2006-12-06 16:40                       ` Han-Wen Nienhuys
2006-12-06 16:52                         ` Jakub Narebski
2006-12-06 16:56                           ` Han-Wen Nienhuys
2006-12-06 17:11                             ` Jakub Narebski
2006-12-07 13:36                     ` Andreas Ericsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).