= 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 == {{{ >> cd dev >> ./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 . . . configure: error: FATAL: A Fortran 77 compiler is required! }}} Installed gfortran. Trying again: {{{ >> ./configure --prefix=/usr/local/freesurfer/stable --disable-all-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'' || Solved by commenting out "#define PTHREAD_CREATE_JOINABLE $ok" from autogenerated '''config.h''' file. (Autotools wierdness) || ||'''nmovies''' ||''nmovie.c:47:22: error: X11/Xlib.h: No such file or directory'' || Solved by adding "$(GL_CFLAGS)" and $(HAVE_OPENGL) to AM_CPPFLAGS in nmovies/Makefile || ||'''mri_ca_register''' ||''mri_ca_register.c:1256: warning: call to \_\_builtin\_\_\_memmove_chk will always overflow destination buffer'' || Solved by removing -Werror flag from mri_ca_register/Makefile || ||''' mri_robust_register''' ||''ld: framework not found veclib'' || Solved by replacing "-framework veclib" with "-framework vecLib" in mri_robust_register/Makefile || ||'''talairach_avi''' ||''ld: symbol(s) not found for architecture x86_64'' || Solved by uncommenting all lines with -DHAVE_GFORTRAN in file talairach_avi/Makefile || ||'''mris_pmake''' ||''../config.h:340:1: error: "PTHREAD_CREATE_JOINABLE" redefined'' || Solved by technique above with opencl_algorithms || ||'''GEMS''' ||''kvlAtlasMeshBuilder.cxx:3723: error: ‘isnan’ was not declared in this scope'' || Solved by changing isnan to std::isnan in file kvlAtlasMeshBuilder.cxx || ||'''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 Makefile of the '''scripts''' and '''mri_cvs_register''' packages, I am able to get '''make_install''' to run to completion. But the '''recon-all''' script requires the talairch_avi binary so I am stuck until I get that at least that directory to compile.