diff --git a/python/lammps.py b/python/lammps.py index 417427eb4b715bb64cdabeceb65b93ae036f492c..7576138f1a2c0b49e9969da692169590857fdf27 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -209,6 +209,7 @@ class lammps(object): self.c_bigint = get_ctypes_int(self.extract_setting("bigint")) self.c_tagint = get_ctypes_int(self.extract_setting("tagint")) self.c_imageint = get_ctypes_int(self.extract_setting("imageint")) + self._installed_packages = None # shut-down LAMMPS instance @@ -562,13 +563,36 @@ class lammps(object): shrinkexceed) @property - def uses_exceptions(self): + def has_exceptions(self): """ Return whether the LAMMPS shared library was compiled with C++ exceptions handling enabled """ - try: - if self.lib.lammps_has_error: - return True - except(AttributeError): - return False + return self.lib.lammps_config_has_exceptions() != 0 + + @property + def has_gzip_support(self): + return self.lib.lammps_config_has_gzip_support() != 0 + + @property + def has_png_support(self): + return self.lib.lammps_config_has_png_support() != 0 + + @property + def has_jpeg_support(self): + return self.lib.lammps_config_has_jpeg_support() != 0 + + @property + def has_ffmpeg_support(self): + return self.lib.lammps_config_has_ffmpeg_support() != 0 + + @property + def installed_packages(self): + if self._installed_packages is None: + self._installed_packages = [] + npackages = self.lib.lammps_config_package_count() + sb = create_string_buffer(100) + for idx in range(npackages): + self.lib.lammps_config_package_name(idx, sb, 100) + self._installed_packages.append(sb.value.decode()) + return self._installed_packages # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- diff --git a/src/info.cpp b/src/info.cpp index 7b2165bf70cb308e4ae981846e64feb83ab4612b..748354e8784aeda7a28d347e896ab3b53d8c56e1 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1190,6 +1190,15 @@ bool Info::has_exceptions() { #endif } +bool Info::has_package(const char * package_name) { + for(int i = 0; LAMMPS::installed_packages[i] != NULL; ++i) { + if(strcmp(package_name, LAMMPS::installed_packages[i]) == 0) { + return true; + } + } + return false; +} + /* ---------------------------------------------------------------------- */ char **Info::get_variable_names(int &num) { diff --git a/src/info.h b/src/info.h index 7d267f62427a5addd378a41f03defec954d729f7..058400df781935fcc6dd7b6165d8de6808a25752 100644 --- a/src/info.h +++ b/src/info.h @@ -38,6 +38,7 @@ class Info : protected Pointers { static bool has_jpeg_support(); static bool has_ffmpeg_support(); static bool has_exceptions(); + static bool has_package(const char * package_name); char **get_variable_names(int &num); diff --git a/src/library.cpp b/src/library.cpp index 0162c560cea7e21b66cc759a481aae6420c86d51..13e07568667d6319bd52b2c9fe6166decf292953 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -38,6 +38,7 @@ #include "memory.h" #include "error.h" #include "force.h" +#include "info.h" using namespace LAMMPS_NS; @@ -1522,6 +1523,56 @@ void lammps_create_atoms(void *ptr, int n, tagint *id, int *type, END_CAPTURE } +// ---------------------------------------------------------------------- +// library API functions for accessing LAMMPS configuration +// ---------------------------------------------------------------------- + +int lammps_config_has_package(char * package_name) { + return Info::has_package(package_name); +} + +int lammps_config_package_count() { + int i = 0; + while(LAMMPS::installed_packages[i] != NULL) { + ++i; + } + return i; +} + +int lammps_config_package_name(int index, char * buffer, int max_size) { + int i = 0; + while(LAMMPS::installed_packages[i] != NULL && i < index) { + ++i; + } + + if(LAMMPS::installed_packages[i] != NULL) { + strncpy(buffer, LAMMPS::installed_packages[i], max_size); + return true; + } + + return false; +} + +int lammps_config_has_gzip_support() { + return Info::has_gzip_support(); +} + +int lammps_config_has_png_support() { + return Info::has_png_support(); +} + +int lammps_config_has_jpeg_support() { + return Info::has_jpeg_support(); +} + +int lammps_config_has_ffmpeg_support() { + return Info::has_ffmpeg_support(); +} + +int lammps_config_has_exceptions() { + return Info::has_exceptions(); +} + // ---------------------------------------------------------------------- // library API functions for error handling // ---------------------------------------------------------------------- diff --git a/src/library.h b/src/library.h index 7c21b98daee2894ee4191788eefd94ee80f146dc..82071f673b6755191f5a5e58a99cd6acb24ff4b5 100644 --- a/src/library.h +++ b/src/library.h @@ -55,6 +55,15 @@ void lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *); void lammps_scatter_atoms(void *, char *, int, int, void *); void lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *); +int lammps_config_has_package(char * package_name); +int lammps_config_package_count(); +int lammps_config_package_name(int index, char * buffer, int max_size); +int lammps_config_has_gzip_support(); +int lammps_config_has_png_support(); +int lammps_config_has_jpeg_support(); +int lammps_config_has_ffmpeg_support(); +int lammps_config_has_exceptions(); + // lammps_create_atoms() takes tagint and imageint as args // ifdef insures they are compatible with rest of LAMMPS // caller must match to how LAMMPS library is built