📄 configure
字号:
# split ${srcdir}/configure.in into common, per-host, per-target,# and post-target parts. Post-target is optional.sed -e '/^# per\-host:/,$d' ${srcdir}/configure.in > ${tmpfile}.comsed -e '1,/^# per\-host:/d' -e '/^# per\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.hstif grep '^# post-target:' ${srcdir}/configure.in >/dev/null ; then sed -e '1,/^# per\-target:/d' -e '/^# post\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.tgt sed -e '1,/^# post\-target:/d' ${srcdir}/configure.in > ${tmpfile}.poselse sed -e '1,/^# per\-target:/d' ${srcdir}/configure.in > ${tmpfile}.tgt echo >${tmpfile}.posfi### do common part of configure.in. ${tmpfile}.com# some sanity checks on configure.incase "${srctrigger}" in"") echo '***' srctrigger not set in ${PWD=`pwd`}/configure.in. 1>&2 exit 1 ;;*) ;;esacresult=`${configsub} ${host_alias}`host_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`host_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`host_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`host=${host_cpu}-${host_vendor}-${host_os}. ${tmpfile}.hstresult=`${configsub} ${target_alias}`target_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`target=${target_cpu}-${target_vendor}-${target_os}. ${tmpfile}.tgt# Find the source files, if location was not specified.case "${srcdir}" in"") srcdirdefaulted=1 srcdir=. if [ ! -r ${srctrigger} ] ; then srcdir=.. fi ;;*) ;;esacif [ ! -r ${srcdir}/${srctrigger} ] ; then case "${srcdirdefaulted}" in "") echo '***' "${progname}: Can't find ${srcname} sources in ${PWD=`pwd`}/${srcdir}" 1>&2 ;; *) echo '***' "${progname}: Can't find ${srcname} sources in ${PWD=`pwd`}/. or ${PWD=`pwd`}/.." 1>&2 ;; esac echo '***' \(At least ${srctrigger} is missing.\) 1>&2 exit 1fitooldir="\$(libdir)/${target_alias}"if [ "${host_alias}" != "${target_alias}" ] ; then if [ "${program_prefix}" = "" ] ; then if [ "${program_suffix}" = "" ] ; then if [ "${program_transform_name}" = "" ] ; then program_prefix=${target_alias}- ; fi fi fifi# Merge program_prefix and program_suffix onto program_transform_name# Use a double $ so that make ignores itif [ "${program_suffix}" != "" ] ; then program_transform_name="-e s/\$\$/${program_suffix}/ ${program_transform_name}"fiif [ "${program_prefix}" != "" ] ; then program_transform_name="-e s/^/${program_prefix}/ ${program_transform_name}"fifor subdir in . ${subdirs} ; do # ${subdir} is relative path from . to the directory we're currently # configuring. # ${invsubdir} is inverse of ${subdir), *with* trailing /, if needed. invsubdir=`echo ${subdir}/ | sed -e 's|\./||g' -e 's|[^/]*/|../|g'` ### figure out what to do with srcdir case "${srcdir}" in ".") # no -srcdir option. We're building in place. makesrcdir=. ;; /*) # absolute path makesrcdir=`echo ${srcdir}/${subdir} | sed -e 's|/\.$||'` ;; *) # otherwise relative case "${subdir}" in .) makesrcdir=${srcdir} ;; *) makesrcdir=`echo ${subdir} | sed -e 's:[^./][^./]*:..:g'`/${srcdir}/${subdir} ;; esac ;; esac if [ "${subdir}/" != "./" ] ; then Makefile=${subdir}/Makefile fi if [ ! -d ${subdir} ] ; then mkdir ${subdir} fi case "${removing}" in "") case "${subdir}" in .) ;; *) eval echo Building in ${subdir} ${redirect} ;; esac # FIXME Should this be done recursively ??? (Useful for e.g. gdbtest) # Set up the list of links to be made. # ${links} is the list of link names, and ${files} is the list of names to link to. # Make the links. configlinks="${links}" if [ -r ${subdir}/config.status ] ; then mv -f ${subdir}/config.status ${subdir}/config.back fi while [ -n "${files}" ] ; do # set file to car of files, files to cdr of files set ${files}; file=$1; shift; files=$* set ${links}; link=$1; shift; links=$* if [ ! -r ${srcdir}/${file} ] ; then echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2 echo '***' "since the file \"${file}\" does not exist." 1>&2 exit 1 fi ${remove} -f ${link} # Make a symlink if possible, otherwise try a hard link ${symbolic_link} ${srcdir}/${file} ${link} 2>/dev/null || ${hard_link} ${srcdir}/${file} ${link} if [ ! -r ${link} ] ; then echo '***' "${progname}: unable to link \"${link}\" to \"${srcdir}/${file}\"." 1>&2 exit 1 fi echo "Linked \"${link}\" to \"${srcdir}/${file}\"." done # Create a .gdbinit file which runs the one in srcdir # and tells GDB to look there for source files. if [ -r ${srcdir}/${subdir}/.gdbinit ] ; then case ${srcdir} in .) ;; *) cat > ${subdir}/.gdbinit <<EOF# ${NO_EDIT}dir .dir ${makesrcdir}source ${makesrcdir}/.gdbinitEOF ;; esac fi # Install a makefile, and make it set VPATH # if necessary so that the sources are found. # Also change its value of srcdir. # NOTE: Makefile generation constitutes the majority of the time in configure. Hence, this section has # been somewhat optimized and is perhaps a bit twisty. # code is order so as to try to sed the smallest input files we know. # the three makefile fragments MUST end up in the resulting Makefile in this order: target, host, and site. # so do these separately because I don't trust the order of sed -e expressions. # Conditionalize for this site from "Makefile.in" (or whatever it's called) into Makefile.tem rm -f ${subdir}/Makefile.tem case "${site}" in "") cp ${srcdir}/${subdir}/${Makefile_in} ${subdir}/Makefile.tem ;; *) site_makefile_frag=${srcdir}/config/ms-${site} if [ -f ${site_makefile_frag} ] ; then sed -e "/^####/ r ${site_makefile_frag}" ${srcdir}/${subdir}/${Makefile_in} \ > ${subdir}/Makefile.tem else cp ${srcdir}/${subdir}/${Makefile_in} ${subdir}/Makefile.tem site_makefile_frag= fi ;; esac # working copy now in ${subdir}/Makefile.tem # Conditionalize the makefile for this host. rm -f ${Makefile} case "${host_makefile_frag}" in "") mv ${subdir}/Makefile.tem ${Makefile} ;; *) if [ ! -f ${host_makefile_frag} ] ; then host_makefile_frag=${srcdir}/${host_makefile_frag} fi if [ -f ${host_makefile_frag} ] ; then sed -e "/^####/ r ${host_makefile_frag}" ${subdir}/Makefile.tem > ${Makefile} else echo '***' Expected host makefile fragment \"${host_makefile_frag}\" 1>&2 echo '***' is missing in ${PWD=`pwd`}. 1>&2 mv ${subdir}/Makefile.tem ${Makefile} fi esac # working copy now in ${Makefile} # Conditionalize the makefile for this target. rm -f ${subdir}/Makefile.tem case "${target_makefile_frag}" in "") mv ${Makefile} ${subdir}/Makefile.tem ;; *) if [ ! -f ${target_makefile_frag} ] ; then target_makefile_frag=${srcdir}/${target_makefile_frag} fi if [ -f ${target_makefile_frag} ] ; then sed -e "/^####/ r ${target_makefile_frag}" ${Makefile} > ${subdir}/Makefile.tem else mv ${Makefile} ${subdir}/Makefile.tem target_makefile_frag= fi ;; esac # real copy now in ${subdir}/Makefile.tem # prepend warning about editting, and a bunch of variables. rm -f ${Makefile} cat > ${Makefile} <<EOF# ${NO_EDIT}VPATH = ${makesrcdir}links = ${configlinks}host_alias = ${host_alias}host_cpu = ${host_cpu}host_vendor = ${host_vendor}host_os = ${host_os}host_canonical = ${host_cpu}-${host_vendor}-${host_os}target_alias = ${target_alias}target_cpu = ${target_cpu}target_vendor = ${target_vendor}target_os = ${target_os}target_canonical = ${target_cpu}-${target_vendor}-${target_os}EOF case "${target_makefile_frag}" in "") ;; /*) echo target_makefile_frag = ${target_makefile_frag} >>${Makefile} ;; *) echo target_makefile_frag = ${invsubdir}${target_makefile_frag} >>${Makefile} ;; esac case "${host_makefile_frag}" in "") ;; /*) echo host_makefile_frag = ${host_makefile_frag} >>${Makefile} ;; *) echo host_makefile_frag = ${invsubdir}${host_makefile_frag} >>${Makefile} ;; esac if [ "${site_makefile_frag}" != "" ] ; then echo site_makefile_frag = ${invsubdir}${site_makefile_frag} >>${Makefile} fi # fixme: this shouldn't be in configure. # Define macro CROSS_COMPILE in compilation if this is a cross-compiler. case "${host_alias}" in "${target_alias}") echo "ALL=all.internal" >> ${Makefile} ;; *) echo "CROSS=-DCROSS_COMPILE" >> ${Makefile} echo "ALL=all.cross" >> ${Makefile} ;; esac # reset prefix, exec_prefix, srcdir, SUBDIRS, NONSUBDIRS, # remove any form feeds. if [ -z "${subdirs}" ]; then rm -f ${subdir}/Makefile.tem2 sed -e "s:^SUBDIRS[ ]*=.*$:SUBDIRS = ${configdirs}:" \ -e "s:^NONSUBDIRS[ ]*=.*$:NONSUBDIRS = ${noconfigdirs}:" \ ${subdir}/Makefile.tem > ${subdir}/Makefile.tem2 rm -f ${subdir}/Makefile.tem mv ${subdir}/Makefile.tem2 ${subdir}/Makefile.tem fi sed -e "s:^prefix[ ]*=.*$:prefix = ${prefix}:" \ -e "s:^exec_prefix[ ]*=.*$:exec_prefix = ${exec_prefix}:" \ -e "s:^srcdir[ ]*=.*$:srcdir = ${makesrcdir}:" \ -e "s///" \ -e "s:^program_prefix[ ]*=.*$:program_prefix = ${program_prefix}:" \ -e "s:^program_suffix[ ]*=.*$:program_suffix = ${program_suffix}:" \ -e "s:^program_transform_name[ ]*=.*$:program_transform_name = ${program_transform_name}:" \ -e "s:^tooldir[ ]*=.*$:tooldir = ${tooldir}:" \ ${subdir}/Makefile.tem >> ${Makefile} # final copy now in ${Makefile} rm -f ${subdir}/Makefile.tem case "${host_makefile_frag}" in "") using= ;; *) using="and \"${host_makefile_frag}\"" ;; esac case "${target_makefile_frag}" in "") ;; *) using="${using} and \"${target_makefile_frag}\"" ;; esac case "${site_makefile_frag}" in "") ;; *) using="${using} and \"${site_makefile_frag}\"" ;; esac newusing=`echo "${using}" | sed 's/and/using/'` using=${newusing} echo "Created \"${Makefile}\" in" ${PWD=`pwd`} ${using} . ${tmpfile}.pos # describe the chosen configuration in config.status. # Make that file a shellscript which will reestablish # the same configuration. Used in Makefiles to rebuild # Makefiles. case "${norecursion}" in "") arguments="${arguments} -norecursion" ;; *) ;; esac if [ ${subdir} = . ] ; then echo "#!/bin/sh# ${NO_EDIT}# This directory was configured as follows:${progname}" ${arguments} "# ${using}" > ${subdir}/config.new else echo "#!/bin/sh# ${NO_EDIT}# This directory was configured as follows:cd ${invsubdir}${progname}" ${arguments} "# ${using}" > ${subdir}/config.new fi chmod a+x ${subdir}/config.new if [ -r ${subdir}/config.back ] ; then mv -f ${subdir}/config.back ${subdir}/config.status fi ${moveifchange} ${subdir}/config.new ${subdir}/config.status ;; *) rm -f ${Makefile} ${subdir}/config.status ${links} ;; esacdone# If there are subdirectories, then recur. if [ -z "${norecursion}" -a -n "${configdirs}" ] ; then for configdir in ${configdirs} ; do eval echo Configuring ${configdir}... ${redirect} if [ -d ${srcdir}/${configdir} ] ; then case "${srcdir}" in ".") ;; *) if [ ! -d ./${configdir} ] ; then mkdir ./${configdir} fi ;; esac POPDIR=${PWD=`pwd`} cd ${configdir} ### figure out what to do with srcdir case "${srcdir}" in ".") newsrcdir=${srcdir} ;; # no -srcdir option. We're building in place. /*) # absolute path newsrcdir=${srcdir}/${configdir} srcdiroption="-srcdir=${newsrcdir}" ;; *) # otherwise relative newsrcdir=../${srcdir}/${configdir} srcdiroption="-srcdir=${newsrcdir}" ;; esac### check for guested configure, otherwise fix possibly relative progname if [ -f ${newsrcdir}/configure ] ; then recprog=${newsrcdir}/configure else case "${progname}" in /*) recprog=${progname} ;; *) recprog=../${progname} ;; esac fi### The recursion line is here. if eval ${recprog} ${verbose} ${host_alias} -target=${target_alias} \ ${prefixoption} ${tmpdiroption} ${exec_prefixoption} \ ${srcdiroption} ${program_prefixoption} ${program_suffixoption} ${program_transform_nameoption} ${site_option} ${removing} ${redirect} ; then true else exit 1 fi cd ${POPDIR} else eval echo Warning: source directory \"${srcdir}/${configdir}\" is missing. ${redirect} fi donefiexit 0## Local Variables:# fill-column: 131# End:## end of configure
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -