2 # Makefile for the security policy.
6 # install - compile and install the policy configuration, and context files.
7 # load - compile, install, and load the policy configuration.
8 # reload - compile, install, and load/reload the policy configuration.
9 # relabel - relabel filesystems based on the file contexts configuration.
10 # checklabels - check filesystems against the file context configuration
11 # restorelabels - check filesystems against the file context configuration
12 # and restore the label of files with incorrect labels
13 # policy - compile the policy configuration locally for testing/development.
15 # The default target is 'policy'.
18 # Please see build.conf for policy build options.
21 ########################################
23 # NO OPTIONS BELOW HERE
26 # Include the local build.conf if it exists, otherwise
27 # include the configuration of the root directory.
31 -include $(LOCAL_ROOT
)/build.conf
35 VERSION
= $(shell cat VERSION
)
38 BUILDDIR
:= $(LOCAL_ROOT
)/
39 TMPDIR
:= $(LOCAL_ROOT
)/tmp
40 TAGS
:= $(LOCAL_ROOT
)/tags
49 CHECKPOLICY
:= $(BINDIR
)/checkpolicy
50 CHECKMODULE
:= $(BINDIR
)/checkmodule
51 SEMODULE
:= $(SBINDIR
)/semodule
52 SEMOD_PKG
:= $(BINDIR
)/semodule_package
53 SEMOD_LNK
:= $(BINDIR
)/semodule_link
54 SEMOD_EXP
:= $(BINDIR
)/semodule_expand
55 LOADPOLICY
:= $(SBINDIR
)/load_policy
56 SETFILES
:= $(SBINDIR
)/setfiles
57 XMLLINT
:= $(BINDIR
)/xmllint
58 SECHECK
:= $(BINDIR
)/sechecker
60 # interpreters and aux tools
70 # policy source layout
72 MODDIR
:= $(POLDIR
)/modules
73 FLASKDIR
:= $(POLDIR
)/flask
74 SECCLASS
:= $(FLASKDIR
)/security_classes
75 ISIDS
:= $(FLASKDIR
)/initial_sids
76 AVS
:= $(FLASKDIR
)/access_vectors
80 LOCAL_POLDIR
:= $(LOCAL_ROOT
)/policy
81 LOCAL_MODDIR
:= $(LOCAL_POLDIR
)/modules
84 # policy building support tools
86 GENXML
:= $(PYTHON
) $(SUPPORT
)/segenxml.py
87 GENDOC
:= $(PYTHON
) $(SUPPORT
)/sedoctool.py
88 GENPERM
:= $(PYTHON
) $(SUPPORT
)/genclassperms.py
89 FCSORT
:= $(TMPDIR
)/fc_sort
90 SETBOOLS
:= $(AWK
) -f
$(SUPPORT
)/set_bools_tuns.awk
91 get_type_attr_decl
:= $(SED
) -r
-f
$(SUPPORT
)/get_type_attr_decl.sed
92 comment_move_decl
:= $(SED
) -r
-f
$(SUPPORT
)/comment_move_decl.sed
93 # use our own genhomedircon to make sure we have a known usable one,
94 # so policycoreutils updates are not required (RHEL4)
95 genhomedircon
:= $(PYTHON
) $(SUPPORT
)/genhomedircon
99 XMLDTD
= $(DOCS
)/policy.dtd
100 LAYERXML
= metadata.xml
101 DOCTEMPLATE
= $(DOCS
)/templates
102 DOCFILES
= $(DOCS
)/Makefile.example
$(addprefix $(DOCS
)/,example.te example.if example.
fc)
105 POLXML
= $(DOCS
)/policy.xml
106 TUNXML
= $(DOCS
)/global_tunables.xml
107 BOOLXML
= $(DOCS
)/global_booleans.xml
108 HTMLDIR
= $(DOCS
)/html
110 POLXML
= $(LOCAL_ROOT
)/doc
/policy.xml
111 TUNXML
= $(LOCAL_ROOT
)/doc
/global_tunables.xml
112 BOOLXML
= $(LOCAL_ROOT
)/doc
/global_booleans.xml
113 HTMLDIR
= $(LOCAL_ROOT
)/doc
/html
117 GLOBALTUN
= $(POLDIR
)/global_tunables
118 GLOBALBOOL
= $(POLDIR
)/global_booleans
119 TUNABLES
= $(POLDIR
)/tunables.conf
120 ROLEMAP
= $(POLDIR
)/rolemap
121 USER_FILES
:= $(POLDIR
)/users
123 # local config file paths
125 MOD_CONF
= $(POLDIR
)/modules.conf
126 BOOLEANS
= $(POLDIR
)/booleans.conf
128 MOD_CONF
= $(LOCAL_POLDIR
)/modules.conf
129 BOOLEANS
= $(LOCAL_POLDIR
)/booleans.conf
133 PKGNAME ?
= refpolicy-
$(VERSION
)
134 PREFIX
= $(DESTDIR
)/usr
135 TOPDIR
= $(DESTDIR
)/etc
/selinux
136 INSTALLDIR
= $(TOPDIR
)/$(NAME
)
137 SRCPATH
= $(INSTALLDIR
)/src
138 USERPATH
= $(INSTALLDIR
)/users
139 CONTEXTPATH
= $(INSTALLDIR
)/contexts
140 FCPATH
= $(CONTEXTPATH
)/files
/file_contexts
141 SHAREDIR
= $(PREFIX
)/share
/selinux
142 MODPKGDIR
= $(SHAREDIR
)/$(NAME
)
143 HEADERDIR
= $(MODPKGDIR
)/include
144 DOCSDIR
= $(PREFIX
)/share
/doc
/$(PKGNAME
)
146 # compile strict policy if requested.
147 ifneq ($(findstring strict
,$(TYPE
)),)
148 M4PARAM
+= -D strict_policy
151 # compile targeted policy if requested.
152 ifneq ($(findstring targeted
,$(TYPE
)),)
153 M4PARAM
+= -D targeted_policy
156 # enable MLS if requested.
157 ifneq ($(findstring -mls
,$(TYPE
)),)
158 M4PARAM
+= -D enable_mls
163 # enable MLS if MCS requested.
164 ifneq ($(findstring -mcs
,$(TYPE
)),)
165 M4PARAM
+= -D enable_mcs
170 # enable distribution-specific policy
172 M4PARAM
+= -D distro_
$(DISTRO
)
175 # rhel4 also implies redhat
176 ifeq "$(DISTRO)" "rhel4"
177 M4PARAM
+= -D distro_redhat
180 # enable polyinstantiation
182 M4PARAM
+= -D enable_polyinstantiation
185 ifneq ($(OUTPUT_POLICY
),)
186 CHECKPOLICY
+= -c
$(OUTPUT_POLICY
)
189 # if not set, use the type as the name.
192 ifeq ($(DIRECT_INITRC
),y
)
193 M4PARAM
+= -D direct_sysadm_daemon
200 M4PARAM
+= -D hide_broken_symptoms
202 # we need exuberant ctags; unfortunately it is named
203 # differently on different distros
204 ifeq ($(DISTRO
),debian
)
205 CTAGS
:= ctags-exuberant
208 ifeq ($(DISTRO
),gentoo
)
209 CTAGS
:= exuberant-ctags
214 # determine the policy version and current kernel version if possible
215 PV
:= $(shell $(CHECKPOLICY
) -V |cut
-f
1 -d
' ')
216 KV
:= $(shell cat
/selinux
/policyvers
)
218 # dont print version warnings if we are unable to determine
219 # the currently running kernel's policy version
224 M4SUPPORT
:= $(wildcard $(POLDIR
)/support
/*.spt
)
226 M4SUPPORT
+= $(wildcard $(LOCAL_POLDIR
)/support
/*.spt
)
229 APPCONF
:= config
/appconfig-
$(TYPE
)
230 SEUSERS
:= $(APPCONF
)/seusers
231 APPDIR
:= $(CONTEXTPATH
)
232 APPFILES
:= $(addprefix $(APPDIR
)/,default_contexts default_type initrc_context failsafe_context userhelper_context removable_context dbus_contexts customizable_types
) $(CONTEXTPATH
)/files
/media
233 CONTEXTFILES
+= $(wildcard $(APPCONF
)/*_context
*) $(APPCONF
)/media
235 ALL_LAYERS
:= $(filter-out $(MODDIR
)/CVS
,$(shell find
$(wildcard $(MODDIR
)/*) -maxdepth
0 -type d
))
237 ALL_LAYERS
+= $(filter-out $(LOCAL_MODDIR
)/CVS
,$(shell find
$(wildcard $(LOCAL_MODDIR
)/*) -maxdepth
0 -type d
))
240 GENERATED_TE
:= $(basename $(foreach dir,$(ALL_LAYERS
),$(wildcard $(dir)/*.te.in
)))
241 GENERATED_IF
:= $(basename $(foreach dir,$(ALL_LAYERS
),$(wildcard $(dir)/*.if.in
)))
242 GENERATED_FC
:= $(basename $(foreach dir,$(ALL_LAYERS
),$(wildcard $(dir)/*.
fc.in
)))
244 # sort here since it removes duplicates, which can happen
245 # when a generated file is already generated
246 DETECTED_MODS
:= $(sort $(foreach dir,$(ALL_LAYERS
),$(wildcard $(dir)/*.te
)) $(GENERATED_TE
))
248 # modules.conf setting for base module
251 # modules.conf setting for loadable module
254 # modules.conf setting for unused module
257 # test for module overrides from command line
258 MOD_TEST
= $(filter $(APPS_OFF
), $(APPS_BASE
) $(APPS_MODS
))
259 MOD_TEST
+= $(filter $(APPS_MODS
), $(APPS_BASE
))
260 ifneq ($(strip $(MOD_TEST
)),)
261 $(error Applications must be base
, module
, or off
, and not in more than one list
! $(strip $(MOD_TEST
)) found in multiple lists
!)
264 # add on suffix to modules specified on command line
265 CMDLINE_BASE
:= $(addsuffix .te
,$(APPS_BASE
))
266 CMDLINE_MODS
:= $(addsuffix .te
,$(APPS_MODS
))
267 CMDLINE_OFF
:= $(addsuffix .te
,$(APPS_OFF
))
269 # extract settings from modules.conf
270 MOD_CONF_BASE
:= $(addsuffix .te
,$(sort $(shell awk
'/^[[:blank:]]*[[:alpha:]]/{ if ($$3 == "$(MODBASE)") print $$1 }' $(MOD_CONF
) 2> /dev
/null
)))
271 MOD_CONF_MODS
:= $(addsuffix .te
,$(sort $(shell awk
'/^[[:blank:]]*[[:alpha:]]/{ if ($$3 == "$(MODMOD)") print $$1 }' $(MOD_CONF
) 2> /dev
/null
)))
272 MOD_CONF_OFF
:= $(addsuffix .te
,$(sort $(shell awk
'/^[[:blank:]]*[[:alpha:]]/{ if ($$3 == "$(MODUNUSED)") print $$1 }' $(MOD_CONF
) 2> /dev
/null
)))
274 BASE_MODS
:= $(CMDLINE_BASE
)
275 MOD_MODS
:= $(CMDLINE_MODS
)
276 OFF_MODS
:= $(CMDLINE_OFF
)
278 BASE_MODS
+= $(filter-out $(CMDLINE_OFF
) $(CMDLINE_BASE
) $(CMDLINE_MODS
), $(MOD_CONF_BASE
))
279 MOD_MODS
+= $(filter-out $(CMDLINE_OFF
) $(CMDLINE_BASE
) $(CMDLINE_MODS
), $(MOD_CONF_MODS
))
280 OFF_MODS
+= $(filter-out $(CMDLINE_OFF
) $(CMDLINE_BASE
) $(CMDLINE_MODS
), $(MOD_CONF_OFF
))
282 # add modules not in modules.conf to the off list
283 OFF_MODS
+= $(filter-out $(BASE_MODS
) $(MOD_MODS
) $(OFF_MODS
),$(notdir $(DETECTED_MODS
)))
285 # filesystems to be used in labeling targets
286 FILESYSTEMS
= $(shell mount | grep
-v
"context=" | egrep
-v
'\((|.*,)bind(,.*|)\)' | awk
'/(ext[23]| xfs| jfs).*rw/{print $$3}';)
288 ########################################
293 # parse-rolemap modulename,outputfile
295 $(verbose
) m4
$(M4PARAM
) $(ROLEMAP
) | \
296 awk
'/^[[:blank:]]*[A-Za-z]/{ print "gen_require(type " $$3 "; role " $$1 ";)\n$1_per_userdomain_template(" $$2 "," $$3 "," $$1 ")" }' >> $2
299 # peruser-expansion modulename,outputfile
300 define peruser-expansion
301 $(verbose
) echo
"ifdef(\`""$1""_per_userdomain_template',\`" > $2
302 $(call parse-rolemap
,$1,$2)
303 $(verbose
) echo
"')" >> $2
306 ########################################
308 # Load appropriate rules
311 ifeq ($(MONOLITHIC
),y
)
312 include Rules.monolithic
314 include Rules.modular
317 ########################################
321 # NOTE: There is no "local" version of these files.
323 generate
: $(GENERATED_TE
) $(GENERATED_IF
) $(GENERATED_FC
)
325 $(MODDIR
)/kernel
/corenetwork.if
: $(MODDIR
)/kernel
/corenetwork.if.m4
$(MODDIR
)/kernel
/corenetwork.if.in
327 @echo
"# This is a generated file! Instead of modifying this file, the" >> $@
328 @echo
"# $(notdir $@).in or $(notdir $@).m4 file should be modified." >> $@
330 $(verbose
) cat
$(MODDIR
)/kernel
/corenetwork.if.in
>> $@
331 $(verbose
) egrep
"^[[:blank:]]*network_(interface|node|port|packet)\(.*\)" $(@
:.if
=.te
).in \
332 | m4
-D self_contained_policy
$(M4PARAM
) $(MODDIR
)/kernel
/corenetwork.if.m4
- \
333 | sed
-e
's/dollarsone/\$$1/g' -e
's/dollarszero/\$$0/g' >> $@
335 $(MODDIR
)/kernel
/corenetwork.te
: $(MODDIR
)/kernel
/corenetwork.te.m4
$(MODDIR
)/kernel
/corenetwork.te.in
337 @echo
"# This is a generated file! Instead of modifying this file, the" >> $@
338 @echo
"# $(notdir $@).in or $(notdir $@).m4 file should be modified." >> $@
340 $(verbose
) m4
-D self_contained_policy
$(M4PARAM
) $^ \
341 | sed
-e
's/dollarsone/\$$1/g' -e
's/dollarszero/\$$0/g' >> $@
343 ########################################
345 # Create config files
347 conf
: $(MOD_CONF
) $(BOOLEANS
) $(GENERATED_TE
) $(GENERATED_IF
) $(GENERATED_FC
)
349 $(MOD_CONF
) $(BOOLEANS
): $(POLXML
)
350 @echo
"Updating $(MOD_CONF) and $(BOOLEANS)"
351 $(verbose
) $(GENDOC
) -b
$(BOOLEANS
) -m
$(MOD_CONF
) -x
$(POLXML
)
353 ########################################
355 # Generate the fc_sort program
357 $(FCSORT
) : $(SUPPORT
)/fc_sort.c
358 $(verbose
) $(CC
) $(CFLAGS
) $(SUPPORT
)/fc_sort.c
-o
$(FCSORT
)
360 ########################################
362 # Documentation generation
365 # minimal dependencies here, because we don't want to rebuild
366 # this and its dependents every time the dependencies
367 # change. Also use all .if files here, rather then just the
370 $(POLXML
): $(DETECTED_MODS
:.te
=.if
) $(foreach dir,$(ALL_LAYERS
),$(dir)/$(LAYERXML
))
371 @echo
"Creating $(@F)"
372 @
test -d
$(dir $(POLXML
)) || mkdir
-p
$(dir $(POLXML
))
373 @
test -d
$(TMPDIR
) || mkdir
-p
$(TMPDIR
)
374 $(verbose
) echo
'<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>' > $@
375 $(verbose
) echo
'<!DOCTYPE policy SYSTEM "$(notdir $(XMLDTD))">' >> $@
376 $(verbose
) $(GENXML
) -w
-m
$(LAYERXML
) -t
$(GLOBALTUN
) -b
$(GLOBALBOOL
) -o
$(DOCS
) $(ALL_LAYERS
) >> $@
377 $(verbose
) if
test -x
$(XMLLINT
) && test -f
$(XMLDTD
); then \
378 $(XMLLINT
) --noout
--path
$(dir $(XMLDTD
)) --dtdvalid
$(XMLDTD
) $@
;\
381 $(TUNXML
) $(BOOLXML
): $(POLXML
)
383 html
$(TMPDIR
)/html
: $(POLXML
)
384 @echo
"Building html interface reference documentation in $(HTMLDIR)"
385 @
test -d
$(HTMLDIR
) || mkdir
-p
$(HTMLDIR
)
386 @
test -d
$(TMPDIR
) || mkdir
-p
$(TMPDIR
)
387 $(verbose
) $(GENDOC
) -d
$(HTMLDIR
) -T
$(DOCTEMPLATE
) -x
$(POLXML
)
388 $(verbose
) cp
$(DOCTEMPLATE
)/*.css
$(HTMLDIR
)
389 @touch
$(TMPDIR
)/html
391 ########################################
393 # Runtime binary policy patching of users
395 $(USERPATH
)/system.users
: $(M4SUPPORT
) $(TMPDIR
)/generated_definitions.conf
$(USER_FILES
)
397 @mkdir
-p
$(USERPATH
)
398 @echo
"Installing system.users"
399 @echo
"# " > $(TMPDIR
)/system.users
400 @echo
"# Do not edit this file. " >> $(TMPDIR
)/system.users
401 @echo
"# This file is replaced on reinstalls of this policy." >> $(TMPDIR
)/system.users
402 @echo
"# Please edit local.users to make local changes." >> $(TMPDIR
)/system.users
403 @echo
"#" >> $(TMPDIR
)/system.users
404 $(verbose
) m4
-D self_contained_policy
$(M4PARAM
) $^ | sed
-r
-e
's/^[[:blank:]]+//' \
405 -e
'/^[[:blank:]]*($$|#)/d' >> $(TMPDIR
)/system.users
406 $(verbose
) install -m
644 $(TMPDIR
)/system.users
$@
408 $(USERPATH
)/local.users
: config
/local.users
409 @mkdir
-p
$(USERPATH
)
410 @echo
"Installing local.users"
411 $(verbose
) install -b
-m
644 $< $@
413 ########################################
417 install-appconfig
: $(APPFILES
)
419 $(INSTALLDIR
)/booleans
: $(BOOLEANS
)
421 @mkdir
-p
$(INSTALLDIR
)
422 $(verbose
) sed
-r
-e
's/false/0/g' -e
's/true/1/g' \
423 -e
'/^[[:blank:]]*($$|#)/d' $(BOOLEANS
) |
sort > $(TMPDIR
)/booleans
424 $(verbose
) install -m
644 $(TMPDIR
)/booleans
$@
426 $(CONTEXTPATH
)/files
/media
: $(APPCONF
)/media
427 @mkdir
-p
$(CONTEXTPATH
)/files
/
428 $(verbose
) install -m
644 $< $@
430 $(APPDIR
)/default_contexts
: $(APPCONF
)/default_contexts
432 $(verbose
) install -m
644 $< $@
434 $(APPDIR
)/removable_context
: $(APPCONF
)/removable_context
436 $(verbose
) install -m
644 $< $@
438 $(APPDIR
)/default_type
: $(APPCONF
)/default_type
440 $(verbose
) install -m
644 $< $@
442 $(APPDIR
)/userhelper_context
: $(APPCONF
)/userhelper_context
444 $(verbose
) install -m
644 $< $@
446 $(APPDIR
)/initrc_context
: $(APPCONF
)/initrc_context
448 $(verbose
) install -m
644 $< $@
450 $(APPDIR
)/failsafe_context
: $(APPCONF
)/failsafe_context
452 $(verbose
) install -m
644 $< $@
454 $(APPDIR
)/dbus_contexts
: $(APPCONF
)/dbus_contexts
456 $(verbose
) install -m
644 $< $@
458 $(APPDIR
)/users
/root
: $(APPCONF
)/root_default_contexts
459 @mkdir
-p
$(APPDIR
)/users
460 $(verbose
) install -m
644 $< $@
462 ########################################
464 # Install policy headers
466 install-headers
: $(TUNXML
) $(BOOLXML
)
467 @mkdir
-p
$(HEADERDIR
)
468 @echo
"Installing $(TYPE) policy headers."
469 $(verbose
) install -m
644 $(TUNXML
) $(BOOLXML
) $(HEADERDIR
)
470 $(verbose
) m4
$(M4PARAM
) $(ROLEMAP
) > $(HEADERDIR
)/$(notdir $(ROLEMAP
))
471 $(verbose
) mkdir
-p
$(HEADERDIR
)/support
472 $(verbose
) install -m
644 $(M4SUPPORT
) $(word $(words $(GENXML
)),$(GENXML
)) $(XMLDTD
) $(HEADERDIR
)/support
473 $(verbose
) $(GENPERM
) $(AVS
) $(SECCLASS
) > $(HEADERDIR
)/support
/all_perms.spt
474 $(verbose
) for i in
$(notdir $(ALL_LAYERS
)); do \
475 mkdir
-p
$(HEADERDIR
)/$$i ;\
476 install -m
644 $(MODDIR
)/$$i/*.if \
477 $(MODDIR
)/$$i/metadata.xml \
480 $(verbose
) echo
"TYPE ?= $(TYPE)" > $(HEADERDIR
)/build.conf
481 $(verbose
) echo
"NAME ?= $(NAME)" >> $(HEADERDIR
)/build.conf
483 $(verbose
) echo
"DISTRO ?= $(DISTRO)" >> $(HEADERDIR
)/build.conf
485 $(verbose
) echo
"MONOLITHIC ?= n" >> $(HEADERDIR
)/build.conf
486 $(verbose
) echo
"DIRECT_INITRC ?= $(DIRECT_INITRC)" >> $(HEADERDIR
)/build.conf
487 $(verbose
) echo
"POLY ?= $(POLY)" >> $(HEADERDIR
)/build.conf
488 $(verbose
) install -m
644 $(SUPPORT
)/Makefile.devel
$(HEADERDIR
)/Makefile
490 ########################################
492 # Install policy documentation
494 install-docs
: $(TMPDIR
)/html
495 @mkdir
-p
$(DOCSDIR
)/html
496 @echo
"Installing policy documentation"
497 $(verbose
) install -m
644 $(DOCFILES
) $(DOCSDIR
)
498 $(verbose
) install -m
644 $(wildcard $(HTMLDIR
)/*) $(DOCSDIR
)/html
500 ########################################
502 # Install policy sources
505 rm -rf
$(SRCPATH
)/policy.old
506 -mv
$(SRCPATH
)/policy
$(SRCPATH
)/policy.old
507 mkdir
-p
$(SRCPATH
)/policy
508 cp
-R .
$(SRCPATH
)/policy
510 ########################################
516 @
($(CTAGS
) --version | grep
-q Exuberant
) ||
(echo ERROR
: Need exuberant-ctags to function
!; exit
1)
517 @LC_ALL
=C
$(CTAGS
) -f
$(TAGS
) --langdef
=te
--langmap
=te
:..te.if.spt \
518 --regex-te
='/^type[ \t]+(\w+)(,|;)/\1/t,type/' \
519 --regex-te
='/^typealias[ \t]+\w+[ \t+]+alias[ \t]+(\w+);/\1/t,type/' \
520 --regex-te
='/^attribute[ \t]+(\w+);/\1/a,attribute/' \
521 --regex-te
='/^[ \t]*define\(`(\w+)/\1/d,define/' \
522 --regex-te
='/^[ \t]*interface\(`(\w+)/\1/i,interface/' \
523 --regex-te
='/^[ \t]*bool[ \t]+(\w+)/\1/b,bool/' policy
/modules
/*/*.
{if
,te
} policy
/support
/*.spt
525 ########################################
527 # Filesystem labeling
530 @echo
"Checking labels on filesystem types: ext2 ext3 xfs jfs"
531 @if
test -z
"$(FILESYSTEMS)"; then \
532 echo
"No filesystems with extended attributes found!" ;\
535 $(verbose
) $(SETFILES
) -v
-n
$(FCPATH
) $(FILESYSTEMS
)
538 @echo
"Restoring labels on filesystem types: ext2 ext3 xfs jfs"
539 @if
test -z
"$(FILESYSTEMS)"; then \
540 echo
"No filesystems with extended attributes found!" ;\
543 $(verbose
) $(SETFILES
) -v
$(FCPATH
) $(FILESYSTEMS
)
546 @echo
"Relabeling filesystem types: ext2 ext3 xfs jfs"
547 @if
test -z
"$(FILESYSTEMS)"; then \
548 echo
"No filesystems with extended attributes found!" ;\
551 $(verbose
) $(SETFILES
) $(FCPATH
) $(FILESYSTEMS
)
554 @echo
"Resetting labels on filesystem types: ext2 ext3 xfs jfs"
555 @if
test -z
"$(FILESYSTEMS)"; then \
556 echo
"No filesystems with extended attributes found!" ;\
559 $(verbose
) $(SETFILES
) -F
$(FCPATH
) $(FILESYSTEMS
)
561 ########################################
573 # don't remove these files if we're given a local root
576 rm -f
$(SUPPORT
)/*.pyc
577 ifneq ($(GENERATED_TE
),)
578 rm -f
$(GENERATED_TE
)
580 ifneq ($(GENERATED_IF
),)
581 rm -f
$(GENERATED_IF
)
583 ifneq ($(GENERATED_FC
),)
584 rm -f
$(GENERATED_FC
)
588 .PHONY
: install-src install-appconfig generate xml conf html bare
tags