File: rules

package info (click to toggle)
petsc 3.1.dfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 131,360 kB
  • ctags: 491,710
  • sloc: ansic: 288,064; cpp: 66,909; python: 28,799; fortran: 19,153; makefile: 13,945; sh: 3,502; f90: 1,655; xml: 620; csh: 230; java: 13
file content (433 lines) | stat: -rwxr-xr-x 21,585 bytes parent folder | download
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
#!/usr/bin/make -f
# Sample debian/rules file - for GNU Hello (1.3).
# Copyright 1994,1995 by Ian Jackson.
# I hereby give you perpetual unlimited permission to copy,
# modify and relicense this file, provided that you do not remove
# my name from the file itself.  (I assert my moral right of
# paternity under the Copyright, Designs and Patents Act 1988.)
# This file may have to be extensively modified

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# This is the debhelper compatability version to use.
#export DH_COMPAT=4
# Deprecated, now provided in file debian/compat

# On Alpha, override this with debian/rules PETSC_ARCH=linux_alpha_dec binary
# to build PETSc libs with the Compaq compilers, though that requires at least:
# libots, cpml-ev(5|6), cxml-ev(5|6), cfal and ccc.
# Note that only arch-dependent .debs are generated when you do this.
PETSC_ARCH=$(DEB_BUILD_GNU_SYSTEM)

# This defines the MPI implementation to use.  The easiest way to override this
# default is to specify while building, e.g. debian/rules PETSC_MPI=lam binary.
# Again, only arch-dependent .debs are generated when you do this.
# Note that as of PETSc 2.3.0 this only specifies the name of the PETSc
# packages, the implementation is chosen by BuildSystem according to what's
# available at build time.
PETSC_MPI=$(shell readlink /etc/alternatives/mpi | sed s/usr//g | sed s/include//g | sed s/lib//g | sed s/\\///g)
PETSC_MPI_DIR=/usr/lib/$(PETSC_MPI)

ifeq ($(PETSC_MPI),lam)
PETSC_HDF5_FLAGS=
else
PETSC_HDF5_FLAGS=--with-hdf5=1 --with-hdf5-dir=/usr
endif

# Overriding this with "contrib" attempts to link with parmetis (unimplemented).
DEBIAN_DIST=main

# PETSC_EXT is non-empty if a non-standard compiler (e.g. Compaq compilers on
# alpha), non-standard MPI implementation (e.g. lam), non-standard option (e.g.
# complex) or non-standard distribution (e.g. contrib) is being used.
PETSC_EXT=$(shell chmod +x debian/petsc-ext && debian/petsc-ext $(PETSC_ARCH) $(PETSC_MPI) $(DEBIAN_DIST) && chmod -x debian/petsc-ext)

# PETSC_VERSION is used for the package names, library sonames, and
# /usr/lib/petscdir subdirectory names.
PETSC_VERSION=3.1$(PETSC_EXT)

# PETSC_NAME is the install dir under /usr/lib and the base for package names
PETSC_NAME=petsc$(PETSC_VERSION)

# These files need to be customized based on architecture and/or version.
# See the binary arch target for how they are generated.
ARCH_GENERATED_FILES=debian/lib$(PETSC_NAME)-dev.docs \
	debian/lib$(PETSC_NAME)-dev.postinst debian/lib$(PETSC_NAME)-dev.prerm

clean:
	dh_testdir
	if [ -f TAGS.backup ]; then mv -f TAGS.backup TAGS; fi
	dh_clean -XTAGS
# These are needed for -lam, -dec and -contrib builds
	rm -rf debian/lib$(PETSC_NAME) debian/lib$(PETSC_NAME)-dev \
	  debian/lib$(PETSC_NAME)-dbg
	rm -f build* install* debian/*.substvars debian/extemp $(ARCH_GENERATED_FILES)
# This is commented because it really doesn't do anything useful for us
# (removes example executables, so what?)
# make PETSC_ARCH=$(PETSC_ARCH) PETSC_DIR=$(CURDIR) clean
# These probably should be removed by `make clean' but aren't
	rm -f RDict.log configure.log.bkp debian/control.in make.log \
	  confdefs.h conffix.h conftest.c
	rm -f `find . -name \*.o -print` `find . -name \*.pyc -print`
	rm -rf lib $(PETSC_ARCH)-c-debug $(PETSC_ARCH)-c-opt configure.log

	if [ -d .pc ]; then \
	  QUILT_PATCHES=debian/patches quilt pop -a -R || test $$? = 2; \
	  rm -rf .pc; \
	fi

patch:
	if [ ! -d .pc ]; then \
	  QUILT_PATCHES=debian/patches quilt push -a; \
	fi

# PETSc uses the "doctext" program to convert html docs to man pages, which
# apparently is open-source and available from
# http://www.mcs.anl.gov/~gropp/sowing .  When it is Debianized, I'll use it.
build-indep: patch
#	$(MAKE) -C docs PETSC_ARCH=$(PETSC_ARCH) \
#	 	PETSC_DIR=$(CURDIR)/lib$(PETSC_NAME) manualpages
	touch $@

# With debugging=1, only static libraries are generated.
# Build optimized libs second so files are consistent with optimized.
build-arch: patch
	echo Using MPI implementation $(PETSC_MPI) in directory $(PETSC_MPI_DIR)
	cp -fp /usr/share/automake-1.11/config.* config/configarch/
	cp -fp /usr/share/automake-1.11/config.* config/BuildSystem/config/packages/
	if [ ! -f TAGS.backup ]; then cp -a TAGS TAGS.backup; fi
	PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_ARCH)-c-debug \
	  ./config/configure.py --with-debugging=1 \
	  --useThreads 0 --with-clanguage=C++ --with-c-support \
	  --with-fortran-interfaces=1 \
	  --with-mpi-dir=$(PETSC_MPI_DIR) \
	  --with-blas-lib=-lblas --with-lapack-lib=-llapack \
	  --with-umfpack=1 --with-umfpack-include=/usr/include/suitesparse \
	  --with-umfpack-lib=[/usr/lib/libumfpack.so,/usr/lib/libamd.so] \
	  --with-spooles=1 --with-spooles-include=/usr/include/spooles \
	  --with-spooles-lib=/usr/lib/libspooles.so \
	  --with-hypre=1 --with-hypre-dir=/usr \
	  --with-scotch=1 --with-scotch-include=/usr/include/scotch \
	  --with-scotch-lib=/usr/lib/libscotch.so $(PETSC_HDF5_FLAGS)
#	  --with-superlu=1 --with-superlu-include=/usr/include/superlu \
#	  --with-superlu-lib=/usr/lib/libsuperlu.so \
#	  --with-sprng=1 --with-sprng-include=/usr/include/sprng \
#	  --with-sprng-lib=/usr/lib/libsprng.so
#	  --with-fftw=1 --with-fftw-dir=/usr
#	  `if [ -e /usr/lib/libsidl.so ]; then echo "--with-babel=1 --with-babel-dir=/usr"; fi`
	$(MAKE) PETSC_ARCH=$(PETSC_ARCH)-c-debug PETSC_DIR=$(CURDIR) \
	  PETSC_INSTALL_DIR=/usr/lib/petscdir/$(PETSC_VERSION)
	PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_ARCH)-c-opt \
	  ./config/configure.py --with-shared --with-debugging=0 \
	  --useThreads 0 --with-clanguage=C++ --with-c-support \
	  --with-fortran-interfaces=1 \
	  --with-mpi-dir=$(PETSC_MPI_DIR) --with-mpi-shared=1 \
	  --with-blas-lib=-lblas --with-lapack-lib=-llapack \
	  --with-umfpack=1 --with-umfpack-include=/usr/include/suitesparse \
	  --with-umfpack-lib=[/usr/lib/libumfpack.so,/usr/lib/libamd.so] \
	  --with-spooles=1 --with-spooles-include=/usr/include/spooles \
	  --with-spooles-lib=/usr/lib/libspooles.so \
	  --with-hypre=1 --with-hypre-dir=/usr \
	  --with-scotch=1 --with-scotch-include=/usr/include/scotch \
	  --with-scotch-lib=/usr/lib/libscotch.so $(PETSC_HDF5_FLAGS)
#	  --with-superlu=1 --with-superlu-include=/usr/include/superlu \
#	  --with-superlu-lib=/usr/lib/libsuperlu.so \
#	  --with-sprng=1 --with-sprng-include=/usr/include/sprng \
#	  --with-sprng-lib=/usr/lib/libsprng.so
#	  --with-fftw=1 --with-fftw-dir=/usr
#	  `if [ -e /usr/lib/libsidl.so ]; then echo "--with-babel=1 --with-babel-dir=/usr"; fi`
	$(MAKE) PETSC_ARCH=$(PETSC_ARCH)-c-opt PETSC_DIR=$(CURDIR) \
	  PETSC_INSTALL_DIR=/usr/lib/petscdir/$(PETSC_VERSION) \
	  SL_LINKER_SUFFIX_VERSIONED="so.$(PETSC_VERSION)"
	touch $@

build: build-arch build-indep
	touch $@

install-arch: build-arch
# Install mpirun.lam and fake petscarch in PETSC_DIR/bin and manpages.
# If someone builds with non-standard PETSC_ARCH we want that to be
# reflected in the installed script (also removes c-shell dependence).
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin
	cp -p debian/mpirun_lam \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/mpirun_lam
	chmod +x debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/mpirun_lam
	echo "#!/bin/sh -e" > \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/petscarch
	echo "echo $(PETSC_ARCH)-c-opt" >> \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/petscarch
	chmod +x debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/petscarch
# I know bin is an awkward place to put these, but can't think of a
# better one... (doc is a symlink in the -doc package)
	cp -p debian/petscarch.1 debian/mpirun_lam.1 \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin
	gzip --best debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/bin/*.1
# Install conf in PETSC_DIR
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/conf
	for cfile in `ls conf`; do \
	  grep -v top_builddir conf/$$cfile | \
	    sed "s/`echo $(CURDIR) | sed s/\\\\//\\\\\\\\\\\\//g`/\/usr\/lib\/petscdir\/$(PETSC_VERSION)/g" > \
	    debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/conf/$$cfile ; \
	done
# Install PETSC_ARCH/conf and PETSC_ARCH/include files in PETSC_DIR/PETSC_ARCH/;
# replace this dir with install dir, and remove top_builddir
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/conf
	for cfile in `ls $(PETSC_ARCH)-c-opt/conf`; do \
	  grep -v top_builddir $(PETSC_ARCH)-c-opt/conf/$$cfile | \
	    sed "s/`echo $(CURDIR) | sed s/\\\\//\\\\\\\\\\\\//g`/\/usr\/lib\/petscdir\/$(PETSC_VERSION)/g" > \
	    debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/conf/$$cfile ; \
	done
	rm -f debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/conf/*.py
	cp -a $(PETSC_ARCH)-c-opt/include debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/
# Now conf and include for the -dbg package
	install -d debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-debug/conf
	for cfile in `ls $(PETSC_ARCH)-c-debug/conf`; do \
	  grep -v top_builddir $(PETSC_ARCH)-c-debug/conf/$$cfile | \
	    sed "s/`echo $(CURDIR) | sed s/\\\\//\\\\\\\\\\\\//g`/\/usr\/lib\/petscdir\/$(PETSC_VERSION)/g" > \
	    debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-debug/conf/$$cfile ; \
	done
	rm -f debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-debug/conf/*.py
	cp -a $(PETSC_ARCH)-c-debug/include debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-debug/
# Install headers in PETSC_DIR/include
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/finclude
	cp -p include/*.h include/*.hh \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include
	cp -p include/finclude/*.h include/finclude/*.h90 \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/finclude
	cp -a include/finclude/ftn-auto include/finclude/ftn-custom \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/finclude
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/adic
	cp -p include/adic/*.h \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/adic
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/sieve
	cp -a include/sieve/*.hh include/sieve/problem \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/sieve
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/private
	cp -p include/private/*.h \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/private
	cd debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include && \
	  ln -s ../$(PETSC_ARCH)-c-opt/include/*.h .
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/aij/mpi
	sed "s/..\/src/src/" < src/mat/impls/aij/mpi/mpiaij.h > \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/aij/mpi/mpiaij.h
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/aij/seq
	cp -p src/mat/impls/aij/seq/aij.h \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/aij/seq/aij.h
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/dense/mpi
	sed "s/..\/src/src/" < src/mat/impls/dense/mpi/mpidense.h > \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/dense/mpi/mpidense.h
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/dense/seq
	cp -p src/mat/impls/dense/seq/dense.h \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/mat/impls/dense/seq/dense.h
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/sys
	cp -p src/sys/ctable.h \
	  debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/include/src/sys/
# Add m4 files, /usr/share/aclocal symlinks will be made by postinst
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/aclocal
	cp -p debian/petsc.m4 debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/aclocal
	cp -p debian/math-blaslapack.m4 debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/aclocal
# Install libs in PETSC_DIR, move shared libs to /usr/lib and symlink
	install -d debian/lib$(PETSC_NAME)/usr/lib
	cp -a $(PETSC_ARCH)-c-opt/lib debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/
	cp -a $(PETSC_ARCH)-c-debug/lib debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-debug/
	for LIB in `cd $(PETSC_ARCH)-c-opt/lib && ls *.so.*` ; \
	do \
	  mv debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/lib/$$LIB \
	    debian/lib$(PETSC_NAME)/usr/lib/$$LIB ; \
	  ln -s ../../../../$$LIB \
	    debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/$(PETSC_ARCH)-c-opt/lib/$$LIB ; \
	done
# Make legacy symlinks including C++
	install -d debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/lib
	ln -s ../$(PETSC_ARCH)-c-opt/lib debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/lib/libO
	ln -s ../$(PETSC_ARCH)-c-opt/lib debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/lib/libO_c++
	install -d debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/lib
	ln -s ../$(PETSC_ARCH)-c-debug/lib debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/lib/libg
	ln -s ../$(PETSC_ARCH)-c-debug/lib debian/lib$(PETSC_NAME)-dbg/usr/lib/petscdir/$(PETSC_VERSION)/lib/libg_c++
# Legacy symlink so packages for 3.0 can build against 3.1
	ln -s variables debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/conf/base
	touch install-arch

# Depends on install-arch because it creates PETSC_DIR
install-indep: build-indep install-arch
ifeq ($(PETSC_VERSION),3.1)
# Install header documentation in -doc/include
	install -d debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/finclude
	cp -p include/*.html \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include
	cp -p include/finclude/*.html \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/finclude
	install -d debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/adic
	cp -p include/adic/*.html \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/adic
	install -d debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/sieve
	cp -p include/sieve/*.html \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/sieve
	install -d debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/private
	cp -p include/private/*.html \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/include/private
	for HEADERDOC in `cd debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/ && find include -name \*.h.html -print | sed s/.h.html/.h/`; \
	do \
	  dh_link -p$(PETSC_NAME)-doc \
            usr/lib/petscdir/$(PETSC_VERSION)/$$HEADERDOC \
	    usr/share/doc/$(PETSC_NAME)-doc/$$HEADERDOC; \
	done
# Install examples documentation in -doc/src directory
	for TESTDIR in `find src -name tests -print | sed "s/src\///"` \
	  `find src -name tutorials -print | sed "s/src\///"` benchmarks \
	  snes/examples/tutorials/ex10d; \
	do \
	  install -d debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/src/$$TESTDIR; \
	  for TESTDOC in `find src/$$TESTDIR -name \*.html -print`; do \
	    cp -a $$TESTDOC \
	      debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/src/$$TESTDIR; \
	  done ; \
	done
# I don't know of a way to do this "recursively"
	rmdir `find debian/petsc3.1-doc -empty -type d -print`
	rmdir `find debian/petsc3.1-doc -empty -type d -print`
	rmdir `find debian/petsc3.1-doc -empty -type d -print`
# Install examples & makefiles into temporary directory debian/extemp
	for TESTDIR in `find src -name tests -print | sed "s/src\///"` \
	  `find src -name tutorials -print | sed "s/src\///"` benchmarks; \
	do \
	  install -d debian/extemp/src/$$TESTDIR; \
	  cp -a src/$$TESTDIR/* debian/extemp/src/$$TESTDIR; \
	done
	for MAKEFILE in `find src -name makefile -print | sed "s/src\///"`; \
	do \
	  if [ -d debian/extemp/src/`echo $$MAKEFILE | sed "s/makefile//"` ] ;\
	  then \
	    cp -p src/$$MAKEFILE debian/extemp/src/$$MAKEFILE; \
	  fi; \
	done
# Clean up documentation from debian/extemp
	rm -f `find debian/extemp -name \*.html -print`
# HACK ALERT!  This is a very inelegant way to assemble this makefile!
	rm -f debian/extemp/src/makefile
	sed "s/inline//" < src/makefile | grep -v include \
	  > debian/extemp/src/makefile
	grep -v \$$Id makefile | grep -v DIRS >> debian/extemp/src/makefile
	install -d debian/extemp/src/$(PETSC_ARCH)-c-opt/conf
	cp -p debian/lib$(PETSC_NAME)-dev/usr/lib/petscdir/$(PETSC_VERSION)/conf/petscvariables \
	  debian/extemp/src/$(PETSC_ARCH)-c-opt/conf/petscvariables
# Pack debian/extemp/src into src.tar.gz and install
	cd debian/extemp && tar czf src.tar.gz src
	mv debian/extemp/src.tar.gz \
	  debian/$(PETSC_NAME)-doc/usr/share/doc/$(PETSC_NAME)-doc/src.tar.gz
	rm -rf debian/extemp
# Make links to documentation and examples from PETSC_DIR and docs
	dh_link -p$(PETSC_NAME)-doc \
		usr/share/doc/$(PETSC_NAME)-doc/docs \
		  usr/lib/petscdir/$(PETSC_VERSION)/docs \
		usr/share/doc/$(PETSC_NAME)-doc/docs/index.html \
		  usr/lib/petscdir/$(PETSC_VERSION)/index.html \
		usr/share/doc/$(PETSC_NAME)-doc/makefile.html \
		  usr/lib/petscdir/$(PETSC_VERSION)/makefile.html \
		usr/share/doc/$(PETSC_NAME)-doc/src \
		  usr/lib/petscdir/$(PETSC_VERSION)/src
	touch install-indep
endif

install: install-arch install-indep
	touch install

binary-indep: install-indep
ifeq ($(PETSC_VERSION),3.1)
	dh_testdir -i
	dh_testroot -i
	dh_installdirs -i
	dh_installdocs -i
# Clean up and finish
	rm -f `find debian/$(PETSC_NAME)-doc -name ?akefile -print`
	rm -f `find debian/$(PETSC_NAME)-doc -name *.cit* -print`
	rm -f `find debian/$(PETSC_NAME)-doc -empty -type f -print`
	dh_installchangelogs -i
	dh_compress -i -X.xbm -X.pdf
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i
endif

binary-arch: install-arch
	dh_testdir -a
	dh_testroot -a
# Customize control etc. using package names (maybe with -lam or -dec)
	mv -f debian/control debian/control.in
	sed "s/3.1/$(PETSC_VERSION)/" < debian/control.in | \
	  sed "s/$(PETSC_VERSION)-doc/3.1-doc/" | \
	  sed "s/Provides: $(PETSC_NAME)-dev/Provides: petsc3.1-dev/" | \
	  sed "s/Provides: $(PETSC_NAME)-dbg/Provides: petsc3.1-dbg/" \
	  > debian/control
	if [ "$(DEBIAN_DIST)" = "contrib" ]; then \
	  sed "s/Section: lib/Section: contrib\/lib/" < debian/control > \
	    debian/control.contrib ; \
	  mv -f debian/control.contrib debian/control ; \
	fi
	for ARCHGEN in $(ARCH_GENERATED_FILES); do \
	  rm -f $$ARCHGEN ; \
	  sed "s/petsc_arch/$(PETSC_ARCH)-c-opt/" < \
	    `echo "$$ARCHGEN.in" | sed "s/$(PETSC_NAME)/petsc3.1/"` | \
	    sed "s/petsc_ver/$(PETSC_VERSION)/" > $$ARCHGEN; \
	done
# Generate substvars for MPI, linear algebra implementations and dist
	rm -f debian/*.substvars
	if [ "$(PETSC_MPI)" = "openmpi" ]; then \
	  echo "mpi=openmpi-bin" > debian/lib$(PETSC_NAME).substvars; \
	  echo "mpi-dev=libopenmpi-dev" > debian/lib$(PETSC_NAME)-dev.substvars; \
	elif [ "$(PETSC_MPI)" = "mpich" -o "$(PETSC_MPI)" = "mpich-mpd" -o "$(PETSC_MPI)" = "mpich-shmem" ]; then \
	  echo "mpi=$(PETSC_MPI)-bin (>= 1.2.7)" > debian/lib$(PETSC_NAME).substvars; \
	  echo "mpi-dev=lib$(PETSC_MPI)1.0-dev (>= 1.2.7)" > debian/lib$(PETSC_NAME)-dev.substvars; \
	elif [ "$(PETSC_MPI)" = "lam" ]; then \
	  echo "mpi=lam-runtime" > debian/lib$(PETSC_NAME).substvars; \
	  echo "mpi-dev=lam4-dev" > debian/lib$(PETSC_NAME)-dev.substvars; \
	else \
	  echo "Unknown MPI implementation, stopping"; \
	  exit 1; \
	fi
	if [ -e /usr/lib/libsidl.so ]; then \
	  echo "babel-dev=libsidl-dev" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	else \
	  echo "babel-dev=" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	fi
	if [ "$(PETSC_ARCH)" = "linux_alpha_dec" ]; then \
	  echo "linear-algebra-dev=cxml" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	  echo "petsc-compilers=ccc, cfal" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	else \
	  echo "linear-algebra-dev=libblas-dev | libblas-3gf.so, liblapack-dev | liblapack-3gf.so" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	  echo "petsc-compilers=gfortran" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	fi
	if [ "$(DEBIAN_DIST)" = "main" ]; then \
	  echo "petsc-extra-dev=" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	elif [ "$(DEBIAN_DIST)" = "contrib" ]; then \
	  echo "petsc-extra-dev=libparmetis-dev" >> debian/lib$(PETSC_NAME)-dev.substvars; \
	else \
	  echo "Unknown Debian distribution, stopping"; \
	  exit 1; \
	fi
# The rest is pretty much debhelper boilerplate
	dh_installdirs -a
	dh_installdocs -a
	dh_installchangelogs -a
	dh_strip -a -Xlibg$(PETSC_BOPT_EXTRA)
	dh_makeshlibs -a -m$(PETSC_VERSION)
	dh_compress -a
	dh_fixperms -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

# Below here is fairly generic really

binary:		binary-indep binary-arch

.PHONY: binary binary-arch binary-indep clean checkroot


get-orig-source:
	uscan --force-download  --verbose