X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/89ec5d14213f9c29157ae8227260400dfcda0466..7892e035c9a247715635ec82f139741d20d07358:/build/aclocal/bakefile.m4 diff --git a/build/aclocal/bakefile.m4 b/build/aclocal/bakefile.m4 index 0516430743..8608b64e59 100644 --- a/build/aclocal/bakefile.m4 +++ b/build/aclocal/bakefile.m4 @@ -1,9 +1,36 @@ -dnl --------------------------------------------------------------------------- -dnl Support macros for makefiles generated by BAKEFILE. -dnl --------------------------------------------------------------------------- +dnl +dnl This file is part of Bakefile (http://www.bakefile.org) +dnl +dnl Copyright (C) 2003-2007 Vaclav Slavik and others +dnl +dnl Permission is hereby granted, free of charge, to any person obtaining a +dnl copy of this software and associated documentation files (the "Software"), +dnl to deal in the Software without restriction, including without limitation +dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, +dnl and/or sell copies of the Software, and to permit persons to whom the +dnl Software is furnished to do so, subject to the following conditions: +dnl +dnl The above copyright notice and this permission notice shall be included in +dnl all copies or substantial portions of the Software. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +dnl DEALINGS IN THE SOFTWARE. +dnl +dnl $Id$ +dnl +dnl Support macros for makefiles generated by BAKEFILE. +dnl + +dnl --------------------------------------------------------------------------- dnl Lots of compiler & linker detection code contained here was taken from -dnl wxWindows configure.in script (see http://www.wxwindows.org) +dnl wxWidgets configure.in script (see http://www.wxwidgets.org) +dnl --------------------------------------------------------------------------- @@ -51,7 +78,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM], PLATFORM_OS2=0 PLATFORM_BEOS=0 - if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then + if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then case "${BAKEFILE_HOST}" in *-*-mingw32* ) PLATFORM_WIN32=1 @@ -65,7 +92,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM], *-*-darwin* ) PLATFORM_MAC=1 PLATFORM_MACOSX=1 - ;; + ;; *-*-beos* ) PLATFORM_BEOS=1 ;; @@ -126,7 +153,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS], AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf], [use OMF object format (OS/2)]), [bk_os2_use_omf="$enableval"]) - + case "${BAKEFILE_HOST}" in *-*-darwin* ) dnl For Unix to MacOS X porting instructions, see: @@ -153,7 +180,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS], OS2_LIBEXT="a" fi ;; - + i*86-*-beos* ) LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS" ;; @@ -178,8 +205,12 @@ AC_DEFUN([AC_BAKEFILE_SUFFIXES], DLLPREFIX_MODULE="" DLLIMP_SUFFIX="" dlldir="$libdir" - + case "${BAKEFILE_HOST}" in + dnl PA-RISC HP systems used .sl but IA64 use ELF-64 and so use the + dnl standard .so extension + ia64-hp-hpux* ) + ;; *-hp-hpux* ) SO_SUFFIX="sl" SO_SUFFIX_MODULE="sl" @@ -261,7 +292,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], dnl the switch for gcc is the same under all platforms PIC_FLAG="-fPIC" fi - + dnl Defaults for GCC and ELF .so shared libs: SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o" SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o" @@ -281,27 +312,19 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], ;; *-*-linux* ) - if test "x$GCC" != "xyes"; then - AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc, - [ - AC_TRY_COMPILE([], - [ - #ifndef __INTEL_COMPILER - #error Not icc - #endif - ], - bakefile_cv_prog_icc=yes, - bakefile_cv_prog_icc=no - ) - ]) - if test "$bakefile_cv_prog_icc" = "yes"; then - PIC_FLAG="-KPIC" - fi + dnl newer icc versions use -fPIC just as gcc does and, in fact, the + dnl newest (v10+) ones don't even understand -KPIC any longer + if test "$INTELCC" = "yes" -a "$INTELCC8" != "yes"; then + PIC_FLAG="-KPIC" + elif test "x$SUNCXX" = "xyes"; then + SHARED_LD_CC="${CC} -G -o" + SHARED_LD_CXX="${CXX} -G -o" + PIC_FLAG="-KPIC" fi ;; *-*-solaris2* ) - if test "x$GCC" != xyes ; then + if test "x$SUNCXX" = xyes ; then SHARED_LD_CC="${CC} -G -o" SHARED_LD_CXX="${CXX} -G -o" PIC_FLAG="-KPIC" @@ -313,7 +336,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], chmod +x shared-ld-sh SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o" - SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC" + SHARED_LD_MODULE_CXX="CXX=\"\$(CXX)\" $SHARED_LD_MODULE_CC" dnl Most apps benefit from being fully binded (its faster and static dnl variables initialized at startup work). @@ -329,7 +352,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], [ #if (__GNUC__ < 3) || \ ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1)) - #error old gcc + This is old gcc #endif ], [ @@ -421,6 +444,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], powerpc-apple-macos* | \ *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \ + *-*-mirbsd* | \ *-*-sunos4* | \ *-*-osf* | \ *-*-dgux5* | \ @@ -465,29 +489,33 @@ AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS], USE_SOVERLINUX=0 USE_SOVERSOLARIS=0 USE_SOVERCYGWIN=0 - USE_SOSYMLINKS=0 + USE_SOTWOSYMLINKS=0 USE_MACVERSION=0 SONAME_FLAG= case "${BAKEFILE_HOST}" in - *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu ) - SONAME_FLAG="-Wl,-soname," + *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \ + *-*-k*bsd*-gnu | *-*-mirbsd* ) + if test "x$SUNCXX" = "xyes"; then + SONAME_FLAG="-h " + else + SONAME_FLAG="-Wl,-soname," + fi USE_SOVERSION=1 USE_SOVERLINUX=1 - USE_SOSYMLINKS=1 + USE_SOTWOSYMLINKS=1 ;; *-*-solaris2* ) SONAME_FLAG="-h " USE_SOVERSION=1 USE_SOVERSOLARIS=1 - USE_SOSYMLINKS=1 ;; *-*-darwin* ) USE_MACVERSION=1 USE_SOVERSION=1 - USE_SOSYMLINKS=1 + USE_SOTWOSYMLINKS=1 ;; *-*-cygwin* ) @@ -501,7 +529,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS], AC_SUBST(USE_SOVERSOLARIS) AC_SUBST(USE_SOVERCYGWIN) AC_SUBST(USE_MACVERSION) - AC_SUBST(USE_SOSYMLINKS) + AC_SUBST(USE_SOTWOSYMLINKS) AC_SUBST(SONAME_FLAG) ]) @@ -514,53 +542,69 @@ dnl --------------------------------------------------------------------------- AC_DEFUN([AC_BAKEFILE_DEPS], [ + AC_ARG_ENABLE([dependency-tracking], + AS_HELP_STRING([--disable-dependency-tracking], + [don't use dependency tracking even if the compiler can]), + [bk_use_trackdeps="$enableval"]) + AC_MSG_CHECKING([for dependency tracking method]) - DEPS_TRACKING=1 - if test "x$GCC" = "xyes"; then - DEPSMODE=gcc - case "${BAKEFILE_HOST}" in - *-*-darwin* ) - dnl -cpp-precomp (the default) conflicts with -MMD option - dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html) - DEPSFLAG="-no-cpp-precomp -MMD" - ;; - * ) - DEPSFLAG="-MMD" - ;; - esac - AC_MSG_RESULT([gcc]) - elif test "x$MWCC" = "xyes"; then - DEPSMODE=mwcc - DEPSFLAG="-MM" - AC_MSG_RESULT([mwcc]) - elif test "x$SUNCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-xM1" - AC_MSG_RESULT([Sun cc]) - elif test "x$SGICC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="-M" - AC_MSG_RESULT([SGI cc]) - elif test "x$HPCC" = "xyes"; then - DEPSMODE=unixcc - DEPSFLAG="+make" - AC_MSG_RESULT([HP cc]) - elif test "x$COMPAQCC" = "xyes"; then - DEPSMODE=gcc - DEPSFLAG="-MD" - AC_MSG_RESULT([Compaq cc]) - else + BK_DEPS="" + if test "x$bk_use_trackdeps" = "xno" ; then DEPS_TRACKING=0 - AC_MSG_RESULT([none]) - fi + AC_MSG_RESULT([disabled]) + else + DEPS_TRACKING=1 - if test $DEPS_TRACKING = 1 ; then - AC_BAKEFILE_CREATE_FILE_BK_DEPS - chmod +x bk-deps + if test "x$GCC" = "xyes"; then + DEPSMODE=gcc + case "${BAKEFILE_HOST}" in + *-*-darwin* ) + dnl -cpp-precomp (the default) conflicts with -MMD option + dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html) + DEPSFLAG="-no-cpp-precomp -MMD" + ;; + * ) + DEPSFLAG="-MMD" + ;; + esac + AC_MSG_RESULT([gcc]) + elif test "x$MWCC" = "xyes"; then + DEPSMODE=mwcc + DEPSFLAG="-MM" + AC_MSG_RESULT([mwcc]) + elif test "x$SUNCC" = "xyes"; then + DEPSMODE=unixcc + DEPSFLAG="-xM1" + AC_MSG_RESULT([Sun cc]) + elif test "x$SGICC" = "xyes"; then + DEPSMODE=unixcc + DEPSFLAG="-M" + AC_MSG_RESULT([SGI cc]) + elif test "x$HPCC" = "xyes"; then + DEPSMODE=unixcc + DEPSFLAG="+make" + AC_MSG_RESULT([HP cc]) + elif test "x$COMPAQCC" = "xyes"; then + DEPSMODE=gcc + DEPSFLAG="-MD" + AC_MSG_RESULT([Compaq cc]) + else + DEPS_TRACKING=0 + AC_MSG_RESULT([none]) + fi + + if test $DEPS_TRACKING = 1 ; then + AC_BAKEFILE_CREATE_FILE_BK_DEPS + chmod +x bk-deps + dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60 + dnl is required (and so top_builddir is never empty): + BK_DEPS="`pwd`/bk-deps" + fi fi AC_SUBST(DEPS_TRACKING) + AC_SUBST(BK_DEPS) ]) dnl --------------------------------------------------------------------------- @@ -578,20 +622,30 @@ AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF], AC_PROG_MAKE_SET AC_SUBST(MAKE_SET) - - AC_CHECK_TOOL(AR, ar, ar) + + if test "x$SUNCXX" = "xyes"; then + dnl Sun C++ compiler requires special way of creating static libs; + dnl see here for more details: + dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863 + AR=$CXX + AROPTIONS="-xar -o" + AC_SUBST(AR) + elif test "x$SGICC" = "xyes"; then + dnl Almost the same as above for SGI mipsPro compiler + AR=$CXX + AROPTIONS="-ar -o" + AC_SUBST(AR) + else + AC_CHECK_TOOL(AR, ar, ar) + AROPTIONS=rcu + fi + AC_SUBST(AROPTIONS) + AC_CHECK_TOOL(STRIP, strip, :) AC_CHECK_TOOL(NM, nm, :) - case ${BAKEFILE_HOST} in - *-hp-hpux* ) - dnl HP-UX install doesn't handle the "-d" switch so don't - dnl use it there - INSTALL_DIR="mkdir -p" - ;; - *) INSTALL_DIR="$INSTALL -d" - ;; - esac + dnl Don't use `install -d`, see http://trac.wxwidgets.org/ticket/13452 + INSTALL_DIR="mkdir -p" AC_SUBST(INSTALL_DIR) LDFLAGS_GUI= @@ -611,26 +665,20 @@ dnl --------------------------------------------------------------------------- AC_DEFUN([AC_BAKEFILE_RES_COMPILERS], [ - RESCOMP= - SETFILE= - - case ${BAKEFILE_HOST} in + case ${BAKEFILE_HOST} in *-*-cygwin* | *-*-mingw32* ) dnl Check for win32 resources compiler: - if test "$build" != "$host" ; then - RESCOMP=$host_alias-windres - else - AC_CHECK_PROG(RESCOMP, windres, windres, windres) - fi + AC_CHECK_TOOL(WINDRES, windres) ;; - + *-*-darwin* | powerpc-apple-macos* ) - AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez) + AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez) AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile) ;; esac - AC_SUBST(RESCOMP) + AC_SUBST(WINDRES) + AC_SUBST(REZ) AC_SUBST(SETFILE) ]) @@ -649,6 +697,18 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], [bk_use_pch="$enableval"]) GCC_PCH=0 + ICC_PCH=0 + USE_PCH=0 + BK_MAKE_PCH="" + + case ${BAKEFILE_HOST} in + *-*-cygwin* ) + dnl PCH support is broken in cygwin gcc because of unportable + dnl assumptions about mmap() in gcc code which make PCH generation + dnl fail erratically; disable PCH completely until this is fixed + bk_use_pch="no" + ;; + esac if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then if test "x$GCC" = "xyes"; then @@ -657,15 +717,16 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], AC_TRY_COMPILE([], [ #if !defined(__GNUC__) || !defined(__GNUC_MINOR__) - #error "no pch support" + There is no PCH support #endif #if (__GNUC__ < 3) - #error "no pch support" + There is no PCH support #endif #if (__GNUC__ == 3) && \ ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \ - ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) - #error "no pch support" + ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \ + ( defined(__INTEL_COMPILER) ) + There is no PCH support #endif ], [ @@ -673,16 +734,37 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], GCC_PCH=1 ], [ - AC_MSG_RESULT([no]) + if test "$INTELCXX8" = "yes"; then + AC_MSG_RESULT([yes]) + ICC_PCH=1 + if test "$INTELCXX10" = "yes"; then + ICC_PCH_CREATE_SWITCH="-pch-create" + ICC_PCH_USE_SWITCH="-pch-use" + else + ICC_PCH_CREATE_SWITCH="-create-pch" + ICC_PCH_USE_SWITCH="-use-pch" + fi + else + AC_MSG_RESULT([no]) + fi ]) - if test $GCC_PCH = 1 ; then + if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then + USE_PCH=1 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH chmod +x bk-make-pch + dnl FIXME: make this $(top_builddir)/bk-make-pch once + dnl autoconf-2.60 is required (and so top_builddir is + dnl never empty): + BK_MAKE_PCH="`pwd`/bk-make-pch" fi fi fi AC_SUBST(GCC_PCH) + AC_SUBST(ICC_PCH) + AC_SUBST(ICC_PCH_CREATE_SWITCH) + AC_SUBST(ICC_PCH_USE_SWITCH) + AC_SUBST(BK_MAKE_PCH) ]) @@ -710,9 +792,19 @@ dnl --------------------------------------------------------------------------- AC_DEFUN([AC_BAKEFILE], [ - AC_PREREQ(2.58) + AC_PREREQ([2.58]) + + dnl We need to always run C/C++ compiler tests, but it's also possible + dnl for the user to call these macros manually, hence this instead of + dnl simply calling these macros. See http://www.bakefile.org/ticket/64 + AC_REQUIRE([AC_BAKEFILE_PROG_CC]) + AC_REQUIRE([AC_BAKEFILE_PROG_CXX]) if test "x$BAKEFILE_HOST" = "x"; then + if test "x${host}" = "x" ; then + AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.]) + fi + BAKEFILE_HOST="${host}" fi @@ -728,509 +820,29 @@ AC_DEFUN([AC_BAKEFILE], AC_BAKEFILE_DEPS AC_BAKEFILE_RES_COMPILERS - BAKEFILE_BAKEFILE_M4_VERSION="0.1.9" - + dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not: + AC_SUBST(OBJCXXFLAGS) + + + BAKEFILE_BAKEFILE_M4_VERSION="0.2.9" + dnl includes autoconf_inc.m4: $1 - + if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then AC_MSG_ERROR([No version found in autoconf_inc.m4 - bakefile macro was changed to take additional argument, perhaps configure.in wasn't updated (see the documentation)?]) fi - + if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.]) fi ]) - + dnl --------------------------------------------------------------------------- dnl Embedded copies of helper scripts follow: dnl --------------------------------------------------------------------------- -AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH], -[ -dnl ===================== dllar.sh begins here ===================== -dnl (Created by merge-scripts.py from dllar.sh -dnl file do not edit here!) -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.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@' - echo ' @<:@-name-mangler-script script.sh@:>@' - echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@' - echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "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 '*> "script.sh may be given to override the output_file name by a' - echo ' different name. It is mainly useful if the regular make process' - echo ' of some package does not take into account OS/2 restriction of' - echo ' DLL name lengths. It takes the importlib name as input and is' - echo ' supposed to procude a shorter name as output. The script should' - echo ' expect to get importlib_name without extension and should produce' - echo ' a (max.) 8 letter name without extension.' - 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 '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.' - echo '*> -ex@<:@clude@:>@ 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 '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or' - echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.' - echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s' - echo ' C runtime DLLs.' - echo '*> -nolxl@<:@ite@:>@ 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="" -renameScript="" -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 -omfLinking=0 -while @<:@ ${D}1 @:>@; do - case ${D}1 in - -ord*) - EXPORT_BY_ORDINALS=1; - ;; - -o*) - shift - outFile=${D}1 - ;; - -i*) - shift - outimpFile=${D}1 - ;; - -name-mangler-script) - shift - renameScript=${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 - ;; - -Zomf) - omfLinking=1 - ;; - *) - ;; - esac - EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1 - ;; - *.dll) - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`" - if @<:@ ${D}omfLinking -eq 1 @:>@; then - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib" - else - EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a" - fi - ;; - *) - 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" - -#create ${D}dllFile as something matching 8.3 restrictions, -if @<:@ -z ${D}renameScript @:>@ ; then - dllFile="${D}outFile" -else - dllFile=\`${D}renameScript ${D}outimpFile\` -fi - -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 @<:@ ! -z ${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 -dnl ===================== dllar.sh ends here ===================== -]) - AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS], [ dnl ===================== bk-deps begins here ===================== @@ -1240,24 +852,20 @@ D='$' cat <bk-deps #!/bin/sh -# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf +# This script is part of Bakefile (http://www.bakefile.org) autoconf # script. It is used to track C/C++ files dependencies in portable way. # # Permission is given to use this file in any way. DEPSMODE=${DEPSMODE} -DEPSDIR=.deps DEPSFLAG="${DEPSFLAG}" - -mkdir -p ${D}DEPSDIR +DEPSDIRBASE=.deps if test ${D}DEPSMODE = gcc ; then ${D}* ${D}{DEPSFLAG} status=${D}? - if test ${D}{status} != 0 ; then - exit ${D}{status} - fi - # move created file to the location we want it in: + + # determine location of created files: while test ${D}# -gt 0; do case "${D}1" in -o ) @@ -1272,24 +880,37 @@ if test ${D}DEPSMODE = gcc ; then esac shift done + objfilebase=\`basename ${D}objfile\` + builddir=\`dirname ${D}objfile\` depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\` depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\` + depsdir=${D}builddir/${D}DEPSDIRBASE + mkdir -p ${D}depsdir + + # if the compiler failed, we're done: + if test ${D}{status} != 0 ; then + rm -f ${D}depfile + exit ${D}{status} + fi + + # move created file to the location we want it in: if test -f ${D}depfile ; then - sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d + sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d rm -f ${D}depfile else # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d - depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\` + depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\` if test ! -f ${D}depfile ; then # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++) depfile="${D}objfile.d" fi if test -f ${D}depfile ; then - sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d + sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d rm -f ${D}depfile fi fi exit 0 + elif test ${D}DEPSMODE = mwcc ; then ${D}* || exit ${D}? # Run mwcc again with -MM and redirect into the dep file we want @@ -1309,8 +930,15 @@ elif test ${D}DEPSMODE = mwcc ; then fi prevarg="${D}arg" done - ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d + + objfilebase=\`basename ${D}objfile\` + builddir=\`dirname ${D}objfile\` + depsdir=${D}builddir/${D}DEPSDIRBASE + mkdir -p ${D}depsdir + + ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d exit 0 + elif test ${D}DEPSMODE = unixcc; then ${D}* || exit ${D}? # Run compiler again with deps flag and redirect into the dep file. @@ -1331,8 +959,15 @@ elif test ${D}DEPSMODE = unixcc; then esac shift done - eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d + + objfilebase=\`basename ${D}objfile\` + builddir=\`dirname ${D}objfile\` + depsdir=${D}builddir/${D}DEPSDIRBASE + mkdir -p ${D}depsdir + + eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d exit 0 + else ${D}* exit ${D}? @@ -1363,6 +998,10 @@ objects="" linking_flag="-dynamiclib" ldargs="-r -keep_private_externs -nostdlib" +if test "x${D}CXX" = "x"; then + CXX="c++" +fi + while test ${D}# -gt 0; do case ${D}1 in @@ -1376,6 +1015,12 @@ while test ${D}# -gt 0; do shift ;; + -arch|-isysroot) + # collect these options and values + ldargs="${D}{ldargs} ${D}1 ${D}2" + shift + ;; + -s|-Wl,*) # collect these load args ldargs="${D}{ldargs} ${D}1" @@ -1415,9 +1060,9 @@ status=0 # Link one module containing all the others # if test ${D}{verbose} = 1; then - echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o" + echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o" fi -c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o +${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o status=${D}? # @@ -1426,9 +1071,9 @@ status=${D}? # if test ${D}{status} = 0; then if test ${D}{verbose} = 1; then - echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}" + echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}" fi - c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args} + ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args} status=${D}? fi @@ -1451,7 +1096,7 @@ D='$' cat <bk-make-pch #!/bin/sh -# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf +# This script is part of Bakefile (http://www.bakefile.org) autoconf # script. It is used to generated precompiled headers. # # Permission is given to use this file in any way. @@ -1461,9 +1106,13 @@ header="${D}{2}" shift shift -compiler= -headerfile= +builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\` + +compiler="" +headerfile="" + while test ${D}{#} -gt 0; do + add_to_cmdline=1 case "${D}{1}" in -I* ) incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\` @@ -1471,23 +1120,42 @@ while test ${D}{#} -gt 0; do headerfile="${D}{incdir}/${D}{header}" fi ;; + -use-pch|-use_pch|-pch-use ) + shift + add_to_cmdline=0 + ;; esac - compiler="${D}{compiler} ${D}{1}" + if test ${D}add_to_cmdline = 1 ; then + compiler="${D}{compiler} ${D}{1}" + fi shift done if test "x${D}{headerfile}" = "x" ; then - echo "error: can't find header ${D}{header} in include paths" >2 + echo "error: can't find header ${D}{header} in include paths" >&2 else if test -f ${D}{outfile} ; then rm -f ${D}{outfile} else mkdir -p \`dirname ${D}{outfile}\` fi - depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d" - mkdir -p .deps - # can do this because gcc is >= 3.4: - ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}" + depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d" + mkdir -p ${D}{builddir}/.deps + if test "x${GCC_PCH}" = "x1" ; then + # can do this because gcc is >= 3.4: + ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}" + elif test "x${ICC_PCH}" = "x1" ; then + filename=pch_gen-${D}${D} + file=${D}{filename}.c + dfile=${D}{filename}.d + cat > ${D}file < ${D}depsfile && \\ + rm -f ${D}file ${D}dfile ${D}{filename}.o + fi exit ${D}{?} fi EOF