git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* ./configure script prototype
@ 2005-11-14 12:18 Andreas Ericsson
  2005-11-14 12:18 ` Andreas Ericsson
  0 siblings, 1 reply; 13+ messages in thread
From: Andreas Ericsson @ 2005-11-14 12:18 UTC (permalink / raw)
  To: Git Mailing List

I've started writing up a configuration script to move some of the logic 
out of the Makefile and make it a bit easier to enable/disable certain 
stuff.

I'm not exactly fluent in what sh flavours accept what syntax and the 
uname -m output is a bit of a mystery for some architectures (PowerPC, 
notably) so the SHA1 method selection stuff might not work.

Thoughts? Comments? Patches?

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

* Re: ./configure script prototype
  2005-11-14 12:18 ./configure script prototype Andreas Ericsson
@ 2005-11-14 12:18 ` Andreas Ericsson
  2005-11-14 13:29   ` Petr Baudis
  0 siblings, 1 reply; 13+ messages in thread
From: Andreas Ericsson @ 2005-11-14 12:18 UTC (permalink / raw)
  To: Git Mailing List

[-- Attachment #1: Type: text/plain, Size: 612 bytes --]

Andreas Ericsson wrote:
> I've started writing up a configuration script to move some of the logic 
> out of the Makefile and make it a bit easier to enable/disable certain 
> stuff.
> 
> I'm not exactly fluent in what sh flavours accept what syntax and the 
> uname -m output is a bit of a mystery for some architectures (PowerPC, 
> notably) so the SHA1 method selection stuff might not work.
> 
> Thoughts? Comments? Patches?
> 

Attachments? ;)

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

[-- Attachment #2: configure --]
[-- Type: text/plain, Size: 5978 bytes --]

#!/bin/sh

# VERSION must be here so we know where to put the git_libexec_dir later on
VERSION=0.99.9.GIT

# some default values
default_prefix=$HOME
enable_http=Yes
enable_expat=Yes
without_openssl=0

tar=$(which gtar 2>/dev/null || which tar 2>/dev/null)
install=$(which ginstall 2>/dev/null || which install 2>/dev/null)

function usage ()
{
cat << EOF
Usage: $0 [VAR=VALUE]...

Installation directories:
 --prefix=PREFIX         files go in directories under PREFIX [$default_prefix]
 --exec-prefix=EPREFIX   executables go in directories under EPREFIX [PREFIX]
 --bindir=DIR            user executables [EPREFIX/bin]
 --datadir=DIR           read-only architecture-independent data [PREFIX/share]
 --mandir=DIR            man-page base directory [\$datadir/man]

git specific stuff and where to install it:
 --git-exec-path=DIR     git executables path [*currently* \$bindir]
 --git-python-dir=DIR    git python scripts [\$datadir/git/python]
 --git-template-dir=DIR  git templates [\$datadir/git/templates]

Other compilation options:
 --disable-http          disable http transport support [enable]
 --without-expat         build without expat (disables http-push) [enable]
 --with-curl=DIR         path to curl installation [/usr]
 --with-expat=DIR        path to libexpat installation [/usr]
 --with-sha1=METHOD      possible options are MOZILLA_SHA1, PPC_SHA1, ARM_SHA1
                         and OPENSSL_SHA1 [autodetect / OPENSSL_SHA1]
 --with-shell=PATH       path to bourne-like shell [/bin/sh]
 --with-perl=PATH        path to perl [/usr/bin/perl]
 --with-python=PATH      path to python [/usr/bin/python]
EOF
	exit 0
}

# for debugging, really
: ${outfile=config.mak}

# Try to keep these in the same order as the help output above.
while [ $# -gt 0 ]; do
	case "$1" in
		--help*)
			usage
		;;
		--prefix=*)
			prefix=${1##*=}
		;;
		--exec-prefix=*)
			exec_prefix=${1##*=}
		;;
		--bindir=*)
			bindir=${1##*=}
		;;
		--datadir=*)
			datadir=${1##*=}
		;;
		--mandir=*)
			mandir=${1##*=}
		;;
		--git-exec-path=*)
			git_exec_path=${1##*=}
		;;
		--git-python-dir=*)
			git_python_dir=${1##*=}
		;;
		--git-template-dir=*)
			git_template_dir=${1##*=}
		;;
		--disable-http*)
			enable_http=No
			enable_expat=No
		;;
		--without-expat*)
			enable_expat=No
		;;
		--with-curl=*)
			curl_dir=${1##*=}
		;;
		--with-expat=*)
			expat_dir=${1##*=}
		;;
		--with-sha1=*)
			sha1=${1##*=}
		;;
		--with-shell=*)
			shell=${1##*=}
		;;
		--with-perl=*)
			perl=${1##*=}
		;;
		--with-python=*)
			python=${1##*=}
		;;
	esac
	shift
done

[ "$prefix" ] || prefix="$HOME"
[ "$libdir" ] || libdir="$prefix/lib"
[ "$bindir" ] || bindir="$prefix/bin"
[ "$datadir" ] || datadir="$prefix/share"
[ "$mandir" ] || mandir="$datadir/man"
[ "$git_exec_path" ] || git_exec_path="$bindir"
[ "$git_python_dir"] || git_python_dir=$datadir/git/python
[ "$git_template_dir" ] || git_template_dir=$datadir/git/templates

[ "$shell" ] || shell=/bin/sh
if [ -z "$perl" ]; then
	perl=$(which perl 2>/dev/null || perl=/usr/bin/perl)
fi
if [ -z "$python" ]; then
	python=$(which python 2>/dev/null || python=/usr/bin/python)
fi

function need () {
	echo "Need $@"
	for n in "$@"; do
		echo "NEEDS_$n = YesPlease" >> $outfile
	done
}

function no () {
	echo "Working around missing $@"
	for n in "$@"; do
		echo "NO_$n = YesPlease" >> $outfile
	done
}

function cflag () {
	echo "ALL_CFLAGS += $@" >> $outfile
}

# for now this is just an alias
alias ldflag=cflag

#function ldflag () {
#	echo "ALL_LDFLAGS += $@" >> $outfile
#}

sys=$(uname -s)
case $sys in
	Darwin)
		need SSL_WITH_CRYPTO LIBICONV
		## fink
		cflag -I/sw/include
		ldflag -L/sw/lib
		## darwinports
		cflag -I/opt/local/include
		ldflag -L/opt/local/lib
	;;
	SunOS)
		need SOCKET NSL LIBICONV
		no STRCASESTR
		cflag -D__EXTENSIONS__
		[ "$shell" = /bin/sh -a -x /bin/bash ] && shell=/bin/bash
	;;
	OpenBSD)
		need LIBICONV
		no STRCASESTR
		cflag -I/usr/local/include
		ldflag -L/usr/local/lib
	;;
esac

os=$(uname -o)
case $os in
	Cygwin)
		need LIBICONV
		no STRCASESTR IPV6
		cflag -DUSE_SYMLINK_HEAD=0
		echo "X = .exe" >> $outfile
	;;
esac

if [ -z "$sha1" ]; then
	mach=$(uname -m)
	case $mach in
		*arm*)
			sha1=ARM_SHA1
		;;
		i*86)
			sha1=OPENSSL_SHA1
		;;
		# Is this uname -m output for PPC??
		PPC|PowerPC)
			sha1=PPC_SHA1
		;;
		*)
			sha1=MOZILLA_SHA1
		;;
	esac
fi

cat << EOF > $outfile
GIT_VERSION := $VERSION

# Installation destinations
prefix = $prefix
bindir = $bindir
template_dir = $git_template_dir
GIT_EXEC_PATH = $git_exec_path
CFG_GIT_EXEC_PATH := $git_exec_path
GIT_PYTHON_DIR = $git_python_dir

# SHA1 method
$sha1 = YesPlease

# paths to system tools
SHELL_PATH = $shell
PERL_PATH = $perl
PYTHON_PATH = $python
TAR = $tar
INSTALL = $install

# Compilation options, library paths etc. etc.
EOF


# http transport support
if [ "$enable_http" = Yes ]; then
	echo "# HTTP transport is enabled" >> $outfile
	echo 'PROGRAMS += git-http-fetch$X' >> $outfile
	if [ "$curl_dir" ]; then
		cflag -I$curl_dir/include
		echo "CURL_LIBCURL = -L$curl_dir/lib"
	fi
	echo "CURL_LIBCURL += -lcurl" >> $outfile

	if [ "$enable_expat" = Yes ]; then
		echo "# expat (push over http) is enabled" >> $outfile
		echo 'PROGRAMS += git-http-push$X' >> $outfile

		if [ "$expat_dir" ]; then
			cflag -I$expat_dir/include
			echo "EXPAT_LIBEXPAT = -L$expat_dir/lib" >> $outfile
		fi
		echo "EXPAT_LIBEXPAT += -lexpat" >> $outfile
	fi
fi

cat << EOF

Configuration summary:
----------------------

  Compilation options:
    SHA1 method       : $sha1
    HTTP transport    : $enable_http
    HTTP push support : $enable_expat

  System tools locations:
    shell   : $shell
    Perl    : $perl
    Python  : $python
    tar     : $tar
    install : $install

  Installation paths:
    bindir utilities : $bindir
    templates        : $git_template_dir
    python scripts   : $git_python_dir
    Everything else  : $git_exec_path

Please see config.mak and top of Makefile for ways to tweak the build further.
EOF

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

* Re: ./configure script prototype
  2005-11-14 12:18 ` Andreas Ericsson
@ 2005-11-14 13:29   ` Petr Baudis
  2005-11-14 14:32     ` Andreas Ericsson
                       ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Petr Baudis @ 2005-11-14 13:29 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: Git Mailing List

Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
where Andreas Ericsson <ae@op5.se> said that...
> 		--prefix=*)
> 			prefix=${1##*=}

Aren't those heavy bashisms?

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.

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

* Re: ./configure script prototype
  2005-11-14 13:29   ` Petr Baudis
@ 2005-11-14 14:32     ` Andreas Ericsson
  2005-11-14 15:51       ` Chris Wedgwood
  2005-11-14 16:32     ` Fernando J. Pereda
  2005-11-14 18:19     ` Joel Becker
  2 siblings, 1 reply; 13+ messages in thread
From: Andreas Ericsson @ 2005-11-14 14:32 UTC (permalink / raw)
  To: Git Mailing List

Petr Baudis wrote:
> Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
> where Andreas Ericsson <ae@op5.se> said that...
> 
>>		--prefix=*)
>>			prefix=${1##*=}
> 
> 
> Aren't those heavy bashisms?
> 

Dunno. I only know bash-scripting, really. I'll replace them with some 
sed thing instead.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

* Re: ./configure script prototype
  2005-11-14 14:32     ` Andreas Ericsson
@ 2005-11-14 15:51       ` Chris Wedgwood
  2005-11-14 16:11         ` Andreas Ericsson
  0 siblings, 1 reply; 13+ messages in thread
From: Chris Wedgwood @ 2005-11-14 15:51 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: Git Mailing List

On Mon, Nov 14, 2005 at 03:32:13PM +0100, Andreas Ericsson wrote:

> Dunno. I only know bash-scripting, really. I'll replace them with
> some sed thing instead.

For some people /bin/sh != /bin/bash so you probably want "!/bin/bash"
instead.

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

* Re: ./configure script prototype
  2005-11-14 15:51       ` Chris Wedgwood
@ 2005-11-14 16:11         ` Andreas Ericsson
  2005-11-14 17:45           ` Chris Wedgwood
  0 siblings, 1 reply; 13+ messages in thread
From: Andreas Ericsson @ 2005-11-14 16:11 UTC (permalink / raw)
  To: Chris Wedgwood; +Cc: Git Mailing List

Chris Wedgwood wrote:
> On Mon, Nov 14, 2005 at 03:32:13PM +0100, Andreas Ericsson wrote:
> 
> 
>>Dunno. I only know bash-scripting, really. I'll replace them with
>>some sed thing instead.
> 
> 
> For some people /bin/sh != /bin/bash so you probably want "!/bin/bash"
> instead.

Ach no. The configure script really needs to be portable. POSIX (or SUS 
or some such) define a minimum syntax that any shell must support when 
invoked as /bin/sh.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

* Re: ./configure script prototype
  2005-11-14 13:29   ` Petr Baudis
  2005-11-14 14:32     ` Andreas Ericsson
@ 2005-11-14 16:32     ` Fernando J. Pereda
  2005-11-14 18:19     ` Joel Becker
  2 siblings, 0 replies; 13+ messages in thread
From: Fernando J. Pereda @ 2005-11-14 16:32 UTC (permalink / raw)
  To: Git Mailing List

[-- Attachment #1: Type: text/plain, Size: 871 bytes --]

On Mon, Nov 14, 2005 at 02:29:56PM +0100, Petr Baudis wrote:
| Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
| where Andreas Ericsson <ae@op5.se> said that...
| > 		--prefix=*)
| > 			prefix=${1##*=}
| 
| Aren't those heavy bashisms?

As far as I know, it should be supported by a POSIX 'sh'[1]:

---8<---
${parameter##word}

Remove Largest Prefix Pattern. The word shall be expanded to produce a
pattern. The parameter expansion shall then result in parameter, with
the largest portion of the prefix matched by the pattern deleted.
---8<---

Whether other shells support it or not... I don't know.

Cheers,
Ferdy

[1] http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html

-- 
Fernando J. Pereda Garcimartin
Gentoo Developer (Alpha,net-mail,mutt,git)
20BB BDC3 761A 4781 E6ED  ED0B 0A48 5B0C 60BD 28D4

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: ./configure script prototype
  2005-11-14 16:11         ` Andreas Ericsson
@ 2005-11-14 17:45           ` Chris Wedgwood
  0 siblings, 0 replies; 13+ messages in thread
From: Chris Wedgwood @ 2005-11-14 17:45 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: Git Mailing List

On Mon, Nov 14, 2005 at 05:11:58PM +0100, Andreas Ericsson wrote:

> Ach no. The configure script really needs to be portable. POSIX (or
> SUS or some such) define a minimum syntax that any shell must
> support when invoked as /bin/sh.

Then bashism need to go away and it should be test with
dash/ash/whatever.

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

* Re: ./configure script prototype
  2005-11-14 13:29   ` Petr Baudis
  2005-11-14 14:32     ` Andreas Ericsson
  2005-11-14 16:32     ` Fernando J. Pereda
@ 2005-11-14 18:19     ` Joel Becker
  2005-11-14 18:39       ` Linus Torvalds
  2 siblings, 1 reply; 13+ messages in thread
From: Joel Becker @ 2005-11-14 18:19 UTC (permalink / raw)
  To: Petr Baudis; +Cc: Andreas Ericsson, Git Mailing List

On Mon, Nov 14, 2005 at 02:29:56PM +0100, Petr Baudis wrote:
> Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
> where Andreas Ericsson <ae@op5.se> said that...
> > 		--prefix=*)
> > 			prefix=${1##*=}

	${i# and ${i% are POSIX, iirc.

Joel

-- 

Life's Little Instruction Book #197

	"Don't forget, a person's greatest emotional need is to 
	 feel appreciated."

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127

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

* Re: ./configure script prototype
  2005-11-14 18:19     ` Joel Becker
@ 2005-11-14 18:39       ` Linus Torvalds
  2005-11-14 18:59         ` Joel Becker
  2005-11-14 19:03         ` Andreas Ericsson
  0 siblings, 2 replies; 13+ messages in thread
From: Linus Torvalds @ 2005-11-14 18:39 UTC (permalink / raw)
  To: Joel Becker; +Cc: Petr Baudis, Andreas Ericsson, Git Mailing List



On Mon, 14 Nov 2005, Joel Becker wrote:

> On Mon, Nov 14, 2005 at 02:29:56PM +0100, Petr Baudis wrote:
> > Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
> > where Andreas Ericsson <ae@op5.se> said that...
> > > 		--prefix=*)
> > > 			prefix=${1##*=}
> 
> 	${i# and ${i% are POSIX, iirc.

They may be in POSIX, but they sure as h*ll aren't portable.

There's a _lot_ of machines out there that don't do POSIX, just because 
those "newfangled" things are so complicated.

Also, even in POSIX, there's tons of different substandards, and you might 
follow one but not the other. 

Finally, even if somebody is certified, they can very well be certified 
with "exceptions", so if they claim POSIX it doesn't necessarily mean that 
they follow all of it.

If you want to do a "configure" script (and I'm not sure it's worth it), 
you should cater to the lowest common denominator for it to be meaningful. 
What the hell that would be, I have no idea, since if you ever want to run 
on native Windows, it won't even be traditional shell. But traditional 
shell is at least a lot closer to that lowest common denominator than 
POSIX shell is.

That said, most of those ${var...} sequences definitely _are_ very 
traditional, and for all I know, ## may be too.

			Linus

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

* Re: ./configure script prototype
  2005-11-14 18:39       ` Linus Torvalds
@ 2005-11-14 18:59         ` Joel Becker
  2005-11-14 19:03         ` Andreas Ericsson
  1 sibling, 0 replies; 13+ messages in thread
From: Joel Becker @ 2005-11-14 18:59 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Petr Baudis, Andreas Ericsson, Git Mailing List

On Mon, Nov 14, 2005 at 10:39:26AM -0800, Linus Torvalds wrote:
> > 	${i# and ${i% are POSIX, iirc.
> 
> They may be in POSIX, but they sure as h*ll aren't portable.

	By POSIX I meant POSIX shell, which is ksh.  That's available on
just about all modern non-free Unices, and we all know bash and zsh are
compatible with it.
	But I had no intention of arguing how portable POSIX is, I was
just trying to describe the minimum breadth of support.  My personal
experience is that these particular variable forms have worked on Linux,
Solaris, AIX, Ultrix, IRIX, and the BSDs for, I dunno, eight to ten
years or so.
	That said, $(echo | sed), or `echo | sed` for even more
backwards portability (I bet $() is about as portable as ${i%}), can be
used to replace the ${i%} forms.

Joel

-- 

"I always thought the hardest questions were those I could not answer.
 Now I know they are the ones I can never ask."
			- Charlie Watkins

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127

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

* Re: ./configure script prototype
  2005-11-14 18:39       ` Linus Torvalds
  2005-11-14 18:59         ` Joel Becker
@ 2005-11-14 19:03         ` Andreas Ericsson
  2005-11-14 20:21           ` Junio C Hamano
  1 sibling, 1 reply; 13+ messages in thread
From: Andreas Ericsson @ 2005-11-14 19:03 UTC (permalink / raw)
  To: Git Mailing List

Linus Torvalds wrote:
> 
> On Mon, 14 Nov 2005, Joel Becker wrote:
> 
> 
>>On Mon, Nov 14, 2005 at 02:29:56PM +0100, Petr Baudis wrote:
>>
>>>Dear diary, on Mon, Nov 14, 2005 at 01:18:52PM CET, I got a letter
>>>where Andreas Ericsson <ae@op5.se> said that...
>>>
>>>>		--prefix=*)
>>>>			prefix=${1##*=}
>>
>>	${i# and ${i% are POSIX, iirc.
> 
> 
> They may be in POSIX, but they sure as h*ll aren't portable.
> 

A bit funny really. I've already said I'll change them to some sed 
thing, so the last 16 emails on this thread have been purely academic. I 
guess more people than me are bored by mondays.

> If you want to do a "configure" script (and I'm not sure it's worth it), 

Perhaps not. I was under the impression that Junio was for it to 
simplify the possible move of binaries to GIT_EXEC_PATH.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

* Re: ./configure script prototype
  2005-11-14 19:03         ` Andreas Ericsson
@ 2005-11-14 20:21           ` Junio C Hamano
  0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2005-11-14 20:21 UTC (permalink / raw)
  To: git

Andreas Ericsson <ae@op5.se> writes:

> Linus Torvalds wrote:
>
>> If you want to do a "configure" script (and I'm not sure it's worth
>> it),
>
> Perhaps not. I was under the impression that Junio was for it to 
> simplify the possible move of binaries to GIT_EXEC_PATH.

I do not see how that is related to it.

Offtopic, but if you really want to do ${var##} and friends
portably, expr(1) is the tool traditionalists prefer; not echo
piped to sed, please.

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

end of thread, other threads:[~2005-11-14 20:21 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-14 12:18 ./configure script prototype Andreas Ericsson
2005-11-14 12:18 ` Andreas Ericsson
2005-11-14 13:29   ` Petr Baudis
2005-11-14 14:32     ` Andreas Ericsson
2005-11-14 15:51       ` Chris Wedgwood
2005-11-14 16:11         ` Andreas Ericsson
2005-11-14 17:45           ` Chris Wedgwood
2005-11-14 16:32     ` Fernando J. Pereda
2005-11-14 18:19     ` Joel Becker
2005-11-14 18:39       ` Linus Torvalds
2005-11-14 18:59         ` Joel Becker
2005-11-14 19:03         ` Andreas Ericsson
2005-11-14 20:21           ` Junio C Hamano

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).