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 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
313 chmod +x shared-ld-sh
315 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
316 SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
318 dnl Most apps benefit from being fully binded (its faster and static
319 dnl variables initialized at startup work).
320 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
321 dnl or with a double stage link in order to create a single module
322 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
324 dnl If using newer dev tools then there is a -single_module flag that
325 dnl we can use to do this for dylibs, otherwise we'll need to use a helper
326 dnl script. Check the version of gcc to see which way we can go:
327 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
330 #if (__GNUC__ < 3) || \
331 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
336 bakefile_cv_gcc31=yes
343 if test "$bakefile_cv_gcc31" = "no"; then
344 dnl Use the shared-ld-sh helper script
345 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
346 SHARED_LD_CXX="$SHARED_LD_CC"
348 dnl Use the -single_module flag and let the linker do it for us
349 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
350 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
353 if test "x$GCC" == "xyes"; then
354 PIC_FLAG="-dynamic -fPIC"
356 if test "x$XLCC" = "xyes"; then
357 PIC_FLAG="-dynamic -DPIC"
362 if test "x$GCC" = "xyes"; then
363 dnl at least gcc 2.95 warns that -fPIC is ignored when
364 dnl compiling each and every file under AIX which is annoying,
365 dnl so don't use it there (it's useless as AIX runs on
366 dnl position-independent architectures only anyhow)
369 dnl -bexpfull is needed by AIX linker to export all symbols (by
370 dnl default it doesn't export any and even with -bexpall it
371 dnl doesn't export all C++ support symbols, e.g. vtable
372 dnl pointers) but it's only available starting from 5.1 (with
373 dnl maintenance pack 2, whatever this is), see
374 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
375 case "${BAKEFILE_HOST}" in
377 LD_EXPFULL="-Wl,-bexpfull"
381 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
382 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
384 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
385 dnl recent AIX versions?
386 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
387 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
388 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
389 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
394 dnl can't use gcc under BeOS for shared library creation because it
395 dnl complains about missing 'main'
396 SHARED_LD_CC="${LD} -nostart -o"
397 SHARED_LD_CXX="${LD} -nostart -o"
401 dnl default settings are ok for gcc
402 if test "x$GCC" != "xyes"; then
407 *-*-cygwin* | *-*-mingw32* )
409 SHARED_LD_CC="\$(CC) -shared -o"
410 SHARED_LD_CXX="\$(CXX) -shared -o"
414 *-pc-os2_emx | *-pc-os2-emx )
415 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
416 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
418 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
422 powerpc-apple-macos* | \
423 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
434 dnl wxWidgets-specific: allow unknown Unix systems
435 dnl AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
438 if test "x$PIC_FLAG" != "x" ; then
439 PIC_FLAG="$PIC_FLAG -DPIC"
442 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
443 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
445 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
446 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
449 AC_SUBST(SHARED_LD_CC)
450 AC_SUBST(SHARED_LD_CXX)
451 AC_SUBST(SHARED_LD_MODULE_CC)
452 AC_SUBST(SHARED_LD_MODULE_CXX)
454 AC_SUBST(WINDOWS_IMPLIB)
458 dnl ---------------------------------------------------------------------------
459 dnl AC_BAKEFILE_SHARED_VERSIONS
461 dnl Detects linker options for attaching versions (sonames) to shared libs.
462 dnl ---------------------------------------------------------------------------
464 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
474 case "${BAKEFILE_HOST}" in
475 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
476 SONAME_FLAG="-Wl,-soname,"
501 AC_SUBST(USE_SOVERSION)
502 AC_SUBST(USE_SOVERLINUX)
503 AC_SUBST(USE_SOVERSOLARIS)
504 AC_SUBST(USE_SOVERCYGWIN)
505 AC_SUBST(USE_MACVERSION)
506 AC_SUBST(USE_SOSYMLINKS)
507 AC_SUBST(SONAME_FLAG)
511 dnl ---------------------------------------------------------------------------
514 dnl Detects available C/C++ dependency tracking options
515 dnl ---------------------------------------------------------------------------
517 AC_DEFUN([AC_BAKEFILE_DEPS],
519 AC_ARG_ENABLE([dependency-tracking],
520 AS_HELP_STRING([--disable-dependency-tracking],
521 [don't use dependency tracking even if the compiler can]),
522 [bk_use_trackdeps="$enableval"])
524 AC_MSG_CHECKING([for dependency tracking method])
527 if test "x$bk_use_trackdeps" = "xno" ; then
529 AC_MSG_RESULT([disabled])
533 if test "x$GCC" = "xyes"; then
535 case "${BAKEFILE_HOST}" in
537 dnl -cpp-precomp (the default) conflicts with -MMD option
538 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
539 DEPSFLAG="-no-cpp-precomp -MMD"
546 elif test "x$MWCC" = "xyes"; then
549 AC_MSG_RESULT([mwcc])
550 elif test "x$SUNCC" = "xyes"; then
553 AC_MSG_RESULT([Sun cc])
554 elif test "x$SGICC" = "xyes"; then
557 AC_MSG_RESULT([SGI cc])
558 elif test "x$HPCC" = "xyes"; then
561 AC_MSG_RESULT([HP cc])
562 elif test "x$COMPAQCC" = "xyes"; then
565 AC_MSG_RESULT([Compaq cc])
568 AC_MSG_RESULT([none])
571 if test $DEPS_TRACKING = 1 ; then
572 AC_BAKEFILE_CREATE_FILE_BK_DEPS
574 dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
575 dnl is required (and so top_builddir is never empty):
576 BK_DEPS="`pwd`/bk-deps"
580 AC_SUBST(DEPS_TRACKING)
584 dnl ---------------------------------------------------------------------------
585 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
587 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
589 dnl ---------------------------------------------------------------------------
591 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
600 if test "x$SUNCXX" = "xyes"; then
601 dnl Sun C++ compiler requires special way of creating static libs;
602 dnl see here for more details:
603 dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
608 AC_CHECK_TOOL(AR, ar, ar)
613 AC_CHECK_TOOL(STRIP, strip, :)
614 AC_CHECK_TOOL(NM, nm, :)
616 case ${BAKEFILE_HOST} in
618 dnl HP-UX install doesn't handle the "-d" switch so don't
620 INSTALL_DIR="mkdir -p"
623 dnl we must refer to makefile's $(INSTALL) variable and not
624 dnl current value of shell variable, hence the single quoting:
625 INSTALL_DIR='$(INSTALL) -d'
628 AC_SUBST(INSTALL_DIR)
631 case ${BAKEFILE_HOST} in
632 *-*-cygwin* | *-*-mingw32* )
633 LDFLAGS_GUI="-mwindows"
635 AC_SUBST(LDFLAGS_GUI)
639 dnl ---------------------------------------------------------------------------
640 dnl AC_BAKEFILE_RES_COMPILERS
642 dnl Checks for presence of resource compilers for win32 or mac
643 dnl ---------------------------------------------------------------------------
645 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
647 case ${BAKEFILE_HOST} in
648 *-*-cygwin* | *-*-mingw32* )
649 dnl Check for win32 resources compiler:
650 AC_CHECK_TOOL(WINDRES, windres)
653 *-*-darwin* | powerpc-apple-macos* )
654 AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
655 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
664 dnl ---------------------------------------------------------------------------
665 dnl AC_BAKEFILE_PRECOMP_HEADERS
667 dnl Check for precompiled headers support (GCC >= 3.4)
668 dnl ---------------------------------------------------------------------------
670 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
673 AC_ARG_ENABLE([precomp-headers],
674 AS_HELP_STRING([--disable-precomp-headers],
675 [don't use precompiled headers even if compiler can]),
676 [bk_use_pch="$enableval"])
683 case ${BAKEFILE_HOST} in
685 dnl PCH support is broken in cygwin gcc because of unportable
686 dnl assumptions about mmap() in gcc code which make PCH generation
687 dnl fail erratically; disable PCH completely until this is fixed
692 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
693 if test "x$GCC" = "xyes"; then
694 dnl test if we have gcc-3.4:
695 AC_MSG_CHECKING([if the compiler supports precompiled headers])
698 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
699 There is no PCH support
702 There is no PCH support
704 #if (__GNUC__ == 3) && \
705 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
706 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
707 ( defined(__INTEL_COMPILER) )
708 There is no PCH support
718 #if !defined(__INTEL_COMPILER) || \
719 (__INTEL_COMPILER < 800)
720 There is no PCH support
731 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
733 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
735 dnl FIXME: make this $(top_builddir)/bk-make-pch once
736 dnl autoconf-2.60 is required (and so top_builddir is
738 BK_MAKE_PCH="`pwd`/bk-make-pch"
745 AC_SUBST(BK_MAKE_PCH)
750 dnl ---------------------------------------------------------------------------
751 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
753 dnl To be used in configure.in of any project using Bakefile-generated mks
755 dnl Behaviour can be modified by setting following variables:
756 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
757 dnl to perform check for basic tools like ranlib
758 dnl BAKEFILE_HOST set this to override host detection, defaults
760 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
764 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
766 dnl (replace FOO with m4_include above, aclocal would die otherwise)
767 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
769 dnl ---------------------------------------------------------------------------
771 AC_DEFUN([AC_BAKEFILE],
775 if test "x$BAKEFILE_HOST" = "x"; then
776 if test "x${host}" = "x" ; then
777 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
780 BAKEFILE_HOST="${host}"
783 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
784 AC_BAKEFILE_CHECK_BASIC_STUFF
788 AC_BAKEFILE_PLATFORM_SPECIFICS
790 AC_BAKEFILE_SHARED_LD
791 AC_BAKEFILE_SHARED_VERSIONS
793 AC_BAKEFILE_RES_COMPILERS
795 BAKEFILE_BAKEFILE_M4_VERSION="0.2.1"
797 dnl includes autoconf_inc.m4:
800 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
801 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)?])
804 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
805 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
810 dnl ---------------------------------------------------------------------------
811 dnl Embedded copies of helper scripts follow:
812 dnl ---------------------------------------------------------------------------
814 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
816 dnl ===================== dllar.sh begins here =====================
817 dnl (Created by merge-scripts.py from dllar.sh
818 dnl file do not edit here!)
823 # dllar - a tool to build both a .dll and an .a file
824 # from a set of object (.o) files for EMX/OS2.
826 # Written by Andrew Zabolotny, bit@freya.etu.ru
827 # Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
829 # This script will accept a set of files on the command line.
830 # All the public symbols from the .o files will be exported into
831 # a .DEF file, then linker will be run (through gcc) against them to
832 # build a shared library consisting of all given .o files. All libraries
833 # (.a) will be first decompressed into component .o files then act as
834 # described above. You can optionally give a description (-d "description")
835 # which will be put into .DLL. To see the list of accepted options (as well
836 # as command-line format) simply run this program without options. The .DLL
837 # is built to be imported by name (there is no guarantee that new versions
838 # of the library you build will have same ordinals for same symbols).
840 # dllar is free software; you can redistribute it and/or modify
841 # it under the terms of the GNU General Public License as published by
842 # the Free Software Foundation; either version 2, or (at your option)
845 # dllar is distributed in the hope that it will be useful,
846 # but WITHOUT ANY WARRANTY; without even the implied warranty of
847 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
848 # GNU General Public License for more details.
850 # You should have received a copy of the GNU General Public License
851 # along with dllar; see the file COPYING. If not, write to the Free
852 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA
855 # To successfuly run this program you will need:
856 # - Current drive should have LFN support (HPFS, ext2, network, etc)
857 # (Sometimes dllar generates filenames which won't fit 8.3 scheme)
859 # (used to build the .dll)
861 # (used to create .def file from .o files)
863 # (used to create .a file from .def file)
864 # - GNU text utilites (cat, sort, uniq)
865 # used to process emxexp output
866 # - GNU file utilities (mv, rm)
868 # - lxlite (optional, see flag below)
869 # (used for general .dll cleanup)
876 # basnam, variant of basename, which does _not_ remove the path, _iff_
877 # second argument (suffix to remove) is given
881 echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
884 echo ${D}1 | sed 's/'${D}2'${D}//'
887 echo "error in basnam ${D}*"
893 # Cleanup temporary files and output
896 for i in ${D}inputFiles ; do
899 rm -rf \`basnam ${D}i !\`
906 # Kill result in case of failure as there is just to many stupid make/nmake
907 # things out there which doesn't do this.
908 if @<:@ ${D}# -eq 0 @:>@; then
909 rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
913 # Print usage and exit script with rc=1.
915 echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
916 echo ' @<:@-name-mangler-script script.sh@:>@'
917 echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
918 echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
919 echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
920 echo ' @<:@*.o@:>@ @<:@*.a@:>@'
921 echo '*> "output_file" should have no extension.'
922 echo ' If it has the .o, .a or .dll extension, it is automatically removed.'
923 echo ' The import library name is derived from this and is set to "name".a,'
924 echo ' unless overridden by -import'
925 echo '*> "importlib_name" should have no extension.'
926 echo ' If it has the .o, or .a extension, it is automatically removed.'
927 echo ' This name is used as the import library name and may be longer and'
928 echo ' more descriptive than the DLL name which has to follow the old '
929 echo ' 8.3 convention of FAT.'
930 echo '*> "script.sh may be given to override the output_file name by a'
931 echo ' different name. It is mainly useful if the regular make process'
932 echo ' of some package does not take into account OS/2 restriction of'
933 echo ' DLL name lengths. It takes the importlib name as input and is'
934 echo ' supposed to procude a shorter name as output. The script should'
935 echo ' expect to get importlib_name without extension and should produce'
936 echo ' a (max.) 8 letter name without extension.'
937 echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)'
938 echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
939 echo ' These flags will be put at the start of GCC command line.'
940 echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
941 echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
942 echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
943 echo ' If the last character of a symbol is "*", all symbols beginning'
944 echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).'
945 echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
946 echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
947 echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
948 echo ' C runtime DLLs.'
949 echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
950 echo '*> All other switches (for example -L./ or -lmylib) will be passed'
951 echo ' unchanged to GCC at the end of command line.'
952 echo '*> If you create a DLL from a library and you do not specify -o,'
953 echo ' the basename for DLL and import library will be set to library name,'
954 echo ' the initial library will be renamed to 'name'_s.a (_s for static)'
955 echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
956 echo ' library will be renamed into gcc_s.a.'
959 echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
960 echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
966 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
967 # @Uses Whatever CleanUp() uses.
973 if @<:@ ${D}rcCmd -ne 0 @:>@; then
974 echo "command failed, exit code="${D}rcCmd
1000 curDirS=${D}{curDirS}"/"
1006 while @<:@ ${D}1 @:>@; do
1009 EXPORT_BY_ORDINALS=1;
1019 -name-mangler-script)
1040 exclude_symbols=${D}{exclude_symbols}${D}1" "
1044 library_flags=${D}{library_flags}${D}1" "
1063 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1066 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
1067 if @<:@ ${D}omfLinking -eq 1 @:>@; then
1068 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
1070 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
1075 if @<:@ ${D}libsToLink -ne 0 @:>@; then
1076 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1078 for file in ${D}1 ; do
1079 if @<:@ -f ${D}file @:>@; then
1080 inputFiles="${D}{inputFiles} ${D}file"
1084 if @<:@ ${D}found -eq 0 @:>@; then
1085 echo "ERROR: No file(s) found: "${D}1
1092 done # iterate cmdline words
1095 if @<:@ -z "${D}inputFiles" @:>@; then
1096 echo "dllar: no input files"
1100 # Now extract all .o files from .a files
1102 for file in ${D}inputFiles ; do
1113 EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1118 dirname=\`basnam ${D}file ${D}suffix\`"_%"
1120 if @<:@ ${D}? -ne 0 @:>@; then
1121 echo "Failed to create subdirectory ./${D}dirname"
1125 # Append '!' to indicate archive
1126 newInputFiles="${D}newInputFiles ${D}{dirname}!"
1127 doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1130 for subfile in ${D}dirname/*.o* ; do
1131 if @<:@ -f ${D}subfile @:>@; then
1133 if @<:@ -s ${D}subfile @:>@; then
1134 # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1135 newInputFiles="${D}newInputFiles ${D}subfile"
1139 if @<:@ ${D}found -eq 0 @:>@; then
1140 echo "WARNING: there are no files in archive \\'${D}file\\'"
1144 newInputFiles="${D}{newInputFiles} ${D}file"
1148 inputFiles="${D}newInputFiles"
1150 # Output filename(s).
1152 if @<:@ -z ${D}outFile @:>@; then
1154 set outFile ${D}inputFiles; outFile=${D}2
1157 # If it is an archive, remove the '!' and the '_%' suffixes
1160 outFile=\`basnam ${D}outFile _%!\`
1167 outFile=\`basnam ${D}outFile .dll\`
1170 outFile=\`basnam ${D}outFile .DLL\`
1173 outFile=\`basnam ${D}outFile .o\`
1176 outFile=\`basnam ${D}outFile .obj\`
1179 outFile=\`basnam ${D}outFile .a\`
1182 outFile=\`basnam ${D}outFile .lib\`
1187 case ${D}outimpFile in
1189 outimpFile=\`basnam ${D}outimpFile .a\`
1192 outimpFile=\`basnam ${D}outimpFile .lib\`
1197 if @<:@ -z ${D}outimpFile @:>@; then
1198 outimpFile=${D}outFile
1200 defFile="${D}{outFile}.def"
1201 arcFile="${D}{outimpFile}.a"
1202 arcFile2="${D}{outimpFile}.lib"
1204 #create ${D}dllFile as something matching 8.3 restrictions,
1205 if @<:@ -z ${D}renameScript @:>@ ; then
1206 dllFile="${D}outFile"
1208 dllFile=\`${D}renameScript ${D}outimpFile\`
1211 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1212 if @<:@ -f ${D}arcFile @:>@ ; then
1213 doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1215 if @<:@ -f ${D}arcFile2 @:>@ ; then
1216 doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1220 # Extract public symbols from all the object files.
1221 tmpdefFile=${D}{defFile}_%
1222 rm -f ${D}tmpdefFile
1223 for file in ${D}inputFiles ; do
1228 doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1233 # Create the def file.
1235 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1236 dllFile="${D}{dllFile}.dll"
1237 if @<:@ ! -z ${D}description @:>@; then
1238 echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile
1240 echo "EXPORTS" >> ${D}defFile
1242 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1243 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1245 # Checks if the export is ok or not.
1246 for word in ${D}exclude_symbols; do
1247 grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1248 mv ${D}{tmpdefFile}% ${D}tmpdefFile
1252 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1253 sed "=" < ${D}tmpdefFile | \\
1257 s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1259 ' > ${D}{tmpdefFile}%
1260 grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1262 rm -f ${D}{tmpdefFile}%
1264 cat ${D}tmpdefFile >> ${D}defFile
1265 rm -f ${D}tmpdefFile
1267 # Do linking, create implib, and apply lxlite.
1269 for file in ${D}inputFiles ; do
1274 gccCmdl="${D}gccCmdl ${D}file"
1278 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1279 touch "${D}{outFile}.dll"
1281 doCommand "emximp -o ${D}arcFile ${D}defFile"
1282 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1284 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1287 doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1289 doCommand "emxomf -s -l ${D}arcFile"
1295 dnl ===================== dllar.sh ends here =====================
1298 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1300 dnl ===================== bk-deps begins here =====================
1301 dnl (Created by merge-scripts.py from bk-deps
1302 dnl file do not edit here!)
1307 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1308 # script. It is used to track C/C++ files dependencies in portable way.
1310 # Permission is given to use this file in any way.
1312 DEPSMODE=${DEPSMODE}
1314 DEPSFLAG="${DEPSFLAG}"
1316 mkdir -p ${D}DEPSDIR
1318 if test ${D}DEPSMODE = gcc ; then
1319 ${D}* ${D}{DEPSFLAG}
1321 if test ${D}{status} != 0 ; then
1324 # move created file to the location we want it in:
1325 while test ${D}# -gt 0; do
1339 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1340 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1341 if test -f ${D}depfile ; then
1342 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1345 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
1346 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1347 if test ! -f ${D}depfile ; then
1348 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
1349 depfile="${D}objfile.d"
1351 if test -f ${D}depfile ; then
1352 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1357 elif test ${D}DEPSMODE = mwcc ; then
1359 # Run mwcc again with -MM and redirect into the dep file we want
1360 # NOTE: We can't use shift here because we need ${D}* to be valid
1362 for arg in ${D}* ; do
1363 if test "${D}prevarg" = "-o"; then
1376 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
1378 elif test ${D}DEPSMODE = unixcc; then
1380 # Run compiler again with deps flag and redirect into the dep file.
1381 # It doesn't work if the '-o FILE' option is used, but without it the
1382 # dependency file will contain the wrong name for the object. So it is
1383 # removed from the command line, and the dep file is fixed with sed.
1385 while test ${D}# -gt 0; do
1392 eval arg${D}#=\\${D}1
1393 cmd="${D}cmd \\${D}arg${D}#"
1398 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
1405 dnl ===================== bk-deps ends here =====================
1408 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
1410 dnl ===================== shared-ld-sh begins here =====================
1411 dnl (Created by merge-scripts.py from shared-ld-sh
1412 dnl file do not edit here!)
1414 cat <<EOF >shared-ld-sh
1416 #-----------------------------------------------------------------------------
1417 #-- Name: distrib/mac/shared-ld-sh
1418 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1419 #-- Author: Gilles Depeyrot
1420 #-- Copyright: (c) 2002 Gilles Depeyrot
1421 #-- Licence: any use permitted
1422 #-----------------------------------------------------------------------------
1427 linking_flag="-dynamiclib"
1428 ldargs="-r -keep_private_externs -nostdlib"
1430 while test ${D}# -gt 0; do
1437 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1438 # collect these options and values
1439 args="${D}{args} ${D}1 ${D}2"
1444 # collect these load args
1445 ldargs="${D}{ldargs} ${D}1"
1448 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1449 # collect these options
1450 args="${D}{args} ${D}1"
1453 -dynamiclib|-bundle)
1454 linking_flag="${D}1"
1458 echo "shared-ld: unhandled option '${D}1'"
1462 *.o | *.a | *.dylib)
1463 # collect object files
1464 objects="${D}{objects} ${D}1"
1468 echo "shared-ld: unhandled argument '${D}1'"
1479 # Link one module containing all the others
1481 if test ${D}{verbose} = 1; then
1482 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1484 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1488 # Link the shared library from the single module created, but only if the
1489 # previous command didn't fail:
1491 if test ${D}{status} = 0; then
1492 if test ${D}{verbose} = 1; then
1493 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1495 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1500 # Remove intermediate module
1502 rm -f master.${D}${D}.o
1506 dnl ===================== shared-ld-sh ends here =====================
1509 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1511 dnl ===================== bk-make-pch begins here =====================
1512 dnl (Created by merge-scripts.py from bk-make-pch
1513 dnl file do not edit here!)
1515 cat <<EOF >bk-make-pch
1518 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1519 # script. It is used to generated precompiled headers.
1521 # Permission is given to use this file in any way.
1531 while test ${D}{#} -gt 0; do
1535 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1536 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1537 headerfile="${D}{incdir}/${D}{header}"
1545 if test ${D}add_to_cmdline = 1 ; then
1546 compiler="${D}{compiler} ${D}{1}"
1551 if test "x${D}{headerfile}" = "x" ; then
1552 echo "error: can't find header ${D}{header} in include paths" >&2
1554 if test -f ${D}{outfile} ; then
1557 mkdir -p \`dirname ${D}{outfile}\`
1559 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1561 if test "x${GCC_PCH}" = "x1" ; then
1562 # can do this because gcc is >= 3.4:
1563 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1564 elif test "x${ICC_PCH}" = "x1" ; then
1565 filename=pch_gen-${D}${D}
1566 file=${D}{filename}.c
1567 dfile=${D}{filename}.d
1568 cat > ${D}file <<EOT
1569 #include "${D}header"
1571 # using -MF icc complains about differing command lines in creation/use
1572 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1573 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1574 rm -f ${D}file ${D}dfile ${D}{filename}.o
1579 dnl ===================== bk-make-pch ends here =====================