Add Microsoft Windows support.

Update issue 62
Status: Feedback
Gleen, I slightly modified your patches to better stick with the style of the
rest of the project,  Can you please confirm that it does not break?

PR:		Issue 62
Submitted by:	glenn.ergeerts
This commit is contained in:
Romain Tartiere 2011-04-24 10:21:03 +00:00
parent 0f32259ee2
commit de64cce14c
8 changed files with 207 additions and 1 deletions

56
CMakeLists.txt Normal file
View file

@ -0,0 +1,56 @@
# $Id$
project(libfreefare C)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
add_definitions("-std=c99")
find_package(LIBNFC REQUIRED)
find_package(OpenSSL REQUIRED)
IF(WIN32)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config_windows.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/config.h)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32)
find_library(WINSOCK_LIB libws2_32.a)
set(LIBS ${LIBS} ${WINSOCK_LIB})
ENDIF(WIN32)
if(MINGW)
# force MinGW-w64 in 32bit mode
add_definitions("-m32")
set(CMAKE_SHARED_LINKER_FLAGS -m32)
set(CMAKE_EXE_LINKER_FLAGS -m32)
endif(MINGW)
message("CMAKE_C_FLAGS: " ${CMAKE_C_FLAGS})
message("CMAKE_SHARED_LINKER_FLAGS: " ${CMAKE_SHARED_LINKER_FLAGS})
include_directories(${LIBNFC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
set(LIBS ${LIBS} ${LIBNFC_LIBRARIES} ${OPENSSL_LIBRARIES})
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
message("CMAKE_INSTALL_PREFIX not defined")
set(CMAKE_INSTALL_PREFIX "c:/projects/EVENT/install") # TODO
endif(NOT DEFINED CMAKE_INSTALL_PREFIX)
if(DEFINED CMAKE_INSTALL_LIBDIR)
set(libdir ${CMAKE_INSTALL_LIBDIR})
else(DEFINED CMAKE_INSTALL_LIBDIR)
set(CMAKE_INSTALL_LIBDIR lib)
set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
endif(DEFINED CMAKE_INSTALL_LIBDIR)
if(DEFINED INCLUDE_INSTALL_DIR)
set(includedir ${INCLUDE_INSTALL_DIR})
else(DEFINED INCLUDE_INSTALL_DIR)
set(INCLUDE_INSTALL_DIR include)
set(includedir ${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR})
endif(DEFINED INCLUDE_INSTALL_DIR)
if(NOT DEFINED SHARE_INSTALL_PREFIX)
set(SHARE_INSTALL_PREFIX share)
endif(NOT DEFINED SHARE_INSTALL_PREFIX)
add_subdirectory(libfreefare)
add_subdirectory(examples)

21
FindLIBNFC.cmake Normal file
View file

@ -0,0 +1,21 @@
# $Id$
# TODO locate using pkg-config for linux/bsd
#set(LIBNFC_INCLUDE_DIRS "")
#set(LIBNFC_LIBRARIES "")
set(LIBNFC_INSTALL_DIR $ENV{PROGRAMFILES}/libnfc CACHE PATH "libnfc installation directory")
message("libnfc install dir: " ${LIBNFC_INSTALL_DIR})
find_path(LIBNFC_INCLUDE_DIRS NAMES nfc/nfc.h PATHS ${LIBNFC_INSTALL_DIR}/include)
message("libnfc include dir found: " ${LIBNFC_INCLUDE_DIRS})
find_library(LIBNFC_LIBRARIES libnfc PATHS ${LIBNFC_INSTALL_DIR}/lib)
message("libnfc library found: " ${LIBNFC_LIBRARIES})
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBNFC DEFAULT_MSG
LIBNFC_INCLUDE_DIRS
LIBNFC_LIBRARIES
)
MARK_AS_ADVANCED(LIBNFC_INCLUDE_DIRS LIBNFC_LIBRARIES)

View file

@ -32,7 +32,7 @@ clean-local-coverage:
-rm -rf coverage
SVN_KEYWORDS_FILES_LIST_CMD = find $(top_srcdir) -name '*.[hc]' -a ! -name config.h \
-o -name Makefile.am
-o -name Makefile.am -o -name '*.cmake' -o -name 'CMakeLists.txt'
svn-keywords:
@echo Update files svn:keywords...
@$(SVN_KEYWORDS_FILES_LIST_CMD) | xargs svn propset -q svn:keywords Id

1
NEWS
View file

@ -14,6 +14,7 @@ Changes between 0.3.1 and 0.3.2 [XX xxx XXXX]
mifare_desfire_create_backup_data_file_iso(),
mifare_desfire_create_linear_record_file_iso(),
mifare_desfire_create_cyclic_record_file_iso().
*) Microsoft Windows support.
Changes between 0.3.0 and 0.3.1 [23 feb 2011]

33
config_windows.h.cmake Normal file
View file

@ -0,0 +1,33 @@
/*-
* Copyright (C) 2011 Glenn Ergeerts.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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 Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
* $Id$
*/
#ifndef __CONFIG_WINDOWS_H__
#define __CONFIG_WINDOWS_H__
#include <winsock2.h>
#define htole32(x) (x)
#define le32toh(x) (x)
#define le16toh(x) (x)
#define htobe16(x) htons(x)
#define be16toh(x) ntohs(x)
#define ENOTSUP WSAEOPNOTSUPP
#endif /* !__CONFIG_WINDOWS_H__ */

40
err.h Normal file
View file

@ -0,0 +1,40 @@
/*-
* Copyright (C) 2011 Glenn Ergeerts.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program 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 Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
* $Id$
*/
#ifndef __ERR_H__
#define __ERR_H__
#include <stdlib.h>
#define warnx(...) do { \
fprintf (stderr, __VA_ARGS__); \
fprintf (stderr, "\n"); \
} while (0)
#define errx(code, ...) do { \
fprintf (stderr, __VA_ARGS__); \
fprintf (stderr, "\n"); \
exit (code); \
} while (0)
/* FIXME: warn / err are supposed to display errno's message */
#define warn warnx
#define err errx
#endif /* !__ERR_H__ */

21
examples/CMakeLists.txt Normal file
View file

@ -0,0 +1,21 @@
# $Id$
set(EXAMPLES-SOURCES
mifare-classic-format
mifare-classic-write-ndef
mifare-desfire-access
mifare-desfire-format
mifare-desfire-info
mifare-desfire-write-ndef
mifare-desfire-ev1-configure-ats
mifare-desfire-ev1-configure-default-key
mifare-desfire-ev1-configure-random-uid
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../libfreefare)
# Examples
foreach(source ${EXAMPLES-SOURCES})
add_executable(${source} ${source}.c)
target_link_libraries(${source} freefare)
install(TARGETS ${source} RUNTIME DESTINATION bin COMPONENT examples)
endforeach(source)

View file

@ -0,0 +1,34 @@
# $Id$
set(LIBRARY_SOURCES
freefare
freefare_internal
mad
mifare_application
mifare_classic
mifare_desfire
mifare_desfire_aid
mifare_desfire_crypto
mifare_desfire_error
mifare_desfire_key
mifare_ultralight
tlv
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_library(freefare SHARED ${LIBRARY_SOURCES})
target_link_libraries(freefare ${LIBS})
set(installheaders freefare.h)
install(FILES ${installheaders} DESTINATION ${INCLUDE_INSTALL_DIR}/freefare COMPONENT headers)
if(WIN32)
# 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 freefare RUNTIME DESTINATION bin COMPONENT libraries)
# At compile time we need the .LIB file, we place it in the lib directory
install(TARGETS freefare ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT headers)
else(WIN32)
install(TARGETS freefare LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
endif(WIN32)