CMakeLists.txt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  2. set(NCD_ADDITIONAL_SOURCES)
  3. if (BADVPN_USE_LINUX_RFKILL)
  4. list(APPEND NCD_ADDITIONAL_SOURCES
  5. NCDRfkillMonitor.c
  6. modules/net_backend_rfkill.c
  7. )
  8. endif ()
  9. if (BADVPN_USE_LINUX_INPUT)
  10. list(APPEND NCD_ADDITIONAL_SOURCES
  11. modules/sys_evdev.c
  12. )
  13. endif ()
  14. if (BADVPN_USE_INOTIFY)
  15. list(APPEND NCD_ADDITIONAL_SOURCES
  16. modules/sys_watch_directory.c
  17. )
  18. endif ()
  19. add_library(ncdtokenizer
  20. NCDConfigTokenizer.c
  21. )
  22. target_link_libraries(ncdtokenizer base)
  23. add_library(ncdval
  24. NCDVal.c
  25. )
  26. target_link_libraries(ncdval base)
  27. add_library(ncdvalgenerator
  28. NCDValGenerator.c
  29. )
  30. target_link_libraries(ncdvalgenerator base ncdval)
  31. add_library(ncdvalparser
  32. NCDValParser.c
  33. )
  34. target_link_libraries(ncdvalparser base ncdval ncdtokenizer ncdvalcons)
  35. add_library(ncdast
  36. NCDAst.c
  37. )
  38. add_library(ncdconfigparser
  39. NCDConfigParser.c
  40. )
  41. target_link_libraries(ncdconfigparser base ncdtokenizer ncdast)
  42. add_library(ncdsugar
  43. NCDSugar.c
  44. )
  45. target_link_libraries(ncdsugar ncdast)
  46. add_library(ncdrequest
  47. NCDRequestClient.c
  48. )
  49. target_link_libraries(ncdrequest base system ncdvalgenerator ncdvalparser)
  50. add_library(ncdinterfacemonitor
  51. NCDInterfaceMonitor.c
  52. )
  53. target_link_libraries(ncdinterfacemonitor base system)
  54. add_library(ncdvalcons
  55. NCDValCons.c
  56. )
  57. target_link_libraries(ncdvalcons ncdval)
  58. add_executable(badvpn-ncd
  59. ncd.c
  60. NCDModule.c
  61. NCDModuleIndex.c
  62. NCDIfConfig.c
  63. NCDObject.c
  64. NCDInterpProcess.c
  65. NCDInterpProg.c
  66. NCDPlaceholderDb.c
  67. NCDMethodIndex.c
  68. BEventLock.c
  69. modules/command_template.c
  70. modules/event_template.c
  71. modules/var.c
  72. modules/list.c
  73. modules/depend.c
  74. modules/multidepend.c
  75. modules/dynamic_depend.c
  76. modules/concat.c
  77. modules/concatv.c
  78. modules/if.c
  79. modules/strcmp.c
  80. modules/regex_match.c
  81. modules/logical.c
  82. modules/sleep.c
  83. modules/print.c
  84. modules/blocker.c
  85. modules/run.c
  86. modules/runonce.c
  87. modules/daemon.c
  88. modules/spawn.c
  89. modules/call.c
  90. modules/imperative.c
  91. modules/ref.c
  92. modules/index.c
  93. modules/alias.c
  94. modules/process_manager.c
  95. modules/ondemand.c
  96. modules/foreach.c
  97. modules/choose.c
  98. modules/from_string.c
  99. modules/to_string.c
  100. modules/value.c
  101. modules/try.c
  102. modules/net_backend_waitdevice.c
  103. modules/net_backend_waitlink.c
  104. modules/net_backend_badvpn.c
  105. modules/net_backend_wpa_supplicant.c
  106. modules/net_up.c
  107. modules/net_dns.c
  108. modules/net_iptables.c
  109. modules/net_ipv4_addr.c
  110. modules/net_ipv4_route.c
  111. modules/net_ipv4_dhcp.c
  112. modules/net_ipv4_arp_probe.c
  113. modules/net_watch_interfaces.c
  114. modules/sys_watch_input.c
  115. modules/sys_watch_usb.c
  116. modules/sys_request_server.c
  117. modules/net_ipv6_wait_dynamic_addr.c
  118. modules/sys_request_client.c
  119. modules/exit.c
  120. modules/getargs.c
  121. modules/arithmetic.c
  122. modules/parse.c
  123. modules/valuemetic.c
  124. modules/file.c
  125. modules/netmask.c
  126. modules/implode.c
  127. modules/call2.c
  128. modules/assert.c
  129. modules/reboot.c
  130. modules/explode.c
  131. modules/net_ipv6_addr.c
  132. modules/net_ipv6_route.c
  133. modules/net_ipv4_addr_in_network.c
  134. modules/net_ipv6_addr_in_network.c
  135. ${NCD_ADDITIONAL_SOURCES}
  136. )
  137. target_link_libraries(badvpn-ncd
  138. system flow flowextra dhcpclient arpprobe ncdval ncdvalgenerator
  139. ncdvalparser ncdconfigparser ncdsugar udevmonitor ncdinterfacemonitor ncdrequest
  140. badvpn_random
  141. )
  142. if (BADVPN_USE_LINUX_INPUT)
  143. string(REPLACE " " ";" FLAGS_LIST "${CMAKE_C_FLAGS}")
  144. execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_LIST} -E ${CMAKE_CURRENT_SOURCE_DIR}/include_linux_input.c
  145. RESULT_VARIABLE LINUX_INPUT_PREPROCESS_RESULT
  146. OUTPUT_VARIABLE LINUX_INPUT_PREPROCESS_OUTPUT)
  147. if (NOT LINUX_INPUT_PREPROCESS_RESULT EQUAL 0)
  148. message(FATAL_ERROR "failed to preprocess linux/input.h include")
  149. endif ()
  150. string(REGEX MATCH "\"(/[^\"]+/linux/input.h)\"" LINUX_INPUT_MATCH ${LINUX_INPUT_PREPROCESS_OUTPUT})
  151. if (NOT LINUX_INPUT_MATCH)
  152. message(FATAL_ERROR "failed to match preprocessor output for path of linux/input.h")
  153. endif ()
  154. set(LINUX_INPUT_H_PATH ${CMAKE_MATCH_1})
  155. message(STATUS "Generating linux_input_names.h from ${LINUX_INPUT_H_PATH}")
  156. execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/parse_linux_input.sh
  157. ${LINUX_INPUT_H_PATH}
  158. ${CMAKE_CURRENT_BINARY_DIR}/linux_input_names.h
  159. RESULT_VARIABLE LINUX_INPUT_PARSE_RESULT)
  160. if (NOT LINUX_INPUT_PARSE_RESULT EQUAL 0)
  161. message(FATAL_ERROR "failed to generate linux_input_names.h")
  162. endif ()
  163. endif ()
  164. install(
  165. TARGETS badvpn-ncd
  166. RUNTIME DESTINATION bin
  167. )