WaveSwissKnife 0.2.0.20120302

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.
Files changed (73) hide show
  1. data/AUTHORS +4 -0
  2. data/ChangeLog +31 -0
  3. data/Credits +3 -0
  4. data/LICENSE +31 -0
  5. data/README +15 -0
  6. data/ReleaseInfo +8 -0
  7. data/bin/WSK.rb +14 -0
  8. data/ext/WSK/AnalyzeUtils/AnalyzeUtils.c +272 -0
  9. data/ext/WSK/AnalyzeUtils/extconf.rb +7 -0
  10. data/ext/WSK/ArithmUtils/ArithmUtils.c +862 -0
  11. data/ext/WSK/ArithmUtils/extconf.rb +15 -0
  12. data/ext/WSK/CommonBuild.rb +29 -0
  13. data/ext/WSK/FFTUtils/FFTUtils.c +662 -0
  14. data/ext/WSK/FFTUtils/extconf.rb +15 -0
  15. data/ext/WSK/FunctionUtils/FunctionUtils.c +182 -0
  16. data/ext/WSK/FunctionUtils/extconf.rb +15 -0
  17. data/ext/WSK/SilentUtils/SilentUtils.c +431 -0
  18. data/ext/WSK/SilentUtils/extconf.rb +7 -0
  19. data/ext/WSK/VolumeUtils/VolumeUtils.c +494 -0
  20. data/ext/WSK/VolumeUtils/extconf.rb +15 -0
  21. data/external/CommonUtils/build.rb +28 -0
  22. data/external/CommonUtils/include/CommonUtils.h +177 -0
  23. data/external/CommonUtils/src/CommonUtils.c +639 -0
  24. data/lib/WSK/Actions/Analyze.rb +176 -0
  25. data/lib/WSK/Actions/ApplyMap.desc.rb +15 -0
  26. data/lib/WSK/Actions/ApplyMap.rb +57 -0
  27. data/lib/WSK/Actions/ApplyVolumeFct.desc.rb +30 -0
  28. data/lib/WSK/Actions/ApplyVolumeFct.rb +72 -0
  29. data/lib/WSK/Actions/Compare.desc.rb +25 -0
  30. data/lib/WSK/Actions/Compare.rb +238 -0
  31. data/lib/WSK/Actions/ConstantCompare.desc.rb +20 -0
  32. data/lib/WSK/Actions/ConstantCompare.rb +61 -0
  33. data/lib/WSK/Actions/Cut.desc.rb +20 -0
  34. data/lib/WSK/Actions/Cut.rb +60 -0
  35. data/lib/WSK/Actions/CutFirstSignal.desc.rb +25 -0
  36. data/lib/WSK/Actions/CutFirstSignal.rb +72 -0
  37. data/lib/WSK/Actions/DCShifter.desc.rb +15 -0
  38. data/lib/WSK/Actions/DCShifter.rb +67 -0
  39. data/lib/WSK/Actions/DrawFct.desc.rb +20 -0
  40. data/lib/WSK/Actions/DrawFct.rb +59 -0
  41. data/lib/WSK/Actions/FFT.rb +104 -0
  42. data/lib/WSK/Actions/GenAllValues.rb +67 -0
  43. data/lib/WSK/Actions/GenConstant.desc.rb +20 -0
  44. data/lib/WSK/Actions/GenConstant.rb +56 -0
  45. data/lib/WSK/Actions/GenSawtooth.rb +57 -0
  46. data/lib/WSK/Actions/GenSine.desc.rb +20 -0
  47. data/lib/WSK/Actions/GenSine.rb +73 -0
  48. data/lib/WSK/Actions/Identity.rb +43 -0
  49. data/lib/WSK/Actions/Mix.desc.rb +15 -0
  50. data/lib/WSK/Actions/Mix.rb +149 -0
  51. data/lib/WSK/Actions/Multiply.desc.rb +15 -0
  52. data/lib/WSK/Actions/Multiply.rb +73 -0
  53. data/lib/WSK/Actions/NoiseGate.desc.rb +35 -0
  54. data/lib/WSK/Actions/NoiseGate.rb +129 -0
  55. data/lib/WSK/Actions/SilenceInserter.desc.rb +20 -0
  56. data/lib/WSK/Actions/SilenceInserter.rb +87 -0
  57. data/lib/WSK/Actions/SilenceRemover.desc.rb +30 -0
  58. data/lib/WSK/Actions/SilenceRemover.rb +74 -0
  59. data/lib/WSK/Actions/VolumeProfile.desc.rb +35 -0
  60. data/lib/WSK/Actions/VolumeProfile.rb +63 -0
  61. data/lib/WSK/Common.rb +292 -0
  62. data/lib/WSK/FFT.rb +527 -0
  63. data/lib/WSK/Functions.rb +770 -0
  64. data/lib/WSK/Launcher.rb +216 -0
  65. data/lib/WSK/Maps.rb +29 -0
  66. data/lib/WSK/Model/CachedBufferReader.rb +151 -0
  67. data/lib/WSK/Model/Header.rb +133 -0
  68. data/lib/WSK/Model/InputData.rb +193 -0
  69. data/lib/WSK/Model/RawReader.rb +78 -0
  70. data/lib/WSK/Model/WaveReader.rb +91 -0
  71. data/lib/WSK/OutputInterfaces/DirectStream.rb +146 -0
  72. data/lib/WSK/RIFFReader.rb +60 -0
  73. metadata +155 -0
data/AUTHORS ADDED
@@ -0,0 +1,4 @@
1
+ = Muriel Salvan (muriel@x-aeon.com)
2
+ * 0.0.1.20101110
3
+ * 0.1.0.20110830
4
+ * 0.2.0.20120302
data/ChangeLog ADDED
@@ -0,0 +1,31 @@
1
+ = WaveSwissKnife Release History
2
+
3
+ == 0.2.0.20120302 (Beta)
4
+
5
+ * Shipping gems in platform-independent architecture.
6
+ * Adapted to standard C extensions handling to make the Gem architecture independent.
7
+ * Adapted to standard RubyGems extensions format to deliver a Ruby gem instead of an architecture specific one.
8
+ * Sorted the output of available actions in the help screen.
9
+ * Corrected C code to make it compile correctly with Ruby 1.9.
10
+ * Ignored mkmf.log files in GIT.
11
+ * Adapted release information to last version of RubyPackager.
12
+ * Adapted release information to last version of rUtilAnts.
13
+ * Removed rdoc warning in documentation.
14
+ * Updated Copyright information.
15
+ * Updated email address of Muriel Salvan.
16
+ * Adapted comments to match a better RDoc syntax.
17
+ * Adapted to new version of rUtilAnts.
18
+
19
+ == 0.1.0.20110830 (Beta)
20
+
21
+ * Migrated repository to git.
22
+ * Updated copyright information
23
+ * Made regression 100% successful.
24
+ * Migrated TODO list to Trackers.
25
+ * Made building extensions report errors correctly.
26
+ * Bug correction: Reading FFT samples could not be performed.
27
+
28
+ == 0.0.1.20101110 (Alpha)
29
+
30
+ * Initial public release.
31
+
data/Credits ADDED
@@ -0,0 +1,3 @@
1
+ = Projects used by WaveSwissKnife
2
+
3
+ = People that helped a lot in developing WaveSwissKnife
data/LICENSE ADDED
@@ -0,0 +1,31 @@
1
+
2
+ The license stated herein is a copy of the BSD License (modified on July 1999).
3
+ The AUTHOR mentionned below refers to the list of people involved in the
4
+ creation and modification of any file included in the delivered package.
5
+ This list is found in the file named AUTHORS.
6
+ The AUTHORS and LICENSE files have to be included in any release of software
7
+ embedding source code of this package, or using it as a derivative software.
8
+
9
+ Copyright (c) 2010 - 2012 Muriel Salvan (muriel@x-aeon.com)
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright notice,
15
+ this list of conditions and the following disclaimer.
16
+ 2. Redistributions in binary form must reproduce the above copyright notice,
17
+ this list of conditions and the following disclaimer in the documentation
18
+ and/or other materials provided with the distribution.
19
+ 3. The name of the author may not be used to endorse or promote products
20
+ derived from this software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
23
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27
+ OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31
+ OF SUCH DAMAGE.
data/README ADDED
@@ -0,0 +1,15 @@
1
+ = WaveSwissKnife
2
+
3
+ Command-line utility handling Wave files.
4
+
5
+ == Where is the documentation ?
6
+
7
+ Check the website at http://waveswissknife.sourceforge.net
8
+
9
+ == Who wrote it ?
10
+
11
+ Check the AUTHORS[link:AUTHORS.html] file.
12
+
13
+ == What is the license ?
14
+
15
+ You can find out in the LICENSE[link:LICENSE.html] file.
data/ReleaseInfo ADDED
@@ -0,0 +1,8 @@
1
+
2
+ # This file has been generated by RubyPackager during a delivery.
3
+ # More info about RubyPackager: http://rubypackager.sourceforge.net
4
+ {
5
+ :version => '0.2.0.20120302',
6
+ :tags => [ 'Beta' ],
7
+ :dev_status => 'Beta'
8
+ }
data/bin/WSK.rb ADDED
@@ -0,0 +1,14 @@
1
+ #!env ruby
2
+ #--
3
+ # Copyright (c) 2009 - 2012 Muriel Salvan (muriel@x-aeon.com)
4
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
5
+ #++
6
+
7
+ # Main file
8
+
9
+ require 'rUtilAnts/Logging'
10
+ RUtilAnts::Logging::install_logger_on_object
11
+ require 'WSK/Common'
12
+ require 'WSK/Launcher'
13
+
14
+ exit WSK::Launcher.new.execute(ARGV)
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Copyright (c) 2009 - 2012 Muriel Salvan (muriel@x-aeon.com)
3
+ * Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ **/
5
+
6
+ #include "ruby.h"
7
+ #include <math.h>
8
+ #include <stdio.h>
9
+ #include <CommonUtils.h>
10
+
11
+ // Structure used to compute sum of squares
12
+ typedef struct {
13
+ unsigned long long int high;
14
+ unsigned long long int low;
15
+ } t128bits;
16
+
17
+ // Structure used to give variables to iteration process
18
+ typedef struct {
19
+ long long int * maxValues;
20
+ long long int * minValues;
21
+ long long int * sumValues;
22
+ long long int * absSumValues;
23
+ t128bits * squareSumValues;
24
+ } tAnalyzeStruct;
25
+
26
+ /** Add a 64 bits unsigned integer to a 128 bits unsigned integer
27
+ *
28
+ * Parameters::
29
+ * * *ioPtrVal* (<em>t128bits*</em>): The 128 bits integer to modify
30
+ * * *iAddValue* (<em>const unsigned long long int</em>): The value to add
31
+ **/
32
+ inline void add128bits(t128bits* ioPtrVal, const unsigned long long int iAddValue) {
33
+ unsigned long long int lOldLow = ioPtrVal->low;
34
+
35
+ ioPtrVal->low += iAddValue;
36
+ // check for overflow of low 64 bits, add carry to high
37
+ if (ioPtrVal->low < lOldLow)
38
+ ++ioPtrVal->high;
39
+ }
40
+
41
+ /** Create empty arrays of long long integers to be used for various sums
42
+ *
43
+ * Parameters::
44
+ * * *iSelf* (_FFT_): Self
45
+ * * *iValNbrChannels* (_Integer_): Number of channels
46
+ * * *iValInitialValue* (_Integer_): Initial value
47
+ * Return::
48
+ * * _Object_: An encapsulated array for computation
49
+ **/
50
+ static VALUE analyzeutils_init64bitsArray(
51
+ VALUE iSelf,
52
+ VALUE iValNbrChannels,
53
+ VALUE iValInitialValue) {
54
+ VALUE rValContainer;
55
+ int lNbrChannels = FIX2INT(iValNbrChannels);
56
+ long long int lInitialValue = FIX2LONG(iValInitialValue);
57
+
58
+ long long int * lSumArray = ALLOC_N(long long int, lNbrChannels);
59
+ int lIdxChannel;
60
+ for (lIdxChannel = 0; lIdxChannel < lNbrChannels; ++lIdxChannel) {
61
+ lSumArray[lIdxChannel] = lInitialValue;
62
+ }
63
+
64
+ // Encapsulate it
65
+ rValContainer = Data_Wrap_Struct(rb_cObject, NULL, free, lSumArray);
66
+
67
+ return rValContainer;
68
+ }
69
+
70
+ /** Create empty arrays of 128 bits integers to be used for various sums
71
+ *
72
+ * Parameters::
73
+ * * *iSelf* (_FFT_): Self
74
+ * * *iValNbrChannels* (_Integer_): Number of channels
75
+ * Return::
76
+ * * _Object_: An encapsulated array for computation
77
+ **/
78
+ static VALUE analyzeutils_init128bitsArray(
79
+ VALUE iSelf,
80
+ VALUE iValNbrChannels) {
81
+ VALUE rValContainer;
82
+ int lNbrChannels = FIX2INT(iValNbrChannels);
83
+
84
+ t128bits * lSumArray = ALLOC_N(t128bits, lNbrChannels);
85
+ // Fill it with 0
86
+ memset(lSumArray, 0, lNbrChannels*sizeof(t128bits));
87
+
88
+ // Encapsulate it
89
+ rValContainer = Data_Wrap_Struct(rb_cObject, NULL, free, lSumArray);
90
+
91
+ return rValContainer;
92
+ }
93
+
94
+ /**
95
+ * Process a value read from an input buffer for the Analyze function.
96
+ * Use the trigo cache.
97
+ *
98
+ * Parameters::
99
+ * * *iValue* (<em>const tSampleValue</em>): The value being read
100
+ * * *iIdxSample* (<em>const tSampleIndex</em>): Index of this sample
101
+ * * *iIdxChannel* (<em>const int</em>): Channel corresponding to the value being read
102
+ * * *iPtrArgs* (<em>void*</em>): additional arguments. In fact a <em>tAnalyzeStruct*</em>.
103
+ * Return::
104
+ * * _int_: The return code:
105
+ * ** 0: Continue iteration
106
+ * ** 1: Break all iterations
107
+ * ** 2: Skip directly to the next sample (don't call us for other channels of this sample)
108
+ */
109
+ int analyzeutils_processValue_Analyze(
110
+ const tSampleValue iValue,
111
+ const tSampleIndex iIdxSample,
112
+ const int iIdxChannel,
113
+ void* iPtrArgs) {
114
+ // Interpret parameters
115
+ tAnalyzeStruct* lPtrVariables = (tAnalyzeStruct*)iPtrArgs;
116
+
117
+ if (iValue > lPtrVariables->maxValues[iIdxChannel]) {
118
+ lPtrVariables->maxValues[iIdxChannel] = iValue;
119
+ }
120
+ if (iValue < lPtrVariables->minValues[iIdxChannel]) {
121
+ lPtrVariables->minValues[iIdxChannel] = iValue;
122
+ }
123
+ lPtrVariables->sumValues[iIdxChannel] += iValue;
124
+ lPtrVariables->absSumValues[iIdxChannel] += abs(iValue);
125
+ add128bits(&(lPtrVariables->squareSumValues[iIdxChannel]), ((long long int)iValue)*((long long int)iValue));
126
+
127
+ return 0;
128
+ }
129
+
130
+ /** Complete the arrays of sums for analyzis
131
+ *
132
+ * Parameters::
133
+ * * *iSelf* (_FFT_): Self
134
+ * * *iValInputRawBuffer* (_String_): The input raw buffer
135
+ * * *iValNbrBitsPerSample* (_Integer_): The number of bits per sample
136
+ * * *iValNbrSamples* (_Integer_): The number of samples
137
+ * * *iValNbrChannels* (_Integer_): The number of channels
138
+ * * *ioValMaxValues* (_Object_): Container of the max values array (should be initialized with init64bitsArray)
139
+ * * *ioValMinValues* (_Object_): Container of the min values array (should be initialized with init64bitsArray)
140
+ * * *ioValSumValues* (_Object_): Container of the sum values array (should be initialized with init64bitsArray)
141
+ * * *ioValAbsSumValues* (_Object_): Container of the abs sum values array (should be initialized with init64bitsArray)
142
+ * * *ioValSquareSumValues* (_Object_): Container of the square sum values array (should be initialized with init128bitsArray)
143
+ **/
144
+ static VALUE analyzeutils_completeAnalyze(
145
+ VALUE iSelf,
146
+ VALUE iValInputRawBuffer,
147
+ VALUE iValNbrBitsPerSample,
148
+ VALUE iValNbrSamples,
149
+ VALUE iValNbrChannels,
150
+ VALUE ioValMaxValues,
151
+ VALUE ioValMinValues,
152
+ VALUE ioValSumValues,
153
+ VALUE ioValAbsSumValues,
154
+ VALUE ioValSquareSumValues) {
155
+ // Translate Ruby objects
156
+ tSampleIndex iNbrSamples = FIX2LONG(iValNbrSamples);
157
+ int iNbrChannels = FIX2INT(iValNbrChannels);
158
+ int iNbrBitsPerSample = FIX2LONG(iValNbrBitsPerSample);
159
+ char* lPtrRawBuffer = RSTRING_PTR(iValInputRawBuffer);
160
+ // Get the arrays
161
+ tAnalyzeStruct lProcessParams;
162
+ Data_Get_Struct(ioValMaxValues, long long int, lProcessParams.maxValues);
163
+ Data_Get_Struct(ioValMinValues, long long int, lProcessParams.minValues);
164
+ Data_Get_Struct(ioValSumValues, long long int, lProcessParams.sumValues);
165
+ Data_Get_Struct(ioValAbsSumValues, long long int, lProcessParams.absSumValues);
166
+ Data_Get_Struct(ioValSquareSumValues, t128bits, lProcessParams.squareSumValues);
167
+
168
+ // Parse the data
169
+ commonutils_iterateThroughRawBuffer(
170
+ lPtrRawBuffer,
171
+ iNbrBitsPerSample,
172
+ iNbrChannels,
173
+ iNbrSamples,
174
+ 0,
175
+ &analyzeutils_processValue_Analyze,
176
+ &lProcessParams
177
+ );
178
+
179
+ return Qnil;
180
+ }
181
+
182
+ /** Get a Bignum Ruby arrays out of a 64bits C integers array
183
+ *
184
+ * Parameters::
185
+ * * *iSelf* (_FFT_): Self
186
+ * * *iValArray* (_Object_): Container of the array (should be initialized with init64bitsArray)
187
+ * * *iValNbrItems* (_Integer_): The number of items in the array
188
+ * Return::
189
+ * * <em>list<Integer></em>: Corresponding Ruby array
190
+ **/
191
+ static VALUE analyzeutils_getRuby64bitsArray(
192
+ VALUE iSelf,
193
+ VALUE iValArray,
194
+ VALUE iValNbrItems) {
195
+ // Translate Ruby objects
196
+ int lNbrItems = FIX2INT(iValNbrItems);
197
+ // Get the array
198
+ long long int * lArray;
199
+ Data_Get_Struct(iValArray, long long int, lArray);
200
+ // The C-array of the final result
201
+ VALUE lFinalArray[lNbrItems];
202
+
203
+ // Buffer that stores string representation of long long int for Ruby RBigNum
204
+ char lStrValue[128];
205
+ int lIdxItem;
206
+ for (lIdxItem = 0; lIdxItem < lNbrItems; ++lIdxItem) {
207
+ sprintf(lStrValue, "%lld", lArray[lIdxItem]);
208
+ lFinalArray[lIdxItem] = rb_cstr2inum(lStrValue, 10);
209
+ }
210
+
211
+ return rb_ary_new4(lNbrItems, lFinalArray);
212
+ }
213
+
214
+ /** Get a Bignum Ruby arrays out of a 128bits C integers array
215
+ *
216
+ * Parameters::
217
+ * * *iSelf* (_FFT_): Self
218
+ * * *iValArray* (_Object_): Container of the array (should be initialized with init128bitsArray)
219
+ * * *iValNbrItems* (_Integer_): The number of items in the array
220
+ * Return::
221
+ * * <em>list<Integer></em>: Corresponding Ruby array
222
+ **/
223
+ static VALUE analyzeutils_getRuby128bitsArray(
224
+ VALUE iSelf,
225
+ VALUE iValArray,
226
+ VALUE iValNbrItems) {
227
+ // Translate Ruby objects
228
+ int lNbrItems = FIX2INT(iValNbrItems);
229
+ // Get the array
230
+ t128bits * lArray;
231
+ Data_Get_Struct(iValArray, t128bits, lArray);
232
+ // The C-array of the final result
233
+ VALUE lFinalArray[lNbrItems];
234
+ // Operations that will be used
235
+ ID lPlusID = rb_intern("+");
236
+ ID lMultiplyID = rb_intern("*");
237
+
238
+ // Buffer that stores string representation of long long int for Ruby RBigNum
239
+ char lStrValue[128];
240
+ int lIdxItem;
241
+ VALUE lValHigh;
242
+ VALUE lValLow;
243
+ VALUE lValHighShifted;
244
+ // We will need to multiply High part by 2^64
245
+ VALUE lValShiftFactor = rb_cstr2inum("18446744073709551616", 10);
246
+ for (lIdxItem = 0; lIdxItem < lNbrItems; ++lIdxItem) {
247
+ sprintf(lStrValue, "%llu", lArray[lIdxItem].high);
248
+ lValHigh = rb_cstr2inum(lStrValue, 10);
249
+ sprintf(lStrValue, "%llu", lArray[lIdxItem].low);
250
+ lValLow = rb_cstr2inum(lStrValue, 10);
251
+ lValHighShifted = rb_funcall(lValHigh, lMultiplyID, 1, lValShiftFactor);
252
+ lFinalArray[lIdxItem] = rb_funcall(lValHighShifted, lPlusID, 1, lValLow);
253
+ }
254
+
255
+ return rb_ary_new4(lNbrItems, lFinalArray);
256
+ }
257
+
258
+ // Initialize the module
259
+ void Init_AnalyzeUtils() {
260
+ VALUE lWSKModule;
261
+ VALUE lAnalyzeUtilsModule;
262
+ VALUE lAnalyzeUtilsClass;
263
+
264
+ lWSKModule = rb_define_module("WSK");
265
+ lAnalyzeUtilsModule = rb_define_module_under(lWSKModule, "AnalyzeUtils");
266
+ lAnalyzeUtilsClass = rb_define_class_under(lAnalyzeUtilsModule, "AnalyzeUtils", rb_cObject);
267
+ rb_define_method(lAnalyzeUtilsClass, "init64bitsArray", analyzeutils_init64bitsArray, 2);
268
+ rb_define_method(lAnalyzeUtilsClass, "init128bitsArray", analyzeutils_init128bitsArray, 1);
269
+ rb_define_method(lAnalyzeUtilsClass, "completeAnalyze", analyzeutils_completeAnalyze, 9);
270
+ rb_define_method(lAnalyzeUtilsClass, "getRuby64bitsArray", analyzeutils_getRuby64bitsArray, 2);
271
+ rb_define_method(lAnalyzeUtilsClass, "getRuby128bitsArray", analyzeutils_getRuby128bitsArray, 2);
272
+ }
@@ -0,0 +1,7 @@
1
+ #--
2
+ # Copyright (c) 2012 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ require "#{File.dirname(__FILE__)}/../CommonBuild"
7
+ create_makefile('AnalyzeUtils')