From e429b4c52611042f058c63626845501fecbc2b80 Mon Sep 17 00:00:00 2001 From: Jon Ringle Date: Tue, 8 Nov 2022 00:54:33 -0500 Subject: [PATCH] meson build: Add support for meson build --- meson.build | 66 +++++++++++++++++++++++++++++++++++++++++++++++ src/meson.build | 29 +++++++++++++++++++++ tests/meson.build | 50 +++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 meson.build create mode 100644 src/meson.build create mode 100644 tests/meson.build diff --git a/meson.build b/meson.build new file mode 100644 index 000000000..681657f6b --- /dev/null +++ b/meson.build @@ -0,0 +1,66 @@ +project('libmodbus', 'c', version : '3.1.8') + +libmodbus_version = meson.project_version() +ver_arr = libmodbus_version.split('.') + +libmodbus_version_major = ver_arr[0] +libmodbus_version_minor = ver_arr[1] +libmodbus_version_micro = ver_arr[2] + +ver_conf = configuration_data() +ver_conf.set('LIBMODBUS_VERSION', libmodbus_version) +ver_conf.set('LIBMODBUS_VERSION_MAJOR', libmodbus_version_major) +ver_conf.set('LIBMODBUS_VERSION_MINOR', libmodbus_version_minor) +ver_conf.set('LIBMODBUS_VERSION_MICRO', libmodbus_version_micro) + +cc = meson.get_compiler('c') +cdata = configuration_data() +check_headers = [ + 'arpa/inet.h', + 'byteswap.h', + 'errno.h', + 'fcntl.h', + 'inttypes.h', + 'limits.h', + 'linux/serial.h', + 'netdb.h', + 'netinet/in.h', + 'netinet/tcp.h', + 'stdint.h', + 'sys/ioctl.h', + 'sys/params.h', + 'sys/socket.h', + 'sys/time.h', + 'sys/types.h', + 'termios.h', + 'time.h', + 'unistd.h', +] + +foreach h : check_headers + if cc.has_header(h) + cdata.set('HAVE_' + h.underscorify().to_upper(), 1) + endif +endforeach + +check_functions = [ + ['HAVE_ACCEPT4', 'accept4', '#include'], + ['HAVE_GETADDRINFO', 'getaddrinfo', '#include'], + ['HAVE_GETTIMEOFDAY', 'gettimeofday', '#include'], + ['HAVE_SELECT', 'select', '#include'], + ['HAVE_SOCKET', 'socket', '#include'], + ['HAVE_STRERROR', 'strerror', '#include'], + ['HAVE_STRLCPY', 'strlcpy', '#include'], +] + +foreach f : check_functions + if cc.has_function(f.get(1), prefix : f.get(2)) + cdata.set(f.get(0), 1) + endif +endforeach + +configure_file(output : 'config.h', + configuration : cdata) + +subdir('src') +subdir('tests') diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 000000000..984f1e6c2 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,29 @@ +modbus_version_h = configure_file(input : 'modbus-version.h.in', + output : 'modbus-version.h', + configuration : ver_conf) + +sources = files([ + 'modbus.c', + 'modbus-data.c', + 'modbus-rtu.c', + 'modbus-tcp.c', +]) + +headers = [ + 'modbus.h', + modbus_version_h, + 'modbus-rtu.h', + 'modbus-tcp.h', +] +install_headers(headers, subdir : 'modbus') + +lt_current = 6 +lt_revision = 0 +lt_age = 1 +lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision) + +modbuslib = library('modbus', sources, + version: lt_version, + soversion: lt_current, + include_directories : include_directories('..'), + install : true) diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 000000000..fb30f49ed --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,50 @@ +configure_file(input : 'unit-test.h.in', + output : 'unit-test.h', + configuration : cdata) + +incdir = include_directories('../src') + +bandwidth_server_one = executable( + 'bandwidth-server-one', 'bandwidth-server-one.c', + link_with : modbuslib, + include_directories : incdir +) + +bandwidth_server_many_up = executable( + 'bandwidth-server-many-up', 'bandwidth-server-many-up.c', + link_with : modbuslib, + include_directories : incdir +) + +bandwidth_client = executable( + 'bandwidth-client', 'bandwidth-client.c', + link_with : modbuslib, + include_directories : incdir +) + +random_test_server = executable( + 'random-test-server', 'random-test-server.c', + link_with : modbuslib, + include_directories : incdir +) + +random_test_client = executable( + 'random-test-client', 'random-test-client.c', + link_with : modbuslib, + include_directories : incdir +) + +unit_test_server = executable( + 'unit-test-server', 'unit-test-server.c', + link_with : modbuslib, + include_directories : incdir +) + +unit_test_client = executable( + 'unit-test-client', 'unit-test-client.c', + link_with : modbuslib, + include_directories : incdir +) + +test('unit-tests', find_program('unit-tests.sh'), + workdir : meson.current_build_dir())