Changeset 1109 in kBuild
- Timestamp:
- Sep 24, 2007 2:27:14 AM (17 years ago)
- Location:
- trunk/src/kmk
- Files:
-
- 4 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/Makefile.am
r986 r1109 110 110 -DCONFIG_WITH_XARGS \ 111 111 -DCONFIG_WITH_NANOTS \ 112 -DCONFIG_WITH_SET_CONDITIONALS \ 112 113 -DCONFIG_PRETTY_COMMAND_PRINTING \ 113 114 \ … … 116 117 -DBUILD_PLATFORM_CPU=\"$(BUILD_TARGET_CPU)\" \ 117 118 \ 118 119 120 119 -DKBUILD_VERSION_MAJOR=0 \ 120 -DKBUILD_VERSION_MINOR=1 \ 121 -DKBUILD_VERSION_PATCH=0 \ 121 122 \ 122 123 -DCONFIG_WITH_KMK_BUILTIN \ -
trunk/src/kmk/Makefile.kmk
r1101 r1109 26 26 $(PATH_TARGET)/pwd.h \ 27 27 $(PATH_TARGET)/inttypes.h 28 TEMPLATE_BIN-KMK_CFLAGS.win.amd64 = $(TEMPLATE_BIN_CFLAGS.win.amd64) -wd4244 -wd4267 28 29 TEMPLATE_BIN-KMK_CLEAN.win = $(TEMPLATE_BIN-KMK_DEPS.win) 29 30 TEMPLATE_BIN-KMK_INCS = $(PATH_TARGET) . $(TEMPLATE_BIN_INCS) … … 112 113 CONFIG_WITH_XARGS \ 113 114 CONFIG_WITH_NANOTS \ 115 CONFIG_WITH_SET_CONDITIONALS \ 114 116 CONFIG_PRETTY_COMMAND_PRINTING \ 115 117 \ … … 367 369 $(MAKE) -f testcase-math.kmk 368 370 369 370 test_all: test_math test_stack test_shell 371 371 test_if1of: 372 $(MAKE) -f testcase-if1of.kmk 373 374 test_all: test_math test_stack test_shell test_if1of 375 -
trunk/src/kmk/read.c
r1022 r1109 1519 1519 1520 1520 /* Interpret conditional commands "ifdef", "ifndef", "ifeq", 1521 "ifneq", " else" and "endif".1521 "ifneq", "if1of", "ifn1of", "else" and "endif". 1522 1522 LINE is the input line, with the command as its first word. 1523 1523 … … 1534 1534 { 1535 1535 char *cmdname; 1536 #ifdef CONFIG_WITH_SET_CONDITIONALS 1537 enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_if1of, c_ifn1of, c_else, c_endif } cmdtype; 1538 #else 1536 1539 enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_else, c_endif } cmdtype; 1540 #endif 1537 1541 unsigned int i; 1538 1542 unsigned int o; … … 1547 1551 else chkword ("ifeq", c_ifeq) 1548 1552 else chkword ("ifneq", c_ifneq) 1553 #ifdef CONFIG_WITH_SET_CONDITIONALS 1554 else chkword ("if1of", c_if1of) 1555 else chkword ("ifn1of", c_ifn1of) 1556 #endif 1549 1557 else chkword ("else", c_else) 1550 1558 else chkword ("endif", c_endif) … … 1687 1695 else 1688 1696 { 1697 #ifdef CONFIG_WITH_SET_CONDITIONALS 1698 /* "ifeq", "ifneq", "if1of" or "ifn1of". */ 1699 #else 1689 1700 /* "ifeq" or "ifneq". */ 1701 #endif 1690 1702 char *s1, *s2; 1691 1703 unsigned int l; … … 1776 1788 1777 1789 s2 = variable_expand (s2); 1790 #ifdef CONFIG_WITH_SET_CONDITIONALS 1791 if (cmdtype == c_if1of || cmdtype == c_ifn1of) 1792 { 1793 const char *s1_cur; 1794 unsigned int s1_len; 1795 const char *s1_iterator = s1; 1796 1797 conditionals->ignoring[o] = (cmdtype == c_if1of); /* if not found */ 1798 while ((s1_cur = find_next_token (&s1_iterator, &s1_len)) != 0) 1799 { 1800 const char *s2_cur; 1801 unsigned int s2_len; 1802 const char *s2_iterator = s2; 1803 while ((s2_cur = find_next_token (&s2_iterator, &s2_len)) != 0) 1804 if (s2_len == s1_len 1805 && strneq (s2_cur, s1_cur, s1_len) ) 1806 { 1807 conditionals->ignoring[o] = (cmdtype != c_if1of); /* found */ 1808 break; 1809 } 1810 } 1811 } 1812 else 1813 conditionals->ignoring[o] = (streq (s1, s2) == (cmdtype == c_ifneq)); 1814 #else 1778 1815 conditionals->ignoring[o] = (streq (s1, s2) == (cmdtype == c_ifneq)); 1816 #endif 1779 1817 } 1780 1818 … … 2069 2107 cmp timestamp maybe.h || cp -f timestamp maybe.h 2070 2108 2071 This is implemented in remake.c where we don't consider the mtime of 2109 This is implemented in remake.c where we don't consider the mtime of 2072 2110 the maybe-updated targets. */ 2073 2111 if (multi_mode != m_no && name[0] == '+' -
trunk/src/kmk/testcase-if1of.kmk
r1100 r1109 1 1 # $Id: $ 2 2 ## @file 3 # kBuild - testcase for the if1of and ifn1of conditionals. 3 4 # 4 # kBuild - testcase for the functions. 5 5 6 # 6 # Copyright (c) 200 6-2007 knut st. osmundsen <bird-kBuild[email protected]>7 # Copyright (c) 2007 knut st. osmundsen <bird-src[email protected]> 7 8 # 9 # This file is part of kBuild. 8 10 # 9 # This file is part of kLdr. 10 # 11 # kLdr is free software; you can redistribute it and/or modify 11 # kBuild is free software; you can redistribute it and/or modify 12 12 # it under the terms of the GNU General Public License as published by 13 13 # the Free Software Foundation; either version 2 of the License, or 14 14 # (at your option) any later version. 15 15 # 16 # k Ldris distributed in the hope that it will be useful,16 # kBuild is distributed in the hope that it will be useful, 17 17 # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the … … 20 20 # 21 21 # You should have received a copy of the GNU General Public License 22 # along with k Ldr; if not, write to the Free Software23 # Foundation, Inc., 5 9 Temple Place, Suite 330, Boston, MA 02111-1307USA22 # along with kBuild; if not, write to the Free Software 23 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 24 # 25 25 # … … 28 28 include $(PATH_KBUILD)/header.kmk 29 29 30 ifneq ($(not 1),) 31 $(error The 'not' function is missing) 30 # the basics. 31 if1of (asdf,asdf) 32 else 33 $(error busted) 32 34 endif 33 ifn eq ($(eq 1,1),1)34 $(error The 'eq' function is missing)35 ifn1of (asdf,asdf) 36 $(error busted) 35 37 endif 36 38 37 ASSERT1 = $(if $(not $(eq $(STACK1),$(1))),$(error failure: STACK1:='$(STACK1)' expected='$(1)')) 38 $(call stack-push,STACK1,1) 39 $(call ASSERT,1) 40 $(call stack-push,STACK1,2) 41 $(call ASSERT,1 2) 42 $(call stack-push,STACK1,3) 43 $(call ASSERT,1 2 3) 44 $(call stack-push,STACK1,4) 45 $(call ASSERT,1 2 3 4) 46 $(call stack-push,STACK1,5) 47 $(call ASSERT,1 2 3 4 5) 48 $(call stack-popv,STACK1) 49 $(call ASSERT,1 2 3 4) 50 $(call stack-push,STACK1,5) 51 $(call ASSERT,1 2 3 4 5) 52 $(call stack-popv,STACK1) 53 $(call ASSERT,1 2 3 4) 54 $(call stack-popv,STACK1) 55 $(call ASSERT,1 2 3) 56 $(call stack-push,STACK1,4) 57 $(call ASSERT,1 2 3 4) 58 $(call stack-push,STACK1,5) 59 $(call ASSERT,1 2 3 4 5) 60 top := $(call stack-top,STACK1) 61 $(if $(not $(eq $(top),5)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='5')) 62 $(call ASSERT,1 2 3 4 5) 63 top := $(call stack-pop,STACK1) 64 $(if $(not $(eq $(top),5)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='5')) 65 $(call ASSERT,1 2 3 4) 66 top := $(call stack-pop,STACK1) 67 $(if $(not $(eq $(top),4)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='4')) 68 $(call ASSERT,1 2 3) 69 top := $(call stack-pop,STACK1) 70 $(if $(not $(eq $(top),3)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='3')) 71 $(call ASSERT,1 2) 72 top := $(call stack-pop,STACK1) 73 $(if $(not $(eq $(top),2)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='2')) 74 $(call ASSERT,1) 75 top := $(call stack-top,STACK1) 76 $(if $(not $(eq $(top),1)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='1')) 77 $(call ASSERT,1) 78 top := $(call stack-pop,STACK1) 79 $(if $(not $(eq $(top),1)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='1')) 80 $(call ASSERT,) 81 top := $(call stack-pop,STACK1) 82 $(if $(not $(eq $(top),)),$(error failure STACK1:='$(STACK1)' top:='$(top)' expected='')) 83 $(call ASSERT,) 39 # larger sets. 40 if1of (1,2 3 4 5 6 7 8 9 0) 41 $(error busted) 42 endif 43 if1of (1,12 3 4 5 6 7 8 9 0) 44 $(error busted) 45 endif 46 if1of (1,2 31 4 5 6 7 8 9 0) 47 $(error busted) 48 endif 49 ifn1of (1,1 2 3 4 5 6 7 8 9 0) 50 $(error busted) 51 endif 52 ifn1of (8,1 2 3 4 5 6 7 8 9 0) 53 $(error busted) 54 endif 55 ifn1of (asdf,asdf) 56 $(error busted) 57 endif 58 ifn1of (asdf,asdf asdf) 59 $(error busted) 60 endif 61 62 # any in set 1 match any in set 2. 63 if1of (1 3 5 7 9, 2 4 6 8) 64 $(error busted) 65 endif 66 ifn1of (1 2 3 4 5, 2 4 6 8) 67 $(error busted) 68 endif 69 70 # real life. 71 ifn1of (win linux, linux) 72 $(error busted) 73 endif 74 ifn1of (win.x86, win.amd64 linux.x86 darwin.x86 win.x86 os2.x86) 75 $(error busted) 76 endif 77 84 78 85 79 all_recursive: 86 $(ECHO) The stack works.$(STACK1)80 $(ECHO) "if1of and ifn1of works fine" -
trunk/src/kmk/variable.c
r1107 r1109 1036 1036 && defined(CONFIG_WITH_EXPLICIT_MULTITARGET) \ 1037 1037 && defined(CONFIG_WITH_PREPEND_ASSIGNMENT) \ 1038 && defined(CONFIG_WITH_SET_CONDITIONALS) \ 1038 1039 && defined(KMK_HELPERS) 1039 1040 (void) define_variable ("KMK_FEATURES", 12, … … 1048 1049 " explicit-multitarget" 1049 1050 " prepend-assignment" 1051 " set-conditionals" 1050 1052 " kb-src-tool kb-obj-base kb-obj-suff kb-src-prop kb-src-one " 1051 1053 , o_default, 0); … … 1077 1079 strcat (buf, " explicit-multitarget"); 1078 1080 # endif 1079 # if defined (CONFIG_WITH_PREPEND_ASSIGNMENT) \1081 # if defined (CONFIG_WITH_PREPEND_ASSIGNMENT) 1080 1082 strcat (buf, " prepend-assignment"); 1083 # endif 1084 # if defined (CONFIG_WITH_SET_CONDITIONALS) 1085 strcat (buf, " set-conditionals"); 1081 1086 # endif 1082 1087 # if defined (KMK_HELPERS)
Note:
See TracChangeset
for help on using the changeset viewer.