modules: Add dependency on tirpc to vfs_nfs4acl_xattr
[samba.git] / source3 / modules / wscript_build
index c666aa07a2cf1b422679abe27cb09f70af32505a..e67a0abe10c7a990c74e84e14854904ef81f8487 100644 (file)
@@ -242,31 +242,44 @@ 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',
                     rule='rpcgen -h ${SRC} > ${TGT}')
 
-vfs_nfs4acl_xattr_source = '''
-                           vfs_nfs4acl_xattr.c
-                           nfs4acl_xattr_ndr.c
-                           nfs4acl_xattr_xdr.c
-                           '''
 
 if bld.CONFIG_SET("HAVE_RPC_XDR_H"):
-    vfs_nfs4acl_xattr_source += ' nfs41acl_xdr.c'
+    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}')
+
+    bld.SAMBA_SUBSYSTEM('VFS_NFS4_XDR',
+                        source='nfs41acl_xdr.c',
+                        deps='NFS4_ACLS NDR_NFS4ACL tirpc')
+else:
+    bld.SET_TARGET_TYPE('VFS_NFS4_XDR', 'EMPTY')
 
 bld.SAMBA3_MODULE('vfs_nfs4acl_xattr',
                   subsystem='vfs',
-                  source=vfs_nfs4acl_xattr_source,
-                  deps='NFS4_ACLS sunacl NDR_NFS4ACL',
+                  source = '''
+                           vfs_nfs4acl_xattr.c
+                           nfs4acl_xattr_ndr.c
+                           nfs4acl_xattr_xdr.c
+                           ''',
+                  deps='NFS4_ACLS sunacl NDR_NFS4ACL VFS_NFS4_XDR',
                   init_function='',
                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_nfs4acl_xattr'),
                   enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_nfs4acl_xattr'))