diff --git a/mingw-cross-configure.sh b/mingw-cross-configure.sh index 255156f..13c6845 100644 --- a/mingw-cross-configure.sh +++ b/mingw-cross-configure.sh @@ -1,8 +1,8 @@ #!/bin/sh -WITH_USB=0 +WITH_USB=1 -LIBUSB_WIN32_BIN_VERSION="1.2.2.0" +LIBUSB_WIN32_BIN_VERSION="1.2.6.0" LIBUSB_WIN32_BIN_ARCHIVE="libusb-win32-bin-$LIBUSB_WIN32_BIN_VERSION.zip" LIBUSB_WIN32_BIN_URL="http://freefr.dl.sourceforge.net/project/libusb-win32/libusb-win32-releases/$LIBUSB_WIN32_BIN_VERSION/$LIBUSB_WIN32_BIN_ARCHIVE" LIBUSB_WIN32_BIN_DIR="libusb-win32-bin-$LIBUSB_WIN32_BIN_VERSION" @@ -14,7 +14,8 @@ if [ "$WITH_USB" = "1" ]; then fi fi -MINGW_DIR="/usr/i586-mingw32msvc" +MINGW="${MINGW:=i686-w64-mingw32}" +MINGW_DIR="/usr/$MINGW" # Use MinGW binaries before others #export PATH=$MINGW_DIR/bin:$PATH @@ -33,11 +34,58 @@ export CFLAGS="-Wfatal-errors" # Include default MinGW include directory, and libnfc's win32 files export CFLAGS="$CFLAGS -I$MINGW_DIR/include -I$PWD/contrib/win32" +if [ "$MINGW" = "i686-w64-mingw32" ]; then + # mingw-64 includes winscard.a and winscard.h + # + # It is not enough to set libpcsclite_LIBS to "-lwinscard", because it is + # forgotten when libnfc is created with libtool. That's why we are setting + # LIBS. + export LIBS="-lwinscard" + + echo "MinGW-w64 ships all requirements libnfc." + echo "Unfortunately the MinGW-w64 header are currently" + echo "buggy. Also, Libtool doesn't support MinGW-w64" + echo "very well." + echo "" + echo "Warning ________________________________________" + echo "You will only be able to compile libnfc.dll, but" + echo "none of the executables (see utils and examples)." + echo "" + # You can fix winbase.h by adding the following lines: + # #include + # #include + # But the problem with Libtool remains. +else + if [ -z "$libpcsclite_LIBS$libpcsclite_CFLAGS" ]; then + echo "Error __________________________________________" + echo "You need to get the PC/SC library from a Windows" + echo "machine and the appropriate header files. Then" + echo "specify libpcsclite_LIBS=.../WinScard.dll and" + echo "libpcsclite_CFLAGS=-I..." + fi + exit 1 +fi + ## Configure to cross-compile using mingw32msvc if [ "$WITH_USB" = "1" ]; then # with direct-USB drivers (use libusb-win32) - ./configure --target=i586-mingw32msvc --host=i586-mingw32msvc --with-drivers=pn531_usb,pn533_usb,pn532_uart,arygon --with-libusb-win32=$PWD/$LIBUSB_WIN32_BIN_DIR $* + DRIVERS="all" else # with UART divers only (can be tested under wine) - ./configure --target=i586-mingw32msvc --host=i586-mingw32msvc --with-drivers=pn532_uart,arygon $* + DRIVERS="pn532_uart,arygon" +fi + +if [ ! -x configure ]; then + autoreconf -is +fi + +./configure --target=$MINGW --host=$MINGW \ + --with-drivers=$DRIVERS \ + --with-libusb-win32=$PWD/$LIBUSB_WIN32_BIN_DIR \ + $* + +if [ "$MINGW" = "i686-w64-mingw32" ]; then + # due to the buggy headers from MINGW-64 we always add "contrib/windows.h", + # otherwise some windows types won't be available. + echo "#include \"contrib/windows.h\"" >> config.h fi