%if %{with_libssh}
BuildRequires: libssh-devel >= 0.8.1
%endif
-BuildRequires: rpcgen
BuildRequires: libtirpc-devel
# Needed for the firewalld_reload macro
%if %{with_firewalld_zone}
'xsltproc',
]
-required_programs_groups = [
- { 'name': 'rpcgen', 'prog': [ 'rpcgen', 'portable-rpcgen' ] },
-]
-
if host_machine.system() == 'freebsd'
required_programs += 'ifconfig'
endif
set_variable('@0@_prog'.format(varname), prog)
endforeach
-foreach item : required_programs_groups
- prog = find_program(item.get('prog'), dirs: libvirt_sbin_path)
- varname = item.get('name').underscorify()
- conf.set_quoted(varname.to_upper(), prog.full_path())
- set_variable('@0@_prog'.format(varname), prog)
-endforeach
-
# optional programs
optional_programs = [
+subdir('rpcgen')
+
if pytest_prog.found()
subdir('tests')
workdir: meson.current_source_dir(),
)
endif
+
+rpcgen_prog = find_program('main.py')
+rpcgen_src += files(['main.py'])
--- /dev/null
+rpcgen_src = files([
+ 'ast.py',
+ 'lexer.py',
+ 'generator.py',
+ 'parser.py',
+ 'visitor.py',
+])
'admin_protocol.h',
input: admin_driver_protocol,
output: 'admin_protocol.h',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
],
)
admin_driver_generated += admin_protocol_h
'admin_protocol.c',
input: admin_driver_protocol,
output: 'admin_protocol.c',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=admin_protocol.h', '@INPUT@', '@OUTPUT@',
],
)
'lock_protocol.h',
input: lock_protocol,
output: 'lock_protocol.h',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
],
)
'lock_protocol.c',
input: lock_protocol,
output: 'lock_protocol.c',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=lock_protocol.h', '@INPUT@', '@OUTPUT@',
],
)
'log_protocol.h',
input: log_protocol,
output: 'log_protocol.h',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@'
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
],
)
log_protocol_generated += log_protocol_header_generated
'log_protocol.c',
input: log_protocol,
output: 'log_protocol.c',
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@'
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=log_protocol.h', '@INPUT@', '@OUTPUT@',
],
)
'lxc_monitor_protocol_h',
input: lxc_monitor_protocol,
output: 'lxc_monitor_protocol.h',
- command: [ genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@' ]
+ depend_files: rpcgen_src,
+ command: [
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
+ ]
)
lxc_monitor_protocol_generated += custom_target(
'lxc_monitor_protocol_c',
input: lxc_monitor_protocol,
output: 'lxc_monitor_protocol.c',
- command: [ genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@' ]
+ depend_files: rpcgen_src,
+ command: [
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=lxc_monitor_protocol.h', '@INPUT@', '@OUTPUT@',
+ ],
)
lxc_monitor_generated = custom_target(
protocol_h,
input: protocol_x,
output: protocol_h,
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
],
)
protocol_c,
input: protocol_x,
output: protocol_c,
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=' + protocol_h, '@INPUT@', '@OUTPUT@',
],
)
+++ /dev/null
-#!/usr/bin/env perl
-#
-# Generate code for an XDR protocol, applying
-# fixups to the glibc rpcgen code so that it compiles
-# with warnings turned on.
-#
-# This code is evil. Arguably better would be just to compile
-# without -Werror. Update: The IXDR_PUT_LONG replacements are
-# actually fixes for 64 bit, so this file is necessary. Arguably
-# so is the type-punning fix.
-#
-# Copyright (C) 2007, 2011-2013 Red Hat, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library. If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# Richard Jones <rjones@redhat.com>
-
-use strict;
-
-my $in_function = 0;
-my @function = ();
-
-my $rpcgen = shift;
-my $mode = shift;
-my $xdrdef = shift;
-my $target = shift;
-
-unlink $target;
-
-if ($rpcgen =~ /portable-rpcgen/) {
- $rpcgen = "$rpcgen -o -";
-} else {
- $rpcgen = "$rpcgen -C";
-}
-open RPCGEN, "-|", "$rpcgen $mode $xdrdef"
- or die "cannot run $rpcgen $mode $xdrdef: $!";
-open TARGET, ">$target"
- or die "cannot create $target: $!";
-
-if ($mode eq "-c") {
- print TARGET "#include <config.h>\n";
-}
-
-while (<RPCGEN>) {
- if (m/^{/) {
- $in_function = 1;
- print TARGET;
- next;
- }
-
- s/\t/ /g;
-
- # Fix VPATH builds
- s,#include ".*/([^/]+)protocol\.h",#include "${1}protocol.h",;
-
- # Portability for Solaris RPC
- s/u_quad_t/uint64_t/g;
- s/quad_t/int64_t/g;
- s/xdr_u_quad_t/xdr_uint64_t/g;
- s/xdr_quad_t/xdr_int64_t/g;
- s/(?<!IXDR_GET_INT32 )IXDR_GET_LONG/IXDR_GET_INT32/g;
-
- if (m/^}/) {
- $in_function = 0;
-
- # Note: The body of the function is in @function.
-
- # Remove decl of buf, if buf isn't used in the function.
- my @uses = grep /[^.>]\bbuf\b/, @function;
- @function = grep !/[^.>]\bbuf\b/, @function if @uses == 1;
-
- # Remove decl of i, if i isn't used in the function.
- @uses = grep /[^.>]\bi\b/, @function;
- @function = grep !/[^.>]\bi\b/, @function if @uses == 1;
-
- # The code uses 'IXDR_PUT_{U_,}LONG' but it's wrong in two
- # ways: Firstly these functions are deprecated and don't
- # work on 64 bit platforms. Secondly the return value should
- # be ignored. Correct both these mistakes.
- @function =
- map { s/\bIXDR_PUT_((U_)?)LONG\b/(void)IXDR_PUT_$1INT32/; $_ }
- map { s/\bXDR_INLINE\b/(int32_t*)XDR_INLINE/; $_ }
- @function;
-
- print TARGET (join ("", @function));
- @function = ();
- }
-
- unless ($in_function) {
- print TARGET;
- } else {
- push @function, $_;
- }
-}
-
-close TARGET
- or die "cannot save $target: $!";
-close RPCGEN
- or die "cannot shutdown $rpcgen: $!";
-
-chmod 0444, $target
- or die "cannot set $target readonly: $!";
-genprotocol_prog = find_program('genprotocol.pl')
gendispatch_prog = find_program('gendispatch.pl')
socket_sources = [
header_file,
input: protocol_file,
output: header_file,
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-h', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=header', '@INPUT@', '@OUTPUT@',
],
)
source_file,
input: protocol_file,
output: source_file,
+ depend_files: rpcgen_src,
command: [
- genprotocol_prog, rpcgen_prog, '-c', '@INPUT@', '@OUTPUT@',
+ meson_python_prog, python3_prog, rpcgen_prog,
+ '--mode=source', '--header=' + header_file, '@INPUT@', '@OUTPUT@',
],
)