aboutsummaryrefslogtreecommitdiffstats
path: root/include/prereq.mk
blob: e514855a67fdf3177a583270a22f97934097dce8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

$(TMP_DIR):
	mkdir -p $@

prereq:
	echo
	if [ -f $(TMP_DIR)/.prereq-error ]; then \
		cat $(TMP_DIR)/.prereq-error; \
		echo; \
		rm -rf $(TMP_DIR); \
		false; \
	fi
	rm -rf $(TMP_DIR)
	mkdir -p $(TMP_DIR)

.SILENT: $(TMP_DIR) prereq

define Require
  ifeq ($$(CHECK_$(1)),)
    prereq: prereq-$(1)

    prereq-$(1): $(TMP_DIR) FORCE
		echo -n "Checking '$(1)'... "
		if $(NO_TRACE_MAKE) -f $(INCLUDE_DIR)/prereq.mk check-$(1) >/dev/null 2>/dev/null; then \
			echo 'ok.'; \
		else \
			echo 'failed.'; \
			echo -e "$(strip $(2))" >> $(TMP_DIR)/.prereq-error; \
		fi

    check-$(1): FORCE
	  $(call Require/$(1))
    CHECK_$(1):=1

    .SILENT: prereq-$(1) check-$(1)
  endif
endef


define RequireCommand
  define Require/$(1)
    which $(1)
  endef

  $$(eval $$(call Require,$(1),$(2)))
endef

# Required for the toolchain
define Require/working-make
	echo 'all: test' > $(TMP_DIR)/check.mk
	echo 'e0 = $$$$(foreach s,foobar,$$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
	echo 'e1 = $$$$(foreach s,foobar, $$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
	echo 'test: $$$$(strip $$$$(e0)) $$$$(strip $$$$(e1))' >> $(TMP_DIR)/check.mk
	$(NO_TRACE_MAKE) -f $(TMP_DIR)/check.mk
endef

$(eval $(call Require,working-make, \
	Your make version is buggy. Please install GNU make v3.81 or later. \
))

define Require/working-gcc
	echo 'int main(int argc, char **argv) { return 0; }' | \
		gcc -x c -o $(TMP_DIR)/a.out -
endef

$(eval $(call Require,working-gcc, \
	No working GNU C Compiler (gcc) was found on your system. \
))

define Require/working-g++
	echo 'int main(int argc, char **argv) { return 0; }' | \
		g++ -x c++ -o $(TMP_DIR)/a.out -lstdc++ -
endef

$(eval $(call Require,working-g++, \
	No working GNU C++ Compiler (g++) was found on your system. \
))

define Require/ncurses
	echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \
		gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out -lncurses -
endef

$(eval $(call Require,ncurses, \
	No ncurses development files were not found on your system. \
))


define Require/zlib
	echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
		gcc -include zlib.h -x c -o $(TMP_DIR)/a.out -lz -
endef

$(eval $(call Require,zlib, \
	No zlib development files were not found on your system. \
))


$(eval $(call RequireCommand,bison, \
	Please install GNU bison. \
))

$(eval $(call RequireCommand,flex, \
	Please install flex. \
))

$(eval $(call RequireCommand,python, \
	Please install python. \
))

$(eval $(call RequireCommand,unzip, \
	Please install unzip. \
))

$(eval $(call RequireCommand,bzip2, \
	Please install bzip2. \
))

$(eval $(call RequireCommand,patch, \
	Please install patch. \
))

$(eval $(call RequireCommand,perl, \
	Please install perl. \
))