summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorRoger A. Faulkner <Roger.Faulkner@Sun.COM>2009-01-23 18:25:30 -0800
committerRoger A. Faulkner <Roger.Faulkner@Sun.COM>2009-01-23 18:25:30 -0800
commit3afe87ebb25691cb6d158edaa34a6fb9b703a691 (patch)
tree366c05475f05bf5647242d07316a2ef6c8a284cd /usr/src
parent3986c91e1475e8a41e75969310e5abe7fb516983 (diff)
downloadillumos-joyent-3afe87ebb25691cb6d158edaa34a6fb9b703a691.tar.gz
6796837 restore parallel build of usr/src/cmd
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/Makefile131
-rw-r--r--usr/src/cmd/Makefile.check174
-rw-r--r--usr/src/cmd/acctadm/Makefile4
-rw-r--r--usr/src/cmd/agents/snmp/snmprelayd/Makefile9
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/ipsecutils/Makefile8
-rw-r--r--usr/src/cmd/dfs.cmds/sharemgr/Makefile6
-rw-r--r--usr/src/cmd/hostid/smf/Makefile5
-rw-r--r--usr/src/cmd/kbd/Makefile6
-rw-r--r--usr/src/cmd/ndmpd/Makefile2
-rw-r--r--usr/src/cmd/stmsboot/Makefile6
-rw-r--r--usr/src/cmd/tsol/labeld/Makefile8
-rw-r--r--usr/src/cmd/tsol/tnctl/Makefile9
-rw-r--r--usr/src/cmd/tsol/tnd/Makefile9
13 files changed, 220 insertions, 157 deletions
diff --git a/usr/src/cmd/Makefile b/usr/src/cmd/Makefile
index 418fb94579..8b2dcba63d 100644
--- a/usr/src/cmd/Makefile
+++ b/usr/src/cmd/Makefile
@@ -17,11 +17,9 @@
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
-
-
#
#
-# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -809,107 +807,12 @@ BSMSUBDIRS= \
#
BWOSDIRS=
-#
-# Commands providing manifests must offer a check target. A recursive check
-# target across all commands directories is not currently provided.
-#
-MANIFEST_TOPDIRS= \
- auditd \
- bnu \
- consadm \
- coreadm \
- cron \
- cvcd \
- dispadmin \
- drd \
- dumpadm \
- eeprom \
- fm \
- intrd \
- ipf \
- keyserv \
- ldapcachemgr \
- dlmgmtd \
- nscd \
- oplhpd \
- power \
- rexd \
- rpcbind \
- rpcsvc \
- saf \
- sf880drd \
- smserverd \
- syseventd \
- syslogd \
- utmpd \
- vntsd \
- ypcmd \
- zoneadmd
-
-MANIFEST_SUBDIRS= \
- boot/scripts \
- cmd-crypto/scripts \
- cmd-inet/usr.lib/in.chargend \
- cmd-inet/usr.lib/in.daytimed \
- cmd-inet/usr.lib/in.dhcpd \
- cmd-inet/usr.lib/in.discardd \
- cmd-inet/usr.lib/in.echod \
- cmd-inet/usr.lib/in.ndpd \
- cmd-inet/usr.lib/in.ripngd \
- cmd-inet/usr.lib/in.timed \
- cmd-inet/usr.lib/inetd \
- cmd-inet/usr.lib/mdnsd \
- cmd-inet/usr.lib/slpd \
- cmd-inet/usr.lib/wpad \
- cmd-inet/usr.sbin \
- cmd-inet/usr.sbin/in.ftpd \
- cmd-inet/usr.sbin/in.rdisc \
- cmd-inet/usr.sbin/in.routed \
- cmd-inet/usr.sbin/in.talkd \
- cmd-inet/usr.sbin/routeadm \
- cmd/tsol/labeld \
- cmd/tsol/tnctl \
- cmd/tsol/tnd \
- cmd/tsol/tsol-zones \
- dcs/sparc/sun4u \
- fs.d/autofs \
- fs.d/cachefs \
- fs.d/nfs/svc \
- gss/gssd \
- idmap/idmapd \
- krb5/kadmin/server \
- krb5/krb5kdc \
- krb5/kwarn \
- krb5/slave \
- lp/cmd/lpsched \
- lvm/rpc.metad \
- lvm/rpc.metamedd \
- lvm/rpc.metamhd \
- lvm/md_monitord \
- lvm/metassist/sysfiles \
- lvm/util \
- picl/picld \
- print/gateway \
- print/lp \
- rcap/rcapd \
- rpcsvc/rpc.bootparamd \
- sendmail/lib \
- smartcard/daemon \
- ssh/etc \
- svc/milestone \
- ypcmd/yppasswd \
- ypcmd/ypupdated \
- xntpd/xntpd
-
-DTEST_SUBDIRS= \
- dtrace/test/tst
all := TARGET = all
install := TARGET = install
clean := TARGET = clean
clobber := TARGET = clobber
lint := TARGET = lint
-check := TARGET = check
_msg := TARGET = _msg
_dc := TARGET = _dc
@@ -917,30 +820,18 @@ _dc := TARGET = _dc
SUBDIRS = $(COMMON_SUBDIRS) $($(MACH)_SUBDIRS)
-.PARALLEL: $(BWOSDIRS) $(SUBDIRS) $(MSGSUBDIRS) $(BSMSUBDIRS) \
- $(DTEST_SUBDIRS)
+.PARALLEL: $(BWOSDIRS) $(SUBDIRS) $(MSGSUBDIRS) $(BSMSUBDIRS)
all install clean clobber lint: $(FIRST_SUBDIRS) .WAIT $(SUBDIRS) $(BSMSUBDIRS)
-# Manifests cannot be checked in parallel, because we are using the global
-# repository that is in $(SRC)/cmd/svc/seed/global.db. This is a
-# repository that is built from the manifests in this workspace, whereas
-# the build machine's repository may be out of sync with these manifests.
-# Because we are using a private repository, svccfg-native must start up a
-# private copy of configd-native. We cannot have multiple copies of
-# configd-native trying to access global.db simultaneously.
-
-.NO_PARALLEL: $(MANIFEST_TOPDIRS) $(MANIFEST_SUBDIRS)
-
-check: svccfg_check .WAIT $(MANIFEST_TOPDIRS) $(MANIFEST_SUBDIRS) \
- $(DTEST_SUBDIRS)
-
-svccfg_check:
- @$(ECHO) "building requirements for svccfg check ..."; \
- (cd $(SRC)/cmd/svc/seed && pwd && $(MAKE) $(MFLAGS) global.db)
-
-$(DTEST_SUBDIRS): FRC
- @cd $@; pwd; $(MAKE) $(TARGET)
+#
+# Manifests cannot be checked in parallel, because we are using
+# the global repository that is in $(SRC)/cmd/svc/seed/global.db.
+# For this reason, to avoid .PARALLEL and .NO_PARALLEL conflicts,
+# we spawn off a sub-make to perform the non-parallel 'make check'
+#
+check:
+ $(MAKE) -f Makefile.check check
#
# The .WAIT directive works around an apparent bug in parallel make.
@@ -958,7 +849,7 @@ _dc: $(DCSUBDIRS)
fs.d: fstyp
ksh: shcomp isaexec
-$(FIRST_SUBDIRS) $(BWOSDIRS) $(SUBDIRS) $(BSMSUBDIRS) $(MANIFEST_SUBDIRS): FRC
+$(FIRST_SUBDIRS) $(BWOSDIRS) $(SUBDIRS) $(BSMSUBDIRS): FRC
@if [ -f $@/Makefile ]; then \
cd $@; pwd; $(MAKE) $(TARGET); \
else \
diff --git a/usr/src/cmd/Makefile.check b/usr/src/cmd/Makefile.check
new file mode 100644
index 0000000000..608a0467cd
--- /dev/null
+++ b/usr/src/cmd/Makefile.check
@@ -0,0 +1,174 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+include ../Makefile.master
+
+#
+# Commands providing manifests must offer a check target. A recursive check
+# target across all commands directories is not currently provided.
+#
+MANIFEST_TOPDIRS= \
+ acctadm \
+ auditd \
+ bnu \
+ consadm \
+ coreadm \
+ cron \
+ cvcd \
+ dispadmin \
+ drd \
+ dumpadm \
+ fcinfo \
+ fm \
+ intrd \
+ iscsid \
+ iscsitsvc \
+ kbd \
+ keyserv \
+ ldapcachemgr \
+ mms \
+ dlmgmtd \
+ ndmpd \
+ nscd \
+ oplhpd \
+ pools \
+ power \
+ rexd \
+ rmvolmgr \
+ rpcbind \
+ rpcsvc \
+ sa \
+ saf \
+ sckmd \
+ sf880drd \
+ smserverd \
+ stmfsvc \
+ stmsboot \
+ syseventd \
+ syslogd \
+ utmpd \
+ vntsd \
+ ypcmd \
+ zoneadm \
+ zoneadmd
+
+MANIFEST_SUBDIRS= \
+ agents/snmp/snmprelayd \
+ boot/scripts \
+ cmd-crypto/scripts \
+ cmd-inet/usr.lib/in.chargend \
+ cmd-inet/usr.lib/in.daytimed \
+ cmd-inet/usr.lib/in.dhcpd \
+ cmd-inet/usr.lib/in.discardd \
+ cmd-inet/usr.lib/in.echod \
+ cmd-inet/usr.lib/in.ndpd \
+ cmd-inet/usr.lib/in.ripngd \
+ cmd-inet/usr.lib/in.timed \
+ cmd-inet/usr.lib/inetd \
+ cmd-inet/usr.lib/mdnsd \
+ cmd-inet/usr.lib/slpd \
+ cmd-inet/usr.lib/wpad \
+ cmd-inet/usr.sbin \
+ cmd-inet/usr.sbin/in.ftpd \
+ cmd-inet/usr.sbin/in.rdisc \
+ cmd-inet/usr.sbin/in.routed \
+ cmd-inet/usr.sbin/in.talkd \
+ cmd-inet/usr.sbin/ipsecutils \
+ cmd-inet/usr.sbin/kssl/ksslcfg \
+ cmd-inet/usr.sbin/routeadm \
+ dcs/sparc/sun4u \
+ dfs.cmds/sharemgr \
+ fps/fpsd \
+ fs.d/autofs \
+ fs.d/nfs/svc \
+ fs.d/smbclnt/svc \
+ gss/gssd \
+ hal/addons/network-devices \
+ hal/hald/solaris \
+ hostid/smf \
+ idmap/idmapd \
+ ipf/svc \
+ iscsi/iscsitgtd \
+ isns/isnsd \
+ krb5/kadmin/server \
+ krb5/krb5kdc \
+ krb5/kwarn \
+ krb5/slave \
+ lp/cmd/lpsched \
+ lvm/rpc.mdcommd \
+ lvm/rpc.metad \
+ lvm/rpc.metamedd \
+ lvm/rpc.metamhd \
+ lvm/md_monitord \
+ lvm/util \
+ picl/picld \
+ pools/poold \
+ print/bsd-sysv-commands \
+ print/ppdmgr \
+ rcap/rcapd \
+ rpcsvc/rpc.bootparamd \
+ sendmail/lib \
+ smbsrv/smbd \
+ ssh/etc \
+ svc/milestone \
+ tsol/labeld \
+ tsol/tnctl \
+ tsol/tnd \
+ tsol/tsol-zones \
+ vscan/vscand \
+ xvm/ipagent \
+ ypcmd/yppasswd \
+ ypcmd/ypupdated \
+ xntpd/xntpd
+
+$(CLOSED_BUILD)MANIFEST_SUBDIRS += \
+ $(CLOSED)/cmd/smartcard/daemon \
+ $(CLOSED)/cmd/cmd-inet/usr.lib/in.iked
+
+DTEST_SUBDIRS= \
+ dtrace/test/tst
+
+.KEEP_STATE:
+
+# Manifests cannot be checked in parallel, because we are using the global
+# repository that is in $(SRC)/cmd/svc/seed/global.db. This is a
+# repository that is built from the manifests in this workspace, whereas
+# the build machine's repository may be out of sync with these manifests.
+# Because we are using a private repository, svccfg-native must start up a
+# private copy of configd-native. We cannot have multiple copies of
+# configd-native trying to access global.db simultaneously.
+
+.NO_PARALLEL:
+
+check: svccfg_check $(MANIFEST_TOPDIRS) $(MANIFEST_SUBDIRS) $(DTEST_SUBDIRS)
+
+svccfg_check:
+ @$(ECHO) "building requirements for svccfg check ..."; \
+ (cd $(SRC)/cmd/svc/seed && pwd && $(MAKE) $(MFLAGS) global.db)
+
+$(MANIFEST_TOPDIRS) $(MANIFEST_SUBDIRS) $(DTEST_SUBDIRS): FRC
+ @cd $@; pwd; $(MAKE) check
+
+FRC:
diff --git a/usr/src/cmd/acctadm/Makefile b/usr/src/cmd/acctadm/Makefile
index 09343cbca7..918c94cf46 100644
--- a/usr/src/cmd/acctadm/Makefile
+++ b/usr/src/cmd/acctadm/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -52,6 +52,8 @@ $(PROG): $(OBJS)
install: all $(ROOTUSRSBINPROG) $(ROOTMANIFEST)
+check: $(CHKMANIFEST)
+
$(POFILE): $(POFILES)
$(RM) $@
$(CAT) $(POFILES) > $@
diff --git a/usr/src/cmd/agents/snmp/snmprelayd/Makefile b/usr/src/cmd/agents/snmp/snmprelayd/Makefile
index eafd7663f3..43d3dd3d0a 100644
--- a/usr/src/cmd/agents/snmp/snmprelayd/Makefile
+++ b/usr/src/cmd/agents/snmp/snmprelayd/Makefile
@@ -18,12 +18,9 @@
#
# CDDL HEADER END
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
-# Use is subject to license terms.
-#
-# ident "%Z%%M% %I% %E% SMI"
#
-# snmp/snmprelayd/Makefile
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
#
include ../../Makefile.vars
@@ -158,6 +155,8 @@ all: $(SOURCES.h) $(BINPROG) $(CONFIG_FILES)
install: all $(OPTPROG) $(CONFRULE) $(ROOTMANIFEST) $(ROOTSVCMETHOD)
+check: $(CHKMANIFEST)
+
$(BINPROG): $(BIN) $(OBJECTS) $(BIN)/config.o $(MYLIBS) $(MAPFILES)
$(CC) -o $(BINPROG) $(LDFLAGS) $(OBJECTS) $(BIN)/config.o \
$(MYLINKLIBS) $(LIBS)
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ipsecutils/Makefile b/usr/src/cmd/cmd-inet/usr.sbin/ipsecutils/Makefile
index 0674d65474..4769f273b7 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/ipsecutils/Makefile
+++ b/usr/src/cmd/cmd-inet/usr.sbin/ipsecutils/Makefile
@@ -17,15 +17,11 @@
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
-
-
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-# ident "%Z%%M% %I% %E% SMI"
-#
PROG= ikeadm ipsecalgs ipsecconf ipseckey ikecert
SOCKETPROG= ipsecalgs ipsecconf ipseckey
@@ -67,6 +63,8 @@ $(SOCKETPROG) := LDLIBS += -lsocket
.PARALLEL:
+.NO_PARALLEL: $(CHKMANIFEST)
+
all: $(PROG)
#
diff --git a/usr/src/cmd/dfs.cmds/sharemgr/Makefile b/usr/src/cmd/dfs.cmds/sharemgr/Makefile
index deaff10eaa..bbe1100238 100644
--- a/usr/src/cmd/dfs.cmds/sharemgr/Makefile
+++ b/usr/src/cmd/dfs.cmds/sharemgr/Makefile
@@ -19,9 +19,7 @@
# CDDL HEADER END
#
#
-# ident "%Z%%M% %I% %E% SMI"
-#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -51,6 +49,8 @@ all clean clobber lint _msg: $(SUBDIRS)
install: $(SUBDIRS) $(ROOTMANIFEST)
+check: $(CHKMANIFEST)
+
$(SUBDIRS) $(TESTSUBS): FRC
@cd $@; pwd; $(MAKE) $(TARGET)
diff --git a/usr/src/cmd/hostid/smf/Makefile b/usr/src/cmd/hostid/smf/Makefile
index 9c1621d586..0104e63870 100644
--- a/usr/src/cmd/hostid/smf/Makefile
+++ b/usr/src/cmd/hostid/smf/Makefile
@@ -19,8 +19,7 @@
# CDDL HEADER END
#
#
-#
-# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -36,4 +35,6 @@ all clean clobber lint:
install: all $(ROOTMANIFEST) $(ROOTMETHOD)
+check: $(CHKMANIFEST)
+
include ../../Makefile.targ
diff --git a/usr/src/cmd/kbd/Makefile b/usr/src/cmd/kbd/Makefile
index bcbebe4972..c5ee178290 100644
--- a/usr/src/cmd/kbd/Makefile
+++ b/usr/src/cmd/kbd/Makefile
@@ -19,11 +19,9 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-# ident "%Z%%M% %I% %E% SMI"
-#
MANIFEST = keymap.xml
SVCMETHOD = keymap
@@ -42,6 +40,8 @@ all: $(PROG)
install: all $(ROOTETCDEFAULTFILES) $(ROOTPROG) $(ROOTMANIFEST) $(ROOTSVCMETHOD)
+check: $(CHKMANIFEST)
+
clean:
lint: lint_PROG
diff --git a/usr/src/cmd/ndmpd/Makefile b/usr/src/cmd/ndmpd/Makefile
index 825fe48ef6..2abd24753a 100644
--- a/usr/src/cmd/ndmpd/Makefile
+++ b/usr/src/cmd/ndmpd/Makefile
@@ -133,6 +133,8 @@ all: $(PROG)
install: all $(ROOTNDMPDDIR) $(ROOTNDMPDFILE) $(ROOTSVCMETHOD) $(ROOTMANIFEST)
+check: $(CHKMANIFEST)
+
clobber:
$(PROG) : $(OBJS)
diff --git a/usr/src/cmd/stmsboot/Makefile b/usr/src/cmd/stmsboot/Makefile
index 38dcc809fc..ab97b566c2 100644
--- a/usr/src/cmd/stmsboot/Makefile
+++ b/usr/src/cmd/stmsboot/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -49,10 +49,10 @@ install: all \
$(ROOTFSLIB_MPXIO) \
$(ROOTFSLIB_MPXIO)/$(STMSBOOT_UTIL) \
$(ROOTMANIFEST) \
- $(ROOTSVCMETHOD) \
+ $(ROOTSVCMETHOD) \
$(ROOTUSRSBIN)/stmsboot
-check:
+check: $(CHKMANIFEST)
$(CSTYLE) -pP $(SRCS)
clean:
diff --git a/usr/src/cmd/tsol/labeld/Makefile b/usr/src/cmd/tsol/labeld/Makefile
index 218f2676f9..38a65330e7 100644
--- a/usr/src/cmd/tsol/labeld/Makefile
+++ b/usr/src/cmd/tsol/labeld/Makefile
@@ -19,13 +19,9 @@
# CDDL HEADER END
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#ident "%Z%%M% %I% %E% SMI"
-#
-# cmd/tsol/labeld/Makefile
-#
include ../../Makefile.cmd
@@ -47,6 +43,8 @@ all:
install: $(ROOTMANIFEST) $(ROOTSVCMETHOD)
+check: $(CHKMANIFEST)
+
clean clobber:
lint:
diff --git a/usr/src/cmd/tsol/tnctl/Makefile b/usr/src/cmd/tsol/tnctl/Makefile
index 3351c996f4..cbb8cf16a0 100644
--- a/usr/src/cmd/tsol/tnctl/Makefile
+++ b/usr/src/cmd/tsol/tnctl/Makefile
@@ -19,13 +19,10 @@
# CDDL HEADER END
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#ident "%Z%%M% %I% %E% SMI"
-#
-# cmd/tsol/tnctl/Makefile
-#
+
PROG= tnctl
ETCTSOLFILES=tnrhdb tnrhtp tnzonecfg
@@ -51,6 +48,8 @@ $(ROOTUSRSBIN)/$(PROG):
rm -f $(ROOTUSRSBIN)/$(PROG)
$(SYMLINK) ../../sbin/$(PROG) $(ROOTUSRSBIN)/$(PROG)
+check: $(CHKMANIFEST)
+
clean:
lint: lint_PROG
diff --git a/usr/src/cmd/tsol/tnd/Makefile b/usr/src/cmd/tsol/tnd/Makefile
index 80030ef7eb..3d7d9d7794 100644
--- a/usr/src/cmd/tsol/tnd/Makefile
+++ b/usr/src/cmd/tsol/tnd/Makefile
@@ -19,13 +19,10 @@
# CDDL HEADER END
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#ident "%Z%%M% %I% %E% SMI"
-#
-# cmd/tsol/tnd/Makefile
-#
+
PROG= tnd
OBJS= tnd.o
@@ -54,6 +51,8 @@ all: $(PROG)
install: all $(ROOTTSOLPROG) $(ROOTMANIFEST) $(ROOTSVCMETHOD) \
$(ROOTUSRSBIN)/$(PROG)
+check: $(CHKMANIFEST)
+
clean:
$(RM) $(OBJS) tags