summaryrefslogtreecommitdiff
path: root/Makefile
blob: 5796ae668eaf27c49568dca6b653498dd25c409d (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- coding: utf-8; mode: makefile-gmake -*-

export GIT_URL=https://github.com/asciimoo/searx
export SEARX_URL=https://searx.me
export DOCS_URL=https://asciimoo.github.io/searx

PYOBJECTS = searx
DOC       = docs
PY_SETUP_EXTRAS ?= \[test\]

PYDIST=./dist/py
PYBUILD=./build/py

include utils/makefile.include
include utils/makefile.python
include utils/makefile.sphinx

all: clean install

PHONY += help
help:
	@echo  '  test      - run developer tests'
	@echo  '  docs      - build documentation'
	@echo  '  docs-live - autobuild HTML documentation while editing'
	@echo  '  run       - run developer instance'
	@echo  '  install   - developer install (./local)'
	@echo  '  uninstall - uninstall (./local)'
	@echo  '  gh-pages  - build docs & deploy on gh-pages branch'
	@echo  '  clean     - drop builds and environments'
	@echo  '  project   - re-build generic files of the searx project'
	@echo  '  themes    - re-build build the source of the themes'
	@echo  '  docker    - build Docker image'
	@echo  '  node.env  - download & install npm dependencies locally'
	@echo  ''
	@$(MAKE) -s -f utils/makefile.include make-help
	@echo  ''
	@$(MAKE) -s -f utils/makefile.python python-help

PHONY += install
install: pyenvinstall

PHONY += uninstall
uninstall: pyenvuninstall

PHONY += clean
clean: pyclean node.clean
	$(call cmd,common_clean)

PHONY += run
run:  pyenvinstall
	$(Q) ( \
	sed -i -e "s/debug : False/debug : True/g" ./searx/settings.yml ; \
	sleep 2 ; \
	xdg-open http://127.0.0.1:8888/ ; \
	sleep 3 ; \
	sed -i -e "s/debug : True/debug : False/g" ./searx/settings.yml ; \
	) &
	$(PY_ENV)/bin/python ./searx/webapp.py

# docs
# ----

PHONY += docs
docs:  pyenvinstall sphinx-doc
	$(call cmd,sphinx,html,docs,docs)

PHONY += docs-live
docs-live:  pyenvinstall sphinx-live
	$(call cmd,sphinx_autobuild,html,docs,docs)

$(GH_PAGES)::
	@echo "doc available at --> $(DOCS_URL)"

# update project files
# --------------------

PHONY += project engines-languages searx.brand

project: searx/data/engines_languages.json searx.brand

engines-languages:  pyenvinstall
	$(PY_ENV_ACT); python utils/fetch_languages.py
	mv engines_languages.json searx/data/engines_languages.json
	mv languages.py searx/languages.py

searx.brand:
	$(Q)echo "build searx/brand.py"
	$(Q)echo "GIT_URL = '$(GIT_URL)'"  > searx/brand.py
	$(Q)echo "SEARX_URL = '$(SEARX_URL)'" >> searx/brand.py
	$(Q)echo "DOCS_URL = '$(DOCS_URL)'" >> searx/brand.py
	$(Q)echo "PUBLIC_INSTANCES = 'https://searx.space'" >> searx/brand.py

# node / npm
# ----------

node.env:
	$(Q)./manage.sh npm_packages

node.clean:
	$(Q)echo "CLEAN     locally installed npm dependencies"
	$(Q)rm -rf \
	  ./node_modules  \
	  ./package-lock.json \
	  ./searx/static/themes/oscar/package-lock.json \
	  ./searx/static/themes/oscar/node_modules \
	  ./searx/static/themes/simple/package-lock.json \
	  ./searx/static/themes/simple/node_modules

# build themes
# ------------

PHONY += themes themes.oscar themes.simple
themes: themes.oscar themes.simple

themes.oscar:
	$(Q)echo '[!] Grunt build : oscar theme'
	$(Q)PATH="$$(npm bin):$$PATH" grunt --gruntfile  "searx/static/themes/oscar/gruntfile.js"

themes.simple:
	$(Q)echo '[!] Grunt build : simple theme'
	$(Q)PATH="$$(npm bin):$$PATH" grunt --gruntfile  "searx/static/themes/simple/gruntfile.js"

# docker
# ------

PHONY += docker
docker:
	$(Q)./manage.sh docker_build


# test
# ----

PHONY += test test.pylint test.pep8 test.unit test.robot

test: test.pylint test.pep8 test.unit test.robot

# TODO: balance linting with pylint
test.pylint: pyenvinstall
	$(call cmd,pylint,searx/preferences.py)
	$(call cmd,pylint,searx/testing.py)

test.pep8: pyenvinstall
	$(PY_ENV_ACT); ./manage.sh pep8_check

test.unit: pyenvinstall
	$(PY_ENV_ACT); ./manage.sh unit_tests

test.robot: pyenvinstall
	$(PY_ENV_ACT); ./manage.sh install_geckodriver
	$(PY_ENV_ACT); ./manage.sh robot_tests

.PHONY: $(PHONY)