#!/bin/bash # Temporary hack until building dlls is easier with gcc -mno-cygwin # ("mingw32"). # This is usable with cygwin 1.1.x and gcc-2.95.2 for mingw as # distributed by Mumit Khan. For other combinations, no idea. GCC="gcc" DLLTOOL="dlltool" AS=as library=$1; shift version=$1; shift; def=$1; shift ldargs="$*" defswitch="" [ -n "$def" -a "$def" != '-' ] && defswitch="--def $def" libname=$library [ $version != '-' ] && libname=$library-$version dllfile=$libname.dll for F in $ldargs; do case $F in *.[ao]) objs="$objs $F";; esac done # Check if we have a resource file for this DLL. resfile="" if [ -f $library.rc ]; then resfile=$library-win32res.o objs="$objs $resfile" ldargs="$ldargs $resfile" # Check if we have a build number stamp file. if [ -f $library-build.stamp ]; then read number <$library-build.stamp buildnumber=$[number+1] echo Build number is $buildnumber echo $buildnumber >$library-build.stamp else echo Using zero as build number buildnumber=0 fi m4 -DBUILDNUMBER=$buildnumber <$library.rc >$library-win32res.rc windres $library-win32res.rc $library-win32res.o rm $library-win32res.rc fi # Build the DLL. $GCC -mdll -mno-cygwin -Wl,--base-file,$library.base -o $dllfile $ldargs && $DLLTOOL --as=$AS --dllname $dllfile $defswitch --base-file $library.base --output-exp $library.exp $objs && $GCC -mdll -mno-cygwin -Wl,--base-file,$library.base,$library.exp -o $dllfile $ldargs && $DLLTOOL --as=$AS --dllname $dllfile $defswitch --base-file $library.base --output-exp $library.exp $objs && $GCC -mdll -mno-cygwin -Wl,$library.exp -o $dllfile $ldargs && $DLLTOOL --as=$AS --dllname $dllfile $defswitch --output-lib lib$libname.a $objs # Finally, also build import libraries for the Microsoft linker. You # will either need to have some decent version of MSVC, or get lib.exe # (and link.exe) from the (freely downloadable) Microsoft Platform SDK. if type -p lib.exe && [ -n "$def" -a "$def" != '-' ]; then lib -name:$libname.dll -def:$def -out:$libname.lib fi rm $library.base $library.exp 2>/dev/null