targetvars 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. # -*-perl-*-
  2. $description = "Test target-specific variable settings.";
  3. $details = "\
  4. Create a makefile containing various flavors of target-specific variable
  5. values, override and non-override, and using various variable expansion
  6. rules, semicolon interference, etc.";
  7. open(MAKEFILE,"> $makefile");
  8. print MAKEFILE <<'EOF';
  9. SHELL = /bin/sh
  10. export FOO = foo
  11. export BAR = bar
  12. one: override FOO = one
  13. one two: ; @echo $(FOO) $(BAR)
  14. two: BAR = two
  15. three: ; BAR=1000
  16. @echo $(FOO) $(BAR)
  17. # Some things that shouldn't be target vars
  18. funk : override
  19. funk : override adelic
  20. adelic override : ; echo $@
  21. # Test per-target recursive variables
  22. four:FOO=x
  23. four:VAR$(FOO)=ok
  24. four: ; @echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx)'
  25. five:FOO=x
  26. five six : VAR$(FOO)=good
  27. five six: ;@echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx) $(VARfoo)'
  28. # Test per-target variable inheritance
  29. seven: eight
  30. seven eight: ; @echo $@: $(FOO) $(BAR)
  31. seven: BAR = seven
  32. seven: FOO = seven
  33. eight: BAR = eight
  34. # Test the export keyword with per-target variables
  35. nine: ; @echo $(FOO) $(BAR) $$FOO $$BAR
  36. nine: FOO = wallace
  37. # Test = escaping
  38. EQ = =
  39. ten: one\=two
  40. ten: one \= two
  41. ten one$(EQ)two $(EQ):;@echo $@
  42. .PHONY: one two three four five six seven eight nine ten $(EQ) one$(EQ)two
  43. # Test target-specific vars with pattern/suffix rules
  44. QVAR = qvar
  45. RVAR = =
  46. %.q : ; @echo $(QVAR) $(RVAR)
  47. foo.q : RVAR += rvar
  48. # Target-specific vars with multiple LHS pattern rules
  49. %.r %.s %.t: ; @echo $(QVAR) $(RVAR) $(SVAR) $(TVAR)
  50. foo.r : RVAR += rvar
  51. foo.t : TVAR := $(QVAR)
  52. EOF
  53. close(MAKEFILE);
  54. # TEST #1
  55. &run_make_with_options($makefile, "one two three", &get_logfile);
  56. $answer = "one bar\nfoo two\nBAR=1000\nfoo bar\n";
  57. &compare_output($answer,&get_logfile(1));
  58. # TEST #2
  59. &run_make_with_options($makefile, "one two FOO=1 BAR=2", &get_logfile);
  60. $answer = "one 2\n1 2\n";
  61. &compare_output($answer,&get_logfile(1));
  62. # TEST #3
  63. &run_make_with_options($makefile, "four", &get_logfile);
  64. $answer = "x ok ok\n";
  65. &compare_output($answer,&get_logfile(1));
  66. # TEST #4
  67. &run_make_with_options($makefile, "seven", &get_logfile);
  68. $answer = "eight: seven eight\nseven: seven seven\n";
  69. &compare_output($answer,&get_logfile(1));
  70. # TEST #5
  71. &run_make_with_options($makefile, "nine", &get_logfile);
  72. $answer = "wallace bar wallace bar\n";
  73. &compare_output($answer,&get_logfile(1));
  74. # TEST #6
  75. &run_make_with_options($makefile, "ten", &get_logfile);
  76. $answer = "one=two\none bar\n=\nfoo two\nten\n";
  77. &compare_output($answer,&get_logfile(1));
  78. # TEST #6
  79. &run_make_with_options($makefile, "foo.q bar.q", &get_logfile);
  80. $answer = "qvar = rvar\nqvar =\n";
  81. &compare_output($answer,&get_logfile(1));
  82. # TEST #7
  83. &run_make_with_options($makefile, "foo.t bar.s", &get_logfile);
  84. $answer = "qvar = qvar\nqvar =\n";
  85. &compare_output($answer,&get_logfile(1));
  86. # TEST #8
  87. # For PR/1378: Target-specific vars don't inherit correctly
  88. $makefile2 = &get_tmpfile;
  89. open(MAKEFILE,"> $makefile2");
  90. print MAKEFILE <<'EOF';
  91. foo: FOO = foo
  92. bar: BAR = bar
  93. foo: bar
  94. bar: baz
  95. baz: ; @echo $(FOO) $(BAR)
  96. EOF
  97. close(MAKEFILE);
  98. &run_make_with_options("$makefile2", "", &get_logfile);
  99. $answer = "foo bar\n";
  100. &compare_output($answer, &get_logfile(1));
  101. # TEST #9
  102. # For PR/1380: Using += assignment in target-specific variables sometimes fails
  103. $makefile3 = &get_tmpfile;
  104. open(MAKEFILE,"> $makefile3");
  105. print MAKEFILE <<'EOF';
  106. .PHONY: all one
  107. all: FOO += baz
  108. all: one; @echo $(FOO)
  109. FOO = bar
  110. one: FOO += biz
  111. one: ; @echo $(FOO)
  112. EOF
  113. close(MAKEFILE);
  114. &run_make_with_options("$makefile3", "", &get_logfile);
  115. $answer = "bar baz biz\nbar baz\n";
  116. &compare_output($answer, &get_logfile(1));
  117. &run_make_with_options("$makefile3", "one", &get_logfile);
  118. $answer = "bar biz\n";
  119. &compare_output($answer, &get_logfile(1));
  120. 1;