diff options
Diffstat (limited to 'libcrystfel')
-rw-r--r-- | libcrystfel/CMakeLists.txt | 44 | ||||
-rw-r--r-- | libcrystfel/config.h.cmake.in | 19 | ||||
-rw-r--r-- | libcrystfel/crystfel.pc.in | 6 | ||||
-rw-r--r-- | libcrystfel/src/index.c | 2 | ||||
-rw-r--r-- | libcrystfel/src/symmetry.c | 11 |
5 files changed, 73 insertions, 9 deletions
diff --git a/libcrystfel/CMakeLists.txt b/libcrystfel/CMakeLists.txt index 5d0ee069..1fba6624 100644 --- a/libcrystfel/CMakeLists.txt +++ b/libcrystfel/CMakeLists.txt @@ -1,4 +1,28 @@ -project(libcrystfel) +project(libcrystfel VERSION ${CRYSTFEL_VERSION} LANGUAGES C) + +find_package(Curses) +find_package(FFTW) +find_package(CBF) +find_package(XGANDALF) +find_package(PINKINDEXER) +find_package(NBP) +find_package(FDIP) + +set(HAVE_CURSES ${CURSES_FOUND}) +set(HAVE_FFTW ${FFTW_FOUND}) +set(HAVE_XGANDALF ${XGANDALF_FOUND}) +set(HAVE_FDIP ${FDIP_FOUND}) +set(HAVE_CBFLIB ${CBF_FOUND}) + +# Check for CPU affinity functions (Linux-specific) +set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") +check_symbol_exists(sched_setaffinity "sched.h" HAVE_CPU_AFFINITY) +unset(CMAKE_REQUIRED_DEFINITIONS) + +# Check for nice clock function +check_symbol_exists(clock_gettime "time.h" HAVE_CLOCK_GETTIME) + +configure_file(config.h.cmake.in config.h) set(LIBCRYSTFEL_SOURCES src/reflist.c @@ -76,10 +100,18 @@ add_library(${PROJECT_NAME} SHARED ${LIBCRYSTFEL_FFTW_SOURCES} ${LIBCRYSTFEL_HEADERS}) +set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1) + +set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${CRYSTFEL_API_VERSION}) +set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${CRYSTFEL_VERSION}) + set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") target_include_directories(${PROJECT_NAME} INTERFACE ${PROJECT_SOURCE_DIR}/src) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +add_definitions(-DHAVE_CONFIG_H) + target_include_directories(${PROJECT_NAME} PRIVATE ${HDF5_INCLUDE_DIRS}) -target_link_libraries(${PROJECT_NAME} PRIVATE util ${HDF5_C_LIBRARIES}) +target_link_libraries(${PROJECT_NAME} PRIVATE util ${HDF5_C_LIBRARIES} Threads::Threads GSL::gsl m) if (XGANDALF_FOUND) target_include_directories(${PROJECT_NAME} PRIVATE ${XGANDALF_INCLUDES}) @@ -119,5 +151,9 @@ endif (CURSES_FOUND) target_compile_options(${PROJECT_NAME} PRIVATE -Wall) install (TARGETS libcrystfel - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +# crystfel.pc +configure_file(crystfel.pc.in crystfel.pc) +install(FILES ${CMAKE_BINARY_DIR}/libcrystfel/crystfel.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) diff --git a/libcrystfel/config.h.cmake.in b/libcrystfel/config.h.cmake.in new file mode 100644 index 00000000..36bbba60 --- /dev/null +++ b/libcrystfel/config.h.cmake.in @@ -0,0 +1,19 @@ +/* config.h for libcrystfel */ + +#cmakedefine HAVE_CLOCK_GETTIME +#cmakedefine HAVE_CPU_AFFINITY +#cmakedefine HAVE_FFTW +#cmakedefine HAVE_CL_CL_H +#cmakedefine HAVE_XGANDALF +#cmakedefine HAVE_FDIP +#cmakedefine HAVE_CURSES + +/* We avoid adding the full path to cbf.h, because CBFlib unhelpfully installs + * some conflicting HDF5 headers which we want to keep out of the include path. + * Unfortunately, sometimes CBFlib installs cbf/cbf.h, other times cbflib/cbf.h. + * These defines tell whether we have CBFlib at all, and if so, what to #include */ +#cmakedefine HAVE_CBFLIB +#cmakedefine HAVE_CBF_CBF_H +#cmakedefine HAVE_CBFLIB_CBF_H + +#define CRYSTFEL_VERSIONSTRING "${PROJECT_VERSION}+${GIT_SHA1}" diff --git a/libcrystfel/crystfel.pc.in b/libcrystfel/crystfel.pc.in index 7539cad1..3a355f06 100644 --- a/libcrystfel/crystfel.pc.in +++ b/libcrystfel/crystfel.pc.in @@ -5,7 +5,7 @@ includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR} Name: CrystFEL Description: Useful routines for crystallography using a free-electron laser -Version: ${PROJECT_VERSION}+${GIT_SHA1} -Cflags: -I${CMAKE_INSTALL_FULL_INCLUDEDIR} -pthread +Version: ${PROJECT_VERSION} +Cflags: -I${CMAKE_INSTALL_FULL_INCLUDEDIR} Libs: -L${CMAKE_INSTALL_FULL_LIBDIR} -lcrystfel -Requires: gsl +Requires.private: gsl diff --git a/libcrystfel/src/index.c b/libcrystfel/src/index.c index b20c689a..ff84c629 100644 --- a/libcrystfel/src/index.c +++ b/libcrystfel/src/index.c @@ -474,8 +474,6 @@ void cleanup_indexing(IndexingPrivate *ipriv) } - n++; - } free(ipriv->methods); diff --git a/libcrystfel/src/symmetry.c b/libcrystfel/src/symmetry.c index 897d134f..5f3b67f2 100644 --- a/libcrystfel/src/symmetry.c +++ b/libcrystfel/src/symmetry.c @@ -981,6 +981,7 @@ static SymOpList *getpg_arbitrary_ua(const char *sym, size_t s) char *pg_type; SymOpList *pg; IntegerMatrix *t; + char *new_name; if ( strncmp(sym+s, "ua", 2) == 0 ) { ua = sym[s+2]; @@ -1037,6 +1038,16 @@ static SymOpList *getpg_arbitrary_ua(const char *sym, size_t s) transform_ops(pg, t); intmat_free(t); + new_name = malloc(64); + if ( new_name == NULL ) { + ERROR("Couldn't allocate space for PG name\n"); + return NULL; + } + + snprintf(new_name, 64, "%s_ua%c", pg->name, ua); + free(pg->name); + pg->name = new_name; + return pg; } |