meson.build 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. project('bdsm', ['c'],
  2. version: '0.3.0',
  3. license: ['LGPL2'],
  4. default_options: ['c_std=c11',
  5. 'warning_level=2',
  6. 'buildtype=release',
  7. 'b_ndebug=if-release'],
  8. meson_version: '>= 0.47.0')
  9. conf_data = configuration_data()
  10. conf_data.set_quoted('URANDOM', '/dev/urandom') #TODO
  11. conf_data.set('_FORTIFY_SOURCE', 2,
  12. description: 'Define to 2 to get glibc warnings.')
  13. conf_data.set('_FILE_OFFSET_BITS', 64,
  14. description: 'Define to 64 for large file support.')
  15. conf_data.set('_DEFAULT_SOURCE', 1)
  16. cc = meson.get_compiler('c')
  17. # Add -fvisibility=hidden if compiler supports those
  18. add_project_arguments(
  19. cc.get_supported_arguments('-fvisibility=hidden'),
  20. language : ['c'])
  21. optional_arguments = [
  22. '-Wall',
  23. '-Wsign-compare',
  24. '-Wextra',
  25. '-Wstrict-aliasing',
  26. '-Wstrict-overflow' ]
  27. add_project_arguments(
  28. cc.get_supported_arguments(optional_arguments),
  29. language: 'c')
  30. if cc.has_argument('-fvisibility=hidden')
  31. add_project_arguments('-fvisibility=hidden', language: 'c')
  32. else
  33. warning('Compiler does not support -fvisibility=hidden, all symbols will be public!')
  34. endif
  35. test_args = ''
  36. # Check headers
  37. if cc.has_header('bsd/string.h')
  38. conf_data.set('HAVE_BSD_STRING_H', 1)
  39. endif
  40. if cc.has_header('alloca.h')
  41. conf_data.set('HAVE_ALLOCA_H', 1)
  42. endif
  43. if cc.has_header('sys/queue.h')
  44. conf_data.set('HAVE_SYS_QUEUE_H', 1)
  45. endif
  46. if cc.has_header('arpa/inet.h')
  47. conf_data.set('HAVE_ARPA_INET_H', 1)
  48. endif
  49. if cc.has_header('sys/socket.h')
  50. conf_data.set('HAVE_SYS_SOCKET_H', 1)
  51. endif
  52. if cc.has_header('sys/time.h')
  53. conf_data.set('HAVE_SYS_TIME_H', 1)
  54. endif
  55. if cc.has_header('ifaddrs.h')
  56. conf_data.set('HAVE_IFADDRS_H', 1)
  57. endif
  58. # Check functions
  59. compat_sources = []
  60. if cc.has_function('strlcpy', prefix: '#include <string.h>', args: test_args)
  61. conf_data.set('HAVE_STRLCPY', 1)
  62. else
  63. compat_sources += 'compat/strlcpy.c'
  64. endif
  65. if cc.has_function('strndup', prefix: '#include <string.h>', args: test_args)
  66. conf_data.set('HAVE_STRNDUP', 1)
  67. else
  68. compat_sources += 'compat/strndup.c'
  69. endif
  70. #if cc.has_function('clock_gettime', prefix: '#include <time.h>', args: test_args)
  71. # conf_data.set('HAVE_CLOCK_GETTIME', 1)
  72. #else
  73. # compat_sources += 'compat/clock_gettime.c'
  74. #endif
  75. if cc.has_function('pipe')
  76. conf_data.set('HAVE_PIPE', 1)
  77. endif
  78. if cc.has_function('_pipe')
  79. conf_data.set('HAVE__PIPE', 1)
  80. endif
  81. if cc.has_function('getifaddrs')
  82. conf_data.set('HAVE_GETIFADDRS', 1)
  83. endif
  84. if cc.has_function('nl_langinfo')
  85. conf_data.set('HAVE_NL_LANGINFO', 1)
  86. endif
  87. # Check for struct timespec
  88. if cc.has_type('struct timespec', prefix: '#include <time.h>')
  89. conf_data.set('HAVE_STRUCT_TIMESPEC', 1)
  90. endif
  91. config_header = configure_file(
  92. input: 'config.h.meson',
  93. output: 'config.h',
  94. configuration: conf_data)
  95. tasn1 = dependency('libtasn1')
  96. thread = dependency('threads')
  97. spnego_asn1_target = custom_target('spnego_asn1.c',
  98. output: 'spnego_asn1.c',
  99. input: 'contrib/spnego/spnego.asn1',
  100. command: ['asn1Parser', '-o', '@INPUT@', '-n', 'spnego_asn1_conf',
  101. '@OUTPUT@'])
  102. libdsm_sources = [
  103. 'contrib/mdx/md4.c',
  104. 'contrib/mdx/md5.c',
  105. 'contrib/rc4/rc4.c',
  106. spnego_asn1_target,
  107. 'src/hmac_md5.c',
  108. 'src/netbios_ns.c',
  109. 'src/netbios_query.c',
  110. 'src/netbios_session.c',
  111. 'src/netbios_utils.c',
  112. 'src/smb_buffer.c',
  113. 'src/smb_dir.c',
  114. 'src/smb_fd.c',
  115. 'src/smb_file.c',
  116. 'src/smb_spnego.c',
  117. 'src/smb_message.c',
  118. 'src/smb_ntlm.c',
  119. 'src/smb_session.c',
  120. 'src/smb_session_msg.c',
  121. 'src/smb_share.c',
  122. 'src/smb_stat.c',
  123. 'src/smb_trans2.c',
  124. 'src/smb_transport.c',
  125. 'src/smb_utils.c' ]
  126. libdsm_sources += compat_sources
  127. includes = include_directories('.', 'contrib', 'include', 'compat')
  128. add_project_arguments('-DHAVE_CONFIG_H=1', language: ['c'])
  129. libdsm = library('libdsm',
  130. libdsm_sources,
  131. version: meson.project_version(),
  132. include_directories: includes)
  133. pkg_mod = import('pkgconfig')
  134. pkg_mod.generate(
  135. libraries: libdsm,
  136. version: meson.project_version(),
  137. name: 'libdsm',
  138. filebase: 'libdsm',
  139. description: 'Minimalist and read-only smb client library')