All checks were successful
Source release / source-package (push) Successful in 47s
Add a FindQuota.cmake module that checks for the Linux quota headers and symbols required by the MARS NWE quota backend. Prefer modern <sys/quota.h> with quotactl(), and keep <linux/quota.h> as fallback for older systems. Enable quota support by default, but only compile it in when the required headers and quota symbols are available. Also move the QTAINSYS define to the detected sys/quota.h path so modern Linux builds use the correct header automatically.
87 lines
3.2 KiB
CMake
87 lines
3.2 KiB
CMake
# - Find Linux quota support
|
|
#
|
|
# This module checks whether the system provides the headers and symbols
|
|
# needed by mars_nwe's Linux user quota backend.
|
|
#
|
|
# It sets:
|
|
# QUOTA_FOUND - true if usable quota support was found
|
|
# QUOTA_USE_SYS_QUOTA_H - true if <sys/quota.h> should be used
|
|
# QUOTA_USE_LINUX_QUOTA_H - true if <linux/quota.h> should be used
|
|
# QUOTA_HAVE_Q_SETQUOTA - true if Q_SETQUOTA is available
|
|
# QUOTA_HAVE_Q_SETQLIM - true if Q_SETQLIM is available
|
|
#
|
|
# Modern Linux/glibc systems declare quotactl() in <sys/quota.h>. Prefer
|
|
# that header. Older systems may only have <linux/quota.h>, which is kept
|
|
# as a fallback for the historical mars_nwe code path.
|
|
|
|
include(CheckIncludeFile)
|
|
include(CheckSymbolExists)
|
|
|
|
set(QUOTA_FOUND FALSE)
|
|
set(QUOTA_USE_SYS_QUOTA_H FALSE)
|
|
set(QUOTA_USE_LINUX_QUOTA_H FALSE)
|
|
|
|
check_include_file("sys/quota.h" QUOTA_HAVE_SYS_QUOTA_H)
|
|
check_include_file("linux/quota.h" QUOTA_HAVE_LINUX_QUOTA_H)
|
|
|
|
if(QUOTA_HAVE_SYS_QUOTA_H)
|
|
check_symbol_exists(quotactl "sys/types.h;sys/quota.h" QUOTA_HAVE_QUOTACTL_SYS)
|
|
check_symbol_exists(QCMD "sys/types.h;sys/quota.h" QUOTA_HAVE_QCMD_SYS)
|
|
check_symbol_exists(Q_GETQUOTA "sys/types.h;sys/quota.h" QUOTA_HAVE_Q_GETQUOTA_SYS)
|
|
check_symbol_exists(USRQUOTA "sys/types.h;sys/quota.h" QUOTA_HAVE_USRQUOTA_SYS)
|
|
check_symbol_exists(Q_SETQUOTA "sys/types.h;sys/quota.h" QUOTA_HAVE_Q_SETQUOTA_SYS)
|
|
check_symbol_exists(Q_SETQLIM "sys/types.h;sys/quota.h" QUOTA_HAVE_Q_SETQLIM_SYS)
|
|
|
|
if(QUOTA_HAVE_QUOTACTL_SYS AND QUOTA_HAVE_QCMD_SYS AND
|
|
QUOTA_HAVE_Q_GETQUOTA_SYS AND QUOTA_HAVE_USRQUOTA_SYS AND
|
|
(QUOTA_HAVE_Q_SETQUOTA_SYS OR QUOTA_HAVE_Q_SETQLIM_SYS))
|
|
set(QUOTA_FOUND TRUE)
|
|
set(QUOTA_USE_SYS_QUOTA_H TRUE)
|
|
set(QUOTA_HAVE_Q_SETQUOTA ${QUOTA_HAVE_Q_SETQUOTA_SYS})
|
|
set(QUOTA_HAVE_Q_SETQLIM ${QUOTA_HAVE_Q_SETQLIM_SYS})
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT QUOTA_FOUND AND QUOTA_HAVE_LINUX_QUOTA_H)
|
|
check_symbol_exists(QCMD "linux/quota.h" QUOTA_HAVE_QCMD_LINUX)
|
|
check_symbol_exists(Q_GETQUOTA "linux/quota.h" QUOTA_HAVE_Q_GETQUOTA_LINUX)
|
|
check_symbol_exists(USRQUOTA "linux/quota.h" QUOTA_HAVE_USRQUOTA_LINUX)
|
|
check_symbol_exists(Q_SETQUOTA "linux/quota.h" QUOTA_HAVE_Q_SETQUOTA_LINUX)
|
|
check_symbol_exists(Q_SETQLIM "linux/quota.h" QUOTA_HAVE_Q_SETQLIM_LINUX)
|
|
|
|
if(QUOTA_HAVE_QCMD_LINUX AND QUOTA_HAVE_Q_GETQUOTA_LINUX AND
|
|
QUOTA_HAVE_USRQUOTA_LINUX AND
|
|
(QUOTA_HAVE_Q_SETQUOTA_LINUX OR QUOTA_HAVE_Q_SETQLIM_LINUX))
|
|
set(QUOTA_FOUND TRUE)
|
|
set(QUOTA_USE_LINUX_QUOTA_H TRUE)
|
|
set(QUOTA_HAVE_Q_SETQUOTA ${QUOTA_HAVE_Q_SETQUOTA_LINUX})
|
|
set(QUOTA_HAVE_Q_SETQLIM ${QUOTA_HAVE_Q_SETQLIM_LINUX})
|
|
endif()
|
|
endif()
|
|
|
|
if(QUOTA_FOUND)
|
|
if(QUOTA_USE_SYS_QUOTA_H)
|
|
message(STATUS "Found Quota: sys/quota.h")
|
|
else()
|
|
message(STATUS "Found Quota: linux/quota.h")
|
|
endif()
|
|
else()
|
|
message(STATUS "Could NOT find Quota")
|
|
endif()
|
|
|
|
mark_as_advanced(
|
|
QUOTA_HAVE_SYS_QUOTA_H
|
|
QUOTA_HAVE_LINUX_QUOTA_H
|
|
QUOTA_HAVE_QUOTACTL_SYS
|
|
QUOTA_HAVE_QCMD_SYS
|
|
QUOTA_HAVE_Q_GETQUOTA_SYS
|
|
QUOTA_HAVE_USRQUOTA_SYS
|
|
QUOTA_HAVE_Q_SETQUOTA_SYS
|
|
QUOTA_HAVE_Q_SETQLIM_SYS
|
|
QUOTA_HAVE_QCMD_LINUX
|
|
QUOTA_HAVE_Q_GETQUOTA_LINUX
|
|
QUOTA_HAVE_USRQUOTA_LINUX
|
|
QUOTA_HAVE_Q_SETQUOTA_LINUX
|
|
QUOTA_HAVE_Q_SETQLIM_LINUX
|
|
)
|