rice 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Doxyfile +1 -1
- data/Makefile.in +3 -2
- data/README +247 -16
- data/aclocal.m4 +62 -51
- data/configure +1585 -1456
- data/extconf.rb +9 -1
- data/rice/Arg.hpp +8 -0
- data/rice/Arg_impl.hpp +124 -0
- data/rice/Arg_operators.cpp +21 -0
- data/rice/Arg_operators.hpp +19 -0
- data/rice/Constructor.hpp +150 -0
- data/rice/Data_Type.ipp +51 -6
- data/rice/Director.cpp +19 -0
- data/rice/Director.hpp +47 -0
- data/rice/Enum.hpp +2 -3
- data/rice/Enum.ipp +1 -1
- data/rice/Hash.hpp +1 -1
- data/rice/Makefile.am +7 -0
- data/rice/Makefile.in +18 -7
- data/rice/Module_impl.hpp +36 -3
- data/rice/Module_impl.ipp +56 -7
- data/rice/VM.cpp +2 -2
- data/rice/config.hpp +1 -1
- data/rice/detail/Arguments.hpp +118 -0
- data/rice/detail/Auto_Function_Wrapper.hpp +206 -96
- data/rice/detail/Auto_Function_Wrapper.ipp +1687 -144
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +234 -123
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +1133 -306
- data/rice/detail/Caster.hpp +3 -1
- data/rice/detail/creation_funcs.hpp +0 -8
- data/rice/detail/creation_funcs.ipp +1 -27
- data/rice/detail/define_method_and_auto_wrap.hpp +3 -1
- data/rice/detail/define_method_and_auto_wrap.ipp +4 -3
- data/rice/detail/object_call.ipp +1 -1
- data/rice/detail/ruby.hpp +1 -33
- data/rice/detail/wrap_function.hpp +103 -48
- data/rice/detail/wrap_function.ipp +154 -96
- data/rice/generate_code.rb +520 -55
- data/rice/global_function.hpp +12 -1
- data/rice/global_function.ipp +14 -2
- data/ruby/Makefile.in +5 -4
- data/ruby/lib/Makefile.in +4 -3
- data/ruby/lib/version.rb +1 -1
- data/sample/Makefile.in +4 -3
- data/test/Makefile.am +2 -0
- data/test/Makefile.in +32 -13
- data/test/test_Class.cpp +36 -14
- data/test/test_Constructor.cpp +176 -1
- data/test/test_Data_Type.cpp +121 -0
- data/test/test_Director.cpp +225 -0
- data/test/test_Enum.cpp +33 -0
- data/test/test_Module.cpp +175 -0
- data/test/test_global_functions.cpp +70 -1
- metadata +27 -7
data/Doxyfile
CHANGED
@@ -23,7 +23,7 @@ PROJECT_NAME = Rice
|
|
23
23
|
# This could be handy for archiving the generated documentation or
|
24
24
|
# if some version control system is used.
|
25
25
|
|
26
|
-
PROJECT_NUMBER = 1.
|
26
|
+
PROJECT_NUMBER = 1.2
|
27
27
|
|
28
28
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
29
29
|
# base path where the generated documentation will be put.
|
data/Makefile.in
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Makefile.in generated by automake 1.10.
|
1
|
+
# Makefile.in generated by automake 1.10.2 from Makefile.am.
|
2
2
|
# @configure_input@
|
3
3
|
|
4
4
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
@@ -229,6 +229,7 @@ sharedstatedir = @sharedstatedir@
|
|
229
229
|
srcdir = @srcdir@
|
230
230
|
sysconfdir = @sysconfdir@
|
231
231
|
target_alias = @target_alias@
|
232
|
+
top_build_prefix = @top_build_prefix@
|
232
233
|
top_builddir = @top_builddir@
|
233
234
|
top_srcdir = @top_srcdir@
|
234
235
|
AUTOMAKE_OPTIONS = foreign 1.5
|
@@ -384,7 +385,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|
384
385
|
unique=`for i in $$list; do \
|
385
386
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
386
387
|
done | \
|
387
|
-
$(AWK) '{ files[$$0] = 1;
|
388
|
+
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
388
389
|
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
389
390
|
mkid -fID $$unique
|
390
391
|
tags: TAGS
|
data/README
CHANGED
@@ -15,13 +15,17 @@ What Rice gives you:
|
|
15
15
|
\li Smart pointers for handling garbage collection
|
16
16
|
\li Wrappers for most builtin types to simplify calling code
|
17
17
|
|
18
|
-
\section
|
18
|
+
\section project Project Details
|
19
|
+
|
20
|
+
The source is hosted on github: http://github.com/jameskilton/rice
|
21
|
+
|
22
|
+
Bug tracking: http://github.com/jameskilton/rice/issues
|
19
23
|
|
20
|
-
|
21
|
-
page:
|
24
|
+
Mailing List: http://groups.google.com/group/ruby-rice
|
22
25
|
|
23
|
-
|
26
|
+
\section installation Installation
|
24
27
|
|
28
|
+
There are two ways to install Rice. You can download the tarball from the repository,
|
25
29
|
extract it and:
|
26
30
|
|
27
31
|
\code
|
@@ -36,7 +40,7 @@ or you can install via RubyGems
|
|
36
40
|
gem install rice
|
37
41
|
\endcode
|
38
42
|
|
39
|
-
Note to Windows users: Rice is only known to properly compile and run under Cygwin and Mingw.
|
43
|
+
Note to Windows users: Rice is only known to properly compile and run under Cygwin and Mingw.
|
40
44
|
|
41
45
|
\section tutorial Tutorial
|
42
46
|
|
@@ -53,7 +57,8 @@ The first step is to create an extconf.rb file:
|
|
53
57
|
\endcode
|
54
58
|
|
55
59
|
Note that we use mkmf-rice instead of mkmf. This will ensure that the
|
56
|
-
extension will be linked with standard C++ library
|
60
|
+
extension will be linked with standard C++ library along with the Rice
|
61
|
+
library, and allow access to the Rice header files.
|
57
62
|
|
58
63
|
Next we create our extension and save it to test.cpp:
|
59
64
|
|
@@ -111,7 +116,7 @@ that this is a class and not some other type of object. Some other
|
|
111
116
|
naming conventions that are commonly used:
|
112
117
|
|
113
118
|
\li rb_c variable name prefix for a Class
|
114
|
-
\li
|
119
|
+
\li rb_m variable name prefix for a Module
|
115
120
|
\li rb_e variable name prefix for an Exception type
|
116
121
|
\li rb_ function prefix for a function in the Ruby C API
|
117
122
|
\li rb_f_ function prefix to differentiate between an API function that
|
@@ -147,7 +152,7 @@ Now let's add a method to our class:
|
|
147
152
|
{
|
148
153
|
Class rb_cTest =
|
149
154
|
define_class("Test")
|
150
|
-
.define_method("hello", test_hello);
|
155
|
+
.define_method("hello", &test_hello);
|
151
156
|
}
|
152
157
|
\endcode
|
153
158
|
|
@@ -179,8 +184,8 @@ We could also add an #initialize method to our class:
|
|
179
184
|
{
|
180
185
|
Class rb_cTest =
|
181
186
|
define_class("Test")
|
182
|
-
.define_method("initialize", test_initialize);
|
183
|
-
.define_method("hello", test_hello);
|
187
|
+
.define_method("initialize", &test_initialize);
|
188
|
+
.define_method("hello", &test_hello);
|
184
189
|
}
|
185
190
|
\endcode
|
186
191
|
|
@@ -338,7 +343,7 @@ The Data_Object class can be used to wrap a newly-created object:
|
|
338
343
|
|
339
344
|
\code
|
340
345
|
Data_Object<Foo> foo(new Foo);
|
341
|
-
\endcode
|
346
|
+
\endcode
|
342
347
|
|
343
348
|
or to unwrap an already-created object:
|
344
349
|
|
@@ -354,7 +359,7 @@ A Data_Object functions like a smart pointer:
|
|
354
359
|
foo->foo();
|
355
360
|
std::cout << *foo << std::endl;
|
356
361
|
\endcode
|
357
|
-
|
362
|
+
|
358
363
|
Like a VALUE or an Object, data stored in a Data_Object will be marked
|
359
364
|
by the garbage collector as long as the Data_Object is on the stack.
|
360
365
|
|
@@ -597,7 +602,7 @@ If we write this:
|
|
597
602
|
extern "C"
|
598
603
|
void Init_Test()
|
599
604
|
{
|
600
|
-
define_global_function("foo", foo);
|
605
|
+
define_global_function("foo", &foo);
|
601
606
|
}
|
602
607
|
\endcode
|
603
608
|
|
@@ -612,11 +617,11 @@ To avoid this problem, it is necessary to write a wrapper function:
|
|
612
617
|
foo(&c);
|
613
618
|
return to_ruby(c);
|
614
619
|
}
|
615
|
-
|
620
|
+
|
616
621
|
extern "C"
|
617
622
|
void Init_Test()
|
618
623
|
{
|
619
|
-
define_global_function("foo", wrap_foo);
|
624
|
+
define_global_function("foo", &wrap_foo);
|
620
625
|
}
|
621
626
|
\endcode
|
622
627
|
|
@@ -625,6 +630,232 @@ have pass-by-variable-reference (it uses pass-by-object-reference).
|
|
625
630
|
|
626
631
|
Future versions of Rice will have a cleaner way of dealing with this.
|
627
632
|
|
633
|
+
|
634
|
+
\section default_arguments Default Arguments
|
635
|
+
|
636
|
+
Going back to our initial C++ class example, lets say that hello() now
|
637
|
+
take a few arguments for what to return, one which has a default value:
|
638
|
+
|
639
|
+
\code
|
640
|
+
class Test
|
641
|
+
{
|
642
|
+
public:
|
643
|
+
Test();
|
644
|
+
std::string hello(std::string first, std::string second = "world");
|
645
|
+
};
|
646
|
+
\endcode
|
647
|
+
|
648
|
+
As default parameter information is not available through templates,
|
649
|
+
it's necessary to define this in Rice explicitly using Rice::Arg:
|
650
|
+
|
651
|
+
\code
|
652
|
+
#include "rice/Data_Type.hpp"
|
653
|
+
#include "rice/Constructor.hpp"
|
654
|
+
|
655
|
+
using namespace Rice;
|
656
|
+
|
657
|
+
extern "C"
|
658
|
+
void Init_Test()
|
659
|
+
{
|
660
|
+
Data_Type<Test> rb_cTest =
|
661
|
+
define_class<Test>("Test")
|
662
|
+
.define_constructor(Constructor<Test>())
|
663
|
+
.define_method("hello",
|
664
|
+
&Test::hello,
|
665
|
+
(Arg("hello"), Arg("second") = "world")
|
666
|
+
);
|
667
|
+
}
|
668
|
+
\endcode
|
669
|
+
|
670
|
+
The syntax here is simply Arg(nameOfParameter)[ = defaultValue]. The name of the
|
671
|
+
parameter is not important (more for readability, and the future for when/if Ruby
|
672
|
+
gets named arguments), but the value set via operator= must match the type
|
673
|
+
of the given parameter.
|
674
|
+
|
675
|
+
These Rice::Arg objects must be in the correct order, and if there are more than
|
676
|
+
one of them they must be surrounded in parentheses, as above, or the compilation
|
677
|
+
will fail.
|
678
|
+
|
679
|
+
It may be required to explicitly cast the default argument values to their
|
680
|
+
appropriate types:
|
681
|
+
|
682
|
+
\code
|
683
|
+
.define_method("hello",
|
684
|
+
&Test::hello,
|
685
|
+
(Arg("hello"), Arg("second") = (std::string)"world")
|
686
|
+
);
|
687
|
+
\endcode
|
688
|
+
|
689
|
+
With this, Ruby will now know about the default arguments, and this wrapper
|
690
|
+
can be used as expected:
|
691
|
+
|
692
|
+
\code
|
693
|
+
t = Test.new
|
694
|
+
t.hello("hello")
|
695
|
+
t.hello("goodnight", "moon")
|
696
|
+
\endcode
|
697
|
+
|
698
|
+
|
699
|
+
\section director Director
|
700
|
+
|
701
|
+
As polymorphism is the most important tennant of Object Oriented Programming,
|
702
|
+
it's important that Rice supports polymorphic calls travelling between C++
|
703
|
+
and Ruby seemlessly. Super calls from Ruby subclasses back into C++ already work,
|
704
|
+
but enabling the other direction requires some extra work. While this isn't
|
705
|
+
something Rice can do on it's own, the Rice::Director class hides most of the
|
706
|
+
details.
|
707
|
+
|
708
|
+
Like SWIG_Director, Rice::Director is a class that is used to build a proxy class
|
709
|
+
to properly send execution up or down the object heiarchy for that class. Take
|
710
|
+
the following class:
|
711
|
+
|
712
|
+
\code
|
713
|
+
class VirtualBase {
|
714
|
+
public:
|
715
|
+
VirtualBase();
|
716
|
+
virtual int doWork();
|
717
|
+
virtual int processWorker() = 0;
|
718
|
+
};
|
719
|
+
\endcode
|
720
|
+
|
721
|
+
Due to the abstract nature of this class, it will not work at all with Rice
|
722
|
+
in it's current form. Any attempt to do so will cause a compilation error due to
|
723
|
+
this class not being constructable. Even without the pure virtual function, any
|
724
|
+
call to VirtualBase::doWork will stop at the C++ level and not pass down into
|
725
|
+
any Ruby subclasses.
|
726
|
+
|
727
|
+
To properly wrap both of these methods, you'll need to build a proxy class
|
728
|
+
that subclasses Rice::Director:
|
729
|
+
|
730
|
+
\code
|
731
|
+
#include "rice/Director.hpp"
|
732
|
+
|
733
|
+
class VirtualBaseProxy : public VirtualBase, public Rice::Director {
|
734
|
+
public:
|
735
|
+
VirtualBaseProxy(Object self) : Rice::Director(self) { }
|
736
|
+
|
737
|
+
virtual int doWork() {
|
738
|
+
if(callIsFromRuby("do_work")) {
|
739
|
+
return VirtualBase::doWork();
|
740
|
+
} else {
|
741
|
+
return from_ruby<int>( getSelf().call("do_work") );
|
742
|
+
}
|
743
|
+
}
|
744
|
+
|
745
|
+
virtual int processWorker() {
|
746
|
+
if(callIsFromRuby("process_worker")) {
|
747
|
+
raisePureVirtual();
|
748
|
+
} else {
|
749
|
+
return from_ruby<int>( getSelf().call("process_worker") );
|
750
|
+
}
|
751
|
+
}
|
752
|
+
};
|
753
|
+
\endcode
|
754
|
+
|
755
|
+
There is a lot going on here, so we'll take go through each part.
|
756
|
+
|
757
|
+
\code
|
758
|
+
class VirtualBaseProxy : public Virtualbase, public Rice::Director {
|
759
|
+
\endcode
|
760
|
+
|
761
|
+
First, the class needs to subclass both the virtual class and Rice::Director.
|
762
|
+
|
763
|
+
\code
|
764
|
+
public:
|
765
|
+
VirtualBaseProxy(Object self) : Rice::Director(self) { }
|
766
|
+
\endcode
|
767
|
+
|
768
|
+
For Rice::Director to work its magic, every instance of this class needs to
|
769
|
+
have a handle to the Ruby instance of this class as well. The constructor
|
770
|
+
must take a Rice::Object as the first argument, then any other arguments follow
|
771
|
+
and should be passed back to the superclass as needed. The code here is the
|
772
|
+
minimum required for a Rice::Director proxy.
|
773
|
+
|
774
|
+
\code
|
775
|
+
virtual int doWork() {
|
776
|
+
if(callIsFromRuby("do_work")) {
|
777
|
+
// Call from Ruby via super, head up the stack
|
778
|
+
return VirtualBase::doWork();
|
779
|
+
} else {
|
780
|
+
// Call from C++ heading down the stack, get self
|
781
|
+
// and call the method in Ruby, taking care to
|
782
|
+
// convert types to and from ruby as needed.
|
783
|
+
return from_ruby<int>( getSelf().call("do_work") );
|
784
|
+
}
|
785
|
+
}
|
786
|
+
\endcode
|
787
|
+
|
788
|
+
Every virtual method needs to have a special definition inside of this proxy class.
|
789
|
+
Use Rice::Director::callIsFromRuby to check if execution is passing up or down
|
790
|
+
the heirarchy. The name passed to this method needs to be the name as exposed to Ruby
|
791
|
+
(which will be seen in the wrapper code below).
|
792
|
+
|
793
|
+
A special case as seen in the proxy method for processWorker is the raisePureVirtual
|
794
|
+
method. In the case of pure virtual methods, the proxy is the top of the heirarchy.
|
795
|
+
This proxy could be written more simply:
|
796
|
+
|
797
|
+
\code
|
798
|
+
virtual int processWorker() {
|
799
|
+
return from_ruby<int>( getSelf().call("process_worker") );
|
800
|
+
}
|
801
|
+
\endcode
|
802
|
+
|
803
|
+
but if the Ruby code accidentally calls #super, the code will get stuck in an infinite loop.
|
804
|
+
To prevent this from happening, use Rice::Director::raisePureVirtual to inform users of the
|
805
|
+
extension that they should not be calling up into C++ for that method.
|
806
|
+
|
807
|
+
Once the proxy class is built, it's time to wrap it into Ruby:
|
808
|
+
|
809
|
+
\code
|
810
|
+
extern "C"
|
811
|
+
void Init_virtual() {
|
812
|
+
// See Caveat below
|
813
|
+
define_class<VirtualBase>("__VirtualBase__");
|
814
|
+
|
815
|
+
define_class<VirtualBaseProxy, VirtualBase>("VirtualBase")
|
816
|
+
.define_method("do_work", &VirtualBaseProxy::doWork)
|
817
|
+
.define_method("process_worker", &VirtualBaseProxy::processWorker);
|
818
|
+
}
|
819
|
+
\endcode
|
820
|
+
|
821
|
+
The wrapping is the same as is described earlier in this document. Expose the class
|
822
|
+
VirtualBaseProxy named as VirtualBase, register it as a subclass of VirtualBase,
|
823
|
+
and define methods pointing to the proxy object.
|
824
|
+
|
825
|
+
<b>Caveat</b>: Rice figures out inheritance and class heirarchies solely through
|
826
|
+
the types given in define_class. Ideally Rice would be able to handle this edge
|
827
|
+
case automatically, but for now you'll still need to tell Rice about the base class
|
828
|
+
being wrapped into a Rice::Director proxy, or type casting will throw an exception
|
829
|
+
during execution. So as a general rule, make sure that any class you use as SuperClass
|
830
|
+
in define_class<Class, SuperClass> is also itself
|
831
|
+
exposed.
|
832
|
+
|
833
|
+
Following this, if you have subclasses of virtual classes that themselves have virtual
|
834
|
+
methods, you need to set the Rice::Director proxy as the superclass of that class,
|
835
|
+
something like:
|
836
|
+
|
837
|
+
\code
|
838
|
+
// Given a class like this
|
839
|
+
class SubVirtual : public VirtualBase {
|
840
|
+
public:
|
841
|
+
virtual int doMoreWork();
|
842
|
+
}
|
843
|
+
|
844
|
+
// You'd need another Director proxy
|
845
|
+
class SubVirtualDirector : public SubVirtual, public VirtualBase, public Rice::Director {
|
846
|
+
...
|
847
|
+
}
|
848
|
+
|
849
|
+
// And expose it in Rice as such
|
850
|
+
define_class<SubVirtual, VirtualBaseProxy>("__SubVirtual__");
|
851
|
+
define_class<SubVirtualDirector, SubVirtual>("SubVirtual")
|
852
|
+
...
|
853
|
+
|
854
|
+
\endcode
|
855
|
+
|
856
|
+
This situation has not been fully tested
|
857
|
+
|
858
|
+
|
628
859
|
\section motivation Motivation
|
629
860
|
|
630
861
|
There are a number of common problems when writing C or C++ extensions
|
@@ -840,7 +1071,7 @@ class:
|
|
840
1071
|
vm.run()
|
841
1072
|
}
|
842
1073
|
\endcode
|
843
|
-
|
1074
|
+
|
844
1075
|
If the VM is not initialized from main() -- from a callback, for example
|
845
1076
|
-- then you may need to initialize the stack whenever you use Rice or
|
846
1077
|
the Ruby API:
|
data/aclocal.m4
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# generated automatically by aclocal 1.10.
|
1
|
+
# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
|
2
2
|
|
3
3
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
4
4
|
# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
@@ -13,13 +13,13 @@
|
|
13
13
|
|
14
14
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
15
15
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
16
|
-
m4_if(AC_AUTOCONF_VERSION, [2.
|
17
|
-
[m4_warning([this file was generated for autoconf 2.
|
16
|
+
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
|
17
|
+
[m4_warning([this file was generated for autoconf 2.63.
|
18
18
|
You have another version of autoconf. It may work, but is not guaranteed to.
|
19
19
|
If you have problems, you may need to regenerate the build system entirely.
|
20
20
|
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
21
21
|
|
22
|
-
# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
|
22
|
+
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
23
23
|
#
|
24
24
|
# This file is free software; the Free Software Foundation
|
25
25
|
# gives unlimited permission to copy and/or distribute it,
|
@@ -34,7 +34,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
|
34
34
|
[am__api_version='1.10'
|
35
35
|
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
36
36
|
dnl require some minimum version. Point them to the right macro.
|
37
|
-
m4_if([$1], [1.10.
|
37
|
+
m4_if([$1], [1.10.2], [],
|
38
38
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
39
39
|
])
|
40
40
|
|
@@ -48,12 +48,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
|
48
48
|
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
49
49
|
# -------------------------------
|
50
50
|
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
51
|
-
# This function is AC_REQUIREd by
|
51
|
+
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
52
52
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
53
|
-
[AM_AUTOMAKE_VERSION([1.10.
|
53
|
+
[AM_AUTOMAKE_VERSION([1.10.2])dnl
|
54
54
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
55
55
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
56
|
-
_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
|
56
|
+
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
57
57
|
|
58
58
|
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
59
59
|
|
@@ -303,57 +303,68 @@ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
|
303
303
|
|
304
304
|
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
305
305
|
|
306
|
-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
306
|
+
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
307
307
|
# Free Software Foundation, Inc.
|
308
308
|
#
|
309
309
|
# This file is free software; the Free Software Foundation
|
310
310
|
# gives unlimited permission to copy and/or distribute it,
|
311
311
|
# with or without modifications, as long as this notice is preserved.
|
312
312
|
|
313
|
-
#serial
|
313
|
+
#serial 5
|
314
314
|
|
315
315
|
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
316
316
|
# ------------------------------
|
317
317
|
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
318
|
-
[
|
319
|
-
#
|
320
|
-
|
321
|
-
#
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
s
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
#
|
354
|
-
|
318
|
+
[{
|
319
|
+
# Autoconf 2.62 quotes --file arguments for eval, but not when files
|
320
|
+
# are listed without --file. Let's play safe and only enable the eval
|
321
|
+
# if we detect the quoting.
|
322
|
+
case $CONFIG_FILES in
|
323
|
+
*\'*) eval set x "$CONFIG_FILES" ;;
|
324
|
+
*) set x $CONFIG_FILES ;;
|
325
|
+
esac
|
326
|
+
shift
|
327
|
+
for mf
|
328
|
+
do
|
329
|
+
# Strip MF so we end up with the name of the file.
|
330
|
+
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
331
|
+
# Check whether this is an Automake generated Makefile or not.
|
332
|
+
# We used to match only the files named `Makefile.in', but
|
333
|
+
# some people rename them; so instead we look at the file content.
|
334
|
+
# Grep'ing the first line is not enough: some people post-process
|
335
|
+
# each Makefile.in and add a new line on top of each file to say so.
|
336
|
+
# Grep'ing the whole file is not good either: AIX grep has a line
|
337
|
+
# limit of 2048, but all sed's we know have understand at least 4000.
|
338
|
+
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
339
|
+
dirpart=`AS_DIRNAME("$mf")`
|
340
|
+
else
|
341
|
+
continue
|
342
|
+
fi
|
343
|
+
# Extract the definition of DEPDIR, am__include, and am__quote
|
344
|
+
# from the Makefile without running `make'.
|
345
|
+
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
346
|
+
test -z "$DEPDIR" && continue
|
347
|
+
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
348
|
+
test -z "am__include" && continue
|
349
|
+
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
350
|
+
# When using ansi2knr, U may be empty or an underscore; expand it
|
351
|
+
U=`sed -n 's/^U = //p' < "$mf"`
|
352
|
+
# Find all dependency output files, they are included files with
|
353
|
+
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
354
|
+
# simplest approach to changing $(DEPDIR) to its actual value in the
|
355
|
+
# expansion.
|
356
|
+
for file in `sed -n "
|
357
|
+
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
358
|
+
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
359
|
+
# Make sure the directory exists.
|
360
|
+
test -f "$dirpart/$file" && continue
|
361
|
+
fdir=`AS_DIRNAME(["$file"])`
|
362
|
+
AS_MKDIR_P([$dirpart/$fdir])
|
363
|
+
# echo "creating $dirpart/$file"
|
364
|
+
echo '# dummy' > "$dirpart/$file"
|
365
|
+
done
|
355
366
|
done
|
356
|
-
|
367
|
+
}
|
357
368
|
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
358
369
|
|
359
370
|
|
@@ -659,13 +670,13 @@ esac
|
|
659
670
|
|
660
671
|
# Helper functions for option handling. -*- Autoconf -*-
|
661
672
|
|
662
|
-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
673
|
+
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
|
663
674
|
#
|
664
675
|
# This file is free software; the Free Software Foundation
|
665
676
|
# gives unlimited permission to copy and/or distribute it,
|
666
677
|
# with or without modifications, as long as this notice is preserved.
|
667
678
|
|
668
|
-
# serial
|
679
|
+
# serial 4
|
669
680
|
|
670
681
|
# _AM_MANGLE_OPTION(NAME)
|
671
682
|
# -----------------------
|
@@ -682,7 +693,7 @@ AC_DEFUN([_AM_SET_OPTION],
|
|
682
693
|
# ----------------------------------
|
683
694
|
# OPTIONS is a space-separated list of Automake options.
|
684
695
|
AC_DEFUN([_AM_SET_OPTIONS],
|
685
|
-
[
|
696
|
+
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
686
697
|
|
687
698
|
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
688
699
|
# -------------------------------------------
|