summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/modules/wscript_build24
1 files changed, 17 insertions, 7 deletions
diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
index c666aa07a2c..30347e0fc6d 100644
--- a/source3/modules/wscript_build
+++ b/source3/modules/wscript_build
@@ -242,13 +242,6 @@ bld.SAMBA3_MODULE('vfs_zfsacl',
internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_zfsacl'),
enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_zfsacl'))
-xdr_buf_hack = 'sed -e "s@^\([ \t]*register int32_t \*buf\);@\\1 = buf;@"'
-
-bld.SAMBA_GENERATOR('nfs41acl-xdr-c',
- source='nfs41acl.x',
- target='nfs41acl_xdr.c',
- rule='rpcgen -c ${SRC} | ' + xdr_buf_hack + ' > ${TGT}')
-
bld.SAMBA_GENERATOR('nfs41acl-h',
source='nfs41acl.x',
target='nfs41acl.h',
@@ -261,6 +254,23 @@ vfs_nfs4acl_xattr_source = '''
'''
if bld.CONFIG_SET("HAVE_RPC_XDR_H"):
+ xdr_buf_hack = 'sed -e "s@^\([ \t]*register int32_t \*buf\);@\\1 = buf;@"'
+
+ # By default rpcgen assumes that the input file, generated header and
+ # source file are located in the same directory, which is extracted from
+ # the provided path to the input file.
+ # However if the build directory is not under the source tree, ${SRC} will
+ # be a long relative path through a common parent directory, resulting
+ # in an invalid path used in #include for the header.
+ # In order to fix that, the input file is first copied to the output build
+ # directory and then rpcgen is called with the proper path.
+ bld.SAMBA_GENERATOR('nfs41acl-xdr-c',
+ source='nfs41acl.x',
+ target='nfs41acl_xdr.c',
+ rule='cp -f ${SRC} ${TGT[0].parent} && rpcgen -c ' \
+ '${TGT[0].path_from(tsk.get_cwd())[:-len(tsk.outputs[0].name)] + tsk.inputs[0].name} | ' + \
+ xdr_buf_hack + ' > ${TGT}')
+
vfs_nfs4acl_xattr_source += ' nfs41acl_xdr.c'
bld.SAMBA3_MODULE('vfs_nfs4acl_xattr',