4 # This makefile contains simple rules to prepare, compile, test, and install
5 # aubio. Try one of the following rules:
15 # turn on verbose mode
18 WAFOPTS += --destdir $(DESTDIR)
21 # if HAVE_AUBIO_DOUBLE is defined, pass --enable-double to waf
22 # python/lib/moresetuptools.py also checks for HAVE_AUBIO_DOUBLE
23 WAFOPTS += $(shell [ -z $(HAVE_AUBIO_DOUBLE) ] || echo --enable-double )
27 DESTDIR:=$(PWD)/build/dist
28 PYDESTDIR:=$(PWD)/build/pydist
30 # default install locations
32 EXEC_PREFIX?=$(PREFIX)
34 INCLUDEDIR?=$(PREFIX)/include
35 DATAROOTDIR?=$(PREFIX)/share
36 MANDIR?=$(DATAROOTDIR)/man
38 # default nose2 command
39 NOSE2?=nose2 -N 4 --verbose
43 TESTSOUNDS := python/tests/sounds
48 @[ -f waf ] || make getwaf
54 [ -d wafilb ] || rm -fr waflib
55 $(WAFCMD) --help > /dev/null
56 mv .waf*/waflib . && rm -fr .waf*
57 sed '/^#==>$$/,$$d' waf > waf2 && mv waf2 waf
58 chmod +x waf && chmod -R go-w waflib
61 rm -rf waf waflib .waf*
64 $(WAFCMD) configure $(WAFOPTS)
67 $(WAFCMD) build $(WAFOPTS)
71 $(WAFCMD) install $(WAFOPTS)
74 find $(DESTDIR) -ls | sed 's|$(DESTDIR)|/«destdir»|'
76 list_installed_python:
79 list_all_installed: list_installed list_installed_python
83 $(WAFCMD) uninstall $(WAFOPTS)
86 rm -rf $(PWD)/dist/test
89 # build python-aubio, using locally built libaubio if found
90 python ./setup.py build
93 # build python-aubio using (locally) installed libaubio
94 [ -f $(DESTDIR)/$(INCLUDEDIR)/aubio/aubio.h ]
95 [ -d $(DESTDIR)/$(LIBDIR) ]
96 [ -f $(DESTDIR)/$(LIBDIR)/pkgconfig/aubio.pc ]
97 PKG_CONFIG_PATH=$(DESTDIR)/$(LIBDIR)/pkgconfig \
98 CFLAGS="-I$(DESTDIR)/$(INCLUDEDIR)" \
99 LDFLAGS="-L$(DESTDIR)/$(LIBDIR)" \
103 # install or upgrade python requirements
104 pip install $(PIPOPTS) --requirement requirements.txt
106 # use pip or distutils?
107 install_python: install_python_with_pip
108 uninstall_python: uninstall_python_with_pip
109 #install_python: install_python_with_distutils
110 #uninstall_python: uninstall_python_with_distutils
112 install_python_with_pip:
114 pip install $(PIPOPTS) .
116 uninstall_python_with_pip:
118 ( pip show aubio | grep -l aubio > /dev/null ) && \
119 pip uninstall -y -v aubio || echo "info: aubio package is not installed"
121 install_python_with_distutils:
122 ./setup.py install $(PIPOPTS) $(DISTUTILSOPTS)
124 uninstall_python_with_distutils:
125 #./setup.py uninstall
126 [ -d $(PYDESTDIR)/$(LIBDIR) ] && echo Warning: did not clean $(PYDESTDIR)/$(LIBDIR) || true
128 force_uninstall_python:
129 # ignore failure if not installed
130 -make uninstall_python
133 # DYLD_LIBRARY_PATH is no more on mac os
134 # create links from ~/lib/lib* to build/src/lib*
135 [ -f $(PWD)/build/src/libaubio.[0-9].dylib ] && ( mkdir -p ~/lib && cp -prv build/src/libaubio.[0-9].dylib ~/lib ) || true
137 test_python: export LD_LIBRARY_PATH=$(DESTDIR)/$(LIBDIR)
138 test_python: export PYTHONPATH=$(PYDESTDIR)/$(LIBDIR)
139 test_python: local_dylib
140 # run test with installed package
141 # ./python/tests/run_all_tests --verbose
142 # run with nose2, multiple processes
149 # check cleaning a second time works
154 # optionnaly clean before build
156 # remove possible left overs
160 # check cleaning after build works
162 # check cleaning a second time works
174 $(WAFCMD) distcheck $(WAFOPTS)
180 -[ -z `which $(SOX)` ] && ( echo $(SOX) could not be found) || true
181 -mkdir -p $(TESTSOUNDS)
182 -$(SOX) -r 44100 -b 16 -n "$(TESTSOUNDS)/44100Hz_1f_silence.wav" trim 0 1s
183 -$(SOX) -r 22050 -b 16 -n "$(TESTSOUNDS)/22050Hz_5s_brownnoise.wav" synth 5 brownnoise vol 0.9
184 -$(SOX) -r 32000 -b 16 -n "$(TESTSOUNDS)/32000Hz_127f_sine440.wav" synth 127s sine 440 vol 0.9
185 -$(SOX) -r 8000 -b 16 -n "$(TESTSOUNDS)/8000Hz_30s_silence.wav" trim 0 30
186 -$(SOX) -r 48000 -b 32 -n "$(TESTSOUNDS)/48000Hz_60s_sweep.wav" synth 60 sine 100-20000 vol 0.9
187 -$(SOX) -r 44100 -b 16 -n "$(TESTSOUNDS)/44100Hz_44100f_sine441.wav" synth 44100s sine 441 vol 0.9
188 -$(SOX) -r 44100 -b 16 -n "$(TESTSOUNDS)/44100Hz_100f_sine441.wav" synth 100s sine 441 vol 0.9
190 # build only libaubio, no python-aubio
191 test_lib_only: clean distclean configure build install list_installed
192 # additionally, clean after a fresh build
193 test_lib_only_clean: test_lib_only uninstall check_clean check_distclean
195 # build libaubio, build and test python-aubio against it
196 test_lib_python: force_uninstall_python deps_python \
197 clean_python clean distclean \
198 configure build build_python \
199 install install_python \
203 test_lib_python_clean: test_lib_python \
204 uninstall_python uninstall \
209 # build libaubio, install it, build python-aubio against it
210 test_lib_install_python: force_uninstall_python deps_python \
211 clean_python distclean \
214 build_python_extlib \
219 test_lib_install_python_clean: test_lib_install_python \
225 # build a python-aubio that includes libaubio
226 test_python_only: force_uninstall_python deps_python \
227 clean_python clean distclean \
231 list_installed_python
233 test_python_only_clean: test_python_only \
237 coverage_cycle: coverage_zero_counters coverage_report
239 coverage_zero_counters:
240 lcov --zerocounters --directory .
242 coverage: export CFLAGS=--coverage
243 coverage: export LDFLAGS=--coverage
244 coverage: export PYTHONPATH=$(PWD)/python/lib
245 coverage: export LD_LIBRARY_PATH=$(PWD)/build/src
246 coverage: force_uninstall_python deps_python \
247 clean_python clean distclean build local_dylib
248 lcov --capture --no-external --directory . --output-file build/coverage_lib.info
250 coverage run `which nose2`
251 lcov --capture --no-external --directory . --output-file build/coverage_python.info
252 lcov -a build/coverage_python.info -a build/coverage_lib.info -o build/coverage.info
254 # make sure we don't build the doc, which builds a temporary python module
255 coverage_report: export WAFOPTS += --disable-docs
256 coverage_report: coverage
257 genhtml build/coverage.info --output-directory lcov_html
259 gcovr -r . --html --html-details \
260 --output gcovr_html/index.html \
261 --exclude ".*tests/.*" --exclude ".*examples/.*"
266 $(WAFCMD) sphinx $(WAFOPTS)
269 $(WAFCMD) doxygen $(WAFOPTS)
272 $(WAFCMD) manpages $(WAFOPTS)
278 dist: distclean expandwaf