# [PATCH 1/3] configure: Add test for Perl

14 messages from 2006-07-06 to 2006-07-07. Participants: Dennis Stosberg, Randal L. Schwartz, Timo Hirvonen, Matthias Lederhofer, Gerrit Pape, Alex Riesen, Petr Baudis, Junio C Hamano.
Thread: https://gitlist.dev/t/4783

## Dennis Stosberg, 2006-07-06 12:40

Subject: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706124025.G325584e9@leonov.stosberg.net>
URL: https://gitlist.dev/e/20060706124025.G325584e9%40leonov.stosberg.net

```
This patch adds two tests to the configuration script. The first
one tries to find a perl binary in the path.  The second one checks
whether the found perl is of a sufficient version.

It also adds a --perl=/path parameter to override the autodetection
of the perl binary.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
---
 config-lib.sh |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/config-lib.sh b/config-lib.sh
index 68fecc5..69999a8 100755
--- a/config-lib.sh
+++ b/config-lib.sh
@@ -262,6 +262,7 @@ Installation directories:
 
 Miscellaneous options:
   --cc=COMPILER          use this C compiler to build MPlayer [gcc]
+  --perl=PATH            path to perl binary [autodetect]
   --target=PLATFORM      target platform (i386-linux, arm-linux, etc)
   --with-install=PATH    use a custom install program (useful if your OS uses
                          a GNU-incompatible install utility by default and
@@ -296,6 +297,8 @@ EOF
 
 		--cc=*)
 			_cc=`echo $ac_option | cut -d '=' -f 2` ;;
+		--perl=*)
+			_perl=`echo $ac_option | cut -d '=' -f 2` ;;
 		--target=*)
 			_target=`echo $ac_option | cut -d '=' -f 2` ;;
 		--with-install=*)
@@ -409,8 +412,21 @@ int main(void) { return 0; }
 EOF
 	{ cc_check && tmp_run; } || die "unusable compiler or produced binary"
 	echores yes
-}
 
+	echocheck "for perl"
+	if test -z "$_perl" ; then
+		_perl=`which perl`
+		test "$_perl" || die "cannot find path to perl"
+	fi
+	echores "$_perl"
+
+	echocheck "perl version"
+	_perl_version=`"$_perl" -e 'require 5.6.0;printf "%vd", $^V'`
+	if test -z "$_perl_version" ; then
+		die "your perl version is too old"
+	fi
+	echores "$_perl_version"
+}
 
 write_config() {
 	echo "Creating config.mak.autogen"
@@ -420,6 +436,7 @@ write_config() {
 # -------- Generated by configure -----------
 
 CC = $_cc
+PERL_PATH = $_perl
 INSTALL = $_install
 
 EOF
-- 
1.4.1

```

## Randal L. Schwartz, 2006-07-06 13:03

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <868xn67umr.fsf@blue.stonehenge.com>
URL: https://gitlist.dev/e/868xn67umr.fsf%40blue.stonehenge.com
In-Reply-To: <20060706124025.G325584e9@leonov.stosberg.net>

```
>>>>> "Dennis" == Dennis Stosberg <dennis@stosberg.net> writes:

Dennis> +	_perl_version=`"$_perl" -e 'require 5.6.0;printf "%vd", $^V'`

perl -V:version gives you the version like:

        version='5.8.6';

nice and eval-able. :)  But you can just rely on the exit status from

        perl -e 'eval { require 5.006; 1 } or exit 1'

which will be good (0) if the perl is new enough, and bad (1) if the perl is
too old.  (Perl4 will really barf and give an error as well, but still
be an exit 1.)

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

```

## Timo Hirvonen, 2006-07-06 13:10

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706161011.ccc2ea1c.tihirvon@gmail.com>
URL: https://gitlist.dev/e/20060706161011.ccc2ea1c.tihirvon%40gmail.com
In-Reply-To: <20060706124025.G325584e9@leonov.stosberg.net>

```
Dennis Stosberg <dennis@stosberg.net> wrote:

> +	echocheck "for perl"
> +	if test -z "$_perl" ; then
> +		_perl=`which perl`
> +		test "$_perl" || die "cannot find path to perl"
> +	fi
> +	echores "$_perl"

"which" isn't portable. On SunOS 5.9 "which foo" prints error message to
stdout and returns 0.  I use this in my own configure scripts:

path_find()
{
        if test -x "$1"
        then
                echo "$1"
                return 0
        fi
        for i in `echo $PATH | sed 's/:/ /g'`
        do
                if test -x "$i/$1"
                then
                        echo "$i/$1"
                        return 0
                fi
        done
        return 1
}

-- 
http://onion.dynserv.net/~timo/

```

## Dennis Stosberg, 2006-07-06 13:29

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706132951.G5731ccca@leonov.stosberg.net>
URL: https://gitlist.dev/e/20060706132951.G5731ccca%40leonov.stosberg.net
In-Reply-To: <20060706161011.ccc2ea1c.tihirvon@gmail.com>

```
Timo Hirvonen wrote:

> "which" isn't portable. On SunOS 5.9 "which foo" prints error message to
> stdout and returns 0.  I use this in my own configure scripts:

Yes, you're right and that function looks fine.  I will resend the
patches later, but I'll wait a few hours for further comments.

Regards,
Dennis

```

## Matthias Lederhofer, 2006-07-06 13:58

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <E1FyUNT-0007Ko-JR@moooo.ath.cx>
URL: https://gitlist.dev/e/E1FyUNT-0007Ko-JR%40moooo.ath.cx
In-Reply-To: <20060706161011.ccc2ea1c.tihirvon@gmail.com>

```
> "which" isn't portable. On SunOS 5.9 "which foo" prints error message to
> stdout and returns 0.  I use this in my own configure scripts:
> 
> path_find()
> {
>         if test -x "$1"
>         then
>                 echo "$1"
>                 return 0
>         fi
>         for i in `echo $PATH | sed 's/:/ /g'`
>         do
>                 if test -x "$i/$1"
>                 then
>                         echo "$i/$1"
>                         return 0
>                 fi
>         done
>         return 1
> }

This will not work with spaces in $PATH. I'd do something like this if
cut is portable (I have only freebsd and linux to test):

path_find()
{
    path="$PATH"
    while [ "$path" != "" ]; do
        p="`echo $path | cut -d : -f 1`"
        if [ "$p" = "$path" ]; then
            path=""
        else
            path="`echo $path | cut -d : -f 2-`"
        fi
        if [ -x "$p/$1" ]; then
            echo "$p/$1"
            return 0
        fi
    done
    return 1
}

Is there any reason to check the current directory first? "which"
doesn't do it for me and without ./ in the front it does not work
(without . is not in $PATH).

```

## Gerrit Pape, 2006-07-06 14:17

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706141725.28115.qmail@775c2aaf180a85.315fe32.mid.smarden.org>
URL: https://gitlist.dev/e/20060706141725.28115.qmail%40775c2aaf180a85.315fe32.mid.smarden.org
In-Reply-To: <E1FyUNT-0007Ko-JR@moooo.ath.cx>

```
On Thu, Jul 06, 2006 at 03:58:47PM +0200, Matthias Lederhofer wrote:
> This will not work with spaces in $PATH. I'd do something like this if
> cut is portable (I have only freebsd and linux to test):

This should work with shell/builtins only, no sed/cut:

 path=${PATH}:
 while test -n "$path"; do
   p=${path%%:*}/$1
   test ! -x "$p" || { echo "$p"; return 0; }
   path=${path#*:}
 done
 test ! -x "$1" || { echo "$1" && return 0; }
 return 1

Regards, Gerrit.

```

## Dennis Stosberg, 2006-07-06 14:25

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706142532.G37e44125@leonov.stosberg.net>
URL: https://gitlist.dev/e/20060706142532.G37e44125%40leonov.stosberg.net
In-Reply-To: <20060706141725.28115.qmail@775c2aaf180a85.315fe32.mid.smarden.org>

```
Gerrit Pape wrote:

> This should work with shell/builtins only, no sed/cut:
>
>  path=${PATH}:
>  while test -n "$path"; do
>    p=${path%%:*}/$1
>    test ! -x "$p" || { echo "$p"; return 0; }
>    path=${path#*:}

$ exec /bin/sh
$ uname -a
SunOS hostname 5.9 Generic_118558-25 sun4u sparc SUNW,Ultra-5_10 Solaris
$ echo ${PATH%%:*}
bad substitution
$ echo ${PATH#*:}
bad substitution

Regards,
Dennis

```

## Timo Hirvonen, 2006-07-06 14:27

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706172756.a42f1627.tihirvon@gmail.com>
URL: https://gitlist.dev/e/20060706172756.a42f1627.tihirvon%40gmail.com
In-Reply-To: <E1FyUNT-0007Ko-JR@moooo.ath.cx>

```
Matthias Lederhofer <matled@gmx.net> wrote:

> This will not work with spaces in $PATH. I'd do something like this if
> cut is portable (I have only freebsd and linux to test):

This works at least with SunOS /bin/sh, dash, posh and bash.

path_find()
{
        if test -x "$1"
        then
                echo "$1"
                return 0
        fi
	_ifs="$IFS"
	IFS=:
        for i in $PATH
        do
                if test -x "$i/$1"
                then
			IFS="$_ifs"
                        echo "$i/$1"
                        return 0
                fi
        done
	IFS="$_ifs"
        return 1
}

> Is there any reason to check the current directory first? "which"
> doesn't do it for me and without ./ in the front it does not work
> (without . is not in $PATH).

It is not needed but might be useful if PERL is user configurable
variable and can contain either full path or basename. For example this
code

    test "$PROG" || PROG=prog
    PROG=`path_find "$PROG"`

works with these cases

    $ PROG=/usr/bin/program ./configure
    $ PROG=program-1.2 ./configure

-- 
http://onion.dynserv.net/~timo/

```

## Dennis Stosberg, 2006-07-06 15:34

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706153445.G424b7ea1@leonov.stosberg.net>
URL: https://gitlist.dev/e/20060706153445.G424b7ea1%40leonov.stosberg.net
In-Reply-To: <20060706172756.a42f1627.tihirvon@gmail.com>

```
Timo Hirvonen wrote:

>         if test -x "$1"
>         then
>                 echo "$1"
>                 return 0
>         fi

When run in the Git source directory, this will find the perl/
subdir.  If the user gives an absolute path to the perl binary,
there will be no auto-detection anyway, so I think we don't need it.

> It is not needed but might be useful if PERL is user configurable
> variable and can contain either full path or basename. For example this
> code
> 
>     test "$PROG" || PROG=prog
>     PROG=`path_find "$PROG"`
> 
> works with these cases
> 
>     $ PROG=/usr/bin/program ./configure
>     $ PROG=program-1.2 ./configure

I will add that.  For the compiler, the script already checks $CC.
I wonder whether

  --with-perl=...
  --with-python=... 

is more common (more similar to autoconf) than

  --perl=
  --python=

Regards,
Dennis

```

## Alex Riesen, 2006-07-06 15:40

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <81b0412b0607060840g4df16edbm7df69d6c8edcc071@mail.gmail.com>
URL: https://gitlist.dev/e/81b0412b0607060840g4df16edbm7df69d6c8edcc071%40mail.gmail.com
In-Reply-To: <20060706124025.G325584e9@leonov.stosberg.net>

```
On 7/6/06, Dennis Stosberg <dennis@stosberg.net> wrote:
>  Miscellaneous options:
>    --cc=COMPILER          use this C compiler to build MPlayer [gcc]

Is it still MPlayer's?

```

## Dennis Stosberg, 2006-07-06 15:44

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060706154447.G7e29c5fa@leonov.stosberg.net>
URL: https://gitlist.dev/e/20060706154447.G7e29c5fa%40leonov.stosberg.net
In-Reply-To: <81b0412b0607060840g4df16edbm7df69d6c8edcc071@mail.gmail.com>

```
Alex Riesen wrote:

> Is it still MPlayer's?

That is being fixed in the third patch.

Regards,
Dennis

```

## Petr Baudis, 2006-07-07 11:06

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060707110655.GR29115@pasky.or.cz>
URL: https://gitlist.dev/e/20060707110655.GR29115%40pasky.or.cz
In-Reply-To: <20060706161011.ccc2ea1c.tihirvon@gmail.com>

```
Dear diary, on Thu, Jul 06, 2006 at 03:10:11PM CEST, I got a letter
where Timo Hirvonen <tihirvon@gmail.com> said that...
> Dennis Stosberg <dennis@stosberg.net> wrote:
> 
> > +	echocheck "for perl"
> > +	if test -z "$_perl" ; then
> > +		_perl=`which perl`
> > +		test "$_perl" || die "cannot find path to perl"
> > +	fi
> > +	echores "$_perl"
> 
> "which" isn't portable. On SunOS 5.9 "which foo" prints error message to
> stdout and returns 0.

Wait, Git runs on SunOS 5.9?

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Snow falling on Perl. White noise covering line noise.
Hides all the bugs too. -- J. Putnam

```

## Junio C Hamano, 2006-07-07 11:20

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <7vlkr5zmny.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vlkr5zmny.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20060707110655.GR29115@pasky.or.cz>

```
Petr Baudis <pasky@suse.cz> writes:

>> "which" isn't portable. On SunOS 5.9 "which foo" prints error message to
>> stdout and returns 0.
>
> Wait, Git runs on SunOS 5.9?

I thought so.  In any case, the traditionalist way is to split $PATH
by hand with "IFS=:" -- somebody already posted that on this
thread.

```

## Timo Hirvonen, 2006-07-07 11:23

Subject: Re: [PATCH 1/3] configure: Add test for Perl
Message-ID: <20060707142309.4d9601dd.tihirvon@gmail.com>
URL: https://gitlist.dev/e/20060707142309.4d9601dd.tihirvon%40gmail.com
In-Reply-To: <20060707110655.GR29115@pasky.or.cz>

```
Petr Baudis <pasky@suse.cz> wrote:

> Dear diary, on Thu, Jul 06, 2006 at 03:10:11PM CEST, I got a letter
> where Timo Hirvonen <tihirvon@gmail.com> said that...
> > "which" isn't portable. On SunOS 5.9 "which foo" prints error message to
> > stdout and returns 0.
> 
> Wait, Git runs on SunOS 5.9?

I have no idea.  I noticed the problem with "which" when I ported my
cmus configure scripts to SunOS.

In the git Makefile there are:

ifeq ($(uname_S),SunOS)
...
    ifeq ($(uname_R),5.8)
...
    ifeq ($(uname_R),5.9)


so it at least tries to work ;)  Oh and that 5.9 is apparently kernel
version, not OS version.  Sorry for the confusion.

-- 
http://onion.dynserv.net/~timo/

```
