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 | \
433 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
436 if test "x$PIC_FLAG" != "x" ; then
437 PIC_FLAG="$PIC_FLAG -DPIC"
440 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
441 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
443 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
444 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
447 AC_SUBST(SHARED_LD_CC)
448 AC_SUBST(SHARED_LD_CXX)
449 AC_SUBST(SHARED_LD_MODULE_CC)
450 AC_SUBST(SHARED_LD_MODULE_CXX)
452 AC_SUBST(WINDOWS_IMPLIB)
456 dnl ---------------------------------------------------------------------------
457 dnl AC_BAKEFILE_SHARED_VERSIONS
459 dnl Detects linker options for attaching versions (sonames) to shared libs.
460 dnl ---------------------------------------------------------------------------
462 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
472 case "${BAKEFILE_HOST}" in
473 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
474 SONAME_FLAG="-Wl,-soname,"
499 AC_SUBST(USE_SOVERSION)
500 AC_SUBST(USE_SOVERLINUX)
501 AC_SUBST(USE_SOVERSOLARIS)
502 AC_SUBST(USE_SOVERCYGWIN)
503 AC_SUBST(USE_MACVERSION)
504 AC_SUBST(USE_SOSYMLINKS)
505 AC_SUBST(SONAME_FLAG)
509 dnl ---------------------------------------------------------------------------
512 dnl Detects available C/C++ dependency tracking options
513 dnl ---------------------------------------------------------------------------
515 AC_DEFUN([AC_BAKEFILE_DEPS],
517 AC_ARG_ENABLE([dependency-tracking],
518 AS_HELP_STRING([--disable-dependency-tracking],
519 [don't use dependency tracking even if the compiler can]),
520 [bk_use_trackdeps="$enableval"])
522 AC_MSG_CHECKING([for dependency tracking method])
525 if test "x$bk_use_trackdeps" = "xno" ; then
527 AC_MSG_RESULT([disabled])
531 if test "x$GCC" = "xyes"; then
533 case "${BAKEFILE_HOST}" in
535 dnl -cpp-precomp (the default) conflicts with -MMD option
536 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
537 DEPSFLAG="-no-cpp-precomp -MMD"
544 elif test "x$MWCC" = "xyes"; then
547 AC_MSG_RESULT([mwcc])
548 elif test "x$SUNCC" = "xyes"; then
551 AC_MSG_RESULT([Sun cc])
552 elif test "x$SGICC" = "xyes"; then
555 AC_MSG_RESULT([SGI cc])
556 elif test "x$HPCC" = "xyes"; then
559 AC_MSG_RESULT([HP cc])
560 elif test "x$COMPAQCC" = "xyes"; then
563 AC_MSG_RESULT([Compaq cc])
566 AC_MSG_RESULT([none])
569 if test $DEPS_TRACKING = 1 ; then
570 AC_BAKEFILE_CREATE_FILE_BK_DEPS
572 dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
573 dnl is required (and so top_builddir is never empty):
574 BK_DEPS="`pwd`/bk-deps"
578 AC_SUBST(DEPS_TRACKING)
582 dnl ---------------------------------------------------------------------------
583 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
585 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
587 dnl ---------------------------------------------------------------------------
589 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
598 if test "x$SUNCXX" = "xyes"; then
599 dnl Sun C++ compiler requires special way of creating static libs;
600 dnl see here for more details:
601 dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
606 AC_CHECK_TOOL(AR, ar, ar)
611 AC_CHECK_TOOL(STRIP, strip, :)
612 AC_CHECK_TOOL(NM, nm, :)
614 case ${BAKEFILE_HOST} in
616 dnl HP-UX install doesn't handle the "-d" switch so don't
618 INSTALL_DIR="mkdir -p"
621 dnl we must refer to makefile's $(INSTALL) variable and not
622 dnl current value of shell variable, hence the single quoting:
623 INSTALL_DIR='$(INSTALL) -d'
626 AC_SUBST(INSTALL_DIR)
629 case ${BAKEFILE_HOST} in
630 *-*-cygwin* | *-*-mingw32* )
631 LDFLAGS_GUI="-mwindows"
633 AC_SUBST(LDFLAGS_GUI)
637 dnl ---------------------------------------------------------------------------
638 dnl AC_BAKEFILE_RES_COMPILERS
640 dnl Checks for presence of resource compilers for win32 or mac
641 dnl ---------------------------------------------------------------------------
643 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
645 case ${BAKEFILE_HOST} in
646 *-*-cygwin* | *-*-mingw32* )
647 dnl Check for win32 resources compiler:
648 AC_CHECK_TOOL(WINDRES, windres)
651 *-*-darwin* | powerpc-apple-macos* )
652 AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
653 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
662 dnl ---------------------------------------------------------------------------
663 dnl AC_BAKEFILE_PRECOMP_HEADERS
665 dnl Check for precompiled headers support (GCC >= 3.4)
666 dnl ---------------------------------------------------------------------------
668 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
671 AC_ARG_ENABLE([precomp-headers],
672 AS_HELP_STRING([--disable-precomp-headers],
673 [don't use precompiled headers even if compiler can]),
674 [bk_use_pch="$enableval"])
681 case ${BAKEFILE_HOST} in
683 dnl PCH support is broken in cygwin gcc because of unportable
684 dnl assumptions about mmap() in gcc code which make PCH generation
685 dnl fail erratically; disable PCH completely until this is fixed
690 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
691 if test "x$GCC" = "xyes"; then
692 dnl test if we have gcc-3.4:
693 AC_MSG_CHECKING([if the compiler supports precompiled headers])
696 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
697 There is no PCH support
700 There is no PCH support
702 #if (__GNUC__ == 3) && \
703 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
704 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
705 ( defined(__INTEL_COMPILER) )
706 There is no PCH support
716 #if !defined(__INTEL_COMPILER) || \
717 (__INTEL_COMPILER < 800)
718 There is no PCH support
729 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
731 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
733 dnl FIXME: make this $(top_builddir)/bk-make-pch once
734 dnl autoconf-2.60 is required (and so top_builddir is
736 BK_MAKE_PCH="`pwd`/bk-make-pch"
743 AC_SUBST(BK_MAKE_PCH)
748 dnl ---------------------------------------------------------------------------
749 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
751 dnl To be used in configure.in of any project using Bakefile-generated mks
753 dnl Behaviour can be modified by setting following variables:
754 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
755 dnl to perform check for basic tools like ranlib
756 dnl BAKEFILE_HOST set this to override host detection, defaults
758 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
762 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
764 dnl (replace FOO with m4_include above, aclocal would die otherwise)
765 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
767 dnl ---------------------------------------------------------------------------
769 AC_DEFUN([AC_BAKEFILE],
773 if test "x$BAKEFILE_HOST" = "x"; then
774 if test "x${host}" = "x" ; then
775 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
778 BAKEFILE_HOST="${host}"
781 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
782 AC_BAKEFILE_CHECK_BASIC_STUFF
786 AC_BAKEFILE_PLATFORM_SPECIFICS
788 AC_BAKEFILE_SHARED_LD
789 AC_BAKEFILE_SHARED_VERSIONS
791 AC_BAKEFILE_RES_COMPILERS
793 BAKEFILE_BAKEFILE_M4_VERSION="0.2.0"
795 dnl includes autoconf_inc.m4:
798 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
799 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)?])
802 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
803 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
808 dnl ---------------------------------------------------------------------------
809 dnl Embedded copies of helper scripts follow:
810 dnl ---------------------------------------------------------------------------
812 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
814 dnl ===================== dllar.sh begins here =====================
815 dnl (Created by merge-scripts.py from dllar.sh
816 dnl file do not edit here!)
821 # dllar - a tool to build both a .dll and an .a file
822 # from a set of object (.o) files for EMX/OS2.
824 # Written by Andrew Zabolotny, bit@freya.etu.ru
825 # Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
827 # This script will accept a set of files on the command line.
828 # All the public symbols from the .o files will be exported into
829 # a .DEF file, then linker will be run (through gcc) against them to
830 # build a shared library consisting of all given .o files. All libraries
831 # (.a) will be first decompressed into component .o files then act as
832 # described above. You can optionally give a description (-d "description")
833 # which will be put into .DLL. To see the list of accepted options (as well
834 # as command-line format) simply run this program without options. The .DLL
835 # is built to be imported by name (there is no guarantee that new versions
836 # of the library you build will have same ordinals for same symbols).
838 # dllar is free software; you can redistribute it and/or modify
839 # it under the terms of the GNU General Public License as published by
840 # the Free Software Foundation; either version 2, or (at your option)
843 # dllar is distributed in the hope that it will be useful,
844 # but WITHOUT ANY WARRANTY; without even the implied warranty of
845 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
846 # GNU General Public License for more details.
848 # You should have received a copy of the GNU General Public License
849 # along with dllar; see the file COPYING. If not, write to the Free
850 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA
853 # To successfuly run this program you will need:
854 # - Current drive should have LFN support (HPFS, ext2, network, etc)
855 # (Sometimes dllar generates filenames which won't fit 8.3 scheme)
857 # (used to build the .dll)
859 # (used to create .def file from .o files)
861 # (used to create .a file from .def file)
862 # - GNU text utilites (cat, sort, uniq)
863 # used to process emxexp output
864 # - GNU file utilities (mv, rm)
866 # - lxlite (optional, see flag below)
867 # (used for general .dll cleanup)
874 # basnam, variant of basename, which does _not_ remove the path, _iff_
875 # second argument (suffix to remove) is given
879 echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
882 echo ${D}1 | sed 's/'${D}2'${D}//'
885 echo "error in basnam ${D}*"
891 # Cleanup temporary files and output
894 for i in ${D}inputFiles ; do
897 rm -rf \`basnam ${D}i !\`
904 # Kill result in case of failure as there is just to many stupid make/nmake
905 # things out there which doesn't do this.
906 if @<:@ ${D}# -eq 0 @:>@; then
907 rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
911 # Print usage and exit script with rc=1.
913 echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
914 echo ' @<:@-name-mangler-script script.sh@:>@'
915 echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
916 echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
917 echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
918 echo ' @<:@*.o@:>@ @<:@*.a@:>@'
919 echo '*> "output_file" should have no extension.'
920 echo ' If it has the .o, .a or .dll extension, it is automatically removed.'
921 echo ' The import library name is derived from this and is set to "name".a,'
922 echo ' unless overridden by -import'
923 echo '*> "importlib_name" should have no extension.'
924 echo ' If it has the .o, or .a extension, it is automatically removed.'
925 echo ' This name is used as the import library name and may be longer and'
926 echo ' more descriptive than the DLL name which has to follow the old '
927 echo ' 8.3 convention of FAT.'
928 echo '*> "script.sh may be given to override the output_file name by a'
929 echo ' different name. It is mainly useful if the regular make process'
930 echo ' of some package does not take into account OS/2 restriction of'
931 echo ' DLL name lengths. It takes the importlib name as input and is'
932 echo ' supposed to procude a shorter name as output. The script should'
933 echo ' expect to get importlib_name without extension and should produce'
934 echo ' a (max.) 8 letter name without extension.'
935 echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)'
936 echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
937 echo ' These flags will be put at the start of GCC command line.'
938 echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
939 echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
940 echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
941 echo ' If the last character of a symbol is "*", all symbols beginning'
942 echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).'
943 echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
944 echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
945 echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
946 echo ' C runtime DLLs.'
947 echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
948 echo '*> All other switches (for example -L./ or -lmylib) will be passed'
949 echo ' unchanged to GCC at the end of command line.'
950 echo '*> If you create a DLL from a library and you do not specify -o,'
951 echo ' the basename for DLL and import library will be set to library name,'
952 echo ' the initial library will be renamed to 'name'_s.a (_s for static)'
953 echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
954 echo ' library will be renamed into gcc_s.a.'
957 echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
958 echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
964 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
965 # @Uses Whatever CleanUp() uses.
971 if @<:@ ${D}rcCmd -ne 0 @:>@; then
972 echo "command failed, exit code="${D}rcCmd
998 curDirS=${D}{curDirS}"/"
1004 while @<:@ ${D}1 @:>@; do
1007 EXPORT_BY_ORDINALS=1;
1017 -name-mangler-script)
1038 exclude_symbols=${D}{exclude_symbols}${D}1" "
1042 library_flags=${D}{library_flags}${D}1" "
1061 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1064 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
1065 if @<:@ ${D}omfLinking -eq 1 @:>@; then
1066 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
1068 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
1073 if @<:@ ${D}libsToLink -ne 0 @:>@; then
1074 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1076 for file in ${D}1 ; do
1077 if @<:@ -f ${D}file @:>@; then
1078 inputFiles="${D}{inputFiles} ${D}file"
1082 if @<:@ ${D}found -eq 0 @:>@; then
1083 echo "ERROR: No file(s) found: "${D}1
1090 done # iterate cmdline words
1093 if @<:@ -z "${D}inputFiles" @:>@; then
1094 echo "dllar: no input files"
1098 # Now extract all .o files from .a files
1100 for file in ${D}inputFiles ; do
1111 EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1116 dirname=\`basnam ${D}file ${D}suffix\`"_%"
1118 if @<:@ ${D}? -ne 0 @:>@; then
1119 echo "Failed to create subdirectory ./${D}dirname"
1123 # Append '!' to indicate archive
1124 newInputFiles="${D}newInputFiles ${D}{dirname}!"
1125 doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1128 for subfile in ${D}dirname/*.o* ; do
1129 if @<:@ -f ${D}subfile @:>@; then
1131 if @<:@ -s ${D}subfile @:>@; then
1132 # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1133 newInputFiles="${D}newInputFiles ${D}subfile"
1137 if @<:@ ${D}found -eq 0 @:>@; then
1138 echo "WARNING: there are no files in archive \\'${D}file\\'"
1142 newInputFiles="${D}{newInputFiles} ${D}file"
1146 inputFiles="${D}newInputFiles"
1148 # Output filename(s).
1150 if @<:@ -z ${D}outFile @:>@; then
1152 set outFile ${D}inputFiles; outFile=${D}2
1155 # If it is an archive, remove the '!' and the '_%' suffixes
1158 outFile=\`basnam ${D}outFile _%!\`
1165 outFile=\`basnam ${D}outFile .dll\`
1168 outFile=\`basnam ${D}outFile .DLL\`
1171 outFile=\`basnam ${D}outFile .o\`
1174 outFile=\`basnam ${D}outFile .obj\`
1177 outFile=\`basnam ${D}outFile .a\`
1180 outFile=\`basnam ${D}outFile .lib\`
1185 case ${D}outimpFile in
1187 outimpFile=\`basnam ${D}outimpFile .a\`
1190 outimpFile=\`basnam ${D}outimpFile .lib\`
1195 if @<:@ -z ${D}outimpFile @:>@; then
1196 outimpFile=${D}outFile
1198 defFile="${D}{outFile}.def"
1199 arcFile="${D}{outimpFile}.a"
1200 arcFile2="${D}{outimpFile}.lib"
1202 #create ${D}dllFile as something matching 8.3 restrictions,
1203 if @<:@ -z ${D}renameScript @:>@ ; then
1204 dllFile="${D}outFile"
1206 dllFile=\`${D}renameScript ${D}outimpFile\`
1209 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1210 if @<:@ -f ${D}arcFile @:>@ ; then
1211 doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1213 if @<:@ -f ${D}arcFile2 @:>@ ; then
1214 doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1218 # Extract public symbols from all the object files.
1219 tmpdefFile=${D}{defFile}_%
1220 rm -f ${D}tmpdefFile
1221 for file in ${D}inputFiles ; do
1226 doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1231 # Create the def file.
1233 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1234 dllFile="${D}{dllFile}.dll"
1235 if @<:@ ! -z ${D}description @:>@; then
1236 echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile
1238 echo "EXPORTS" >> ${D}defFile
1240 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1241 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1243 # Checks if the export is ok or not.
1244 for word in ${D}exclude_symbols; do
1245 grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1246 mv ${D}{tmpdefFile}% ${D}tmpdefFile
1250 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1251 sed "=" < ${D}tmpdefFile | \\
1255 s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1257 ' > ${D}{tmpdefFile}%
1258 grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1260 rm -f ${D}{tmpdefFile}%
1262 cat ${D}tmpdefFile >> ${D}defFile
1263 rm -f ${D}tmpdefFile
1265 # Do linking, create implib, and apply lxlite.
1267 for file in ${D}inputFiles ; do
1272 gccCmdl="${D}gccCmdl ${D}file"
1276 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1277 touch "${D}{outFile}.dll"
1279 doCommand "emximp -o ${D}arcFile ${D}defFile"
1280 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1282 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1285 doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1287 doCommand "emxomf -s -l ${D}arcFile"
1293 dnl ===================== dllar.sh ends here =====================
1296 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1298 dnl ===================== bk-deps begins here =====================
1299 dnl (Created by merge-scripts.py from bk-deps
1300 dnl file do not edit here!)
1305 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1306 # script. It is used to track C/C++ files dependencies in portable way.
1308 # Permission is given to use this file in any way.
1310 DEPSMODE=${DEPSMODE}
1312 DEPSFLAG="${DEPSFLAG}"
1314 mkdir -p ${D}DEPSDIR
1316 if test ${D}DEPSMODE = gcc ; then
1317 ${D}* ${D}{DEPSFLAG}
1319 if test ${D}{status} != 0 ; then
1322 # move created file to the location we want it in:
1323 while test ${D}# -gt 0; do
1337 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1338 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1339 if test -f ${D}depfile ; then
1340 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1343 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
1344 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1345 if test ! -f ${D}depfile ; then
1346 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
1347 depfile="${D}objfile.d"
1349 if test -f ${D}depfile ; then
1350 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1355 elif test ${D}DEPSMODE = mwcc ; then
1357 # Run mwcc again with -MM and redirect into the dep file we want
1358 # NOTE: We can't use shift here because we need ${D}* to be valid
1360 for arg in ${D}* ; do
1361 if test "${D}prevarg" = "-o"; then
1374 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
1376 elif test ${D}DEPSMODE = unixcc; then
1378 # Run compiler again with deps flag and redirect into the dep file.
1379 # It doesn't work if the '-o FILE' option is used, but without it the
1380 # dependency file will contain the wrong name for the object. So it is
1381 # removed from the command line, and the dep file is fixed with sed.
1383 while test ${D}# -gt 0; do
1390 eval arg${D}#=\\${D}1
1391 cmd="${D}cmd \\${D}arg${D}#"
1396 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
1403 dnl ===================== bk-deps ends here =====================
1406 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
1408 dnl ===================== shared-ld-sh begins here =====================
1409 dnl (Created by merge-scripts.py from shared-ld-sh
1410 dnl file do not edit here!)
1412 cat <<EOF >shared-ld-sh
1414 #-----------------------------------------------------------------------------
1415 #-- Name: distrib/mac/shared-ld-sh
1416 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1417 #-- Author: Gilles Depeyrot
1418 #-- Copyright: (c) 2002 Gilles Depeyrot
1419 #-- Licence: any use permitted
1420 #-----------------------------------------------------------------------------
1425 linking_flag="-dynamiclib"
1426 ldargs="-r -keep_private_externs -nostdlib"
1428 while test ${D}# -gt 0; do
1435 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1436 # collect these options and values
1437 args="${D}{args} ${D}1 ${D}2"
1442 # collect these load args
1443 ldargs="${D}{ldargs} ${D}1"
1446 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1447 # collect these options
1448 args="${D}{args} ${D}1"
1451 -dynamiclib|-bundle)
1452 linking_flag="${D}1"
1456 echo "shared-ld: unhandled option '${D}1'"
1460 *.o | *.a | *.dylib)
1461 # collect object files
1462 objects="${D}{objects} ${D}1"
1466 echo "shared-ld: unhandled argument '${D}1'"
1477 # Link one module containing all the others
1479 if test ${D}{verbose} = 1; then
1480 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1482 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1486 # Link the shared library from the single module created, but only if the
1487 # previous command didn't fail:
1489 if test ${D}{status} = 0; then
1490 if test ${D}{verbose} = 1; then
1491 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1493 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1498 # Remove intermediate module
1500 rm -f master.${D}${D}.o
1504 dnl ===================== shared-ld-sh ends here =====================
1507 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1509 dnl ===================== bk-make-pch begins here =====================
1510 dnl (Created by merge-scripts.py from bk-make-pch
1511 dnl file do not edit here!)
1513 cat <<EOF >bk-make-pch
1516 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1517 # script. It is used to generated precompiled headers.
1519 # Permission is given to use this file in any way.
1529 while test ${D}{#} -gt 0; do
1533 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1534 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1535 headerfile="${D}{incdir}/${D}{header}"
1543 if test ${D}add_to_cmdline = 1 ; then
1544 compiler="${D}{compiler} ${D}{1}"
1549 if test "x${D}{headerfile}" = "x" ; then
1550 echo "error: can't find header ${D}{header} in include paths" >&2
1552 if test -f ${D}{outfile} ; then
1555 mkdir -p \`dirname ${D}{outfile}\`
1557 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1559 if test "x${GCC_PCH}" = "x1" ; then
1560 # can do this because gcc is >= 3.4:
1561 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1562 elif test "x${ICC_PCH}" = "x1" ; then
1563 filename=pch_gen-${D}${D}
1564 file=${D}{filename}.c
1565 dfile=${D}{filename}.d
1566 cat > ${D}file <<EOT
1567 #include "${D}header"
1569 # using -MF icc complains about differing command lines in creation/use
1570 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1571 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1572 rm -f ${D}file ${D}dfile ${D}{filename}.o
1577 dnl ===================== bk-make-pch ends here =====================