sbsv2/raptor/lib/flm/taggedrules.mk
changeset 0 044383f39525
child 3 e1eecf4d390d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/lib/flm/taggedrules.mk	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,138 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Tools for use in FLMs - enabling the output from
+# rules to be logged with start and end tags.
+# This is a place where one might to permit various information to
+# be logged, such as timestamps and host names or process ids
+#
+
+ifndef _TAGGEDRULES_FLM_
+_TAGGEDRULES_FLM_:=1
+
+# only run recipes once by default
+RECIPETRIES?=1
+
+ifeq ($(USE_TALON),)
+
+##
+##  Example usage:
+##
+#   define func
+#	auto_ok:
+#		$(call startrule,auto) \
+#		true && \
+#		true && \
+#		true    \
+#		$(call endrule,auto)
+#	
+#	auto_fail:
+#		$(call startrule,auto) \
+#		find /usr >/dev/null 2>&1 && \
+#		false && \
+#		true    \
+#		$(call endrule,auto)
+#   endef
+#   $(eval $(func))
+
+# $(1) is the name of the FLM function
+# $(2) indicates whether the failure of this rule should be ignored (but still logged)
+#      FORCESUCCESS indicates "on"
+define startrule
+  @set -o pipefail; RV=0; ATTEMPT=1; \
+  { while (( $$$$ATTEMPT <= $(RECIPETRIES) )); do \
+    echo -e "<recipe name='$(1)' \
+    target='$$@' host='$$$$HOSTNAME' \
+    layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' \
+    bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' \
+    config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' \
+    phase='$(MAKEFILE_GROUP)' \
+    source='$(3)'>\n<![CDATA["; \
+    FLM_RECIPE_FLAGS='$(2)'; \
+    export TIMEFORMAT="]]><time start='$$$$($(DATE) +%s.%N)' elapsed='%6R' />"; \
+    { time { set -x;
+endef
+
+define endrule
+    ; }  } 2>&1  ; RV=$$$$?; set +x; \
+    if (( $$$$RV==0  )); then \
+       echo "<status exit='ok' attempt='$$$$ATTEMPT' />";  \
+       echo "</recipe>"; \
+       break; \
+    else  \
+       if (( $$$$ATTEMPT < $(RECIPETRIES) )); then \
+         echo "<status exit='retry' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         sleep 1; \
+       else \
+         if [ ! "$$$${FLM_RECIPE_FLAGS//FORCESUCCESS/}" == "$$$${FLM_RECIPE_FLAGS}" ]; then \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' forcesuccess='FORCESUCCESS' />"; \
+             RV=0; \
+         else \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         fi; \
+       fi; \
+    fi; \
+    echo "</recipe>"; \
+    (( ATTEMPT=$$$$ATTEMPT + 1 )); \
+  done ; exit $$$${RV}; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
+endef
+
+
+define startrawoutput
+  @ set -o pipefail; { 
+endef
+
+define endrawoutput
+  ; exit 0; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
+endef
+
+
+else
+TALON_RECIPEATTRIBUTES:=\
+ name='$$RECIPE'\
+ target='$$TARGET'\
+ host='$$HOSTNAME'\
+ layer='$$COMPONENT_LAYER'\
+ component='$$COMPONENT_NAME'\
+ bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
+ config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
+ phase='$$MAKEFILE_GROUP' source='$$SOURCE'
+
+export TALON_RECIPEATTRIBUTES
+export TALON_RETRIES
+export TALON_DESCRAMBLE
+
+define startrule
+	@|RECIPE=$1;TARGET=$$@;COMPONENT_LAYER=$(COMPONENT_LAYER);COMPONENT_NAME=$(COMPONENT_NAME);COMPONENT_META=$(COMPONENT_META);PROJECT_META=$(PROJECT_META);SBS_CONFIGURATION=$(SBS_CONFIGURATION);PLATFORM=$(PLATFORM);MAKEFILE_GROUP=$(MAKEFILE_GROUP);SOURCE=$3;TALON_FLAGS=$2;|
+endef
+
+define endrule
+endef
+
+
+define startrawoutput
+	@|TALON_FLAGS=forcesuccess rawoutput;|
+endef
+
+define endrawoutput
+endef
+
+
+
+endif
+
+
+
+
+endif