components/python/python26/patches/Python26-02-pycc.patch
changeset 4984 7145b15b7f0d
parent 4983 db2589571faa
child 4985 eed3576cafd0
equal deleted inserted replaced
4983:db2589571faa 4984:7145b15b7f0d
     1 diff --git Python-2.6.4/Makefile.pre.in Python-2.6.4/Makefile.pre.in
       
     2 --- Python-2.6.4/Makefile.pre.in.orig	Sun Feb 13 21:00:17 2011
       
     3 +++ Python-2.6.4/Makefile.pre.in	Sun Feb 13 21:02:35 2011
       
     4 @@ -663,6 +663,8 @@
       
     5  
       
     6  $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
       
     7  
       
     8 +install-pycc:	$(srcdir)/pycc
       
     9 +	$(INSTALL_SCRIPT) $< $(DESTDIR)$(BINLIBDEST)
       
    10  
       
    11  ######################################################################
       
    12  
       
    13 @@ -728,7 +728,7 @@
       
    14                 $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
       
    15  
       
    16  # Install everything
       
    17 -install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@
       
    18 +install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@ install-pycc
       
    19  
       
    20  # Install almost everything without disturbing previous versions
       
    21  altinstall:	@FRAMEWORKALTINSTALLFIRST@ altbininstall libinstall inclinstall libainstall \
       
    22 
       
    23 diff --git Python-2.6.4/pycc Python-2.6.4/pycc
       
    24 new file mode 100644
       
    25 --- /dev/null
       
    26 +++ Python-2.6.4/pycc
       
    27 @@ -0,0 +1,168 @@
       
    28 +#!/bin/ksh
       
    29 +#
       
    30 +# Script for running the C/C++ compiler when building python modules
       
    31 +#
       
    32 +# CDDL HEADER START
       
    33 +#
       
    34 +# The contents of this file are subject to the terms of the
       
    35 +# Common Development and Distribution License, Version 1.0 only
       
    36 +# (the "License").  You may not use this file except in compliance
       
    37 +# with the License.
       
    38 +#
       
    39 +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
       
    40 +# or http://www.opensolaris.org/os/licensing.
       
    41 +# See the License for the specific language governing permissions
       
    42 +# and limitations under the License.
       
    43 +#
       
    44 +# When distributing Covered Code, include this CDDL HEADER in each
       
    45 +# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       
    46 +# If applicable, add the following below this CDDL HEADER, with the
       
    47 +# fields enclosed by brackets "[]" replaced with your own identifying
       
    48 +# information: Portions Copyright [yyyy] [name of copyright owner]
       
    49 +#
       
    50 +# CDDL HEADER END
       
    51 +#
       
    52 +#
       
    53 +# Copyright 2004-2005 Sun Microsystems, Inc.  All rights reserved.
       
    54 +# Use is subject to license terms.
       
    55 +#
       
    56 +
       
    57 +MYNAME=`basename $0`
       
    58 +
       
    59 +# name of the compiler executable
       
    60 +CCEXE='cc'
       
    61 +# name of the GNU compiler executable
       
    62 +GCCEXE='gcc'
       
    63 +# name of the programming language
       
    64 +CLANG='C'
       
    65 +# name of the env variable for setting the compiler path
       
    66 +CVAR='CC'
       
    67 +
       
    68 +if [ "x$PYCC_CC" != x ]; then
       
    69 +    CC="$PYCC_CC"
       
    70 +fi
       
    71 +
       
    72 +if [ "x$MYNAME" = xpyCC ]; then
       
    73 +    CCEXE='CC'
       
    74 +    GCCEXE='g++'
       
    75 +    CLANG='C++'
       
    76 +    CC="$CXX"
       
    77 +    CVAR='CXX'
       
    78 +    if [ "x$PYCC_CXX" != x ]; then
       
    79 +        CC="$PYCC_CXX"
       
    80 +    fi
       
    81 +fi
       
    82 +
       
    83 +SAVED_IFS="$IFS"
       
    84 +IFS=:
       
    85 +
       
    86 +# check if the CC env variable is set
       
    87 +if [ "x$CC" != x ]; then
       
    88 +    # verify that it doesn't point to this script
       
    89 +    if /usr/bin/cmp -s "$CC" $0; then
       
    90 +        echo "WARNING: "$CVAR" is set to this script; ignoring this value to avoid an infinite loop"
       
    91 +	CC=
       
    92 +    fi
       
    93 +fi
       
    94 +
       
    95 +# check again if the CC env variable is set
       
    96 +if [ "x$CC" != x ]; then
       
    97 +    case "$CC" in
       
    98 +	/* )
       
    99 +	    # $CC is an absolute path name
       
   100 +            # check if $CC exists
       
   101 +	    if [ ! -e "$CC" ]; then
       
   102 +		echo "WARNING: pycc: $CC not found" 1>&2
       
   103 +		CC=
       
   104 +	    else
       
   105 +        # check if $CC is an executable
       
   106 +		if [ ! -x "$CC" -o ! -f "$CC" ]; then
       
   107 +		    echo "WARNING: pycc: $CC is not an executable" 1>&2
       
   108 +		    CC=
       
   109 +		fi
       
   110 +	    fi
       
   111 +	    ;;
       
   112 +	* )
       
   113 +	    # try to find $CC in the PATH
       
   114 +	    NEW_CC=
       
   115 +	    for dir in $PATH; do
       
   116 +		if [ -x "$dir/$CC" ]; then
       
   117 +		    NEW_CC="$dir/$CC"
       
   118 +		    break
       
   119 +		fi
       
   120 +	    done
       
   121 +	    if [ "x$NEW_CC" = x ]; then
       
   122 +		echo "WARNING: pycc: $CC not found" 1>&2
       
   123 +		CC=
       
   124 +	    else
       
   125 +		CC="$NEW_CC"
       
   126 +	    fi
       
   127 +	    ;;
       
   128 +    esac
       
   129 +fi
       
   130 +
       
   131 +if [ "x$CC" = x ]; then
       
   132 +    # Look for the Sun Studio compiler in the PATH
       
   133 +    for dir in $PATH; do
       
   134 +	if [ -x "$dir/$CCEXE" ]; then
       
   135 +	    CC="$dir/$CCEXE"
       
   136 +	    break
       
   137 +	fi
       
   138 +    done
       
   139 +fi
       
   140 +
       
   141 +if [ "x$CC" = x ]; then
       
   142 +    # Look for gcc in the PATH
       
   143 +    for dir in $PATH; do
       
   144 +	if [ -x "$dir/$GCCEXE" ]; then
       
   145 +	    CC="$dir/$GCCEXE"
       
   146 +	    break
       
   147 +	fi
       
   148 +    done
       
   149 +fi
       
   150 +
       
   151 +if [ "x$CC" = x ]; then
       
   152 +    # Check for Sun Studio in /opt/SUNWspro (default install location)
       
   153 +    if [ -x /opt/SUNWspro/bin/$CCEXE ]; then
       
   154 +	CC=/opt/SUNWspro/bin/$CCEXE
       
   155 +    fi
       
   156 +fi
       
   157 +
       
   158 +if [ "x$CC" = x ]; then
       
   159 +    # Check for the GNU compiler in /usr/sfw/bin
       
   160 +    if [ -x /usr/sfw/bin/$GCCEXE ]; then
       
   161 +	CC=/usr/sfw/bin/$GCCEXE
       
   162 +    fi
       
   163 +fi
       
   164 +
       
   165 +if [ "x$CC" = x ]; then
       
   166 +    # Cannot continue without a C compiler
       
   167 +    echo "ERROR: no $CLANG compiler not found; update your PATH or set the $CVAR env variable" 1>&2
       
   168 +    exit 1
       
   169 +fi
       
   170 +
       
   171 +IFS="$SAVED_IFS"
       
   172 +
       
   173 +# We need to make some modifications to adapt correctly to compiler options
       
   174 +# that differ between GCC and Studio.
       
   175 +
       
   176 +extra_flags=
       
   177 +
       
   178 +is_gcc=no
       
   179 +
       
   180 +$CC --version >/dev/null 2>&1 && is_gcc=yes
       
   181 +
       
   182 +if [ "$is_gcc" = yes ]; then
       
   183 +	for flag in "${@}"; do
       
   184 +		# need -shared to link shared objects properly
       
   185 +		if [ "$flag" = "-G" ]; then
       
   186 +			extra_flags="$extra_flags -shared"
       
   187 +		fi
       
   188 +	done
       
   189 +	# force PIC compilation
       
   190 +	extra_flags="$extra_flags -fPIC -DPIC"
       
   191 +else
       
   192 +	extra_flags="$extra_flags -KPIC"
       
   193 +fi
       
   194 +
       
   195 +exec "$CC" $extra_flags "${@}"