Makefile system


Sections:


Makefile

############################################################################
# $Id: Makefile 3021 2010-03-27 21:57:50Z scholz $
#############################################################################
#
# This file is part of magpar.
#
# Copyright (C) 2002-2010 Werner Scholz
#
# www:   http://www.magpar.net/
# email: magpar(at)magpar.net
#
# magpar is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# magpar is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with magpar; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#############################################################################

magpar_exe  = magpar.exe
magpar_revh = magpar_revision.h
magpar_verh = magpar_version.h

all: $(magpar_exe)

# (de)activate libraries, library versions, set paths, compiler flags, etc.
# imported from Makefile.in and Makefile.in.$HOSTNAME
include Makefile.in

# read list of files and other settings
include Makefile.files

magpar_rev=$(shell awk '{print $$3}' $(magpar_revh)|sed  "s/\"//"g)
magpar_ver=$(shell awk '{print $$3}' $(magpar_verh)|sed  "s/\"//"g)

$(magpar_revh): FORCE
	@r_old=$(magpar_rev); \
	if [ -d .svn ] && which svnversion >& /dev/null && svn -u status >& /dev/null; then \
	  r_new=`svnversion`; \
	else \
	  r_old2=`echo $$r_old|sed  "s/_mod//"g`; \
	  r_new=""$$r_old2"_mod"; \
	fi; \
	if [ "$$r_new" == "exported" ]; then \
	  r_old2=`echo $$r_old|sed  "s/_mod//"g`; \
	  r_new=""$$r_old2"_mod"; \
	fi; \
	if [ "$$r_new" != "$$r_old" ]; then \
	  echo '#define MAGPAR_REVISION "'$$r_new'"' > $@ ; \
	  echo "Recreated $@ for revision $$r_new"; \
	fi

# all *.c depend on grid*.h and the Makefile (due to #define) !
$(magparobj): %.o: %.c $(griddata) Makefile Makefile.in

$(magpar_exe): $(magparobj)
	-$(CLINKER) $(magparobj) -o $(magpar_exe) $(TAO_LIB) $(PETSC_TS_LIB)
	@echo ""; echo "Built magpar version $(magpar_ver) revision $(magpar_rev)"
#	strip $(magpar_exe)

include Makefile.devel

FORCE:

Makefile.in

#############################################################################
# $Id: Makefile.in 3020 2010-03-27 16:33:56Z scholz $
#############################################################################

# include default settings ##################################################
include Makefile.in.defaults

# include Makefile.in.$HOSTNAME #############################################

# set hostname if undefined
ifeq ($(HOSTNAME),)
  HOSTNAME=$(shell hostname)
endif

# possibly override various options (above) with those
# from machine specific Makefiles.in.$HOSTNAME

# check if file exists
exist := $(wildcard Makefile.in.$(HOSTNAME))
ifneq ($(strip $(exist)),)
  # include if it does
  include Makefile.in.$(HOSTNAME)
else
  exist := $(wildcard addons/Makefile.in.$(HOSTNAME))
  ifneq ($(strip $(exist)),)
    # include if it does
    include addons/Makefile.in.$(HOSTNAME)
  endif
endif

# PETSc #####################################################################

ifeq ($(PETSC_VERSION),3.1.0)
  PETSC_ARCH  = PETSc-config-magpar
  PETSC_DIR   = $(PD)/petsc-3.1-p0
  TAO_DIR     = FALSE

  # check if we compile for single processor only
  petscconf=$(PETSC_DIR)/$(PETSC_ARCH)/include/petscconf.h
  uni=$(shell if [ -e $(petscconf) ]; then grep "define  *PETSC_HAVE_MPIUNI  *1" $(petscconf); fi)
endif

ifeq ($(PETSC_VERSION),3.0.0)
  PETSC_ARCH  = PETSc-config-magpar
  PETSC_DIR   = $(PD)/petsc-3.0.0-p12
  TAO_DIR     = $(PD)/tao-1.10-p1

  # check if we compile for single processor only
  petscconf=$(PETSC_DIR)/$(PETSC_ARCH)/include/petscconf.h
  uni=$(shell if [ -e $(petscconf) ]; then grep "define  *PETSC_HAVE_MPIUNI  *1" $(petscconf); fi)
endif

ifeq ($(PETSC_VERSION),2.3.3)
  PETSC_ARCH  = PETSc-config-magpar
  PETSC_DIR   = $(PD)/petsc-2.3.3-p15
  TAO_DIR     = $(PD)/tao-1.9

  # check if we compile for single processor only
  petscconf=$(PETSC_DIR)/bmake/$(PETSC_ARCH)/petscconf.h
  uni=$(shell if [ -e $(petscconf) ]; then grep "define  *PETSC_HAVE_MPIUNI  *1" $(petscconf); fi)
endif

ifneq ($(TAO_DIR),FALSE)
  file := $(TAO_DIR)/bmake/tao_common
  exist := $(wildcard $(file))
  ifneq ($(strip $(exist)),)
    include $(file)
    CFLAGS    += -DTAO
  endif
else
  ifeq ($(PETSC_VERSION),3.1.0)
    file := $(PETSC_DIR)/conf/variables
    exist := $(wildcard $(file))
    ifneq ($(strip $(exist)),)
      include $(file)
    endif
    file := $(PETSC_DIR)/conf/rules
    exist := $(wildcard $(file))
    ifneq ($(strip $(exist)),)
      include $(file)
    endif
  else
    ifeq ($(PETSC_VERSION),3.0.0)
      file := $(PETSC_DIR)/conf/base
      exist := $(wildcard $(file))
      ifneq ($(strip $(exist)),)
        include $(file)
      endif
    else
      file := $(PETSC_DIR)/bmake/common/base
      exist := $(wildcard $(file))
      ifneq ($(strip $(exist)),)
        include $(file)
      endif
    endif
  endif
endif

# SUNDIALS ##################################################################

SUNDIALS_LIBS  = -L$(SUNDIALS_DIR)/lib -lsundials_cvode

ifeq ($(uni),)
  UNIPROC = FALSE
else
  UNIPROC = TRUE
  CFLAGS      += -DUNIPROC
endif

ifeq ($(UNIPROC),TRUE)
  SUNDIALS_LIBS  += -lsundials_nvecserial
else
  SUNDIALS_LIBS  += -lsundials_nvecparallel
endif

ifeq ($(SUNDIALS_VERSION),240)
  # SUNDIALS version 2.4.0
  SUNDIALS_DIR   = $(PD)/sundials-2.4.0
  CFLAGS         += -DSUNDIALS_VERSION=$(SUNDIALS_VERSION) -I$(SUNDIALS_DIR)/include
endif

ifeq ($(SUNDIALS_VERSION),230)
  # SUNDIALS version 2.3.0
  SUNDIALS_DIR   = $(PD)/sundials-2.3.0
  CFLAGS         += -DSUNDIALS_VERSION=$(SUNDIALS_VERSION) -I$(SUNDIALS_DIR)/include
endif

ifneq ($(SUNDIALS_VERSION),FALSE)
  EXTERNAL_LIB += $(SUNDIALS_LIBS)
endif

# other libraries ###########################################################

ifneq ($(METIS_DIR),FALSE)
  EXTERNAL_LIB += -L$(METIS_DIR) -lmetis
  CFLAGS       += -DMETIS -I$(METIS_DIR)/METISLib
endif

ifneq ($(PNG_DIR),FALSE)
  EXTERNAL_LIB += -L$(PNG_DIR) -L$(PNG_DIR)/lib -lpng
  CFLAGS       += -DPNG -I$(PNG_DIR)
endif

ifneq ($(ZLIB_DIR),FALSE)
  EXTERNAL_LIB += -L$(ZLIB_DIR) -lz
  CFLAGS       += -DZLIB -I$(ZLIB_DIR)
endif

ifneq ($(PYTHON),FALSE)
  EXTERNAL_LIB += -L$(PYTHON)/config/ -l$(PYTHON)
  CFLAGS       += -DPYTHON -I/usr/include/$(PYTHON)
endif


Makefile.in.defaults

#############################################################################
# $Id: Makefile.in.defaults 3016 2010-03-27 15:50:35Z scholz $
#############################################################################

# default settings ##########################################################

# magpar home directory
MAGPAR_HOME = $(HOME)/work/magpar

# directory where the manually compiled libraries are installed
PD = $(MAGPAR_HOME)/libs

# directory of magpar source code
MAGPAR_SRC = $(MAGPAR_HOME)/src

# set floating point precision (single/double)
PRECISION=double

# select your PETSc version (suitable TAO required!)
# check Makefile.in for valid values
PETSC_VERSION = 3.0.0

# set to FALSE to disable
#TAO_DIR =

# set dummy
PETSC_XTRALIBS=

# select your SUNDIALS version
#
# check Makefile.in for valid values
# and update the path to your SUNDIALS installation directory;
# set to FALSE to disable
SUNDIALS_VERSION = 230

# select BLAS/ATLAS version
# below in the hardware specific section!

# select LAPACK version
liblapack=lapack-3.2.1

# additional libraries ######################################################
#
# activate by setting correct path
# deactivate by setting to FALSE
# NB: libpng requires zlib!

# ParMetis is required!
METIS_DIR   = $(PD)/ParMetis-3.1.1
ZLIB_DIR    = $(PD)/zlib-1.2.4
PNG_DIR     = $(PD)/libpng-1.4.1

#DRL: added these, will be used by PETSc,
#rather than assuming they are under $(PD)
ATLAS_DIR   = $(PD)/atlas/lib
MPI_DIR     = $(PD)/mpi

##### use SUPERLU for A*u1=divM (experimental)
#CFLAGS      += -DSUPERLU
# XOR

# magpar specific flags #####################################################

##### calculate exchange energy separately?
#
# set define to have exchange field and energy calculated separately from
# anisotropy; then the exchange energy is also slightly more accurate and
# the exchange energy is stored in a separate column in the log file;
# calculation of the anisotropy energy for cubic anisotropy is done
# properly including K1 and K2 terms for both uniaxial and cubic anisotropy
# (important especially for large K2!)
#
# undefine (comment out) to have anisotropy and exchange field and energy
# combined (slightly faster: saves two matrix-vector multiplications)
# anisotropy energy might be very inaccurate (for large K2)
# K2 term of uniaxial anisotropy is ignored!
#
# disable
#EXCH = FALSE
# enable
EXCH = TRUE

ADDONS   = FALSE
SPINTORQ = FALSE
EBM      = FALSE
PYTHON   = FALSE

SVNSERVER = 300.300.300.300 # dummy
DOXYGEN_ALIASES = 'revlink{1}=\1'

# compiler flags ############################################################
CFLAGS      += -Wunused

# Adjust the following variables according to your hardware #################

# set filename of requested ATLAS library (precompiled binary)
# for your hardware check ATLAS download page for available versions:
# http://sourceforge.net/project/showfiles.php?group_id=23725
#
libatlas = atlas3.6.0_Linux_PIIISSE1.tar.gz

# general optimization options
#
# used during PETSc compilation and then immutable
# use CFLAGS to change compile options later
#
OPTFLAGS += -O2
#OPTFLAGS += -O3

# CPU specific compiler options for GCC >= 3.0
#
#OPTFLAGS += -march=pentium4  -msse -msse2  -mfpmath=sse
#OPTFLAGS += -march=pentium-m -msse -msse2  -mfpmath=sse
#OPTFLAGS += -march=athlon    -m3dnow       -mfpmath=sse
#OPTFLAGS += -march=athlon-xp -m3dnow       -mfpmath=sse
#OPTFLAGS += -march=opteron   -msse -msse2  -mfpmath=sse -m64
#OPTFLAGS += -march=nocona    -msse2        -mfpmath=sse -m64


# for Mac OS X on an iBook G4 (cf. FAQ in documentation)
#
#OPTFLAGS += -mcpu=7450 -O2 -arch=G4 -faltivec

# more (possibly unsafe!) optimizations (for newer gcc versions)
# (inspired by Acovea: http://www.coyotegulch.com/products/acovea/ )
#
#OPTFLAGS += -ffast-math
# --fast-math implies:
# -fno-math-errno -funsafe-math-optimizations -ffinite-math-only -fno-trapping-math
#OPTFLAGS += -funroll-loops -ftree-loop-linear
#OPTFLAGS += -ftree-vectorize -ftracer -fvariable-expansion-in-unroller
#OPTFLAGS += -funsafe-loop-optimizations -Wunsafe-loop-optimizations

# compiler options for development/debugging
#
#OPTFLAGS += -pedantic -msg_enable noansi -msg_enable obsolescent
#OPTFLAGS += -msg_enable performance -msg_enable portable
#OPTFLAGS += -msg_enable overflow -msg_enable questcode
#OPTFLAGS += -msg_enable unused #-msg_enable returnchecks
#OPTFLAGS += -fbounds-check # currently only supported by gcj and gfortran

# set Fortran compiler
# default: gfortran
# use g77 on old Linux distributions
# g77 usually requires libg2c (uncomment PETSC_XTRALIBS below)
#
#FC = g77
#PETSC_XTRALIBS=/usr/lib/gcc-lib/i386-redhat-linux/2.96/libg2c.a

# link static magpar binary
#STATIC   = TRUE


Makefile.in.host_debian

# example Makefile.in.$HOST for a machine running Debian testing (lenny/sid)
#
# using Debian packages:
#   libatlas-$ATLAS_ARCH-dev (ATLAS_ARCH=base, 3dnow, sse, or sse2) - see below
#   libmpich1.0-dev
#   mpichbin
#   libparmetis-dev
#   libpng12-dev
#   zlib1g-dev
#
# Debian packages need to be installed first:
# apt-get install libmpich1.0-dev libparmetis-dev libpng12-dev zlib1g-dev

METIS_DIR     =
EXTERNAL_LIB  += -lmetis
CFLAGS        += -DMETIS -I/usr/include/metis

PNG_DIR     = /usr/lib
ZLIB_DIR    = /usr/lib
MPI_DIR     = /usr/lib/mpich

# ATLAS packages: includes full BLAS and LAPACK
#
# Debian has different ATLAS packages optimized for different optimized
# instruction sets.  Check the processor flags in /proc/cpuinfo to find out
# which extensions your processor supports, and install the appropriate
# package.
#
# apt-get install libatlas3-$ATLAS_ARCH-dev
#
# ATLAS_ARCH should be set to the highest-performing vectorized math implementation
# that your system is capable of, in decreasing order of preference:
#
# optimized packages:
#
# ATLAS_ARCH  comment
# -----------------------------------------------------------------
#   sse2      AMD/Intel processors with SSE2 extensions (32-bit mode)
#   sse       AMD/Intel processors with SSE extensions (32-bit mode)
#   3dnow     AMD processors with 3dnow extensions (32-bit mode)
#   altivec   PowerPC processors
#   ev6       Alpha processors
#   v9        Sparc processors
#
#ATLAS_ARCH    = sse2
#ATLAS_DIR     = /usr/lib/$ATLAS_ARCH/atlas
#EXTERNAL_LIB  += -L/usr/lib/$ATLAS_ARCH -latlas
#
# generic package:
#
# ATLAS_ARCH  comment
# -----------------------------------------------------------------
#   base      generic for i386 compatible processors and
#             for AMD/Intel 64-bit processors in 64-bit mode
#
ATLAS_ARCH    = generic
ATLAS_DIR     = /usr/lib/atlas
EXTERNAL_LIB  += -latlas

Makefile.in.host_oldlibs

# example Makefile.in.$HOST using older libraries

# override settings in Makefile.in.defaults
libatlas = atlas3.6.0_Linux_HAMMER64SSE2.tar.gz
liblapack=lapack-3.1

METIS_DIR    = $(PD)/ParMetis-3.1
PNG_DIR     = $(PD)/libpng-1.2.22
ZLIB_DIR    = $(PD)/zlib-1.2.3

# override settings in Makefile.in
PETSC_VERSION = 2.3.3-p4
PETSC_ARCH  = PETSc-config-magpar
PETSC_DIR   = $(PD)/petsc-$(PETSC_VERSION)
TAO_DIR     = $(PD)/tao-1.9

# set Fortran compiler
# use g77 on old RedHat
FC = g77
PETSC_XTRALIBS=/usr/lib/gcc-lib/i386-redhat-linux/2.96/libg2c.a

Makefile.files

############################################################################
# $Id: Makefile.files 3001 2010-03-15 15:22:36Z scholz $
#############################################################################

griddata  = griddata.h

magparobj = main.o
main.o: $(magpar_verh) $(magpar_revh)

initdir   = init
initobj   = $(initdir)/destroyinit.o \
            $(initdir)/distortmesh.o \
            $(initdir)/elevertvol.o \
            $(initdir)/facnb.o \
            $(initdir)/filterelements.o \
            $(initdir)/filternodes.o \
            $(initdir)/initinfo.o \
            $(initdir)/maginit.o \
            $(initdir)/magset.o \
            $(initdir)/modifyprop_par.o \
            $(initdir)/modifyprop_ser.o \
            $(initdir)/movedata.o \
            $(initdir)/parinit.o \
            $(initdir)/parteleser.o \
            $(initdir)/regrefine.o \
            $(initdir)/reorder.o \
            $(initdir)/serinit.o \
            $(initdir)/vertprop.o
magparobj += $(initobj)

$(initdir)/initinfo.o: $(magpar_verh)

fielddir  = field
fieldobj  = $(fielddir)/bele.o \
            $(fielddir)/hdemag.o \
            $(fielddir)/hexch_ani.o \
            $(fielddir)/hcubic.o \
            $(fielddir)/helastic.o \
            $(fielddir)/hexternal.o \
            $(fielddir)/hext_cu.o \
            $(fielddir)/hext_ho.o \
            $(fielddir)/hext_kq.o \
            $(fielddir)/hext_py.o \
            $(fielddir)/htot.o \
            $(fielddir)/hstep_file.o
magparobj += $(fieldobj)

$(fielddir)/hdemag.o: $(fielddir)/bmatrix.c

iodir     = io
ioobj     = $(iodir)/readinp.o \
            $(iodir)/readmesh.o \
            $(iodir)/readkrn.o \
            $(iodir)/readpatran.o \
            $(iodir)/writedata.o \
            $(iodir)/writedataavs.o \
            $(iodir)/writedatadat.o \
            $(iodir)/writefemavs.o \
            $(iodir)/writelog.o \
            $(iodir)/writelog_pid.o
magparobj += $(ioobj)

utildir   = util
utilobj   = $(utildir)/area.o \
            $(utildir)/ascat.o \
            $(utildir)/axesrot.o \
            $(utildir)/barycent.o \
            $(utildir)/bbox2.o \
            $(utildir)/calAfe2fe.o \
            $(utildir)/calAfe2sq.o \
            $(utildir)/calAsq2fe.o \
            $(utildir)/calcbbox.o \
            $(utildir)/cart2sphere.o \
            $(utildir)/distint.o \
            $(utildir)/distortvec.o \
            $(utildir)/distpointline.o \
            $(utildir)/ipol.o \
            $(utildir)/matviewstruct.o \
            $(utildir)/matcreateseqadj.o \
            $(utildir)/mesh2dual.o \
            $(utildir)/printmatinfo.o \
            $(utildir)/progressbar.o \
            $(utildir)/renormvec.o \
            $(utildir)/solidangle.o \
            $(utildir)/syncffprintf.o \
            $(utildir)/tettri.o \
            $(utildir)/vecsetvec.o
magparobj += $(utilobj)

llgdir    = llg
llgobj    = $(llgdir)/myllgjacobian.o \
            $(llgdir)/calc_dMdt.o

ifneq ($(SUNDIALS_VERSION),FALSE)
llgobj    +=$(llgdir)/checkiterationllg.o \
            $(llgdir)/mytscreatepvode.o \
            $(llgdir)/mytssteppvode.o \
            $(llgdir)/precond.o \
            $(llgdir)/rhsfunction.o \
            $(llgdir)/writelog_pvode.o
endif
magparobj += $(llgobj)

ifneq ($(TAO_DIR),FALSE)
eminidir  = emini
eminiobj  = $(eminidir)/checkiterationemini.o \
            $(eminidir)/eminisolve.o
magparobj += $(eminiobj)
endif

ifneq ($(PNG_DIR),FALSE)
pngdir    = png
pngobj    = $(pngdir)/writedatapng.o \
            $(pngdir)/writedatapng2.o \
            $(pngdir)/writepng.o
magparobj += $(pngobj)
endif

ifeq ($(EBM),TRUE)
ifneq ($(SUNDIALS_VERSION),FALSE)
  CFLAGS += -DEBM
  include ebm/Makefile.in
endif
endif

ifeq ($(ADDONS),TRUE)
  ENABLED_SECTIONS = addons
  CFLAGS += -DADDONS
  addonsdir = addons
  include $(addonsdir)/Makefile.in

  llg2dir   = llg2
  llg2obj   = $(llg2dir)/myts2.o \
              $(llg2dir)/checkiteration2.o
  magparobj += $(llg2obj)

  llgtsdir  = llgts
  llgtsobj  = $(llgtsdir)/mytscreate.o \
              $(llgtsdir)/checkiterationllgts.o
  magparobj += $(llgtsobj)

  browndir  = brown
  brownobj  = $(browndir)/brown.o
  magparobj += $(brownobj)
endif

ifeq ($(SPINTORQ),TRUE)
  CFLAGS += -DSPINTORQ
  spintorqdir = spintorq
  include $(spintorqdir)/Makefile.in
endif

# other settings ############################################################

ifeq ($(EXCH),TRUE)
  CFLAGS += -DEXCH
endif

# append default CFLAGS (maybe set to "CFLAGS += -I. -o $@")
CFLAGS += -I.

# configure for linking static executable if requested
ifeq ($(STATIC),TRUE)
  EXTERNAL_LIB   += -static
  SL_LINKER_LIBS := $(SL_LINKER_LIBS:-lgcc_s=)
  BLASLAPACK_LIB := $(BLASLAPACK_LIB:-lgcc_s=)
  PCC_LINKER_LIBS:= $(PCC_LINKER_LIBS:-lgcc_s=)
  FC_LINKER_LIBS := $(FC_LINKER_LIBS:-lgcc_s=)
endif


Makefile.libs

#############################################################################
# $Id: Makefile.libs 3048 2010-04-07 19:53:24Z scholz $
#############################################################################
#
# This file is part of magpar.
#
# Copyright (C) 2002-2010 Werner Scholz
#
# www:   http://www.magpar.net/
# email: magpar(at)magpar.net
#
# magpar is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# magpar is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with magpar; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#############################################################################

# set Fortran compiler
# GNU GCC >=4.0 Fortran 77/95: gfortran
FC=gfortran
TIMER=INT_ETIME
#
# GNU GCC < 4.0 Fortran 77: g77
#FC=g77
#TIMER=EXT_ETIME

# Modify Makefile.in, Makefile.in.$HOSTNAME:
# Update variables, paths to required libraries, compiler options, etc.

# get desired configuration
include Makefile.in

# Tell make to export all variables to child processes by default.
# http://www.cs.utah.edu/dept/old/texinfo/make/make.html#SEC62
export

all: atlas lapack zlib libpng mpi parmetis sundials petsc tao
others: atlas_compile gmp mpfr gcc mgridgen python numpy matplotlib scotch
mingw: lapack_mingw parmetis_mingw sundials_mingw petsc_mingw zlib_mingw libpng_mingw

.PHONY: all otherss mingw atlas atlas_compile lapack mpi mpich2 mvapich2 mpich2 openmpi parmetis mgridgen sundials petsc tao zlib libpng gmp mpfr gcc mgridgen python numpy matplotlib scotch lapack_mingw parmetis_mingw sundials_mingw petsc_mingw zlib_mingw libpng_mingw

############################
# GMP
############################

# http://gmplib.org/

gmplib=$(PD)/gmplib/

# latest version is: 4.3.1
gmp: $(gmplib)
$(gmplib):
	gmprel=4.2.2; \
	cd $(PD); \
	lib=gmp-$$gmprel; \
	if [ ! -e $$lib.tar.gz ]; then wget -N ftp://ftp.gnu.org/gnu/gmp/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/gmp_$$gmprel; \
	./configure --prefix=$$instdir 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) check 2>&1 | tee makecheck.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	ln -s $$instdir $(PD)/gmp

############################
# MPFR
############################

# http://www.mpfr.org/

mpfrlib=$(PD)/mpfrlib/

# latest version is: 2.4.2
mpfr: $(mpfrlib)
$(mpfrlib):
	mpfrrel=2.3.1; \
	cd $(PD); \
	lib=mpfr-$$mpfrrel; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.mpfr.org/mpfr-current/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/mpfr_$$mpfrrel; \
	./configure --with-gmp=$(PD)/gmp --prefix=$$instdir 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) check 2>&1 | tee makecheck.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	ln -s $$instdir $(PD)/mpfr

############################
# GCC
############################

# http://gcc.gnu.org/mirrors.html
# ftp://mirrors.laffeycomputer.com/pub/gcc.gnu.org/pub/gcc/releases/

gccbin=$(PD)/gcc/bin/gcc

# latest version is: 4.4.2
gcc: $(gccbin)
$(gccbin):
	gccrel=4.3.0; \
	cd $(PD); \
	srcdir=$(PD)/gccsrc-$$gccrel; \
	mkdir $$srcdir; \
	cd $$srcdir; \
	ftpserv=http://mirrors.usc.edu/pub/gnu/gcc/; \
	for i in core fortran g++ ; do \
	  lib=gcc-$$i-$$gccrel.tar.bz2; \
	  if [ ! -e $$lib ]; then wget -N $$ftpserv/gcc-$$gccrel/$$lib; fi; \
	  bunzip2 -c $$lib | tar xvf -; \
	done; \
	instdir=$(PD)/gcc-$$gccrel; \
	cd gcc-$$gccrel;\
	./configure --with-gmp=$(PD)/gmp --with-mpfr=$(PD)/mpfr --prefix=$$instdir 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	ln -s $$instdir $(PD)/gcc

############################
# ATLAS
############################

atlaslib = $(PD)/atlas/lib/libatlas.a
atlas: $(atlaslib)
$(atlaslib):
	cd $(PD); \
	if [ -n "$$libatlas" ]; then lib=$(libatlas); \
	else lib=atlas3.6.0_Linux_PIIISSE1.tar.gz; \
	fi; \
	if [ ! -e $$lib ]; then wget -N http://downloads.sourceforge.net/math-atlas/$$lib; fi; \
	arctype=`file $$lib | awk '{print $$2}'` ; \
	echo $$lib; \
	if [ ! -d $$lib ] ; then $$arctype -d -c $$lib | tar xvf - ; fi ; \
	atlasdir=`$$arctype -d -c $$lib | tar tf - |grep libatlas.a` ; \
	atlasdir=`dirname $$atlasdir`; atlasdir=`dirname $$atlasdir`; \
	rm -f atlas; ln -s -f $$atlasdir atlas; \
	mv $(lapacklib) $(lapacklib).atlas

atlas_compile:
	instdir=$(PD)/atlas; \
	cd $(PD); \
	mkdir -p $$instdir; \
	lib=atlas3.9.17.tar.bz2; \
	if [ ! -e $$lib ]; then wget -N http://downloads.sourceforge.net/math-atlas/$$lib; fi; \
	bunzip2 -c $$lib | tar xvf -; \
	cd $(PD)/atlas; \
	$(PD)/ATLAS/configure $(atlasgcc) 2>&1 | tee configure.log; \
	$(MAKE) -j 1 2>&1 | tee make.log; \
	$(MAKE) check 2>&1 | tee make_check.log; \
	$(MAKE) ptcheck 2>&1 | tee make_ptcheck.log; \
	$(MAKE) test 2>&1 | tee make_test.log; \
	$(MAKE) time 2>&1 | tee make_time.log; \
	ln -s -f Linux_* atlas; \
	mv $(lapacklib) $(lapacklib).atlas

############################
# LAPACK
############################

lapacklib2 = $(PD)/$(liblapack)/lapack_LINUX.a
$(lapacklib2): $(atlaslib)
	$(FC) --version
	cd $(PD); \
	lib=$(liblapack); \
	if [ ! -e $$lib.tgz ]; then wget -N http://www.netlib.org/lapack/$$lib.tgz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tgz|tar xv ; fi ; \
	cd $(liblapack); \
	mtmpl=INSTALL/make.inc.gfortran; \
	cp $$mtmpl make.inc; \
	$(MAKE) "FORTRAN=$(FC)" "LOADER=$(FC)" \
	  "TIMER=$(TIMER)" \
	  "BLASLIB=$(PD)/atlas/lib/libf77blas.a $(PD)/atlas/lib/libatlas.a" \
	  "OPTS=-funroll-all-loops $(OPTFLAGS)" \
	  "NOOPT=$(NOOPT)" \
	  lapacklib 2>&1 | tee make.log; \

lapacklib = $(PD)/atlas/lib/liblapack.a
lapack: $(lapacklib2) $(lapacklib)
$(lapacklib): $(atlaslib) FORCE
	cd $(PD)/atlas/lib; \
	cp $(lapacklib).atlas $(lapacklib); \
	mkdir tmp; cd tmp; \
	ar x $(PD)/$(liblapack)/lapack_LINUX.a; \
	ar r ../liblapack.a *.o; \
	cd ..; rm -rf tmp

lapack_mingw: FORCE
	cd $(PD); \
	liblapack=lapack-3.1.1; \
	lib=$$liblapack; \
	if [ ! -e $$lib.tgz ]; then wget -N http://www.netlib.org/lapack/$$lib.tgz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tgz|tar xv ; fi ; \
	cd $$liblapack; \
	mtmpl=make.inc.example; \
	cp $$mtmpl make.inc; \
	$(MAKE) "FORTRAN=g77" "LOADER=g77" \
	  "TIMER=EXT_ETIME" \
	  "OPTS=-funroll-all-loops $(OPTFLAGS) -mno-cygwin" \
	  blaslib lapacklib 2>&1 | tee make.log; \
	cp blas_LINUX.a libblas.a; \
	cp lapack_LINUX.a liblapack.a


############################
# MPI
############################

# select requested mpi library here (choose from targets below)
mpiimp=mpich2

mpilib=$($(mpiimp)lib)
mpi: $(mpiimp)

############################
# MPICH2
############################

mpich2lib = $(PD)/mpich2/lib/libmpich.a
mpich2: $(mpich2lib)
$(mpich2lib):
	cd $(PD); \
	lib=1.2.1p1; \
	if [ ! -e mpich2-$$lib.tar.gz ]; then wget -N --retr-symlinks http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/$$lib/mpich2-$$lib.tar.gz; fi; \
	if [ ! -e mpich2-$$lib.tar.gz ]; then \
	  lib=1.2.1; \
	  echo "Automatic fallback to older version mpich2-$$lib"; \
	  wget -N --retr-symlinks ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-$$lib.tar.gz; \
	fi; \
	if [ ! -d mpich2-$$lib ] ; then gunzip -c mpich2-$$lib.tar.gz|tar xv ; fi ; \
	cd mpich2-$$lib; \
	instdir=$(PD)/$(mpiimp); \
	./configure --prefix=$$instdir --with-device=ch3:ssm 2>&1 | tee configure.log; \
	echo "Enforcing '-j 1' because of problems"; \
	echo "with simultaneous/parallel make jobs"; \
	$(MAKE) -j 1 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	cd ..; ln -s $(mpiimp) mpi

############################
# MVAPICH2 1.0.X
############################

mvapich2olib = $(PD)/mvapich2o/lib/libmpich.a
mvapich2o: $(mvapich2olib)
$(mvapich2olib):
	cd $(PD); \
	lib=mvapich2-1.1;  ext=tar.gz; \
	pl= ; \
	if [ ! -e $$lib$$pl.tar.gz ]; then wget -N --retr-symlinks http://mvapich.cse.ohio-state.edu/download/mvapich2/$$lib$$pl.$$ext; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib$$pl.$$ext|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$(mpiimp); \
	unset CFLAGS; export PREFIX=$$instdir; export OPEN_IB_HOME=/usr; export F77=$(FC); export F90=$(FC); \
	./make.mvapich2.ofa | tee configure.log; \
	cd ..; ln -s $(mpiimp) mpi

# ./configure --prefix=$$instdir --with-device=osu_ch3:mrail:ssm --with-rdma=gen2 --with-pm=mpd --disable-romio --without-mpe 2>&1 | tee configure.log; \
# $(MAKE) 2>&1 | tee make.log; \
# $(MAKE) install 2>&1 | tee makeinst.log

############################
# MVAPICH2 1.2 and later
############################

mvapich2lib = $(PD)/mvapich2/lib/libmpich.a
mvapich2: $(mvapich2lib)
$(mvapich2lib):
	cd $(PD); \
	lib=mvapich2-1.4; ext=tgz; \
	pl= ; \
	if [ ! -e $$lib$$pl.tar.gz ]; then wget -N --retr-symlinks http://mvapich.cse.ohio-state.edu/download/mvapich2/$$lib$$pl.$$ext; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib$$pl.$$ext|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$(mpiimp); \
	./configure --prefix=$$instdir 2>&1 | tee configure.log; \
	$(MAKE)  2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	cd ..; ln -s $(mpiimp) mpi

############################
# MPICH1
############################

mpich1lib = $(PD)/mpich1/lib/libmpich.a
mpich1: $(mpich1lib)
$(mpich1lib):
	cd $(PD); \
	lib=mpich-1.2.7p1; \
	if [ ! -e $$lib.tar.gz ]; then wget -N --retr-symlinks ftp://ftp.mcs.anl.gov/pub/mpi/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$(mpiimp); \
	./configure | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) testing 2>&1 | tee makeinst.log; \
	./bin/mpiinstall --prefix=$$instdir; \
	cd ..; ln -s $(mpiimp) mpi

############################
# OpenMPI
############################

openmpilib = $(PD)/openmpi/lib/libopenmpi.a
openmpi: $(openmpilib)
$(openmpilib):
	cd $(PD); \
	lib=openmpi-1.3.4; \
	if [ ! -e $$lib.tar.gz ]; then wget -N --retr-symlinks http://www.open-mpi.org/software/ompi/v1.2/downloads/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$(mpiimp); \
	./configure --prefix=$$instdir | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	cd ..; ln -s $(mpiimp) mpi

############################
# ParMETIS
############################

parmetislib = $(PD)/ParMetis-3.1.1/libmetis.a
parmetis: $(parmetislib)
$(parmetislib):
	cd $(PD); \
	lib=ParMetis-3.1.1; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib/METISLib; \
	$(MAKE) "CC=$(MPI_DIR)/bin/mpicc" "LD=$(MPI_DIR)/bin/mpicc" 2>&1 | tee make.log

parmetis_mingw:
	cd $(PD); \
	lib=ParMetis-3.1.1; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib/METISLib; \
	f=metis.h; cp -a $$f $$f.bak; grep -v "parmetis.h" $$f.bak > $$f; \
	$(MAKE) "CC=gcc" "LD=gcc" CFLAGS="-O -I. -mno-cygwin" 2>&1 | tee make.log

############################
# MGridGen
############################

mgridgenlib = $(PD)/ParMGridGen-1.0/libmgrid.a
mgridgen: $(mgridgenlib)
$(mgridgenlib):
	cd $(PD); \
	lib=ParMGridGen-1.0; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www-users.cs.umn.edu/~moulitsa/download/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib/; \
	$(MAKE) "make=make" 2>&1 | tee make.log

############################
# SCOTCH
############################

scotchlib = $(PD)/scotch_5.0/libscotch.a
scotch: $(scotchlib)
$(scotchlib):
	cd $(PD); \
	lib=scotch_5.0; \
	if [ ! -e $$lib.6.tgz ]; then wget -N http://gforge.inria.fr/frs/download.php/5218/$$lib.6.tgz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib/src; \
	ln -s Make.inc/Makefile.inc.i686_pc_linux2 Makefile.inc ; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log

############################
# SUNDIALS/PVODE
############################

# set compiler options (modify for your setup!)
# add CPU specific options, e.g. -march=pentium4 -msse2 (cf. man gcc)

sundialslib = $(SUNDIALS_DIR)/lib/libsundials_cvode.a
sundials: $(sundialslib)
$(sundialslib):
	cd $(PD); \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	echo "Please register on the SUNDIALS webpage:"; \
	echo "http://www.llnl.gov/CASC/sundials/download/download.html"; \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	lib=`basename $(SUNDIALS_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.magpar.net/static/magpar/libs/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $(PD)/$$lib; \
	instdir=$(PD)/$$lib; \
	./configure --prefix=$$instdir --with-mpi-root=$(MPI_DIR) CFLAGS="$(OPTFLAGS)" --with-precision=$(PRECISION) 2>&1 | tee configure.log; \
	echo "forcing make install with -i to ignore errors when overwriting include files"; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) -i install 2>&1 | tee makeinst.log

sundials_mingw:
	cd $(PD); \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	echo "Please register on the SUNDIALS webpage:"; \
	echo "http://www.llnl.gov/CASC/sundials/download/download.html"; \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	lib=`basename $(SUNDIALS_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.magpar.net/static/magpar/libs/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $(PD)/$$lib; \
	instdir=$(PD)/$$lib; \
	./configure --prefix=$$instdir --disable-mpi CFLAGS="-mno-cygwin $(OPTFLAGS)" --with-precision=$(PRECISION) 2>&1 | tee configure.log; \
	echo "forcing make install with -i to ignore errors when overwriting include files"; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) -i install 2>&1 | tee makeinst.log

############################
# Python
############################

pythonver=2.6.4
python: FORCE
	cd $(PD); \
	libver=$(pythonver); \
	lib=Python-$$libver; \
	if [ ! -e $$lib.tgz ]; then wget -N http://www.python.org/ftp/python/$$libver/$$lib.tgz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tgz|tar xv ; fi ; \
	cd $$lib; \
	export CPP=cpp CC=gcc CXX=g++; \
	./configure --prefix=$(PD)/python 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log

############################
# NumPy
############################

numpy: FORCE
	cd $(PD); \
	libver=1.3.0; \
	lib=numpy-$$libver; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://internap.dl.sourceforge.net/sourceforge/numpy/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	export CPP=cpp CC=gcc CXX=g++; unset CFLAGS; unset LDFLAGS; \
	rm -f site.cfg ; \
	echo "[atlas]"  >> site.cfg; \
	echo "libraries = f77blas, cblas, atlas"  >> site.cfg; \
	echo "library_dirs = $(PD)/atlas/lib"  >> site.cfg; \
	echo "include_dirs = $(PD)/atlas/include"  >> site.cfg; \
	$(PD)/python/bin/python setup.py install

############################
# matplotlib
############################

matplotlib: FORCE
	cd $(PD); \
	libver=0.99.1.2; \
	lib=matplotlib-$$libver; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://internap.dl.sourceforge.net/sourceforge/matplotlib/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	export CPP=cpp CC=gcc CXX=g++; unset CFLAGS; unset LDFLAGS; \
	$(PD)/python/bin/python setup.py build; \
	$(PD)/python/bin/python setup.py install

############################
# PETSc
############################

#petsclib = $(PETSC_DIR)/lib/PETSc-config-magpar/libpetsc.a
petsc: FORCE
	cd $(PD); \
	lib=`basename $(PETSC_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget ftp://ftp.mcs.anl.gov/pub/petsc/release-snapshots/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	cp $(MAGPAR_SRC)/PETSc-config-magpar.py $(PETSC_DIR)/config/; \
	OPTFLAGS="$(OPTFLAGS)"; export OPTFLAGS; \
	PRECISION="$(PRECISION)"; export PRECISION; \
	./config/PETSc-config-magpar.py 2>&1 | tee config.log; \
	$(MAKE) all 2>&1 | tee make.log

petsc_mingw: FORCE
	cd $(PD); \
	lib=`basename $(PETSC_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then Xwget ftp://ftp.mcs.anl.gov/pub/petsc/release-snapshots/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	cp $(MAGPAR_SRC)/PETSc-config-magpar.py $(PETSC_DIR)/config/; \
	OPTFLAGS="-mno-cygwin $(OPTFLAGS)"; export OPTFLAGS; \
	PRECISION="$(PRECISION)"; export PRECISION; \
	./config/PETSc-config-magpar.py 2>&1 | tee config.log; \
	hfile=PETSc-config-magpar/include/petscconf.h; \
	cp $$hfile $$hfile.bak; \
	cat $$hfile.bak | \
	sed "/PETSC_HAVE_GETPAGESIZE/,+2 d" | \
	sed "/PETSC_HAVE_IEEEFP_H/,+2 d" | \
	sed "/PETSC_HAVE_NETDB_H/,+2 d" | \
	sed "/PETSC_HAVE_PWD_H/,+2 d" | \
	sed "/PETSC_HAVE_SYS_PROCFS_H/,+2 d" | \
	sed "/PETSC_HAVE_SYS_RESOURCE_H/,+2 d" | \
	sed "/PETSC_HAVE_SYS_TIMES_H/,+2 d" | \
	sed "/PETSC_HAVE_SYS_UTSNAME_H/,+2 d" \
	> $$hfile; \
	$(MAKE) all 2>&1 | tee make.log

# Installation instructions for PETSc versions older than 2.3.0
# have been moved to the FAQ page.

############################
# TAO
############################

# magpar requires
# (PETSc version 3.0.0 and TAO 1.10) or
# (PETSc version 2.3.3 and TAO 1.9) or
# (PETSc version 2.3.2 and TAO 1.8.2) or
# (PETSc version 2.3.0 and TAO 1.8) or
# (PETSc version 2.2.1 and TAO 1.7) or
# (PETSc version 2.2.0 and TAO 1.6) or
# (PETSc version 2.1.6 and TAO 1.5)

taolib = $(TAO_DIR)/lib/PETSc-config-magpar/libtao.a
tao: $(taolib)
$(taolib):
	cd $(PD); \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	echo "Please register on the TAO webpage:"; \
	echo "http://www.mcs.anl.gov/research/projects/tao/download/"; \
	echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; \
	lib=`basename $(TAO_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.mcs.anl.gov/research/projects/tao/download/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $(TAO_DIR); \
	echo "Enforcing '-j 1' because of problems"; \
	echo "with simultaneous/parallel make jobs"; \
	$(MAKE) -j 1 2>&1 | tee make.log

############################
# zlib
############################

zliblib = $(ZLIB_DIR)/libz.a
zlib: $(zliblib)
$(zliblib):
	cd $(PD); \
	lib=`basename $(ZLIB_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.zlib.net/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	ln -s $$lib zlib; \
	cd $$lib; \
	export CC=$(CC); export CFLAGS="-O -fPIC"; \
	./configure 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) test 2>&1 | tee maketest.log

zlib_mingw:
	cd $(PD); \
	lib=`basename $(ZLIB_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://www.zlib.net/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	ln -s $$lib zlib; \
	cd $$lib; \
	export CC=gcc; export CFLAGS="-O -mno-cygwin"; \
	./configure 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) test 2>&1 | tee maketest.log

############################
# libpng
############################

pnglib = $(PNG_DIR)/lib/libpng12.a
libpng: $(pnglib)
$(pnglib): $(zliblib)
	cd $(PD); \
	lib=`basename $(PNG_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://downloads.sourceforge.net/libpng/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$$lib; \
	true ./configure --prefix=$$instdir --enable-shared=no 2>&1 | tee configure.log; \
	true CFLAGS="-I$(ZLIB_DIR)"; export CFLAGS; \
	true LDFLAGS="-L$(ZLIB_DIR)"; export LDFLAGS; \
	./configure CFLAGS="-I$(ZLIB_DIR)" LDFLAGS="-L$(ZLIB_DIR)" --prefix=$$instdir --enable-shared=no 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	$(MAKE) check 2>&1 | tee makecheck.log

libpng_mingw:
	cd $(PD); \
	lib=`basename $(PNG_DIR)`; \
	if [ ! -e $$lib.tar.gz ]; then wget -N http://downloads.sourceforge.net/libpng/$$lib.tar.gz; fi; \
	if [ ! -d $$lib ] ; then gunzip -c $$lib.tar.gz|tar xv ; fi ; \
	cd $$lib; \
	instdir=$(PD)/$$lib; \
	./configure --prefix=$$instdir --enable-shared=no CFLAGS="-I$(ZLIB_DIR) -mno-cygwin" LDFLAGS="-L$(ZLIB_DIR) -mno-cygwin" 2>&1 | tee configure.log; \
	$(MAKE) 2>&1 | tee make.log; \
	$(MAKE) install 2>&1 | tee makeinst.log; \
	$(MAKE) check 2>&1 | tee makecheck.log

############################
# Gmsh
############################

gmsh: FORCE
	cd $(PD); \
	ver=2.4.2; \
	arc=gmsh-$$ver-Linux.tgz; \
	if [ ! -e $$arc ]; then wget -N http://geuz.org/gmsh/bin/Linux/$$arc; fi; \
	gunzip -c $$arc|tar xv

############################
# Netgen
############################

netgen: FORCE
	cd $(PD); \
	ver=4.9.11; \
	arc=netgen-$$ver.tar.gz; \
	if [ ! -e $$arc ]; then wget -N http://voxel.dl.sourceforge.net/sourceforge/netgen-mesher/$$arc; fi; \
	gunzip -c $$arc|tar xv

# dummy target to enforce rebuild of other targets
FORCE:



magpar - Parallel Finite Element Micromagnetics Package
Copyright (C) 2002-2010 Werner Scholz