Compilation of FreeFem++ under unix, MacOs X or mingw  (Windows)
and bamg (mesh generator)
----------------------------------------------------------------
REMARK:    after 4/09/2013, in hg version all 
construct by autoreconf are not on the directly in distribution.

-- to rebuild    with automake version >= 1.13 autoconf :
  # autoreconf -i
    or take the file form the file AutoGeneratedFile.tar.gz 
  # tar zxvf AutoGeneratedFile.tar.gz 

--  to build a complete  version do
   # ./configure --enable-download
-- to get all source  downlaod package 
   # download/getall -a 
-- to test
   make check
-- to install
   sudo make install



New:  Test version 3.9  F. Hecht & J. Morice July  2010.

Try to downlaod and compile (add --enable-download flags to configure)
 lot of related  sofware, (Please read the licence of all with software,
if you use freefee++ for commercial purpose) 

tetgen superlu fftw metis yams mshmet MUMPS
blacs parmetis scalapack scotch superludist MUMPS pastix hypre hips 

For the link with mmg3d software put the tar.gz archive in .../dowload/pgk directory.

Remark, you can alsy copy all the donwload file in ../dowload/pgk if you have not internet connection.

Brochet-2:download hecht$ ls -1 pkg/*
MBA-de-FH:download hecht$ ls -1 pkg/*
pkg/Ipopt-3.10.2.tgz
pkg/MUMPS_4.10.0.tar.gz
pkg/ParMetis-3.1.1.tar.gz
pkg/SuiteSparse-2.4.0.tar.gz
pkg/arpack96.tar.gz
pkg/blacstester.tgz
pkg/fftw-3.2.1.tar.gz
pkg/freeyams.2012.02.05.tgz
pkg/gmm-4.1.tar.gz
pkg/hips-1.2b-rc4.tar.gz
pkg/metis-4.0.tar.gz
pkg/mmg3d4.0.tgz
pkg/mpiblacs-patch03.tgz
pkg/mpiblacs.tgz
pkg/mshmet.2011.03.06.tgz
pkg/nlopt-2.2.4.tar.gz
pkg/pARMS_2.2.tar.gz
pkg/pastix_release_2200.tar.bz2
pkg/patch.tar.gz
pkg/scalapack-1.8.0.tgz
pkg/scotch_5.1.6_esmumps.tar.gz
pkg/superlu_4.0.tar.gz
pkg/superlu_dist_2.3.tar.gz
pkg/tetgen1.4.3.tar.gz
MBA-de-FH:download hecht$ 
 
TO simplify the link and compilation part, 

I have add 3 files
examples++-load/WHERE_LIBRARY		
examples++-load/WHERE_LIBRARY-download
examples++-load/WHERE_LIBRARY-config

On my mac I have install gsl with MacPorts 
MBA-de-FH:~ hecht$ more work/ff++/examples++-load/WHERE_LIBRARY
gsl LD -L/opt/local/lib/ -lgsl
gsl INCLUDE  -I/opt/local/include/
MBA-de-FH:~ hecht$ 


the files 
examples++-load/WHERE_LIBRARY-config
examples++-load/WHERE_LIBRARY-download
are restectively created with ./configure commande ,
the compilation of all downlaod software.
and the  examples++-load/Makefile.


The use of commande compile with search of include and lib. 
../exemples++-load/ff-cc++ -auto MUMPS_FreeFem.cpp
compile a do all the link edition for MUMPS freefem++ interface.

Brochet-2:examples++-mpi hecht$ make MUMPS_FreeFem.dylib
../examples++-load//ff-c++ -auto  MUMPS_FreeFem.cpp 
.. 

we just add  the 2 lines  in MUMPS_FreeFem.cpp
//ff-c++-LIBRARY-dep:  mumps parmetis ptscotch  scalapack blacs blas  mpifc  fc  pthread 
//ff-c++-cpp-dep: 




*  to today the ide  version is  currently available
	you can get  from http://www.ann.jussieu.fr/~lehyaric/ffcs/index.htm


Old Remark (May be obsolete)
     *  the graphique is now base of Open/Glut lib.
     *  IN CASE  of problem under UBUNTU/GLUT  (no graphics window tilte: (march 2009) 
        they are a know bug with compiz package so  try
	To disable/enable it graphically, install the compiz-swith package with synatic. Or try this in command line:
	killall compiz.real && killall compiz && metacity --replace --display :0 & 

F. Hecht.
-


For debian, ubuntu, MacOS, Windows  see the the prerequisite

installed packages before configuration and compilatation.

This file details specific configuration details for FreeFem++. For
a standard installation, please refer to the file named "INSTALL".

annd see the end of this file to have some 
configure example:

Full version 3d need automatic download option
----------------------------------
For a Full 3d  version , some external piece of software
can by usefull, the simplest wait is to add "--enable-download"
to the "./configure" (need of  "wget" or "curl" unix  command). 
The download archive are store in : 
download/pkg/SuiteSparse-2.4.0.tar.gz  # umpack 
download/pkg/arpack96.tar.gz           # arpack
download/pkg/f2c.tar                   # f2c if no fortran 77
download/pkg/fftw-3.2.1.tar.gz         # fft
download/pkg/patch.tar.gz              # arpack
download/pkg/superlu_3.1.tar.gz        # superlu
download/pkg/tetgen1.4.2.tar.gz        # tetgen
download/blas/cblas.tgz                # blas 
if you have not internet access juste copie this files at the same  place.


Debugging and optimization
--------------------------

Without any option, "./configure" selects the best optimization
options for the local machine. To produce optimized binaries that can
be ported to other machines, add the option "--enable-generic".


To produce FreeFem++ programs containing debugging symbols and no
optimization, use "--enable-debug".

If you need to add specific flags to the ones that ./configure
chooses, just define the corresponding automake variable before
running configure. For instance, to add flag "-x" to C++ compilations,
say:

> CXXFLAGS=-x ./configure

Other useful configuration variables include:
- CFLAGS for C compilation
- FFLAGS for Fortran compilation
- LIBS libraries for the linking stage
- LDFLAGS linking flags
- LDADD extra options for the linking stage
- F77  the fortran compile (if not fortran is installed  see section NOFORTRAN)
- FC   the fortran 90 compiler 
- CC  the cc compiler
- CXX the c++ compiler


Linear algebra libraries and eigen value problem
-----------------------------------------------
By default, "./configure" looks for the X11, BLAS, ARPACK and UMFPACK, OpenGL, GLUT
libraries on the local system.
ARPACK is use to compute eigenvalue.
and UMFPACK is a new fast sparse linear solver.

 If configure cannot find the libraries
by itself, you can specify the full path to a library file (ending
with ".a") or the options use by the linker (ex: "-L/usr/local/lib -lblas")
with the following options:

--with-blas="blas linker options"  
--with-arpack="arpack linker options"
--with-amd="amd linker options"
--with-umfpack="umfpack linker options"

Or, if the configuration flag "--enable-download" is specified, the
compilation step ("make") will try to download the missing libraries
(from their official websites) and compile them.

Remark, under linux or window the simplest way to get
a not to bad version is
./configure --enable-download 

Here are the different versions of FreeFem++ produced by one
compilation (some versions may be missing if your system does not
support them):

* FreeFem++: standard version (using X11 graphics on Linux and MacOS
  10, Win32 on Windows and  MacOS X) (located in src/std)

* FreeFem++-nw: without graphics (located in src/nw)

* FreeFem++: graphics based on OpenGL (located in src/nw)
* ffglut: the graphic tools

* FreeFem++-mpi: parallel version, without graphics (located in src/mpi)

The compilation procedure (produced with automake) builds all the
libraries and executables sequentially. Running "make" in a
subdirectory does not rebuild dependencies in other directories.

The compilation has been tested under linux and MacOs/Darwin with g++
version  3.3. 4.0 4.4 It take 30 mn to compile all on
my PowerBook G4 1Mhz 1024MB.

Rebuilding "configure"
------------------------

Developers of FreeFem++ can rebuild the configuration system using
Automake and Autoconf with the command:

> autoreconf
# to reconfigure with the same parameter 
> ./reconfigure 

Extra utilities
---------------

To run an interactive test of FreeFem++:
> make visualcheck

To run a speed test:
> make speedtest

To create the documentation in .ps and .pdf format (in the "DOC" directory):
> make documentation

Examples
--------

All the Examples are in the two directories examples++ and
examples++-tutorial. The suffix is .edp ("equations aux derivees
partielles" in French)

To test all the examples under unix: 

> cd examples++; ../src/std/FreeFem++ all.edp
> cd examples++-tutorial; ../src/std/FreeFem++ all.edp

To try the  dynamic linking loader example: 
remark: some adaptation must be done with the suffix probleme (.dll, .so, .dylib )
and directory  to seach dynamic lib  (shell variable LD_LIBRARY_PATH)
 

warning under  Window XP,  first install the cygwin environnent (see http://www.cygwin.com)
> cd example++-load build a dll file with the following shell script:
> ./ff-c++  myfunction.cpp  

to execute the examples try  
  under window xp
 FreeFem++-nw  load.edp 
  or otherwise 
 ../src/nw/FreeFem++-nw load.edp



-- FreeFem++ v1.38 (date Tue Feb 10 12:04:30 CET 2004)
 file : load.edp
 Load: lg_fem  --  no UMFPACK => replace UMFPACK  by LU  
lg_mesh eigenvalue 
 load "myfunction" lood: myfunction 
load: dlopen(./myfunction.so) = 0x84be700

    1 :  mesh Th=square(5,5);
    2 :  fespace Vh(Th,P1);
    3 :  Vh uh=myfunction(); // warning  do not forget () 
    4 :  cout << uh[].min << " " << uh[].max << endl;
    5 : 
    6 : 
    7 :  sizestack + 1024 =1224  ( 200 )
----------CheckPtr:-----init execution ------ NbUndelPtr  996  Alloc: 79131  NbPtr 1011 

   Nb of edges on Mortars  = 0
   Nb of edges on Boundary = 20, neb = 20
 Nb Of Nodes = 36
 Nb of DF = 36
0 0.841471
times: compile 0.01s, execution -2.0837e-19s
----------CheckPtr:-----end execution -- ------ NbUndelPtr  996  Alloc: 79131  NbPtr 1048 
Bien: On a fini Normalement
                CheckPtr:Nb of undelete pointer is 995 last 101
                CheckPtr:Max Memory used     93.672 kbytes  Memory undelete 78619 

Note 1: if this does not work, please check the manual page of dlopen
for your system.


Note 2. Fast fourier exemple ( FFT )  is in dfft.edp  file
need of fftw3 


Some configure flags use to build the current version
-----------------------------------------------------

*  Under Debian: ( 2008)
----------------
  the installed packages + dependance are:   

  gcc g++ g77
  libsuitesparse-dev
  libarpack2-dev
  libx11-dev libxt-dev libxext-dev
  patch
  wget
  freeglut3-dev
 - bluid the parallel version
   openmpi-dev openmpi

 - to rebuild de documentation:  
  imagemagick 
  tetex-base   tetex-bin  tetex-extra 

 ./configure 
  make 
  make check    (to test de version)
  make install  (under root)
   
*  Under Ubuntu (2008)
---------------
  the installed packages + dependance are:   
   gcc g++  g77
   wget 
   m4 bison flex patch
   libzip-dev
   libx11-dev libxt-dev libxext-dev 
    libxpm4 libxpm4-dbg 
    libsuitesparse-dev libarpack2-devlibarpack2 libarpack2-dev
    libfltk1.1 libfltk1.1-dbg libfltk1.1-dev
    libopenmpi1 libopenmpi-dev
    libopenmpi-dbg libxpm-dev 
    freeglut3 freeglut3-dev
    libx11-dev  libxt-dev  libxext-dev 
    libglut3-dev	
 - bluid the parallel version
    openmpi-dev openmpi
 - to rebuild de documentation:  
    imagemagick 
    tetex-base   tetex-bin  tetex-extra 
 

 ./configure --enable-download  --with-mpi=mpic++
#  utility of parameter:
#  --enable-download :  for fft and tetgen ... 
#  --with-mpi=mpic++ : for mpi version 
  make 
  make check    (to test de version)
  make install  (under root)
  


* Under Red Hat Enterprise Linux AS release 3:
----------------------------------------------
the following rpm:
blas-3.0-20 gcc-3.2.3-53 tetex-1.0.7-67.9 lapack-3.0-20 ImageMagick-5.5.6-15 wget-1.10.2-0.30E curl-7.10.6-7.rhel3
are install
./configure  '--enable-download' '--with-blas=-lblas -llapack'


* Under MacOs: (2010)  snow leopard
-------------
 
 1) intall Apple's Developer Tools from de Apple DVD
    Warning the default compile is now 64 bits, 
 2) install g95  fortron (to have a fortran  64 bits by default)
        install macport  from http://www.macports.org/
        sudo port install g95

     or add flags   -m64  to the fortran command (not tested).
	cd download/f2c
	make install-10.6
 3)  recompile openmpi with the use of g95  

   './configure'  'FC=/opt/local/bin/g95' 'F77=/opt/local/bin/g95' 
     make 
    sudo make install

 4) TeXLive-teTeX Current Release in http://www.ctan.org/tex-archive/systems/mac/mactex/


./configure '-with-suffix=snow-leopard'  '--enable-download' 'build_alias=snow-leopard' 'host_alias=snow-leopard' 'target_alias=snow-leopard' 'F77=/opt/local/bin/g95' '-with-mpi=/usr/local/bin/mpic++' '--enable-m64' 'FLIBS=/opt/local/lib/g95/x86_64-apple-darwin10/4.2.4/libf95.a' 'MPIF77=/usr/local/bin/mpif77' 'MPICC=/usr/local/bin/mpicc' 'MPIFC=/usr/local/bin/mpif90'

* Under MacOC macIntel 
----------------------
  1) install Apple's Developer Tools
  2) install do the NOFORTRAN section. 
  3) install the TexMac for the documentation:
 http://ctan.org/get/systems/mac/mactex/MacTeX-20071201.dmg

# to build a full  freefem++  for your Mac:
first install g95, and recompile openmpi (little tricky)

./configure '-with-suffix=snow-leopard' '-without-fltk' '--enable-download' 'F77=/opt/local/bin/g95' '-with-mpi=/usr/local/bin/mpic++' '--enable-m64' 'FLIBS=/opt/local/lib/g95/x86_64-apple-darwin10/4.2.4/libf95.a' 'MPIF77=/usr/local/bin/mpif77' 'MPICC=/usr/local/bin/mpicc' 'MPIFC=/usr/local/bin/mpif90'


./configure -without-fltk' '--enable-download' '-with-mpi=mpic++' 'F77=fort77' '--with-flib=-L/usr/local/lib -lf2c'

or if you have compile the download/f2c   with : (cd download/f2c;make install)

./configure '-with-suffix' 'MacIntel'  '--enable-download' '-with-mpi=mpic++' '-enable-download' 

# to build universal FreeFem++ of 10.4 macOS (ppc , i386):
( cd  download/f2c; make  -n compile-10.4 install)
./configure '-with-suffix=Universal' '-without-fltk' '--enable-download' 'F77=/Users/hecht/ff/ff-univ/download/bin/fort77' '--with-flib=/Users/hecht/ff/ff-univ/download/lib/libf2c.a' 'CXX=g++-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -mmacosx-version-min=10.4' 'CC=gcc-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -mmacosx-version-min=10.4' 'FFLAGS=-Wc,-isysroot,/Developer/SDKs/MacOSX10.4u.sdk,-arch,ppc,-arch,i386,-mmacosx-version-min=10.4' 'CXXCPP=g++ -E' '--disable-dependency-tracking' '--x-libraries=/usr/X11R6/lib/'



* Under Windows: 
----------------
see the end of README_WINDOW  files 

* NOFORTRAN:
------------
You have not fortran compiler use f2c and the use the  script fort77
by the way just do:
cd  download/f2c
# to build and install fort77,  linf2c.a in download/bin  download/lib
make install
# to install in /usr/local/
make install-sudo

# to build and universal f2c library on MacOS 10.4 and install in /usr/local/bin  /usr/local/lib
# and in download/bin  download/lib download/bin  download/include
#    32/ 64   bits architecture on    intel and ppc
make -n install-10.4 

for the 64 on intel   version 10.6 (SDK)
make -n install-10.6

