1 dnl ---------------------------------------------------------------------------
2 dnl Support macros for makefiles generated by BAKEFILE.
3 dnl ---------------------------------------------------------------------------
5 dnl Lots of compiler & linker detection code contained here was taken from
6 dnl wxWindows configure.in script (see http://www.wxwindows.org)
10 dnl ---------------------------------------------------------------------------
11 dnl AC_BAKEFILE_GNUMAKE
14 dnl ---------------------------------------------------------------------------
16 AC_DEFUN([AC_BAKEFILE_GNUMAKE],
18 dnl does make support "-include" (only GNU make does AFAIK)?
19 AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu,
21 if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null |
22 egrep -s GNU > /dev/null); then
23 bakefile_cv_prog_makeisgnu="yes"
25 bakefile_cv_prog_makeisgnu="no"
29 if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then
37 dnl ---------------------------------------------------------------------------
38 dnl AC_BAKEFILE_PLATFORM
40 dnl Detects platform and sets PLATFORM_XXX variables accordingly
41 dnl ---------------------------------------------------------------------------
43 AC_DEFUN([AC_BAKEFILE_PLATFORM],
54 if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then
55 case "${BAKEFILE_HOST}" in
62 *-pc-os2_emx | *-pc-os2-emx )
72 powerpc-apple-macos* )
81 case "$BAKEFILE_FORCE_PLATFORM" in
102 AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
107 AC_SUBST(PLATFORM_UNIX)
108 AC_SUBST(PLATFORM_WIN32)
109 AC_SUBST(PLATFORM_MSDOS)
110 AC_SUBST(PLATFORM_MAC)
111 AC_SUBST(PLATFORM_MACOS)
112 AC_SUBST(PLATFORM_MACOSX)
113 AC_SUBST(PLATFORM_OS2)
114 AC_SUBST(PLATFORM_BEOS)
118 dnl ---------------------------------------------------------------------------
119 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
121 dnl Sets misc platform-specific settings
122 dnl ---------------------------------------------------------------------------
124 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
126 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
127 [use OMF object format (OS/2)]),
128 [bk_os2_use_omf="$enableval"])
130 case "${BAKEFILE_HOST}" in
132 dnl For Unix to MacOS X porting instructions, see:
133 dnl http://fink.sourceforge.net/doc/porting/porting.html
134 if test "x$GCC" = "xyes"; then
135 CFLAGS="$CFLAGS -fno-common"
136 CXXFLAGS="$CXXFLAGS -fno-common"
138 if test "x$XLCC" = "xyes"; then
139 CFLAGS="$CFLAGS -qnocommon"
140 CXXFLAGS="$CXXFLAGS -qnocommon"
144 *-pc-os2_emx | *-pc-os2-emx )
145 if test "x$bk_os2_use_omf" = "xyes" ; then
148 LDFLAGS="-Zomf $LDFLAGS"
149 CFLAGS="-Zomf $CFLAGS"
150 CXXFLAGS="-Zomf $CXXFLAGS"
158 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
163 dnl ---------------------------------------------------------------------------
164 dnl AC_BAKEFILE_SUFFIXES
166 dnl Detects shared various suffixes for shared libraries, libraries, programs,
168 dnl ---------------------------------------------------------------------------
170 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
173 SO_SUFFIX_MODULE="so"
182 case "${BAKEFILE_HOST}" in
185 SO_SUFFIX_MODULE="sl"
189 dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
190 dnl Both archive libraries and shared libraries on AIX have an
191 dnl .a extension. This will explain why you can't link with an
192 dnl .so and why it works with the name changed to .a.
198 SO_SUFFIX_MODULE="dll"
199 DLLIMP_SUFFIX="dll.a"
206 SO_SUFFIX_MODULE="dll"
207 DLLIMP_SUFFIX="dll.a"
217 *-pc-os2_emx | *-pc-os2-emx )
219 SO_SUFFIX_MODULE="dll"
220 DLLIMP_SUFFIX=$OS2_LIBEXT
224 LIBEXT=".$OS2_LIBEXT"
229 SO_SUFFIX_MODULE="bundle"
233 if test "x$DLLIMP_SUFFIX" = "x" ; then
234 DLLIMP_SUFFIX="$SO_SUFFIX"
238 AC_SUBST(SO_SUFFIX_MODULE)
239 AC_SUBST(DLLIMP_SUFFIX)
244 AC_SUBST(DLLPREFIX_MODULE)
249 dnl ---------------------------------------------------------------------------
250 dnl AC_BAKEFILE_SHARED_LD
252 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
253 dnl and SHARED_LD_CXX.
254 dnl ---------------------------------------------------------------------------
256 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
258 dnl the extra compiler flags needed for compilation of shared library
260 if test "x$GCC" = "xyes"; then
261 dnl the switch for gcc is the same under all platforms
265 dnl Defaults for GCC and ELF .so shared libs:
266 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
267 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
270 case "${BAKEFILE_HOST}" in
272 dnl default settings are good for gcc but not for the native HP-UX
273 if test "x$GCC" != "xyes"; then
274 dnl no idea why it wants it, but it does
275 LDFLAGS="$LDFLAGS -L/usr/lib"
277 SHARED_LD_CC="${CC} -b -o"
278 SHARED_LD_CXX="${CXX} -b -o"
284 if test "x$GCC" != "xyes"; then
285 AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc,
289 #ifndef __INTEL_COMPILER
293 bakefile_cv_prog_icc=yes,
294 bakefile_cv_prog_icc=no
297 if test "$bakefile_cv_prog_icc" = "yes"; then
304 if test "x$GCC" != xyes ; then
305 SHARED_LD_CC="${CC} -G -o"
306 SHARED_LD_CXX="${CXX} -G -o"
312 dnl Most apps benefit from being fully binded (its faster and static
313 dnl variables initialized at startup work).
314 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
315 dnl or with a double stage link in order to create a single module
316 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
318 dnl If using newer dev tools then there is a -single_module flag that
319 dnl we can use to do this, otherwise we'll need to use a helper
320 dnl script. Check the version of gcc to see which way we can go:
321 AC_CACHE_CHECK([for gcc 3.1 or later], wx_cv_gcc31, [
324 #if (__GNUC__ < 3) || \
325 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
337 if test "$wx_cv_gcc31" = "no"; then
338 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
339 chmod +x shared-ld-sh
341 dnl Use the shared-ld-sh helper script
342 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
343 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
344 SHARED_LD_CXX="$SHARED_LD_CC"
345 SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
347 dnl Use the -single_module flag and let the linker do it for us
348 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
349 SHARED_LD_MODULE_CC="\${CC} -bundle -single_module -headerpad_max_install_names -o"
350 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
351 SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -headerpad_max_install_names -o"
354 if test "x$GCC" == "xyes"; then
355 PIC_FLAG="-dynamic -fPIC"
357 if test "x$XLCC" = "xyes"; then
358 PIC_FLAG="-dynamic -DPIC"
363 dnl at least gcc 2.95 warns that -fPIC is ignored when compiling
364 dnl each and every file under AIX which is annoying, so don't use
365 dnl it there (it's useless as AIX runs on position-independent
366 dnl architectures only anyhow)
367 if test "x$GCC" = "xyes"; then
369 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
370 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
372 dnl the abs path below used to be hardcoded here so I guess it must
373 dnl be some sort of standard location under AIX?
374 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
375 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
376 dnl FIXME - what about makeCSharedLib?
377 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
378 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
383 dnl can't use gcc under BeOS for shared library creation because it
384 dnl complains about missing 'main'
385 SHARED_LD_CC="${LD} -nostart -o"
386 SHARED_LD_CXX="${LD} -nostart -o"
390 dnl default settings are ok for gcc
391 if test "x$GCC" != "xyes"; then
396 *-*-cygwin* | *-*-mingw32* )
398 SHARED_LD_CC="\$(CC) -shared -o"
399 SHARED_LD_CXX="\$(CXX) -shared -o"
403 *-pc-os2_emx | *-pc-os2-emx )
404 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
405 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
407 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
411 powerpc-apple-macos* | \
412 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
422 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
425 if test "x$PIC_FLAG" != "x" ; then
426 PIC_FLAG="$PIC_FLAG -DPIC"
429 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
430 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
432 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
433 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
436 AC_SUBST(SHARED_LD_CC)
437 AC_SUBST(SHARED_LD_CXX)
438 AC_SUBST(SHARED_LD_MODULE_CC)
439 AC_SUBST(SHARED_LD_MODULE_CXX)
441 AC_SUBST(WINDOWS_IMPLIB)
445 dnl ---------------------------------------------------------------------------
446 dnl AC_BAKEFILE_SHARED_VERSIONS
448 dnl Detects linker options for attaching versions (sonames) to shared libs.
449 dnl ---------------------------------------------------------------------------
451 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
461 case "${BAKEFILE_HOST}" in
462 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
463 SONAME_FLAG="-Wl,-soname,"
488 AC_SUBST(USE_SOVERSION)
489 AC_SUBST(USE_SOVERLINUX)
490 AC_SUBST(USE_SOVERSOLARIS)
491 AC_SUBST(USE_SOVERCYGWIN)
492 AC_SUBST(USE_MACVERSION)
493 AC_SUBST(USE_SOSYMLINKS)
494 AC_SUBST(SONAME_FLAG)
498 dnl ---------------------------------------------------------------------------
501 dnl Detects available C/C++ dependency tracking options
502 dnl ---------------------------------------------------------------------------
504 AC_DEFUN([AC_BAKEFILE_DEPS],
506 AC_MSG_CHECKING([for dependency tracking method])
509 if test "x$GCC" = "xyes"; then
511 case "${BAKEFILE_HOST}" in
513 dnl -cpp-precomp (the default) conflicts with -MMD option
514 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
515 DEPSFLAG="-no-cpp-precomp -MMD"
522 elif test "x$MWCC" = "xyes"; then
525 AC_MSG_RESULT([mwcc])
526 elif test "x$SUNCC" = "xyes"; then
529 AC_MSG_RESULT([Sun cc])
530 elif test "x$SGICC" = "xyes"; then
533 AC_MSG_RESULT([SGI cc])
536 AC_MSG_RESULT([none])
539 if test $DEPS_TRACKING = 1 ; then
540 AC_BAKEFILE_CREATE_FILE_BK_DEPS
544 AC_SUBST(DEPS_TRACKING)
547 dnl ---------------------------------------------------------------------------
548 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
550 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
552 dnl ---------------------------------------------------------------------------
554 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
563 AC_CHECK_TOOL(AR, ar, ar)
564 AC_CHECK_TOOL(STRIP, strip, :)
565 AC_CHECK_TOOL(NM, nm, :)
567 case ${BAKEFILE_HOST} in
569 dnl HP-UX install doesn't handle the "-d" switch so don't
571 INSTALL_DIR="mkdir -p"
573 *) INSTALL_DIR="$INSTALL -d"
576 AC_SUBST(INSTALL_DIR)
579 case ${BAKEFILE_HOST} in
580 *-*-cygwin* | *-*-mingw32* )
581 LDFLAGS_GUI="-mwindows"
583 AC_SUBST(LDFLAGS_GUI)
587 dnl ---------------------------------------------------------------------------
588 dnl AC_BAKEFILE_RES_COMPILERS
590 dnl Checks for presence of resource compilers for win32 or mac
591 dnl ---------------------------------------------------------------------------
593 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
598 case ${BAKEFILE_HOST} in
599 *-*-cygwin* | *-*-mingw32* )
600 dnl Check for win32 resources compiler:
601 if test "$build" != "$host" ; then
602 RESCOMP=$host_alias-windres
604 AC_CHECK_PROG(RESCOMP, windres, windres, windres)
608 *-*-darwin* | powerpc-apple-macos* )
609 AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez)
610 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
618 dnl ---------------------------------------------------------------------------
619 dnl AC_BAKEFILE_PRECOMP_HEADERS
621 dnl Check for precompiled headers support (GCC >= 3.4)
622 dnl ---------------------------------------------------------------------------
624 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
627 AC_ARG_ENABLE([precomp-headers],
628 AS_HELP_STRING([--disable-precomp-headers],
629 [don't use precompiled headers even if compiler can]),
630 [bk_use_pch="$enableval"])
634 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
635 if test "x$GCC" = "xyes"; then
636 dnl test if we have gcc-3.4:
637 AC_MSG_CHECKING([if the compiler supports precompiled headers])
640 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
641 #error "no pch support"
644 #error "no pch support"
646 #if (__GNUC__ == 3) && \
647 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
648 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3)))
649 #error "no pch support"
659 if test $GCC_PCH = 1 ; then
660 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
671 dnl ---------------------------------------------------------------------------
672 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
674 dnl To be used in configure.in of any project using Bakefile-generated mks
676 dnl Behaviour can be modified by setting following variables:
677 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
678 dnl to perform check for basic tools like ranlib
679 dnl BAKEFILE_HOST set this to override host detection, defaults
681 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
685 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
687 dnl (replace FOO with m4_include above, aclocal would die otherwise)
688 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
690 dnl ---------------------------------------------------------------------------
692 AC_DEFUN([AC_BAKEFILE],
696 if test "x$BAKEFILE_HOST" = "x"; then
697 BAKEFILE_HOST="${host}"
700 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
701 AC_BAKEFILE_CHECK_BASIC_STUFF
705 AC_BAKEFILE_PLATFORM_SPECIFICS
707 AC_BAKEFILE_SHARED_LD
708 AC_BAKEFILE_SHARED_VERSIONS
710 AC_BAKEFILE_RES_COMPILERS
712 BAKEFILE_BAKEFILE_M4_VERSION="0.1.9"
714 dnl includes autoconf_inc.m4:
717 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
718 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)?])
721 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
722 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
727 dnl ---------------------------------------------------------------------------
728 dnl Embedded copies of helper scripts follow:
729 dnl ---------------------------------------------------------------------------
731 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
733 dnl ===================== dllar.sh begins here =====================
734 dnl (Created by merge-scripts.py from dllar.sh
735 dnl file do not edit here!)
740 # dllar - a tool to build both a .dll and an .a file
741 # from a set of object (.o) files for EMX/OS2.
743 # Written by Andrew Zabolotny, bit@freya.etu.ru
744 # Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
746 # This script will accept a set of files on the command line.
747 # All the public symbols from the .o files will be exported into
748 # a .DEF file, then linker will be run (through gcc) against them to
749 # build a shared library consisting of all given .o files. All libraries
750 # (.a) will be first decompressed into component .o files then act as
751 # described above. You can optionally give a description (-d "description")
752 # which will be put into .DLL. To see the list of accepted options (as well
753 # as command-line format) simply run this program without options. The .DLL
754 # is built to be imported by name (there is no guarantee that new versions
755 # of the library you build will have same ordinals for same symbols).
757 # dllar is free software; you can redistribute it and/or modify
758 # it under the terms of the GNU General Public License as published by
759 # the Free Software Foundation; either version 2, or (at your option)
762 # dllar is distributed in the hope that it will be useful,
763 # but WITHOUT ANY WARRANTY; without even the implied warranty of
764 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
765 # GNU General Public License for more details.
767 # You should have received a copy of the GNU General Public License
768 # along with dllar; see the file COPYING. If not, write to the Free
769 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA
772 # To successfuly run this program you will need:
773 # - Current drive should have LFN support (HPFS, ext2, network, etc)
774 # (Sometimes dllar generates filenames which won't fit 8.3 scheme)
776 # (used to build the .dll)
778 # (used to create .def file from .o files)
780 # (used to create .a file from .def file)
781 # - GNU text utilites (cat, sort, uniq)
782 # used to process emxexp output
783 # - GNU file utilities (mv, rm)
785 # - lxlite (optional, see flag below)
786 # (used for general .dll cleanup)
793 # basnam, variant of basename, which does _not_ remove the path, _iff_
794 # second argument (suffix to remove) is given
798 echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
801 echo ${D}1 | sed 's/'${D}2'${D}//'
804 echo "error in basnam ${D}*"
810 # Cleanup temporary files and output
813 for i in ${D}inputFiles ; do
816 rm -rf \`basnam ${D}i !\`
823 # Kill result in case of failure as there is just to many stupid make/nmake
824 # things out there which doesn't do this.
825 if @<:@ ${D}# -eq 0 @:>@; then
826 rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
830 # Print usage and exit script with rc=1.
832 echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
833 echo ' @<:@-name-mangler-script script.sh@:>@'
834 echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
835 echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
836 echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
837 echo ' @<:@*.o@:>@ @<:@*.a@:>@'
838 echo '*> "output_file" should have no extension.'
839 echo ' If it has the .o, .a or .dll extension, it is automatically removed.'
840 echo ' The import library name is derived from this and is set to "name".a,'
841 echo ' unless overridden by -import'
842 echo '*> "importlib_name" should have no extension.'
843 echo ' If it has the .o, or .a extension, it is automatically removed.'
844 echo ' This name is used as the import library name and may be longer and'
845 echo ' more descriptive than the DLL name which has to follow the old '
846 echo ' 8.3 convention of FAT.'
847 echo '*> "script.sh may be given to override the output_file name by a'
848 echo ' different name. It is mainly useful if the regular make process'
849 echo ' of some package does not take into account OS/2 restriction of'
850 echo ' DLL name lengths. It takes the importlib name as input and is'
851 echo ' supposed to procude a shorter name as output. The script should'
852 echo ' expect to get importlib_name without extension and should produce'
853 echo ' a (max.) 8 letter name without extension.'
854 echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)'
855 echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
856 echo ' These flags will be put at the start of GCC command line.'
857 echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
858 echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
859 echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
860 echo ' If the last character of a symbol is "*", all symbols beginning'
861 echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).'
862 echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
863 echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
864 echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
865 echo ' C runtime DLLs.'
866 echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
867 echo '*> All other switches (for example -L./ or -lmylib) will be passed'
868 echo ' unchanged to GCC at the end of command line.'
869 echo '*> If you create a DLL from a library and you do not specify -o,'
870 echo ' the basename for DLL and import library will be set to library name,'
871 echo ' the initial library will be renamed to 'name'_s.a (_s for static)'
872 echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
873 echo ' library will be renamed into gcc_s.a.'
876 echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
877 echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
883 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
884 # @Uses Whatever CleanUp() uses.
890 if @<:@ ${D}rcCmd -ne 0 @:>@; then
891 echo "command failed, exit code="${D}rcCmd
917 curDirS=${D}{curDirS}"/"
923 while @<:@ ${D}1 @:>@; do
926 EXPORT_BY_ORDINALS=1;
936 -name-mangler-script)
957 exclude_symbols=${D}{exclude_symbols}${D}1" "
961 library_flags=${D}{library_flags}${D}1" "
980 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
983 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
984 if @<:@ ${D}omfLinking -eq 1 @:>@; then
985 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
987 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
992 if @<:@ ${D}libsToLink -ne 0 @:>@; then
993 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
995 for file in ${D}1 ; do
996 if @<:@ -f ${D}file @:>@; then
997 inputFiles="${D}{inputFiles} ${D}file"
1001 if @<:@ ${D}found -eq 0 @:>@; then
1002 echo "ERROR: No file(s) found: "${D}1
1009 done # iterate cmdline words
1012 if @<:@ -z "${D}inputFiles" @:>@; then
1013 echo "dllar: no input files"
1017 # Now extract all .o files from .a files
1019 for file in ${D}inputFiles ; do
1030 EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1035 dirname=\`basnam ${D}file ${D}suffix\`"_%"
1037 if @<:@ ${D}? -ne 0 @:>@; then
1038 echo "Failed to create subdirectory ./${D}dirname"
1042 # Append '!' to indicate archive
1043 newInputFiles="${D}newInputFiles ${D}{dirname}!"
1044 doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1047 for subfile in ${D}dirname/*.o* ; do
1048 if @<:@ -f ${D}subfile @:>@; then
1050 if @<:@ -s ${D}subfile @:>@; then
1051 # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1052 newInputFiles="${D}newInputFiles ${D}subfile"
1056 if @<:@ ${D}found -eq 0 @:>@; then
1057 echo "WARNING: there are no files in archive \\'${D}file\\'"
1061 newInputFiles="${D}{newInputFiles} ${D}file"
1065 inputFiles="${D}newInputFiles"
1067 # Output filename(s).
1069 if @<:@ -z ${D}outFile @:>@; then
1071 set outFile ${D}inputFiles; outFile=${D}2
1074 # If it is an archive, remove the '!' and the '_%' suffixes
1077 outFile=\`basnam ${D}outFile _%!\`
1084 outFile=\`basnam ${D}outFile .dll\`
1087 outFile=\`basnam ${D}outFile .DLL\`
1090 outFile=\`basnam ${D}outFile .o\`
1093 outFile=\`basnam ${D}outFile .obj\`
1096 outFile=\`basnam ${D}outFile .a\`
1099 outFile=\`basnam ${D}outFile .lib\`
1104 case ${D}outimpFile in
1106 outimpFile=\`basnam ${D}outimpFile .a\`
1109 outimpFile=\`basnam ${D}outimpFile .lib\`
1114 if @<:@ -z ${D}outimpFile @:>@; then
1115 outimpFile=${D}outFile
1117 defFile="${D}{outFile}.def"
1118 arcFile="${D}{outimpFile}.a"
1119 arcFile2="${D}{outimpFile}.lib"
1121 #create ${D}dllFile as something matching 8.3 restrictions,
1122 if @<:@ -z ${D}renameScript @:>@ ; then
1123 dllFile="${D}outFile"
1125 dllFile=\`${D}renameScript ${D}outimpFile\`
1128 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1129 if @<:@ -f ${D}arcFile @:>@ ; then
1130 doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1132 if @<:@ -f ${D}arcFile2 @:>@ ; then
1133 doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1137 # Extract public symbols from all the object files.
1138 tmpdefFile=${D}{defFile}_%
1139 rm -f ${D}tmpdefFile
1140 for file in ${D}inputFiles ; do
1145 doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1150 # Create the def file.
1152 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1153 dllFile="${D}{dllFile}.dll"
1154 if @<:@ ! -z ${D}description @:>@; then
1155 echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile
1157 echo "EXPORTS" >> ${D}defFile
1159 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1160 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1162 # Checks if the export is ok or not.
1163 for word in ${D}exclude_symbols; do
1164 grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1165 mv ${D}{tmpdefFile}% ${D}tmpdefFile
1169 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1170 sed "=" < ${D}tmpdefFile | \\
1174 s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1176 ' > ${D}{tmpdefFile}%
1177 grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1179 rm -f ${D}{tmpdefFile}%
1181 cat ${D}tmpdefFile >> ${D}defFile
1182 rm -f ${D}tmpdefFile
1184 # Do linking, create implib, and apply lxlite.
1186 for file in ${D}inputFiles ; do
1191 gccCmdl="${D}gccCmdl ${D}file"
1195 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1196 touch "${D}{outFile}.dll"
1198 doCommand "emximp -o ${D}arcFile ${D}defFile"
1199 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1201 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1204 doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1206 doCommand "emxomf -s -l ${D}arcFile"
1212 dnl ===================== dllar.sh ends here =====================
1215 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1217 dnl ===================== bk-deps begins here =====================
1218 dnl (Created by merge-scripts.py from bk-deps
1219 dnl file do not edit here!)
1224 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1225 # script. It is used to track C/C++ files dependencies in portable way.
1227 # Permission is given to use this file in any way.
1229 DEPSMODE=${DEPSMODE}
1231 DEPSFLAG="${DEPSFLAG}"
1233 mkdir -p ${D}DEPSDIR
1235 if test ${D}DEPSMODE = gcc ; then
1236 ${D}* ${D}{DEPSFLAG}
1238 if test ${D}{status} != 0 ; then
1241 # move created file to the location we want it in:
1242 while test ${D}# -gt 0; do
1256 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1257 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1258 if test -f ${D}depfile ; then
1259 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1262 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1263 if test -f ${D}depfile ; then
1264 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1269 elif test ${D}DEPSMODE = mwcc ; then
1272 if test ${D}{status} != 0 ; then
1275 # Run mwcc again with -MM and redirect into the dep file we want
1276 # NOTE: We can't use shift here because we need ${D}* to be valid
1278 for arg in ${D}* ; do
1279 if test "${D}prevarg" = "-o"; then
1292 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
1294 elif test ${D}DEPSMODE = unixcc; then
1296 # Run compiler again with deps flag and redirect into the dep file.
1297 # It doesn't work if the '-o FILE' option is used, but without it the
1298 # dependency file will contain the wrong name for the object. So it is
1299 # removed from the command line, and the dep file is fixed with sed.
1301 while test ${D}# -gt 0; do
1308 eval arg${D}#=\\${D}1
1309 cmd="${D}cmd \\${D}arg${D}#"
1314 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
1321 dnl ===================== bk-deps ends here =====================
1324 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
1326 dnl ===================== shared-ld-sh begins here =====================
1327 dnl (Created by merge-scripts.py from shared-ld-sh
1328 dnl file do not edit here!)
1330 cat <<EOF >shared-ld-sh
1332 #-----------------------------------------------------------------------------
1333 #-- Name: distrib/mac/shared-ld-sh
1334 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1335 #-- Author: Gilles Depeyrot
1336 #-- Copyright: (c) 2002 Gilles Depeyrot
1337 #-- Licence: any use permitted
1338 #-----------------------------------------------------------------------------
1343 linking_flag="-dynamiclib"
1344 ldargs="-r -keep_private_externs -nostdlib"
1346 while test ${D}# -gt 0; do
1353 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1354 # collect these options and values
1355 args="${D}{args} ${D}1 ${D}2"
1360 # collect these load args
1361 ldargs="${D}{ldargs} ${D}1"
1364 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1365 # collect these options
1366 args="${D}{args} ${D}1"
1369 -dynamiclib|-bundle)
1370 linking_flag="${D}1"
1374 echo "shared-ld: unhandled option '${D}1'"
1378 *.o | *.a | *.dylib)
1379 # collect object files
1380 objects="${D}{objects} ${D}1"
1384 echo "shared-ld: unhandled argument '${D}1'"
1395 # Link one module containing all the others
1397 if test ${D}{verbose} = 1; then
1398 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1400 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1404 # Link the shared library from the single module created, but only if the
1405 # previous command didn't fail:
1407 if test ${D}{status} = 0; then
1408 if test ${D}{verbose} = 1; then
1409 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1411 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1416 # Remove intermediate module
1418 rm -f master.${D}${D}.o
1422 dnl ===================== shared-ld-sh ends here =====================
1425 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1427 dnl ===================== bk-make-pch begins here =====================
1428 dnl (Created by merge-scripts.py from bk-make-pch
1429 dnl file do not edit here!)
1431 cat <<EOF >bk-make-pch
1434 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1435 # script. It is used to generated precompiled headers.
1437 # Permission is given to use this file in any way.
1446 while test ${D}{#} -gt 0; do
1449 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1450 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1451 headerfile="${D}{incdir}/${D}{header}"
1455 compiler="${D}{compiler} ${D}{1}"
1459 if test "x${D}{headerfile}" = "x" ; then
1460 echo "error: can't find header ${D}{header} in include paths" >2
1462 if test -f ${D}{outfile} ; then
1465 mkdir -p \`dirname ${D}{outfile}\`
1467 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1469 # can do this because gcc is >= 3.4:
1470 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1474 dnl ===================== bk-make-pch ends here =====================