> Dear Meep Users and Developers, > > I have been able to install meep-1.3 on two different iMacs (one in > Washington DC( Sierra 10.12.5) and the other in Paris (Sierra 10.12.6) during > the month of July 2017. This message recounts what I did. I hope it works > for you, but even in these two very similar machine environments the tactics > for a successful build were not exactly the same. I hope these steps prove > useful to users who want to install meep on macOS. > > The point of departure was the “installation guide for Sierra based on > HomeBrew" in meep-discuss, > https://www.mail-archive.com/meep-discuss@ab-initio.mit.edu/msg05719.html > <https://www.mail-archive.com/meep-discuss@ab-initio.mit.edu/msg05719.html> > > I also used HomeBrew to install some of the prerequisite packages. > > 1. First install home-brew if you don’t already have it. You can download it > from the home-brew web site, http://docs.brew.sh/Installation.html > <http://docs.brew.sh/Installation.html>. It is a package handler analogous > to apt or apt-get in Ubuntu Linux. > > 2. Open a terminal session and, once home-brew is installed, on the command > line, > > brew doctor (analyses the system for potential conflicts and problems) > brew update (update all the home-brew packages). > > 3. brew install the following packages: libunistring, pkg-config, libffi, > bdw-gc, readline, hdf5, openblas, fftw, gsl, automake, and autoconf. Some of > these packages might be already on your system. > > 4. The Washington iMac seemed to require the installation of gettext as well > the packages above, so you might as well install getttext. Also on the > Washington iMac, I initially got errors about missing xxx.m4 files in the > guile-2.0.11/m4 directory. I simply copied the m4 directory from a later > guile version in the guile-2.0.11/m4 directory, and the problem disappeared. > I did not get this error on the Paris machine. > > 5. Download from the gnu index site the tarball for guile-2.0.11. Any > version later than this one generates errors in meep. Do not install guile > with home-brew. Even if you specify the guile-2.0 series, via the command, > brew install guile 2.0@, home-brew will install guile-2.0.14, which does not > work with meep. > > 6. The build of guile-2.0.11 was the hardest part of this task. The overall > method is the typical unix install procedure: ./configure, make, sudo make > install…but compiler and linker flags must be specified on the ./configure > command line. After extracting the tarball with tar-xvd, cd to the > guile-2.0.11 directory. > You should find an executable configure file. The command is ./configure. > By default the installation will be in /usr/local. If you want it somewhere > else, on the ./configure command line: prefix=/your/install_directory. My > advice is to stick with /usr/local unless you have some compelling reason not > to. > On the same ./configure command line set LDFLAGS=“-L/path/to/lib > -L/path/to/other/lib" and CPPFLAGS=“-I/path/to/include > -I/path/to/other/include” for all the relevant paths for the previously > installed prerequisites so that the compiler and linker will be able to find > the lib and include directories. For those packages that require static and > dynamic libraries the LDFLAGS has to have both the -L and -l options. Thus: > LDFLAGS=“-L/path/to/libfoo/lib -lfoo”. Home-brew creates a symlink in > /usr/local/opt for most (but not all) of the installed programs. The > home-brew installation well print a message alerting you to where the > libraries and include files can be found. > You also should specify on the ./configure command line LIBFFI_CFLAGS for the > include directory and LIBFFI_LIBS for the static and dynamic libraries where > ffi can be found. For some reason ffi seems to require these additional > environmental variables in order to find the latest version of ffi. > > 7. Once you have everything on the ./configure line, take a deep breath and > press return. If the configure script runs to completion, breath a sigh of > relief and type the make command at the system prompt. If you get errors > while running ./configure, you can
> cat config.log|grep “some key words of the error message” > to try to deduce what went wrong. > > 8. If you get to make, take another deep breath; hit return. You will see > lots of warnings, but the make will only stop with errors. At first I got a > lot of errors about various “missing symbols”, but it was because I had > forgotten to add an -l flag (for dynamic libraries) to the > LDFLAGS="-L/path/to/ffi. It should be LDFLAGS=-L/path/to/ffi -lffi”. > > 9. A persistant error was due to the stime.c file in …/libguile/stime.c that > comes with the guile-2.0.11 tarball. This is a documented bug in > guile-2.0.11(http://lists.gnu.org/archive/html/bug-guile/2017-03/msg00000.html > <http://lists.gnu.org/archive/html/bug-guile/2017-03/msg00000.html>) and has > been fixed for guile versions >=2.0.15. There is also a patch on GitHub > site. However, I just downloaded and extracted the current version of guile > (2.2.2) and copied the stime.c file in the more recent version to my > …/guile-2.0.11/libguile directory and did the configure and make sequence > again. That solved the problem for me. The make command can be run with > make V=1 to see the details of what is going on at each step. For linker > problems I found it useful to actually see what lib and include paths the > linker was using and in what sequence. > > 10. The last step is sudo make install. I had no problems with this step, > once I was able to get that far. > > 11. A quick check that you have the required guile version installed > correctly is to type at the prompt, guile - - version. You should get the > guile prompt with the version information. It should be 2.0.11. > > 12. Once the guile hurdle was overcome the rest was relatively > straightforward. > > 13. From the meep ab initio site you can get the tarballs for h5utils, > harminv, libctl, mpb, and meep. You need to get the libpng-1.4.20 package > from its download site. Then > configure, make, sudo make install > went smoothly without supplemental LDFLAGS and CPPFLAGS specifications. That > of course assumes the default installation path, /usr/local. > > 14. Finally, after having installed all of the above, I typed meep and got > the prompt and the correct version, meep-1.3. Then I went through the meep > abi initio tutorials and, so far, everything is working as expected. When > meep runs you get a “some stuff is deprecated” message at the end, but for > now at least it does not interfere with meep’s functioning. > > So there it is…I hope it helps. There are probably better ways to accomplish > the same end, but for non-developers and non-maintainers the goal is to get > meep working. The procedure is for macOS Sierra and guile-meep, not > python-meep. Let me know if you have any enlightening comments and > corrections. > > John Weiner
_______________________________________________ meep-discuss mailing list meep-discuss@ab-initio.mit.edu http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss