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], bakefile_cv_gcc31, [
324 #if (__GNUC__ < 3) || \
325 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
330 bakefile_cv_gcc31=yes
337 if test "$bakefile_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 if test "x$GCC" = "xyes"; then
364 dnl at least gcc 2.95 warns that -fPIC is ignored when
365 dnl compiling each and every file under AIX which is annoying,
366 dnl so don't use it there (it's useless as AIX runs on
367 dnl position-independent architectures only anyhow)
370 dnl -bexpfull is needed by AIX linker to export all symbols (by
371 dnl default it doesn't export any and even with -bexpall it
372 dnl doesn't export all C++ support symbols, e.g. vtable
373 dnl pointers) but it's only available starting from 5.1 (with
374 dnl maintenance pack 2, whatever this is), see
375 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
376 case "${BAKEFILE_HOST}" in
378 LD_EXPFULL="-Wl,-bexpfull"
382 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
383 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
385 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
386 dnl recent AIX versions?
387 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
388 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
389 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
390 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
395 dnl can't use gcc under BeOS for shared library creation because it
396 dnl complains about missing 'main'
397 SHARED_LD_CC="${LD} -nostart -o"
398 SHARED_LD_CXX="${LD} -nostart -o"
402 dnl default settings are ok for gcc
403 if test "x$GCC" != "xyes"; then
408 *-*-cygwin* | *-*-mingw32* )
410 SHARED_LD_CC="\$(CC) -shared -o"
411 SHARED_LD_CXX="\$(CXX) -shared -o"
415 *-pc-os2_emx | *-pc-os2-emx )
416 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
417 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
419 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
423 powerpc-apple-macos* | \
424 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
434 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
437 if test "x$PIC_FLAG" != "x" ; then
438 PIC_FLAG="$PIC_FLAG -DPIC"
441 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
442 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
444 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
445 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
448 AC_SUBST(SHARED_LD_CC)
449 AC_SUBST(SHARED_LD_CXX)
450 AC_SUBST(SHARED_LD_MODULE_CC)
451 AC_SUBST(SHARED_LD_MODULE_CXX)
453 AC_SUBST(WINDOWS_IMPLIB)
457 dnl ---------------------------------------------------------------------------
458 dnl AC_BAKEFILE_SHARED_VERSIONS
460 dnl Detects linker options for attaching versions (sonames) to shared libs.
461 dnl ---------------------------------------------------------------------------
463 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
473 case "${BAKEFILE_HOST}" in
474 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
475 SONAME_FLAG="-Wl,-soname,"
500 AC_SUBST(USE_SOVERSION)
501 AC_SUBST(USE_SOVERLINUX)
502 AC_SUBST(USE_SOVERSOLARIS)
503 AC_SUBST(USE_SOVERCYGWIN)
504 AC_SUBST(USE_MACVERSION)
505 AC_SUBST(USE_SOSYMLINKS)
506 AC_SUBST(SONAME_FLAG)
510 dnl ---------------------------------------------------------------------------
513 dnl Detects available C/C++ dependency tracking options
514 dnl ---------------------------------------------------------------------------
516 AC_DEFUN([AC_BAKEFILE_DEPS],
518 AC_MSG_CHECKING([for dependency tracking method])
521 if test "x$GCC" = "xyes"; then
523 case "${BAKEFILE_HOST}" in
525 dnl -cpp-precomp (the default) conflicts with -MMD option
526 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
527 DEPSFLAG="-no-cpp-precomp -MMD"
534 elif test "x$MWCC" = "xyes"; then
537 AC_MSG_RESULT([mwcc])
538 elif test "x$SUNCC" = "xyes"; then
541 AC_MSG_RESULT([Sun cc])
542 elif test "x$SGICC" = "xyes"; then
545 AC_MSG_RESULT([SGI cc])
546 elif test "x$HPCC" = "xyes"; then
549 AC_MSG_RESULT([HP cc])
550 elif test "x$COMPAQCC" = "xyes"; then
553 AC_MSG_RESULT([Compaq cc])
556 AC_MSG_RESULT([none])
559 if test $DEPS_TRACKING = 1 ; then
560 AC_BAKEFILE_CREATE_FILE_BK_DEPS
564 AC_SUBST(DEPS_TRACKING)
567 dnl ---------------------------------------------------------------------------
568 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
570 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
572 dnl ---------------------------------------------------------------------------
574 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
583 AC_CHECK_TOOL(AR, ar, ar)
584 AC_CHECK_TOOL(STRIP, strip, :)
585 AC_CHECK_TOOL(NM, nm, :)
587 case ${BAKEFILE_HOST} in
589 dnl HP-UX install doesn't handle the "-d" switch so don't
591 INSTALL_DIR="mkdir -p"
593 *) INSTALL_DIR="$INSTALL -d"
596 AC_SUBST(INSTALL_DIR)
599 case ${BAKEFILE_HOST} in
600 *-*-cygwin* | *-*-mingw32* )
601 LDFLAGS_GUI="-mwindows"
603 AC_SUBST(LDFLAGS_GUI)
607 dnl ---------------------------------------------------------------------------
608 dnl AC_BAKEFILE_RES_COMPILERS
610 dnl Checks for presence of resource compilers for win32 or mac
611 dnl ---------------------------------------------------------------------------
613 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
618 case ${BAKEFILE_HOST} in
619 *-*-cygwin* | *-*-mingw32* )
620 dnl Check for win32 resources compiler:
621 if test "$build" != "$host" ; then
622 RESCOMP=$host_alias-windres
624 AC_CHECK_PROG(RESCOMP, windres, windres, windres)
628 *-*-darwin* | powerpc-apple-macos* )
629 AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez)
630 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
638 dnl ---------------------------------------------------------------------------
639 dnl AC_BAKEFILE_PRECOMP_HEADERS
641 dnl Check for precompiled headers support (GCC >= 3.4)
642 dnl ---------------------------------------------------------------------------
644 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
647 AC_ARG_ENABLE([precomp-headers],
648 AS_HELP_STRING([--disable-precomp-headers],
649 [don't use precompiled headers even if compiler can]),
650 [bk_use_pch="$enableval"])
654 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
655 if test "x$GCC" = "xyes"; then
656 dnl test if we have gcc-3.4:
657 AC_MSG_CHECKING([if the compiler supports precompiled headers])
660 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
661 #error "no pch support"
664 #error "no pch support"
666 #if (__GNUC__ == 3) && \
667 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
668 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3)))
669 #error "no pch support"
679 if test $GCC_PCH = 1 ; then
680 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
691 dnl ---------------------------------------------------------------------------
692 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
694 dnl To be used in configure.in of any project using Bakefile-generated mks
696 dnl Behaviour can be modified by setting following variables:
697 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
698 dnl to perform check for basic tools like ranlib
699 dnl BAKEFILE_HOST set this to override host detection, defaults
701 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
705 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
707 dnl (replace FOO with m4_include above, aclocal would die otherwise)
708 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
710 dnl ---------------------------------------------------------------------------
712 AC_DEFUN([AC_BAKEFILE],
716 if test "x$BAKEFILE_HOST" = "x"; then
717 BAKEFILE_HOST="${host}"
720 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
721 AC_BAKEFILE_CHECK_BASIC_STUFF
725 AC_BAKEFILE_PLATFORM_SPECIFICS
727 AC_BAKEFILE_SHARED_LD
728 AC_BAKEFILE_SHARED_VERSIONS
730 AC_BAKEFILE_RES_COMPILERS
732 BAKEFILE_BAKEFILE_M4_VERSION="0.1.9"
734 dnl includes autoconf_inc.m4:
737 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
738 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)?])
741 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
742 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
747 dnl ---------------------------------------------------------------------------
748 dnl Embedded copies of helper scripts follow:
749 dnl ---------------------------------------------------------------------------
751 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
753 dnl ===================== dllar.sh begins here =====================
754 dnl (Created by merge-scripts.py from dllar.sh
755 dnl file do not edit here!)
760 # dllar - a tool to build both a .dll and an .a file
761 # from a set of object (.o) files for EMX/OS2.
763 # Written by Andrew Zabolotny, bit@freya.etu.ru
764 # Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
766 # This script will accept a set of files on the command line.
767 # All the public symbols from the .o files will be exported into
768 # a .DEF file, then linker will be run (through gcc) against them to
769 # build a shared library consisting of all given .o files. All libraries
770 # (.a) will be first decompressed into component .o files then act as
771 # described above. You can optionally give a description (-d "description")
772 # which will be put into .DLL. To see the list of accepted options (as well
773 # as command-line format) simply run this program without options. The .DLL
774 # is built to be imported by name (there is no guarantee that new versions
775 # of the library you build will have same ordinals for same symbols).
777 # dllar is free software; you can redistribute it and/or modify
778 # it under the terms of the GNU General Public License as published by
779 # the Free Software Foundation; either version 2, or (at your option)
782 # dllar is distributed in the hope that it will be useful,
783 # but WITHOUT ANY WARRANTY; without even the implied warranty of
784 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
785 # GNU General Public License for more details.
787 # You should have received a copy of the GNU General Public License
788 # along with dllar; see the file COPYING. If not, write to the Free
789 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA
792 # To successfuly run this program you will need:
793 # - Current drive should have LFN support (HPFS, ext2, network, etc)
794 # (Sometimes dllar generates filenames which won't fit 8.3 scheme)
796 # (used to build the .dll)
798 # (used to create .def file from .o files)
800 # (used to create .a file from .def file)
801 # - GNU text utilites (cat, sort, uniq)
802 # used to process emxexp output
803 # - GNU file utilities (mv, rm)
805 # - lxlite (optional, see flag below)
806 # (used for general .dll cleanup)
813 # basnam, variant of basename, which does _not_ remove the path, _iff_
814 # second argument (suffix to remove) is given
818 echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
821 echo ${D}1 | sed 's/'${D}2'${D}//'
824 echo "error in basnam ${D}*"
830 # Cleanup temporary files and output
833 for i in ${D}inputFiles ; do
836 rm -rf \`basnam ${D}i !\`
843 # Kill result in case of failure as there is just to many stupid make/nmake
844 # things out there which doesn't do this.
845 if @<:@ ${D}# -eq 0 @:>@; then
846 rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
850 # Print usage and exit script with rc=1.
852 echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
853 echo ' @<:@-name-mangler-script script.sh@:>@'
854 echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
855 echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
856 echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
857 echo ' @<:@*.o@:>@ @<:@*.a@:>@'
858 echo '*> "output_file" should have no extension.'
859 echo ' If it has the .o, .a or .dll extension, it is automatically removed.'
860 echo ' The import library name is derived from this and is set to "name".a,'
861 echo ' unless overridden by -import'
862 echo '*> "importlib_name" should have no extension.'
863 echo ' If it has the .o, or .a extension, it is automatically removed.'
864 echo ' This name is used as the import library name and may be longer and'
865 echo ' more descriptive than the DLL name which has to follow the old '
866 echo ' 8.3 convention of FAT.'
867 echo '*> "script.sh may be given to override the output_file name by a'
868 echo ' different name. It is mainly useful if the regular make process'
869 echo ' of some package does not take into account OS/2 restriction of'
870 echo ' DLL name lengths. It takes the importlib name as input and is'
871 echo ' supposed to procude a shorter name as output. The script should'
872 echo ' expect to get importlib_name without extension and should produce'
873 echo ' a (max.) 8 letter name without extension.'
874 echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)'
875 echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
876 echo ' These flags will be put at the start of GCC command line.'
877 echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
878 echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
879 echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
880 echo ' If the last character of a symbol is "*", all symbols beginning'
881 echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).'
882 echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
883 echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
884 echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
885 echo ' C runtime DLLs.'
886 echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
887 echo '*> All other switches (for example -L./ or -lmylib) will be passed'
888 echo ' unchanged to GCC at the end of command line.'
889 echo '*> If you create a DLL from a library and you do not specify -o,'
890 echo ' the basename for DLL and import library will be set to library name,'
891 echo ' the initial library will be renamed to 'name'_s.a (_s for static)'
892 echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
893 echo ' library will be renamed into gcc_s.a.'
896 echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
897 echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
903 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
904 # @Uses Whatever CleanUp() uses.
910 if @<:@ ${D}rcCmd -ne 0 @:>@; then
911 echo "command failed, exit code="${D}rcCmd
937 curDirS=${D}{curDirS}"/"
943 while @<:@ ${D}1 @:>@; do
946 EXPORT_BY_ORDINALS=1;
956 -name-mangler-script)
977 exclude_symbols=${D}{exclude_symbols}${D}1" "
981 library_flags=${D}{library_flags}${D}1" "
1000 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1003 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
1004 if @<:@ ${D}omfLinking -eq 1 @:>@; then
1005 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
1007 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
1012 if @<:@ ${D}libsToLink -ne 0 @:>@; then
1013 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1015 for file in ${D}1 ; do
1016 if @<:@ -f ${D}file @:>@; then
1017 inputFiles="${D}{inputFiles} ${D}file"
1021 if @<:@ ${D}found -eq 0 @:>@; then
1022 echo "ERROR: No file(s) found: "${D}1
1029 done # iterate cmdline words
1032 if @<:@ -z "${D}inputFiles" @:>@; then
1033 echo "dllar: no input files"
1037 # Now extract all .o files from .a files
1039 for file in ${D}inputFiles ; do
1050 EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1055 dirname=\`basnam ${D}file ${D}suffix\`"_%"
1057 if @<:@ ${D}? -ne 0 @:>@; then
1058 echo "Failed to create subdirectory ./${D}dirname"
1062 # Append '!' to indicate archive
1063 newInputFiles="${D}newInputFiles ${D}{dirname}!"
1064 doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1067 for subfile in ${D}dirname/*.o* ; do
1068 if @<:@ -f ${D}subfile @:>@; then
1070 if @<:@ -s ${D}subfile @:>@; then
1071 # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1072 newInputFiles="${D}newInputFiles ${D}subfile"
1076 if @<:@ ${D}found -eq 0 @:>@; then
1077 echo "WARNING: there are no files in archive \\'${D}file\\'"
1081 newInputFiles="${D}{newInputFiles} ${D}file"
1085 inputFiles="${D}newInputFiles"
1087 # Output filename(s).
1089 if @<:@ -z ${D}outFile @:>@; then
1091 set outFile ${D}inputFiles; outFile=${D}2
1094 # If it is an archive, remove the '!' and the '_%' suffixes
1097 outFile=\`basnam ${D}outFile _%!\`
1104 outFile=\`basnam ${D}outFile .dll\`
1107 outFile=\`basnam ${D}outFile .DLL\`
1110 outFile=\`basnam ${D}outFile .o\`
1113 outFile=\`basnam ${D}outFile .obj\`
1116 outFile=\`basnam ${D}outFile .a\`
1119 outFile=\`basnam ${D}outFile .lib\`
1124 case ${D}outimpFile in
1126 outimpFile=\`basnam ${D}outimpFile .a\`
1129 outimpFile=\`basnam ${D}outimpFile .lib\`
1134 if @<:@ -z ${D}outimpFile @:>@; then
1135 outimpFile=${D}outFile
1137 defFile="${D}{outFile}.def"
1138 arcFile="${D}{outimpFile}.a"
1139 arcFile2="${D}{outimpFile}.lib"
1141 #create ${D}dllFile as something matching 8.3 restrictions,
1142 if @<:@ -z ${D}renameScript @:>@ ; then
1143 dllFile="${D}outFile"
1145 dllFile=\`${D}renameScript ${D}outimpFile\`
1148 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1149 if @<:@ -f ${D}arcFile @:>@ ; then
1150 doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1152 if @<:@ -f ${D}arcFile2 @:>@ ; then
1153 doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1157 # Extract public symbols from all the object files.
1158 tmpdefFile=${D}{defFile}_%
1159 rm -f ${D}tmpdefFile
1160 for file in ${D}inputFiles ; do
1165 doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1170 # Create the def file.
1172 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1173 dllFile="${D}{dllFile}.dll"
1174 if @<:@ ! -z ${D}description @:>@; then
1175 echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile
1177 echo "EXPORTS" >> ${D}defFile
1179 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1180 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1182 # Checks if the export is ok or not.
1183 for word in ${D}exclude_symbols; do
1184 grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1185 mv ${D}{tmpdefFile}% ${D}tmpdefFile
1189 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1190 sed "=" < ${D}tmpdefFile | \\
1194 s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1196 ' > ${D}{tmpdefFile}%
1197 grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1199 rm -f ${D}{tmpdefFile}%
1201 cat ${D}tmpdefFile >> ${D}defFile
1202 rm -f ${D}tmpdefFile
1204 # Do linking, create implib, and apply lxlite.
1206 for file in ${D}inputFiles ; do
1211 gccCmdl="${D}gccCmdl ${D}file"
1215 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1216 touch "${D}{outFile}.dll"
1218 doCommand "emximp -o ${D}arcFile ${D}defFile"
1219 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1221 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1224 doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1226 doCommand "emxomf -s -l ${D}arcFile"
1232 dnl ===================== dllar.sh ends here =====================
1235 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1237 dnl ===================== bk-deps begins here =====================
1238 dnl (Created by merge-scripts.py from bk-deps
1239 dnl file do not edit here!)
1244 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1245 # script. It is used to track C/C++ files dependencies in portable way.
1247 # Permission is given to use this file in any way.
1249 DEPSMODE=${DEPSMODE}
1251 DEPSFLAG="${DEPSFLAG}"
1253 mkdir -p ${D}DEPSDIR
1255 if test ${D}DEPSMODE = gcc ; then
1256 ${D}* ${D}{DEPSFLAG}
1258 if test ${D}{status} != 0 ; then
1261 # move created file to the location we want it in:
1262 while test ${D}# -gt 0; do
1276 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1277 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1278 if test -f ${D}depfile ; then
1279 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1282 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
1283 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1284 if test ! -f ${D}depfile ; then
1285 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
1286 depfile="${D}objfile.d"
1288 if test -f ${D}depfile ; then
1289 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1294 elif test ${D}DEPSMODE = mwcc ; then
1296 # Run mwcc again with -MM and redirect into the dep file we want
1297 # NOTE: We can't use shift here because we need ${D}* to be valid
1299 for arg in ${D}* ; do
1300 if test "${D}prevarg" = "-o"; then
1313 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
1315 elif test ${D}DEPSMODE = unixcc; then
1317 # Run compiler again with deps flag and redirect into the dep file.
1318 # It doesn't work if the '-o FILE' option is used, but without it the
1319 # dependency file will contain the wrong name for the object. So it is
1320 # removed from the command line, and the dep file is fixed with sed.
1322 while test ${D}# -gt 0; do
1329 eval arg${D}#=\\${D}1
1330 cmd="${D}cmd \\${D}arg${D}#"
1335 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
1342 dnl ===================== bk-deps ends here =====================
1345 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
1347 dnl ===================== shared-ld-sh begins here =====================
1348 dnl (Created by merge-scripts.py from shared-ld-sh
1349 dnl file do not edit here!)
1351 cat <<EOF >shared-ld-sh
1353 #-----------------------------------------------------------------------------
1354 #-- Name: distrib/mac/shared-ld-sh
1355 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1356 #-- Author: Gilles Depeyrot
1357 #-- Copyright: (c) 2002 Gilles Depeyrot
1358 #-- Licence: any use permitted
1359 #-----------------------------------------------------------------------------
1364 linking_flag="-dynamiclib"
1365 ldargs="-r -keep_private_externs -nostdlib"
1367 while test ${D}# -gt 0; do
1374 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1375 # collect these options and values
1376 args="${D}{args} ${D}1 ${D}2"
1381 # collect these load args
1382 ldargs="${D}{ldargs} ${D}1"
1385 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1386 # collect these options
1387 args="${D}{args} ${D}1"
1390 -dynamiclib|-bundle)
1391 linking_flag="${D}1"
1395 echo "shared-ld: unhandled option '${D}1'"
1399 *.o | *.a | *.dylib)
1400 # collect object files
1401 objects="${D}{objects} ${D}1"
1405 echo "shared-ld: unhandled argument '${D}1'"
1416 # Link one module containing all the others
1418 if test ${D}{verbose} = 1; then
1419 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1421 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1425 # Link the shared library from the single module created, but only if the
1426 # previous command didn't fail:
1428 if test ${D}{status} = 0; then
1429 if test ${D}{verbose} = 1; then
1430 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1432 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1437 # Remove intermediate module
1439 rm -f master.${D}${D}.o
1443 dnl ===================== shared-ld-sh ends here =====================
1446 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1448 dnl ===================== bk-make-pch begins here =====================
1449 dnl (Created by merge-scripts.py from bk-make-pch
1450 dnl file do not edit here!)
1452 cat <<EOF >bk-make-pch
1455 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1456 # script. It is used to generated precompiled headers.
1458 # Permission is given to use this file in any way.
1467 while test ${D}{#} -gt 0; do
1470 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1471 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1472 headerfile="${D}{incdir}/${D}{header}"
1476 compiler="${D}{compiler} ${D}{1}"
1480 if test "x${D}{headerfile}" = "x" ; then
1481 echo "error: can't find header ${D}{header} in include paths" >2
1483 if test -f ${D}{outfile} ; then
1486 mkdir -p \`dirname ${D}{outfile}\`
1488 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1490 # can do this because gcc is >= 3.4:
1491 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1495 dnl ===================== bk-make-pch ends here =====================