This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl 5.003_03: ext/util/make_ext
[perl5.git] / ext / util / make_ext
... / ...
CommitLineData
1#!/bin/sh
2
3# This script acts as a simple interface for building extensions.
4# It primarily used by the perl Makefile:
5#
6# d_dummy $(dynamic_ext): miniperl preplibrary FORCE
7# ext/util/make_ext dynamic $@
8#
9# It may be deleted in a later release of perl so try to
10# avoid using it for other purposes.
11
12target=$1; shift
13extspec=$1; shift
14passthru="$*" # allow extra macro=value to be passed through
15echo ""
16
17case $CONFIG in
18'')
19 if test -f config.sh; then TOP=.;
20 elif test -f ../config.sh; then TOP=..;
21 elif test -f ../../config.sh; then TOP=../..;
22 elif test -f ../../../config.sh; then TOP=../../..;
23 elif test -f ../../../../config.sh; then TOP=../../../..;
24 else
25 echo "Can't find config.sh generated by Configure"; exit 1
26 fi
27 . $TOP/config.sh
28 ;;
29esac
30
31if test "X$extspec" = X; then
32 echo "make_ext: no extension specified"
33 exit 1;
34fi
35
36# The Perl Makefile.SH will expand all extensions to
37# lib/auto/X/X.a (or lib/auto/X/Y/Y.a if nested)
38# A user wishing to run make_ext might use
39# X (or X/Y or X::Y if nested)
40
41# canonise into X/Y form (pname)
42case "$extspec" in
43lib*) # Remove lib/auto prefix and /*.* suffix
44 pname=`echo "$extspec" | sed -e 's:^lib/auto/::' -e 's:/[^/]*\.[^/]*$::' ` ;;
45*::*) # Convert :: to /
46 pname=`echo "$extspec" | sed -e 's/::/\//g' ` ;;
47*) pname="$extspec" ;;
48esac
49# echo "Converted $extspec to $pname"
50
51mname=`echo "$pname" | sed -e 's!/!::!g'`
52depth=`echo "$pname" | sed -e 's![^/][^/]*!..!g'`
53makefile=Makefile
54makeargs=''
55makeopts=''
56
57if test ! -d "ext/$pname"; then
58 echo " Skipping $extspec (directory does not exist)"
59 exit 0 # not an error ?
60fi
61
62
63echo " Making $mname ($target)"
64
65cd ext/$pname
66
67# check link type and do any preliminaries
68case "$target" in
69 # convert 'static' or 'dynamic' into 'all LINKTYPE=XXX'
70static) makeargs="LINKTYPE=static CCCDLFLAGS="
71 target=all
72 ;;
73dynamic) makeargs="LINKTYPE=dynamic";
74 target=all
75 ;;
76
77*clean) # If Makefile has been moved to Makefile.old by a make clean
78 # then use Makefile.old for realclean rather than rebuild it
79 if test ! -f $makefile -a -f Makefile.old; then
80 makefile=Makefile.old
81 makeopts="-f $makefile"
82 echo "Note: Using Makefile.old"
83 fi
84 ;;
85
86*) # for the time being we are strict about what make_ext is used for
87 echo "make_ext: unknown make target '$target'"; exit 1
88 ;;
89'') echo "make_ext: no make target specified (eg static or dynamic)"; exit 1
90 ;;
91esac
92
93if test ! -f $makefile ; then
94 test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl $passthru
95fi
96if test ! -f $makefile ; then
97 if test -f Makefile.SH; then
98 echo "Warning: Writing $makefile from old-style Makefile.SH!"
99 sh Makefile.SH
100 else
101 echo "Warning: No Makefile!"
102 fi
103fi
104
105case "$target" in
106clean) ;;
107realclean) ;;
108*) # Give makefile an opportunity to rewrite itself.
109 # reassure users that life goes on...
110 $make config $passthru || echo "$make config failed, continuing anyway..."
111 ;;
112esac
113
114$make $makeopts $target $makeargs $passthru || exit
115
116exit $?