From 3cd5c710521bb1ab4ea829cc233925d36ac1e3ea Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 09:24:48 -0500 Subject: [PATCH 1/7] Windows: Remove unused header/stub - Likely from before proper libusb reference --- windows/usb/include/usb.h | 408 ------------------------------------ windows/usb/src/usbstub.cpp | 294 -------------------------- 2 files changed, 702 deletions(-) delete mode 100644 windows/usb/include/usb.h delete mode 100644 windows/usb/src/usbstub.cpp diff --git a/windows/usb/include/usb.h b/windows/usb/include/usb.h deleted file mode 100644 index 663749e..0000000 --- a/windows/usb/include/usb.h +++ /dev/null @@ -1,408 +0,0 @@ -/* - * from the libusb-win32 project - * - * Copyright (c) 2000-2003 Johannes Erdfelt - * - * This library is covered by the LGPL, read LICENSE for details. - * - */ - -/* - * $Id: usb.h 1220 2010-05-04 03:14:56Z roger.brown $ - */ - - -#ifndef __USB_H__ -#define __USB_H__ - -#include -#include - -/* - * 'interface' is defined somewhere in the Windows header files. This macro - * is deleted here to avoid conflicts and compile errors. - */ - -#ifdef interface -#undef interface -#endif - -/* - * PATH_MAX from limits.h can't be used on Windows if the dll and - * import libraries are build/used by different compilers - */ - -#define LIBUSB_PATH_MAX 512 - - -/* - * USB spec information - * - * This is all stuff grabbed from various USB specs and is pretty much - * not subject to change - */ - -/* - * Device and/or Interface Class codes - */ -#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ -#define USB_CLASS_AUDIO 1 -#define USB_CLASS_COMM 2 -#define USB_CLASS_HID 3 -#define USB_CLASS_PRINTER 7 -#define USB_CLASS_MASS_STORAGE 8 -#define USB_CLASS_HUB 9 -#define USB_CLASS_DATA 10 -#define USB_CLASS_VENDOR_SPEC 0xff - -/* - * Descriptor types - */ -#define USB_DT_DEVICE 0x01 -#define USB_DT_CONFIG 0x02 -#define USB_DT_STRING 0x03 -#define USB_DT_INTERFACE 0x04 -#define USB_DT_ENDPOINT 0x05 - -#define USB_DT_HID 0x21 -#define USB_DT_REPORT 0x22 -#define USB_DT_PHYSICAL 0x23 -#define USB_DT_HUB 0x29 - -/* - * Descriptor sizes per descriptor type - */ -#define USB_DT_DEVICE_SIZE 18 -#define USB_DT_CONFIG_SIZE 9 -#define USB_DT_INTERFACE_SIZE 9 -#define USB_DT_ENDPOINT_SIZE 7 -#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ -#define USB_DT_HUB_NONVAR_SIZE 7 - - -/* ensure byte-packed structures */ -#include - - -/* All standard descriptors have these 2 fields in common */ -struct usb_descriptor_header { - unsigned char bLength; - unsigned char bDescriptorType; -}; - -/* String descriptor */ -struct usb_string_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wData[1]; -}; - -/* HID descriptor */ -struct usb_hid_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdHID; - unsigned char bCountryCode; - unsigned char bNumDescriptors; -}; - -/* Endpoint descriptor */ -#define USB_MAXENDPOINTS 32 -struct usb_endpoint_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bEndpointAddress; - unsigned char bmAttributes; - unsigned short wMaxPacketSize; - unsigned char bInterval; - unsigned char bRefresh; - unsigned char bSynchAddress; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK 0x80 - -#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */ -#define USB_ENDPOINT_TYPE_CONTROL 0 -#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 -#define USB_ENDPOINT_TYPE_BULK 2 -#define USB_ENDPOINT_TYPE_INTERRUPT 3 - -/* Interface descriptor */ -#define USB_MAXINTERFACES 32 -struct usb_interface_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bInterfaceNumber; - unsigned char bAlternateSetting; - unsigned char bNumEndpoints; - unsigned char bInterfaceClass; - unsigned char bInterfaceSubClass; - unsigned char bInterfaceProtocol; - unsigned char iInterface; - - struct usb_endpoint_descriptor *endpoint; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -#define USB_MAXALTSETTING 128 /* Hard limit */ - -struct usb_interface { - struct usb_interface_descriptor *altsetting; - - int num_altsetting; -}; - -/* Configuration descriptor information.. */ -#define USB_MAXCONFIG 8 -struct usb_config_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wTotalLength; - unsigned char bNumInterfaces; - unsigned char bConfigurationValue; - unsigned char iConfiguration; - unsigned char bmAttributes; - unsigned char MaxPower; - - struct usb_interface *interface; - - unsigned char *extra; /* Extra descriptors */ - int extralen; -}; - -/* Device descriptor */ -struct usb_device_descriptor { - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdUSB; - unsigned char bDeviceClass; - unsigned char bDeviceSubClass; - unsigned char bDeviceProtocol; - unsigned char bMaxPacketSize0; - unsigned short idVendor; - unsigned short idProduct; - unsigned short bcdDevice; - unsigned char iManufacturer; - unsigned char iProduct; - unsigned char iSerialNumber; - unsigned char bNumConfigurations; -}; - -struct usb_ctrl_setup { - unsigned char bRequestType; - unsigned char bRequest; - unsigned short wValue; - unsigned short wIndex; - unsigned short wLength; -}; - -/* - * Standard requests - */ -#define USB_REQ_GET_STATUS 0x00 -#define USB_REQ_CLEAR_FEATURE 0x01 -/* 0x02 is reserved */ -#define USB_REQ_SET_FEATURE 0x03 -/* 0x04 is reserved */ -#define USB_REQ_SET_ADDRESS 0x05 -#define USB_REQ_GET_DESCRIPTOR 0x06 -#define USB_REQ_SET_DESCRIPTOR 0x07 -#define USB_REQ_GET_CONFIGURATION 0x08 -#define USB_REQ_SET_CONFIGURATION 0x09 -#define USB_REQ_GET_INTERFACE 0x0A -#define USB_REQ_SET_INTERFACE 0x0B -#define USB_REQ_SYNCH_FRAME 0x0C - -#define USB_TYPE_STANDARD (0x00 << 5) -#define USB_TYPE_CLASS (0x01 << 5) -#define USB_TYPE_VENDOR (0x02 << 5) -#define USB_TYPE_RESERVED (0x03 << 5) - -#define USB_RECIP_DEVICE 0x00 -#define USB_RECIP_INTERFACE 0x01 -#define USB_RECIP_ENDPOINT 0x02 -#define USB_RECIP_OTHER 0x03 - -/* - * Various libusb API related stuff - */ - -#define USB_ENDPOINT_IN 0x80 -#define USB_ENDPOINT_OUT 0x00 - -/* Error codes */ -#define USB_ERROR_BEGIN 500000 - -/* - * This is supposed to look weird. This file is generated from autoconf - * and I didn't want to make this too complicated. - */ -#define USB_LE16_TO_CPU(x) - -/* Data types */ -/* struct usb_device; */ -/* struct usb_bus; */ - -struct usb_device { - struct usb_device *next, *prev; - - char filename[LIBUSB_PATH_MAX]; - - struct usb_bus *bus; - - struct usb_device_descriptor descriptor; - struct usb_config_descriptor *config; - - void *dev; /* Darwin support */ - - unsigned char devnum; - - unsigned char num_children; - struct usb_device **children; -}; - -struct usb_bus { - struct usb_bus *next, *prev; - - char dirname[LIBUSB_PATH_MAX]; - - struct usb_device *devices; - unsigned long location; - - struct usb_device *root_dev; -}; - -/* Version information, Windows specific */ -struct usb_version { - struct { - int major; - int minor; - int micro; - int nano; - } dll; - struct { - int major; - int minor; - int micro; - int nano; - } driver; -}; - - -struct usb_dev_handle; -typedef struct usb_dev_handle usb_dev_handle; - -/* Variables */ -#ifndef __USB_C__ -#define usb_busses usb_get_busses() -#endif - - - -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - /* Function prototypes */ - - /* usb.c */ - usb_dev_handle *usb_open(struct usb_device *dev); - int usb_close(usb_dev_handle *dev); - int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, - size_t buflen); - int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, - size_t buflen); - - /* descriptors.c */ - int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep, - unsigned char type, unsigned char index, - void *buf, int size); - int usb_get_descriptor(usb_dev_handle *udev, unsigned char type, - unsigned char index, void *buf, int size); - - /* .c */ - int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout); - int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, - int value, int index, char *bytes, int size, - int timeout); - int usb_set_configuration(usb_dev_handle *dev, int configuration); - int usb_claim_interface(usb_dev_handle *dev, int interface); - int usb_release_interface(usb_dev_handle *dev, int interface); - int usb_set_altinterface(usb_dev_handle *dev, int alternate); - int usb_resetep(usb_dev_handle *dev, unsigned int ep); - int usb_clear_halt(usb_dev_handle *dev, unsigned int ep); - int usb_reset(usb_dev_handle *dev); - - char *usb_strerror(void); - - void usb_init(void); - void usb_set_debug(int level); - int usb_find_busses(void); - int usb_find_devices(void); - struct usb_device *usb_device(usb_dev_handle *dev); - struct usb_bus *usb_get_busses(void); - - - /* Windows specific functions */ - -#define LIBUSB_HAS_INSTALL_SERVICE_NP 1 - int usb_install_service_np(void); - void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1 - int usb_uninstall_service_np(void); - void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_INSTALL_DRIVER_NP 1 - int usb_install_driver_np(const char *inf_file); - void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_TOUCH_INF_FILE_NP 1 - int usb_touch_inf_file_np(const char *inf_file); - void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance, - LPSTR cmd_line, int cmd_show); - -#define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1 - int usb_install_needs_restart_np(void); - - const struct usb_version *usb_get_version(void); - - int usb_isochronous_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep, int pktsize); - int usb_bulk_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep); - int usb_interrupt_setup_async(usb_dev_handle *dev, void **context, - unsigned char ep); - - int usb_submit_async(void *context, char *bytes, int size); - int usb_reap_async(void *context, int timeout); - int usb_reap_async_nocancel(void *context, int timeout); - int usb_cancel_async(void *context); - int usb_free_async(void **context); - - -#ifdef __cplusplus -} -#endif - -#endif /* __USB_H__ */ - diff --git a/windows/usb/src/usbstub.cpp b/windows/usb/src/usbstub.cpp deleted file mode 100644 index f39abb7..0000000 --- a/windows/usb/src/usbstub.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/************************************************************************** - * - * Copyright 2010, Roger Brown - * - * This file is part of Roger Brown's Toolkit. - * - * Roger Brown's Toolkit is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Roger Brown's Toolkit is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Roger Brown's Toolkit. If not, see . - * - */ - -/* - * $Id: usbstub.cpp 1220 2010-05-04 03:14:56Z roger.brown $ - */ - -/* - * this is a stub loader for the LIBUSB0.DLL - */ - -#include - -#define LIBUSB_CALLTYPE __cdecl - -extern "C" -{ - typedef void (LIBUSB_CALLTYPE *voidProc)(void); -} - -class CStubLoader -{ - HMODULE hDll; - CRITICAL_SECTION cs; - const char *name; - - void bomb(DWORD dw) - { - RaiseException(dw,EXCEPTION_NONCONTINUABLE,0,0); - } - -public: - ~CStubLoader() - { -/* if (hDll) - { - FreeLibrary(hDll); - }*/ - - DeleteCriticalSection(&cs); - } - - CStubLoader(const char *n) : name(n) - { - InitializeCriticalSection(&cs); - } - - HMODULE get_dll(void) - { - HMODULE h=NULL; - DWORD dw=0; - - EnterCriticalSection(&cs); - - if (!hDll) - { - hDll=LoadLibrary(name); - if (!hDll) dw=GetLastError(); - } - - h=hDll; - - LeaveCriticalSection(&cs); - - if (!h) - { - bomb(dw); - } - - return h; - } - - voidProc GetProc(const char *name) - { - voidProc p=(voidProc)GetProcAddress(get_dll(),name); - - if (!p) - { - bomb(GetLastError()); - } - - return p; - } -}; - - -static CStubLoader libusb0("LIBUSB0"); - -extern "C" -{ -# define MAP_FN(ret,name,args) \ - typedef ret (LIBUSB_CALLTYPE *pfn_##name##_t)args; \ - static ret LIBUSB_CALLTYPE load_##name args; \ - static pfn_##name##_t pfn_##name=load_##name,test_##name=##name; - -# define LOAD_FN(name) int success=1; __try { pfn_##name=(pfn_##name##_t)libusb0.GetProc(#name); } __except(1) { success=0; } - - MAP_FN(int,usb_reset,(usb_dev_handle *dev)) - MAP_FN(int,usb_claim_interface,(usb_dev_handle *dev,int)) - MAP_FN(int,usb_find_busses,(void)) - MAP_FN(int,usb_find_devices,(void)) - MAP_FN(void,usb_init,(void)) - MAP_FN(int,usb_close,(usb_dev_handle *dev)) - MAP_FN(int,usb_bulk_write,(usb_dev_handle *,int,char *,int,int)); - MAP_FN(int,usb_bulk_read,(usb_dev_handle *,int,char *,int,int)); - MAP_FN(usb_dev_handle *,usb_open,(struct usb_device *)); - MAP_FN(int,usb_set_configuration,(usb_dev_handle *,int)); - MAP_FN(usb_bus *,usb_get_busses,(void)); - MAP_FN(int,usb_release_interface,(usb_dev_handle *,int)); - MAP_FN(int,usb_get_string_simple,(usb_dev_handle *dev, int index, char *buf,size_t buflen)); - - static int LIBUSB_CALLTYPE load_usb_reset(usb_dev_handle *dev) - { - LOAD_FN(usb_reset); - - return success ? usb_reset(dev) : -1; - } - - static int LIBUSB_CALLTYPE load_usb_claim_interface(usb_dev_handle *dev,int interface) - { - LOAD_FN(usb_claim_interface) - - return success ? usb_claim_interface(dev,interface) : -1; - } - - static int LIBUSB_CALLTYPE load_usb_release_interface(usb_dev_handle *dev,int interface) - { - LOAD_FN(usb_release_interface) - - return success ? usb_release_interface(dev,interface) : -1; - } - - static int LIBUSB_CALLTYPE load_usb_close(usb_dev_handle *dev) - { - LOAD_FN(usb_close) - - return success ? usb_close(dev) : -1; - } - - static usb_dev_handle * LIBUSB_CALLTYPE load_usb_open(struct usb_device *dev) - { - LOAD_FN(usb_open) - - return success ? usb_open(dev) : NULL; - } - - static int LIBUSB_CALLTYPE load_usb_find_devices(void) - { - LOAD_FN(usb_find_devices) - - return success ? usb_find_devices() : -1; - } - - static int LIBUSB_CALLTYPE load_usb_find_busses(void) - { - LOAD_FN(usb_find_busses) - - return success ? usb_find_busses() : -1; - } - - static int LIBUSB_CALLTYPE load_usb_set_configuration(usb_dev_handle *dev,int configuration) - { - LOAD_FN(usb_set_configuration) - - return success ? usb_set_configuration(dev,configuration) : -1; - } - - static usb_bus * LIBUSB_CALLTYPE load_usb_get_busses(void) - { - LOAD_FN(usb_get_busses) - - return success ? usb_get_busses() : NULL; - } - - static void LIBUSB_CALLTYPE load_usb_init(void) - { - LOAD_FN(usb_init) - - if (success) usb_init(); - } - - static int LIBUSB_CALLTYPE load_usb_bulk_read(usb_dev_handle *dev,int ep,char *bytes,int size,int timeout) - { - LOAD_FN(usb_bulk_read); - - return success ? usb_bulk_read(dev,ep,bytes,size,timeout) : -1; - } - - static int LIBUSB_CALLTYPE load_usb_bulk_write(usb_dev_handle *dev,int ep,char *bytes,int size,int timeout) - { - LOAD_FN(usb_bulk_write); - - return success ? usb_bulk_write(dev,ep,bytes,size,timeout) : -1; - } - - static int LIBUSB_CALLTYPE load_usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, - size_t buflen) - { - LOAD_FN(usb_get_string_simple); - - return success ? usb_get_string_simple(dev,index,buf,buflen) : -1; - } -} - -int LIBUSB_CALLTYPE usb_claim_interface(usb_dev_handle *dev, int interface) -{ - return pfn_usb_claim_interface(dev,interface); -} - -int LIBUSB_CALLTYPE usb_reset(usb_dev_handle *dev) -{ - return pfn_usb_reset(dev); -} - -int LIBUSB_CALLTYPE usb_find_busses(void) -{ - return pfn_usb_find_busses(); -} - -int LIBUSB_CALLTYPE usb_find_devices(void) -{ - return pfn_usb_find_devices(); -} - -void LIBUSB_CALLTYPE usb_init(void) -{ - pfn_usb_init(); -} - -int LIBUSB_CALLTYPE usb_close(usb_dev_handle *dev) -{ - return pfn_usb_close(dev); -} - -usb_dev_handle * LIBUSB_CALLTYPE usb_open(struct usb_device *dev) -{ - return pfn_usb_open(dev); -} - -int LIBUSB_CALLTYPE usb_set_configuration(usb_dev_handle *dev, int configuration) -{ - return pfn_usb_set_configuration(dev,configuration); -} - -struct usb_bus * LIBUSB_CALLTYPE usb_get_busses(void) -{ - return pfn_usb_get_busses(); -} - -int LIBUSB_CALLTYPE usb_release_interface(usb_dev_handle *dev, int interface) -{ - return pfn_usb_release_interface(dev,interface); -} - -int LIBUSB_CALLTYPE usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout) -{ - return pfn_usb_bulk_write(dev,ep,bytes,size,timeout); -} - -int LIBUSB_CALLTYPE usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, - int timeout) -{ - return pfn_usb_bulk_read(dev,ep,bytes,size,timeout); -} - -int LIBUSB_CALLTYPE usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, - size_t buflen) -{ - return pfn_usb_get_string_simple(dev,index,buf,buflen); -} - - - - - From 5a401f42a3856bfefdfbfcc5e66cb7ac8774681d Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 09:27:35 -0500 Subject: [PATCH 2/7] Windows: Remove unused Makefile Removing in favor of standardizing on CMake usage --- windows/Makefile | 267 ----------------------------------------------- 1 file changed, 267 deletions(-) delete mode 100644 windows/Makefile diff --git a/windows/Makefile b/windows/Makefile deleted file mode 100644 index 3f0d484..0000000 --- a/windows/Makefile +++ /dev/null @@ -1,267 +0,0 @@ -COMMONOPTS=/W3 /MD /DNDEBUG /DWIN32 /D_WIN32_DCOM /D_WIN32_WINNT=0x500 /D_CRT_SECURE_NO_DEPRECATE /Zp8 /DNTDDI_VERSION=0x05000400 - -DLLNAME=nfc - -NFCOPTS= /I..\include \ - /I..\contrib\win32 \ - /I..\contrib\win32\stdint \ - /Iusb\include \ - /I..\libnfc \ - /I..\libnfc\buses \ - /DDRIVER_PN531_USB_ENABLED \ - /DDRIVER_PN533_USB_ENABLED \ - /DDRIVER_ACR122_ENABLED \ - /DDRIVER_ARYGON_ENABLED \ - /DDRIVER_PN532_UART_ENABLED - -NFCLIBOPTS=/Dnfc_EXPORTS /DPACKAGE_VERSION=\"1.4.0\" - -CFLAGS=$(COMMONOPTS) /WX $(NFCOPTS) -CXXFLAGS=$(COMMONOPTS) /EHa $(NFCOPTS) -CC=cl.exe /nologo -CXX=$(CC) -CC_OUT_EXE=/Fe -CC_OUT_DLL=/LD /Fe -CC_OUT_OBJ=/Fo - -LIBNFC_DLL=bin\$(DLLNAME).dll -NFC_LIST=bin\nfc-list.exe -NFC_ANTICOL=bin\nfc-anticol.exe -NFC_EMULATE=bin\nfc-emulate.exe -NFC_MFCLASSIC=bin\nfc-mfclassic.exe -NFC_MFULTRALIGHT=bin\nfc-mfultralight.exe -NFC_POLL=bin\nfc-poll.exe -NFC_RELAY=bin\nfc-relay.exe -NFCIP_INITIATOR=bin\nfcip-initiator.exe -NFCIP_TARGET=bin\nfcip-target.exe - -LIBNFC_OBJ= obj\nfc.obj \ - obj\pn531_usb.obj \ - obj\pn53x_usb.obj \ - obj\usbstub.obj \ - obj\uart.obj \ - obj\pn53x.obj \ - obj\mirror-subr.obj \ - obj\iso14443-subr.obj \ - obj\acr122.obj \ - obj\arygon.obj \ - obj\pn533_usb.obj \ - obj\pn532_uart.obj - -NFC_LIST_OBJ=obj\nfc-list.obj \ - obj\nfc-utils.obj - -NFC_POLL_OBJ=obj\nfc-poll.obj \ - obj\nfc-utils.obj - -NFC_RELAY_OBJ=obj\nfc-relay.obj \ - obj\nfc-utils.obj - -NFC_ANTICOL_OBJ=obj\nfc-anticol.obj \ - obj\nfc-utils.obj - -NFC_EMULATE_OBJ=obj\nfc-emulate.obj \ - obj\nfc-utils.obj - -NFCIP_INITIATOR_OBJ=obj\nfcip-initiator.obj \ - obj\nfc-utils.obj - -NFCIP_TARGET_OBJ=obj\nfcip-target.obj \ - obj\nfc-utils.obj - -NFC_MFCLASSIC_OBJ=obj\nfc-mfclassic.obj \ - obj\mifare.obj \ - obj\nfc-utils.obj - -NFC_MFULTRALIGHT_OBJ=obj\nfc-mfultralight.obj \ - obj\mifare.obj \ - obj\nfc-utils.obj - -all: obj bin $(LIBNFC_DLL) $(NFC_LIST) $(NFC_POLL) $(NFC_RELAY) $(NFCIP_INITIATOR) $(NFCIP_TARGET) $(NFC_ANTICOL) $(NFC_EMULATE) $(NFC_MFCLASSIC) $(NFC_MFULTRALIGHT) - -clean: - for %d in ( $(LIBNFC_DLL) $(NFC_LIST) $(NFC_POLL) $(NFC_RELAY) ) do if exist %d del %d - for %d in ( $(LIBNFC_OBJ) $(NFC_LIST_OBJ) ) do if exist %d del %d - for %d in ( obj\nfc-list.res obj\$(DLLNAME).res ) do if exist %d del %d - for %d in ( bin\$(DLLNAME).exp bin\$(DLLNAME).lib obj\$(DLLNAME).lib ) do if exist %d del %d - for %d in ( $(NFC_RELAY_OBJ) ) do if exist %d del %d - for %d in ( $(NFC_POLL_OBJ) obj\nfc-poll.res ) do if exist %d del %d - for %d in ( $(NFC_RELAY_OBJ) obj\nfc-relay.res ) do if exist %d del %d - for %d in ( $(NFCIP_INITIATOR) $(NFCIP_INITIATOR_OBJ) obj\nfcip-initiator.res ) do if exist %d del %d - for %d in ( $(NFCIP_TARGET) $(NFCIP_TARGET_OBJ) obj\nfcip-target.res ) do if exist %d del %d - for %d in ( $(NFC_MFCLASSIC) $(NFC_MFCLASSIC_OBJ) obj\nfc-mfclassic.res ) do if exist %d del %d - for %d in ( $(NFC_MFULTRALIGHT) $(NFC_MFULTRALIGHT_OBJ) obj\nfc-mfultralight.res ) do if exist %d del %d - for %d in ( $(NFC_EMULATE) $(NFC_EMULATE_OBJ) obj\nfc-emulate.res ) do if exist %d del %d - for %d in ( $(NFC_ANTICOL) $(NFC_ANTICOL_OBJ) obj\nfc-anticol.res ) do if exist %d del %d - if exist obj rmdir obj - if exist bin rmdir bin - if exist mm\out rmdir /s /q mm\out - -obj bin: - mkdir $@ - -obj\$(DLLNAME).lib: $(LIBNFC_OBJ) - if exist $@ del $@ - lib /out:$@ $(LIBNFC_OBJ) - -$(LIBNFC_DLL): obj\$(DLLNAME).lib win32\$(DLLNAME).def obj\$(DLLNAME).res - $(CC) $(CC_OUT_DLL)$@ \ - obj\$(DLLNAME).lib \ - obj\$(DLLNAME).res \ - /link \ - /DEF:win32\$(DLLNAME).def \ - winscard.lib - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#2 - if exist $@.manifest del $@.manifest - -$(NFC_LIST): $(NFC_LIST_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-list.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_LIST_OBJ) bin\$(DLLNAME).lib obj\nfc-list.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_EMULATE): $(NFC_EMULATE_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-emulate.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_EMULATE_OBJ) bin\$(DLLNAME).lib obj\nfc-emulate.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_POLL): $(NFC_POLL_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-poll.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_POLL_OBJ) bin\$(DLLNAME).lib obj\nfc-poll.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_ANTICOL): $(NFC_ANTICOL_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-anticol.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_ANTICOL_OBJ) bin\$(DLLNAME).lib obj\nfc-anticol.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_RELAY): $(NFC_RELAY_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-relay.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_RELAY_OBJ) bin\$(DLLNAME).lib obj\nfc-relay.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFCIP_INITIATOR): $(NFCIP_INITIATOR_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfcip-initiator.res - $(CC) $(CC_OUT_EXE)$@ $(NFCIP_INITIATOR_OBJ) bin\$(DLLNAME).lib obj\nfcip-initiator.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFCIP_TARGET): $(NFCIP_TARGET_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfcip-target.res - $(CC) $(CC_OUT_EXE)$@ $(NFCIP_TARGET_OBJ) bin\$(DLLNAME).lib obj\nfcip-target.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_MFCLASSIC): $(NFC_MFCLASSIC_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-mfclassic.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_MFCLASSIC_OBJ) bin\$(DLLNAME).lib obj\nfc-mfclassic.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -$(NFC_MFULTRALIGHT): $(NFC_MFULTRALIGHT_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib obj\nfc-mfultralight.res - $(CC) $(CC_OUT_EXE)$@ $(NFC_MFULTRALIGHT_OBJ) bin\$(DLLNAME).lib obj\nfc-mfultralight.res - if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1 - if exist $@.manifest del $@.manifest - -obj\mifare.obj: ..\examples\mifare.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\mifare.c - -obj\nfc-relay.obj: ..\examples\nfc-relay.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-relay.c - -obj\nfc-mfclassic.obj: ..\examples\nfc-mfclassic.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-mfclassic.c - -obj\nfc-mfultralight.obj: ..\examples\nfc-mfultralight.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-mfultralight.c - -obj\nfc-emulate.obj: ..\examples\nfc-emulate.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-emulate.c - -obj\nfcip-initiator.obj: ..\examples\nfcip-initiator.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfcip-initiator.c - -obj\nfcip-target.obj: ..\examples\nfcip-target.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfcip-target.c - -obj\nfc-poll.obj: ..\examples\nfc-poll.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-poll.c - -obj\nfc-anticol.obj: ..\examples\nfc-anticol.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-anticol.c - -obj\nfc-list.obj: ..\examples\nfc-list.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-list.c - -obj\nfc-utils.obj: ..\examples\nfc-utils.c - $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-utils.c - -obj\nfc.obj: ..\libnfc\nfc.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\nfc.c - -obj\iso14443-subr.obj: ..\libnfc\iso14443-subr.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\iso14443-subr.c - -obj\pn531_usb.obj: ..\libnfc\drivers\pn531_usb.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\pn531_usb.c - -obj\pn533_usb.obj: ..\libnfc\drivers\pn533_usb.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\pn533_usb.c - -obj\pn532_uart.obj: ..\libnfc\drivers\pn532_uart.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\pn532_uart.c - -obj\pn53x_usb.obj: ..\libnfc\drivers\pn53x_usb.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\pn53x_usb.c - -obj\acr122.obj: ..\libnfc\drivers\acr122.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\acr122.c - -obj\arygon.obj: ..\libnfc\drivers\arygon.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\drivers\arygon.c - -obj\pn53x.obj: ..\libnfc\chips\pn53x.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\chips\pn53x.c - -obj\uart.obj: ..\libnfc\buses\uart.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\buses\uart.c - -obj\usbstub.obj: usb\src\usbstub.cpp - $(CXX) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CXXFLAGS) usb\src\usbstub.cpp - -obj\mirror-subr.obj: ..\libnfc\mirror-subr.c - $(CC) /c $(CC_OUT_OBJ)$@ $(NFCLIBOPTS) $(CFLAGS) ..\libnfc\mirror-subr.c - -obj\$(DLLNAME).res: win32\$(DLLNAME).rc - rc /r $(RCFLAGS) /fo$@ win32\$(DLLNAME).rc - -obj\nfc-list.res: win32\nfc-list.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-list.rc - -obj\nfc-poll.res: win32\nfc-poll.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-poll.rc - -obj\nfc-relay.res: win32\nfc-relay.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-relay.rc - -obj\nfcip-initiator.res: win32\nfcip-initiator.rc - rc /r $(RCFLAGS) /fo$@ win32\nfcip-initiator.rc - -obj\nfcip-target.res: win32\nfcip-target.rc - rc /r $(RCFLAGS) /fo$@ win32\nfcip-target.rc - -obj\nfc-anticol.res: win32\nfc-anticol.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-anticol.rc - -obj\nfc-emulate.res: win32\nfc-emulate.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-emulate.rc - -obj\nfc-mfclassic.res: win32\nfc-mfclassic.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-mfclassic.rc - -obj\nfc-mfultralight.res: win32\nfc-mfultralight.rc - rc /r $(RCFLAGS) /fo$@ win32\nfc-mfultralight.rc - -install: all - cd mm - call make.bat - cd .. - - - From a0e6422c5fb45924b55aab878c370b7114e45012 Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 09:28:34 -0500 Subject: [PATCH 3/7] Windows: Remove old msi package creation - Utilized only by recently removed Makefile - Unused --- windows/mm/libnfc.mm | 54 ------------------------- windows/mm/libnfc.ver | 13 ------ windows/mm/make.bat | 15 ------- windows/mm/me.mmh | 88 ----------------------------------------- windows/mm/nfcleft.bmp | Bin 460566 -> 0 bytes 5 files changed, 170 deletions(-) delete mode 100644 windows/mm/libnfc.mm delete mode 100644 windows/mm/libnfc.ver delete mode 100644 windows/mm/make.bat delete mode 100644 windows/mm/me.mmh delete mode 100644 windows/mm/nfcleft.bmp diff --git a/windows/mm/libnfc.mm b/windows/mm/libnfc.mm deleted file mode 100644 index abd84ab..0000000 --- a/windows/mm/libnfc.mm +++ /dev/null @@ -1,54 +0,0 @@ -;---------------------------------------------------------------------------- -; MODULE NAME: LIBNFC.MM -; -; $Author: USER "rogerb" $ -; $Revision: 1267 $ -; $Date: 02 Jun 2006 17:10:46 $ -; $Logfile: C:/DBAREIS/Projects.PVCS/Win32/MakeMsi/TryMe.mm.pvcs $ -; -; DESCRIPTION -; ~~~~~~~~~~~ -; This is a simple sample/test MSI. Takes about 30 seconds to build and -; validate on my AMD 3200. -; -; Any line within this file that begins with ";" can be ignored as its -; only a comment so there are only 3 important lines in this file: -; -; 1. #include "ME.MMH" -; 2. <$DirectoryTree Key="INSTALLDIR" ... -; 3. <$Files "TryMe.*" DestDir="INSTALLDIR"> -;---------------------------------------------------------------------------- - -; #define? COMPANY_PRODUCT_ICON ..\win32\libnfc.ico ;; override from company.mmh -#define? UISAMPLE_DIALOG_FILE_dlgbmp nfcleft.bmp ;; override uisample.mmh -#define? UISAMPLE_BLINE_TEXT www.nfc-tools.org -#define? COMPANY_WANT_TO_INSTALL_DOCUMENTATION N - -;--- Include MAKEMSI support (with my customisations and MSI branding) ------ -#define VER_FILENAME.VER libnfc.Ver ;;I only want one VER file for all samples! (this line not actually required in "tryme.mm") -#include "ME.MMH" - -;--- Want to debug (not common) --------------------------------------------- -;#debug on -;#Option DebugLevel=^NONE, +OpSys^ - - -;--- Define default location where file should install and add files -------- -<$DirectoryTree Key="INSTALLDIR" Dir="[ProgramFilesFolder]libnfc-1.3.4" CHANGE="\" PrimaryFolder="Y"> -<$DirectoryTree Key="INSTALLDIR2" Dir="[INSTALLDIR]bin" > -<$DirectoryTree Key="INSTALLDIR3" Dir="[INSTALLDIR]lib" > -<$DirectoryTree Key="INSTALLDIR4" Dir="[INSTALLDIR]include" > -<$DirectoryTree Key="INSTALLDIR5" Dir="[INSTALLDIR4]nfc" > -<$Files "..\bin\nfc-list.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc-poll.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc-relay.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc-emulate.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc-mfultralight.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc-mfclassic.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfcip-initiator.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfcip-target.exe" DestDir="INSTALLDIR2" > -<$Files "..\bin\nfc.dll" DestDir="SystemFolder" > -<$Files "..\bin\nfc.lib" DestDir="INSTALLDIR3" > -<$Files "..\..\include\nfc\nfc.h" DestDir="INSTALLDIR5" > -<$Files "..\..\include\nfc\nfc-messages.h" DestDir="INSTALLDIR5" > -<$Files "..\..\include\nfc\nfc-types.h" DestDir="INSTALLDIR5" > diff --git a/windows/mm/libnfc.ver b/windows/mm/libnfc.ver deleted file mode 100644 index 1e21c3a..0000000 --- a/windows/mm/libnfc.ver +++ /dev/null @@ -1,13 +0,0 @@ -;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -; ProductName = libnfc -; DESCRIPTION = Public platform independent Near Field Communication (NFC) library -; Installed = WINDOWS_ALL -; Guid.UpgradeCode = {5880D072-659D-4038-894D-C85BF514B95A} -; MsiName = libnfc-1.4.0 -;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -;############################################################################ -VERSION : 1.4.0.0 -DATE : 26 Oct 2010 -CHANGES : Example Packaging - diff --git a/windows/mm/make.bat b/windows/mm/make.bat deleted file mode 100644 index 56d3b93..0000000 --- a/windows/mm/make.bat +++ /dev/null @@ -1,15 +0,0 @@ -set OLDPATH=%PATH% -set PATH=%PATH%;"c:\program files\makemsi" -rmdir /s /q out -call "%ProgramFiles%\MakeMSI\mm.cmd" "libnfc.mm" -if errorlevel 1 goto failed - -:success -echo success -goto doneall - -:failed -echo failed - -:doneall -set PATH=%OLDPATH% diff --git a/windows/mm/me.mmh b/windows/mm/me.mmh deleted file mode 100644 index ea61d4a..0000000 --- a/windows/mm/me.mmh +++ /dev/null @@ -1,88 +0,0 @@ -; Copyright 2009, Snapper Services Limited, New Zealand -; All rights reserved -; $Id: me.mmh 1224 2010-05-04 04:14:44Z roger.brown $ - -;---------------------------------------------------------------------------- -; -; MODULE NAME: ME.MMH -; -; $Author: USER "Dennis" $ -; $Revision: 1224 $ -; $Date: 27 Sep 2007 17:38:34 $ -; $Logfile: C:/DBAREIS/Projects.PVCS/Win32/MakeMsi/ME.mmh.pvcs $ -; -; Very simplistic example of a MAKEMSI customisation/branding file, see -; "DENNIS.MMH" for a more complex variation (please don't use it though...). -;---------------------------------------------------------------------------- - - - -;---------------------------------------------------------------------------- -;--- Set up some options specific to my requirements ------------------------ -;---------------------------------------------------------------------------- -#define? DEPT_ARP_URL_PUBLISHER http://www.MyUrl.com/See/ME.MMH/ -#define? DEPT_ARP_URL_TECHNICAL_SUPPORT http://www.MyUrl.com/See/ME.MMH/Support -#define? DEPT_NAME no department -#define? DEPT_ADDRESS New Zealand -#define? COMPANY_CONTACT_NAME <$DEPT_NAME> -#define? COMPANY_CONTACT_NAME_PHONE ;;No phone -#define? COMPANY_SUMMARY_SCHEMA 110 ;;Minimum v1.1 Installer - - - -;---------------------------------------------------------------------------- -;--- Override/set some standard defaults ------------------------------------ -;---------------------------------------------------------------------------- -#define? DBG_ALL Y ;;Add MAKEMSI debugging to "console file" -#define? DBG_SAY_LOCATION call Say2Logs <$DBG_INDENT> || ' ' || time() || ' ' ;;Adding time makes it a bit slower but useful for debugging slow builds... -#define? COMMONFRAMEWORK_ZIP_SOURCE_FOR_BACKUP N ;;No "insurance" until I bother to install "info zip"... -#define? DEFAULT_SERVICE_CONTROL_UNINSTALL_EVENTS ;;I think this option is safer than the MAKEMSI default -#define? DEFAULT_SERVICE_CONTROL_INSTALL_EVENTS ;;I think this option is better -#define? DEFAULT_FILE_WANT_FILEHASH Y ;;My box can generate MD5 hashes! -#define? COMPANY_PREPROCESS_LICENCE_FILE Y ;;Default is to preprocess licence files -#define? MAKEMSI_HTML_EXTENSION hta ;;Default extension (HTML Application - gets around WINXP SP2 issue) -#define? UISAMPLE_LEFTSIDE_TEXT_FONT_NAME Tahoma -#define? UISAMPLE_LEFTSIDE_TEXT_FONT_SIZE 8 -#define? UISAMPLE_LEFTSIDE_TEXT_FONT_COLOR &H000000 ;;Black -#( - #define? UISAMPLE_LEFTSIDE_TEXT -#) -#( - #define? @VALIDATE_TEXT_FOR_MISSINGDATA ;;Example only as now duplicates exact text as new default value - This column is not mentioned in the _Validation table. - Either add the validation data or use the "@validate" parameter - on the "row" command (or alter its default). -#) - - - -;---------------------------------------------------------------------------- -;--- Include MAKEMSI support ------------------------------------------------ -;---------------------------------------------------------------------------- -#include "DEPT.MMH" - - -;---------------------------------------------------------------------------- -;--- I want to compress any DLL based custom actions generated by MAKEMSI --- -;---------------------------------------------------------------------------- -<$GetFullBuildTimeFileName RcVar="@@FullUpxExeName" Macro="DENNIS_UPX.EXE" File="upx.exe" MustExist="N"> -#if [@@FullUpxExeName = ''] - ;--- If UPX.EXE doesn't exist report an error --------------------------- - ;#error "DLL not being compressed (UPX.EXE not found)" ;;This is also a sample, can't expect users to have "UPX.EXE"... - #info "DLL custom action code will not be compressed (UPX.EXE not found)" -#else - ;--- "UPX.EXE" was found ------------------------------------------------ - #( - ;--- Define the macro that MAKEMSI will use as required ------------- - #define+ DLLCA-C_COMPRESS_DLL_COMMAND_LINE ;;Need to OVERRIDE value (we couldn't do it earler or "GetFullBuildTimeFileName" wouldn't exist!) - - ;--- I expect "upx.exe" to be in the "PATH" environment variable ---- - "" ;;Full name of UPX.EXE (get from "http://upx.sourceforge.net/") - - ;--- I want highest compression ------------------------------------- - --best - - ;--- Backup the DLL as a debugging aid... --------------------------- - -k - #) -#endif diff --git a/windows/mm/nfcleft.bmp b/windows/mm/nfcleft.bmp deleted file mode 100644 index 038bb9a5f172dc9b6867e848c1c0a112018f8ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460566 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 From cb70044510016ea67491d3bf43d8915475bb2b96 Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 10:15:01 -0500 Subject: [PATCH 4/7] Windows: Remove rc files in favor of generated rcs --- windows/win32/nfc-anticol.rc | 35 ------------------------------- windows/win32/nfc-emulate.rc | 35 ------------------------------- windows/win32/nfc-list.rc | 35 ------------------------------- windows/win32/nfc-mfclassic.rc | 35 ------------------------------- windows/win32/nfc-mfultralight.rc | 35 ------------------------------- windows/win32/nfc-poll.rc | 35 ------------------------------- windows/win32/nfc-relay.rc | 35 ------------------------------- windows/win32/nfc.rc | 28 ------------------------- windows/win32/nfcip-initiator.rc | 35 ------------------------------- windows/win32/nfcip-target.rc | 35 ------------------------------- 10 files changed, 343 deletions(-) delete mode 100644 windows/win32/nfc-anticol.rc delete mode 100644 windows/win32/nfc-emulate.rc delete mode 100644 windows/win32/nfc-list.rc delete mode 100644 windows/win32/nfc-mfclassic.rc delete mode 100644 windows/win32/nfc-mfultralight.rc delete mode 100644 windows/win32/nfc-poll.rc delete mode 100644 windows/win32/nfc-relay.rc delete mode 100644 windows/win32/nfc.rc delete mode 100644 windows/win32/nfcip-initiator.rc delete mode 100644 windows/win32/nfcip-target.rc diff --git a/windows/win32/nfc-anticol.rc b/windows/win32/nfc-anticol.rc deleted file mode 100644 index 384e031..0000000 --- a/windows/win32/nfc-anticol.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-anticol\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-ANTICOL.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-emulate.rc b/windows/win32/nfc-emulate.rc deleted file mode 100644 index bde47b9..0000000 --- a/windows/win32/nfc-emulate.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-emulate\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-EMULATE.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-list.rc b/windows/win32/nfc-list.rc deleted file mode 100644 index e57202f..0000000 --- a/windows/win32/nfc-list.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-list\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-LIST.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-mfclassic.rc b/windows/win32/nfc-mfclassic.rc deleted file mode 100644 index 6dcb22a..0000000 --- a/windows/win32/nfc-mfclassic.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-mfclassic\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-MFCLASSIC.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-mfultralight.rc b/windows/win32/nfc-mfultralight.rc deleted file mode 100644 index 209e572..0000000 --- a/windows/win32/nfc-mfultralight.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-mfultralight\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-MFULTRALIGHT.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-poll.rc b/windows/win32/nfc-poll.rc deleted file mode 100644 index 161a23a..0000000 --- a/windows/win32/nfc-poll.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-poll\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-POLL.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc-relay.rc b/windows/win32/nfc-relay.rc deleted file mode 100644 index 73ecc7d..0000000 --- a/windows/win32/nfc-relay.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfc-relay\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-RELAY.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfc.rc b/windows/win32/nfc.rc deleted file mode 100644 index 757ff5c..0000000 --- a/windows/win32/nfc.rc +++ /dev/null @@ -1,28 +0,0 @@ -#include - -1 VERSIONINFO - PRODUCTVERSION 1,3,9,0 - FILEOS VOS__WINDOWS32 - FILEVERSION 1,3,9,0 - FILETYPE VFT_DLL -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904E4" - BEGIN - VALUE "CompanyName","nfc.org\000\000" - VALUE "LegalCopyright","Copyright (C) 2009, Roel Verdult\000\000" - VALUE "ProductName","nfc\000\000" - VALUE "ProductVersion","1.4.0.0\000\000" - VALUE "Comments","Demonstration Win32 packaging\000\000" - VALUE "FileDescription","Near Field Communication Library\000\000" - VALUE "FileVersion","1.4.0.0\000\000" - VALUE "InternalName","nfc\000\000" - VALUE "OriginalFilename","NFC.DLL\000\000" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfcip-initiator.rc b/windows/win32/nfcip-initiator.rc deleted file mode 100644 index 8c14075..0000000 --- a/windows/win32/nfcip-initiator.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfcip-initiator\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFC-INITIATOR.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END diff --git a/windows/win32/nfcip-target.rc b/windows/win32/nfcip-target.rc deleted file mode 100644 index 0e55b44..0000000 --- a/windows/win32/nfcip-target.rc +++ /dev/null @@ -1,35 +0,0 @@ -#include "windows.h" - -1 VERSIONINFO - FILEVERSION 1,3,9,0 - PRODUCTVERSION 1,3,9,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS VS_FF_PRERELEASE -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904e4" - BEGIN - VALUE "Comments", "example from libnfc\0" - VALUE "CompanyName", "libnfc.org\0" - VALUE "FileDescription", "NFC test application\0" - VALUE "FileVersion", "1.4.0.0\0" - VALUE "InternalName", "nfcip-target\0" - VALUE "LegalCopyright", "Copyright (C) 2009, Roel Verdult\0" - VALUE "OriginalFilename", "NFCIP-TARGET.EXE\0" - VALUE "ProductName", "libnfc\0" - VALUE "ProductVersion", "1.4.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1252 - END -END From 726f729aba1f093b58e12c14ec11f2235b511e82 Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 10:15:46 -0500 Subject: [PATCH 5/7] Windows: Update def file for consideration of proper lib file generation - Aligned to latest nfc.h for function name exports --- windows/win32/nfc.def | 72 +++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/windows/win32/nfc.def b/windows/win32/nfc.def index f18b0c6..efee475 100644 --- a/windows/win32/nfc.def +++ b/windows/win32/nfc.def @@ -1,28 +1,48 @@ -LIBRARY NFC -VERSION 1.3.9 +LIBRARY libnfc +VERSION 1.7 EXPORTS - nfc_list_devices - nfc_connect - nfc_disconnect - nfc_configure - nfc_initiator_init - nfc_initiator_select_passive_target - nfc_initiator_list_passive_targets - nfc_initiator_select_dep_target - nfc_initiator_deselect_target - nfc_initiator_poll_targets - nfc_initiator_transceive_bits - nfc_initiator_transceive_bytes - nfc_target_init - nfc_target_receive_bits - nfc_target_receive_bytes - nfc_target_send_bits - nfc_target_send_bytes - nfc_device_name - iso14443a_crc - append_iso14443a_crc - nfc_version - nfc_perror - nfc_strerror - nfc_strerror_r + nfc_init + nfc_exit + nfc_open + nfc_close + nfc_abbort_command + nfc_list_devices + nfc_idle + nfc_initiator_init + nfc_initiator_init_secure_element + nfc_initiator_select_passive_target + nfc_initiator_list_passive_targets + nfc_initiator_poll_target + nfc_initiator_select_dep_target + nfc_initiator_poll_dep_target + nfc_initiator_deselect_target + nfc_initiator_poll_targets + nfc_initiator_transceive_bytes + nfc_initiator_transceive_bits + nfc_initiator_transceive_bytes_timed + nfc_initiator_transceive_bits_timed + nfc_initiator_target_is_present + nfc_target_init + nfc_target_send_bytes + nfc_target_receive_bytes + nfc_target_send_bits + nfc_target_receive_bits + nfc_strerror + nfc_strerror_r + nfc_perror + nfc_device_get_last_error + nfc_device_get_name + nfc_device_get_connstring + nfc_device_get_supported_modulation + nfc_device_get_supported_baud_rate + nfc_device_set_property_int + nfc_device_set_property_bool + iso14443a_crc + iso14443a_crc_append + iso14443a_locate_historical_bytes + nfc_version + nfc_device_get_information_about + str_nfc_modulation_type + str_nfc_baud_rate + str_nfc_target From eddc46fd78e1347755af1aa543488c024d7b8a4d Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 10:17:20 -0500 Subject: [PATCH 6/7] Windows: Update readme for requirement for PCRE --- README-Windows.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README-Windows.txt b/README-Windows.txt index 3a322c0..3f07cfa 100644 --- a/README-Windows.txt +++ b/README-Windows.txt @@ -11,6 +11,7 @@ Requirements - MinGW-w64 compiler toolchain [1] - LibUsb-Win32 1.2.5.0 (or greater) [2] - CMake 2.8 [3] +- PCRE for Windows [4] This was tested on Windows 7 64 bit, but should work on Windows Vista and Windows XP and 32 bit as well. @@ -57,3 +58,4 @@ References http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm64-gcc-4.5.1.exe/download [2] http://sourceforge.net/projects/libusb-win32/files/ [3] http://www.cmake.org +[4] http://gnuwin32.sourceforge.net/packages/pcre.htm \ No newline at end of file From 54e0bdb62f1537cddaa701deee6391284f5101e2 Mon Sep 17 00:00:00 2001 From: Alex Lian Date: Fri, 1 Feb 2013 10:19:02 -0500 Subject: [PATCH 7/7] Windows: Build updates - Generate rc files from version.rc.in + CMake variable information in CMakeLists files - Add step to generate .lib file for windows developers - Re-structure tool flag usage, apparently ADD_DEFINTIONS adds them to _ALL_ tools. This is bad for rc files with the windres tool. Needs other platform testing, as the flags have changed to fix Windows rc file generation. --- CMakeLists.txt | 34 +++++++++++++++++++++++++++++----- examples/CMakeLists.txt | 13 ++++++++++++- libnfc/CMakeLists.txt | 17 ++++++++++++----- utils/CMakeLists.txt | 10 +++++++++- windows/version.rc.in | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 windows/version.rc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index fb668b4..6e4ffa7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,12 @@ SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") # Options SET(LIBNFC_DEBUG_OUTPUT OFF CACHE BOOL "Debug output of communication with the NFC chip") IF(LIBNFC_DEBUG_OUTPUT) - ADD_DEFINITIONS(-DDEBUG -DLOG -g3) + ADD_DEFINITIONS(-DDEBUG -DLOG) + SET(CMAKE_C_FLAGS "-g3 ${CMAKE_C_FLAGS}") + SET(WIN32_MODE "debug") + SET(CMAKE_RC_FLAGS "-D_DEBUG ${CMAKE_RC_FLAGS}") +ELSE(LIBNFC_DEBUG_OUTPUT) + SET(WIN32_MODE "release") ENDIF(LIBNFC_DEBUG_OUTPUT) # Doxygen @@ -58,7 +63,7 @@ ENDIF(NOT DEFINED SHARE_INSTALL_PREFIX) # Additonnal GCC flags IF(CMAKE_COMPILER_IS_GNUCC) # Make sure we will not miss some warnings ;) - ADD_DEFINITIONS(-Wall -pedantic -std=c99) + SET(CMAKE_C_FLAGS "-Wall -pedantic -std=c99 ${CMAKE_C_FLAGS}") ENDIF(CMAKE_COMPILER_IS_GNUCC) # Workarounds for libusb in C99 @@ -66,9 +71,11 @@ ADD_DEFINITIONS(-Du_int8_t=uint8_t -Du_int16_t=uint16_t) IF(MINGW) # force MinGW-w64 in 32bit mode - ADD_DEFINITIONS(-m32) - SET(CMAKE_SHARED_LINKER_FLAGS -m32) - SET(CMAKE_EXE_LINKER_FLAGS -m32) + SET(CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}") + SET(CMAKE_MODULE_LINKER_FLAGS "-m32 --enable-stdcall-fixup ${CMAKE_SHARED_LINKER_FLAGS}") + SET(CMAKE_SHARED_LINKER_FLAGS "-m32 --enable-stdcall-fixup ${CMAKE_SHARED_LINKER_FLAGS}") + SET(CMAKE_EXE_LINKER_FLAGS "-m32 --enable-stdcall-fixup ${CMAKE_EXE_LINKER_FLAGS}") + SET(CMAKE_RC_FLAGS "--target=pe-i386 --output-format=coff ${CMAKE_RC_FLAGS}") ENDIF(MINGW) IF(NOT WIN32) @@ -107,6 +114,23 @@ IF(LIBUSB_INCLUDE_DIRS) LINK_DIRECTORIES(${LIBUSB_LIBRARY_DIRS}) ENDIF(LIBUSB_INCLUDE_DIRS) +# version.rc for Windows +IF(WIN32) + # Date for filling in rc file information + MACRO (GET_CURRENT_YEAR RESULT) + EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT}) + STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}}) + ENDMACRO (GET_CURRENT_YEAR) + GET_CURRENT_YEAR(CURRENT_YEAR) + MESSAGE("Year for copyright is " ${CURRENT_YEAR}) + + SET(RC_COMMENT "${PACKAGE_NAME} library") + SET(RC_INTERNAL_NAME "${PACKAGE_NAME} ${WIN32_MODE}") + SET(RC_ORIGINAL_NAME ${PACKAGE_NAME}.dll) + SET(RC_FILE_TYPE VFT_DLL) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/windows/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/windows/libnfc.rc @ONLY) +ENDIF(WIN32) + ADD_SUBDIRECTORY(libnfc) ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(utils) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 60eb8e1..1153f2d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -14,7 +14,18 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../libnfc) # Examples FOREACH(source ${EXAMPLES-SOURCES}) - ADD_EXECUTABLE(${source} ${source}.c) + SET (TARGETS ${source}.c) + + IF(WIN32) + SET(RC_COMMENT "${PACKAGE_NAME} example") + SET(RC_INTERNAL_NAME ${source}) + SET(RC_ORIGINAL_NAME ${source}.exe) + SET(RC_FILE_TYPE VFT_APP) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../windows/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc @ONLY) + LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc) + ENDIF(WIN32) + + ADD_EXECUTABLE(${source} ${TARGETS}) TARGET_LINK_LIBRARIES(${source} nfc) TARGET_LINK_LIBRARIES(${source} nfcutils) INSTALL(TARGETS ${source} RUNTIME DESTINATION bin COMPONENT examples) diff --git a/libnfc/CMakeLists.txt b/libnfc/CMakeLists.txt index 6bed790..ef666ee 100644 --- a/libnfc/CMakeLists.txt +++ b/libnfc/CMakeLists.txt @@ -1,9 +1,10 @@ # Windows MinGW workarounds IF(WIN32) - message("Adding in contrib win32 sources") SET(WINDOWS_SOURCES ../contrib/win32/stdlib) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32) - message("Win32: " ${WINDOWS_SOURCES}) + + # Add in the rc for version information in the dll + LIST(APPEND WINDOWS_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../windows/libnfc.rc) ENDIF(WIN32) # Library's chips @@ -52,16 +53,22 @@ IF(LIBUSB_FOUND) TARGET_LINK_LIBRARIES(nfc ${LIBUSB_LIBRARIES}) ENDIF(LIBUSB_FOUND) -IF(WIN32) - TARGET_LINK_LIBRARIES(nfc wsock32) -ENDIF(WIN32) SET_TARGET_PROPERTIES(nfc PROPERTIES SOVERSION 0) IF(WIN32) + # Libraries that are windows specific + TARGET_LINK_LIBRARIES(nfc wsock32) IF(PCRE_FOUND) TARGET_LINK_LIBRARIES(nfc ${PCRE_LIBRARIES}) ENDIF(PCRE_FOUND) + ADD_CUSTOM_COMMAND( + OUTPUT libnfc.lib + COMMAND dlltool -d ${CMAKE_CURRENT_SOURCE_DIR}/../windows/win32/nfc.def -l ${CMAKE_CURRENT_BINARY_DIR}/libnfc.lib ${CMAKE_CURRENT_BINARY_DIR}/libnfc.dll + DEPENDS nfc ${CMAKE_CURRENT_SOURCE_DIR}/../windows/win32/nfc.def + ) + ADD_CUSTOM_TARGET(win32lib ALL DEPENDS libnfc.lib) + # On Windows the shared (runtime) library should be either in the same # directory as the excutables or in the path, we add it to same directory INSTALL(TARGETS nfc RUNTIME DESTINATION bin COMPONENT libraries) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 2b828cb..402b893 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -17,6 +17,15 @@ TARGET_LINK_LIBRARIES(nfcutils nfc) FOREACH(source ${UTILS-SOURCES}) SET (TARGETS ${source}.c) + IF(WIN32) + SET(RC_COMMENT "${PACKAGE_NAME} utility") + SET(RC_INTERNAL_NAME ${source}) + SET(RC_ORIGINAL_NAME ${source}.exe) + SET(RC_FILE_TYPE VFT_APP) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../windows/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc @ONLY) + LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc) + ENDIF(WIN32) + IF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic")) LIST(APPEND TARGETS mifare) ENDIF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic")) @@ -33,7 +42,6 @@ FOREACH(source ${UTILS-SOURCES}) TARGET_LINK_LIBRARIES(${source} nfc) TARGET_LINK_LIBRARIES(${source} nfcutils) - INSTALL(TARGETS ${source} RUNTIME DESTINATION bin COMPONENT utils) ENDFOREACH(source) diff --git a/windows/version.rc.in b/windows/version.rc.in new file mode 100644 index 0000000..473d579 --- /dev/null +++ b/windows/version.rc.in @@ -0,0 +1,35 @@ +#include "windows.h" + +1 VERSIONINFO + FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0 + PRODUCTVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE +#else + FILEFLAGS 0L +#endif + FILEOS VOS_NT_WINDOWS32 + FILETYPE @RC_FILE_TYPE@ + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "Comments", "@RC_COMMENT@\0" + VALUE "CompanyName", "libnfc.org\0" + VALUE "FileDescription", "\0" + VALUE "FileVersion", "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@.0\0" + VALUE "InternalName", "@RC_INTERNAL_NAME@ @WIN32_MODE@\0" + VALUE "LegalCopyright", "Copyright (C) @CURRENT_YEAR@\0" + VALUE "OriginalFilename", "@RC_ORIGINAL_NAME@\0" + VALUE "ProductName", "@PACKAGE_NAME@ @WIN32_MODE@\0" + VALUE "ProductVersion", "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END