| # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- |
| # |
| # This file is part of the Collabora Office project. |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| |
| $(eval $(call gb_Library_Library,pyuno_wrapper)) |
| |
| $(eval $(call gb_Library_set_include,pyuno_wrapper,\ |
| -I$(SRCDIR)/pyuno/source/module \ |
| -I$(SRCDIR)/pyuno/inc \ |
| $$(INCLUDE) \ |
| )) |
| |
| # not using external "python" because we do not want to link against python |
| $(eval $(call gb_Library_use_externals,pyuno_wrapper,\ |
| python_headers \ |
| )) |
| |
| # python "import pyuno" dlopens pyuno.so as RTLD_LOCAL, so g++ exception |
| # handling used to not work, so pyuno.so (pyuno_wrapper) is just a thin wrapper |
| # that dlopens libpyuno.so as RTLD_GLOBAL; but when pyuno.so wrapper links |
| # against libstdc++ (which has not previously been loaded into python process), |
| # that resolves its _ZNSs4_Rep20_S_empty_rep_storageE to itself, but later LO |
| # libs (loaded though RTLD_GLOBAL libpyuno.so) may resolve that symbol to e.g. |
| # cppu, because they happen to see that before libstdc++; so the requirement has |
| # always been that RTLD_LOCAL-loaded pyuno.so wrapper implicitly load into the |
| # process as little as possible. |
| # To ensure that pyuno.so does not link against libstdc++ the dynamic link |
| # command invokes gcc and not g++ if there are only C objects, so |
| # don't add any C++ objects here! |
| |
| ifeq ($(filter DRAGONFLY FREEBSD NETBSD OPENBSD MACOSX,$(OS)),) |
| |
| $(eval $(call gb_Library_add_libs,pyuno_wrapper,\ |
| -ldl \ |
| )) |
| |
| endif |
| |
| $(eval $(call gb_Library_add_cobjects,pyuno_wrapper,\ |
| pyuno/source/module/pyuno_dlopenwrapper \ |
| )) |
| |
| # vim:set noet sw=4 ts=4: |