diff --git a/BuildSupport.cmake b/BuildSupport.cmake index b0fd0b1..cd9376a 100644 --- a/BuildSupport.cmake +++ b/BuildSupport.cmake @@ -53,7 +53,11 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Important to use FALLBACK variable. # https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryUsageGuidelines.html set (BUILDEM_LD_LIBRARY_VAR "DYLD_FALLBACK_LIBRARY_PATH") - set (BUILDEM_PLATFORM_SPECIFIC_ENV "MACOSX_DEPLOYMENT_TARGET=10.5") + if(${CMAKE_OSX_DEPLOYMENT_TARGET}) + set (BUILDEM_PLATFORM_SPECIFIC_ENV "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") + else() + set (BUILDEM_PLATFORM_SPECIFIC_ENV "MACOSX_DEPLOYMENT_TARGET=10.5") + endif() set (BUILDEM_PLATFORM_DYLIB_EXTENSION "dylib") else() set (BUILDEM_LD_LIBRARY_VAR "LD_LIBRARY_PATH") @@ -64,7 +68,7 @@ endif() # Initialize environment variables string to use for commands. set (BUILDEM_BIN_PATH ${BUILDEM_BIN_DIR}:$ENV{PATH}) set (BUILDEM_LIB_PATH ${BUILDEM_LIB_DIR}:$ENV{${BUILDEM_LD_LIBRARY_VAR}}) -set (BUILDEM_ENV_STRING env PATH=${BUILDEM_BIN_PATH} ${BUILDEM_LD_LIBRARY_VAR}=${BUILDEM_LIB_PATH} ${BUILDEM_PLATFORM_SPECIFIC_ENV}) +set (BUILDEM_ENV_STRING env PATH=${BUILDEM_BIN_PATH} ${BUILDEM_LD_LIBRARY_VAR}=${BUILDEM_LIB_PATH} ${BUILDEM_PLATFORM_SPECIFIC_ENV} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}) set (BUILDEM_LDFLAGS "-Wl,-rpath,${BUILDEM_LIB_DIR} -L${BUILDEM_LIB_DIR}") # All library builds should go to BPD/lib diff --git a/FindCplex.cmake b/FindCplex.cmake index 63488d1..f28a858 100644 --- a/FindCplex.cmake +++ b/FindCplex.cmake @@ -88,7 +88,9 @@ FIND_LIBRARY(CPLEX_LIBRARY HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix + ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_linux/static_pic #unix ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_osx/static_pic #osx + ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_darwin/static_pic #osx PATHS ENV LIBRARY_PATH #unix ENV LD_LIBRARY_PATH #unix ) @@ -99,7 +101,9 @@ FIND_LIBRARY(CPLEX_ILOCPLEX_LIBRARY HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix + ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_linux/static_pic #unix ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_osx/static_pic #osx + ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_darwin/static_pic #osx PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ) @@ -110,7 +114,9 @@ FIND_LIBRARY(CPLEX_CONCERT_LIBRARY HINTS ${CPLEX_ROOT_DIR}/concert/lib/${CPLEX_WIN_PLATFORM} #windows ${CPLEX_ROOT_DIR}/concert/lib/x86-64_debian4.0_4.1/static_pic #unix ${CPLEX_ROOT_DIR}/concert/lib/x86-64_sles10_4.1/static_pic #unix + ${CPLEX_ROOT_DIR}/concert/lib/x86-64_linux/static_pic #unix ${CPLEX_ROOT_DIR}/concert/lib/x86-64_osx/static_pic #osx + ${CPLEX_ROOT_DIR}/concert/lib/x86-64_darwin/static_pic #osx PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ) @@ -126,7 +132,9 @@ else() cplex HINTS ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_sles10_4.1 #unix ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_debian4.0_4.1 #unix + ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_linux #unix ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_osx #osx + ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_darwin #osx ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ) diff --git a/README.md b/README.md index 1705e61..6245458 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -The BuildEM System +The BuildEM System [![Picture](https://raw.github.com/janelia-flyem/janelia-flyem.github.com/master/images/jfrc_grey_180x40.png)](http://www.janelia.org) ================== The [buildem](https://github.com/janelia-flyem/buildem) repo is a modular CMake-based system that leverages [CMake's ExternalProject](http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html) to simplify and automate a complex build process. Its goal is to allow *simple*, *modular* specification of software dependencies and automate the download, patch, configure, build, and install process. Initially, we are focused on Linux (and occasionally MacOS X) support for the modules, but we hope to integrate patches from Windows users as needed. @@ -311,8 +311,8 @@ To build on the cluster, login to a compute node and set the environment variabl ```bash export FLYEMCLUSTER=/groups/flyem/proj/builds/cluster -export PATH=/usr/local/cmake-2.8.8/bin:/usr/local/git-1.8.1/bin:$FLYEMCLUSTER/bin:$PATH -export LD_LIBRARY_PATH=$FLYEMCLUSTER/lib:$LD_LIBRARY_PATH +export PATH=/usr/local/gcc/bin:/usr/local/cmake-2.8.8/bin:/usr/local/git-1.8.1/bin:$FLYEMCLUSTER/bin:$PATH +export LD_LIBRARY_PATH=/usr/local/gcc/lib64:$FLYEMCLUSTER/lib:$LD_LIBRARY_PATH export PYTHONPATH=$FLYEMCLUSTER/lib/python2.7:$FLYEMCLUSTER/lib/python2.7/site-packages:$FLYEMCLUSTER/lib ``` diff --git a/armadillo.cmake b/armadillo.cmake new file mode 100644 index 0000000..bb9a3ba --- /dev/null +++ b/armadillo.cmake @@ -0,0 +1,48 @@ +# +# Install armadillo from source +# + +if (NOT armadillo_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) +include (PatchSupport) + +include (blas) + + +external_source (armadillo + 4.000.2 + armadillo-4.000.2.tar.gz + b2891c7b59b96337c154c5d961fd40fb + http://downloads.sourceforge.net/project/arma + "FORCE" + ) + +message ("Installing ${armadillo_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${armadillo_NAME} + DEPENDS ${lapack_NAME} ${blas_NAME} + PREFIX ${BUILDEM_DIR} + URL ${armadillo_URL} + URL_MD5 ${armadillo_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND ${BUILDEM_ENV_STRING} ${PATCH_EXE} + ${armadillo_SRC_DIR}/include/armadillo_bits/config.hpp + ${PATCH_DIR}/armadillo.patch + + + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${armadillo_SRC_DIR} + -DBUILD_SHARED_LIBS=ON + -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} + -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} + + BUILD_COMMAND ${BUILDEM_ENV_STRING} make + INSTALL_COMMAND ${BUILDEM_ENV_STRING} make install +) + +set_target_properties(${armadillo_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT armadillo_NAME) diff --git a/blas.cmake b/blas.cmake index f26d0a7..be1e7ff 100644 --- a/blas.cmake +++ b/blas.cmake @@ -1,7 +1,7 @@ # select the desired blas implementation IF(NOT DEFINED WITH_ATLAS) - SET(WITH_ATLAS "OFF") + SET(WITH_ATLAS 1) ENDIF() SET(WITH_ATLAS ${WITH_ATLAS} CACHE BOOL "Use ATLAS (WITH_ATLAS=1) or openBLAS (WITH_ATLAS=0) ?" diff --git a/boost.cmake b/boost.cmake index 6526bdb..25c4ffa 100644 --- a/boost.cmake +++ b/boost.cmake @@ -17,10 +17,10 @@ set (boost_INCLUDE_DIR ${BUILDEM_INCLUDE_DIR}/boost) include_directories (${boost_INCLUDE_DIR}) external_source (boost - 1_51_0 - boost_1_51_0.tar.gz - 6a1f32d902203ac70fbec78af95b3cf8 - http://downloads.sourceforge.net/project/boost/boost/1.51.0) + 1_55_0 + boost_1_55_0.tar.gz + 93780777cfbf999a600f62883bd54b17 + http://sourceforge.net/projects/boost/files/boost/1.55.0/) set (boost_LIBS ${BUILDEM_LIB_DIR}/libboost_thread.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ${BUILDEM_LIB_DIR}/libboost_system.${BUILDEM_PLATFORM_DYLIB_EXTENSION} @@ -28,7 +28,9 @@ set (boost_LIBS ${BUILDEM_LIB_DIR}/libboost_thread.${BUILDEM_PLATFORM_DYLIB_EXTE ${BUILDEM_LIB_DIR}/libboost_python.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ${BUILDEM_LIB_DIR}/libboost_unit_test_framework.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ${BUILDEM_LIB_DIR}/libboost_filesystem.${BUILDEM_PLATFORM_DYLIB_EXTENSION} - ${BUILDEM_LIB_DIR}/libboost_chrono.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ) + ${BUILDEM_LIB_DIR}/libboost_chrono.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_random.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_atomic.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ) # Add layout=tagged param to first boost install to explicitly create -mt libraries # some libraries require. TODO: Possibly shore up all library find paths to only @@ -42,7 +44,7 @@ ExternalProject_Add(${boost_NAME} UPDATE_COMMAND "" PATCH_COMMAND "" CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ./bootstrap.sh - --with-libraries=date_time,filesystem,python,regex,serialization,system,test,thread,program_options,chrono + --with-libraries=date_time,filesystem,python,regex,serialization,system,test,thread,program_options,chrono,atomic,random --with-python=${PYTHON_EXE} --prefix=${BUILDEM_DIR} LDFLAGS=${BUILDEM_LDFLAGS} @@ -59,6 +61,14 @@ ExternalProject_Add(${boost_NAME} -sZLIB_SOURCE=${zlib_SRC_DIR} install ) +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + ExternalProject_Add_Step(${boost_NAME} osx-gcc-fix-config + COMMAND bash ${PATCH_DIR}/boost-osx-gcc-fix-config.sh ${boost_SRC_DIR} ${CMAKE_CXX_COMPILER} + DEPENDERS configure + DEPENDEES patch + ) +endif() + set_target_properties(${boost_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) endif (NOT boost_NAME) diff --git a/boost1550.cmake b/boost1550.cmake new file mode 100644 index 0000000..cfa2379 --- /dev/null +++ b/boost1550.cmake @@ -0,0 +1,64 @@ +# +# Install boost1550 libraries from source +# + +if (NOT boost1550_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (BuildSupport) +include (ExternalSource) + +include (python) +include (zlib) + +set (boost_INCLUDE_DIR ${BUILDEM_INCLUDE_DIR}/boost) +include_directories (${boost_INCLUDE_DIR}) + +external_source (boost1550 + 1_55_0 + boost_1_55_0.tar.gz + 93780777cfbf999a600f62883bd54b17 + http://sourceforge.net/projects/boost/files/boost/1.55.0/) + +set (boost_LIBS ${BUILDEM_LIB_DIR}/libboost_thread.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_system.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_program_options.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_python.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_unit_test_framework.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_filesystem.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + ${BUILDEM_LIB_DIR}/libboost_chrono.${BUILDEM_PLATFORM_DYLIB_EXTENSION} ) + +# Add layout=tagged param to first boost1550 install to explicitly create -mt libraries +# some libraries require. TODO: Possibly shore up all library find paths to only +# allow use of built libs. +message ("Installing ${boost1550_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${boost1550_NAME} + DEPENDS ${python_NAME} ${zlib_NAME} + PREFIX ${BUILDEM_DIR} + URL ${boost1550_URL} + URL_MD5 ${boost1550_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND "" + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ./bootstrap.sh + --with-libraries=date_time,filesystem,python,regex,serialization,system,test,thread,program_options,chrono + --with-python=${PYTHON_EXE} + --prefix=${BUILDEM_DIR} + LDFLAGS=${BUILDEM_LDFLAGS} + CPPFLAGS=-I${BUILDEM_DIR}/include + BUILD_COMMAND ${BUILDEM_ENV_STRING} ./b2 + --layout=tagged + -sNO_BZIP2=1 + -sZLIB_INCLUDE=${BUILDEM_DIR}/include + -sZLIB_SOURCE=${zlib_SRC_DIR} install + BUILD_IN_SOURCE 1 + INSTALL_COMMAND ${BUILDEM_ENV_STRING} ./b2 + -sNO_BZIP2=1 + -sZLIB_INCLUDE=${BUILDEM_DIR}/include + -sZLIB_SOURCE=${zlib_SRC_DIR} install +) + +set_target_properties(${boost1550_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT boost1550_NAME) diff --git a/cplex-shared.cmake b/cplex-shared.cmake index c01c184..cf28ded 100644 --- a/cplex-shared.cmake +++ b/cplex-shared.cmake @@ -25,9 +25,15 @@ set(CPLEX_ILOCPLEX_LIBRARY CPLEX_ILOCPLEX_LIBRARY-NOTFOUND) find_package( Cplex REQUIRED ) if (APPLE) - set(SHARED_CPLEX_COMPILE_FLAGS "-fpic -stdlib=libstdc++") - set(SHARED_CPLEX_LINK_FLAGS_1 "-Wl,-all_load") - set(SHARED_CPLEX_LINK_FLAGS_2 "") + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(SHARED_CPLEX_COMPILE_FLAGS "-fpic -stdlib=libstdc++") + set(SHARED_CPLEX_LINK_FLAGS_1 "-Wl,-all_load") + set(SHARED_CPLEX_LINK_FLAGS_2 "-stdlib=libstdc++") + else() + set(SHARED_CPLEX_COMPILE_FLAGS "-fpic") + set(SHARED_CPLEX_LINK_FLAGS_1 "-Wl,-all_load") + set(SHARED_CPLEX_LINK_FLAGS_2 "") + endif() else() set(SHARED_CPLEX_COMPILE_FLAGS "-shared -fpic") set(SHARED_CPLEX_LINK_FLAGS_1 "-Wl,-whole-archive") diff --git a/cppnetlib.cmake b/cppnetlib.cmake new file mode 100644 index 0000000..db68df8 --- /dev/null +++ b/cppnetlib.cmake @@ -0,0 +1,43 @@ +# +# Install cppnetlib library from source +# + +if (NOT cppnetlib_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) +include (PatchSupport) + +include (boost) + +external_source (cppnetlib + 0.11.0 + cpp-netlib-0.11.0.tar.gz + 6fba4f2f64f19af9f172fd60ad8e76ab + http://commondatastorage.googleapis.com/cpp-netlib-downloads/0.11.0/ + ) + +# set libs properly +set (CPPNETLIB_LIBRARIES ${BUILDEM_DIR}/lib64/libcppnetlib-client-connections.a ${BUILDEM_DIR}/lib64/libcppnetlib-server-parsers.a ${BUILDEM_DIR}/lib64/libcppnetlib-uri.a) + +message ("Installing ${cppnetlib_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${cppnetlib_NAME} + DEPENDS ${boost_NAME} + PREFIX ${BUILDEM_DIR} + URL ${cppnetlib_URL} + URL_MD5 ${cppnetlib_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND "" + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${cppnetlib_SRC_DIR} + -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} + -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} + BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) + INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) install +) + +set_target_properties(${cppnetlib_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT cppnetlib_NAME) diff --git a/dlib.cmake b/dlib.cmake index f20e40f..63f720f 100644 --- a/dlib.cmake +++ b/dlib.cmake @@ -12,10 +12,10 @@ include (BuildSupport) include (PatchSupport) external_source (dlib - 18.3 - dlib-18.3.tar.bz2 - 1ad26ec7bddccf8a605e1edfd0620c65 - http://downloads.sourceforge.net/project/dclib/dlib/v18.3 + 18.10 + dlib-18.10.tar.bz2 + ede77c5a1fb8c249b13987728424be74 + http://downloads.sourceforge.net/project/dclib/dlib/v18.10 FORCE) message ("Installing ${dlib_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") diff --git a/drmaa-python.cmake b/drmaa-python.cmake new file mode 100644 index 0000000..fca6a43 --- /dev/null +++ b/drmaa-python.cmake @@ -0,0 +1,40 @@ +# +# Install drmaa-python library from source +# + +if (NOT drmaa-python_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) + +include (python) +include (setuptools) + +external_source (drmaa-python + 0.5 + drmaa-0.5.tar.gz + 04c7fa199a86ccf20d3b91c8705cb8be + http://drmaa-python.googlecode.com/files/ + ) + +message ("Installing ${drmaa-python_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${drmaa-python_NAME} + DEPENDS ${python_NAME} ${setuptools_NAME} + PREFIX ${BUILDEM_DIR} + URL ${drmaa-python_URL} + URL_MD5 ${drmaa-python_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} setup.py install + BUILD_IN_SOURCE 1 + TEST_COMMAND "" + INSTALL_COMMAND "" +) + +set_target_properties(${drmaa-python_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT drmaa-python_NAME) diff --git a/futures.cmake b/futures.cmake new file mode 100644 index 0000000..b0f64d6 --- /dev/null +++ b/futures.cmake @@ -0,0 +1,41 @@ +# +# Install futures library from source +# + +if (NOT futures_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) + +include (python) +include (setuptools) + +external_source (futures + 2.1.6 + futures-2.1.6.tar.gz + cfab9ac3cd55d6c7ddd0546a9f22f453 + https://pypi.python.org/packages/source/f/futures) + +message ("Installing ${futures_NAME} into ilastik build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${futures_NAME} + DEPENDS ${python_NAME} ${setuptools_NAME} + PREFIX ${BUILDEM_DIR} + URL ${futures_URL} + URL_MD5 ${futures_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} setup.py install + BUILD_IN_SOURCE 1 + TEST_COMMAND "" + INSTALL_COMMAND "" +) + +set_target_properties(${futures_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + + +endif (NOT futures_NAME) + diff --git a/golang.cmake b/golang.cmake index d994b6c..b18240c 100644 --- a/golang.cmake +++ b/golang.cmake @@ -11,10 +11,10 @@ include (ExternalSource) include (BuildSupport) external_source (golang - 1.2 - go1.2.src.tar.gz - c2ace56f6b6413a5c6318b9527a8b763 - http://go.googlecode.com/files) + 1.3 + go1.3.src.tar.gz + 4b66d7249554181c314f139ea78920b1 + http://golang.org/dl) message ("Installing ${golang_NAME} into build area: ${BUILDEM_DIR} ...") ExternalProject_Add(${golang_NAME} diff --git a/h5py.cmake b/h5py.cmake index acfd8ec..15e7b31 100644 --- a/h5py.cmake +++ b/h5py.cmake @@ -9,6 +9,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) include (ExternalProject) include (ExternalSource) include (BuildSupport) +include (PatchSupport) include (python) include (hdf5) @@ -27,7 +28,11 @@ ExternalProject_Add(${h5py_NAME} URL ${h5py_URL} URL_MD5 ${h5py_MD5} UPDATE_COMMAND "" - PATCH_COMMAND "" + PATCH_COMMAND ${BUILDEM_ENV_STRING} ${PATCH_EXE} + # This patch adds a linker flag on linux to allow for packaging executables + ${h5py_SRC_DIR}/setup.py ${PATCH_DIR}/h5py.patch + # do not specify a runtime path for the library, -R flag is unknown to newer GCCs + ${h5py_SRC_DIR}/setup.py ${PATCH_DIR}/h5py-no-runtime.patch CONFIGURE_COMMAND "" BUILD_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} setup.py build --hdf5=${BUILDEM_DIR} diff --git a/ilastik.cmake b/ilastik.cmake index 392c285..651e7a7 100644 --- a/ilastik.cmake +++ b/ilastik.cmake @@ -31,9 +31,12 @@ include (pgmlink) include (scikit-learn) include (nose) include (faulthandler) +include (jsonschema) # Required for the dvid extension. +include (opengm) +include (futures) # select the desired ilastik commit -set(DEFAULT_ILASTIK_VERSION "20131205") +set(DEFAULT_ILASTIK_VERSION 18026ae2efb9e9e04046598cd5fccca3a42bcdaa) # 2014-06-11 IF(NOT DEFINED ILASTIK_VERSION) SET(ILASTIK_VERSION "${DEFAULT_ILASTIK_VERSION}") ENDIF() @@ -43,28 +46,35 @@ SET(ILASTIK_VERSION ${ILASTIK_VERSION} external_git_repo (ilastik ${ILASTIK_VERSION} - https://github.com/janelia-flyem/flyem-ilastik + https://github.com/ilastik/ilastik-meta ilastik) set(lazyflow_SRC_DIR "${ilastik_SRC_DIR}/lazyflow") if("${ILASTIK_VERSION}" STREQUAL "master") - set(ILASTIK_UPDATE_COMMAND git checkout master && git pull origin master && git submodule update --init --recursive && + # If the user's build is old, he might be linked to the janelia-flyem remote + # Force the remote to update from ilastik/ilastik-meta by removing origin and adding it again + set(ILASTIK_UPDATE_COMMAND git remote rm origin && git remote add origin https://github.com/ilastik/ilastik-meta && + git fetch origin && + git checkout master && git pull origin master && git submodule update --init --recursive && cd lazyflow && git checkout master && git pull origin master && git submodule update && cd .. && cd volumina && git checkout master && git pull origin master && cd .. && cd ilastik && git checkout master && git pull origin master && cd ..) else() - set(ILASTIK_UPDATE_COMMAND git fetch && git checkout ${ILASTIK_VERSION} && git submodule update --init --recursive) + # If the user's build is old, he might be linked to the janelia-flyem remote + # Force the remote to update from ilastik/ilastik-meta by removing origin and adding it again + set(ILASTIK_UPDATE_COMMAND git remote rm origin && git remote add origin https://github.com/ilastik/ilastik-meta && + git fetch origin && git checkout ${ILASTIK_VERSION} && git submodule update --init --recursive) endif() message ("Installing ${ilastik_NAME}/${ILASTIK_VERSION} into FlyEM build area: ${BUILDEM_DIR} ...") -set (ilastik_dependencies ${vigra_NAME} ${h5py_NAME} ${psutil_NAME} ${nose_NAME} - ${blist_NAME} ${greenlet_NAME} ${yapsy_NAME} ${faulthandler_NAME} - ${cylemon_NAME} ${scikit-learn_NAME}) +set (ilastik_dependencies ${vigra_NAME} ${h5py_NAME} ${psutil_NAME} ${nose_NAME} ${futures_NAME} + ${blist_NAME} ${greenlet_NAME} ${yapsy_NAME} ${faulthandler_NAME} + ${cylemon_NAME} ${scikit-learn_NAME} ${jsonschema_NAME} ${opengm_NAME} ) if (${build_pgmlink}) # Tracking depends on pgmlink, which depends on CPLEX. @@ -135,6 +145,7 @@ configure_file(${TEMPLATE_DIR}/ilastik_script.template ${BUILDEM_DIR}/bin/ilasti set(LAUNCH_ILASTIK ilastik/ilastik/workflows/pixelClassification/pixelClassificationClusterized.py) configure_file(${TEMPLATE_DIR}/ilastik_script.template ${BUILDEM_DIR}/bin/ilastik_clusterized @ONLY) + set_target_properties(${ilastik_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) endif (NOT ilastik_NAME) diff --git a/jsonschema.cmake b/jsonschema.cmake new file mode 100644 index 0000000..d2339b8 --- /dev/null +++ b/jsonschema.cmake @@ -0,0 +1,41 @@ +# +# Install jsonschema library from source +# + +if (NOT jsonschema_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) + +include (python) +include (setuptools) + +external_source (jsonschema + 2.3.0 + jsonschema-2.3.0.tar.gz + 410075e1969a9ec1838b5a6e1313c32b + https://pypi.python.org/packages/source/j/jsonschema) + +message ("Installing ${jsonschema_NAME} into ilastik build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${jsonschema_NAME} + DEPENDS ${python_NAME} ${setuptools_NAME} + PREFIX ${BUILDEM_DIR} + URL ${jsonschema_URL} + URL_MD5 ${jsonschema_MD5} + UPDATE_COMMAND "" + PATCH_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} setup.py install + BUILD_IN_SOURCE 1 + TEST_COMMAND "" + INSTALL_COMMAND "" +) + +set_target_properties(${jsonschema_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + + +endif (NOT jsonschema_NAME) + diff --git a/libdvidcpp.cmake b/libdvidcpp.cmake new file mode 100644 index 0000000..074b32f --- /dev/null +++ b/libdvidcpp.cmake @@ -0,0 +1,43 @@ +# +# Install libdvidcpp library from source +# +if (NOT libdvidcpp_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) + +include (cppnetlib) + +external_git_repo (libdvidcpp + HEAD + http://github.com/janelia-flyem/libdvidcpp) + +# set libs and include +set (LIBDVIDCPP_LIBRARIES ${BUILDEM_DIR}/lib/libdvidcpp.a) +set (LIBDVIDCPP_INCLUDE_DIRS ${BUILDEM_DIR}/include/libdvid) + +message ("Installing ${libdvidcpp_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${libdvidcpp_NAME} + DEPENDS ${cppnetlib_NAME} + PREFIX ${BUILDEM_DIR} + GIT_REPOSITORY ${libdvidcpp_URL} + UPDATE_COMMAND "" + PATCH_COMMAND "" + LIST_SEPARATOR ^^ + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${libdvidcpp_SRC_DIR} + -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} + -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} + -DCMAKE_EXE_LINKER_FLAGS=${BUILDEM_LDFLAGS} + -DDEPENDENCY_SEARCH_PREFIX=${BUILDEM_DIR} + -DCMAKE_CXX_FLAGS_RELEASE=-O3 + -DCMAKE_CXX_FLAGS_DEBUG="${CMAKE_CXX_FLAGS_DEBUG}" + BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) + INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) install +) + +set_target_properties(${libdvidcpp_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT libdvidcpp_NAME) diff --git a/libtiff.cmake b/libtiff.cmake index 3575da9..4725163 100644 --- a/libtiff.cmake +++ b/libtiff.cmake @@ -38,6 +38,8 @@ ExternalProject_Add(${libtiff_NAME} --prefix=${BUILDEM_DIR} LDFLAGS=${BUILDEM_LDFLAGS} CPPFLAGS=-I${BUILDEM_DIR}/include + --disable-lzma # Don't accidentally link against system lzma .so files. + # vigra and scikit-image don't support lzma tiff compression, so there's no need for it. --disable-jbig BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) BUILD_IN_SOURCE 1 diff --git a/libxml2.cmake b/libxml2.cmake index 1fe8022..5cf43fe 100644 --- a/libxml2.cmake +++ b/libxml2.cmake @@ -32,6 +32,7 @@ if (NOT libxml2_NAME) --prefix=${BUILDEM_DIR} --enable-shared --without-python + --without-lzma --with-sax1 LDFLAGS=${BUILDEM_LDFLAGS} CPPFLAGS=-I${BUILDEM_DIR}/include diff --git a/mlpack.cmake b/mlpack.cmake new file mode 100644 index 0000000..560124f --- /dev/null +++ b/mlpack.cmake @@ -0,0 +1,50 @@ +# +# Install mlpack from source +# + +if (NOT mlpack_NAME) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +include (ExternalProject) +include (ExternalSource) +include (BuildSupport) +include (PatchSupport) + +include (armadillo) +include (boost) +include (libxml2) + + +external_source (mlpack + 1.0.8 + mlpack-1.0.8.tar.gz + 0331e12f2485b9d5d39c9d9dea618108 + http://www.mlpack.org/files + "FORCE") + +message ("Installing ${mlpack_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") +ExternalProject_Add(${mlpack_NAME} + DEPENDS ${armadillo_NAME} ${boost_NAME} ${libxml2_NAME} + PREFIX ${BUILDEM_DIR} + URL ${mlpack_URL} + URL_MD5 ${mlpack_MD5} + UPDATE_COMMAND "" + + + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${mlpack_SRC_DIR} + -DBUILD_SHARED_LIBS=ON + -DCMAKE_CXX_FLAGS=${BUILDEM_ADDITIONAL_CXX_FLAGS} + -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} + -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} + -DLIBXML2_INCLUDE_DIR=${BUILDEM_DIR}/include/libxml2 + + + BUILD_COMMAND ${BUILDEM_ENV_STRING} make + INSTALL_COMMAND ${BUILDEM_ENV_STRING} make install + # TEST_COMMAND ${BUILDEM_ENV_STRING} make test +) + +set_target_properties(${mlpack_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) + +endif (NOT mlpack_NAME) diff --git a/opengm.cmake b/opengm.cmake index d230daf..6741c35 100644 --- a/opengm.cmake +++ b/opengm.cmake @@ -11,28 +11,42 @@ include (ExternalSource) include (BuildSupport) include (PatchSupport) +include (boost) +include (hdf5) +include (python) + external_git_repo (opengm 576dc472324a5dce40b7e9bb4c270afbd9b3da37 https://github.com/opengm/opengm) if(CPLEX_ROOT_DIR) set(CMAKE_CPLEX_ROOT_DIR "-DCPLEX_ROOT_DIR=${CPLEX_ROOT_DIR}") + set(WITH_CPLEX ON) +else() + set(WITH_CPLEX OFF) endif() message ("Installing ${opengm_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") ExternalProject_Add(${opengm_NAME} - DEPENDS ${boost_NAME} + DEPENDS ${boost_NAME} ${hdf5_NAME} ${python_NAME} PREFIX ${BUILDEM_DIR} GIT_REPOSITORY ${opengm_URL} GIT_TAG ${opengm_TAG} UPDATE_COMMAND "" - PATCH_COMMAND "" + # This patch adds the BUILD_PYTHON_DOCS setting, used to avoid building the sphinx documentation. + # Future versions of OpenGM will probably not need this patch. + PATCH_COMMAND ${BUILDEM_ENV_STRING} ${PATCH_EXE} + ${opengm_SRC_DIR}/src/interfaces/python/CMakeLists.txt ${PATCH_DIR}/opengm.patch CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${opengm_SRC_DIR} -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} - -DWITH_CPLEX=ON + -DWITH_CPLEX=${WITH_CPLEX} -DWITH_BOOST=ON + -DWITH_HDF5=ON + -DBUILD_PYTHON_WRAPPER=ON + -DBUILD_PYTHON_DOCS=OFF + -DWITH_OPENMP=OFF # Mac doesn't support OpenMP ${CMAKE_CPLEX_ROOT_DIR} BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) diff --git a/openssl.cmake b/openssl.cmake index 5637396..c08cf0d 100644 --- a/openssl.cmake +++ b/openssl.cmake @@ -16,7 +16,8 @@ external_source (openssl 1.0.1c openssl-1.0.1c.tar.gz ae412727c8c15b67880aef7bd2999b2e - http://www.openssl.org/source) + http://www.openssl.org/source + FORCE) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # On Mac, 64-bit builds must be manually requested. @@ -44,7 +45,7 @@ ExternalProject_Add(${openssl_NAME} BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) -j1 # Parallel builds on openssl are thoroughly broken. Force -j1 BUILD_IN_SOURCE 1 TEST_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) -j1 test - INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) -j1 install + INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) -j1 install_sw ) set_target_properties(${openssl_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) diff --git a/patches/armadillo.patch b/patches/armadillo.patch new file mode 100644 index 0000000..4b171ee --- /dev/null +++ b/patches/armadillo.patch @@ -0,0 +1,28 @@ +--- config.hpp 2014-01-03 03:08:18.000000000 +0100 ++++ config_new.hpp 2014-01-22 16:05:36.367604953 +0100 +@@ -9,14 +9,14 @@ + + + #if !defined(ARMA_USE_LAPACK) +-// #define ARMA_USE_LAPACK ++#define ARMA_USE_LAPACK + //// Uncomment the above line if you have LAPACK or a high-speed replacement for LAPACK, + //// such as Intel MKL, AMD ACML, or the Accelerate framework. + //// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse. + #endif + + #if !defined(ARMA_USE_BLAS) +-// #define ARMA_USE_BLAS ++#define ARMA_USE_BLAS + //// Uncomment the above line if you have BLAS or a high-speed replacement for BLAS, + //// such as OpenBLAS, GotoBLAS, Intel MKL, AMD ACML, or the Accelerate framework. + //// BLAS is used for matrix multiplication. +@@ -29,7 +29,7 @@ + //// ARPACK is required for eigendecompositions of sparse matrices, eg. eigs_sym() + #endif + +-// #define ARMA_USE_WRAPPER ++#define ARMA_USE_WRAPPER + //// Comment out the above line if you're getting linking errors when compiling your programs, + //// or if you prefer to directly link with LAPACK, BLAS or ARPACK. + //// You will then need to link your programs directly with -llapack -lblas instead of -larmadillo diff --git a/patches/boost-osx-gcc-fix-config.sh b/patches/boost-osx-gcc-fix-config.sh new file mode 100644 index 0000000..7303c70 --- /dev/null +++ b/patches/boost-osx-gcc-fix-config.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +BOOST_SRC_DIR=$1 +CXX_COMPILER=$2 +CXX_COMPILER_VERSION=`$2 -dumpversion | sed -e 's/\.[0-9]$//g'` + +echo "Configuring Boost to compile with ${CXX_COMPILER}" + +echo "" >> ${BOOST_SRC_DIR}/tools/build/v2/user-config.jam +echo "using darwin : ${CXX_COMPILER_VERSION} : ${CXX_COMPILER} ;" >> ${BOOST_SRC_DIR}/tools/build/v2/user-config.jam +echo "" >> ${BOOST_SRC_DIR}/tools/build/v2/user-config.jam \ No newline at end of file diff --git a/patches/cylemon.patch b/patches/cylemon.patch deleted file mode 100644 index e89d88c..0000000 --- a/patches/cylemon.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- setup.py 2013-02-20 14:41:10.879030739 -0500 -+++ setup.py.fixed 2013-02-20 15:05:47.803048274 -0500 -@@ -40,8 +40,7 @@ - sources=["cylemon/segmentation.pyx"], - libraries = ["stdc++", "emon", "gomp"], - language='C++', -- extra_compile_args=['-O3', '-fopenmp'], -- include_dirs = ['/usr/local/include', os.getenv("HOME")+"/inst/include"]) -+ extra_compile_args=['-O3', '-fopenmp']) - ] - ) - except Exception as e: diff --git a/patches/h5py-no-runtime.patch b/patches/h5py-no-runtime.patch new file mode 100644 index 0000000..2563c68 --- /dev/null +++ b/patches/h5py-no-runtime.patch @@ -0,0 +1,12 @@ +--- setup_orig.py 2014-07-08 10:27:37.801713517 +0200 ++++ setup.py 2014-07-08 10:27:49.861713854 +0200 +@@ -71,9 +71,6 @@ + if sys.platform == 'darwin': + COMPILER_SETTINGS['extra_link_args'] = ['-Xlinker','-headerpad_max_install_names'] + +- COMPILER_SETTINGS['runtime_library_dirs'] = [op.abspath(x) for x in COMPILER_SETTINGS['library_dirs']] +- +- + MODULES = ['defs','_errors','_objects','_proxy', 'h5fd', 'h5z', + 'h5','h5i','h5r','utils', + '_conv', 'h5t','h5s', diff --git a/patches/h5py.patch b/patches/h5py.patch new file mode 100644 index 0000000..495d86e --- /dev/null +++ b/patches/h5py.patch @@ -0,0 +1,15 @@ +--- setup.py 2013-04-22 21:51:24.000000000 +0200 ++++ setup_fixed.py 2014-07-03 08:47:44.000000000 +0200 +@@ -68,8 +68,12 @@ + elif sys.platform == 'darwin': + COMPILER_SETTINGS['include_dirs'] += ['/opt/local/include'] + COMPILER_SETTINGS['library_dirs'] += ['/opt/local/lib'] ++ if sys.platform == 'darwin': ++ COMPILER_SETTINGS['extra_link_args'] = ['-Xlinker','-headerpad_max_install_names'] ++ + COMPILER_SETTINGS['runtime_library_dirs'] = [op.abspath(x) for x in COMPILER_SETTINGS['library_dirs']] + ++ + MODULES = ['defs','_errors','_objects','_proxy', 'h5fd', 'h5z', + 'h5','h5i','h5r','utils', + '_conv', 'h5t','h5s', diff --git a/patches/opengm.patch b/patches/opengm.patch new file mode 100644 index 0000000..77ce090 --- /dev/null +++ b/patches/opengm.patch @@ -0,0 +1,89 @@ +--- src/interfaces/python/CMakeLists.txt 2014-05-28 16:03:43.000000000 -0400 ++++ src/interfaces/python/CMakeLists.txt2 2014-05-28 16:03:38.000000000 -0400 +@@ -16,47 +16,50 @@ + + message(STATUS ${OPENGM_PYTHON_BUILD_MODULE_DIR}) + +-find_package(SPHINX) +-if(SPHINX_FOUND) +- message(STATUS "FOUND_SPHINX") ++set( BUILD_PYTHON_DOCS 0 CACHE BOOL "Build the Python documentation with Sphinx" ) + +- if(NOT DEFINED SPHINX_THEME) +- set(SPHINX_THEME default) ++if(BUILD_PYTHON_DOCS) ++ find_package(SPHINX) ++ if(SPHINX_FOUND) ++ message(STATUS "FOUND_SPHINX") ++ ++ if(NOT DEFINED SPHINX_THEME) ++ set(SPHINX_THEME default) ++ endif() ++ if(NOT DEFINED SPHINX_THEME_DIR) ++ set(SPHINX_THEME_DIR) ++ endif() ++ # configured documentation tools and intermediate build results ++ set(BINARY_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/_build") ++ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_build) ++ # Sphinx cache with pickled ReST documents ++ set(SPHINX_CACHE_DIR "${CMAKE_CURRENT_BINARY_DIR}/opengm/_doctrees") ++ # HTML output directory ++ set(SPHINX_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/opengm/html") ++ configure_file( ++ "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source/conf.py.in" ++ #"${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source/conf.py" ++ "${BINARY_BUILD_DIR}/conf.py" ++ @ONLY) ++ add_custom_target(python-doc ALL ++ ${SPHINX_EXECUTABLE} ++ -q -b html ++ #-c "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source" ++ -c "${BINARY_BUILD_DIR}" ++ -d "${SPHINX_CACHE_DIR}" ++ "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source" ++ "${SPHINX_HTML_DIR}" ++ COMMENT "Building HTML documentation with Sphinx") ++ add_dependencies(python-doc _opengmcore ) ++ add_dependencies(python-doc _inference ) ++ add_dependencies(python-doc _hdf5 ) ++ ++ else() ++ message(STATUS "CANNOT Building HTML documentation with Sphinx , did not find Sphinx") + endif() +- if(NOT DEFINED SPHINX_THEME_DIR) +- set(SPHINX_THEME_DIR) +- endif() +- # configured documentation tools and intermediate build results +- set(BINARY_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/_build") +- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_build) +- # Sphinx cache with pickled ReST documents +- set(SPHINX_CACHE_DIR "${CMAKE_CURRENT_BINARY_DIR}/opengm/_doctrees") +- # HTML output directory +- set(SPHINX_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/opengm/html") +- configure_file( +- "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source/conf.py.in" +- #"${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source/conf.py" +- "${BINARY_BUILD_DIR}/conf.py" +- @ONLY) +- add_custom_target(python-doc ALL +- ${SPHINX_EXECUTABLE} +- -q -b html +- #-c "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source" +- -c "${BINARY_BUILD_DIR}" +- -d "${SPHINX_CACHE_DIR}" +- "${CMAKE_CURRENT_SOURCE_DIR}/docsrc/source" +- "${SPHINX_HTML_DIR}" +- COMMENT "Building HTML documentation with Sphinx") +- add_dependencies(python-doc _opengmcore ) +- add_dependencies(python-doc _inference ) +- add_dependencies(python-doc _hdf5 ) +- +-else() +- message(STATUS "CANNOT Building HTML documentation with Sphinx , did not find Sphinx") + endif() + + + + + +- diff --git a/patches/python-no-osx-launcher.patch b/patches/python-no-osx-launcher.patch new file mode 100644 index 0000000..938aea0 --- /dev/null +++ b/patches/python-no-osx-launcher.patch @@ -0,0 +1,20 @@ +--- Makefile.in_orig 2014-07-07 13:03:29.000000000 +0200 ++++ Makefile.in 2014-07-07 13:04:10.000000000 +0200 +@@ -144,7 +144,7 @@ + $(CC) $(LDFLAGS) -DPYTHONFRAMEWORK='"$(PYTHONFRAMEWORK)"' -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK) + + install_PythonLauncher: +- cd PythonLauncher && make install DESTDIR=$(DESTDIR) ++ #cd PythonLauncher && make install DESTDIR=$(DESTDIR) + + install_Python: + @for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \ +@@ -299,7 +299,7 @@ + + clean: + rm pythonw +- cd PythonLauncher && make clean ++ #cd PythonLauncher && make clean + cd IDLE && make clean + + Makefile: $(srcdir)/Makefile.in ../config.status diff --git a/patches/qt4-create-symlinks.sh b/patches/qt4-create-symlinks.sh new file mode 100644 index 0000000..5cfdab7 --- /dev/null +++ b/patches/qt4-create-symlinks.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +BUILDEM_DIR=$1 +FRAMEWORKS=$(ls ${BUILDEM_DIR}/lib | grep framework$) + +for i in ${FRAMEWORKS} +do + ln -s ${BUILDEM_DIR}/lib/$i/Headers ${BUILDEM_DIR}/include/`echo \$i | sed 's/.framework//g'` +done \ No newline at end of file diff --git a/patches/qt4-osx-draw-ellipse.patch b/patches/qt4-osx-draw-ellipse.patch new file mode 100644 index 0000000..f108994 --- /dev/null +++ b/patches/qt4-osx-draw-ellipse.patch @@ -0,0 +1,19 @@ +diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp +index 47e51b4..92822a9 100644 +--- a/src/gui/painting/qpaintengine_mac.cpp ++++ b/src/gui/painting/qpaintengine_mac.cpp +@@ -914,8 +914,14 @@ QCoreGraphicsPaintEngine::drawEllipse(const QRectF &r) + if (state->compositionMode() == QPainter::CompositionMode_Destination) + return; + ++ // only call CGPathAddArc if the positions x and y are valid ++ CGRect rect = CGRectMake(r.x(), r.y(), r.width(), r.height()); ++ if (CGRectIsEmpty(rect) || CGRectIsInfinite(rect)) ++ return; ++ + CGMutablePathRef path = CGPathCreateMutable(); + CGAffineTransform transform = CGAffineTransformMakeScale(r.width() / r.height(), 1); ++ + CGPathAddArc(path, &transform,(r.x() + (r.width() / 2)) / (r.width() / r.height()), + r.y() + (r.height() / 2), r.height() / 2, 0, (2 * M_PI), false); + d->drawPath(QCoreGraphicsPaintEnginePrivate::CGFill | QCoreGraphicsPaintEnginePrivate::CGStroke, diff --git a/patches/qt4-osx-mavericks-configure.patch b/patches/qt4-osx-mavericks-configure.patch new file mode 100644 index 0000000..9cffd44 --- /dev/null +++ b/patches/qt4-osx-mavericks-configure.patch @@ -0,0 +1,21 @@ +--- ilastik_build_dir_2/src/qt4-git/configure 2014-04-11 17:46:22.000000000 -0400 ++++ ilastik_build_dir/src/qt4-git/configure 2014-04-11 17:31:32.000000000 -0400 +@@ -7993,10 +7993,14 @@ + QMakeVar add QMAKE_OBJECTIVE_CFLAGS_PPC "-arch ppc -Xarch_ppc -mmacosx-version-min=10.4" + fi + if echo "$CFG_MAC_ARCHS" | grep '\' > /dev/null 2>&1; then +- QMakeVar add QMAKE_CFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" +- QMakeVar add QMAKE_CXXFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" +- QMakeVar add QMAKE_LFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" +- QMakeVar add QMAKE_OBJECTIVE_CFLAGS_X86_64 "-arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5" ++# QMakeVar add QMAKE_CFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" ++# QMakeVar add QMAKE_CXXFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" ++# QMakeVar add QMAKE_LFLAGS "-Xarch_x86_64 -mmacosx-version-min=10.5" ++# QMakeVar add QMAKE_OBJECTIVE_CFLAGS_X86_64 "-arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5" ++ QMakeVar add QMAKE_CFLAGS "-mmacosx-version-min=10.5" ++ QMakeVar add QMAKE_CXXFLAGS "-mmacosx-version-min=10.5" ++ QMakeVar add QMAKE_LFLAGS "-mmacosx-version-min=10.5" ++ QMakeVar add QMAKE_OBJECTIVE_CFLAGS_X86_64 "-arch x86_64 -mmacosx-version-min=10.5" + fi + if echo "$CFG_MAC_ARCHS" | grep '\' > /dev/null 2>&1; then + QMakeVar add QMAKE_CFLAGS "-Xarch_ppc64 -mmacosx-version-min=10.5" diff --git a/patches/qt4-osx-mavericks-gui-pro.patch b/patches/qt4-osx-mavericks-gui-pro.patch new file mode 100644 index 0000000..109e88a --- /dev/null +++ b/patches/qt4-osx-mavericks-gui-pro.patch @@ -0,0 +1,77 @@ +--- ilastik_build_dir_2/src/qt4-git/src/gui/gui.pro 2014-04-11 17:46:26.000000000 -0400 ++++ ilastik_build_dir/src/qt4-git/src/gui/gui.pro 2014-04-11 17:31:23.000000000 -0400 +@@ -95,8 +95,9 @@ + mmx_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- mmx_compiler.commands += -Xarch_i386 -mmmx +- mmx_compiler.commands += -Xarch_x86_64 -mmmx ++# mmx_compiler.commands += -Xarch_i386 -mmmx ++# mmx_compiler.commands += -Xarch_x86_64 -mmmx ++ mmx_compiler.commands += -mmmx + } else { + mmx_compiler.commands += -mmmx + } +@@ -114,8 +115,9 @@ + mmx3dnow_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- mmx3dnow_compiler.commands += -Xarch_i386 -m3dnow -Xarch_i386 -mmmx +- mmx3dnow_compiler.commands += -Xarch_x86_64 -m3dnow -Xarch_x86_64 -mmmx ++# mmx3dnow_compiler.commands += -Xarch_i386 -m3dnow -Xarch_i386 -mmmx ++# mmx3dnow_compiler.commands += -Xarch_x86_64 -m3dnow -Xarch_x86_64 -mmmx ++ mmx3dnow_compiler.commands += -m3dnow -mmmx + } else { + mmx3dnow_compiler.commands += -m3dnow -mmmx + } +@@ -132,8 +134,9 @@ + sse3dnow_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- sse3dnow_compiler.commands += -Xarch_i386 -m3dnow -Xarch_i386 -msse +- sse3dnow_compiler.commands += -Xarch_x86_64 -m3dnow -Xarch_x86_64 -msse ++# sse3dnow_compiler.commands += -Xarch_i386 -m3dnow -Xarch_i386 -msse ++# sse3dnow_compiler.commands += -Xarch_x86_64 -m3dnow -Xarch_x86_64 -msse ++ sse3dnow_compiler.commands += -m3dnow -msse + } else { + sse3dnow_compiler.commands += -m3dnow -msse + } +@@ -152,8 +155,10 @@ + sse_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- sse_compiler.commands += -Xarch_i386 -msse +- sse_compiler.commands += -Xarch_x86_64 -msse ++# sse_compiler.commands += -Xarch_i386 -msse ++# sse_compiler.commands += -Xarch_x86_64 -msse ++ sse_compiler.commands += -msse ++ sse_compiler.commands += -msse + } else { + sse_compiler.commands += -msse + } +@@ -171,8 +176,10 @@ + sse2_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- sse2_compiler.commands += -Xarch_i386 -msse2 +- sse2_compiler.commands += -Xarch_x86_64 -msse2 ++# sse2_compiler.commands += -Xarch_i386 -msse2 ++# sse2_compiler.commands += -Xarch_x86_64 -msse2 ++ sse2_compiler.commands += -msse2 ++ sse2_compiler.commands += -msse2 + } else { + sse2_compiler.commands += -msse2 + } +@@ -190,8 +197,10 @@ + ssse3_compiler.commands = $$QMAKE_CXX -c -Winline + + mac { +- ssse3_compiler.commands += -Xarch_i386 -mssse3 +- ssse3_compiler.commands += -Xarch_x86_64 -mssse3 ++# ssse3_compiler.commands += -Xarch_i386 -mssse3 ++# ssse3_compiler.commands += -Xarch_x86_64 -mssse3 ++ ssse3_compiler.commands += -mssse3 ++ ssse3_compiler.commands += -mssse3 + } else { + ssse3_compiler.commands += -mssse3 + } diff --git a/patches/vtk-gcc-osx-pascal-strings.patch b/patches/vtk-gcc-osx-pascal-strings.patch new file mode 100644 index 0000000..becaa93 --- /dev/null +++ b/patches/vtk-gcc-osx-pascal-strings.patch @@ -0,0 +1,11 @@ +--- CMakeLists_orig.txt 2014-07-07 14:45:52.000000000 +0200 ++++ CMakeLists.txt 2014-07-07 14:46:14.000000000 +0200 +@@ -117,7 +117,7 @@ + # + IF (APPLE) + IF(CMAKE_COMPILER_IS_GNUCXX) +- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -fpascal-strings") ++ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated") + ENDIF(CMAKE_COMPILER_IS_GNUCXX) + ENDIF (APPLE) + diff --git a/pgmlink.cmake b/pgmlink.cmake index 5a79ad9..fce0945 100644 --- a/pgmlink.cmake +++ b/pgmlink.cmake @@ -9,7 +9,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) include (ExternalProject) include (ExternalSource) include (BuildSupport) -include (PatchSupport) +#include (PatchSupport) if(CPLEX_ROOT_DIR) set(CMAKE_CPLEX_ROOT_DIR "-DCPLEX_ROOT_DIR=${CPLEX_ROOT_DIR}") @@ -23,39 +23,45 @@ if (NOT CMAKE_CPLEX_ROOT_DIR) else() set(build_pgmlink 1) + include (python) include (ann) include (lemon) include (vigra) include (boost) include (opengm) include (dlib) - include (python) + include (mlpack) + include (numpy) + include (cplex-shared) external_git_repo (pgmlink - 364bef9a809fc533fff292c99d1c8eb489a3c591 - https://github.com/ilastik/pgmlink) + 7a0c8d4f54e9a4066991829fb52b411a02914666 + https://github.com/martinsch/pgmlink) message ("Installing ${pgmlink_NAME} into FlyEM build aread: ${BUILDEM_DIR} ...") ExternalProject_Add(${pgmlink_NAME} - DEPENDS ${ann_NAME} ${lemon_NAME} ${vigra_NAME} ${boost_NAME} ${opengm_NAME} + DEPENDS ${ann_NAME} ${lemon_NAME} ${vigra_NAME} ${boost_NAME} ${opengm_NAME} ${numpy_NAME} ${cplex-shared} ${ilocplex-shared} ${concert-shared} - ${dlib_NAME} + ${dlib_NAME} ${mlpack_NAME} PREFIX ${BUILDEM_DIR} GIT_REPOSITORY ${pgmlink_URL} GIT_TAG ${pgmlink_TAG} UPDATE_COMMAND "" PATCH_COMMAND "" - CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${pgmlink_SRC_DIR} -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} + -DBUILD_SHARED_LIBS=ON + -DCMAKE_EXE_LINKER_FLAGS=${BUILDEM_ADDITIONAL_CXX_FLAGS} + -DCMAKE_SHARED_LINKER_FLAGS=${BUILDEM_ADDITIONAL_CXX_FLAGS} -DWITH_PYTHON=ON -DWITH_TESTS=ON -DWITH_CHECKED_STL=OFF -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_PATH} -DPYTHON_LIBRARY=${PYTHON_LIBRARY_FILE} + -DVigranumpy_DIR="${BUILDEM_DIR}/lib/vigranumpy" ${CMAKE_CPLEX_ROOT_DIR} BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) diff --git a/psutil.cmake b/psutil.cmake index 338bd50..faad4ff 100644 --- a/psutil.cmake +++ b/psutil.cmake @@ -13,10 +13,12 @@ include (BuildSupport) include (python) external_source (psutil - 0.6.1 - psutil-0.6.1.tar.gz - 3cfcbfb8525f6e4c70110e44a85e907e - http://psutil.googlecode.com/files) + 2.1.1 + psutil-2.1.1.tar.gz + 72a6b15d589fab11f6ca245b775bc3c6 + https://pypi.python.org/packages/source/p/psutil + FORCE +) message ("Installing ${psutil_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") ExternalProject_Add(${psutil_NAME} diff --git a/pyqt4.cmake b/pyqt4.cmake index 46b360e..6b25b8e 100644 --- a/pyqt4.cmake +++ b/pyqt4.cmake @@ -49,7 +49,7 @@ ExternalProject_Add(${pyqt4_NAME} URL_MD5 ${pyqt4_MD5} UPDATE_COMMAND "" PATCH_COMMAND "" - CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} ${pyqt4_SRC_DIR}/configure.py + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} PYTHONPATH=${BUILDEM_PYTHONPATH} ${PYTHON_EXE} ${pyqt4_SRC_DIR}/configure.py --confirm-license --verbose -q "${BUILDEM_DIR}/bin/qmake" diff --git a/python.cmake b/python.cmake index 0e19b47..659276e 100644 --- a/python.cmake +++ b/python.cmake @@ -12,6 +12,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) include (ExternalProject) include (ExternalSource) include (BuildSupport) +include (PatchSupport) include (zlib) include (openssl) # without openssl, hashlib might have missing encryption methods @@ -53,7 +54,10 @@ ExternalProject_Add(${python_NAME} URL ${python_URL} URL_MD5 ${python_MD5} UPDATE_COMMAND "" - PATCH_COMMAND "" + PATCH_COMMAND ${BUILDEM_ENV_STRING} ${PATCH_EXE} + # When building python 2.7.6 on OSX 10.9 with GCC, building the launcher fails due to some 10.9 SDK specific headers not present in GCC. + # As we do not need the launcher anyway, refrain from building it. + ${python_SRC_DIR}/Mac/Makefile.in ${PATCH_DIR}/python-no-osx-launcher.patch CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${python_SRC_DIR}/configure --prefix=${BUILDEM_DIR} ${PYTHON_BINARY_TYPE_ARG} @@ -77,7 +81,7 @@ set (BUILDEM_BIN_PATH ${PYTHON_PREFIX}/bin:${BUILDEM_BIN_PATH}) # Append our revised bin PATH variable to ENV string. # (This means that PATH will be specified TWICE in the env string, but the second one takes precedence.) -set (BUILDEM_ENV_STRING env ${BUILDEM_ENV_STRING} PATH=${BUILDEM_BIN_PATH}) +set (BUILDEM_ENV_STRING env ${BUILDEM_ENV_STRING} PATH=${BUILDEM_BIN_PATH} PYTHONPATH=${BUILDEM_PYTHONPATH}) set_target_properties(${python_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) diff --git a/qimage2ndarray.cmake b/qimage2ndarray.cmake index 6d3ea1b..2400ea8 100644 --- a/qimage2ndarray.cmake +++ b/qimage2ndarray.cmake @@ -32,8 +32,8 @@ ExternalProject_Add(${qimage2ndarray_NAME} PATCH_COMMAND "" LIST_SEPARATOR ^^ CONFIGURE_COMMAND "" - BUILD_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} ${qimage2ndarray_SRC_DIR}/setup.py build - INSTALL_COMMAND ${BUILDEM_ENV_STRING} ${PYTHON_EXE} ${qimage2ndarray_SRC_DIR}/setup.py install --prefix=${PYTHON_PREFIX} + BUILD_COMMAND ${BUILDEM_ENV_STRING} PYTHONPATH=${BUILDEM_PYTHONPATH} ${PYTHON_EXE} ${qimage2ndarray_SRC_DIR}/setup.py build + INSTALL_COMMAND ${BUILDEM_ENV_STRING} PYTHONPATH=${BUILDEM_PYTHONPATH} ${PYTHON_EXE} ${qimage2ndarray_SRC_DIR}/setup.py install --prefix=${PYTHON_PREFIX} BUILD_IN_SOURCE 1 ) diff --git a/qt4.cmake b/qt4.cmake index 7695b2b..2709550 100644 --- a/qt4.cmake +++ b/qt4.cmake @@ -9,7 +9,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) include (ExternalProject) include (ExternalSource) include (BuildSupport) -#include (PatchSupport) +include (PatchSupport) # Using PATCH_EXE so this include should be here. include(zlib) include(libpng) @@ -17,11 +17,9 @@ include(libjpeg) include(libtiff) include(freetype2) -external_source (qt4 - 4.8.3 - qt-everywhere-opensource-src-4.8.3.tar.gz - a663b6c875f8d7caa8ac9c30e4a4ec3b - http://download.qt-project.org/official_releases/qt/4.8/4.8.3) +external_git_repo(qt4 + 4.8 #682ed9df439481e1f8e8651c4aa06f1b455a2080 + https://github.com/qtproject/qt) message ("Installing ${qt4_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") @@ -42,11 +40,17 @@ endif() ExternalProject_Add(${qt4_NAME} DEPENDS ${freetype2_NAME} ${zlib_NAME} ${libpng_NAME} ${libjpeg_NAME} ${libtiff_NAME} PREFIX ${BUILDEM_DIR} - URL ${qt4_URL} - URL_MD5 ${qt4_MD5} + GIT_REPOSITORY ${qt4_URL} + GIT_TAG 4.8 UPDATE_COMMAND "" - PATCH_COMMAND "" - CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} echo "yes" | ${qt4_SRC_DIR}/configure # pipe "yes" to stdin to accept the license. + PATCH_COMMAND ${BUILDEM_ENV_STRING} ${PATCH_EXE} + # This patch fixes ilastik crashes on OSX due to an ill-shaped ellipse + ${qt4_SRC_DIR}/src/gui/painting/qpaintengine_mac.cpp ${PATCH_DIR}/qt4-osx-draw-ellipse.patch + # This patch fixes removes Xarch_x86_64 flags from the Qt4 configure file. These flags are not appropriate for Mavericks and cause Qt4 to fail building. + ${qt4_SRC_DIR}/configure ${PATCH_DIR}/qt4-osx-mavericks-configure.patch + # This patch fixes removes Xarch_x86_64 flags from the Qt4 gui.pro file. These flags are not appropriate for Mavericks and cause Qt4 to fail building. + ${qt4_SRC_DIR}/src/gui/gui.pro ${PATCH_DIR}/qt4-osx-mavericks-gui-pro.patch + CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} env CXXFLAGS=${BUILDEM_ADDITIONAL_CXX_FLAGS} echo "yes" | ${qt4_SRC_DIR}/configure # pipe "yes" to stdin to accept the license. --prefix=${BUILDEM_DIR} -opensource -arch x86_64 @@ -82,15 +86,15 @@ ExternalProject_Add(${qt4_NAME} -no-dbus -no-cups -no-nis + #-no-accessibility # Must include accessibility because PySide tries to build wrappers for it. -release -shared - -no-accessibility -fontconfig -system-zlib -system-libpng -system-libjpeg -system-libtiff - -I${BUILDEM_DIR}/include + -I${BUILDEM_DIR}/include -I${BUILDEM_DIR}/include/freetype2 -L${BUILDEM_DIR}/lib ${EXTRA_QT4_CONFIG_FLAGS} BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) @@ -98,7 +102,13 @@ ExternalProject_Add(${qt4_NAME} INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) install ) +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + ExternalProject_Add_Step(${qt4_NAME} ${qt4_NAME}-create-symlinks + COMMAND bash ${PATCH_DIR}/qt4-create-symlinks.sh ${BUILDEM_DIR} + DEPENDEES install + ) +endif() + set_target_properties(${qt4_NAME} PROPERTIES EXCLUDE_FROM_ALL ON) endif (NOT qt4_NAME) - diff --git a/scikit-image.cmake b/scikit-image.cmake index 5524393..572ea6e 100644 --- a/scikit-image.cmake +++ b/scikit-image.cmake @@ -16,10 +16,10 @@ include (numpy) include (scipy) external_source (scikit-image - 0.7.2 - scikit-image-0.7.2.tar.gz - 80eb9862fa09c7e06eda6e2a9fc4042f - http://pypi.python.org/packages/source/s/scikit-image) + 0.9.3 + scikit-image-0.9.3.tar.gz + f010e0cd46ee2996a6875c96b216e768 + https://pypi.python.org/packages/source/s/scikit-image) message ("Installing ${scikit-image_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") ExternalProject_Add(${scikit-image_NAME} diff --git a/templates/setenv_ilastik_gui.in b/templates/setenv_ilastik_gui.in index 32375a0..9112ab8 100644 --- a/templates/setenv_ilastik_gui.in +++ b/templates/setenv_ilastik_gui.in @@ -13,10 +13,13 @@ else export ILASTIK_PATH=$(cd $BUILDEM_DIR/@ILASTIK_DIR_RELATIVE@ && pwd) fi export PYTHON_PREFIX=$(cd $BUILDEM_DIR/@PYTHON_PREFIX_RELATIVE@ && pwd) - - # Do not use the user's previous LD_LIBRARY_PATH settings because they can cause conflicts. - # Start with an empty LD_LIBRARY_PATH - export @BUILDEM_LD_LIBRARY_VAR@="" + + ILASTIK_USE_CLEAN_LD_LIBRARY_PATH=${ILASTIK_USE_CLEAN_LD_LIBRARY_PATH-0} + if [ $ILASTIK_USE_CLEAN_LD_LIBRARY_PATH -eq 1 ]; then + # Do not use the user's previous LD_LIBRARY_PATH settings because they can cause conflicts. + # Start with an empty LD_LIBRARY_PATH + export @BUILDEM_LD_LIBRARY_VAR@="" + fi export @BUILDEM_LD_LIBRARY_VAR@=$BUILDEM_DIR/lib:$@BUILDEM_LD_LIBRARY_VAR@ export @BUILDEM_LD_LIBRARY_VAR@=$BUILDEM_DIR/lib/vtk-5.10:$@BUILDEM_LD_LIBRARY_VAR@ export @BUILDEM_LD_LIBRARY_VAR@=$PYTHON_PREFIX/lib/python2.7/site-packages:$@BUILDEM_LD_LIBRARY_VAR@ diff --git a/templates/setenv_ilastik_headless.in b/templates/setenv_ilastik_headless.in index 481c696..52a3d5b 100644 --- a/templates/setenv_ilastik_headless.in +++ b/templates/setenv_ilastik_headless.in @@ -14,6 +14,12 @@ else fi export PYTHON_PREFIX=$(cd $BUILDEM_DIR/@PYTHON_PREFIX_RELATIVE@ && pwd) + ILASTIK_USE_CLEAN_LD_LIBRARY_PATH=${ILASTIK_USE_CLEAN_LD_LIBRARY_PATH-0} + if [ $ILASTIK_USE_CLEAN_LD_LIBRARY_PATH -eq 1 ]; then + # Do not use the user's previous LD_LIBRARY_PATH settings because they can cause conflicts. + # Start with an empty LD_LIBRARY_PATH + export @BUILDEM_LD_LIBRARY_VAR@="" + fi # Do not use the user's previous LD_LIBRARY_PATH settings because they can cause conflicts. # Start with an empty LD_LIBRARY_PATH export @BUILDEM_LD_LIBRARY_VAR@="" diff --git a/vigra.cmake b/vigra.cmake index e48ae18..8d79dfb 100644 --- a/vigra.cmake +++ b/vigra.cmake @@ -31,7 +31,7 @@ endif() include (nose) # select the desired VIGRA commit -set(DEFAULT_VIGRA_VERSION "05cf09388e28ab9db49fda3763500f128445897d") # from 2013-12-17 +set(DEFAULT_VIGRA_VERSION "4510b643cbf1d62d1b9111c53236919eb1c2d063") # from 2014-07-02 IF(NOT DEFINED VIGRA_VERSION) SET(VIGRA_VERSION "${DEFAULT_VIGRA_VERSION}") ENDIF() @@ -49,7 +49,20 @@ else() set(VIGRA_UPDATE_COMMAND git fetch origin && git checkout ${VIGRA_VERSION}) endif() + +if (APPLE) + set (DEFAULT_VIGRA_WITH_BOOST_THREAD 1) +else() + set (DEFAULT_VIGRA_WITH_BOOST_THREAD 0) +endif() +set(VIGRA_WITH_BOOST_THREAD ${DEFAULT_VIGRA_WITH_BOOST_THREAD} + CACHE BOOL "Build Vigra with boost-thread instead of std c++11 thread") +set(VIGRA_THREAD_SETTING "-DWITH_BOOST_THREAD=${VIGRA_WITH_BOOST_THREAD}") + message ("Installing ${vigra_NAME}/${VIGRA_VERSION} into FlyEM build area: ${BUILDEM_DIR} ...") +message ("**********************************************************************************") +message ("***** WARNING: vigra test step SKIPPED for now. Edit vigra.cmake to change. *****") +message ("**********************************************************************************") ExternalProject_Add(${vigra_NAME} DEPENDS ${libjpeg_NAME} ${libtiff_NAME} ${libpng_NAME} ${openexr_NAME} ${libfftw_NAME} ${hdf5_NAME} ${python_NAME} ${boost_NAME} ${NUMPY_DEP} ${nose_NAME} @@ -65,29 +78,56 @@ ExternalProject_Add(${vigra_NAME} -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} -DCMAKE_PREFIX_PATH=${BUILDEM_DIR} -DCMAKE_EXE_LINKER_FLAGS=${BUILDEM_LDFLAGS} + + ${VIGRA_THREAD_SETTING} + + -DWITH_VIGRANUMPY=${WITH_VIGRANUMPY} -DDEPENDENCY_SEARCH_PREFIX=${BUILDEM_DIR} + + -DBoost_INCLUDE_DIR=${BUILDEM_DIR}/include -DBoost_LIBRARY_DIRS=${BUILDEM_DIR}/lib - # -DBoost_PYTHON_LIBRARY=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} - # -DBoost_PYTHON_LIBRARY_RELEASE=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} - # -DBoost_PYTHON_LIBRARY_DEBUG=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} - # -DVIGRANUMPY_LIBRARIES=${BUILDEM_DIR}/lib/libpython2.7.${BUILDEM_PLATFORM_DYLIB_EXTENSION}^^${BUILDEM_DIR}/lib/libboost_python.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DBoost_PYTHON_LIBRARY=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DBoost_PYTHON_LIBRARY_RELEASE=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DBoost_PYTHON_LIBRARY_DEBUG=${BUILDEM_DIR}/lib/libboost_python-mt.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + + -DPYTHON_EXECUTABLE=${PYTHON_EXE} + -DPYTHON_INCLUDE_PATH=${PYTHON_PREFIX}/include + -DPYTHON_LIBRARIES=${PYTHON_PREFIX}/lib/libpython.2.7.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DPYTHON_NUMPY_INCLUDE_DIR=${PYTHON_PREFIX}/lib/python2.7/site-packages/numpy/core/include + -DPYTHON_SPHINX=${PYTHON_PREFIX}/bin/sphinx-build + + -DVIGRANUMPY_LIBRARIES=${PYTHON_PREFIX}/lib/libpython2.7.${BUILDEM_PLATFORM_DYLIB_EXTENSION}^^${BUILDEM_DIR}/lib/libboost_python.${BUILDEM_PLATFORM_DYLIB_EXTENSION}^^${BUILDEM_DIR}/lib/libboost_thread.${BUILDEM_PLATFORM_DYLIB_EXTENSION}^^${BUILDEM_DIR}/lib/libboost_system.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DVIGRANUMPY_INSTALL_DIR=${PYTHON_PREFIX}/lib/python2.7/site-packages + + -DPNG_LIBRARY=${BUILDEM_DIR}/lib/libpng.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DPNG_PNG_INCLUDE_DIR=${BUILDEM_DIR}/include + + -DTIFF_LIBRARY=${BUILDEM_DIR}/lib/libtiff.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DTIFF_INCLUDE_DIR=${BUILDEM_DIR}/include + -DJPEG_INCLUDE_DIR=${BUILDEM_DIR}/include -DJPEG_LIBRARY=${BUILDEM_DIR}/lib/libjpeg.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DHDF5_CORE_LIBRARY=${BUILDEM_DIR}/lib/libhdf5.${BUILDEM_PLATFORM_DYLIB_EXTENSION} -DHDF5_HL_LIBRARY=${BUILDEM_DIR}/lib/libhdf5_hl.${BUILDEM_PLATFORM_DYLIB_EXTENSION} -DHDF5_INCLUDE_DIR=${BUILDEM_DIR}/include + + -DZLIB_INCLUDE_DIR=${BUILDEM_DIR}/include + -DZLIB_LIBRARY=${BUILDEM_DIR}/lib/libz.${BUILDEM_PLATFORM_DYLIB_EXTENSION} + -DFFTW3F_INCLUDE_DIR= - -DWITH_VIGRANUMPY=${WITH_VIGRANUMPY} -DFFTW3F_LIBRARY= -DFFTW3_INCLUDE_DIR=${BUILDEM_DIR}/include -DFFTW3_LIBRARY=${BUILDEM_DIR}/lib/libfftw3.${BUILDEM_PLATFORM_DYLIB_EXTENSION} - -DCMAKE_CXX_FLAGS=-pthread + -DCMAKE_CXX_FLAGS=-pthread -DCMAKE_CXX_LINK_FLAGS=-pthread -DCMAKE_CXX_FLAGS_RELEASE=-O2\ -DNDEBUG # Some versions of gcc miscompile vigra at -O3 -DCMAKE_CXX_FLAGS_DEBUG="${CMAKE_CXX_FLAGS_DEBUG}" + + BUILD_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) - TEST_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) check + #TEST_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) check INSTALL_COMMAND ${BUILDEM_ENV_STRING} $(MAKE) install ) diff --git a/vtk.cmake b/vtk.cmake index 864cecc..ae86b73 100644 --- a/vtk.cmake +++ b/vtk.cmake @@ -9,7 +9,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) include (ExternalProject) include (ExternalSource) include (BuildSupport) -#include (PatchSupport) +include (PatchSupport) include (python) include (qt4) @@ -33,6 +33,11 @@ message ("Installing ${vtk_NAME} into FlyEM build area: ${BUILDEM_DIR} ...") set (vtk_LIBPATH ${BUILDEM_DIR}/lib/vtk-5.10) include_directories (${BUILDEM_DIR}/include/vtk-5.10) +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # if we compile on OSX with a non-apple compiler, then we need to remove the apple specific flags "-fpascal-strings" + SET(VTK_PATCHES ${BUILDEM_ENV_STRING} ${PATCH_EXE} ${vtk_SRC_DIR}/Utilities/ftgl/CMakeLists.txt ${PATCH_DIR}/vtk-gcc-osx-pascal-strings.patch) +endif() + ExternalProject_Add(${vtk_NAME} DEPENDS ${python_NAME} ${qt4_NAME} ${sip_NAME} ${pyqt4_NAME} ${libxml2_NAME} ${libpng_NAME} ${libjpeg_NAME} ${libtiff_NAME} ${zlib_NAME} @@ -40,10 +45,15 @@ ExternalProject_Add(${vtk_NAME} URL ${vtk_URL} URL_MD5 ${vtk_MD5} UPDATE_COMMAND "" - PATCH_COMMAND "" + PATCH_COMMAND ${VTK_PATCHES} CONFIGURE_COMMAND ${BUILDEM_ENV_STRING} ${CMAKE_COMMAND} ${vtk_SRC_DIR} -DCMAKE_INSTALL_PREFIX=${BUILDEM_DIR} -DBUILD_SHARED_LIBS:BOOL=ON + # For some reason, this linker search path must be explicitly passed in (on mac, at least). + # (On Mac, CMake automatically uses -F/bla/bla/bla, but for some of the vtk libraries, we need to use -L/bla/bla) + -DCMAKE_EXE_LINKER_FLAGS=-L${BUILDEM_LIB_DIR} + -DCMAKE_MODULE_LINKER_FLAGS=-L${BUILDEM_LIB_DIR} + -DCMAKE_SHARED_LINKER_FLAGS=-L${BUILDEM_LIB_DIR} # These python settings must be manually specified for the mac build (maybe not for linux, but it shouldn't hurt) -DVTK_PYTHON_SETUP_ARGS=--prefix=${PYTHON_PREFIX} -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_PATH}