building RPM's for petsc-2.3.3

Barry Smith bsmith at mcs.anl.gov
Wed Jun 20 16:43:11 CDT 2007


  Lisandro,

   This looks like a fine start to me.

   Barry


On Wed, 20 Jun 2007, Lisandro Dalcin wrote:

> I've been working in building RPM's for petsc-2.3.3, using the now old
> bmake system. You have attached a petsc.spec file and a small patch.
> Please note the petsc.spec file is written in a naive way, I should
> have to use rpm macros to eliminate code duplication in many places.
> 
> I want to report you my first experiences, mainly because I tried to
> support a multi-version, multi-arch installation, and I still think
> the new build system should also support this approach. It should be
> up to packagers if the what to simplify things.
> 
> In previous mails, Barry was worried about how users are going to
> write your own makefiles, being able to use them to build your own
> software against the petsc 'source' directory or a 'installed' petsc.
> The approach described below solves this (at least in my linux FC6 box
> with GNU make).
> 
> All what was really needed was to generate a really small patch for
> files in bmake/common. This patch mainly modifies 'variables'
> (splitting the definition of PETSC_LIB_DIR and PETSC_INCLUDE in a
> completelly backward-fashion) and add a 'siteconf' file, by default
> empty, with is included by 'base' at the end (so I believe this is
> also backward).
> 
> In the spec file for generating the RPM, the tarball is unpacked and
> patched (%prep step), next I configure and build petsc (%build step)
> for two variants, PETSC_ARCH=default-seq (no mpi) and
> PETSC_ARCH=default-mpi (with my mpich2 install, wich is not rpm based,
> so I have to 'force' rpm to install it because of dependencies, but
> anyway it works at the end). Finally, I install petsc and monkey copy
> needed files to my buildroot (%install step). Additionally (this is
> the tricky part) I put things in 'siteconf' file in order to override
> the paths for includes and libraries.
> 
> The final layout of my build root (this really arbitrary, I did this
> just to show a rather deep structure, and some symlinks are not really
> needed) is the following (just mentally replace 'petsc-2.3.3-1-root'
> by '/' and your have the same layout after installing the RPM)
> 
> $ tree -d petsc-2.3.3-1-root
> petsc-2.3.3-1-root
> `-- usr
>    |-- include
>    |   `-- petsc
>    |       `-- 2.3.3
>    |           |-- finclude
>    |           `-- include
>    |               |-- adic
>    |               |-- finclude -> ../finclude
>    |               |-- mpiuni
>    |               `-- private
>    `-- lib
>        `-- petsc
>            `-- 2.3.3
>                |-- bin
>                |   |-- common -> .
>                |   |-- default-mpi
>                |   `-- default-seq
>                |-- bmake -> config
>                |-- config
>                |   |-- common -> .
>                |   |-- default-mpi
>                |   `-- default-seq
>                `-- lib
>                    |-- common -> .
>                    |-- default-mpi
>                    `-- default-seq
> 
> 
> Now the question is ... Do all this work?  Is it backward and
> trasparent for third party code? How to use this PETSc installation?
> Let's see...
> 
> After installing the rpm ...
> 
> $ sudo rpm -ivh --nodeps RPMS/i386/petsc-2.3.3-1.i386.rpm
> 
> I go to /tmp and unpack and patch the original PETSc sources.
> 
> $ tar -zxf $HOME/rpm/SOURCES/petsc-2.3.3-p2.tar.gz
> $ cd petsc-2.3.3-p2
> $ patch -p1 < $HOME/rpm/SOURCES/petsc-2.3.3-p2.patch
> 
> Next I define PETSC_DIR and PETSC_ARCH as following
> 
> $ export PETSC_DIR=/usr/lib/petsc/2.3.3
> $ export PETSC_ARCH=default-mpi
> 
> and finally do
> 
> $ make test
> $ make testexamples
> $ make testfortran
> 
> and all work as expected.
> 
> 
> 
> 
> 
> 




More information about the petsc-dev mailing list