c417f6b
# installation paths
c417f6b
SHAREDIR := $(PREFIX)/share/selinux
c417f6b
HEADERDIR := $(SHAREDIR)/refpolicy/include
de82d85
c417f6b
include $(HEADERDIR)/build.conf
de82d85
de82d85
# executables
de82d85
PREFIX := /usr
de82d85
BINDIR := $(PREFIX)/bin
de82d85
SBINDIR := $(PREFIX)/sbin
de82d85
CHECKMODULE := $(BINDIR)/checkmodule
de82d85
SEMODULE := $(SBINDIR)/semodule
de82d85
SEMOD_PKG := $(BINDIR)/semodule_package
c417f6b
XMLLINT := $(BINDIR)/xmllint
de82d85
de82d85
# helper tools
de82d85
AWK ?= gawk
de82d85
INSTALL ?= install
de82d85
M4 ?= m4
de82d85
SED ?= sed
de82d85
EINFO ?= echo
c417f6b
PYTHON ?= python
de82d85
c417f6b
# set default build options if missing
de82d85
NAME ?= $(shell . /etc/selinux/config; echo $$SELINUXTYPE)
de82d85
MLSENABLED := $(shell cat /selinux/mls)
c417f6b
MODPKGDIR := $(SHAREDIR)/$(NAME)
de82d85
de82d85
ifeq ($(MLSENABLED),1)
de82d85
MCSFLAG=-mcs
de82d85
endif
de82d85
de82d85
TYPE ?= $(NAME)${MCSFLAG}
de82d85
DIRECT_INITRC ?= n
de82d85
POLY ?= n
c417f6b
QUIET ?= y
de82d85
de82d85
# compile strict policy if requested.
de82d85
ifneq ($(findstring strict,$(TYPE)),)
de82d85
	M4PARAM += -D strict_policy
de82d85
endif
de82d85
de82d85
# compile targeted policy if requested.
de82d85
ifneq ($(findstring targeted,$(TYPE)),)
de82d85
	M4PARAM += -D targeted_policy
de82d85
endif
de82d85
de82d85
# enable MLS if requested.
de82d85
ifneq ($(findstring -mls,$(TYPE)),)
de82d85
	M4PARAM += -D enable_mls
de82d85
	CHECKPOLICY += -M
de82d85
	CHECKMODULE += -M
de82d85
endif
de82d85
de82d85
# enable MLS if MCS requested.
de82d85
ifneq ($(findstring -mcs,$(TYPE)),)
de82d85
	M4PARAM += -D enable_mcs
de82d85
	CHECKPOLICY += -M
de82d85
	CHECKMODULE += -M
de82d85
endif
de82d85
de82d85
# enable distribution-specific policy
de82d85
ifneq ($(DISTRO),)
de82d85
	M4PARAM += -D distro_$(DISTRO)
de82d85
endif
de82d85
de82d85
# enable polyinstantiation
de82d85
ifeq ($(POLY),y)
de82d85
	M4PARAM += -D enable_polyinstantiation
de82d85
endif
de82d85
de82d85
ifeq ($(DIRECT_INITRC),y)
de82d85
	M4PARAM += -D direct_sysadm_daemon
de82d85
endif
de82d85
de82d85
ifneq ($(VERBOSE),y)
de82d85
	quiet := @
de82d85
endif
de82d85
de82d85
M4PARAM += -D hide_broken_symptoms
de82d85
de82d85
# policy headers
de82d85
m4support := $(wildcard $(HEADERDIR)/*.spt)
de82d85
all_interfaces := $(wildcard $(HEADERDIR)/*.if)
de82d85
rolemap := $(HEADERDIR)/rolemap
de82d85
de82d85
detected_mods := $(wildcard *.te)
de82d85
detected_ifs := $(detected_mods:.te=.if)
de82d85
all_packages := $(detected_mods:.te=.pp)
de82d85
install_mods := $(MODPKGDIR)/$(all_packages)
de82d85
de82d85
########################################
de82d85
#
de82d85
# Functions
de82d85
#
de82d85
de82d85
# parse-rolemap modulename,outputfile
de82d85
define parse-rolemap
de82d85
	$(verbose) $(M4) $(M4PARAM) $(rolemap) | \
de82d85
		$(AWK) '/^[[:blank:]]*[A-Za-z]/{ print "gen_require(type " $$3 "; role " $$1 ";)\n$1_per_userdomain_template(" $$2 "," $$3 "," $$1 ")" }' >> $2
de82d85
endef
de82d85
de82d85
# peruser-expansion modulename,outputfile
de82d85
define peruser-expansion
de82d85
	$(verbose) echo "ifdef(\`""$1""_per_userdomain_template',\`" > $2
de82d85
	$(call parse-rolemap,$1,$2)
de82d85
	$(verbose) echo "')" >> $2
de82d85
endef
de82d85
de82d85
########################################
de82d85
#
de82d85
# Main targets
de82d85
#
de82d85
de82d85
all: $(all_packages)
de82d85
de82d85
########################################
de82d85
#
de82d85
# Build module packages
de82d85
#
de82d85
tmp/%.mod: $(m4support) tmp/all_interfaces.conf %.te
de82d85
	@$(EINFO) "Compliling $(NAME) $(basename $(@F)) module"
de82d85
	@test -d tmp || mkdir -p tmp
de82d85
	$(call peruser-expansion,$(basename $(@F)),$@.role)
de82d85
	$(verbose) $(M4) $(M4PARAM) -s $^ $@.role > $(@:.mod=.tmp)
de82d85
	$(verbose) $(CHECKMODULE) -m $(@:.mod=.tmp) -o $@
de82d85
de82d85
tmp/%.mod.fc: $(m4support) %.fc
de82d85
	$(verbose) $(M4) $(M4PARAM) $^ > $@
de82d85
de82d85
%.pp: tmp/%.mod tmp/%.mod.fc
de82d85
	@echo "Creating $(NAME) $(@F) policy package"
de82d85
	$(verbose) $(SEMOD_PKG) -o $@ -m $< -f $<.fc
de82d85
de82d85
tmp/all_interfaces.conf: $(m4support) $(all_interfaces) $(detected_ifs)
de82d85
	@test -d tmp || mkdir -p tmp
de82d85
	$(verbose) m4 $^ | sed -e s/dollarsstar/\$$\*/g > $@
de82d85
de82d85
########################################
de82d85
#
de82d85
# Clean the environment
de82d85
#
de82d85
de82d85
clean:
de82d85
	rm -fR tmp
de82d85
	rm -f *.pp
de82d85
de82d85
.PHONY: clean install all default