# Copyright (c) 2024 Tenstorrent AI ULC
#
# SPDX-License-Identifier: Apache-2.0

# This file should be removed after Zephyr 4.0 is released

menu "Deprecated POSIX options"

config EVENTFD_MAX
	int "Maximum number of eventfd's [DEPRECATED]"
	default ZVFS_EVENTFD_MAX if ZVFS_EVENTFD
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_ZVFS_EVENTFD_MAX instead.

config FNMATCH
	bool "Support for fnmatch [DEPRECATED]"
	select DEPRECATED
	select POSIX_C_LIB_EXT
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_C_LIB_EXT instead.

config GETOPT
	bool "Getopt library support [DEPRECATED]"
	select DEPRECATED
	select POSIX_C_LIB_EXT
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_C_LIB_EXT instead.

config MAX_PTHREAD_COUNT
	int "Maximum number of pthread_t [DEPRECATED]"
	default POSIX_THREAD_THREADS_MAX if POSIX_THREADS
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREAD_THREADS_MAX instead.

config MAX_PTHREAD_KEY_COUNT
	int "Maximum number of pthread_key_t [DEPRECATED]"
	default POSIX_THREAD_KEYS_MAX if POSIX_THREADS
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREAD_KEYS_MAX instead.

config MAX_TIMER_COUNT
	int "Maximum number of timer_t [DEPRECATED]"
	default POSIX_TIMER_MAX if POSIX_TIMERS
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_TIMER_MAX instead.

config MSG_COUNT_MAX
	int "Maximum number of messages in a POSIX message queue [DEPRECATED]"
	default POSIX_MQ_OPEN_MAX if POSIX_MESSAGE_PASSING
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_MQ_OPEN_MAX instead.

config POSIX_CLOCK
	bool "clock and sleep APIs [DEPRECATED]"
	select DEPRECATED
	select POSIX_CLOCK_SELECTION
	select POSIX_CPUTIME
	select POSIX_MONOTONIC_CLOCK
	select POSIX_TIMERS
	select POSIX_TIMEOUTS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_TIMERS instead.

config POSIX_FS
	bool "Support for environ, getenv(), getenv_r(), setenv(), and unsetenv() [DEPRECATED]"
	select DEPRECATED
	select POSIX_FILE_SYSTEM
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_FILE_SYSTEM instead.

config POSIX_LIMITS_RTSIG_MAX
	int "_POSIX_RTSIG_MAX value in limits.h [DEPRECATED]"
	default POSIX_RTSIG_MAX if POSIX_REALTIME_SIGNALS
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_RTSIG_MAX instead.

config POSIX_MAX_FDS
	int "Maximum number of open file descriptors [DEPRECATED]"
	default POSIX_OPEN_MAX
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_OPEN_MAX instead.

	  See also CONFIG_ZVFS_OPEN_MAX.

config POSIX_MAX_OPEN_FILES
	int "Maximum number of open file descriptors [DEPRECATED]"
	default POSIX_OPEN_MAX
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_OPEN_MAX instead.

	  See also CONFIG_ZVFS_OPEN_MAX.

config POSIX_MQUEUE
	bool "Message queue support [DEPRECATED]"
	select DEPRECATED
	select POSIX_MESSAGE_PASSING
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_MESSAGE_PASSING instead.

config POSIX_PUTMSG
	bool "Support for putmsg function [DEPRECATED]"
	select DEPRECATED
	select XOPEN_STREAMS
	help
	  This option is deprecated.

	  Please use CONFIG_XOPEN_STREAMS instead.

config POSIX_SIGNAL
	bool "Support for POSIX signal APIs [DEPRECATED]"
	select DEPRECATED
	select POSIX_SIGNALS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SIGNALS instead.

config POSIX_SYSCONF
	bool "Support for sysconf() [DEPRECATED]"
	select DEPRECATED
	select POSIX_SINGLE_PROCESS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SINGLE_PROCESS instead.

config POSIX_UNAME
	bool "Support for uname [DEPRECATED]"
	select DEPRECATED
	select POSIX_SINGLE_PROCESS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SINGLE_PROCESS instead.

config PTHREAD
	bool "pthread_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_THREADS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREADS instead.

config PTHREAD_BARRIER
	bool "pthread_barrier_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_BARRIERS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_BARRIERS instead.

config PTHREAD_COND
	bool "pthread_cond_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_THREADS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREADS instead.


config PTHREAD_IPC
	bool "POSIX pthread IPC API [DEPRECATED]"
	select DEPRECATED
	select POSIX_THREADS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREADS instead.

config PTHREAD_KEY
	bool "pthread_key_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_THREADS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREADS instead.

config PTHREAD_MUTEX
	bool "pthread_mutex_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_THREADS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_THREADS instead.

config PTHREAD_RWLOCK
	bool "pthread_spinlock_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_READER_WRITER_LOCKS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_READER_WRITER_LOCKS instead.

config PTHREAD_SPINLOCK
	bool "pthread_spinlock_t support [DEPRECATED]"
	select DEPRECATED
	select POSIX_SPIN_LOCKS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SPIN_LOCKS instead.

config TIMER
	bool "Timer support [DEPRECATED]"
	select DEPRECATED
	select POSIX_TIMERS
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_TIMERS instead.

config TIMER_DELAYTIMER_MAX
	int "Maximum count returned my timer_getoverrun() in POSIX application [DEPRECATED]"
	default POSIX_DELAYTIMER_MAX if POSIX_TIMERS
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_DELAYTIMER_MAX instead.

config SEM_NAMELEN_MAX
	int "Maximum name length [DEPRECATED]"
	default POSIX_SEM_NAMELEN_MAX if POSIX_SEMAPHORES
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SEM_NAMELEN_MAX instead.

config SEM_VALUE_MAX
	int "Maximum semaphore limit [DEPRECATED]"
	default POSIX_SEM_VALUE_MAX if POSIX_SEMAPHORES
	default 0
	help
	  This option is deprecated.

	  Please use CONFIG_POSIX_SEM_VALUE_MAX instead.

endmenu
