Windows support contribution:
- Move CMake modules from cmake_modules/ to cmake/modules/
- CMake now use cmake/config_windows.h.cmake to create config.h on Windows platform
- contrib/windows.h header is automagically included by config.h
- Put missing NFC_EXPORT macro on front of emulation API
- nfc-mfclassic and nfc-mfcultralight examples are now compiled under Windows
Many thanks to Glenn Ergeerts which provide the initial patch.
Romuald Conty
13 years ago
10 | 10 | SET(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") |
11 | 11 | |
12 | 12 | # config.h |
13 | IF(NOT WIN32) | |
13 | IF(WIN32) | |
14 | CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config_windows.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/config.h) | |
15 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32) | |
16 | ELSE(WIN32) | |
14 | 17 | SET(_XOPEN_SOURCE 600) |
15 | ENDIF(NOT WIN32) | |
18 | CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config_posix.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/config.h) | |
19 | ENDIF(WIN32) | |
16 | 20 | |
17 | CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/config.h) | |
18 | 21 | ADD_DEFINITIONS("-DHAVE_CONFIG_H") |
19 | 22 | |
20 | 23 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include) |
21 | 24 | |
22 | # Win32 | |
23 | IF(WIN32) | |
24 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32) | |
25 | ENDIF(WIN32) | |
26 | ||
27 | 25 | # make it easy to locate CMake modules for finding libraries |
28 | SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/") | |
26 | SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") | |
29 | 27 | |
30 | 28 | # Options |
31 | 29 | SET(LIBNFC_DEBUG_OUTPUT OFF CACHE BOOL "Debug output of communication with the NFC chip") |
77 | 75 | SET(prefix ${CMAKE_INSTALL_PREFIX}) |
78 | 76 | SET(exec_prefix ${CMAKE_INSTALL_PREFIX}) |
79 | 77 | SET(PACKAGE "libnfc") |
80 | IF(LIBNFC_DRIVER_PN531_USB OR LIBNFC_DRIVER_PN533_USB) | |
78 | IF(LIBNFC_DRIVER_PN53X_USB) | |
81 | 79 | SET(PKG_REQ ${PKG_REQ} "libusb") |
82 | ENDIF(LIBNFC_DRIVER_PN531_USB OR LIBNFC_DRIVER_PN533_USB) | |
80 | ENDIF(LIBNFC_DRIVER_PN53X_USB) | |
83 | 81 | IF(LIBNFC_DRIVER_ACR122) |
84 | 82 | SET(PKG_REQ ${PKG_REQ} "libpcsclite") |
85 | 83 | ENDIF(LIBNFC_DRIVER_ACR122) |
0 | #cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" | |
1 | #cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" | |
2 | #cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" | |
3 | #cmakedefine _XOPEN_SOURCE @_XOPEN_SOURCE@ |
0 | #include "contrib/windows.h" | |
1 | ||
2 | #cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" | |
3 | #cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" | |
4 | #cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" |
0 | Redistribution and use in source and binary forms, with or without | |
1 | modification, are permitted provided that the following conditions | |
2 | are met: | |
3 | ||
4 | 1. Redistributions of source code must retain the copyright | |
5 | notice, this list of conditions and the following disclaimer. | |
6 | 2. Redistributions in binary form must reproduce the copyright | |
7 | notice, this list of conditions and the following disclaimer in the | |
8 | documentation and/or other materials provided with the distribution. | |
9 | 3. The name of the author may not be used to endorse or promote products | |
10 | derived from this software without specific prior written permission. | |
11 | ||
12 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
13 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
14 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
15 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
16 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
17 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
18 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
19 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
20 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
21 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
0 | # This CMake script wants to use libusb functionality, therefore it looks | |
1 | # for libusb include files and libraries. | |
2 | # | |
3 | # Operating Systems Supported: | |
4 | # - Unix (requires pkg-config) | |
5 | # Tested with Ubuntu 9.04 and Fedora 11 | |
6 | # - Windows (requires MSVC) | |
7 | # Tested with Windows XP | |
8 | # | |
9 | # This should work for both 32 bit and 64 bit systems. | |
10 | # | |
11 | # Author: F. Kooman <fkooman@tuxed.net> | |
12 | # | |
13 | ||
14 | # FreeBSD has built-in libusb since 800069 | |
15 | IF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) | |
16 | EXEC_PROGRAM(sysctl ARGS -n kern.osreldate OUTPUT_VARIABLE FREEBSD_VERSION) | |
17 | SET(MIN_FREEBSD_VERSION 800068) | |
18 | IF(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) | |
19 | SET(LIBUSB_FOUND TRUE) | |
20 | SET(LIBUSB_INCLUDE_DIRS "/usr/include") | |
21 | SET(LIBUSB_LIBRARIES "usb") | |
22 | SET(LIBUSB_LIBRARY_DIRS "/usr/lib/") | |
23 | ENDIF(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) | |
24 | ENDIF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) | |
25 | ||
26 | IF(NOT LIBUSB_FOUND) | |
27 | IF(WIN32) | |
28 | # Windows with Microsoft Visual C++ | |
29 | FIND_PATH(LIBUSB_INCLUDE_DIRS usb.h "$ENV{ProgramFiles}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH) | |
30 | IF(MSVC) | |
31 | IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
32 | # on x64 (win64) | |
33 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/msvc_x64") | |
34 | ELSE(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
35 | # on x86 (win32) | |
36 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/msvc") | |
37 | ENDIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
38 | ENDIF(MSVC) | |
39 | IF(MINGW) | |
40 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc") | |
41 | ENDIF(MINGW) | |
42 | ELSE(WIN32) | |
43 | # If not under Windows we use PkgConfig | |
44 | FIND_PACKAGE (PkgConfig) | |
45 | IF(PKG_CONFIG_FOUND) | |
46 | PKG_CHECK_MODULES(LIBUSB REQUIRED libusb) | |
47 | ELSE(PKG_CONFIG_FOUND) | |
48 | MESSAGE(FATAL_ERROR "Could not find PkgConfig") | |
49 | ENDIF(PKG_CONFIG_FOUND) | |
50 | ENDIF(WIN32) | |
51 | ||
52 | IF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) | |
53 | SET(LIBUSB_FOUND TRUE) | |
54 | ENDIF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) | |
55 | ENDIF(NOT LIBUSB_FOUND) | |
56 | ||
57 | IF(LIBUSB_FOUND) | |
58 | IF(NOT LIBUSB_FIND_QUIETLY) | |
59 | MESSAGE(STATUS "Found LIBUSB: ${LIBUSB_LIBRARIES} ${LIBUSB_INCLUDE_DIRS}") | |
60 | ENDIF (NOT LIBUSB_FIND_QUIETLY) | |
61 | ELSE(LIBUSB_FOUND) | |
62 | IF(LIBUSB_FIND_REQUIRED) | |
63 | MESSAGE(FATAL_ERROR "Could not find LIBUSB") | |
64 | ENDIF(LIBUSB_FIND_REQUIRED) | |
65 | ENDIF(LIBUSB_FOUND) |
0 | # - Try to find the PC/SC smart card library | |
1 | # Once done this will define | |
2 | # | |
3 | # PCSC_FOUND - system has the PC/SC library | |
4 | # PCSC_INCLUDE_DIRS - the PC/SC include directory | |
5 | # PCSC_LIBRARIES - The libraries needed to use PC/SC | |
6 | # | |
7 | # Author: F. Kooman <fkooman@tuxed.net> | |
8 | # Version: 20101019 | |
9 | # | |
10 | ||
11 | FIND_PACKAGE (PkgConfig) | |
12 | IF(PKG_CONFIG_FOUND) | |
13 | # Will find PC/SC library on Linux/BSDs using PkgConfig | |
14 | PKG_CHECK_MODULES(PCSC libpcsclite) | |
15 | # PKG_CHECK_MODULES(PCSC QUIET libpcsclite) # IF CMake >= 2.8.2? | |
16 | ENDIF(PKG_CONFIG_FOUND) | |
17 | ||
18 | IF(NOT PCSC_FOUND) | |
19 | # Will find PC/SC headers both on Mac and Windows | |
20 | FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h) | |
21 | # PCSC library is for Mac, WinSCard library is for Windows | |
22 | FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC libwinscard) | |
23 | ENDIF(NOT PCSC_FOUND) | |
24 | ||
25 | INCLUDE(FindPackageHandleStandardArgs) | |
26 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCSC DEFAULT_MSG | |
27 | PCSC_LIBRARIES | |
28 | PCSC_INCLUDE_DIRS | |
29 | ) | |
30 | MARK_AS_ADVANCED(PCSC_INCLUDE_DIRS PCSC_LIBRARIES) |
0 | SET(LIBNFC_DRIVER_ACR122 ON CACHE BOOL "Enable ACR122 support (Depends on PC/SC)") | |
1 | SET(LIBNFC_DRIVER_PN53X_USB ON CACHE BOOL "Enable PN531 and PN531 USB support (Depends on libusb)") | |
2 | SET(LIBNFC_DRIVER_ARYGON ON CACHE BOOL "Enable ARYGON support (Use serial port)") | |
3 | SET(LIBNFC_DRIVER_PN532_UART OFF CACHE BOOL "Enable PN532 UART support (Use serial port)") | |
4 | ||
5 | IF(LIBNFC_DRIVER_ACR122) | |
6 | FIND_PACKAGE(PCSC REQUIRED) | |
7 | ADD_DEFINITIONS("-DDRIVER_ACR122_ENABLED") | |
8 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/acr122") | |
9 | ENDIF(LIBNFC_DRIVER_ACR122) | |
10 | ||
11 | IF(LIBNFC_DRIVER_PN53X_USB) | |
12 | FIND_PACKAGE(LIBUSB REQUIRED) | |
13 | ADD_DEFINITIONS("-DDRIVER_PN53X_USB_ENABLED") | |
14 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/pn53x_usb") | |
15 | ENDIF(LIBNFC_DRIVER_PN53X_USB) | |
16 | ||
17 | IF(LIBNFC_DRIVER_ARYGON) | |
18 | ADD_DEFINITIONS("-DDRIVER_ARYGON_ENABLED") | |
19 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/arygon") | |
20 | ENDIF(LIBNFC_DRIVER_ARYGON) | |
21 | ||
22 | IF(LIBNFC_DRIVER_PN532_UART) | |
23 | ADD_DEFINITIONS("-DDRIVER_PN532_UART_ENABLED") | |
24 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/pn532_uart") | |
25 | ENDIF(LIBNFC_DRIVER_PN532_UART) | |
26 | ||
27 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/drivers) | |
28 |
0 | EXTRA_DIST = \ | |
1 | COPYING-CMAKE-SCRIPTS \ | |
2 | FindLIBUSB.cmake \ | |
3 | FindPCSC.cmake \ | |
4 | UseDoxygen.cmake \ | |
5 | LibnfcDrivers.cmake |
0 | # - Run Doxygen | |
1 | # | |
2 | # Adds a doxygen target that runs doxygen to generate the html | |
3 | # and optionally the LaTeX API documentation. | |
4 | # The doxygen target is added to the doc target as dependency. | |
5 | # i.e.: the API documentation is built with: | |
6 | # make doc | |
7 | # | |
8 | # USAGE: GLOBAL INSTALL | |
9 | # | |
10 | # Install it with: | |
11 | # cmake ./ && sudo make install | |
12 | # Add the following to the CMakeLists.txt of your project: | |
13 | # include(UseDoxygen OPTIONAL) | |
14 | # Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it. | |
15 | # | |
16 | # USAGE: INCLUDE IN PROJECT | |
17 | # | |
18 | # set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) | |
19 | # include(UseDoxygen) | |
20 | # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory. | |
21 | # | |
22 | # | |
23 | # Variables you may define are: | |
24 | # DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored. Defaults to "doc". | |
25 | # | |
26 | # DOXYFILE_LATEX_DIR - Directory where the Doxygen LaTeX output is stored. Defaults to "latex". | |
27 | # | |
28 | # DOXYFILE_HTML_DIR - Directory where the Doxygen html output is stored. Defaults to "html". | |
29 | # | |
30 | ||
31 | # | |
32 | # Copyright (c) 2009 Tobias Rautenkranz <tobias@rautenkranz.ch> | |
33 | # | |
34 | # Redistribution and use is allowed according to the terms of the New | |
35 | # BSD license. | |
36 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. | |
37 | # | |
38 | ||
39 | macro(usedoxygen_set_default name value) | |
40 | if(NOT DEFINED "${name}") | |
41 | set("${name}" "${value}") | |
42 | endif() | |
43 | endmacro() | |
44 | ||
45 | find_package(Doxygen) | |
46 | ||
47 | if(DOXYGEN_FOUND) | |
48 | find_file(DOXYFILE_IN "Doxyfile.in" | |
49 | PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/") | |
50 | ||
51 | include(FindPackageHandleStandardArgs) | |
52 | find_package_handle_standard_args(Doxyfile.in DEFAULT_MSG DOXYFILE_IN) | |
53 | endif() | |
54 | ||
55 | if(DOXYGEN_FOUND AND DOXYFILE_IN) | |
56 | add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) | |
57 | ||
58 | usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") | |
59 | usedoxygen_set_default(DOXYFILE_HTML_DIR "html") | |
60 | ||
61 | set_property(DIRECTORY APPEND PROPERTY | |
62 | ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}") | |
63 | ||
64 | set(DOXYFILE_LATEX "NO") | |
65 | set(DOXYFILE_PDFLATEX "NO") | |
66 | set(DOXYFILE_DOT "NO") | |
67 | ||
68 | find_package(LATEX) | |
69 | if(LATEX_COMPILER AND MAKEINDEX_COMPILER) | |
70 | set(DOXYFILE_LATEX "YES") | |
71 | usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex") | |
72 | ||
73 | set_property(DIRECTORY APPEND PROPERTY | |
74 | ADDITIONAL_MAKE_CLEAN_FILES | |
75 | "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") | |
76 | ||
77 | if(PDFLATEX_COMPILER) | |
78 | set(DOXYFILE_PDFLATEX "YES") | |
79 | endif() | |
80 | if(DOXYGEN_DOT_EXECUTABLE) | |
81 | set(DOXYFILE_DOT "YES") | |
82 | endif() | |
83 | ||
84 | add_custom_command(TARGET doxygen | |
85 | POST_BUILD | |
86 | COMMAND ${CMAKE_MAKE_PROGRAM} | |
87 | WORKING_DIRECTORY "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") | |
88 | endif() | |
89 | ||
90 | ||
91 | configure_file(${DOXYFILE_IN} Doxyfile ESCAPE_QUOTES IMMEDIATE @ONLY) | |
92 | ||
93 | get_target_property(DOC_TARGET doc TYPE) | |
94 | if(NOT DOC_TARGET) | |
95 | add_custom_target(doc) | |
96 | endif() | |
97 | ||
98 | add_dependencies(doc doxygen) | |
99 | endif() |
0 | Redistribution and use in source and binary forms, with or without | |
1 | modification, are permitted provided that the following conditions | |
2 | are met: | |
3 | ||
4 | 1. Redistributions of source code must retain the copyright | |
5 | notice, this list of conditions and the following disclaimer. | |
6 | 2. Redistributions in binary form must reproduce the copyright | |
7 | notice, this list of conditions and the following disclaimer in the | |
8 | documentation and/or other materials provided with the distribution. | |
9 | 3. The name of the author may not be used to endorse or promote products | |
10 | derived from this software without specific prior written permission. | |
11 | ||
12 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
13 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
14 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
15 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
16 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
17 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
18 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
19 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
20 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
21 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
0 | # This CMake script wants to use libusb functionality, therefore it looks | |
1 | # for libusb include files and libraries. | |
2 | # | |
3 | # Operating Systems Supported: | |
4 | # - Unix (requires pkg-config) | |
5 | # Tested with Ubuntu 9.04 and Fedora 11 | |
6 | # - Windows (requires MSVC) | |
7 | # Tested with Windows XP | |
8 | # | |
9 | # This should work for both 32 bit and 64 bit systems. | |
10 | # | |
11 | # Author: F. Kooman <fkooman@tuxed.net> | |
12 | # | |
13 | ||
14 | # FreeBSD has built-in libusb since 800069 | |
15 | IF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) | |
16 | EXEC_PROGRAM(sysctl ARGS -n kern.osreldate OUTPUT_VARIABLE FREEBSD_VERSION) | |
17 | SET(MIN_FREEBSD_VERSION 800068) | |
18 | IF(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) | |
19 | SET(LIBUSB_FOUND TRUE) | |
20 | SET(LIBUSB_INCLUDE_DIRS "/usr/include") | |
21 | SET(LIBUSB_LIBRARIES "usb") | |
22 | SET(LIBUSB_LIBRARY_DIRS "/usr/lib/") | |
23 | ENDIF(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) | |
24 | ENDIF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) | |
25 | ||
26 | IF(NOT LIBUSB_FOUND) | |
27 | IF(WIN32) | |
28 | # Windows with Microsoft Visual C++ | |
29 | FIND_PATH(LIBUSB_INCLUDE_DIRS usb.h "$ENV{ProgramFiles}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH) | |
30 | IF(MSVC) | |
31 | IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
32 | # on x64 (win64) | |
33 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/msvc_x64") | |
34 | ELSE(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
35 | # on x86 (win32) | |
36 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/msvc") | |
37 | ENDIF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x64") | |
38 | ENDIF(MSVC) | |
39 | IF(MINGW) | |
40 | FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc") | |
41 | ENDIF(MINGW) | |
42 | ELSE(WIN32) | |
43 | # If not under Windows we use PkgConfig | |
44 | FIND_PACKAGE (PkgConfig) | |
45 | IF(PKG_CONFIG_FOUND) | |
46 | PKG_CHECK_MODULES(LIBUSB REQUIRED libusb) | |
47 | ELSE(PKG_CONFIG_FOUND) | |
48 | MESSAGE(FATAL_ERROR "Could not find PkgConfig") | |
49 | ENDIF(PKG_CONFIG_FOUND) | |
50 | ENDIF(WIN32) | |
51 | ||
52 | IF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) | |
53 | SET(LIBUSB_FOUND TRUE) | |
54 | ENDIF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) | |
55 | ENDIF(NOT LIBUSB_FOUND) | |
56 | ||
57 | IF(LIBUSB_FOUND) | |
58 | IF(NOT LIBUSB_FIND_QUIETLY) | |
59 | MESSAGE(STATUS "Found LIBUSB: ${LIBUSB_LIBRARIES} ${LIBUSB_INCLUDE_DIRS}") | |
60 | ENDIF (NOT LIBUSB_FIND_QUIETLY) | |
61 | ELSE(LIBUSB_FOUND) | |
62 | IF(LIBUSB_FIND_REQUIRED) | |
63 | MESSAGE(FATAL_ERROR "Could not find LIBUSB") | |
64 | ENDIF(LIBUSB_FIND_REQUIRED) | |
65 | ENDIF(LIBUSB_FOUND) |
0 | # - Try to find the PC/SC smart card library | |
1 | # Once done this will define | |
2 | # | |
3 | # PCSC_FOUND - system has the PC/SC library | |
4 | # PCSC_INCLUDE_DIRS - the PC/SC include directory | |
5 | # PCSC_LIBRARIES - The libraries needed to use PC/SC | |
6 | # | |
7 | # Author: F. Kooman <fkooman@tuxed.net> | |
8 | # Version: 20101019 | |
9 | # | |
10 | ||
11 | FIND_PACKAGE (PkgConfig) | |
12 | IF(PKG_CONFIG_FOUND) | |
13 | # Will find PC/SC library on Linux/BSDs using PkgConfig | |
14 | PKG_CHECK_MODULES(PCSC libpcsclite) | |
15 | # PKG_CHECK_MODULES(PCSC QUIET libpcsclite) # IF CMake >= 2.8.2? | |
16 | ENDIF(PKG_CONFIG_FOUND) | |
17 | ||
18 | IF(NOT PCSC_FOUND) | |
19 | # Will find PC/SC headers both on Mac and Windows | |
20 | FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h) | |
21 | # PCSC library is for Mac, WinSCard library is for Windows | |
22 | FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC libwinscard) | |
23 | ENDIF(NOT PCSC_FOUND) | |
24 | ||
25 | INCLUDE(FindPackageHandleStandardArgs) | |
26 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCSC DEFAULT_MSG | |
27 | PCSC_LIBRARIES | |
28 | PCSC_INCLUDE_DIRS | |
29 | ) | |
30 | MARK_AS_ADVANCED(PCSC_INCLUDE_DIRS PCSC_LIBRARIES) |
0 | SET(LIBNFC_DRIVER_ACR122 ON CACHE BOOL "Enable ACR122 support (Depends on PC/SC)") | |
1 | SET(LIBNFC_DRIVER_PN53X_USB ON CACHE BOOL "Enable PN531 and PN531 USB support (Depends on libusb)") | |
2 | SET(LIBNFC_DRIVER_ARYGON ON CACHE BOOL "Enable ARYGON support (Use serial port)") | |
3 | SET(LIBNFC_DRIVER_PN532_UART OFF CACHE BOOL "Enable PN532 UART support (Use serial port)") | |
4 | ||
5 | IF(LIBNFC_DRIVER_ACR122) | |
6 | FIND_PACKAGE(PCSC REQUIRED) | |
7 | ADD_DEFINITIONS("-DDRIVER_ACR122_ENABLED") | |
8 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/acr122") | |
9 | ENDIF(LIBNFC_DRIVER_ACR122) | |
10 | ||
11 | IF(LIBNFC_DRIVER_PN53X_USB) | |
12 | FIND_PACKAGE(LIBUSB REQUIRED) | |
13 | ADD_DEFINITIONS("-DDRIVER_PN53X_USB_ENABLED") | |
14 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/pn53x_usb") | |
15 | ENDIF(LIBNFC_DRIVER_PN53X_USB) | |
16 | ||
17 | IF(LIBNFC_DRIVER_ARYGON) | |
18 | ADD_DEFINITIONS("-DDRIVER_ARYGON_ENABLED") | |
19 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/arygon") | |
20 | ENDIF(LIBNFC_DRIVER_ARYGON) | |
21 | ||
22 | IF(LIBNFC_DRIVER_PN532_UART) | |
23 | ADD_DEFINITIONS("-DDRIVER_PN532_UART_ENABLED") | |
24 | SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/pn532_uart") | |
25 | ENDIF(LIBNFC_DRIVER_PN532_UART) | |
26 | ||
27 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/drivers) | |
28 |
0 | EXTRA_DIST = \ | |
1 | COPYING-CMAKE-SCRIPTS \ | |
2 | FindLIBUSB.cmake \ | |
3 | FindPCSC.cmake \ | |
4 | UseDoxygen.cmake \ | |
5 | LibnfcDrivers.cmake |
0 | # - Run Doxygen | |
1 | # | |
2 | # Adds a doxygen target that runs doxygen to generate the html | |
3 | # and optionally the LaTeX API documentation. | |
4 | # The doxygen target is added to the doc target as dependency. | |
5 | # i.e.: the API documentation is built with: | |
6 | # make doc | |
7 | # | |
8 | # USAGE: GLOBAL INSTALL | |
9 | # | |
10 | # Install it with: | |
11 | # cmake ./ && sudo make install | |
12 | # Add the following to the CMakeLists.txt of your project: | |
13 | # include(UseDoxygen OPTIONAL) | |
14 | # Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it. | |
15 | # | |
16 | # USAGE: INCLUDE IN PROJECT | |
17 | # | |
18 | # set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) | |
19 | # include(UseDoxygen) | |
20 | # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory. | |
21 | # | |
22 | # | |
23 | # Variables you may define are: | |
24 | # DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored. Defaults to "doc". | |
25 | # | |
26 | # DOXYFILE_LATEX_DIR - Directory where the Doxygen LaTeX output is stored. Defaults to "latex". | |
27 | # | |
28 | # DOXYFILE_HTML_DIR - Directory where the Doxygen html output is stored. Defaults to "html". | |
29 | # | |
30 | ||
31 | # | |
32 | # Copyright (c) 2009 Tobias Rautenkranz <tobias@rautenkranz.ch> | |
33 | # | |
34 | # Redistribution and use is allowed according to the terms of the New | |
35 | # BSD license. | |
36 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. | |
37 | # | |
38 | ||
39 | macro(usedoxygen_set_default name value) | |
40 | if(NOT DEFINED "${name}") | |
41 | set("${name}" "${value}") | |
42 | endif() | |
43 | endmacro() | |
44 | ||
45 | find_package(Doxygen) | |
46 | ||
47 | if(DOXYGEN_FOUND) | |
48 | find_file(DOXYFILE_IN "Doxyfile.in" | |
49 | PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/") | |
50 | ||
51 | include(FindPackageHandleStandardArgs) | |
52 | find_package_handle_standard_args(Doxyfile.in DEFAULT_MSG DOXYFILE_IN) | |
53 | endif() | |
54 | ||
55 | if(DOXYGEN_FOUND AND DOXYFILE_IN) | |
56 | add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) | |
57 | ||
58 | usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") | |
59 | usedoxygen_set_default(DOXYFILE_HTML_DIR "html") | |
60 | ||
61 | set_property(DIRECTORY APPEND PROPERTY | |
62 | ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}") | |
63 | ||
64 | set(DOXYFILE_LATEX "NO") | |
65 | set(DOXYFILE_PDFLATEX "NO") | |
66 | set(DOXYFILE_DOT "NO") | |
67 | ||
68 | find_package(LATEX) | |
69 | if(LATEX_COMPILER AND MAKEINDEX_COMPILER) | |
70 | set(DOXYFILE_LATEX "YES") | |
71 | usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex") | |
72 | ||
73 | set_property(DIRECTORY APPEND PROPERTY | |
74 | ADDITIONAL_MAKE_CLEAN_FILES | |
75 | "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") | |
76 | ||
77 | if(PDFLATEX_COMPILER) | |
78 | set(DOXYFILE_PDFLATEX "YES") | |
79 | endif() | |
80 | if(DOXYGEN_DOT_EXECUTABLE) | |
81 | set(DOXYFILE_DOT "YES") | |
82 | endif() | |
83 | ||
84 | add_custom_command(TARGET doxygen | |
85 | POST_BUILD | |
86 | COMMAND ${CMAKE_MAKE_PROGRAM} | |
87 | WORKING_DIRECTORY "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") | |
88 | endif() | |
89 | ||
90 | ||
91 | configure_file(${DOXYFILE_IN} Doxyfile ESCAPE_QUOTES IMMEDIATE @ONLY) | |
92 | ||
93 | get_target_property(DOC_TARGET doc TYPE) | |
94 | if(NOT DOC_TARGET) | |
95 | add_custom_target(doc) | |
96 | endif() | |
97 | ||
98 | add_dependencies(doc doxygen) | |
99 | endif() |
0 | #cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" | |
1 | #cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" | |
2 | #cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" | |
3 | #cmakedefine _XOPEN_SOURCE @_XOPEN_SOURCE@ |
13 | 13 | exit (code); \ |
14 | 14 | } while (0) |
15 | 15 | |
16 | #define err(code, ...) errx(code, ...) | |
16 | #define err errx | |
17 | 17 | |
18 | 18 | #endif /* !_ERR_H_ */ |
26 | 26 | #define __WINDOWS_H__ |
27 | 27 | |
28 | 28 | # include <windows.h> |
29 | # include <winerror.h> | |
30 | # include "win32/err.h" | |
29 | 31 | # if defined (__MINGW32__) |
30 | 32 | # define snprintf(S, n, F, ...) sprintf(S, F, __VA_ARGS__) |
31 | 33 | # define MAX(a,b) max(a,b) |
32 | 34 | # define MIN(a,b) min(a,b) |
33 | 35 | # define pipe(fds) _pipe(fds, 5000, _O_BINARY) |
36 | # define ETIMEDOUT WSAETIMEDOUT | |
37 | # define ENOTSUP 134 | |
34 | 38 | # else |
35 | 39 | # define snprintf sprintf_s |
36 | 40 | # define strdup _strdup |
0 | SET(EXAMPLES-SOURCES nfc-anticol nfc-dep-initiator nfc-dep-target nfc-emulate-forum-tag4 nfc-emulate-tag nfc-emulate-uid nfc-list nfc-poll nfc-relay nfc-relay-picc) | |
1 | #TODO nfc-mfclassic nfc-mfultralight pn53x-diagnose pn53x-sam pn53x-tamashell | |
0 | SET(EXAMPLES-SOURCES nfc-anticol nfc-dep-initiator nfc-dep-target nfc-emulate-forum-tag4 nfc-emulate-tag nfc-emulate-uid nfc-list nfc-poll nfc-relay nfc-relay-picc nfc-mfclassic nfc-mfultralight) | |
1 | #TODO pn53x-diagnose pn53x-sam pn53x-tamashell | |
2 | 2 | |
3 | 3 | # XXX: Examples should not use private API! |
4 | 4 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../libnfc) |
7 | 7 | LINK_DIRECTORIES(${LIBUSB_LIBRARY_DIRS} ${PCSC_LIBRARY_DIRS}) |
8 | 8 | |
9 | 9 | ADD_LIBRARY(nfc-utils nfc-utils) |
10 | #ADD_LIBRARY(mifare mifare) | |
11 | 10 | |
12 | 11 | # Examples |
13 | 12 | FOREACH(source ${EXAMPLES-SOURCES}) |
14 | ADD_EXECUTABLE(${source} ${source}.c) | |
13 | IF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic")) | |
14 | ADD_EXECUTABLE(${source} ${source}.c mifare) | |
15 | ELSE() | |
16 | ADD_EXECUTABLE(${source} ${source}.c) | |
17 | ENDIF((${source} MATCHES "nfc-mfultralight") OR (${source} MATCHES "nfc-mfclassic")) | |
15 | 18 | TARGET_LINK_LIBRARIES(${source} nfc) |
16 | 19 | TARGET_LINK_LIBRARIES(${source} nfc-utils) |
17 | 20 | INSTALL(TARGETS ${source} RUNTIME DESTINATION bin COMPONENT examples) |
18 | 21 | ENDFOREACH(source) |
19 | ||
20 | #TARGET_LINK_LIBRARIES(nfc-mfclassic mifare) | |
21 | #TARGET_LINK_LIBRARIES(nfc-mfultralight mifare) | |
22 | 22 | |
23 | 23 | IF(NOT WIN32) |
24 | 24 | # Manuals for the examples |
51 | 51 | |
52 | 52 | #include "nfc-utils.h" |
53 | 53 | |
54 | // TODO Move this Windows conditional code in contrib/win32/ or contrib/windows.h | |
54 | 55 | #ifndef _WIN32 |
55 | 56 | // Needed by sleep() under Unix |
56 | 57 | # include <unistd.h> |
58 | 59 | # define SUSP_TIME 1 // secs. |
59 | 60 | #else |
60 | 61 | // Needed by Sleep() under Windows |
61 | # include "../contrib/windows.h" | |
62 | 62 | # include <winbase.h> |
63 | 63 | # define sleep Sleep |
64 | 64 | # define SUSP_TIME 1000 // msecs. |
46 | 46 | # define SUSP_TIME 1 // secs. |
47 | 47 | #else |
48 | 48 | // Needed by Sleep() under Windows |
49 | # include "../contrib/windows.h" | |
50 | 49 | # include <winbase.h> |
51 | 50 | # define sleep Sleep |
52 | 51 | # define SUSP_TIME 1000 // msecs. |
20 | 20 | #define __NFC_EMULATION_H__ |
21 | 21 | |
22 | 22 | #include <sys/types.h> |
23 | #include <nfc/nfc.h> | |
23 | 24 | |
24 | 25 | struct nfc_emulator; |
25 | 26 | struct nfc_emulation_state_machine; |
36 | 37 | void *data; |
37 | 38 | }; |
38 | 39 | |
39 | int nfc_emulate_target (nfc_device_t* pnd, struct nfc_emulator *emulator); | |
40 | NFC_EXPORT int nfc_emulate_target (nfc_device_t* pnd, struct nfc_emulator *emulator); | |
40 | 41 | |
41 | 42 | #endif /* __NFC_EMULATION_H__ */ |
21 | 21 | INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) |
22 | 22 | ADD_LIBRARY(nfc SHARED ${LIBRARY_SOURCES}) |
23 | 23 | TARGET_LINK_LIBRARIES(nfc ${LIBUSB_LIBRARIES} ${PCSC_LIBRARIES}) |
24 | IF(WIN32) | |
25 | TARGET_LINK_LIBRARIES(nfc wsock32) | |
26 | ENDIF(WIN32) | |
24 | 27 | SET_TARGET_PROPERTIES(nfc PROPERTIES SOVERSION 0) |
25 | 28 | |
26 | 29 | IF(WIN32) |
148 | 148 | if (!ReadFile (((serial_port_windows *) sp)->hPort, pbtRx, dwRxLen, &dwRxLen, NULL)) { |
149 | 149 | return DEIO; |
150 | 150 | } |
151 | return (dwRwLen == (DWORD) szRx) ? 0 : DEIO; | |
151 | return (dwRxLen == (DWORD) szRx) ? 0 : DEIO; | |
152 | 152 | } |
153 | 153 | |
154 | 154 | int |
41 | 41 | |
42 | 42 | #include "mirror-subr.h" |
43 | 43 | #include "nfc-internal.h" |
44 | ||
45 | #ifdef _WIN32 | |
46 | # include "contrib/windows.h" | |
47 | #endif | |
48 | 44 | |
49 | 45 | #include <sys/param.h> |
50 | 46 |