Building Freesurfer on Mountain Lion

This document is an account of my attempt to make Hima a daily build platform for building a 64bit version of Freesurfer running on Mac OSX Mountain Lion.

Download the source code

cd /space/freesurfer/build/hima/stable/dev
cvs checkout -P -r stable5 dev

./setup_configure

./setup_configure
rm -rf autom4te.cache
glibtoolize --force
glibtoolize: Command not found.

This was fixed by adding to my PATH:

export PATH=$PATH:/usr/pubsw/packages/autotools/bin/

Trying ./setup_configure again revealed more issues:

./setup_configure
rm -rf autom4te.cache
glibtoolize --force
You should add the contents of `/usr/pubsw/packages/autotools/share/aclocal/libtool.m4' to `aclocal.m4'.
Putting files in AC_CONFIG_AUX_DIR, `config'.
aclocal
autom4te: need GNU m4 1.4 or later: /usr/bin/gm4
aclocal: autom4te failed with exit status: 1

This was fixed by installing XCode 4.5.1 Command Line Tools:

Completes!

./configure

./configure --prefix=/usr/local/freesurfer/stable --disable-all-apps --disable-tcltk-apps --disable-kww-apps
.
.
.
configure: error: FATAL: A Fortran 77 compiler is required!

Installed gfortran.

Trying again:

./configure --prefix=/usr/local/freesurfer/stable --disable-all-apps --disable-tcltk-apps --disable-kww-apps
.
.
.
FreeSurfer is now configured for i386-apple-darwin12.2.0

  Source directory:  .
  Build directory:   /Users/Shared/nightly_build/stable/dev
  Install directory: /usr/local/freesurfer/dev

  C compiler:   gcc -gfull -O3 -msse2 -mfpmath=sse -Wall -Werror -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -m64 -DDarwin -DANSI  -I/usr/pubsw/packages/mni/current/include
  C++ compiler: g++ -gfull -O3 -msse2 -mfpmath=sse -Wall -Werror -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -m64 -DDarwin -DANSI  -I/usr/pubsw/packages/mni/current/include
  Fortran:      gfortran -g -O2
  Linker:       /usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld  -dead_strip   -L/usr/pubsw/packages/mni/current/lib -L/usr/pubsw/packages/vxl/current/lib  -L/usr/pubsw/packages/itk/current/lib/InsightToolkit
  Libs:           /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKIO.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKAlgorithms.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKCommon.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKNumerics.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKMetaIO.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKniftiio.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKNrrdIO.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkpng.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitksys.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitktiff.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkv3p_netlib.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkzlib.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkgdcm.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkopenjpeg.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkjpeg8.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkjpeg12.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libitkjpeg16.a   /usr/pubsw/packages/itk/current/lib/InsightToolkit/libITKDICOMParser.a  -lz -lm  -ldl -lpthread     -lnetcdf -lvolume_io -lminc -lvnl_algo -lvnl -lvcl -lnetlib -lv3p_netlib

Completes!

make

make -j9

The following table lists the packages I had to remove from the Makefile in order to build to completion:

Package

Error Message

comment

opencl_algorithms

../config.h:340:1: error: "PTHREAD_CREATE_JOINABLE" redefined

??

nmovies

nmovie.c:47:22: error: X11/Xlib.h: No such file or directory

Solved by adding -I/usr/X11R6/include flag.

mri_ca_register

mri_ca_register.c:1256: warning: call to \_\_builtin\_\_\_memmove_chk will always overflow destination buffer

Solved by removing -Werror flag

mri_robust_register

ld: framework not found veclib

Solved by replacing "-framework veclib" with "-framework vecLib"

talairach_avi

ld: symbol(s) not found for architecture x86_64

mris_pmake

../config.h:340:1: error: "PTHREAD_CREATE_JOINABLE" redefined

??

GEMS

kvlAtlasMeshBuilder.cxx:3723: error: ‘isnan’ was not declared in this scope

?? change C code??

fem_elastic

ld: library not found for -llmpe

??

trc

../fem_elastic/libfem_elastic.a', needed by dmri_trk2trk.

Needs fem_elastic

With the packages above commented out of the Makefile, make runs to completion.

make install

Make install errors out with a segmentation fault.

make install
.
.
.
make  install-exec-hook
cp ./unpacksdcmdir /usr/local/freesurfer/stable/bin/unpacksdcmdir.tcl
echo "#!/bin/tcsh -ef" \
                > /usr/local/freesurfer/stable/bin/unpacksdcmdir
echo "source \$FREESURFER_HOME/bin/tcl_setup" \
                >> /usr/local/freesurfer/stable/bin/unpacksdcmdir
echo "\$FREESURFER_HOME/lib/tcltktixblt/bin/tclsh8.4 \$FREESURFER_HOME/bin/unpacksdcmdir.tcl \$argv" \
                >> /usr/local/freesurfer/stable/bin/unpacksdcmdir
chmod a+x /usr/local/freesurfer/stable/bin/unpacksdcmdir
cp ./fsfget /usr/local/freesurfer/stable/bin/fsfget.tcl
echo "#!/bin/tcsh -ef" \
                > /usr/local/freesurfer/stable/bin/fsfget
echo "source \$FREESURFER_HOME/bin/tcl_setup" \
                >> /usr/local/freesurfer/stable/bin/fsfget
echo "\$FREESURFER_HOME/lib/tcltktixblt/bin/tclsh8.4 \$FREESURFER_HOME/bin/fsfget.tcl \$argv" \
                >> /usr/local/freesurfer/stable/bin/fsfget
chmod a+x /usr/local/freesurfer/stable/bin/fsfget
../utils/fsPrintHelp ./bbregister.help.xml >> /usr/local/freesurfer/stable/bin/bbregister
/bin/sh: line 1: 17021 Segmentation fault: 11  ../utils/fsPrintHelp ./bbregister.help.xml >> /usr/local/freesurfer/stable/bin/bbregister
make[3]: *** [install-exec-hook] Error 139
make[2]: *** [install-exec-am] Error 2
make[1]: *** [install-am] Error 2
make: *** [install-recursive] Error 1

Uggghhh! X-(

fsPrintHelp is prone to segmentation faults. By commenting out its usage in the Make file of the scripts and mri_cvs_register packages, I am able to get make_install to run to completion. Testing a run of recon-all over the weekend.