config BR2_PACKAGE_REFPOLICY
	bool "refpolicy"
	depends on BR2_TOOLCHAIN_HAS_THREADS # libsepol
	# Even though libsepol is not necessary for building, we get
	# the policy version from libsepol, so we select it, and treat
	# it like a runtime dependency.
	select BR2_PACKAGE_LIBSEPOL
	help
	  The SELinux Reference Policy project (refpolicy) is a
	  complete SELinux policy that can be used as the system
	  policy for a variety of systems and used as the basis for
	  creating other policies. Reference Policy was originally
	  based on the NSA example policy, but aims to accomplish many
	  additional goals.

	  The current refpolicy does not fully support Buildroot and
	  needs modifications to work with the default system file
	  layout. These changes should be added as patches to the
	  refpolicy that modify a single SELinux policy.

	  The refpolicy works for the most part in permissive
	  mode. Only the basic set of utilities are enabled in the
	  example policy config and some of the pathing in the
	  policies is not correct.  Individual policies would need to
	  be tweaked to get everything functioning properly.

	  https://github.com/TresysTechnology/refpolicy

if BR2_PACKAGE_REFPOLICY

choice
	prompt "Refpolicy version"
	default BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION

config BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION
	bool "Upstream version"
	help
	  Use the refpolicy as provided by Buildroot.

config BR2_PACKAGE_REFPOLICY_CUSTOM_GIT
	bool "Custom git repository"
	help
	  Allows to get the refpolicy from a custom git repository.

	  The custom refpolicy must define the full policy explicitly,
	  and must be a fork of the original refpolicy, to have the
	  same build system.  When this is selected, only the custom
	  policy definition are taken into account and all the modules
	  of the policy are built into the binary policy.

endchoice

if BR2_PACKAGE_REFPOLICY_CUSTOM_GIT

config BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL
	string "URL of custom repository"

config BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION
	string "Custom repository version"
	help
	  Revision to use in the typical format used by Git.
	  E.g. a sha id, tag, branch...

endif

choice
	prompt "SELinux default state"
	default BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE

config BR2_PACKAGE_REFPOLICY_POLICY_STATE_ENFORCING
	bool "Enforcing"
	help
	  SELinux security policy is enforced

config BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE
	bool "Permissive"
	help
	  SELinux prints warnings instead of enforcing

config BR2_PACKAGE_REFPOLICY_POLICY_STATE_DISABLED
	bool "Disabled"
	help
	  No SELinux policy is loaded
endchoice

config BR2_PACKAGE_REFPOLICY_POLICY_STATE
	string
	default "permissive" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_PERMISSIVE
	default "enforcing" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_ENFORCING
	default "disabled" if BR2_PACKAGE_REFPOLICY_POLICY_STATE_DISABLED

if BR2_PACKAGE_REFPOLICY_UPSTREAM_VERSION

config BR2_REFPOLICY_EXTRA_MODULES_DIRS
	string "Extra modules directories"
	help
	  Specify a space-separated list of directories containing
	  SELinux modules that will be built into the SELinux
	  policy. The modules will be automatically enabled in the
	  policy.

	  Each of those directories must contain the SELinux policy
	  .fc, .if and .te files directly at the top-level, with no
	  sub-directories. Also, you cannot have several modules with
	  the same name in different directories.

config BR2_REFPOLICY_EXTRA_MODULES
	string "Extra modules to enable"
	help
	  List of extra SELinux modules to enable in the refpolicy.

endif

endif

comment "refpolicy needs a toolchain w/ threads"
	depends on !BR2_TOOLCHAIN_HAS_THREADS
