Merged r10385:10413 from michaelld/swig_tweaks into trunk. Passes distcheck.
[debian/gnuradio] / gnuradio-core / src / lib / swig / Makefile.am
index 77bd03083613b114ced315bcdff78ea07238f4ce..98c0321994362a3878f5bab9fff0c0dda0fe1ebd 100644 (file)
@@ -1,11 +1,11 @@
 #
-# Copyright 2001,2003,2004,2005 Free Software Foundation, Inc.
+# Copyright 2001,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
 # 
 # This file is part of GNU Radio
 # 
 # GNU Radio 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 2, or (at your option)
+# the Free Software Foundation; either version 3, or (at your option)
 # any later version.
 # 
 # GNU Radio is distributed in the hope that it will be useful,
@@ -15,8 +15,8 @@
 # 
 # You should have received a copy of the GNU General Public License
 # along with GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
 # 
 
 include $(top_srcdir)/Makefile.common
@@ -28,68 +28,240 @@ include $(top_srcdir)/Makefile.common
 grgrpythondir = $(grpythondir)/gr
 grgrlibdir    = $(grpyexecdir)/gr
 
-
-INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir)
-
+AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir) \
+        $(WITH_INCLUDES)
 
 EXTRA_DIST = gen-swig-bug-fix
 
-
 LOCAL_IFILES =                         \
        gnuradio.i                      \
-       shared_ptr.i                                    
+       gr_swig_block_magic.i           \
+       gr_shared_ptr.i                 \
+       sw_general.i                    \
+       sw_gengen.i                     \
+       sw_filter.i                     \
+       sw_io.i                         \
+       sw_runtime.i
 
 ALL_IFILES =                           \
-       $(LOCAL_IFILES)                 
+       $(LOCAL_IFILES)
 
+# ----------------------------------------------------------------
+# We've split the previously monstrous gnuradio_swig_python into
+# 5 smaller pieces.  This reduces compile time coupling and
+# creates smaller pieces for the compiler to digest.
+# prior to this change, on X86_64, g++'s resident set size was
+# 650MB!
 
 BUILT_SOURCES =                                \
-       gnuradio_swig_python.cc         \
-       gnuradio_swig_python.py         \
-       gnuradio_swig_python.h          \
+       gnuradio_swig_py_runtime.cc     \
+       gnuradio_swig_py_runtime.py     \
+       gnuradio_swig_py_runtime.h      \
+       gnuradio_swig_py_general.cc     \
+       gnuradio_swig_py_general.py     \
+       gnuradio_swig_py_general.h      \
+       gnuradio_swig_py_gengen.cc      \
+       gnuradio_swig_py_gengen.py      \
+       gnuradio_swig_py_gengen.h       \
+       gnuradio_swig_py_filter.cc      \
+       gnuradio_swig_py_filter.py      \
+       gnuradio_swig_py_filter.h       \
+       gnuradio_swig_py_io.cc          \
+       gnuradio_swig_py_io.py          \
+       gnuradio_swig_py_io.h           \
        gnuradio_swig_bug_workaround.h  
 
+# ----------------------------------------------------------------
+# We break this up into 5 libraries...
+
+grgrlib_LTLIBRARIES =                          \
+       _gnuradio_swig_py_runtime.la            \
+       _gnuradio_swig_py_general.la            \
+       _gnuradio_swig_py_gengen.la             \
+       _gnuradio_swig_py_filter.la             \
+       _gnuradio_swig_py_io.la                 
+
+
 grgrpython_PYTHON =                    \
-       gnuradio_swig_python.py         
+       gnuradio_swig_python.py         \
+       gnuradio_swig_py_runtime.py     \
+       gnuradio_swig_py_general.py     \
+       gnuradio_swig_py_gengen.py      \
+       gnuradio_swig_py_filter.py      \
+       gnuradio_swig_py_io.py          
+
 
+# This results in the code being compiled with -O1 instead of -g -O2
 
-SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(INCLUDES)
+_gnuradio_swig_py_runtime_la_CXXFLAGS = @swig_CXXFLAGS@
+_gnuradio_swig_py_general_la_CXXFLAGS = @swig_CXXFLAGS@
+_gnuradio_swig_py_gengen_la_CXXFLAGS  = @swig_CXXFLAGS@
+_gnuradio_swig_py_filter_la_CXXFLAGS  = @swig_CXXFLAGS@
+_gnuradio_swig_py_io_la_CXXFLAGS      = @swig_CXXFLAGS@
 
 
 # ----------------------------------------------------------------
-# _gnuradio_swig_python contains all the glue that implements
-# the gnuradio.gr python package
+# Part 1: sw_runtime.i -> gnuradio_swig_py_runtime
+#
+# We continue to call this gnuradio.i to avoid having to touch
+# lots of code in other modules
+
+_gnuradio_swig_py_runtime_la_SOURCES =                 \
+       gnuradio_swig_py_runtime.cc             
+
+
+_gnuradio_swig_py_runtime_la_LIBADD  =                 \
+       $(GNURADIO_CORE_LA)                     \
+       $(PYTHON_LDFLAGS)                       \
+       -lstdc++
+
+_gnuradio_swig_py_runtime_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
+
+
+# KLUDGE: Force runtime include of gnuradio_swig_py_runtime.d dependency file.
+# This is not guaranteed to be portable, but will probably work.
+# If it works, we have accurate dependencies for our swig stuff, which is good.
+@am__include@ @am__quote@./gnuradio_swig_py_runtime.d@am__quote@
+
+gnuradio_swig_py_runtime.py gnuradio_swig_py_runtime.h: gnuradio_swig_py_runtime.cc
+
+gnuradio_swig_py_runtime.cc : $(srcdir)/sw_runtime.i
+       if $(SWIG) $(STD_SWIG_PYTHON_ARGS) -MMD -MF gnuradio_swig_py_runtime.Td -module gnuradio_swig_py_runtime -o gnuradio_swig_py_runtime.cc $(srcdir)/sw_runtime.i ;\
+       then if test $(host_os) = mingw32; \
+            then sed 's,\\\\,/,g' <gnuradio_swig_py_runtime.Td >gnuradio_swig_py_runtime.d; rm -f gnuradio_swig_py_runtime.Td; \
+            else mv -f gnuradio_swig_py_runtime.Td gnuradio_swig_py_runtime.d; fi \
+       else rm -f gnuradio_swig_py_runtime.Td; exit 1; fi 
 
-grgrlib_LTLIBRARIES =                                  \
-       _gnuradio_swig_python.la
 
-_gnuradio_swig_python_la_SOURCES =                     \
-       gnuradio_swig_python.cc         
+# ----------------------------------------------------------------
+# Part 2: sw_general.i -> gnuradio_swig_py_general
+#
+
+_gnuradio_swig_py_general_la_SOURCES =                 \
+       gnuradio_swig_py_general.cc             
 
 
-_gnuradio_swig_python_la_LIBADD  =                     \
-       $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la       \
-       $(PYTHON_LDFLAGS)                               \
+_gnuradio_swig_py_general_la_LIBADD  =                 \
+       $(GNURADIO_CORE_LA)                     \
+       $(PYTHON_LDFLAGS)                       \
        -lstdc++
 
-_gnuradio_swig_python_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
+_gnuradio_swig_py_general_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
 
 
-# KLUDGE: Force runtime include of gnuradio_swig_python.d dependency file.
+# KLUDGE: Force general include of gnuradio_swig_py_general.d dependency file.
 # This is not guaranteed to be portable, but will probably work.
 # If it works, we have accurate dependencies for our swig stuff, which is good.
-@am__include@ @am__quote@./gnuradio_swig_python.d@am__quote@
+@am__include@ @am__quote@./gnuradio_swig_py_general.d@am__quote@
 
-gnuradio_swig_python.cc gnuradio_swig_python.py gnuradio_swig_python.h : gnuradio.i
-       if $(SWIG) $(SWIGPYTHONARGS) -MMD -MF gnuradio_swig_python.Td -module gnuradio_swig_python -o gnuradio_swig_python.cc $< ;\
+gnuradio_swig_py_general.py gnuradio_swig_py_general.h: gnuradio_swig_py_general.cc
+
+gnuradio_swig_py_general.cc : $(srcdir)/sw_general.i
+       if $(SWIG) $(STD_SWIG_PYTHON_ARGS) -MMD -MF gnuradio_swig_py_general.Td -module gnuradio_swig_py_general -o gnuradio_swig_py_general.cc $(srcdir)/sw_general.i ;\
        then if test $(host_os) = mingw32; \
-            then sed 's,\\\\,/,g' <gnuradio_swig_python.Td >gnuradio_swig_python.d; rm -f gnuradio_swig_python.Td; \
-            else mv -f gnuradio_swig_python.Td gnuradio_swig_python.d; fi \
-       else rm -f gnuradio_swig_python.Td; exit 1; fi 
+            then sed 's,\\\\,/,g' <gnuradio_swig_py_general.Td >gnuradio_swig_py_general.d; rm -f gnuradio_swig_py_general.Td; \
+            else mv -f gnuradio_swig_py_general.Td gnuradio_swig_py_general.d; fi \
+       else rm -f gnuradio_swig_py_general.Td; exit 1; fi 
+
 
-gnuradio_swig_bug_workaround.h : gnuradio_swig_python.cc $(srcdir)/gen-swig-bug-fix
-       $(srcdir)/gen-swig-bug-fix $< $@
+# ----------------------------------------------------------------
+# Part 3: sw_gengen.i -> gnuradio_swig_py_gengen
+#
+
+_gnuradio_swig_py_gengen_la_SOURCES =          \
+       gnuradio_swig_py_gengen.cc              
+
+
+_gnuradio_swig_py_gengen_la_LIBADD  =          \
+       $(GNURADIO_CORE_LA)                     \
+       $(PYTHON_LDFLAGS)                       \
+       -lstdc++
+
+_gnuradio_swig_py_gengen_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
+
+
+# KLUDGE: Force gengen include of gnuradio_swig_py_gengen.d dependency file.
+# This is not guaranteed to be portable, but will probably work.
+# If it works, we have accurate dependencies for our swig stuff, which is good.
+@am__include@ @am__quote@./gnuradio_swig_py_gengen.d@am__quote@
+
+gnuradio_swig_py_gengen.py gnuradio_swig_py_gengen.h: gnuradio_swig_py_gengen.cc
+
+gnuradio_swig_py_gengen.cc : $(srcdir)/sw_gengen.i
+       if $(SWIG) $(STD_SWIG_PYTHON_ARGS) -MMD -MF gnuradio_swig_py_gengen.Td -module gnuradio_swig_py_gengen -o gnuradio_swig_py_gengen.cc $(srcdir)/sw_gengen.i ;\
+       then if test $(host_os) = mingw32; \
+            then sed 's,\\\\,/,g' <gnuradio_swig_py_gengen.Td >gnuradio_swig_py_gengen.d; rm -f gnuradio_swig_py_gengen.Td; \
+            else mv -f gnuradio_swig_py_gengen.Td gnuradio_swig_py_gengen.d; fi \
+       else rm -f gnuradio_swig_py_gengen.Td; exit 1; fi 
+
+
+# ----------------------------------------------------------------
+# Part 4: sw_filter.i -> gnuradio_swig_py_filter
+#
+
+_gnuradio_swig_py_filter_la_SOURCES =          \
+       gnuradio_swig_py_filter.cc              
+
+
+_gnuradio_swig_py_filter_la_LIBADD  =          \
+       $(GNURADIO_CORE_LA)                     \
+       $(PYTHON_LDFLAGS)                       \
+       -lstdc++
+
+_gnuradio_swig_py_filter_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
+
+
+# KLUDGE: Force filter include of gnuradio_swig_py_filter.d dependency file.
+# This is not guaranteed to be portable, but will probably work.
+# If it works, we have accurate dependencies for our swig stuff, which is good.
+@am__include@ @am__quote@./gnuradio_swig_py_filter.d@am__quote@
+
+gnuradio_swig_py_filter.py gnuradio_swig_py_filter.h: gnuradio_swig_py_filter.cc
+
+gnuradio_swig_py_filter.cc : $(srcdir)/sw_filter.i
+       if $(SWIG) $(STD_SWIG_PYTHON_ARGS) -MMD -MF gnuradio_swig_py_filter.Td -module gnuradio_swig_py_filter -o gnuradio_swig_py_filter.cc $(srcdir)/sw_filter.i ;\
+       then if test $(host_os) = mingw32; \
+            then sed 's,\\\\,/,g' <gnuradio_swig_py_filter.Td >gnuradio_swig_py_filter.d; rm -f gnuradio_swig_py_filter.Td; \
+            else mv -f gnuradio_swig_py_filter.Td gnuradio_swig_py_filter.d; fi \
+       else rm -f gnuradio_swig_py_filter.Td; exit 1; fi 
+
+
+# ----------------------------------------------------------------
+# Part 5: sw_io.i -> gnuradio_swig_py_io
+#
+
+_gnuradio_swig_py_io_la_SOURCES =              \
+       gnuradio_swig_py_io.cc          
+
+
+_gnuradio_swig_py_io_la_LIBADD  =              \
+       $(GNURADIO_CORE_LA)                     \
+       $(PYTHON_LDFLAGS)                       \
+       -lstdc++
+
+_gnuradio_swig_py_io_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
+
+
+# KLUDGE: Force io include of gnuradio_swig_py_io.d dependency file.
+# This is not guaranteed to be portable, but will probably work.
+# If it works, we have accurate dependencies for our swig stuff, which is good.
+@am__include@ @am__quote@./gnuradio_swig_py_io.d@am__quote@
+
+gnuradio_swig_py_io.py gnuradio_swig_py_io.h: gnuradio_swig_py_io.cc
+
+gnuradio_swig_py_io.cc : $(srcdir)/sw_io.i
+       if $(SWIG) $(STD_SWIG_PYTHON_ARGS) -MMD -MF gnuradio_swig_py_io.Td -module gnuradio_swig_py_io -o gnuradio_swig_py_io.cc $(srcdir)/sw_io.i ;\
+       then if test $(host_os) = mingw32; \
+            then sed 's,\\\\,/,g' <gnuradio_swig_py_io.Td >gnuradio_swig_py_io.d; rm -f gnuradio_swig_py_io.Td; \
+            else mv -f gnuradio_swig_py_io.Td gnuradio_swig_py_io.d; fi \
+       else rm -f gnuradio_swig_py_io.Td; exit 1; fi 
+
+
+# ----------------------------------------------------------------
+# FIXME As of swig 1.3.31, this still seems to be required...
 
+gnuradio_swig_bug_workaround.h : gnuradio_swig_py_runtime.cc $(srcdir)/gen-swig-bug-fix
+       $(PYTHON) $(srcdir)/gen-swig-bug-fix gnuradio_swig_py_runtime.cc $@
 
 # ----------------------------------------------------------------
 
@@ -108,4 +280,9 @@ swiginclude_HEADERS =                               \
 MOSTLYCLEANFILES = \
        $(BUILT_SOURCES) *~ *.pyc 
 
-DISTCLEANFILES = gnuradio_swig_python.d
+DISTCLEANFILES =                       \
+       gnuradio_swig_py_runtime.d      \
+       gnuradio_swig_py_general.d      \
+       gnuradio_swig_py_gengen.d       \
+       gnuradio_swig_py_filter.d       \
+       gnuradio_swig_py_io.d