Skip to content

Commit e429b4c

Browse files
committed
meson build: Add support for meson build
1 parent d6da9a1 commit e429b4c

File tree

3 files changed

+145
-0
lines changed

3 files changed

+145
-0
lines changed

meson.build

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
project('libmodbus', 'c', version : '3.1.8')
2+
3+
libmodbus_version = meson.project_version()
4+
ver_arr = libmodbus_version.split('.')
5+
6+
libmodbus_version_major = ver_arr[0]
7+
libmodbus_version_minor = ver_arr[1]
8+
libmodbus_version_micro = ver_arr[2]
9+
10+
ver_conf = configuration_data()
11+
ver_conf.set('LIBMODBUS_VERSION', libmodbus_version)
12+
ver_conf.set('LIBMODBUS_VERSION_MAJOR', libmodbus_version_major)
13+
ver_conf.set('LIBMODBUS_VERSION_MINOR', libmodbus_version_minor)
14+
ver_conf.set('LIBMODBUS_VERSION_MICRO', libmodbus_version_micro)
15+
16+
cc = meson.get_compiler('c')
17+
cdata = configuration_data()
18+
check_headers = [
19+
'arpa/inet.h',
20+
'byteswap.h',
21+
'errno.h',
22+
'fcntl.h',
23+
'inttypes.h',
24+
'limits.h',
25+
'linux/serial.h',
26+
'netdb.h',
27+
'netinet/in.h',
28+
'netinet/tcp.h',
29+
'stdint.h',
30+
'sys/ioctl.h',
31+
'sys/params.h',
32+
'sys/socket.h',
33+
'sys/time.h',
34+
'sys/types.h',
35+
'termios.h',
36+
'time.h',
37+
'unistd.h',
38+
]
39+
40+
foreach h : check_headers
41+
if cc.has_header(h)
42+
cdata.set('HAVE_' + h.underscorify().to_upper(), 1)
43+
endif
44+
endforeach
45+
46+
check_functions = [
47+
['HAVE_ACCEPT4', 'accept4', '#include<sys/socket.h>'],
48+
['HAVE_GETADDRINFO', 'getaddrinfo', '#include<netdb.h>'],
49+
['HAVE_GETTIMEOFDAY', 'gettimeofday', '#include<sys/time.h>'],
50+
['HAVE_SELECT', 'select', '#include<sys/select.h>'],
51+
['HAVE_SOCKET', 'socket', '#include<sys/socket.h>'],
52+
['HAVE_STRERROR', 'strerror', '#include<string.h>'],
53+
['HAVE_STRLCPY', 'strlcpy', '#include<string.h>'],
54+
]
55+
56+
foreach f : check_functions
57+
if cc.has_function(f.get(1), prefix : f.get(2))
58+
cdata.set(f.get(0), 1)
59+
endif
60+
endforeach
61+
62+
configure_file(output : 'config.h',
63+
configuration : cdata)
64+
65+
subdir('src')
66+
subdir('tests')

src/meson.build

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
modbus_version_h = configure_file(input : 'modbus-version.h.in',
2+
output : 'modbus-version.h',
3+
configuration : ver_conf)
4+
5+
sources = files([
6+
'modbus.c',
7+
'modbus-data.c',
8+
'modbus-rtu.c',
9+
'modbus-tcp.c',
10+
])
11+
12+
headers = [
13+
'modbus.h',
14+
modbus_version_h,
15+
'modbus-rtu.h',
16+
'modbus-tcp.h',
17+
]
18+
install_headers(headers, subdir : 'modbus')
19+
20+
lt_current = 6
21+
lt_revision = 0
22+
lt_age = 1
23+
lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
24+
25+
modbuslib = library('modbus', sources,
26+
version: lt_version,
27+
soversion: lt_current,
28+
include_directories : include_directories('..'),
29+
install : true)

tests/meson.build

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
configure_file(input : 'unit-test.h.in',
2+
output : 'unit-test.h',
3+
configuration : cdata)
4+
5+
incdir = include_directories('../src')
6+
7+
bandwidth_server_one = executable(
8+
'bandwidth-server-one', 'bandwidth-server-one.c',
9+
link_with : modbuslib,
10+
include_directories : incdir
11+
)
12+
13+
bandwidth_server_many_up = executable(
14+
'bandwidth-server-many-up', 'bandwidth-server-many-up.c',
15+
link_with : modbuslib,
16+
include_directories : incdir
17+
)
18+
19+
bandwidth_client = executable(
20+
'bandwidth-client', 'bandwidth-client.c',
21+
link_with : modbuslib,
22+
include_directories : incdir
23+
)
24+
25+
random_test_server = executable(
26+
'random-test-server', 'random-test-server.c',
27+
link_with : modbuslib,
28+
include_directories : incdir
29+
)
30+
31+
random_test_client = executable(
32+
'random-test-client', 'random-test-client.c',
33+
link_with : modbuslib,
34+
include_directories : incdir
35+
)
36+
37+
unit_test_server = executable(
38+
'unit-test-server', 'unit-test-server.c',
39+
link_with : modbuslib,
40+
include_directories : incdir
41+
)
42+
43+
unit_test_client = executable(
44+
'unit-test-client', 'unit-test-client.c',
45+
link_with : modbuslib,
46+
include_directories : incdir
47+
)
48+
49+
test('unit-tests', find_program('unit-tests.sh'),
50+
workdir : meson.current_build_dir())

0 commit comments

Comments
 (0)