Mercurial > mxe-octave
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)' |