From: Václav Slavík Date: Tue, 6 Apr 2004 09:49:48 +0000 (+0000) Subject: upgrade to bakefile-0.1.4 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/473276a9a52dd42cdfeda3fe0ce53e49a6bde9af upgrade to bakefile-0.1.4 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26635 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/configure b/configure index ecd694ee0d..aa4e81cf7e 100755 --- a/configure +++ b/configure @@ -9894,13 +9894,6 @@ fi case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) PATH_IFS=';' - if test "$wxUSE_OMF" = "yes"; then - AR=emxomfar - RANLIB=: - LDFLAGS="-Zomf $LDFLAGS" - CFLAGS="-Zomf $CFLAGS" - CXXFLAGS="-Zomf $CXXFLAGS" - fi ;; *) PATH_IFS=':' @@ -29028,6 +29021,10 @@ _ACEOF fi + if test "$USE_HPUX" = 1 -a "x$GCC" != "xyes"; then + CPPFLAGS="$CPPFLAGS -D_INCLUDE__STDC_A1_SOURCE " + fi + for ac_func in wcsrtombs do @@ -32215,6 +32212,8 @@ echo $ECHO_N "checking if more special flags are required for pthreads... $ECHO_ flag="-D_REENTRANT" if test "x$GCC" != "xyes"; then flag="$flag -D_RWSTD_MULTI_THREAD" + + LIBS="$LIBS -lcma" fi ;; *solaris* | alpha*-osf*) @@ -38827,7 +38826,9 @@ fi echo "$as_me:$LINENO: result: $wx_cv_gcc31" >&5 echo "${ECHO_T}$wx_cv_gcc31" >&6 if test "$wx_cv_gcc31" = "no"; then - cat <shared-ld-sh + +D='$' +cat <shared-ld-sh #!/bin/sh #----------------------------------------------------------------------------- #-- Name: distrib/mac/shared-ld-sh @@ -38842,8 +38843,8 @@ args="" objects="" linking_flag="-dynamiclib" -while test \${#} -gt 0; do - case \${1} in +while test ${D}# -gt 0; do + case ${D}1 in -v) verbose=1 @@ -38851,31 +38852,31 @@ while test \${#} -gt 0; do -o|-compatibility_version|-current_version|-framework|-undefined|-install_name) # collect these options and values - args="\${args} \${1} \${2}" + args="${D}{args} ${D}1 ${D}2" shift ;; -l*|-L*|-flat_namespace|-headerpad_max_install_names) # collect these options - args="\${args} \${1}" + args="${D}{args} ${D}1" ;; -dynamiclib|-bundle) - linking_flag="\${1}" + linking_flag="${D}1" ;; -*) - echo "shared-ld: unhandled option '\${1}'" + echo "shared-ld: unhandled option '${D}1'" exit 1 ;; *.o | *.a | *.dylib) # collect object files - objects="\${objects} \${1}" + objects="${D}{objects} ${D}1" ;; *) - echo "shared-ld: unhandled argument '\${1}'" + echo "shared-ld: unhandled argument '${D}1'" exit 1 ;; @@ -38886,34 +38887,35 @@ done # # Link one module containing all the others # -if test \${verbose} = 1; then - echo "c++ -r -keep_private_externs -nostdlib \${objects} -o master.\$\$.o" +if test ${D}{verbose} = 1; then + echo "c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o" fi -c++ -r -keep_private_externs -nostdlib \${objects} -o master.\$\$.o -status=\$? -if test \${status} != 0; then - exit \${status} +c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o +status=${D}? +if test ${D}{status} != 0; then + exit ${D}{status} fi # # Link the shared library from the single module created # -if test \${verbose} = 1; then - echo "cc \${linking_flag} master.\$\$.o \${args}" +if test ${D}{verbose} = 1; then + echo "cc ${D}{linking_flag} master.${D}${D}.o ${D}{args}" fi -c++ \${linking_flag} master.\$\$.o \${args} -status=\$? -if test \${status} != 0; then - exit \${status} +c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args} +status=${D}? +if test ${D}{status} != 0; then + exit ${D}{status} fi # # Remove intermediate module # -rm -f master.\$\$.o +rm -f master.${D}${D}.o exit 0 EOF + chmod +x shared-ld-sh SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o" @@ -38989,9 +38991,459 @@ fi ;; *-pc-os2_emx | *-pc-os2-emx ) - SHARED_LD_CC="dllar.sh -o" - SHARED_LD_CXX="dllar.sh -o" + SHARED_LD_CC="`pwd`/dllar.sh -o" + SHARED_LD_CXX="`pwd`/dllar.sh -o" PIC_FLAG="" + +D='$' +cat <dllar.sh +#!/bin/sh +# +# dllar - a tool to build both a .dll and an .a file +# from a set of object (.o) files for EMX/OS2. +# +# Written by Andrew Zabolotny, bit@freya.etu.ru +# Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de +# +# This script will accept a set of files on the command line. +# All the public symbols from the .o files will be exported into +# a .DEF file, then linker will be run (through gcc) against them to +# build a shared library consisting of all given .o files. All libraries +# (.a) will be first decompressed into component .o files then act as +# described above. You can optionally give a description (-d "description") +# which will be put into .DLL. To see the list of accepted options (as well +# as command-line format) simply run this program without options. The .DLL +# is built to be imported by name (there is no guarantee that new versions +# of the library you build will have same ordinals for same symbols). +# +# dllar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# dllar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with dllar; see the file COPYING. If not, write to the Free +# Software Foundation, 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# To successfuly run this program you will need: +# - Current drive should have LFN support (HPFS, ext2, network, etc) +# (Sometimes dllar generates filenames which won't fit 8.3 scheme) +# - gcc +# (used to build the .dll) +# - emxexp +# (used to create .def file from .o files) +# - emximp +# (used to create .a file from .def file) +# - GNU text utilites (cat, sort, uniq) +# used to process emxexp output +# - GNU file utilities (mv, rm) +# - GNU sed +# - lxlite (optional, see flag below) +# (used for general .dll cleanup) +# + +flag_USE_LXLITE=1; + +# +# helper functions +# basnam, variant of basename, which does _not_ remove the path, _iff_ +# second argument (suffix to remove) is given +basnam(){ + case ${D}# in + 1) + echo ${D}1 | sed 's/.*\///' | sed 's/.*\\//' + ;; + 2) + echo ${D}1 | sed 's/'${D}2'${D}//' + ;; + *) + echo "error in basnam ${D}*" + exit 8 + ;; + esac +} + +# Cleanup temporary files and output +CleanUp() { + cd ${D}curDir + for i in ${D}inputFiles ; do + case ${D}i in + *!) + rm -rf \`basnam ${D}i !\` + ;; + *) + ;; + esac + done + + # Kill result in case of failure as there is just to many stupid make/nmake + # things out there which doesn't do this. + if ${D}# -eq 0 ; then + rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile + fi +} + +# Print usage and exit script with rc=1. +PrintHelp() { + echo 'Usage: dllar -o[utput] output_file -i[mport] importlib_name' + echo ' -d[escription] "dll descrption" -cc "CC" -f[lags] "CFLAGS"' + echo ' -ord[inals] -exclude "symbol(s)"' + echo ' -libf[lags] "{INIT|TERM}{GLOBAL|INSTANCE}" -nocrt[dll] -nolxl[ite]' + echo ' *.o *.a' + echo '*> "output_file" should have no extension.' + echo ' If it has the .o, .a or .dll extension, it is automatically removed.' + echo ' The import library name is derived from this and is set to "name".a,' + echo ' unless overridden by -import' + echo '*> "importlib_name" should have no extension.' + echo ' If it has the .o, or .a extension, it is automatically removed.' + echo ' This name is used as the import library name and may be longer and' + echo ' more descriptive than the DLL name which has to follow the old ' + echo ' 8.3 convention of FAT.' + echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)' + echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)' + echo ' These flags will be put at the start of GCC command line.' + echo '*> -ordinals tells dllar to export entries by ordinals. Be careful.' + echo '*> -exclude defines symbols which will not be exported. You can define' + echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".' + echo ' If the last character of a symbol is "*", all symbols beginning' + echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).' + echo '*> -libflags can be used to add INITGLOBAL/INITINSTANCE and/or' + echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.' + echo '*> -nocrtdll switch will disable linking the library against emx''s' + echo ' C runtime DLLs.' + echo '*> -nolxlite switch will disable running lxlite on the resulting DLL.' + echo '*> All other switches (for example -L./ or -lmylib) will be passed' + echo ' unchanged to GCC at the end of command line.' + echo '*> If you create a DLL from a library and you do not specify -o,' + echo ' the basename for DLL and import library will be set to library name,' + echo ' the initial library will be renamed to 'name'_s.a (_s for static)' + echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial' + echo ' library will be renamed into gcc_s.a.' + echo '--------' + echo 'Example:' + echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord' + echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"' + CleanUp + exit 1 +} + +# Execute a command. +# If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script. +# @Uses Whatever CleanUp() uses. +doCommand() { + echo "${D}*" + eval ${D}* + rcCmd=${D}? + + if ${D}rcCmd -ne 0 ; then + echo "command failed, exit code="${D}rcCmd + CleanUp + exit ${D}rcCmd + fi +} + +# main routine +# setup globals +cmdLine=${D}* +outFile="" +outimpFile="" +inputFiles="" +description="" +CC=gcc.exe +CFLAGS="-s -Zcrtdll" +EXTRA_CFLAGS="" +EXPORT_BY_ORDINALS=0 +exclude_symbols="" +library_flags="" +curDir=\`pwd\` +curDirS=curDir +case ${D}curDirS in +*/) + ;; +*) + curDirS=${D}{curDirS}"/" + ;; +esac +# Parse commandline +libsToLink=0 +while ${D}1 ; do + case ${D}1 in + -ord*) + EXPORT_BY_ORDINALS=1; + ;; + -o*) + shift + outFile=${D}1 + ;; + -i*) + shift + outimpFile=${D}1 + ;; + -d*) + shift + description=${D}1 + ;; + -f*) + shift + CFLAGS=${D}1 + ;; + -c*) + shift + CC=${D}1 + ;; + -h*) + PrintHelp + ;; + -ex*) + shift + exclude_symbols=${D}{exclude_symbols}${D}1" " + ;; + -libf*) + shift + library_flags=${D}{library_flags}${D}1" " + ;; + -nocrt*) + CFLAGS="-s" + ;; + -nolxl*) + flag_USE_LXLITE=0 + ;; + -* | /*) + case ${D}1 in + -L* | -l*) + libsToLink=1 + ;; + *) + ;; + esac + EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 + ;; + *) + found=0; + if ${D}libsToLink -ne 0 ; then + EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 + else + for file in ${D}1 ; do + if -f ${D}file ; then + inputFiles="${D}{inputFiles} ${D}file" + found=1 + fi + done + if ${D}found -eq 0 ; then + echo "ERROR: No file(s) found: "${D}1 + exit 8 + fi + fi + ;; + esac + shift +done # iterate cmdline words + +# +if -z "${D}inputFiles" ; then + echo "dllar: no input files" + PrintHelp +fi + +# Now extract all .o files from .a files +newInputFiles="" +for file in ${D}inputFiles ; do + case ${D}file in + *.a | *.lib) + case ${D}file in + *.a) + suffix=".a" + AR="ar" + ;; + *.lib) + suffix=".lib" + AR="emxomfar" + EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf" + ;; + *) + ;; + esac + dirname=\`basnam ${D}file ${D}suffix\`"_%" + mkdir ${D}dirname + if ${D}? -ne 0 ; then + echo "Failed to create subdirectory ./${D}dirname" + CleanUp + exit 8; + fi + # Append '!' to indicate archive + newInputFiles="${D}newInputFiles ${D}{dirname}!" + doCommand "cd ${D}dirname; ${D}AR x ../${D}file" + cd ${D}curDir + found=0; + for subfile in ${D}dirname/*.o* ; do + if -f ${D}subfile ; then + found=1 + if -s ${D}subfile ; then + # FIXME: This should be: is file size > 32 byte, _not_ > 0! + newInputFiles="${D}newInputFiles ${D}subfile" + fi + fi + done + if ${D}found -eq 0 ; then + echo "WARNING: there are no files in archive \'${D}file\'" + fi + ;; + *) + newInputFiles="${D}{newInputFiles} ${D}file" + ;; + esac +done +inputFiles="${D}newInputFiles" + +# Output filename(s). +do_backup=0; +if -z ${D}outFile ; then + do_backup=1; + set outFile ${D}inputFiles; outFile=${D}2 +fi + +# If it is an archive, remove the '!' and the '_%' suffixes +case ${D}outFile in +*_%!) + outFile=\`basnam ${D}outFile _%!\` + ;; +*) + ;; +esac +case ${D}outFile in +*.dll) + outFile=\`basnam ${D}outFile .dll\` + ;; +*.DLL) + outFile=\`basnam ${D}outFile .DLL\` + ;; +*.o) + outFile=\`basnam ${D}outFile .o\` + ;; +*.obj) + outFile=\`basnam ${D}outFile .obj\` + ;; +*.a) + outFile=\`basnam ${D}outFile .a\` + ;; +*.lib) + outFile=\`basnam ${D}outFile .lib\` + ;; +*) + ;; +esac +case ${D}outimpFile in +*.a) + outimpFile=\`basnam ${D}outimpFile .a\` + ;; +*.lib) + outimpFile=\`basnam ${D}outimpFile .lib\` + ;; +*) + ;; +esac +if -z ${D}outimpFile ; then + outimpFile=${D}outFile +fi +defFile="${D}{outFile}.def" +arcFile="${D}{outimpFile}.a" +arcFile2="${D}{outimpFile}.lib" +dllFile="${D}outFile" +# Add suffix to dllFile later, first we need a version to use as +# name in .def file. + +if ${D}do_backup -ne 0 ; then + if -f ${D}arcFile ; then + doCommand "mv ${D}arcFile ${D}{outFile}_s.a" + fi + if -f ${D}arcFile2 ; then + doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib" + fi +fi + +# Extract public symbols from all the object files. +tmpdefFile=${D}{defFile}_% +rm -f ${D}tmpdefFile +for file in ${D}inputFiles ; do + case ${D}file in + *!) + ;; + *) + doCommand "emxexp -u ${D}file >> ${D}tmpdefFile" + ;; + esac +done + +# Create the def file. +rm -f ${D}defFile +echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile +dllFile="${D}dllFile.dll" +if -n ${D}description ; then + echo "DESCRIPTION \"${D}{description}\"" >> ${D}defFile +fi +echo "EXPORTS" >> ${D}defFile + +doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%" +grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile + +# Checks if the export is ok or not. +for word in ${D}exclude_symbols; do + grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}% + mv ${D}{tmpdefFile}% ${D}tmpdefFile +done + + +if ${D}EXPORT_BY_ORDINALS -ne 0 ; then + sed "=" < ${D}tmpdefFile | \ + sed ' + N + : loop + s/^\(0-9\+\)\(^;*\)\(;.*\)\?/\2 @\1 NONAME/ + t loop + ' > ${D}{tmpdefFile}% + grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile +else + rm -f ${D}{tmpdefFile}% +fi +cat ${D}tmpdefFile >> ${D}defFile +rm -f ${D}tmpdefFile + +# Do linking, create implib, and apply lxlite. +gccCmdl=""; +for file in ${D}inputFiles ; do + case ${D}file in + *!) + ;; + *) + gccCmdl="${D}gccCmdl ${D}file" + ;; + esac +done +doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS" +touch "${D}{outFile}.dll" + +doCommand "emximp -o ${D}arcFile ${D}defFile" +if ${D}flag_USE_LXLITE -ne 0 ; then + add_flags=""; + if ${D}EXPORT_BY_ORDINALS -ne 0 ; then + add_flags="-ynd" + fi + doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile" +fi +doCommand "emxomf -s -l ${D}arcFile" + +# Successful exit. +CleanUp 1 +exit 0 +EOF + + chmod +x dllar.sh ;; *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \ @@ -39081,7 +39533,9 @@ echo "${ECHO_T}none" >&6 fi if test $DEPS_TRACKING = 1 ; then - cat <bk-deps + +D='$' +cat <bk-deps #!/bin/sh # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf @@ -39089,51 +39543,52 @@ echo "${ECHO_T}none" >&6 # # Permission is given to use this file in any way. -DEPSMODE=$DEPSMODE +DEPSMODE=${DEPSMODE} DEPSDIR=.deps -DEPSFLAG_GCC="$DEPSFLAG_GCC" +DEPSFLAG_GCC="${DEPSFLAG_GCC}" -mkdir -p \$DEPSDIR +mkdir -p ${D}DEPSDIR -if test \$DEPSMODE = gcc ; then - \${*} \${DEPSFLAG_GCC} - status=\${?} - if test \${status} != 0 ; then - exit \${status} +if test ${D}DEPSMODE = gcc ; then + ${D}* ${D}{DEPSFLAG_GCC} + status=${D}? + if test ${D}{status} != 0 ; then + exit ${D}{status} fi # move created file to the location we want it in: - while test \${#} -gt 0; do - case "\${1}" in + while test ${D}# -gt 0; do + case "${D}1" in -o ) shift - objfile=\${1} + objfile=${D}1 ;; -* ) ;; * ) - srcfile=\${1} + srcfile=${D}1 ;; esac shift done - depfile=\`basename \$srcfile | sed -e 's/\..*$/.d/g'\` - depobjname=\`echo \$depfile |sed -e 's/\.d/.o/g'\` - if test -f \$depfile ; then - sed -e "s,\$depobjname:,\$objfile:,g" \$depfile >\${DEPSDIR}/\${objfile}.d - rm -f \$depfile + depfile=\`basename ${D}srcfile | sed -e 's/\..*${D}/.d/g'\` + depobjname=\`echo ${D}depfile |sed -e 's/\.d/.o/g'\` + if test -f ${D}depfile ; then + sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d + rm -f ${D}depfile else - depfile=\`basename \$objfile | sed -e 's/\..*$/.d/g'\` - if test -f \$depfile ; then - sed -e "/^\$objfile/!s,\$depobjname:,\$objfile:,g" \$depfile >\${DEPSDIR}/\${objfile}.d - rm -f \$depfile + depfile=\`basename ${D}objfile | sed -e 's/\..*${D}/.d/g'\` + if test -f ${D}depfile ; then + sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d + rm -f ${D}depfile fi fi exit 0 else - \${*} - exit \${?} + ${D}* + exit ${D}? fi EOF + chmod +x bk-deps fi diff --git a/configure.in b/configure.in index ea464910a8..529f13d10d 100644 --- a/configure.in +++ b/configure.in @@ -1144,14 +1144,6 @@ dnl Path separator; ':' for unix, ';' for OS/2 case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) PATH_IFS=';' - dnl Handle OMF support - if test "$wxUSE_OMF" = "yes"; then - AR=emxomfar - RANLIB=: - LDFLAGS="-Zomf $LDFLAGS" - CFLAGS="-Zomf $CFLAGS" - CXXFLAGS="-Zomf $CXXFLAGS" - fi ;; *) PATH_IFS=':'