diff --git a/README.md b/README.md index 0f62079b354e65626eb906c822c551f75485334f..319f19e0393cbaca858aec3bd1ff65ff9a395088 100644 --- a/README.md +++ b/README.md @@ -76,4 +76,4 @@ MOOSE can also read .swc files from NeuroMorpho.org. # Documentation -Complete MOOSE Documentation can be found at - http://moose.ncbs.res.in/content/view/5/6/ +Complete MOOSE Documentation can be found at - https://moose.ncbs.res.in/?q=documentation diff --git a/docs/introduction/install/index.rst b/docs/introduction/install/index.rst index 430ed780435930d8f739a55f4423a333355313fe..b53e792779a74b1f71b337ca51613e01d7a90a10 100644 --- a/docs/introduction/install/index.rst +++ b/docs/introduction/install/index.rst @@ -78,21 +78,9 @@ Next, you need to install required dependencies. - cmake (version 2.8 or higher) - gsl-1.16 or higher `download <ftp://ftp.gnu.org/gnu/gsl/>`_. - libhdf5 development package. -- libsbml (5.9.0, optional). `download <https://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/>`_ - python development package - numpy -.. note:: - `libsml` needs to be compiled with ``zlib`` and ``lxml`` (requires ``libxml2-dev`` or ``libxml2-devel``` - package) support without which, you might face link time errors. Following instructions are known to - work:: - $ wget http://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/libSBML-5.9.0-core-src.tar.gz - $ tar -xzvf libSBML-5.9.0-core-src.tar.gz - $ cd libsbml-5.9.0 - $ ./configure --with-zlib --with-libxml - $ make - $ sudo make install - Most of the dependencies can be installed using package manager. On ``Debian/Ubuntu`` @@ -175,7 +163,7 @@ Now you can fire up the GUI .. note:: If you have installed ``moose`` using the package, then GUI is launched by running following commnad:: - $ moosegui + $ moose Building moogli --------------- diff --git a/moose-core/CMakeLists.txt b/moose-core/CMakeLists.txt index d9233825d0eeb7e1251db30af60756e003c7a624..1948958bec32f8bb981ed91d9c751e45252ba473 100644 --- a/moose-core/CMakeLists.txt +++ b/moose-core/CMakeLists.txt @@ -159,6 +159,8 @@ set_target_properties(libmoose PROPERTIES PREFIX "") ## Variable to collect all static libraries. set(STATIC_LIBRARIES "" ) +# Collect all shared libraries here. +set(SYSTEM_SHARED_LIBS ${LibXML2_LIBRARIES}) if(WITH_GSL) find_package(GSL 1.16) @@ -218,12 +220,16 @@ endif(NOT HDF5_FOUND) if(HDF5_FOUND) add_definitions( -DUSE_HDF5 ) include_directories( ${HDF5_INCLUDE_DIRS} ) - foreach(HDF5_LIB ${HDF5_LIBRARIES}) - get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT ) - if( ${HDF5_LIB_EXT} STREQUAL ".a" ) - list(APPEND STATIC_LIBRARIES ${HDF5_LIB} ) - else( ) - list(APPEND SYSTEM_SHARED_LIBS ${HDF5_LIB} ) + foreach(HDF5_LIB ${HDF5_LIBRARIES} ) + if(HDF5_LIB) + get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT ) + if(HDF5_LIB_EXT) + if(${HDF5_LIB_EXT} STREQUAL ".a") + list(APPEND STATIC_LIBRARIES ${HDF5_LIB} ) + else( ) + list(APPEND SYSTEM_SHARED_LIBS ${HDF5_LIB} ) + endif( ) + endif() endif( ) endforeach( ) endif( HDF5_FOUND ) @@ -258,27 +264,26 @@ if(WITH_MPI) endif() endif(WITH_MPI) -# These are always shared libraries. -set(SYSTEM_SHARED_LIBS ${LibXML2_LIBRARIES}) if(WITH_BOOST) list(APPEND SYSTEM_SHARED_LIBS ${LAPACK_LIBRARIES}) list(APPEND SYSTEM_SHARED_LIBS ${Boost_LIBRARIES}) endif(WITH_BOOST) -# These libraries could be static of dynamic. -# When building packages on OBS or launchpad, we build static library of a -# dependencies if a correct version is not found. -# Here we make sure that the correct static version is linked; if a correct -# shared version is found then link the shared version in SYSTEM_SHARED_LIBS. +# These libraries could be static of dynamic. We need to discrimate between +# these two types because of --whole-archive option. See +# BhallaLab/moose-core#66, if(WITH_GSL) message(STATUS "Using STATIC gsl libraries: ${GSL_LIBRARIES}") - foreach(GSL_LIB ${GSL_LIBRARIES} ) - get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT ) - if( GSL_LIB_EXT STREQUAL ".a" ) - list(APPEND STATIC_LIBRARIES ${GSL_LIB}) - else() - list(APPEND SYSTEM_SHARED_LIBS ${GSL_LIB}) + if(GSL_LIB) + get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT ) + if(GSL_LIB_EXT) + if(GSL_LIB_EXT STREQUAL ".a" ) + list(APPEND STATIC_LIBRARIES ${GSL_LIB}) + else() + list(APPEND SYSTEM_SHARED_LIBS ${GSL_LIB}) + endif( ) + endif( ) endif( ) endforeach( ) endif() @@ -343,6 +348,11 @@ list(APPEND MOOSE_LIBRARIES basecode ) +# Make sure to remove duplicates. +list(REMOVE_DUPLICATES STATIC_LIBRARIES) +if(SYSTEM_SHARED_LIBS) + list(REMOVE_DUPLICATES SYSTEM_SHARED_LIBS) +endif( ) # MAC linker does not understand many of gnu-ld options. message( STATUS "Shared libs: ${SYSTEM_SHARED_LIBS}") diff --git a/moose-core/VERSION b/moose-core/VERSION index 4225763f8cf3bc6309bd0d3fed4f68dde69ac351..50e47c89cafc3ec95774b3110a3dba45256d0b24 100644 --- a/moose-core/VERSION +++ b/moose-core/VERSION @@ -1 +1 @@ -3.1.1-40-g8fe5068 \ No newline at end of file +3.1.1 \ No newline at end of file diff --git a/moose-core/cmake_modules/FindGSL.cmake b/moose-core/cmake_modules/FindGSL.cmake index b33139af67aafb535cbcedd1b24452e85ea6be73..93c2686f78e6fbbdde540e86241d0995934c8813 100644 --- a/moose-core/cmake_modules/FindGSL.cmake +++ b/moose-core/cmake_modules/FindGSL.cmake @@ -1,146 +1,107 @@ -## -## Try to find gnu scientific library GSL -## (see http://www.gnu.org/software/gsl/) -## Once run this will define: -## -## GSL_FOUND = system has GSL lib -## -## GSL_LIBRARIES = full path to the libraries -## on Unix/Linux with additional linker flags from "gsl-config --libs" -## -## CMAKE_GSL_CXX_FLAGS = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`" -## -## GSL_INCLUDE_DIRS = where to find headers -## -## GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix -## GSL_EXE_LINKER_FLAGS = rpath on Unix -## -## Felix Woelk 07/2004 -## minor corrections Jan Woetzel -## -## www.mip.informatik.uni-kiel.de -## -------------------------------- -## - -message( STATUS "GSL_ROOT_DIR value $ENV{GSL_ROOT_DIR}") +# Try to find gnu scientific library GSL +# (see http://www.gnu.org/software/gsl/) +# Once run this will define: +# +# GSL_FOUND = system has GSL lib +# +# GSL_VERSION = gsl version +# +# GSL_LIBRARIES = name of the libraries. +# +# GSL_INCLUDE_DIRS = where to find headers +# +# GSL_USE_STATIC_LIBRARIES = Set it ON if you want to search for static +# libraries. +# +# Felix Woelk 07/2004 +# minor corrections Jan Woetzel +# +# www.mip.informatik.uni-kiel.de +# -------------------------------- +# +# Friday 18 November 2016 09:05:56 AM IST +# MODIFICATIONS: ## dilawars@ncbs.res.in, For the MOOSE project. +# This version does not use gsl-config file. +# + +# Set this envrionment variable to search in this path first. +SET(GSL_ROOT_DIR $ENV{GSL_ROOT_DIR}) +if(GSL_ROOT_DIR) + message( STATUS "Debug: GSL_ROOT_DIR value ${GSL_ROOT_DIR}") +endif(GSL_ROOT_DIR) IF(WIN32) - SET(GSL_MINGW_PREFIX "c:/msys/local" ) - SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}") - FIND_LIBRARY(GSL_LIB gsl PATHS - ${GSL_MINGW_PREFIX}/lib - ${GSL_MSVC_PREFIX}/lib - ) - #MSVC version of the lib is just called 'cblas' - FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS - ${GSL_MINGW_PREFIX}/lib - ${GSL_MSVC_PREFIX}/lib - ) - - FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h - ${GSL_MINGW_PREFIX}/include - ${GSL_MSVC_PREFIX}/include - ) + SET(GSL_MINGW_PREFIX "c:/msys/local" ) + SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}") + FIND_LIBRARY(GSL_LIB gsl PATHS + ${GSL_MINGW_PREFIX}/lib + ${GSL_MSVC_PREFIX}/lib + ) + #MSVC version of the lib is just called 'cblas' + FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS + ${GSL_MINGW_PREFIX}/lib + ${GSL_MSVC_PREFIX}/lib + ) + + FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h + ${GSL_MINGW_PREFIX}/include + ${GSL_MSVC_PREFIX}/include + ) + + IF (GSL_LIB AND GSLCBLAS_LIB) + SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB}) + ENDIF (GSL_LIB AND GSLCBLAS_LIB) - IF (GSL_LIB AND GSLCBLAS_LIB) - SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB}) - ENDIF (GSL_LIB AND GSLCBLAS_LIB) - ELSE(WIN32) - IF(UNIX) - SET(GSL_CONFIG_PREFER_PATH "$ENV{GSL_ROOT_DIR}/bin") - # GSL_CONFIG must be cleared. This script may be called again after installing - # the proper version of gsl - if(EXISTS "$ENV{GSL_ROOT_DIR}") - set(GSL_CONFIG "$ENV{GSL_ROOT_DIR}/bin/gsl-config") - MESSAGE(STATUS "gsl-config from environment variable: ${GSL_CONFIG}") - set(GSL_INCLUDE_DIRS) - set(GSL_LIBRARIES) - set(GSL_VERSION) - set(GSL_CONFIG_LIBS) - else() - FIND_PROGRAM(GSL_CONFIG gsl-config - ${GSL_CONFIG_PREFER_PATH} - $ENV{LIB_DIR}/bin - /usr/local/bin/ - /usr/bin/ - ) - endif() - IF (GSL_CONFIG) - # set CXXFLAGS to be fed into CXX_FLAGS by the user: - SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`") - - # set INCLUDE_DIRS to prefix+include - EXEC_PROGRAM(${GSL_CONFIG} - ARGS --prefix - OUTPUT_VARIABLE GSL_PREFIX) - SET(GSL_INCLUDE_DIRS ${GSL_PREFIX}/include CACHE STRING INTERNAL) - - # set link libraries and link flags - EXEC_PROGRAM(${GSL_CONFIG} - ARGS --libs - OUTPUT_VARIABLE GSL_LIBRARIES) - - ## extract link dirs for rpath - EXEC_PROGRAM(${GSL_CONFIG} - ARGS --libs - OUTPUT_VARIABLE GSL_CONFIG_LIBS ) - - EXEC_PROGRAM(${GSL_CONFIG} - ARGS --version - OUTPUT_VARIABLE GSL_VERSION - ) - - ## split off the link dirs (for rpath) - ## use regular expression to match wildcard equivalent "-L*<endchar>" - ## with <endchar> is a space or a semicolon - STRING(REGEX MATCHALL "[-][L]([^ ;])+" - GSL_LINK_DIRECTORIES_WITH_PREFIX - "${GSL_CONFIG_LIBS}" ) - # MESSAGE("DBG GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}") - ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES - - IF (GSL_LINK_DIRECTORIES_WITH_PREFIX) - STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} ) - ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX) - SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL) - # MESSAGE("DBG GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}") - # MESSAGE("DBG GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}") + IF(GSL_USE_STATIC_LIBRARIES) + SET(GSL_LIB_NAMES libgsl.a) + SET(GSL_CBLAS_LIB_NAMES libgslcblas.a) + ELSE(GSL_USE_STATIC_LIBRARIES) + SET(GSL_LIB_NAMES gsl) + SET(GSL_CBLAS_LIB_NAMES gslcblas) + ENDIF( ) + + FIND_LIBRARY(GSL_LIB + NAMES ${GSL_LIB_NAMES} + PATHS + ${GSL_ROOT_DIR}/lib ${GSL_ROOT_DIR}/lib64 + /opt/lib /opt/lib64 + ) + + FIND_LIBRARY(GSLCBLAS_LIB + NAMES ${GSL_CBLAS_LIB_NAMES} + PATHS + ${GSL_ROOT_DIR}/lib ${GSL_ROOT_DIR}/lib64 + /opt/lib /opt/lib64 + ) + IF (GSL_LIB AND GSLCBLAS_LIB) + SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB}) + ENDIF (GSL_LIB AND GSLCBLAS_LIB) + + FIND_PATH(GSL_INCLUDE_DIRS NAMES gsl/gsl_blas.h + PATHS ${GSL_ROOT_DIR}/include /opt/include + ) - # ADD_DEFINITIONS("-DHAVE_GSL") - # SET(GSL_DEFINITIONS "-DHAVE_GSL") - MARK_AS_ADVANCED( - GSL_CXX_FLAGS - GSL_INCLUDE_DIRS - GSL_LIBRARIES - GSL_LINK_DIRECTORIES - GSL_DEFINITIONS - ) - - ELSE(GSL_CONFIG) - IF (GSL_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find gsl-config. Please set it manually. GSL_CONFIG=${GSL_CONFIG}") - ELSE (GSL_FIND_REQUIRED) - MESSAGE(STATUS "Could not find GSL") - # TODO: Avoid cmake complaints if GSL is not found - ENDIF (GSL_FIND_REQUIRED) - - ENDIF(GSL_CONFIG) - - ENDIF(UNIX) ENDIF(WIN32) - -IF(GSL_LIBRARIES) - IF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS) - - SET(GSL_FOUND 1) - - MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}") - - ENDIF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS) -ENDIF(GSL_LIBRARIES) +# FIND version +if(GSL_INCLUDE_DIRS) + file(READ "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" GSL_VERSION_TEXT) + string(REGEX REPLACE ".*define[ ]+GSL_MAJOR_VERSION[ ]*([0-9]+).*" "\\1" + GSL_MAJOR_VERSION "${GSL_VERSION_TEXT}") + string(REGEX REPLACE ".*define[ ]+GSL_MINOR_VERSION[ ]*([0-9]+).*" "\\1" + GSL_MINOR_VERSION "${GSL_VERSION_TEXT}") + set(GSL_VERSION "${GSL_MAJOR_VERSION}.${GSL_MINOR_VERSION}") + message(STATUS "GSL version : ${GSL_VERSION}") +endif(GSL_INCLUDE_DIRS) + +IF(GSL_LIBRARIES AND GSL_VERSION) + IF(GSL_INCLUDE_DIRS) + MESSAGE(STATUS "Found GSL ${GSL_LIBRARIES}") + SET(GSL_FOUND 1) + ENDIF(GSL_INCLUDE_DIRS) +ENDIF()