summaryrefslogtreecommitdiff
path: root/src/minefield-packager.mk.in
blob: a0b0f7b0249dd9f05748f111b8d5c0c77fa1508c (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
#!/usr/bin/make -f

URLBASE    := http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/
MACHINE    := $(shell uname -m)
WORKDIR    := temp-$(shell echo $$$$)
BUILDSTAMP := $(WORKDIR)/build-stamp
PKGNAME    := firefox-minefield

MOZDEVSCRIPT_DIR := minefield-packager
LIBDIR           := $(MOZDEVSCRIPT_DIR)/

ifeq (,$(filter i686 x86_64,$(MACHINE)))
$(error $(MACHINE) is not a supported platform)
endif

ifeq (,$(DEBIAN_DATE))
SNAPSHOT=latest
else
SNAPSHOT=$(DEBIAN_DATE)
endif

LINE := $(shell wget -qO - $(URLBASE)$(SNAPSHOT)-trunk/ | grep linux-$(MACHINE).tar.bz2)

ifeq (,$(LINE))
$(error Could not find a valid archive for $(MACHINE))
endif

FILE := $(shell echo '$(LINE)' | cut -d'"' -f8)

#############################

GARBAGE += $(WORKDIR)

.PHONY: build
build: $(BUILDSTAMP) make_deb clean

list:
	@echo Available snapshots are:
	@wget -qO - $(URLBASE) | grep -- -trunk/ | cut -d'"' -f8,11 | sed -e 's,\(.*\)-trunk/">\(.*\)  .*,\1	\2,'

$(BUILDSTAMP):
	rm -rf $(WORKDIR)
	mkdir -p $(WORKDIR)/debian/tmp/DEBIAN $(WORKDIR)/debian/tmp/usr/lib
	wget -P $(WORKDIR) $(URLBASE)$(SNAPSHOT)-trunk/$(FILE)
	tar -C $(WORKDIR)/debian/tmp -jxf $(WORKDIR)/$(FILE)
	mv $(WORKDIR)/debian/tmp/firefox $(WORKDIR)/debian/tmp/usr/lib/$(PKGNAME)
	touch $(BUILDSTAMP)

#############################

make_deb_targets = \
	$(WORKDIR)/debian/tmp/usr/bin/$(PKGNAME) \
	$(WORKDIR)/debian/tmp/usr/share/applications/$(PKGNAME).desktop \
	$(WORKDIR)/debian/tmp/usr/share/pixmaps/$(PKGNAME).png \
	$(WORKDIR)/debian/tmp/DEBIAN/changelog \
	$(WORKDIR)/debian/tmp/DEBIAN/control \
	$(WORKDIR)/debian/tmp/DEBIAN/md5sums \
	$(NULL)

make_deb: BUILDID = $(shell grep ^BuildID $(WORKDIR)/debian/tmp/usr/lib/$(PKGNAME)/platform.ini | cut -d= -f2)
make_deb: VERSION = $(shell echo $(FILE) | sed -e 's/^[^-]*-//' | cut -d. -f1,2 | sed -e 's/pre/~/' -e 's/\([ab]\)/~\1/')
make_deb: PACKDATE := $(shell date -R)
make_deb: $(BUILDSTAMP) $(WORKDIR)/shlibs.local $(make_deb_targets)
	fakeroot dpkg-deb -b $(WORKDIR)/debian/tmp .

#############################

$(WORKDIR)/debian/tmp/usr/bin/$(PKGNAME): $(BUILDSTAMP)
	mkdir -p $(WORKDIR)/debian/tmp/usr/bin
	cd $(WORKDIR)/debian/tmp/usr/bin ; ln -s ../lib/$(PKGNAME)/firefox $(PKGNAME)

#############################

$(WORKDIR)/debian/tmp/usr/share/applications/$(PKGNAME).desktop: $(LIBDIR)debian/pkgname.desktop.in $(BUILDSTAMP)
	mkdir -p $(WORKDIR)/debian/tmp/usr/share/applications
	cat $< | sed \
	-e 's/@PKGNAME@/$(PKGNAME)/g' \
	> $@

#############################

$(WORKDIR)/debian/tmp/usr/share/pixmaps/$(PKGNAME).png: $(BUILDSTAMP)
	mkdir -p $(WORKDIR)/debian/tmp/usr/share/pixmaps
	cp $(WORKDIR)/debian/tmp/usr/lib/$(PKGNAME)/icons/mozicon128.png $(WORKDIR)/debian/tmp/usr/share/pixmaps/$(PKGNAME).png

#############################

$(WORKDIR)/debian/tmp/DEBIAN/changelog: $(LIBDIR)debian/changelog.in $(BUILDSTAMP)
	cat $< | sed \
	-e 's/@PKGNAME@/$(PKGNAME)/g' \
	-e 's/@VERSION@/$(VERSION)build$(BUILDID)/g' \
	-e 's/@DATE@/$(PACKDATE)/g' \
	> $@

#############################

$(WORKDIR)/debian/tmp/DEBIAN/control: DEPENDS = $(shell sed -e 's/, $$//' $(WORKDIR)/deps)
$(WORKDIR)/debian/tmp/DEBIAN/control: ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)
$(WORKDIR)/debian/tmp/DEBIAN/control: $(LIBDIR)debian/control.in $(BUILDSTAMP)
	cat $< | sed \
	-e 's/@PKGNAME@/$(PKGNAME)/g' \
	-e 's/@ARCH@/$(ARCH)/g' \
	-e 's/@VERSION@/$(VERSION)build$(BUILDID)/g' \
	-e 's/@DEPENDS@/$(DEPENDS)/g' \
	> $@

#############################

$(WORKDIR)/shlibs.local: SOFILES = $(shell cd $(WORKDIR)/debian/tmp ; find usr -type f -print0 | xargs -0 file | awk '$$2 ~ /^ELF/ {print $$1}' | sed 's/:$$//')
$(WORKDIR)/shlibs.local: SONAMES = $(foreach sofile,$(SOFILES),$(shell objdump -p $(WORKDIR)/debian/tmp/$(sofile) | awk '$$1 == "SONAME" && $$2 !~ /^\.\// {print $$2}'))
$(WORKDIR)/shlibs.local:
	(echo "Source: $(PKGNAME)"; echo ; echo "Package: $(PKGNAME)" ; echo "Depends:") > $(WORKDIR)/debian/control
	(for soname in $(SONAMES) ; do echo $$soname | sed -e 's/\(.*\)\.so\.\(.*\)/\1 \2 \1-\2/' -e 's/.*\.so$$//' ; done) | sort -u | grep -vE '^$$' > $(WORKDIR)/shlibs.local || test $$? = 1
	cd $(WORKDIR); (for file in $(SOFILES); do LD_LIBRARY_PATH=debian/tmp/usr/lib/$(PKGNAME) dpkg-shlibdeps -O -Lshlibs.local "debian/tmp/$$file" | sed -e 's/^shlibs:Depends=//' -e 's/, /\n/g'; done) | sort -u | tr '\n' ',' | sed -e 's/ *,/, /g' > deps
	rm -f $(WORKDIR)/shlibs.local $(WORKDIR)/debian/control

#############################

$(WORKDIR)/debian/tmp/DEBIAN/md5sums:
	(cd $(WORKDIR)/debian/tmp && find usr -type f -print0 | xargs -0 md5sum) > $@

.PHONY: clean
clean:
	@rm -rf $(GARBAGE)