xref: /aosp_15_r20/external/libffi/libtool-ldflags (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan#! /bin/sh
2*1fd5a2e1SPrashanth Swaminathan
3*1fd5a2e1SPrashanth Swaminathan# Script to translate LDFLAGS into a form suitable for use with libtool.
4*1fd5a2e1SPrashanth Swaminathan
5*1fd5a2e1SPrashanth Swaminathan# Copyright (C) 2005 Free Software Foundation, Inc.
6*1fd5a2e1SPrashanth Swaminathan#
7*1fd5a2e1SPrashanth Swaminathan# This file is free software; you can redistribute it and/or modify
8*1fd5a2e1SPrashanth Swaminathan# it under the terms of the GNU General Public License as published by
9*1fd5a2e1SPrashanth Swaminathan# the Free Software Foundation; either version 2 of the License, or
10*1fd5a2e1SPrashanth Swaminathan# (at your option) any later version.
11*1fd5a2e1SPrashanth Swaminathan#
12*1fd5a2e1SPrashanth Swaminathan# This program is distributed in the hope that it will be useful,
13*1fd5a2e1SPrashanth Swaminathan# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*1fd5a2e1SPrashanth Swaminathan# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*1fd5a2e1SPrashanth Swaminathan# GNU General Public License for more details.
16*1fd5a2e1SPrashanth Swaminathan#
17*1fd5a2e1SPrashanth Swaminathan# You should have received a copy of the GNU General Public License
18*1fd5a2e1SPrashanth Swaminathan# along with this program; if not, write to the Free Software
19*1fd5a2e1SPrashanth Swaminathan# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20*1fd5a2e1SPrashanth Swaminathan# MA 02110-1301, USA.
21*1fd5a2e1SPrashanth Swaminathan
22*1fd5a2e1SPrashanth Swaminathan# Contributed by CodeSourcery, LLC.
23*1fd5a2e1SPrashanth Swaminathan
24*1fd5a2e1SPrashanth Swaminathan# This script is designed to be used from a Makefile that uses libtool
25*1fd5a2e1SPrashanth Swaminathan# to build libraries as follows:
26*1fd5a2e1SPrashanth Swaminathan#
27*1fd5a2e1SPrashanth Swaminathan#   LTLDFLAGS = $(shell libtool-ldflags $(LDFLAGS))
28*1fd5a2e1SPrashanth Swaminathan#
29*1fd5a2e1SPrashanth Swaminathan# Then, use (LTLDFLAGS) in place of $(LDFLAGS) in your link line.
30*1fd5a2e1SPrashanth Swaminathan
31*1fd5a2e1SPrashanth Swaminathan# The output of the script.  This string is built up as we process the
32*1fd5a2e1SPrashanth Swaminathan# arguments.
33*1fd5a2e1SPrashanth Swaminathanresult=
34*1fd5a2e1SPrashanth Swaminathanprev_arg=
35*1fd5a2e1SPrashanth Swaminathan
36*1fd5a2e1SPrashanth Swaminathanfor arg
37*1fd5a2e1SPrashanth Swaminathando
38*1fd5a2e1SPrashanth Swaminathan    case $arg in
39*1fd5a2e1SPrashanth Swaminathan	-f*|--*)
40*1fd5a2e1SPrashanth Swaminathan	    # Libtool does not ascribe any special meaning options
41*1fd5a2e1SPrashanth Swaminathan	    # that begin with -f or with a double-dash.  So, it will
42*1fd5a2e1SPrashanth Swaminathan	    # think these options are linker options, and prefix them
43*1fd5a2e1SPrashanth Swaminathan	    # with "-Wl,".  Then, the compiler driver will ignore the
44*1fd5a2e1SPrashanth Swaminathan	    # options.  So, we prefix these options with -Xcompiler to
45*1fd5a2e1SPrashanth Swaminathan	    # make clear to libtool that they are in fact compiler
46*1fd5a2e1SPrashanth Swaminathan	    # options.
47*1fd5a2e1SPrashanth Swaminathan	    case $prev_arg in
48*1fd5a2e1SPrashanth Swaminathan		-Xpreprocessor|-Xcompiler|-Xlinker)
49*1fd5a2e1SPrashanth Swaminathan		    # This option is already prefixed; don't prefix it again.
50*1fd5a2e1SPrashanth Swaminathan		    ;;
51*1fd5a2e1SPrashanth Swaminathan		*)
52*1fd5a2e1SPrashanth Swaminathan		    result="$result -Xcompiler"
53*1fd5a2e1SPrashanth Swaminathan		    ;;
54*1fd5a2e1SPrashanth Swaminathan	    esac
55*1fd5a2e1SPrashanth Swaminathan	    ;;
56*1fd5a2e1SPrashanth Swaminathan	*)
57*1fd5a2e1SPrashanth Swaminathan	    # We do not want to add -Xcompiler to other options because
58*1fd5a2e1SPrashanth Swaminathan	    # that would prevent libtool itself from recognizing them.
59*1fd5a2e1SPrashanth Swaminathan	    ;;
60*1fd5a2e1SPrashanth Swaminathan    esac
61*1fd5a2e1SPrashanth Swaminathan    prev_arg=$arg
62*1fd5a2e1SPrashanth Swaminathan
63*1fd5a2e1SPrashanth Swaminathan    # If $(LDFLAGS) is (say):
64*1fd5a2e1SPrashanth Swaminathan    #   a "b'c d" e
65*1fd5a2e1SPrashanth Swaminathan    # then the user expects that:
66*1fd5a2e1SPrashanth Swaminathan    #   $(LD) $(LDFLAGS)
67*1fd5a2e1SPrashanth Swaminathan    # will pass three arguments to $(LD):
68*1fd5a2e1SPrashanth Swaminathan    #   1) a
69*1fd5a2e1SPrashanth Swaminathan    #   2) b'c d
70*1fd5a2e1SPrashanth Swaminathan    #   3) e
71*1fd5a2e1SPrashanth Swaminathan    # We must ensure, therefore, that the arguments are appropriately
72*1fd5a2e1SPrashanth Swaminathan    # quoted so that using:
73*1fd5a2e1SPrashanth Swaminathan    #   libtool --mode=link ... $(LTLDFLAGS)
74*1fd5a2e1SPrashanth Swaminathan    # will result in the same number of arguments being passed to
75*1fd5a2e1SPrashanth Swaminathan    # libtool.   In other words, when this script was invoked, the shell
76*1fd5a2e1SPrashanth Swaminathan    # removed one level of quoting, present in $(LDFLAGS); we have to put
77*1fd5a2e1SPrashanth Swaminathan    # it back.
78*1fd5a2e1SPrashanth Swaminathan
79*1fd5a2e1SPrashanth Swaminathan    # Quote any embedded single quotes.
80*1fd5a2e1SPrashanth Swaminathan    case $arg in
81*1fd5a2e1SPrashanth Swaminathan	*"'"*)
82*1fd5a2e1SPrashanth Swaminathan	    # The following command creates the script:
83*1fd5a2e1SPrashanth Swaminathan	    #   1s,^X,,;s|'|'"'"'|g
84*1fd5a2e1SPrashanth Swaminathan	    # which removes a leading X, and then quotes and embedded single
85*1fd5a2e1SPrashanth Swaminathan	    # quotes.
86*1fd5a2e1SPrashanth Swaminathan	    sed_script="1s,^X,,;s|'|'\"'\"'|g"
87*1fd5a2e1SPrashanth Swaminathan	    # Add a leading "X" so that if $arg starts with a dash,
88*1fd5a2e1SPrashanth Swaminathan	    # the echo command will not try to interpret the argument
89*1fd5a2e1SPrashanth Swaminathan	    # as a command-line option.
90*1fd5a2e1SPrashanth Swaminathan	    arg="X$arg"
91*1fd5a2e1SPrashanth Swaminathan	    # Generate the quoted string.
92*1fd5a2e1SPrashanth Swaminathan	    quoted_arg=`echo "$arg" | sed -e "$sed_script"`
93*1fd5a2e1SPrashanth Swaminathan	    ;;
94*1fd5a2e1SPrashanth Swaminathan	*)
95*1fd5a2e1SPrashanth Swaminathan	    quoted_arg=$arg
96*1fd5a2e1SPrashanth Swaminathan	    ;;
97*1fd5a2e1SPrashanth Swaminathan    esac
98*1fd5a2e1SPrashanth Swaminathan    # Surround the entire argument with single quotes.
99*1fd5a2e1SPrashanth Swaminathan    quoted_arg="'"$quoted_arg"'"
100*1fd5a2e1SPrashanth Swaminathan
101*1fd5a2e1SPrashanth Swaminathan    # Add it to the string.
102*1fd5a2e1SPrashanth Swaminathan    result="$result $quoted_arg"
103*1fd5a2e1SPrashanth Swaminathandone
104*1fd5a2e1SPrashanth Swaminathan
105*1fd5a2e1SPrashanth Swaminathan# Output the string we have built up.
106*1fd5a2e1SPrashanth Swaminathanecho "$result"
107