Index: examples/pn53x-tamashell.c =================================================================== --- examples/pn53x-tamashell.c (Revision 1327) +++ examples/pn53x-tamashell.c (Arbeitskopie) @@ -76,7 +76,6 @@ uint8_t abtTx[MAX_FRAME_LEN]; size_t szRx = sizeof(abtRx); size_t szTx; - extern FILE* stdin; FILE* input = NULL; if (argc >= 2) { Index: libnfc/nfc-internal.c =================================================================== --- libnfc/nfc-internal.c (Revision 1327) +++ libnfc/nfc-internal.c (Arbeitskopie) @@ -22,6 +22,7 @@ * @brief Provide some useful internal functions */ +#define nfc_EXPORTS #include void Index: libnfc/chips/pn53x.c =================================================================== --- libnfc/chips/pn53x.c (Revision 1327) +++ libnfc/chips/pn53x.c (Arbeitskopie) @@ -37,6 +37,7 @@ #include +#define nfc_EXPORTS #include "nfc/nfc.h" #include "nfc-internal.h" #include "pn53x.h" Index: libnfc/drivers/acr122s.c =================================================================== --- libnfc/drivers/acr122s.c (Revision 1327) +++ libnfc/drivers/acr122s.c (Arbeitskopie) @@ -35,6 +35,7 @@ #include #include +#define nfc_EXPORTS #include #include "drivers.h" Index: libnfc/drivers/arygon.c =================================================================== --- libnfc/drivers/arygon.c (Revision 1327) +++ libnfc/drivers/arygon.c (Arbeitskopie) @@ -42,6 +42,7 @@ #include #include +#define nfc_EXPORTS #include #include "drivers.h" Index: libnfc/drivers/pn532_uart.c =================================================================== --- libnfc/drivers/pn532_uart.c (Revision 1327) +++ libnfc/drivers/pn532_uart.c (Arbeitskopie) @@ -36,6 +36,7 @@ #include #include +#define nfc_EXPORTS #include #include "drivers.h" Index: libnfc/drivers/pn53x_usb.c =================================================================== --- libnfc/drivers/pn53x_usb.c (Revision 1327) +++ libnfc/drivers/pn53x_usb.c (Arbeitskopie) @@ -50,8 +50,13 @@ #define _usb_strerror( X ) usb_strerror() #endif +#ifdef _WIN32 + #include "contrib/windows.h" +#endif + #include +#define nfc_EXPORTS #include #include "nfc-internal.h" Index: libnfc/drivers/acr122.c =================================================================== --- libnfc/drivers/acr122.c (Revision 1327) +++ libnfc/drivers/acr122.c (Arbeitskopie) @@ -32,6 +32,7 @@ #include #include +#define nfc_EXPORTS #include #include "chips/pn53x.h" Index: libnfc/buses/uart.c =================================================================== --- libnfc/buses/uart.c (Revision 1327) +++ libnfc/buses/uart.c (Arbeitskopie) @@ -29,6 +29,7 @@ #include "uart.h" +#define nfc_EXPORTS #include #include "nfc-internal.h" Index: libnfc/nfc-emulation.c =================================================================== --- libnfc/nfc-emulation.c (Revision 1327) +++ libnfc/nfc-emulation.c (Arbeitskopie) @@ -22,6 +22,11 @@ * @brief Provide a small API to ease emulation in libnfc */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif // HAVE_CONFIG_H + +#define nfc_EXPORTS #include #include Index: libnfc/iso14443-subr.c =================================================================== --- libnfc/iso14443-subr.c (Revision 1327) +++ libnfc/iso14443-subr.c (Arbeitskopie) @@ -29,6 +29,7 @@ #include #include +#define nfc_EXPORTS #include Index: libnfc/nfc.c =================================================================== --- libnfc/nfc.c (Revision 1327) +++ libnfc/nfc.c (Arbeitskopie) @@ -73,6 +73,7 @@ #include #include +#define nfc_EXPORTS #include #include "nfc-internal.h" @@ -80,6 +81,10 @@ #include +#ifdef _WIN32 +# include "contrib/windows.h" +#endif + #define LOG_CATEGORY "libnfc.general" const struct nfc_driver *nfc_drivers[] = { Index: utils/nfc-read-forum-tag3.c =================================================================== --- utils/nfc-read-forum-tag3.c (Revision 1327) +++ utils/nfc-read-forum-tag3.c (Arbeitskopie) @@ -51,11 +51,16 @@ #include #include #include +#include #include #include "nfc-utils.h" +#ifdef _WIN32 +# include "contrib/windows.h" +#endif + static nfc_device *pnd; void Index: mingw-cross-configure.sh =================================================================== --- mingw-cross-configure.sh (Revision 1327) +++ mingw-cross-configure.sh (Arbeitskopie) @@ -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 @@ 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 @@ # 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