diff --git a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_deps b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_deps index 39f246cd72ad2e4322d4b6fdbbbf350c6691d42e..a8d7799ffd5e760bdd170e6ab7b37609699652bd 100644 --- a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_deps +++ b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_deps @@ -33,9 +33,9 @@ else endif # Set package release versions -GDS=gds-2.18.10 -LDASTOOLSFRAMECPP=ldas-tools-framecpp-2.6.2 -LDASTOOLSAL=ldas-tools-al-2.6.0 +GDS=gds-2.18.17 +LDASTOOLSFRAMECPP=ldas-tools-framecpp-2.6.5 +LDASTOOLSAL=ldas-tools-al-2.6.2 SWIG=swig-3.0.7 METAIO=metaio-8.5.1 LIBFRAME=libframe-8.30 @@ -43,7 +43,7 @@ GSTPYTHON=gst-python-1.14.3 GSTPLUGINSGOOD=gst-plugins-good-1.14.3 GSTPLUGINSBASE=gst-plugins-base-1.14.3 GSTREAMER=gstreamer-1.14.3 -GSL=gsl-2.3 +GSL=gsl-1.16 ORC=orc-0.4.26 FFTW=fftw-3.3.8 @@ -170,7 +170,7 @@ tarball: # KAFKA tarball/kafka_2.11-2.0.0.tgz: tarball - wget -nc -P tarball http://mirror.reverse.net/pub/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz + wget -nc -P tarball https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz src/kafka_2.11-2.0.0: tarball/kafka_2.11-2.0.0.tgz src opt/bin opt/config opt/libs cd src && tar -xzf ../tarball/kafka_2.11-2.0.0.tgz && cd .. && cp -r src/kafka_2.11-2.0.0/bin/* opt/bin/. && cp src/kafka_2.11-2.0.0/libs/* opt/libs/. && cp src/kafka_2.11-2.0.0/config/* opt/config/. diff --git a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_gstlal b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_gstlal index 892deaa9ac5fd638b3cb3da6c66c6dba41179c3a..d06cd318c89d7224b1af04a32616faa4357992ea 100644 --- a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_gstlal +++ b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_gcc_gstlal @@ -38,9 +38,6 @@ DEPS_DIR:=/path/to/deps/dir # Set to build from git (0 = tarball, 1 = git) GSTLAL_GIT=1 LIGOSCALD_GIT=0 -LIGOSEGMENTS_GIT=0 -PYTHONLIGOLW_GIT=0 -GLUE_GIT=0 LALSUITE_GIT=0 # Define which branch from git to build. Defaults to 'master', but the user can @@ -49,30 +46,26 @@ LALSUITE_GIT=0 # GSTLAL_GIT_BRANCH="master" LIGOSCALD_GIT_BRANCH="master" -LIGOSEGMENTS_GIT_BRANCH="master" -PYTHONLIGOLW_GIT_BRANCH="master" -GLUE_GIT_BRANCH="master" LALSUITE_GIT_BRANCH="master" # Set package release versions -GSTLALINSPIRAL=gstlal-inspiral-1.5.1 -GSTLALCALIBRATION=gstlal-calibration-1.2.1 -GSTLALBURST=gstlal-burst-0.0.5 -GSTLALUGLY=gstlal-ugly-1.5.5 -GSTLAL=gstlal-1.4.1 -LIGOSCALD=ligo-scald-0.3.0 -LIGOSEGMENTS=ligo-segments-1.1.1 -PYTHONLIGOLW=python-ligo-lw-1.4.0 -GLUE=lscsoft-glue-1.60.0 -LALAPPS=lalapps-6.22.0 -LALINFERENCE=lalinference-1.10.0 -LALPULSAR=lalpulsar-1.17.0 -LALINSPIRAL=lalinspiral-1.8.0 -LALBURST=lalburst-1.5.0 -LALSIMULATION=lalsimulation-1.8.0 -LALMETAIO=lalmetaio-1.4.0 -LALFRAME=lalframe-1.4.4 -LAL=lal-6.19.0 +GSTLALINSPIRAL=gstlal-inspiral-1.6.5 +GSTLALCALIBRATION=gstlal-calibration-1.2.10 +GSTLALBURST=gstlal-burst-0.1.1 +GSTLALUGLY=gstlal-ugly-1.6.4 +GSTLAL=gstlal-1.5.0 +LIGOSCALD=ligo-scald-0.4.1 +KAFKA_PYTHON=0.11.5 +LIBRDKAFKA=0.11.5 +LALAPPS=lalapps-6.24.0 +LALINFERENCE=lalinference-1.11.0 +LALPULSAR=lalpulsar-1.18.0 +LALINSPIRAL=lalinspiral-1.9.0 +LALBURST=lalburst-1.5.2 +LALSIMULATION=lalsimulation-1.9.0 +LALMETAIO=lalmetaio-1.5.1 +LALFRAME=lalframe-1.4.5 +LAL=lal-6.20.1 # Specify target/dependency files GSTINSPIRAL_TARGET=$(INSTALL_DIR)/lib/libgstlalinspiral.so @@ -81,9 +74,6 @@ GSTLALBURST_TARGET=$(INSTALL_DIR)/lib/libgstlalburst.so GSTLALUGLY_TARGET=$(INSTALL_DIR)/lib/gstreamer-1.0/libgstnds.so GSTLAL_TARGET=$(INSTALL_DIR)/lib/libgstlal.so LIGOSCALD_TARGET=$(INSTALL_DIR)/lib/python2.7/site-packages/ligo_scald-0.1.0-py2.7.egg -LIGOSEGMENTS_TARGET=$(INSTALL_DIR)/lib/python2.7/site-packages/ligo_segments-1.1.1-py2.7-linux-x86_64.egg -PYTHONLIGOLW_TARGET=$(INSTALL_DIR)/lib/python2.7/site-packages/python_ligo_lw-1.4.0-py2.7.egg-info -GLUE_TARGET=$(INSTALL_DIR)/bin/dmtdq_seg_insert LALAPPS_TARGET=$(INSTALL_DIR)/bin/lalapps_psinject LALINFER_TARGET=$(INSTALL_DIR)/lib/liblalinference.so LALPULSAR_TARGET=$(INSTALL_DIR)/lib/liblalpulsar.so @@ -101,9 +91,6 @@ GSTLALBURST_TAR_TARGET=$(TAR_DIR)/$(GSTLALBURST).tar.gz GSTLALUGLY_TAR_TARGET=$(TAR_DIR)/$(GSTLALUGLY).tar.gz GSTLAL_TAR_TARGET=$(TAR_DIR)/$(GSTLAL).tar.gz LIGOSCALD_TAR_TARGET=$(TAR_DIR)/$(LIGOSCALD).tar.gz -LIGOSEGMENTS_TAR_TARGET=$(TAR_DIR)/$(LIGOSEGMENTS).tar.gz -PYTHONLIGOLW_TAR_TARGET=$(TAR_DIR)/$(PYTHONLIGOLW).tar.gz -GLUE_TAR_TARGET=$(TAR_DIR)/$(GLUE).tar.gz LALAPPS_TAR_TARGET=$(TAR_DIR)/$(LALAPPS).tar.xz LALINFER_TAR_TARGET=$(TAR_DIR)/$(LALINFERENCE).tar.xz LALPULSAR_TAR_TARGET=$(TAR_DIR)/$(LALPULSAR).tar.xz @@ -117,9 +104,6 @@ LAL_TAR_TARGET=$(TAR_DIR)/$(LAL).tar.xz # git repos GSTLAL_GIT_TARGET=$(GSTLAL_REPO)/TODO.md LIGOSCALD_GIT_TARGET=$(LIGOSCALD_REPO)/README.md -LIGOSEGMENTS_GIT_TARGET=$(LIGOSEGMENTS_REPO)/README.rst -PYTHONLIGOLW_GIT_TARGET=$(PYTHONLIGOLW_REPO)/MANIFEST.in -GLUE_GIT_TARGET=$(GLUE_REPO)/README LALSUITE_GIT_TARGET=$(LALSUITE_REPO)/lal/README # Specify how many processors to run on @@ -258,10 +242,10 @@ $(GSTLAL_TARGET) : $(LIGOSCALD_TARGET) # ligo-scald ligo-scald : $(LOGS_DIR)/ligo-scald.txt -$(LOGS_DIR)/ligo-scald.txt : $(LOGS_DIR)/ligo-segments.txt $(LIGOSCALD_TARGET) +$(LOGS_DIR)/ligo-scald.txt : $(LOGS_DIR)/kafka-python.txt $(LIGOSCALD_TARGET) @echo $^ | sed -e "s@ @\n@g" > $@ -$(LIGOSCALD_TARGET) : $(LIGOSEGMENTS_TARGET) +$(LIGOSCALD_TARGET) : $(KAFKA_PYTHON_TARGET) @echo $(GREEN)ligo-scald$(WHITE) 1>&2 if [ "${LIGOSCALD_GIT}" = "1" ]; then \ cd $(LIGOSCALD_REPO) && python setup.py install --prefix=$(INSTALL_DIR) ; \ @@ -270,50 +254,28 @@ $(LIGOSCALD_TARGET) : $(LIGOSEGMENTS_TARGET) cd $(SRC_DIR)/$(LIGOSCALD) && python setup.py install --prefix=$(INSTALL_DIR) ; \ fi ; -# ligo-segments -ligo-segments : $(LOGS_DIR)/ligo-segments.txt +# confluent-kafka-python +kafka-python : $(LOGS_DIR)/kafka-python.txt -$(LOGS_DIR)/ligo-segments.txt : $(LOGS_DIR)/python-ligo-lw.txt $(LIGOSEGMENTS_TARGET) +$(LOGS_DIR)/kafka-python.txt : $(LOGS_DIR)/librdkafka.txt $(KAFKA_PYTHON_TARGET) @echo $^ | sed -e "s@ @\n@g" > $@ -$(LIGOSEGMENTS_TARGET) : $(PYTHONLIGOLW_TARGET) - @echo $(GREEN)ligo-segments$(WHITE) 1>&2 - if [ "${LIGOSEGMENTS_GIT}" = "1" ]; then \ - cd $(LIGOSEGMENTS_REPO) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - else \ - tar -xzf $(TAR_DIR)/$(LIGOSEGMENTS).tar.gz -C $(SRC_DIR) ; \ - cd $(SRC_DIR)/$(LIGOSEGMENTS) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - fi ; +$(KAFKA_PYTHON_TARGET) : $(LIBRDKAFKA_TARGET) + @echo $(GREEN)kafka-python$(WHITE) 1>&2 + tar -xzf $(TAR_DIR)/confluent-kafka-python-$(KAFKA_PYTHON).tar.gz -C $(SRC_DIR) ; \ + cd $(SRC_DIR)/confluent-kafka-python-$(KAFKA_PYTHON) && CFLAGS="$(CFLAGS)" C_INCLUDE_PATH=$(INSTALL_DIR)/include LIBRARY_PATH=$(INSTALL_DIR)/lib python setup.py install --prefix=$(INSTALL_DIR) ; \ -# python-ligo-lw -python-ligo-lw : $(LOGS_DIR)/python-ligo-lw.txt +# librdkafka +librdkafka : $(LOGS_DIR)/librdkafka.txt -$(LOGS_DIR)/python-ligo-lw.txt : $(LOGS_DIR)/glue.txt $(PYTHONLIGOLW_TARGET) +$(LOGS_DIR)/librdkafka.txt : $(LOGS_DIR)/lalsuite.txt $(LIBRDKAFKA_TARGET) @echo $^ | sed -e "s@ @\n@g" > $@ -$(PYTHONLIGOLW_TARGET) : $(GLUE_TARGET) - @echo $(GREEN)python-ligo-lw$(WHITE) 1>&2 - if [ "${PYTHONLIGOLW_GIT}" = "1" ]; then \ - cd $(PYTHONLIGOLW_REPO) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - else \ - tar -xzf $(TAR_DIR)/$(PYTHONLIGOLW).tar.gz -C $(SRC_DIR) ; \ - cd $(SRC_DIR)/$(PYTHONLIGOLW) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - fi ; - -# glue -glue : $(LOGS_DIR)/glue.txt - -$(LOGS_DIR)/glue.txt : $(LOGS_DIR)/lalsuite.txt $(GLUE_TARGET) - @echo $^ | sed -e "s@ @\n@g" > $@ - -$(GLUE_TARGET) : $(LALAPPS_TARGET) - @echo $(GREEN)glue$(WHITE) 1>&2 - if [ "${GLUE_GIT}" = "1" ]; then \ - cd $(GLUE_REPO) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - else \ - tar -xzf $(TAR_DIR)/$(GLUE).tar.gz -C $(SRC_DIR) ; \ - cd $(SRC_DIR)/$(GLUE) && CFLAGS="${GCCFLAGS}" python setup.py install --prefix=$(INSTALL_DIR) ; \ - fi ; +$(LIBRDKAFKA_TARGET) : $(LALAPPS_TARGET) + @echo $(GREEN)librdkafka$(WHITE) 1>&2 + tar -xzf $(TAR_DIR)/librdkafka-$(LIBRDKAFKA).tar.gz -C $(SRC_DIR) ; \ + cd $(SRC_DIR)/librdkafka-$(LIBRDKAFKA) && ./configure --prefix=$(INSTALL_DIR) ; \ + cd $(SRC_DIR)/librdkafka-$(LIBRDKAFKA) && make -j$(CORES) && make install -j$(CORES) ; \ # lalsuite lalsuite : $(LOGS_DIR)/lalsuite.txt @@ -467,14 +429,9 @@ $(LAL_TARGET) : $(LOGS_DIR)/patch.txt # patches patch : $(LOGS_DIR)/patch.txt -$(LOGS_DIR)/patch.txt : $(LOGS_DIR) $(PATCH_DIR)/gst1.14.patch +$(LOGS_DIR)/patch.txt : $(LOGS_DIR) echo $^ | sed -e "s@ @\n@g" > $@ -$(PATCH_DIR)/gst1.14.patch : $(LOGS_DIR) - @echo $(GREEN)patches$(WHITE) 1>&2 - cp $(GSTLAL_REPO)/gstlal-inspiral/share/O3/optimized/gst1.14.patch $(PATCH_DIR) - cd $(GSTLAL_REPO) && patch -p1 < $(PATCH_DIR)/gst1.14.patch - # git repos $(LOGS_DIR) : mkdir -p $(SRC_DIR) $(INSTALL_DIR) $(PATCH_DIR) $(TAR_DIR) @@ -508,36 +465,6 @@ $(LOGS_DIR) : wget --no-check-certificate http://software.ligo.org/lscsoft/source/lalsuite/$(LALSTOCHASTIC).tar.xz --directory-prefix=$(TAR_DIR) -nc ; \ wget --no-check-certificate http://software.ligo.org/lscsoft/source/lalsuite/$(LALAPPS).tar.xz --directory-prefix=$(TAR_DIR) -nc ; \ fi ; - if [ "${GLUE_GIT}" = "1" ]; then \ - if [ -f $@ ] ; then \ - echo "Glue git repo exists" ; \ - else \ - mkdir -p $(GLUE_REPO) ; \ - git clone -b $(GLUE_GIT_BRANCH) https://git.ligo.org/lscsoft/glue.git $(GLUE_REPO) ; \ - fi ; \ - else \ - wget --no-check-certificate http://software.ligo.org/lscsoft/source/$(GLUE).tar.gz --directory-prefix=$(TAR_DIR) -nc ; \ - fi ; - if [ "${PYTHONLIGOLW_GIT}" = "1" ]; then \ - if [ -f $@ ] ; then \ - echo "Python-ligo-lw git repo exists" ; \ - else \ - mkdir -p $(PYTHONLIGOLW_REPO) ; \ - git clone -b $(PYTHONLIGOLW_GIT_BRANCH) https://git.ligo.org/kipp.cannon/python-ligo-lw.git $(PYTHONLIGOLW_REPO) ; \ - fi ; \ - else \ - wget --no-check-certificate http://software.ligo.org/lscsoft/source/$(PYTHONLIGOLW).tar.gz --directory-prefix=$(TAR_DIR) -nc ; \ - fi ; - if [ "${LIGOSEGMENTS_GIT}" = "1" ]; then \ - if [ -f $@ ] ; then \ - echo "Ligo-segments git repo exists" ; \ - else \ - mkdir -p $(LIGOSEGMENTS_REPO) ; \ - git clone -b $(LIGOSEGMENTS_GIT_BRANCH) https://git.ligo.org/lscsoft/ligo-segments.git $(LIGOSEGMENTS_REPO) ; \ - fi ; \ - else \ - wget --no-check-certificate http://software.ligo.org/lscsoft/source/$(LIGOSEGMENTS).tar.gz --directory-prefix=$(TAR_DIR) -nc ; \ - fi ; if [ "${GSTLAL_GIT}" = "1" ]; then \ if [ -f $@ ] ; then \ echo "Gstlal git repo exists" ; \ diff --git a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_icc_all b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_icc_all index 00bb013ddcaeccf8f1d49688da16245031b9b599..4a119a96abfe68406283a99d775298a233c3d764 100644 --- a/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_icc_all +++ b/gstlal-inspiral/share/O3/optimized/Makefile.ligosoftware_icc_all @@ -54,24 +54,24 @@ LIGOSCALD_GIT_BRANCH="master" LALSUITE_GIT_BRANCH="master" # Set package release versions -GSTLALINSPIRAL=gstlal-inspiral-1.6.4 -GSTLALCALIBRATION=gstlal-calibration-1.2.9 +GSTLALINSPIRAL=gstlal-inspiral-1.6.5 +GSTLALCALIBRATION=gstlal-calibration-1.2.10 GSTLALBURST=gstlal-burst-0.1.1 -GSTLALUGLY=gstlal-ugly-1.6.3 +GSTLALUGLY=gstlal-ugly-1.6.4 GSTLAL=gstlal-1.5.0 -LIGOSCALD=ligo-scald-0.4.0 +LIGOSCALD=ligo-scald-0.4.1 KAFKA_PYTHON=0.11.5 LIBRDKAFKA=0.11.5 -LALAPPS=lalapps-6.23.0 -LALINFERENCE=lalinference-1.10.2 -LALPULSAR=lalpulsar-1.17.1 -LALINSPIRAL=lalinspiral-1.8.1 -LALBURST=lalburst-1.5.1 -LALSIMULATION=lalsimulation-1.8.2 -LALMETAIO=lalmetaio-1.5.0 -LALFRAME=lalframe-1.4.4 -LAL=lal-6.19.2 -GDS=gds-2.18.14 +LALAPPS=lalapps-6.24.0 +LALINFERENCE=lalinference-1.11.0 +LALPULSAR=lalpulsar-1.18.0 +LALINSPIRAL=lalinspiral-1.9.0 +LALBURST=lalburst-1.5.2 +LALSIMULATION=lalsimulation-1.9.0 +LALMETAIO=lalmetaio-1.5.1 +LALFRAME=lalframe-1.4.5 +LAL=lal-6.20.1 +GDS=gds-2.18.17 LDASTOOLSFRAMECPP=ldas-tools-framecpp-2.6.5 LDASTOOLSAL=ldas-tools-al-2.6.2 SWIG=swig-3.0.7 @@ -340,7 +340,6 @@ $(GSTLAL_TARGET) : $(LIGOSCALD_TARGET) # ligo-scald ligo-scald : $(LOGS_DIR)/ligo-scald.txt -#$(LOGS_DIR)/ligo-scald.txt : $(LOGS_DIR)/ligo-segments.txt $(LIGOSCALD_TARGET) $(LOGS_DIR)/ligo-scald.txt : $(LOGS_DIR)/kafka-python.txt $(LIGOSCALD_TARGET) @echo $^ | sed -e "s@ @\n@g" > $@ diff --git a/gstlal-inspiral/share/O3/optimized/gst1.14.patch b/gstlal-inspiral/share/O3/optimized/gst1.14.patch deleted file mode 100644 index 0bc41d3e710e7711bdfcdf41f7e53095da0f88d9..0000000000000000000000000000000000000000 --- a/gstlal-inspiral/share/O3/optimized/gst1.14.patch +++ /dev/null @@ -1,352 +0,0 @@ -diff --git a/gstlal/gst/gst/Makefile.am b/gstlal/gst/gst/Makefile.am -index c3b3344a5..ce4494d28 100644 ---- a/gstlal/gst/gst/Makefile.am -+++ b/gstlal/gst/gst/Makefile.am -@@ -1,6 +1,6 @@ - AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib - --plugin_LTLIBRARIES = libgstlal_adder.la libgstpythonplugin.la -+plugin_LTLIBRARIES = libgstlal_adder.la - - libgstlal_adder_la_SOURCES = \ - gstadder.h gstadder.c \ -@@ -8,7 +8,3 @@ libgstlal_adder_la_SOURCES = \ - libgstlal_adder_la_CFLAGS = $(AM_CFLAGS) $(ORC_CFLAGS) $(gstreamer_CFLAGS) $(gstreamer_audio_CFLAGS) -DGST_PACKAGE_NAME=\"gstlal\" -DGST_PACKAGE_ORIGIN=\"\" - libgstlal_adder_la_LIBADD = $(top_builddir)/lib/gstlal/libgstlal.la $(top_builddir)/lib/gstlal/libgstlaltypes.la - libgstlal_adder_la_LDFLAGS = $(AM_LDFLAGS) $(ORC_LIBS) $(gstreamer_LIBS) $(gstreamer_audio_LIBS) $(GSTLAL_PLUGIN_LDFLAGS) -- --libgstpythonplugin_la_SOURCES = gstpythonplugin.c --libgstpythonplugin_la_CFLAGS = $(AM_CPPFLAGS) $(PYTHON_CPPFLAGS) $(PYGOBJECT_CFLAGS) $(gstreamer_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -DPYTHON_VERSION="\"$(PYTHON_VERSION)\"" -DPY_LIB_LOC="\"$(PYTHON_LIB_LOC)\"" -DPY_ABI_FLAGS="\"$(PYTHON_ABI_FLAGS)\"" -DPY_LIB_SUFFIX="\"$(PYTHON_LIB_SUFFIX)\"" -DGST_API_VERSION="\"$(GSTREAMER_RELEASE)\"" -DPLUGINDIR="\"$(plugindir)\"" --libgstpythonplugin_la_LDFLAGS = $(AM_LDFLAGS) $(PYTHON_LIBS) $(gstreamer_LIBS) $(GSTLAL_PLUGIN_LDFLAGS) $(PYGOBJECT_LIBS) -diff --git a/gstlal/gst/gst/gstpythonplugin.c b/gstlal/gst/gst/gstpythonplugin.c -deleted file mode 100644 -index f3b713db4..000000000 ---- a/gstlal/gst/gst/gstpythonplugin.c -+++ /dev/null -@@ -1,326 +0,0 @@ --/* gst-python -- * Copyright (C) 2009 Edward Hervey <bilboed@bilboed.com> -- * 2005 Benjamin Otte <otte@gnome.org> -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Library General Public -- * License as published by the Free Software Foundation; either -- * version 2 of the License, or (at your option) any later version. -- * -- * This library 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 -- * Library General Public License for more details. -- * -- * You should have received a copy of the GNU Library General Public -- * License along with this library; if not, write to the -- * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- * Boston, MA 02111-1307, USA. -- */ -- --#ifdef HAVE_CONFIG_H --#include "config.h" --#endif -- --/* include this first, before NO_IMPORT_PYGOBJECT is defined */ --#include <pygobject.h> --#include <gst/gst.h> --#include <gmodule.h> --#include <Python.h> -- --void *_PyGstElement_Type; -- --GST_DEBUG_CATEGORY_STATIC (pyplugindebug); --#define GST_CAT_DEFAULT pyplugindebug -- --#define GST_ORIGIN "http://gstreamer.freedesktop.org" -- --static PyObject *element; -- --static gboolean --gst_python_plugin_load_file (GstPlugin * plugin, const char *name) --{ -- PyObject *main_module, *main_locals; -- PyObject *elementfactory; -- PyObject *module; -- const gchar *facname; -- guint rank; -- PyObject *class; -- -- GST_DEBUG ("loading plugin %s", name); -- -- main_module = PyImport_AddModule ("__main__"); -- if (main_module == NULL) { -- GST_WARNING ("Could not get __main__, ignoring plugin %s", name); -- PyErr_Print (); -- PyErr_Clear (); -- return FALSE; -- } -- -- main_locals = PyModule_GetDict (main_module); -- module = -- PyImport_ImportModuleEx ((char *) name, main_locals, main_locals, NULL); -- if (!module) { -- GST_DEBUG ("Could not load module, ignoring plugin %s", name); -- PyErr_Print (); -- PyErr_Clear (); -- return FALSE; -- } -- -- /* Get __gstelementfactory__ from file */ -- elementfactory = PyObject_GetAttrString (module, "__gstelementfactory__"); -- if (!elementfactory) { -- GST_DEBUG ("python file doesn't contain __gstelementfactory__"); -- PyErr_Clear (); -- return FALSE; -- } -- -- /* parse tuple : name, rank, gst.ElementClass */ -- if (!PyArg_ParseTuple (elementfactory, "sIO", &facname, &rank, &class)) { -- GST_WARNING ("__gstelementfactory__ isn't correctly formatted"); -- PyErr_Print (); -- PyErr_Clear (); -- Py_DECREF (elementfactory); -- return FALSE; -- } -- -- if (!PyObject_IsSubclass (class, (PyObject *) & PyGObject_Type)) { -- GST_WARNING ("the class provided isn't a subclass of GObject.Object"); -- PyErr_Print (); -- PyErr_Clear (); -- Py_DECREF (elementfactory); -- Py_DECREF (class); -- return FALSE; -- } -- -- if (!g_type_is_a (pyg_type_from_object (class), GST_TYPE_ELEMENT)) { -- GST_WARNING ("the class provided isn't a subclass of Gst.Element"); -- PyErr_Print (); -- PyErr_Clear (); -- Py_DECREF (elementfactory); -- Py_DECREF (class); -- return FALSE; -- } -- -- GST_INFO ("Valid plugin"); -- Py_DECREF (elementfactory); -- -- return gst_element_register (plugin, facname, rank, -- pyg_type_from_object (class)); --} -- --static gboolean --gst_python_load_directory (GstPlugin * plugin, gchar * path) --{ -- GDir *dir; -- const gchar *file; -- GError *error = NULL; -- gboolean ret = TRUE; -- -- dir = g_dir_open (path, 0, &error); -- if (!dir) { -- /*retval should probably be depending on error, but since we ignore it... */ -- GST_DEBUG ("Couldn't open Python plugin dir: %s", error->message); -- g_error_free (error); -- return FALSE; -- } -- while ((file = g_dir_read_name (dir))) { -- /* FIXME : go down in subdirectories */ -- if (g_str_has_suffix (file, ".py")) { -- gsize len = strlen (file) - 3; -- gchar *name = g_strndup (file, len); -- ret &= gst_python_plugin_load_file (plugin, name); -- g_free (name); -- } -- } -- return TRUE; --} -- --static gboolean --gst_python_plugin_load (GstPlugin * plugin) --{ -- PyObject *sys_path; -- const gchar *plugin_path; -- gboolean ret = TRUE; -- -- sys_path = PySys_GetObject ("path"); -- -- /* Mimic the order in which the registry is checked in core */ -- -- /* 1. check env_variable GST_PLUGIN_PATH */ -- plugin_path = g_getenv ("GST_PLUGIN_PATH"); -- if (plugin_path) { -- char **list; -- int i; -- -- GST_DEBUG ("GST_PLUGIN_PATH set to %s", plugin_path); -- list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); -- for (i = 0; list[i]; i++) { -- gchar *sysdir = g_build_filename (list[i], "python", NULL); -- PyList_Insert (sys_path, 0, PyUnicode_FromString (sysdir)); -- gst_python_load_directory (plugin, sysdir); -- g_free (sysdir); -- } -- -- g_strfreev (list); -- } -- -- /* 2. Check for GST_PLUGIN_SYSTEM_PATH */ -- plugin_path = g_getenv ("GST_PLUGIN_SYSTEM_PATH"); -- if (plugin_path == NULL) { -- char *home_plugins; -- -- /* 2.a. Scan user and system-wide plugin directory */ -- GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH not set"); -- -- /* plugins in the user's home directory take precedence over -- * system-installed ones */ -- home_plugins = g_build_filename (g_get_home_dir (), -- ".gstreamer-" GST_API_VERSION, "plugins", "python", NULL); -- PyList_Insert (sys_path, 0, PyUnicode_FromString (home_plugins)); -- gst_python_load_directory (plugin, home_plugins); -- g_free (home_plugins); -- -- /* add the main (installed) library path */ -- PyList_Insert (sys_path, 0, PyUnicode_FromString (PLUGINDIR "/python")); -- gst_python_load_directory (plugin, PLUGINDIR "/python"); -- } else { -- gchar **list; -- gint i; -- -- /* 2.b. Scan GST_PLUGIN_SYSTEM_PATH */ -- GST_DEBUG ("GST_PLUGIN_SYSTEM_PATH set to %s", plugin_path); -- list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0); -- for (i = 0; list[i]; i++) { -- gchar *sysdir; -- -- sysdir = g_build_filename (list[i], "python", NULL); -- -- PyList_Insert (sys_path, 0, PyUnicode_FromString (sysdir)); -- gst_python_load_directory (plugin, sysdir); -- g_free (sysdir); -- } -- g_strfreev (list); -- } -- -- -- return ret; --} -- --static gboolean --plugin_init (GstPlugin * plugin) --{ -- PyGILState_STATE state; -- PyObject *gi, *require_version, *args, *gst, *dict, *pyplugin; -- gboolean we_initialized = FALSE; -- GModule *libpython; -- gpointer has_python = NULL; -- PyObject *seq, *list; -- int i, len; -- -- GST_DEBUG_CATEGORY_INIT (pyplugindebug, "pyplugin", 0, -- "Python plugin loader"); -- -- gst_plugin_add_dependency_simple (plugin, -- "HOME/.gstreamer-" GST_API_VERSION -- "/plugins/python:GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", -- PLUGINDIR "/python:HOME/.gstreamer-" GST_API_VERSION "/plugins/python:" -- "GST_PLUGIN_SYSTEM_PATH/python:GST_PLUGIN_PATH/python", NULL, -- GST_PLUGIN_DEPENDENCY_FLAG_NONE); -- -- GST_LOG ("Checking to see if libpython is already loaded"); -- if (g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LOCAL), -- "_Py_NoneStruct", &has_python) && has_python) { -- GST_LOG ("libpython is already loaded"); -- } else { -- GST_LOG ("loading libpython"); -- libpython = -- g_module_open (PY_LIB_LOC "/libpython" PYTHON_VERSION PY_ABI_FLAGS -- "." PY_LIB_SUFFIX, 0); -- if (!libpython) { -- g_critical ("Couldn't g_module_open libpython. Reason: %s", -- g_module_error ()); -- return FALSE; -- } -- } -- -- if (!Py_IsInitialized ()) { -- GST_LOG ("python wasn't initialized"); -- /* set the correct plugin for registering stuff */ -- Py_Initialize (); -- we_initialized = TRUE; -- } else { -- GST_LOG ("python was already initialized"); -- state = PyGILState_Ensure (); -- } -- -- GST_LOG ("initializing pygobject"); -- if (!pygobject_init (3, 0, 0)) { -- g_critical ("pygobject initialization failed"); -- return FALSE; -- } -- -- gi = PyImport_ImportModule ("gi"); -- if (!gi) { -- g_critical ("can't find gi"); -- return FALSE; -- } -- -- -- require_version = PyObject_GetAttrString (gi, (char *) "require_version"); -- args = PyTuple_Pack (2, PyUnicode_FromString ("Gst"), -- PyUnicode_FromString ("1.0")); -- PyObject_CallObject (require_version, args); -- Py_DECREF (require_version); -- Py_DECREF (args); -- Py_DECREF (gi); -- -- gst = PyImport_ImportModule ("gi.repository.Gst"); -- if (!gst) { -- g_critical ("can't find gi.repository.Gst"); -- return FALSE; -- } -- -- if (we_initialized) { -- PyObject *tmp; -- -- dict = PyModule_GetDict (gst); -- if (!dict) { -- g_critical ("gi.repository.Gst is no dict"); -- return FALSE; -- } -- -- tmp = -- PyObject_GetAttr (PyMapping_GetItemString (dict, -- "_introspection_module"), PyUnicode_FromString ("__dict__")); -- -- _PyGstElement_Type = PyMapping_GetItemString (tmp, "Element"); -- -- if (!_PyGstElement_Type) { -- g_critical ("Could not get Gst.Element"); -- return FALSE; -- } -- -- pyplugin = pygobject_new (G_OBJECT (plugin)); -- if (!pyplugin || PyModule_AddObject (gst, "__plugin__", pyplugin) != 0) { -- g_critical ("Couldn't set __plugin__ attribute"); -- if (pyplugin) -- Py_DECREF (pyplugin); -- return FALSE; -- } -- } -- -- gst_python_plugin_load (plugin); -- -- if (we_initialized) { -- /* We need to release the GIL since we're going back to C land */ -- PyEval_SaveThread (); -- } else -- PyGILState_Release (state); -- return TRUE; --} -- --GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -- GST_VERSION_MINOR, python, -- "loader for plugins written in python", -- plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_ORIGIN)