diff --git a/spot/ltsmin/Makefile.am b/spot/ltsmin/Makefile.am index b865bada5..7fe1862c6 100644 --- a/spot/ltsmin/Makefile.am +++ b/spot/ltsmin/Makefile.am @@ -39,7 +39,7 @@ libspotltsmin_la_LIBADD = \ $(top_builddir)/lib/libgnu.la \ $(LIBLTDL) -lpthread libspotltsmin_la_LDFLAGS = -no-undefined $(SYMBOLIC_LDFLAGS) -libspotltsmin_la_SOURCES = ltsmin.cc +libspotltsmin_la_SOURCES = ltsmin.cc spins_interface.cc EXTRA_DIST = $(srcdir)/libspotltsmin.pc.in diff --git a/spot/ltsmin/spins_interface.cc b/spot/ltsmin/spins_interface.cc new file mode 100644 index 000000000..dbb1b8ec5 --- /dev/null +++ b/spot/ltsmin/spins_interface.cc @@ -0,0 +1,32 @@ +// -*- coding: utf-8 -*- +// Copyright (C) 2017 Laboratoire de Recherche et Développement de +// l'Epita (LRDE) +// +// This file is part of Spot, a model checking library. +// +// Spot is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// Spot is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include +#include + +namespace spot +{ + spins_interface::~spins_interface() + { + lt_dlhandle h = (lt_dlhandle) handle; + if (h) + lt_dlclose(h); + lt_dlexit(); + } +} diff --git a/spot/ltsmin/spins_interface.hh b/spot/ltsmin/spins_interface.hh index f77f87aca..15bfceb5d 100644 --- a/spot/ltsmin/spins_interface.hh +++ b/spot/ltsmin/spins_interface.hh @@ -19,8 +19,8 @@ #pragma once -#include #include + namespace spot { //////////////////////////////////////////////////////////////////////// @@ -38,7 +38,9 @@ namespace spot struct spins_interface { - lt_dlhandle handle; // handle to the dynamic library + // handle to the dynamic library. The variable is of type lt_dlhandle, but + // we need this trick since we cannot put ltdl.h in public headers + void* handle; void (*get_initial_state)(void *to); int (*have_property)(); int (*get_successors)(void* m, int *in, TransitionCB, void *arg); @@ -49,13 +51,7 @@ namespace spot const char* (*get_type_name)(int type); int (*get_type_value_count)(int type); const char* (*get_type_value_name)(int type, int value); - - ~spins_interface() - { - if (handle) - lt_dlclose(handle); - lt_dlexit(); - } + ~spins_interface(); }; using spins_interface_ptr = std::shared_ptr;