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

Subsystems: the rest

DORMANTno replies

13 messages, 7 authors, 2016-06-15 · open the first message on its own page

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

From: Dennis Stosberg <hidden>
Date: 2016-06-15 22:42:32

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 <redacted>
---
 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

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

From: Randal L. Schwartz <hidden>
Date: 2016-06-15 22:42:32

quoted
quoted
quoted
quoted
"Dennis" == Dennis Stosberg [off-list ref] 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
[off-list ref] <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!

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

From: Timo Hirvonen <hidden>
Date: 2016-06-15 22:42:32

Dennis Stosberg [off-list ref] 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/

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

From: Dennis Stosberg <hidden>
Date: 2016-06-15 22:42:32

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

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

From: Matthias Lederhofer <hidden>
Date: 2016-06-15 22:42:32

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

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

From: Gerrit Pape <hidden>
Date: 2016-06-15 22:42:32

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.

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

From: Dennis Stosberg <hidden>
Date: 2016-06-15 22:42:32

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

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

From: Timo Hirvonen <hidden>
Date: 2016-06-15 22:42:32

Matthias Lederhofer [off-list ref] 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/

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

From: Dennis Stosberg <hidden>
Date: 2016-06-15 22:42:32

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

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

From: Alex Riesen <hidden>
Date: 2016-06-15 22:42:32

On 7/6/06, Dennis Stosberg [off-list ref] wrote:
 Miscellaneous options:
   --cc=COMPILER          use this C compiler to build MPlayer [gcc]
Is it still MPlayer's?

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

From: Dennis Stosberg <hidden>
Date: 2016-06-15 22:42:32

Alex Riesen wrote:
Is it still MPlayer's?
That is being fixed in the third patch.

Regards,
Dennis

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

From: Petr Baudis <hidden>
Date: 2016-06-15 22:42:32

Dear diary, on Thu, Jul 06, 2006 at 03:10:11PM CEST, I got a letter
where Timo Hirvonen [off-list ref] said that...
Dennis Stosberg [off-list ref] wrote:
quoted
+	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

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

From: Timo Hirvonen <hidden>
Date: 2016-06-15 22:42:32

Petr Baudis [off-list ref] wrote:
Dear diary, on Thu, Jul 06, 2006 at 03:10:11PM CEST, I got a letter
where Timo Hirvonen [off-list ref] said that...
quoted
"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/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help