~sylvain-pineau/launchpad-results/trend-reports-yui3

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
PYTHON ?= python2.6
CURDIR ?= $(shell pwd)
DESTDIR ?= /
LPRESULTS_CONFIG ?= default

PY = $(CURDIR)/bin/py
PYTHONPATH := $(CURDIR)/lib:${PYTHONPATH}
MANAGE = $(CURDIR)/bin/manage.py

BUILDOUT_FLAGS = -N
BUILDOUT_CFG ?= buildout.cfg
BUILDOUT_BIN = $(PY) $(MANAGE) bin/jslint bin/lint

# This can be replaced with launchpad-results-dependencies to simulate
# the environment where launchpad-results-server will be installed.
LPRESULTS_DEPENDENCIES_PACKAGE ?= launchpad-results-developer-dependencies
LPRESULTS_DEPENDENCIES_PPA ?= launchpad-results

# If it is not set or set to a non-existing directory, a clean
# checkout will be performed for you, but this can take a while.
LPRESULTS_DOWNLOAD_CACHE ?= $(CURDIR)/build/download-cache

# To update dependencies, call "make build BUILDOUT_FLAGS='-n'" which
# will force a "bzr pull" for each dependency in the source directory.
LPRESULTS_SOURCE_DEPENDENCIES ?= $(CURDIR)/build/source-dependencies

TEMPLATES_DIR = templates
TEMPLATES_MACROS = $(TEMPLATES_DIR)/base-layout-macros.html

MEDIA_DIR = static
MEDIA_BUILD_DIR = $(MEDIA_DIR)/build
MEDIA_TEMPLATE = $(MEDIA_DIR)/launchpad/style-3-0.css.in

APIDOC_DIR = $(TEMPLATES_DIR)/apidoc
APIDOC_FORMAT = $(APIDOC_DIR).tmp/wadl-%(version)s.xml
APIDOC_STYLESHEET = lib/lpresults/tracker/wadl-to-refhtml.xsl

STORAGE_BUCKETS_ATTACHMENTS=attachments

STORM_STORES_SESSION=lpresults-session
STORM_STORES_TEST_1=lpresults-test-1
STORM_STORES_TRACKER=lpresults-tracker

check-source-dependencies:
ifeq "$(origin LPRESULTS_SOURCE_DEPENDENCIES)" "file"
	@echo
	@echo "!!! WARNING !!!"
	@echo "*** You have not provided a value for LPRESULTS_SOURCE_DEPENDENCIES!"
	@echo "*** A clean checkout will be performed under $(LPRESULTS_SOURCE_DEPENDENCIES)."
	@echo
endif
	@[ -d "$(LPRESULTS_SOURCE_DEPENDENCIES)/eggs" ] || \
		mkdir -p $(LPRESULTS_SOURCE_DEPENDENCIES)/eggs
	@[ -d "build" ] || mkdir -p build
ifneq "$(LPRESULTS_SOURCE_DEPENDENCIES)" "$(CURDIR)/build/source-dependencies"
	@rm -rf build/source-dependencies
	@ln -s $(LPRESULTS_SOURCE_DEPENDENCIES) build/source-dependencies
endif

check-download-cache:
ifeq "$(origin LPRESULTS_DOWNLOAD_CACHE)" "file"
	@echo
	@echo "!!! WARNING !!!"
	@echo "*** You have not provided a value for LPRESULTS_DOWNLOAD_CACHE!"
	@echo "*** A clean checkout will be performed under $(LPRESULTS_DOWNLOAD_CACHE)."
	@echo
endif
	@[ -d "$(LPRESULTS_DOWNLOAD_CACHE)" ] || \
		bzr co --lightweight http://bazaar.launchpad.net/~launchpad-results/launchpad-results-dependencies/trunk \
		$(LPRESULTS_DOWNLOAD_CACHE)
	@[ -d "build" ] || mkdir -p build
ifneq "$(LPRESULTS_DOWNLOAD_CACHE)" "$(CURDIR)/build/download-cache"
	@rm -rf build/download-cache
	@ln -s $(LPRESULTS_DOWNLOAD_CACHE) build/download-cache
endif
ifeq (n, $(findstring n,$(BUILDOUT_FLAGS)))
	@bzr up build/download-cache
endif

bin/buildout: check-source-dependencies check-download-cache
	PYTHONPATH= $(PYTHON) build/download-cache/dist/bootstrap.py \
		--version=1.5.1 \
		--setup-source=ez_setup.py \
		--download-base=build/download-cache/dist \
		--eggs=build/source-dependencies/eggs

$(BUILDOUT_BIN): bin/buildout versions.cfg $(BUILDOUT_CFG) setup.py
	$(RM) $@
	PYTHONPATH= ./bin/buildout -c configs/$(LPRESULTS_CONFIG)/$(BUILDOUT_CFG) \
		$(BUILDOUT_FLAGS) "buildout:directory=$(CURDIR)" \
		| grep -v "Unused options" | grep -v "warning: no files found"

compile: $(MANAGE)

$(APIDOC_DIR): $(APIDOC_STYLESHEET)
	mkdir -p $(APIDOC_DIR).tmp
	$(MANAGE) apidoc \
		--format="$(APIDOC_FORMAT)" \
		--stylesheet="$(APIDOC_STYLESHEET)"
	$(RM) -r $(APIDOC_DIR)
	mv $(APIDOC_DIR).tmp $(APIDOC_DIR)

apidoc: compile $(APIDOC_DIR)

apidoc-clean:
	$(RM) -r $(APIDOC_DIR)
	$(RM) -r $(APIDOC_DIR).tmp

media: compile $(TEMPLATES_MACROS) $(MEDIA_TEMPLATE)
	$(MANAGE) media \
		--builddir="$(MEDIA_BUILD_DIR)" \
		--macros="$(TEMPLATES_MACROS)" \
		--template="$(MEDIA_TEMPLATE)"

media-clean:
	$(RM) -r $(MEDIA_BUILD_DIR)

check: clean build
	./bin/manage.py test

lint:
	./bin/lint

build: compile apidoc media
	$(PYTHON) setup.py build \
		$(PYTHON_BUILD_ARGS)

# Removing the buildout deps to avoid dealing with divergent branches.
build-clean:
	$(RM) .installed.cfg
	$(RM) placeholder.txt
	$(RM) -r build
	$(RM) -r bin

# Setting locale to C to make the database run in that locale.
build-depends:
ifneq "$(shell dpkg-query -W -f='$${Status}' $(LPRESULTS_DEPENDENCIES_PACKAGE) 2>/dev/null)" \
	  "install ok installed"
	@echo
	@echo "!!! WARNING !!!"
	@echo "*** The $(LPRESULTS_DEPENDENCIES_PACKAGE) meta package"
	@echo "*** will be installed from the $(LPRESULTS_DEPENDENCIES_PPA) PPA."
	@echo
	-sudo apt-get -y install python-software-properties
	-sudo apt-add-repository ppa:$(LPRESULTS_DEPENDENCIES_PPA)
endif
	-sudo apt-get update
	-LC_ALL=C sudo apt-get -y install $(LPRESULTS_DEPENDENCIES_PACKAGE)
	-sudo -u postgres createuser -a -d $(USER) || true

clean: build-clean apidoc-clean media-clean
	-find . -name \*.py[co] -print0 | xargs -r0 $(RM)

createtestdb:
	-createdb $(STORM_STORES_SESSION) || true
	-createdb $(STORM_STORES_TEST_1) || true
	-createdb $(STORM_STORES_TRACKER) || true

createdb: createtestdb

droptestdb:
	-dropdb $(STORM_STORES_SESSION) || true
	-dropdb $(STORM_STORES_TEST_1) || true
	-dropdb $(STORM_STORES_TRACKER) || true

droptestlayerdb:
	-psql -l | awk '/lpresults.*layer/ {print $$1}' | xargs -r -n1 dropdb

dropdb: droptestdb droptestlayerdb

syncdb: $(MANAGE)
	STORM_STORES_SESSION=postgres:$(STORM_STORES_SESSION) \
		STORM_STORES_TEST_1=postgres:$(STORM_STORES_TEST_1) \
		STORM_STORES_TRACKER=postgres:$(STORM_STORES_TRACKER) \
		$(MANAGE) syncdb

createstorage:
	mkdir -p $(STORAGE_BUCKETS_ATTACHMENTS)

dropstorage:
	$(RM) -r $(STORAGE_BUCKETS_ATTACHMENTS)

install:
	$(PYTHON) setup.py install \
		$(PYTHON_INSTALL_ARGS) \
		--root=$(DESTDIR)

setup: build-depends build createdb syncdb createstorage

.PHONY: apidoc apidoc-clean build build-clean build-depends check \
	check-download-cache check-source-dependencies clean compile \
	createdb createstorage createtestdb dropdb dropstorage droptestdb \
	droptestlayerdb install lint media media-clean setup syncdb