comparison Makefile @ 306:85ffa9259036

validate downloads using SHA-1 checksums
author Volker Grabsch <vog@notjusthosting.com>
date Sun, 05 Apr 2009 14:00:17 +0200
parents d3cbc6a36d1c
children 5c5e254fa32b
comparison
equal deleted inserted replaced
305:d3cbc6a36d1c 306:85ffa9259036
3 3
4 JOBS := 1 4 JOBS := 1
5 TARGET := i386-mingw32msvc 5 TARGET := i386-mingw32msvc
6 SOURCEFORGE_MIRROR := kent.dl.sourceforge.net 6 SOURCEFORGE_MIRROR := kent.dl.sourceforge.net
7 7
8 VERSION := 2.5 8 VERSION := 2.5
9 PREFIX := $(PWD)/usr 9 PREFIX := $(PWD)/usr
10 PKG_DIR := $(PWD)/pkg 10 PKG_DIR := $(PWD)/pkg
11 TMP_DIR = $(PWD)/tmp-$(1) 11 TMP_DIR = $(PWD)/tmp-$(1)
12 TOP_DIR := $(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))) 12 MAKEFILE := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
13 PATH := $(PREFIX)/bin:$(PATH) 13 TOP_DIR := $(patsubst %/,%,$(dir $(MAKEFILE)))
14 SHELL := bash 14 PATH := $(PREFIX)/bin:$(PATH)
15 SED := $(shell gsed --help >/dev/null 2>&1 && echo g)sed 15 SHELL := bash
16 INSTALL := $(shell ginstall --help >/dev/null 2>&1 && echo g)install 16 SED := $(shell gsed --help >/dev/null 2>&1 && echo g)sed
17 INSTALL := $(shell ginstall --help >/dev/null 2>&1 && echo g)install
17 18
18 # unset any environment variables which might cause trouble 19 # unset any environment variables which might cause trouble
19 AR = 20 AR =
20 CC = 21 CC =
21 CFLAGS = 22 CFLAGS =
38 $(word 1,$(subst ., ,$($(1)_VERSION))).$(word 2,$(subst ., ,$($(1)_VERSION))) 39 $(word 1,$(subst ., ,$($(1)_VERSION))).$(word 2,$(subst ., ,$($(1)_VERSION)))
39 40
40 PKG_RULES := $(patsubst $(TOP_DIR)/src/%.mk,%,$(wildcard $(TOP_DIR)/src/*.mk)) 41 PKG_RULES := $(patsubst $(TOP_DIR)/src/%.mk,%,$(wildcard $(TOP_DIR)/src/*.mk))
41 include $(TOP_DIR)/src/*.mk 42 include $(TOP_DIR)/src/*.mk
42 43
43 CHECK_ARCHIVE = \
44 $(if $(filter %.tgz, $(1)),tar tfz '$(1)' >/dev/null 2>&1, \
45 $(if $(filter %.tar.gz, $(1)),tar tfz '$(1)' >/dev/null 2>&1, \
46 $(if $(filter %.tar.bz2,$(1)),tar tfj '$(1)' >/dev/null 2>&1, \
47 $(if $(filter %.zip, $(1)),unzip -t '$(1)' >/dev/null 2>&1, \
48 $(error Unknown archive format: $(1))))))
49
50 UNPACK_ARCHIVE = \ 44 UNPACK_ARCHIVE = \
51 $(if $(filter %.tgz, $(1)),tar xvzf '$(1)', \ 45 $(if $(filter %.tgz, $(1)),tar xvzf '$(1)', \
52 $(if $(filter %.tar.gz, $(1)),tar xvzf '$(1)', \ 46 $(if $(filter %.tar.gz, $(1)),tar xvzf '$(1)', \
53 $(if $(filter %.tar.bz2,$(1)),tar xvjf '$(1)', \ 47 $(if $(filter %.tar.bz2,$(1)),tar xvjf '$(1)', \
54 $(if $(filter %.zip, $(1)),unzip '$(1)', \ 48 $(if $(filter %.zip, $(1)),unzip '$(1)', \
55 $(error Unknown archive format: $(1)))))) 49 $(error Unknown archive format: $(1))))))
56 50
57 UNPACK_PKG_ARCHIVE = \ 51 UNPACK_PKG_ARCHIVE = \
58 $(call UNPACK_ARCHIVE,$(PKG_DIR)/$($(1)_FILE)) 52 $(call UNPACK_ARCHIVE,$(PKG_DIR)/$($(1)_FILE))
59 53
54 PKG_CHECKSUM = \
55 sha1sum -b '$(PKG_DIR)/$($(1)_FILE)' | $(SED) -n 's,^\([0-9a-f]\{40\}\).*,\1,p'
56
57 CHECK_PKG_ARCHIVE = \
58 [ '$($(1)_CHECKSUM)' == "`$(call PKG_CHECKSUM,$(1))`" ]
59
60 DOWNLOAD_PKG_ARCHIVE = \
61 $(if $($(1)_URL_2), \
62 wget -T 30 -t 3 -c -O '$(PKG_DIR)/$($(1)_FILE)' '$($(1)_URL)' \
63 || wget -c -O '$(PKG_DIR)/$($(1)_FILE)' '$($(1)_URL_2)', \
64 wget -c -O '$(PKG_DIR)/$($(1)_FILE)' '$($(1)_URL)')
65
60 .PHONY: all 66 .PHONY: all
61 all: $(PKG_RULES) 67 all: $(PKG_RULES)
62 68
63 define PKG_RULE 69 define PKG_RULE
64 .PHONY: $(1) 70 .PHONY: $(1)
65 $(1): $(PREFIX)/installed-$(1) 71 $(1): $(PREFIX)/installed-$(1)
66 $(PREFIX)/installed-$(1): $(TOP_DIR)/src/$(1).mk $(addprefix $(PREFIX)/installed-,$($(1)_DEPS)) 72 $(PREFIX)/installed-$(1): $(TOP_DIR)/src/$(1).mk $(addprefix $(PREFIX)/installed-,$($(1)_DEPS))
67 [ -d '$(PREFIX)' ] || mkdir -p '$(PREFIX)' 73 [ -d '$(PREFIX)' ] || mkdir -p '$(PREFIX)'
68 [ -d '$(PKG_DIR)' ] || mkdir -p '$(PKG_DIR)' 74 [ -d '$(PKG_DIR)' ] || mkdir -p '$(PKG_DIR)'
69 cd '$(PKG_DIR)' && ( \ 75 $(if $$(shell $(call CHECK_PKG_ARCHIVE,$(1)) || echo 'error'),
70 $(call CHECK_ARCHIVE,$($(1)_FILE)) || \ 76 $(call DOWNLOAD_PKG_ARCHIVE,$(1))
71 $(if $($(1)_URL_2), \ 77 $(call CHECK_PKG_ARCHIVE,$(1))
72 wget -T 30 -t 3 -c -O '$($(1)_FILE)' '$($(1)_URL)' || \ 78 ,)
73 wget -c -O '$($(1)_FILE)' '$($(1)_URL_2)', \
74 wget -c -O '$($(1)_FILE)' '$($(1)_URL)'))
75 $(if $(value $(1)_BUILD), 79 $(if $(value $(1)_BUILD),
76 rm -rf '$(2)' 80 rm -rf '$(2)'
77 mkdir -p '$(2)' 81 mkdir -p '$(2)'
78 cd '$(2)' && $(call UNPACK_PKG_ARCHIVE,$(1)) 82 cd '$(2)' && $(call UNPACK_PKG_ARCHIVE,$(1))
79 cd '$(2)/$($(1)_SUBDIR)' 83 cd '$(2)/$($(1)_SUBDIR)'
120 $(foreach PKG,$(PKG_RULES),$(PKG_DIR)/$($(PKG)_FILE)), \ 124 $(foreach PKG,$(PKG_RULES),$(PKG_DIR)/$($(PKG)_FILE)), \
121 $(wildcard $(PKG_DIR)/*))) 125 $(wildcard $(PKG_DIR)/*)))
122 126
123 .PHONY: update 127 .PHONY: update
124 define UPDATE 128 define UPDATE
125 $(if $(2), \ 129 $(if $(2),
126 $(info $(1): $(2)) \ 130 $(info $(1): $(2))
127 $(if $(filter $(2),$($(1)_VERSION)), \ 131 $(if $(filter $(2),$($(1)_VERSION)),
128 , \ 132 ,
129 $(SED) 's/^\([^ ]*_VERSION *:=\).*/\1 $(2)/' -i '$(TOP_DIR)/src/$(1).mk'), \ 133 $(SED) 's/^\([^ ]*_VERSION *:=\).*/\1 $(2)/' -i '$(TOP_DIR)/src/$(1).mk'
134 $(MAKE) -f '$(MAKEFILE)' 'update-checksum-$(1)'),
130 $(error Unable to update version number: $(1))) 135 $(error Unable to update version number: $(1)))
131 136
132 endef 137 endef
133 update: 138 update:
134 $(foreach PKG,$(PKG_RULES),$(call UPDATE,$(PKG),$(shell $($(PKG)_UPDATE)))) 139 $(foreach PKG,$(PKG_RULES),$(call UPDATE,$(PKG),$(shell $($(PKG)_UPDATE))))
140
141 update-checksum-%:
142 $(call DOWNLOAD_PKG_ARCHIVE,$*)
143 $(SED) 's/^\([^ ]*_CHECKSUM *:=\).*/\1 $(shell $(call PKG_CHECKSUM,$*))/' -i '$(TOP_DIR)/src/$*.mk'
135 144
136 .PHONY: dist 145 .PHONY: dist
137 dist: 146 dist:
138 rm -rf 'mingw_cross_env-$(VERSION)' 147 rm -rf 'mingw_cross_env-$(VERSION)'
139 mkdir 'mingw_cross_env-$(VERSION)' 148 mkdir 'mingw_cross_env-$(VERSION)'