xmake.lua 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package("libnfc")
  2. set_homepage("https://github.com/nfc-tools/libnfc")
  3. set_description("Header-only binary fuse and xor filter library.")
  4. set_license("LGPL-3.0")
  5. add_urls("https://github.com/nfc-tools/libnfc/archive/refs/tags/libnfc-$(version).tar.gz", {alias = "tarball"})
  6. add_urls("https://github.com/nfc-tools/libnfc.git", {alias = "git"})
  7. add_versions("tarball:1.8.0", "0ab7d9b41442e7edc2af7c54630396edc73ce51128aa28a5c6e4135dc5595495")
  8. add_versions("tarball:1.7.1", "30de35b4f1af3f57dab40d91ffb2275664a35859ff2b014ba7b226aa3f5465f5")
  9. add_versions("git:1.8.0", "libnfc-1.8.0")
  10. add_versions("git:1.7.1", "libnfc-1.7.1")
  11. add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
  12. add_configs("logging", {description = "Enable log facility. (errors, warning, info and debug messages)", default = true, type = "boolean"})
  13. add_configs("envvars", {description = "Enable envvars facility.", default = true, type = "boolean"})
  14. add_configs("configurable", {description = "Enable configuration files.", default = true, type = "boolean"})
  15. -- drivers
  16. add_configs("pcsc", {description = "Enable PC/SC reader support (Depends on PC/SC)", default = false, type = "boolean"})
  17. add_configs("acr122_pcsc", {description = "Enable ACR122 support (Depends on PC/SC)", default = false, type = "boolean"})
  18. add_configs("acr122_usb", {description = "Enable ACR122 support (Direct USB connection)", default = true, type = "boolean"})
  19. add_configs("acr122s", {description = "Enable ACR122S support (Use serial port)", default = true, type = "boolean"})
  20. add_configs("arygon", {description = "Enable ARYGON support (Use serial port)", default = true, type = "boolean"})
  21. add_configs("pn532_i2c", {description = "Enable PN532 I2C support (Use I2C bus)", default = is_plat("linux"), type = "boolean"})
  22. add_configs("pn532_spi", {description = "Enable PN532 SPI support (Use SPI bus)", default = is_plat("linux"), type = "boolean"})
  23. add_configs("pn532_uart", {description = "Enable PN532 UART support (Use serial port)", default = true, type = "boolean"})
  24. add_configs("pn53x_usb", {description = "Enable PN531 and PN531 USB support (Depends on libusb)", default = true, type = "boolean"})
  25. if not is_plat("bsd") then
  26. if not is_plat("windows", "mingw", "msys", "cygwin") then
  27. add_deps("libusb-compat")
  28. else
  29. add_deps("libusb-win32")
  30. add_syslinks("wsock32")
  31. end
  32. end
  33. add_deps("cmake")
  34. if not is_subhost("windows") then
  35. add_deps("pkg-config")
  36. else
  37. add_deps("pkgconf")
  38. end
  39. on_check("!linux", function (package)
  40. assert(not package:config("pn532_i2c") and not package:config("pn532_spi"), "package(libnfc): I2C/SPI is only (yet) supported in Linux!")
  41. end)
  42. on_load(function (package)
  43. if package:config("pcsc") or package:config("acr122_pcsc") then
  44. if package:is_plat("linux", "bsd") then
  45. package:add("deps", "libpcsclite")
  46. end
  47. end
  48. if package:version():le("1.7.1") and package:is_plat("windows", "mingw", "msys", "cygwin") then
  49. package:add("deps", "pcre")
  50. end
  51. end)
  52. -- about windows:
  53. -- @see https://github.com/nfc-tools/libnfc/pull/734
  54. on_install("!iphoneos and !wasm and !windows", function (package)
  55. local configs = {
  56. "-DBUILD_UTILS=OFF",
  57. "-DBUILD_EXAMPLES=OFF"
  58. }
  59. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  60. table.insert(configs, "-DLIBNFC_LOG=" .. (package:config("logging") and "ON" or "OFF"))
  61. table.insert(configs, "-DLIBNFC_ENVVARS=" .. (package:config("envvars") and "ON" or "OFF"))
  62. table.insert(configs, "-DLIBNFC_CONFFILES_MODE=" .. (package:config("configurable") and "ON" or "OFF"))
  63. table.insert(configs, "-DLIBNFC_DRIVER_PCSC=" .. (package:config("pcsc") and "ON" or "OFF"))
  64. table.insert(configs, "-DLIBNFC_DRIVER_ACR122_PCSC=" .. (package:config("acr122_pcsc") and "ON" or "OFF"))
  65. table.insert(configs, "-DLIBNFC_DRIVER_ACR122_USB=" .. (package:config("acr122_usb") and "ON" or "OFF"))
  66. table.insert(configs, "-DLIBNFC_DRIVER_ACR122S=" .. (package:config("acr122s") and "ON" or "OFF"))
  67. table.insert(configs, "-DLIBNFC_DRIVER_ARYGON=" .. (package:config("arygon") and "ON" or "OFF"))
  68. table.insert(configs, "-DLIBNFC_DRIVER_PN532_I2C=" .. (package:config("pn532_i2c") and "ON" or "OFF"))
  69. table.insert(configs, "-DLIBNFC_DRIVER_PN532_SPI=" .. (package:config("pn532_spi") and "ON" or "OFF"))
  70. table.insert(configs, "-DLIBNFC_DRIVER_PN532_UART=" .. (package:config("pn532_uart") and "ON" or "OFF"))
  71. table.insert(configs, "-DLIBNFC_DRIVER_PN53X_USB=" .. (package:config("pn53x_usb") and "ON" or "OFF"))
  72. if package:is_plat("windows", "mingw", "msys", "cygwin") then
  73. local usb = package:dep("libusb-win32")
  74. if usb then
  75. local fetchinfo = usb:fetch()
  76. if fetchinfo then
  77. local includedirs = table.wrap(fetchinfo.includedirs or fetchinfo.sysincludedirs)
  78. if #includedirs > 0 then
  79. table.insert(configs, "-DLIBUSB_INCLUDE_DIRS=" .. table.concat(includedirs, ";"))
  80. end
  81. local libfiles = table.wrap(fetchinfo.libfiles)
  82. if #libfiles > 0 then
  83. table.insert(configs, "-DLIBUSB_LIBRARIES=" .. libfiles[1])
  84. end
  85. end
  86. end
  87. end
  88. if package:is_plat("mingw") then
  89. table.insert(configs, "-DDLLTOOL=" .. package:tool("dlltool"))
  90. if package:version():le("1.7.1") then
  91. io.replace("libnfc/CMakeLists.txt", "dlltool", "${DLLTOOL}", {plain = true})
  92. end
  93. end
  94. local opts = {}
  95. if package:is_plat("macosx") then
  96. opts.shflags = {"-framework", "CoreFoundation", "-framework", "IOKit", "-framework", "Security"}
  97. end
  98. if package:is_plat("windows", "mingw", "msys", "cygwin") then
  99. opts.cflags = [[-DSYSCONFDIR="./config"]]
  100. io.replace("CMakeLists.txt", "FIND_PACKAGE(PCRE REQUIRED)", [[
  101. find_package(PkgConfig REQUIRED)
  102. pkg_check_modules(PCRECORE REQUIRED libpcre)
  103. pkg_check_modules(PCRE REQUIRED libpcreposix)
  104. add_compile_options(${PCRE_CFLAGS})
  105. ]], {plain = true})
  106. io.replace("libnfc/CMakeLists.txt", "${PCRE_LIBRARIES}", "${PCRE_LIBRARIES} ${PCRECORE_LIBRARIES}", {plain = true})
  107. io.replace("libnfc/conf.c", "#include <regex.h>", "#include <pcreposix.h>", {plain = true})
  108. end
  109. if package:version():le("1.7.1") then
  110. io.replace("CMakeLists.txt", "# version.rc for Windows\nIF(WIN32)", "IF(0)", {plain = true})
  111. io.replace("CMakeLists.txt", "ADD_SUBDIRECTORY(utils)", "", {plain = true})
  112. io.replace("CMakeLists.txt", "ADD_SUBDIRECTORY(examples)", "", {plain = true})
  113. end
  114. io.replace("CMakeLists.txt", [[CMAKE_SYSTEM_PROCESSOR STREQUAL "x86"]], [[CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86|i[3-6]86)$"]], {plain = true})
  115. io.replace("libnfc/CMakeLists.txt", [[LIST(APPEND WINDOWS_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../windows/libnfc.rc)]], "", {plain = true})
  116. io.replace("libnfc/CMakeLists.txt", "DESTINATION bin", "DESTINATION ${CMAKE_INSTALL_LIBDIR}", {plain = true})
  117. io.replace("cmake/modules/FindLIBUSB.cmake", "PKG_CHECK_MODULES(LIBUSB REQUIRED libusb)", "PKG_CHECK_MODULES(LIBUSB REQUIRED libusb-compat)", {plain = true})
  118. io.replace("contrib/win32/stdlib.c", "char *str[32];", "char str[32];", {plain = true})
  119. io.replace("CMakeLists.txt", "INCLUDE(UseDoxygen)", "", {plain = true})
  120. import("package.tools.cmake").install(package, configs, opts)
  121. end)
  122. on_test(function (package)
  123. assert(package:has_cfuncs("nfc_version", {configs = {languages = "c99"}, includes = "nfc/nfc.h"}))
  124. end)