diff options
author | loli10K <[email protected]> | 2018-03-18 09:34:45 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-05-01 10:33:35 -0700 |
commit | 85ce3f4fd114cf3c7a77feb07b397d43b90d11c7 (patch) | |
tree | 44e954831ea4375a3cabc1c4615ac3e6738d8a1e /config/always-pyzfs.m4 | |
parent | 6abf922574f39ad597ae122fa43d2fa811970720 (diff) |
Adopt pyzfs from ClusterHQ
This commit introduces several changes:
* Update LICENSE and project information
* Give a good PEP8 talk to existing Python source code
* Add RPM/DEB packaging for pyzfs
* Fix some outstanding issues with the existing pyzfs code caused by
changes in the ABI since the last time the code was updated
* Integrate pyzfs Python unittest with the ZFS Test Suite
* Add missing libzfs_core functions: lzc_change_key,
lzc_channel_program, lzc_channel_program_nosync, lzc_load_key,
lzc_receive_one, lzc_receive_resumable, lzc_receive_with_cmdprops,
lzc_receive_with_header, lzc_reopen, lzc_send_resume, lzc_sync,
lzc_unload_key, lzc_remap
Note: this commit slightly changes zfs_ioc_unload_key() ABI. This allow
to differentiate the case where we tried to unload a key on a
non-existing dataset (ENOENT) from the situation where a dataset has
no key loaded: this is consistent with the "change" case where trying
to zfs_ioc_change_key() from a dataset with no key results in EACCES.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: loli10K <[email protected]>
Closes #7230
Diffstat (limited to 'config/always-pyzfs.m4')
-rw-r--r-- | config/always-pyzfs.m4 | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/config/always-pyzfs.m4 b/config/always-pyzfs.m4 new file mode 100644 index 000000000..1df11a5d7 --- /dev/null +++ b/config/always-pyzfs.m4 @@ -0,0 +1,125 @@ +dnl # +dnl # ZFS_AC_PYTHON_MODULE(module_name, [action-if-true], [action-if-false]) +dnl # +dnl # Checks for Python module. Freely inspired by AX_PYTHON_MODULE +dnl # https://www.gnu.org/software/autoconf-archive/ax_python_module.html +dnl # +AC_DEFUN([ZFS_AC_PYTHON_MODULE],[ + PYTHON_NAME=`basename $PYTHON` + AC_MSG_CHECKING([for $PYTHON_NAME module: $1]) + $PYTHON -c "import $1" 2>/dev/null + if test $? -eq 0; + then + AC_MSG_RESULT(yes) + m4_ifvaln([$2], [$2]) + else + AC_MSG_RESULT(no) + m4_ifvaln([$3], [$3]) + fi +]) + +dnl # +dnl # ZFS_AC_PYTHON_VERSION(version, [action-if-true], [action-if-false]) +dnl # +dnl # Verify Python version +dnl # +AC_DEFUN([ZFS_AC_PYTHON_VERSION], [ + AC_MSG_CHECKING([for a version of Python $1]) + version_check=`$PYTHON -c "import sys; print (sys.version.split()[[0]] $1)"` + if test "$version_check" = "True"; + then + AC_MSG_RESULT(yes) + m4_ifvaln([$2], [$2]) + else + AC_MSG_RESULT(no) + m4_ifvaln([$3], [$3]) + fi + +]) + +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYZFS], [ + PYTHON_REQUIRED_VERSION="<= '2.7.x'" + + AC_ARG_ENABLE([pyzfs], + AC_HELP_STRING([--enable-pyzfs], + [install libzfs_core python bindings @<:@default=check@:>@]), + [enable_pyzfs=$enableval], + [enable_pyzfs=check]) + + AM_PATH_PYTHON([2.7], [], [ + AS_IF([test ! "x$enable_pyzfs" = xyes], [ + AC_MSG_ERROR("python >= 2.7 is not installed") + ], [test ! "x$enable_pyzfs" = xno], [ + enable_pyzfs=no + ]) + ]) + AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :]) + + dnl # + dnl # Python 2.7.x is supported, other versions (3.5) are not yet + dnl # + AS_IF([test "x$enable_pyzfs" = xcheck], [ + ZFS_AC_PYTHON_VERSION([$PYTHON_REQUIRED_VERSION], [], [ + AS_IF([test "x$enable_pyzfs" = xyes], [ + AC_MSG_ERROR("Python $PYTHON_REQUIRED_VERSION is not available") + ], [test ! "x$enable_pyzfs" = xno], [ + enable_pyzfs=no + ]) + ]) + ]) + + dnl # + dnl # Require python-devel libraries + dnl # + AS_IF([test "x$enable_pyzfs" = xcheck], [ + AX_PYTHON_DEVEL([$PYTHON_REQUIRED_VERSION], [ + AS_IF([test "x$enable_pyzfs" = xyes], [ + AC_MSG_ERROR("Python development library is not available") + ], [test ! "x$enable_pyzfs" = xno], [ + enable_pyzfs=no + ]) + ]) + ]) + + dnl # + dnl # Python "setuptools" module is required to build and install pyzfs + dnl # + AS_IF([test "x$enable_pyzfs" = xcheck], [ + ZFS_AC_PYTHON_MODULE([setuptools], [], [ + AS_IF([test "x$enable_pyzfs" = xyes], [ + AC_MSG_ERROR("python-setuptools is not installed") + ], [test ! "x$enable_pyzfs" = xno], [ + enable_pyzfs=no + ]) + ]) + ]) + + dnl # + dnl # Python "cffi" module is required to run pyzfs + dnl # + AS_IF([test "x$enable_pyzfs" = xcheck], [ + ZFS_AC_PYTHON_MODULE([cffi], [], [ + AS_IF([test "x$enable_pyzfs" = xyes], [ + AC_MSG_ERROR("python-cffi is not installed") + ], [test ! "x$enable_pyzfs" = xno], [ + enable_pyzfs=no + ]) + ]) + ]) + + dnl # + dnl # Set enable_pyzfs to 'yes' if every check passed + dnl # + AS_IF([test "x$enable_pyzfs" = xcheck], [enable_pyzfs=yes]) + + AM_CONDITIONAL([PYZFS_ENABLED], [test x$enable_pyzfs = xyes]) + AC_SUBST([PYZFS_ENABLED], [$enable_pyzfs]) + + AS_IF([test "x$enable_pyzfs" = xyes], [ + DEFINE_PYZFS='--define "_pyzfs 1"' + ],[ + DEFINE_PYZFS='' + ]) + AC_SUBST(DEFINE_PYZFS) + AC_SUBST(pythonsitedir, [$PYTHON_SITE_PKG]) +]) |