summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Gu <timothygu99@gmail.com>2014-04-27 03:26:41 (GMT)
committerTimothy Gu <timothygu99@gmail.com>2014-04-27 03:26:41 (GMT)
commit1fb8ff6fa639e94fcb87b38c9a7b8159fc9ea9e0 (patch)
treefc706d51625d605e3cb485e48030fdffbf2852f5
parentc0069b79aa9d515eae26db57fcc0d5304ad68883 (diff)
downloadmxe-1fb8ff6fa639e94fcb87b38c9a7b8159fc9ea9e0.zip
mxe-1fb8ff6fa639e94fcb87b38c9a7b8159fc9ea9e0.tar.gz
mxe-1fb8ff6fa639e94fcb87b38c9a7b8159fc9ea9e0.tar.bz2
Update GMSL to 1.1.5
Signed-off-by: Timothy Gu <timothygu99@gmail.com>
-rw-r--r--doc/gmsl.html10
-rw-r--r--ext/__gmsl65
-rw-r--r--ext/gmsl12
3 files changed, 52 insertions, 35 deletions
diff --git a/doc/gmsl.html b/doc/gmsl.html
index accdd16..540d51e 100644
--- a/doc/gmsl.html
+++ b/doc/gmsl.html
@@ -22,7 +22,7 @@ include the GMSL in your Makefile do<br>
you have the right version of <span style="font-family: monospace;">gmsl</span>
use the <span style="font-family: monospace;">gmsl_compatible</span>
function (see
-below). The current version is <span style="font-family: monospace;">1 1 3</span>.<br>
+below). The current version is <span style="font-family: monospace;">1 1 5</span>.<br>
<br>
The GMSL package also includes a test suite for GMSL.&nbsp; Just run <span style="font-family: monospace;">make -f gmsl-tests</span>.<br>
<h2>Logical Operators</h2>GMSL has boolean $(true) (a non-empty string)
@@ -488,7 +488,11 @@ Returns:&nbsp;&nbsp;&nbsp;The integer divided by 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: An integer<br>
Returns:&nbsp;&nbsp;&nbsp;The sequence [arg1 arg2] if arg1 >= arg2 or [arg2 arg1] if arg2 > arg1<br>
</span>
-
+<hr><b>dec2hex, dec2bin, dec2oct</b><br>
+<br>
+<span style="font-family: monospace;">Arguments: 1: An integer<br>
+Returns&nbsp;&nbsp;&nbsp;The decimal argument converted to hexadecimal, binary or<br>
+</span>
<hr style="width: 100%; height: 2px;"><span style="font-family: monospace;"></span>
<h2>Associative Arrays</h2>
An associate array maps a key value (a string with no spaces in it) to
@@ -685,7 +689,7 @@ result in name and arguments being traced.<br>
</table>
<span style="font-family: monospace;"></span><br>
<hr>
-Copyright (c) 2005-2012 <a href="http://www.jgc.org/">John Graham-Cumming</a>.<br>
+Copyright (c) 2005-2014 <a href="http://www.jgc.org/">John Graham-Cumming</a>.<br>
<hr style="width: 100%; height: 2px;">
<table style="width: 100%; text-align: left;" border="0" cellpadding="2" cellspacing="2">
<tbody>
diff --git a/ext/__gmsl b/ext/__gmsl
index 90a9d69..b2a6016 100644
--- a/ext/__gmsl
+++ b/ext/__gmsl
@@ -5,7 +5,7 @@
# A library of functions to be used with GNU Make's $(call) that
# provides functionality not available in standard GNU Make.
#
-# Copyright (c) 2005-2013 John Graham-Cumming
+# Copyright (c) 2005-2014 John Graham-Cumming
#
# This file is part of GMSL
#
@@ -42,21 +42,24 @@
# This is the GNU Make Standard Library version number as a list with
# three items: major, minor, revision
-gmsl_version := 1 1 3
+gmsl_version := 1 1 5
+
+__gmsl_name := GNU Make Standard Library
# Used to output warnings and error from the library, it's possible to
# disable any warnings or errors by overriding these definitions
# manually or by setting GMSL_NO_WARNINGS or GMSL_NO_ERRORS
-__gmsl_name := GNU Make Standard Library
-__gmsl_warning = $(warning $(__gmsl_name): $1)
-__gmsl_error = $(error $(__gmsl_name): $1)
-
ifdef GMSL_NO_WARNINGS
__gmsl_warning :=
+else
+__gmsl_warning = $(if $1,$(warning $(__gmsl_name): $1))
endif
+
ifdef GMSL_NO_ERRORS
__gmsl_error :=
+else
+ __gmsl_error = $(if $1,$(error $(__gmsl_name): $1))
endif
# If GMSL_TRACE is enabled then calls to the library functions are
@@ -119,6 +122,7 @@ __gmsl_dollar := $$
__gmsl_hash := \#
# ----------------------------------------------------------------------------
+# ----------------------------------------------------------------------------
# Function: gmsl_compatible
# Arguments: List containing the desired library version number (maj min rev)
# Returns: $(true) if this version of the library is compatible
@@ -412,7 +416,7 @@ __gmsl_tab := #
# Note: The string in $1 must not contain a §
# ----------------------------------------------------------------------------
-substr = $(__gmsl_tr3)$(call assert_no_dollar,$0,$1$2$3)$(strip $(eval __temp := $$(subst $$(__gmsl_space),§ ,$$1))$(foreach a,$(__gmsl_characters),$(eval __temp := $$(subst $$a,$$a$$(__gmsl_space),$(__temp))))$(eval __temp := $(wordlist $2,$3,$(__temp))))$(subst §,$(__gmsl_space),$(subst $(__gmsl_space),,$(__temp)))
+substr = $(if $2,$(__gmsl_tr3)$(call assert_no_dollar,$0,$1$2$3)$(strip $(eval __temp := $$(subst $$(__gmsl_space),§ ,$$1))$(foreach a,$(__gmsl_characters),$(eval __temp := $$(subst $$a,$$a$$(__gmsl_space),$(__temp))))$(eval __temp := $(wordlist $2,$3,$(__temp))))$(subst §,$(__gmsl_space),$(subst $(__gmsl_space),,$(__temp))))
endif # __gmsl_have_eval
@@ -495,15 +499,7 @@ set_equal = $(__gmsl_tr2)$(call seq,$1,$2)
# ###########################################################################
# Integers a represented by lists with the equivalent number of x's.
-# For example the number 4 is x x x x. The maximum integer that the
-# library can handle as _input_ is __gmsl_input_int which is defined
-# here as 65536
-
-__gmsl_sixteen := x x x x x x x x x x x x x x x x
-__gmsl_input_int := $(foreach a,$(__gmsl_sixteen), \
- $(foreach b,$(__gmsl_sixteen), \
- $(foreach c,$(__gmsl_sixteen), \
- $(__gmsl_sixteen)))))
+# For example the number 4 is x x x x.
# ----------------------------------------------------------------------------
# Function: int_decode
@@ -518,7 +514,8 @@ int_decode = $(__gmsl_tr1)$(words $1)
# Arguments: 1: A number in human-readable integer form
# Returns: Returns the integer encoded as a string of x's
# ----------------------------------------------------------------------------
-int_encode = $(__gmsl_tr1)$(wordlist 1,$1,$(__gmsl_input_int))
+__int_encode = $(if $1,$(if $(call seq,$(words $(wordlist 1,$1,$2)),$1),$(wordlist 1,$1,$2),$(call __int_encode,$1,$(if $2,$2 $2,x))))
+int_encode = $(__gmsl_tr1)$(call __int_encode,$1)
# The arithmetic library functions come in two forms: one form of each
# function takes integers as arguments and the other form takes the
@@ -600,10 +597,10 @@ multiply = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_multiply,$1,$2)
# Returns: Returns the result of integer division of argument 1 divided
# by argument 2 in x's representation
# ----------------------------------------------------------------------------
-int_divide = $(__gmsl_tr2)$(strip $(if $2, \
+int_divide = $(__gmsl_tr2)$(strip $(if $1,$(if $2, \
$(if $(call int_gte,$1,$2), \
x $(call int_divide,$(call int_subtract,$1,$2),$2),), \
- $(call __gmsl_error,Division by zero)))
+ $(call __gmsl_error,Division by zero))))
# ----------------------------------------------------------------------------
# Function: divide (wrapped version of int_divide)
@@ -701,9 +698,9 @@ inc = $(__gmsl_tr1)$(call __gmsl_int_wrap1,int_inc,$1)
# Arguments: 1: A number in x's representation
# Returns: The number decremented by 1 in x's representation
# ----------------------------------------------------------------------------
-int_dec = $(__gmsl_tr1)$(strip $(if $(call sne,0,$(words $1)), \
- $(wordlist 2,$(words $1),$1), \
- $(call __gmsl_warning,Decrement underflow)))
+int_dec = $(__gmsl_tr1)$(strip \
+ $(if $(call sne,0,$(words $1)), \
+ $(wordlist 2,$(words $1),$1)))
# ----------------------------------------------------------------------------
# Function: dec
@@ -757,6 +754,26 @@ sequence = $(__gmsl_tr2)$(strip $(if $(call lte,$1,$2), \
__gmsl_sequence_up = $(if $(call seq,$1,$2),$1,$1 $(call __gmsl_sequence_up,$(call inc,$1),$2))
__gmsl_sequence_dn = $(if $(call seq,$1,$2),$1,$2 $(call __gmsl_sequence_dn,$1,$(call dec,$2)))
+# ----------------------------------------------------------------------------
+# Function: dec2hex, dec2bin, dec2oct
+# Arguments: 1: An integer
+# Returns: The decimal argument converted to hexadecimal, binary or
+# octal
+# ----------------------------------------------------------------------------
+
+__gmsl_digit = $(subst 15,f,$(subst 14,e,$(subst 13,d,$(subst 12,c,$(subst 11,b,$(subst 10,a,$1))))))
+
+dec2hex = $(call __gmsl_dec2base,$(call int_encode,$1),$(call int_encode,16))
+dec2bin = $(call __gmsl_dec2base,$(call int_encode,$1),$(call int_encode,2))
+dec2oct = $(call __gmsl_dec2base,$(call int_encode,$1),$(call int_encode,8))
+
+__gmsl_base_divide = $(subst $2,X ,$1)
+__gmsl_q = $(strip $(filter X,$1))
+__gmsl_r = $(words $(filter x,$1))
+
+__gmsl_dec2base = $(eval __gmsl_temp := $(call __gmsl_base_divide,$1,$2))$(call __gmsl_dec2base_,$(call __gmsl_q,$(__gmsl_temp)),$(call __gmsl_r,$(__gmsl_temp)),$2)
+__gmsl_dec2base_ = $(if $1,$(call __gmsl_dec2base,$(subst X,x,$1),$3))$(call __gmsl_digit,$2)
+
ifdef __gmsl_have_eval
# ###########################################################################
# ASSOCIATIVE ARRAYS
@@ -888,7 +905,7 @@ gmsl-print-%: ; @echo $* = $($*)
# 2: The message to print with the assertion
# Returns: None
# ----------------------------------------------------------------------------
-assert = $(if $1,,$(call __gmsl_error,Assertion failure: $2))
+assert = $(if $2,$(if $1,,$(call __gmsl_error,Assertion failure: $2)))
# ----------------------------------------------------------------------------
# Function: assert_exists
@@ -896,7 +913,7 @@ assert = $(if $1,,$(call __gmsl_error,Assertion failure: $2))
# will be generated
# Returns: None
# ----------------------------------------------------------------------------
-assert_exists = $(call assert,$(wildcard $1),file '$1' missing)
+assert_exists = $(if $0,$(call assert,$(wildcard $1),file '$1' missing))
# ----------------------------------------------------------------------------
# Function: assert_no_dollar
diff --git a/ext/gmsl b/ext/gmsl
index b4e907b..78407dd 100644
--- a/ext/gmsl
+++ b/ext/gmsl
@@ -66,6 +66,8 @@ __gmsl_included := $(true)
# include /foo/gmsl then extract the /foo/ so that __gmsl gets
# included transparently
+__gmsl_root :=
+
ifneq ($(MAKEFILE_LIST),)
__gmsl_root := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
@@ -73,17 +75,11 @@ __gmsl_root := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
ifeq (1,$(words $(__gmsl_root)))
__gmsl_root := $(patsubst %gmsl,%,$(__gmsl_root))
-else
-__gmsl_root :=
endif
-include $(__gmsl_root)__gmsl
-
-else
-
-include __gmsl
-
endif
+include $(__gmsl_root)__gmsl
+
endif # __gmsl_included