summaryrefslogtreecommitdiff
path: root/build-0.3/frame.make
diff options
context:
space:
mode:
authorJörg Frings-Fürst <jff@merkur>2014-05-18 16:08:14 +0200
committerJörg Frings-Fürst <jff@merkur>2014-05-18 16:08:14 +0200
commita15cf65c44d5c224169c32ef5495b68c758134b7 (patch)
tree3419f58fc8e1b315ba8171910ee044c5d467c162 /build-0.3/frame.make
Imported Upstream version 3.3.0.2upstream/3.3.0.2
Diffstat (limited to 'build-0.3/frame.make')
-rw-r--r--build-0.3/frame.make104
1 files changed, 104 insertions, 0 deletions
diff --git a/build-0.3/frame.make b/build-0.3/frame.make
new file mode 100644
index 0000000..bb1526c
--- /dev/null
+++ b/build-0.3/frame.make
@@ -0,0 +1,104 @@
+# file : build/frame.make
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC
+# license : GNU GPL v2; see accompanying LICENSE file
+
+%frame_exclude% += CURDIR SHELL MAKEFILE_LIST MAKEFLAGS
+%frame_include% := #.DEFAULT_GOAL - for some reason it is already in the list
+
+
+# return only vars with 'file' origin
+#
+%frame_exclude% += frame-vars-stage
+define frame-vars-stage
+$(foreach v,$1,$(if $(findstring file,$(origin $v)),$v))
+endef
+
+
+# $1 holds exclusion list
+#
+%frame_exclude% += frame-vars
+define frame-vars
+$(call frame-vars-stage,$(filter-out \%% $(%frame_exclude%) $1,$(.VARIABLES))) \
+$(filter-out $1,$(%frame_include%))
+endef
+
+
+%frame% := frame%
+
+
+%frame_exclude% += frame-set-recursive
+define frame-set-recursive
+define $1
+$2
+endef
+endef
+
+%frame_exclude% += frame-undefine
+ifneq ($(filter undefine,$(.FEATURES)),)
+define frame-undefine
+$(eval undefine $$1)
+endef
+define frame-undefine-imm
+$(eval undefine $1)
+endef
+else
+define frame-undefine
+$(eval $$1 :=)
+endef
+define frame-undefine-imm
+$(eval $1 :=)
+endef
+endif
+
+%frame_exclude% += frame-save
+define frame-save
+$(eval $(if $(filter simple,$(flavor $1)),\
+%$1/$(%frame%) := $(value $1),\
+$(call frame-set-recursive,%$1/$(%frame%),$(value $1))))
+endef
+
+%frame_exclude% += frame-restore
+define frame-restore
+$(eval $(if $(filter simple,$(flavor %$1/$(%frame%))),\
+$1 := $(value %$1/$(%frame%)),\
+$(call frame-set-recursive,$1,$(value %$1/$(%frame%)))))\
+$(call frame-undefine-imm,%$1/$(%frame%))
+endef
+
+# Use debug messages to check for garbage being framed.
+#
+
+#$$(warning framing $$(value %vars_$(%frame%)))
+
+%frame_exclude% += frame-enter-body
+define frame-enter-body
+%vars_$(%frame%) := $(call frame-vars,$1)
+%excl_$(%frame%) := $1
+$$(foreach v,$$(value %vars_$(%frame%)),$$(call frame-save,$$v))
+%frame% := frame/$(%frame%)
+endef
+
+%frame_exclude% += frame-enter
+define frame-enter
+$(eval $(call frame-enter-body,$1))
+endef
+
+
+#$$(warning restoring $$(value %vars_$$(%frame%)))
+
+%frame_exclude% += frame-leave-body
+define frame-leave-body
+%frame% := $(patsubst frame/%,%,$(%frame%))
+$$(foreach v,$$(value %vars_$$(%frame%)),$$(call frame-restore,$$v))
+$$(foreach v,\
+$$(filter-out $$(value %vars_$$(%frame%)),$$(call frame-vars,$$(value %excl_$$(%frame%)))),\
+$$(call frame-undefine,$$v))
+$$(call frame-undefine,%vars_$$(%frame%))
+$$(call frame-undefine,%excl_$$(%frame%))
+endef
+
+%frame_exclude% += frame-leave
+define frame-leave
+$(eval $(call frame-leave-body))
+endef