Skip to content

Commit

Permalink
#96: separating var.mk into make version specific files
Browse files Browse the repository at this point in the history
yeah
  • Loading branch information
abusalimov committed Sep 9, 2010
1 parent ab1c19a commit f087245
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 146 deletions.
100 changes: 0 additions & 100 deletions mk/util.mk
Original file line number Diff line number Diff line change
Expand Up @@ -112,106 +112,6 @@ __expansion_name = __expansion_of_$1_$$__$(strip $(call merge \
,$(call merge,_$$_,$(__expansion_escape_arg))) \
))

define var_info
$(call assert_called,var_info,$0) \
$(call assert,$1,Variable name is empty) Variable [$1] info:
flavor: [$(flavor $1)]
origin: [$(origin $1)]
value: [$(value $1)]
expansion: [$($1)]

endef

# eval is 3.81 bug (Savannah #27394) workaround.
${eval $( \
)$(\n)define __var_define_mk$( \
)$(\n)define $$1$(\n)$$2$(\n)endef$( \
)$(\n)endef$( \
)}

${eval $( \
)$(\n)define __var_assign_recursive_mk$( \
)$(\n)$(call __var_define_mk,$$1,$$2)$( \
)$(\n)endef$( \
)}

__var_assign_template_mk_def = ${eval $( \
)$(\n)define __var_assign_$(strip $1)_mk$( \
)$(\n)$(call __var_define_mk,__var_assign_tmp,$$2)$( \
)$(\n)$$1 $2 $$$$(__var_assign_tmp)$( \
)$(\n)endef$( \
)}

$(call __var_assign_template_mk_def,simple,:=)
$(call __var_assign_template_mk_def,append,+=)
$(call __var_assign_template_mk_def,conditional,?=)

ifeq (0,1)
var_assign_recursive = \
$(call assert_called,var_assign_recursive,$0)$(call __var_assign,$1 =,$2)
var_assign_recursive = \
${eval $(__var_assign_recursive_mk)}

else

${eval $( \
)$(\n)define var_assign_recursive$( \
)$(\n)$${eval $(value __var_assign_recursive_mk)}$( \
)$(\n)endef$( \
)}
endif

var_assign_simple = \
$(call assert_called,var_assign_simple,$0)$(call __var_assign,$1:=,$2)
var_assign_simple = \
${eval $(__var_assign_simple_mk)}

var_assign_append = \
$(call assert_called,var_assign_append,$0)$(call __var_assign,$1+=,$2)

var_assign_conditional = \
$(call assert_called,var_assign_conditional,$0)$(call __var_assign,$1?=,$2)

ifeq ($(MAKE_VERSION),3.81)
var_assign_undefined = $(strip \
$(call assert_called,var_assign_undefined,$0) \
$(if $(filter-out undefined,$(origin $1)),$(call __var_assign,$1:=,)) \
)
else # Since version 3.82 GNU Make provides true 'undefine' directive.
var_assign_undefined = \
$(call assert_called,var_assign_undefined,$0)$(call __var_assign,undefine $1,)
endif

__var_assign = $(strip \
$(call assert,$(strip $1),Must specify target variable name) \
$(call assert,$(filter undefined file,$(origin $1)), \
Invalid origin of target variable [$1] : [$(origin $1)]) \
$(eval $(call escape,$1) $(empty)$2$(empty)) \
)

var_define = \
$(call assert_called,var_define,$0)$(call var_assign_recursive,$1,$2)
var_undefine = \
$(call assert_called,var_undefine,$0)$(call var_assign_undefined,$1,$2)

var_swap = $(strip \
$(call assert_called,var_swap,$0) \
$(call __var_swap,$1,$2,__var_swap_tmp) \
)
__var_swap = \
$(call var_assign_$(flavor $1),$3,$(value $1)) \
$(call var_assign_$(flavor $2),$1,$(value $2)) \
$(call var_assign_$(flavor $3),$2,$(value $3))

var_save = $(strip \
$(call assert_called,var_save,$0) \
$(call set,__var_value,$1,$(value $1)) \
$(call set,__var_flavor,$1,$(flavor $1)) \
)
var_restore = $(strip \
$(call assert_called,var_restore,$0) \
$(call var_assign_$(call get,__var_flavor,$1),$1,$(call get,__var_value,$1))\
)

# ----------------------------------------------------------------------------
# Function: put
Expand Down
67 changes: 67 additions & 0 deletions mk/util/var-3.81.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#
# Some useful stuff lives here.
#
# Author: Eldar Abusalimov
#


var_info = $(call assert_called,var_info,$0)$(info $(call var_dump,$1))

define var_dump
$(call assert_called,var_dump,$0) \
$(call assert,$1,Variable name is empty) Variable [$1] info:
flavor: [$(flavor $1)]
origin: [$(origin $1)]
value: [$(value $1)]
expansion: [$($1)]

endef

# eval is 3.81 bug (Savannah #27394) workaround.
${eval $( \
)$(\n)define __var_define_mk$( \
)$(\n)define $$1$(\n)$$2$(\n)endef$( \
)$(\n)endef$( \
)}

${eval $( \
)$(\n)define __var_assign_recursive_mk$( \
)$(\n)$(call __var_define_mk,$$1,$$2)$( \
)$(\n)endef$( \
)}

__var_assign_template_mk_def = ${eval $( \
)$(\n)define $1$( \
)$(\n)$(call __var_define_mk,__var_assign_tmp,$$2)$( \
)$(\n)$$1 $2 $$$$(__var_assign_tmp)$( \
)$(\n)endef$( \
)}

$(call __var_assign_template_mk_def,__var_assign_simple_mk,:=)
$(call __var_assign_template_mk_def,__var_assign_append_mk,+=)
$(call __var_assign_template_mk_def,__var_assign_cond_mk,?=)

ifndef MK_UTIL_VAR_NO_OPTIMIZE
${eval $( \
)$(\n)define var_assign_recursive$( \
)$(\n)$${eval $(value __var_assign_recursive_mk)}$( \
)$(\n)endef$( \
)}
else
var_assign_recursive = ${eval $(__var_assign_recursive_mk)}
endif

var_assign_simple = ${eval $(__var_assign_simple_mk)}
var_assign_append = ${eval $(__var_assign_append_mk)}
var_assign_cond = ${eval $(__var_assign_cond_mk)}

ifeq ($(MAKE_VERSION),3.81)
var_assign_undefined = $(strip \
$(call assert_called,var_assign_undefined,$0) \
$(if $(filter-out undefined,$(origin $1)),$(call __var_assign,$1:=,)) \
)
else # Since version 3.82 GNU Make provides true 'undefine' directive.
var_assign_undefined = \
$(call assert_called,var_assign_undefined,$0)$(call __var_assign,undefine $1,)
endif

49 changes: 3 additions & 46 deletions mk/util/var.mk
Original file line number Diff line number Diff line change
Expand Up @@ -17,53 +17,10 @@ expansion: [$($1)]

endef

# eval is 3.81 bug (Savannah #27394) workaround.
${eval $( \
)$(\n)define __var_define_mk$( \
)$(\n)define $$1$(\n)$$2$(\n)endef$( \
)$(\n)endef$( \
)}
__var_make_version := $(if $(call make_version_gte,3.82),3.82,$(MAKE_VERSION))
include $(dir $(self_makefile))/var-$(__var_make_version).mk

${eval $( \
)$(\n)define __var_assign_recursive_mk$( \
)$(\n)$(call __var_define_mk,$$1,$$2)$( \
)$(\n)endef$( \
)}

__var_assign_template_mk_def = ${eval $( \
)$(\n)define $1$( \
)$(\n)$(call __var_define_mk,__var_assign_tmp,$$2)$( \
)$(\n)$$1 $2 $$$$(__var_assign_tmp)$( \
)$(\n)endef$( \
)}

$(call __var_assign_template_mk_def,__var_assign_simple_mk,:=)
$(call __var_assign_template_mk_def,__var_assign_append_mk,+=)
$(call __var_assign_template_mk_def,__var_assign_cond_mk,?=)

ifndef MK_UTIL_VAR_NO_OPTIMIZE
${eval $( \
)$(\n)define var_assign_recursive$( \
)$(\n)$${eval $(value __var_assign_recursive_mk)}$( \
)$(\n)endef$( \
)}
else
var_assign_recursive = ${eval $(__var_assign_recursive_mk)}
endif

var_assign_simple = ${eval $(__var_assign_simple_mk)}
var_assign_append = ${eval $(__var_assign_append_mk)}
var_assign_cond = ${eval $(__var_assign_cond_mk)}

ifeq ($(MAKE_VERSION),3.81)
var_assign_undefined = $(strip \
$(call assert_called,var_assign_undefined,$0) \
$(if $(filter-out undefined,$(origin $1)),$(call __var_assign,$1:=,)) \
)
else # Since version 3.82 GNU Make provides true 'undefine' directive.
var_assign_undefined = \
$(call assert_called,var_assign_undefined,$0)$(call __var_assign,undefine $1,)
endif
# XXX rewrite everything below. -- Eldar

var_define = \
$(call assert_called,var_define,$0)$(call var_assign_recursive,$1,$2)
Expand Down

0 comments on commit f087245

Please sign in to comment.