source: scripts/funcs/multiarch-funcs.sh @ 99e4712

clfs-1.2clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since 99e4712 was 99e4712, checked in by Jim Gifford <clfs@…>, 18 years ago

r567@server (orig r565): ryan | 2005-06-08 02:22:20 -0700
(missing logfile from previous svk merge, diff -r559 for changes)


Create a c wrapper for use when doing multilib builds


create_wrapper now builds and installs a c wrapper as opposed to a shell
wrapper.


The file wrapper.c is created via a here doc... this will be subject to
change


The c wrapper avoids issues when an interpreter such as perl or python is
called from the shebang line of a script, where the contents of the script
would get passed to the shell of the wrapper, NOT to the required interpretor.


Due to this, the previous PERL and PYTHON env var hackery can be removed.


----------------------------------------------
Remove unneded which_func from multiarch_funcs
Minor edits to get the changelog in ;-)



  • Property mode set to 100755
File size: 6.2 KB
Line 
1#!/bin/bash
2#
3# Multi-arch handling functions for cross-lfs build
4# -------------------------------------------------
5# $LastChangedBy$
6# $LastChangedDate$
7# $LastChangedRevision$
8# $HeadURL$
9#
10
11# TODO: should really check if DEFAULTENV and LIBDIRENV have been set
12#       in plfs-config and bail out if they have not...
13
14set_buildenv() {
15   case ${SELF} in
16      *-64.sh )  BUILDENV=64 ;;
17      *-32.sh )  BUILDENV=32 ;;
18      *-n32.sh ) BUILDENV=n32 ;;
19      *-o32.sh ) BUILDENV=o32 ;;
20      *-o64.sh ) BUILDENV=o64 ;;
21      * )        BUILDENV=${DEFAULTENV} ;;
22   esac
23
24   export BUILDENV
25}
26
27set_libdirname() {
28   # TODO: this will barf on mips if setting 64bit libs to go to */lib
29   #       but will work if setting
30   if [ -z "${BUILDENV}" ]; then 
31      BUILDENV=${DEFAULTENV}
32      export BUILDENV
33   fi
34   if [ ! "${BUILDENV}" = "${LIBDIRENV}" ]; then
35      case ${BUILDENV} in
36         32 | o32 | n32 )   libdirname=lib32 ;;
37         64 | o64 )         libdirname=lib64 ;;
38         * )   echo "unknown buildenv ${BUILDENV}"; return 1
39      esac
40      LOG=`echo ${LOG} | sed "s@\.log@-${BUILDENV}&@"`
41   else
42      libdirname=lib
43   fi
44
45   # Adjust PKG_CONFIG_PATH
46   PKG_CONFIG_PATH=`echo "${PKG_CONFIG_PATH}" | \
47                    sed -e "s@lib[36][124]@lib@g"  -e "s@lib@${libdirname}@g" `
48
49   # Adjust GNOME_LIBCONF_PATH
50   GNOME_LIBCONF_PATH=`echo "${GNOME_LIBCONF_PATH}" | \
51                    sed -e "s@lib[36][124]@lib@g"  -e "s@lib@${libdirname}@g" `
52
53}
54
55# Following function sets compiler options
56setup_multiarch() {
57   if [ "Y" = "${MULTIARCH}" ]; then
58      vendor_os=`echo ${TARGET} | sed 's@\([^-]*\)-\(.*\)@\2@'`
59      TGT_ARCH=`echo ${TARGET} | sed 's@\([^-]*\).*@\1@'`
60
61      ARCH_CFLAGS=""
62      ALT_TGT=""
63
64      case ${BUILDENV} in
65      64 )
66         case ${TGT_ARCH} in
67            x86_64 )   ARCH_CFLAGS="-m${BUILDENV}" 
68                       ARCH_LDFLAGS="-m elf_x86_64" ;;
69            powerpc* | ppc* | s390* )
70                       ARCH_CFLAGS="-m${BUILDENV}" ;;
71            sparc* )   ARCH_CFLAGS="-m${BUILDENV}" 
72                       ALT_TGT=sparc64-${vendor_os} ;;
73            mips*el* ) ARCH_CFLAGS="-mabi=${BUILDENV}"
74                       ALT_TGT="mips64el-${vendor_os}" ;;
75            * )
76               echo "### Unknown: ${TGT_ARCH} -  ${BUILDENV} ###" 1>&2
77               return 1
78            ;;
79         esac
80      ;;
81      32 )
82         case ${TGT_ARCH} in
83            x86_64 | x86-64 )   ARCH_CFLAGS="-m${BUILDENV}"
84                                ARCH_LDFLAGS="-m elf_i386"
85                                ALT_TGT="i686-${vendor_os}" ;;
86            powerpc* | ppc* )   ARCH_CFLAGS="-m${BUILDENV}"
87                                ALT_TGT="ppc-${vendor_os}" ;;
88            sparc* )            ARCH_CFLAGS="-m${BUILDENV}"
89                                ALT_TGT="sparcv9-${vendor_os}" ;;
90            mips*el* )          ARCH_CFLAGS="-mabi=${BUILDENV}"
91                                ALT_TGT="mipsel-${vendor_os}" ;;
92            * )
93               echo "### Unknown: ${TGT_ARCH} -  ${BUILDENV} ###" 1>&2
94               return 1
95            ;;
96         esac
97      ;;
98      n32 )
99         case ${TGT_ARCH} in
100            mips*el* )          ARCH_CFLAGS="-mabi=${BUILDENV}" ;;
101            * )
102               echo "### Unknown: ${TGT_ARCH} -  ${BUILDENV} ###" 1>&2
103               return 1
104            ;;
105         esac
106      ;;
107      31 )
108         case ${TGT_ARCH} in
109            s390* ) ARCH_CFLAGS="-m${BUILDENV}"
110                    ALT_TGT="s390-${vender_os}" ;;
111            * )
112               echo "### Unknown: ${TGT_ARCH} -  ${BUILDENV} ###" 1>&2
113               return 1
114            ;;
115         esac
116      ;;
117      * )
118         echo "### Unknown biarch system ###" 1>&2
119         return 1
120      ;;
121      esac
122
123      suffix="-${BUILDENV}"
124   fi
125}
126
127create_wrapper() {
128   # want one arg only, the name of the wrapper file to create
129   if [ ! "${#}" = "1" ]; then
130      echo "create_wrapper: error, use create_wrapper /path/to/wrapper" 1>&2
131      return 1
132   fi
133   wrapper=${1}
134
135   if [ -z "${DEFAULTENV}" ]; then
136      echo "create_wrapper: error, DEFAULTENV not set" 1>&2
137      return 1
138   fi
139
140   wrapperdir=`dirname ${wrapper}`
141   if [ ! -d ${wrapperdir} ]; then mkdir -p ${wrapperdir} ; fi
142
143   cat > wrapper.c <<"EOF"
144/*
145
146   wrapper.c - c wrapper for cross-lfs multiarch handling
147   ------------------------------------------------------
148   Created By:  Ryan Oliver <ryan.oliver@pha.com.au> 20050606
149
150   $LastChangedBy$
151   $LastChangedDate$
152   $LastChangedRevision$
153   $HeadURL$
154
155 */
156
157#include <unistd.h>
158#include <stdlib.h>
159#include <errno.h>
160
161/* TODO: should check for __x86_64__ , __powerpc64__ etc and set accordingly */
162#ifndef DEFAULTENV
163#define DEFAULTENV "64"
164#endif
165
166int main(int argc, char **argv) {
167
168        char *filename;
169        char *buildenv;
170
171        if(!(buildenv = getenv("BUILDENV")))
172                buildenv = DEFAULTENV;
173
174        filename = (char *) malloc(strlen(argv[0]) + strlen(buildenv) + 2);
175        strcpy(filename, argv[0]);
176        strcat(filename, "-");
177        strcat(filename, buildenv);
178
179        execvp(filename, argv);
180        perror(argv[0]);
181        free(filename);
182
183}
184EOF
185
186   OLD_BUILDENV="${BUILDENV}"
187   BUILDENV="${DEFAULTENV}"
188   setup_multiarch
189
190   ${CC-gcc} ${ARCH_CFLAGS} -DDEFAULTENV=\"${DEFAULTENV}\" \
191       wrapper.c -o ${wrapper}
192   chmod 755 ${wrapper}
193
194   BUILDENV="${OLD_BUILDENV}"
195
196}
197
198use_wrapper() {
199   # Use full path
200   wrapper=/usr/bin/multilib_wrapper
201
202   if [ "${#}" = "0" ]; then
203         echo "use_wrapper: error, no files specified" 1>&2
204         return 1
205   fi
206   if [ -z "${BUILDENV}" ]; then
207         echo "use_wrapper: error, BUILDENV not set" 1>&2
208         return 1
209   fi
210
211   echo " o set files to use multi-arch wrapper ( ${wrapper} )"
212   if [ ! -f ${wrapper} ]; then create_wrapper ${wrapper} || return 1 ; fi
213
214   for file in ${@} ; do
215      if [ ! -f ${file} ]; then
216         echo "use_wrapper: error, ${file} is not a regular file" 1>&2
217         return 1
218      fi
219
220      # do the work
221      mv ${file} ${file}-${BUILDENV} &&
222      ln -sf ${wrapper} ${file} &&
223      echo "   - ${file}" || {
224         echo "use_wrapper: error creating ${file}" 1>&2 
225         return 1
226      }
227
228   done
229}
230
231export -f set_buildenv
232export -f set_libdirname
233export -f setup_multiarch
234export -f create_wrapper
235export -f use_wrapper
236export -f which_func
Note: See TracBrowser for help on using the repository browser.