kostya-sigar 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/NOTICE +117 -0
  4. data/README +2 -0
  5. data/Rakefile +105 -0
  6. data/bindings/SigarBuild.pm +301 -0
  7. data/bindings/SigarWrapper.pm +3025 -0
  8. data/bindings/ruby/extconf.rb +132 -0
  9. data/bindings/ruby/rbsigar.c +785 -0
  10. data/include/sigar.h +984 -0
  11. data/include/sigar_fileinfo.h +157 -0
  12. data/include/sigar_format.h +65 -0
  13. data/include/sigar_getline.h +18 -0
  14. data/include/sigar_log.h +80 -0
  15. data/include/sigar_private.h +429 -0
  16. data/include/sigar_ptql.h +53 -0
  17. data/include/sigar_util.h +197 -0
  18. data/src/os/aix/aix_sigar.c +2168 -0
  19. data/src/os/aix/sigar_os.h +73 -0
  20. data/src/os/darwin/Info.plist.in +27 -0
  21. data/src/os/darwin/darwin_sigar.c +3718 -0
  22. data/src/os/darwin/sigar_os.h +80 -0
  23. data/src/os/hpux/hpux_sigar.c +1361 -0
  24. data/src/os/hpux/sigar_os.h +49 -0
  25. data/src/os/linux/linux_sigar.c +2821 -0
  26. data/src/os/linux/sigar_os.h +82 -0
  27. data/src/os/solaris/get_mib2.c +321 -0
  28. data/src/os/solaris/get_mib2.h +127 -0
  29. data/src/os/solaris/kstats.c +181 -0
  30. data/src/os/solaris/procfs.c +97 -0
  31. data/src/os/solaris/sigar_os.h +224 -0
  32. data/src/os/solaris/solaris_sigar.c +2732 -0
  33. data/src/os/win32/peb.c +212 -0
  34. data/src/os/win32/sigar.rc.in +40 -0
  35. data/src/os/win32/sigar_os.h +685 -0
  36. data/src/os/win32/sigar_pdh.h +47 -0
  37. data/src/os/win32/win32_sigar.c +4109 -0
  38. data/src/sigar.c +2444 -0
  39. data/src/sigar_cache.c +253 -0
  40. data/src/sigar_fileinfo.c +815 -0
  41. data/src/sigar_format.c +696 -0
  42. data/src/sigar_getline.c +1849 -0
  43. data/src/sigar_ptql.c +1976 -0
  44. data/src/sigar_signal.c +216 -0
  45. data/src/sigar_util.c +1076 -0
  46. data/src/sigar_version.c.in +22 -0
  47. data/src/sigar_version_autoconf.c.in +22 -0
  48. data/version.properties +11 -0
  49. metadata +90 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 391876dbcd7e108d148bdc9c5289390fcc47c17c
4
+ data.tar.gz: f08c5033b8e73d65f68f939641d8bc007b110af0
5
+ SHA512:
6
+ metadata.gz: 5797d6a164bea7801cf13864761a45858e7a5ea8d7883ca83f76bc2d0fd7b0bad7a3f92c0dd3d3be9a1d78993651eebbe3c5daf121e9515f4c4973f3aa58541f
7
+ data.tar.gz: 8f0f601f2a8d9264f14e02ef0db72f29552142007213f3b30b0e33b6d06ed7c4a7af453281345d2c56d67c9875c19d756e7bb4379b7e44ba2cfcf7cb4c9caeec
data/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
data/NOTICE ADDED
@@ -0,0 +1,117 @@
1
+ Copyright (c) 2004-2011 VMware, Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
15
+ ADDITIONAL LICENSE INFORMATION:
16
+
17
+ Hyperic SIGAR includes some third-party open source components
18
+ in its distribution. The list below identifies the community or
19
+ organization and links to their appropriate license terms.
20
+
21
+ The Hyperic team would like to thank all the communities
22
+ of the projects listed below for their contributions.
23
+
24
+ ----------------------------------------------------------
25
+ Components under the Apache License 2.0:
26
+ ----------------------------------------------------------
27
+
28
+ The following components are included without modification:
29
+
30
+ - log4j -
31
+ Information: http://logging.apache.org/
32
+ License: http://www.apache.org/licenses/LICENSE-2.0
33
+
34
+ The following components are included with modification:
35
+
36
+ - cpptasks -
37
+ Information: http://ant-contrib.sourceforge.net/
38
+ License: http://www.apache.org/licenses/LICENSE-2.0
39
+
40
+ - (portions of) APR -
41
+ Information: http://apr.apache.org/
42
+ License: http://www.apache.org/licenses/LICENSE-2.0
43
+
44
+ ----------------------------------------------------------
45
+ Components under BSD/MIT Style Licenses:
46
+ ----------------------------------------------------------
47
+
48
+ The following components are included with modification:
49
+
50
+ - solaris get_mib2 -
51
+ Information: ftp://vic.cc.purdue.edu/pub/tools/unix/solaris/get_mib2/
52
+ License: within src/os/solaris/get_mib2.[ch]
53
+
54
+ Copyright 1995 Purdue Research Foundation, West Lafayette, Indiana
55
+ 47907. All rights reserved.
56
+
57
+ Written by Victor A. Abell <abe@cc.purdue.edu>
58
+
59
+ This software is not subject to any license of the American Telephone
60
+ and Telegraph Company or the Regents of the University of California.
61
+
62
+ Permission is granted to anyone to use this software for any purpose on
63
+ any computer system, and to alter it and redistribute it freely, subject
64
+ to the following restrictions:
65
+
66
+ 1. Neither Victor A Abell nor Purdue University are responsible for
67
+ any consequences of the use of this software.
68
+
69
+ 2. The origin of this software must not be misrepresented, either by
70
+ explicit claim or by omission. Credit to Victor A. Abell and Purdue
71
+ University must appear in documentation and sources.
72
+
73
+ 3. Altered versions must be plainly marked as such, and must not be
74
+ misrepresented as being the original software.
75
+
76
+ 4. This notice may not be removed or altered.
77
+
78
+ - getline by Chris Thewalt -
79
+ Information: http://tinyurl.com/r438r
80
+ License: within src/sigar_getline.c
81
+
82
+ Copyright (C) 1991, 1992 by Chris Thewalt (thewalt@ce.berkeley.edu)
83
+
84
+ Permission to use, copy, modify, and distribute this software
85
+ for any purpose and without fee is hereby granted, provided
86
+ that the above copyright notices appear in all copies and that both the
87
+ copyright notice and this permission notice appear in supporting
88
+ documentation. This software is provided "as is" without express or
89
+ implied warranty.
90
+
91
+ - PrintfFormat.java -
92
+ Information: http://java.sun.com/developer/technicalArticles/Programming/sprintf/PrintfFormat.java
93
+ License: within bindings/java/src/org/hyperic/sigar/util/PrintfFormat.java
94
+
95
+ (c) 2000 Sun Microsystems, Inc.
96
+ ALL RIGHTS RESERVED
97
+
98
+ License Grant-
99
+
100
+ Permission to use, copy, modify, and distribute this Software and its
101
+ documentation for NON-COMMERCIAL or COMMERCIAL purposes and without fee is
102
+ hereby granted.
103
+
104
+ This Software is provided "AS IS". All express warranties, including any
105
+ implied warranty of merchantability, satisfactory quality, fitness for a
106
+ particular purpose, or non-infringement, are disclaimed, except to the extent
107
+ that such disclaimers are held to be legally invalid.
108
+
109
+ You acknowledge that Software is not designed, licensed or intended for use in
110
+ the design, construction, operation or maintenance of any nuclear facility
111
+ ("High Risk Activities"). Sun disclaims any express or implied warranty of
112
+ fitness for such uses.
113
+
114
+ Please refer to the file http://www.sun.com/policies/trademarks/ for further
115
+ important trademark information and to
116
+ http://java.sun.com/nav/business/index.html for further important licensing
117
+ information for the Java Technology.
data/README ADDED
@@ -0,0 +1,2 @@
1
+ Visit the SIGAR Wiki for documentation, bugs, support, etc.:
2
+ http://sigar.hyperic.com/
data/Rakefile ADDED
@@ -0,0 +1,105 @@
1
+ require 'rubygems'
2
+ require 'rubygems/package_task'
3
+ require 'rake/testtask'
4
+
5
+ #so we can: ssh host rake -f $hudson_workspace/sigar/Rakefile
6
+ Dir.chdir(File.dirname(__FILE__))
7
+
8
+ props = {}
9
+ File.open("version.properties").each { |line|
10
+ next if line =~ /^#/
11
+ line.chomp!
12
+ line.strip!
13
+ next if line.empty?
14
+ key,val = line.split('=')
15
+ props[key] = val
16
+ }
17
+
18
+ GEM = props['project.name']
19
+ MAKE = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
20
+
21
+ spec = Gem::Specification.new do |s|
22
+ s.name = GEM
23
+ # s.version = props['version.major'] + '.' + props['version.minor'] + '.' + props['version.maint']
24
+ # '0.7.x' until the sigar-1.7.0 release
25
+ s.version = '0' + '.' + props['version.minor'] + '.' + '3'
26
+ s.summary = props['project.summary']
27
+ s.description = s.summary
28
+ s.author = props['project.author']
29
+ s.email = props['project.email']
30
+ s.homepage = props['project.homepage']
31
+ s.platform = Gem::Platform::RUBY
32
+ s.has_rdoc = false
33
+ s.extensions = 'bindings/ruby/extconf.rb'
34
+ s.files =
35
+ %w(LICENSE NOTICE README Rakefile version.properties) +
36
+ %w(bindings/SigarWrapper.pm bindings/SigarBuild.pm) +
37
+ `git ls-files -- bindings/ruby/*.*`.split("\n") +
38
+ Dir.glob("include/*.h") +
39
+ Dir.glob("src/**/*.[ch]") +
40
+ Dir.glob("src/**/*.in")
41
+ end
42
+
43
+ Gem::PackageTask.new(spec) do |pkg|
44
+ pkg.gem_spec = spec
45
+ end
46
+
47
+ task :default => :test
48
+
49
+ def in_ext()
50
+ ext = 'bindings/ruby'
51
+ Dir.chdir(ext) if File.directory? ext
52
+ end
53
+
54
+ desc 'Build sigar extension'
55
+ task :build do
56
+ in_ext()
57
+ unless File.exists? "Makefile"
58
+ unless system("ruby extconf.rb")
59
+ STDERR.puts "Failed to configure"
60
+ break
61
+ end
62
+ end
63
+ unless system(MAKE)
64
+ STDERR.puts 'Failed to ' + MAKE
65
+ break
66
+ end
67
+ end
68
+
69
+ Rake::TestTask.new do |t|
70
+ t.pattern = 'test/*_test.rb'
71
+ t.libs << "."
72
+ end
73
+
74
+ task :test => [:build] do
75
+ in_ext()
76
+ end
77
+
78
+ desc 'Clean sigar extension'
79
+ task :clean do
80
+ in_ext()
81
+ system(MAKE + ' clean') if File.exists? "Makefile"
82
+ end
83
+
84
+ desc 'Dist Clean sigar extension'
85
+ task :distclean do
86
+ in_ext()
87
+ system(MAKE + ' distclean') if File.exists? "Makefile"
88
+ end
89
+
90
+ desc 'Run sigar examples (test)'
91
+ task :examples => [:build] do
92
+ in_ext()
93
+ Dir["examples/*.rb"].each do |file|
94
+ cmd = "ruby -I. #{file}"
95
+ print cmd + "\n"
96
+ system(cmd)
97
+ end
98
+ end
99
+
100
+ desc "create a gemspec file"
101
+ task :make_spec do
102
+ File.open("#{GEM}.gemspec", "w") do |file|
103
+ file.puts spec.to_ruby
104
+ end
105
+ end
@@ -0,0 +1,301 @@
1
+ #
2
+ # Copyright (c) 2009 Hyperic, Inc.
3
+ # Copyright (c) 2009 SpringSource, Inc.
4
+ # Copyright (c) 2009 VMware, Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ package SigarBuild;
20
+
21
+ use strict;
22
+ use Config;
23
+ use Exporter;
24
+ use File::Basename qw(basename);
25
+ use File::Copy qw(copy);
26
+ use File::Spec ();
27
+ use POSIX ();
28
+
29
+ use vars qw(@ISA @EXPORT);
30
+ @ISA = qw(Exporter);
31
+ @EXPORT = qw(cppflags ldflags libs os src inline_src version_file resource_file);
32
+
33
+ sub archname {
34
+ my $os = lc $^O;
35
+ my $vers = $Config{osvers};
36
+ my $arch = $Config{archname};
37
+
38
+ if ($os =~ /win32/) {
39
+ return 'x86-winnt';
40
+ }
41
+ elsif ($os =~ /linux/) {
42
+ if ($arch =~ /_64/) {
43
+ return 'amd64-linux';
44
+ }
45
+ else {
46
+ return 'x86-linux';
47
+ }
48
+ }
49
+ elsif ($os =~ /hpux/) {
50
+ if ($vers =~ /11\./) {
51
+ return 'pa-hpux-11';
52
+ }
53
+ }
54
+ elsif ($os =~ /aix/) {
55
+ return 'ppc-aix-5';
56
+ }
57
+ elsif ($os =~ /solaris/) {
58
+ if ($arch =~ /sun4/) {
59
+ return 'sparc-solaris';
60
+ }
61
+ elsif ($arch =~ /.86/) {
62
+ return 'x86-solaris';
63
+ }
64
+ }
65
+ elsif ($os =~ /darwin/) {
66
+ return 'universal-macosx';
67
+ }
68
+ elsif ($os =~ /freebsd/) {
69
+ if ($arch =~ /.86/) {
70
+ if($vers =~ /6\../ ) {
71
+ return 'x86-freebsd-6';
72
+ }
73
+ }
74
+ elsif ($arch =~ /amd64/) {
75
+ if ($vers =~ /6\../ ) {
76
+ return 'amd64-freebsd-6';
77
+ }
78
+ }
79
+ }
80
+
81
+ return '';
82
+ }
83
+
84
+ sub flags {
85
+ my $os = lc $^O;
86
+ my $is_win32 = 0;
87
+ my (@cppflags, @ldflags, @libs);
88
+ if ($os =~ /(win32)/) {
89
+ $os = $1;
90
+ $is_win32 = 1;
91
+ @cppflags = ('-DWIN32', '-D_CRT_SECURE_NO_DEPRECATE');
92
+ @libs = qw(kernel32 user32 advapi32 ws2_32 netapi32 shell32 pdh version comsupp wbemuuid);
93
+ }
94
+ elsif ($os =~ /(linux)/) {
95
+ $os = $1;
96
+ }
97
+ elsif ($os =~ /(hpux)/) {
98
+ $os = $1;
99
+ @libs = qw(nsl nm);
100
+ }
101
+ elsif ($os =~ /(aix)/) {
102
+ $os = $1;
103
+ @libs = qw(odm cfg perfstat);
104
+ }
105
+ elsif ($os =~ /(solaris)/) {
106
+ $os = $1;
107
+ @libs = qw(nsl socket kstat);
108
+ }
109
+ elsif ($os =~ /(darwin)/) {
110
+ $os = $1;
111
+ @cppflags = ('-DDARWIN');
112
+ @ldflags = ('-framework CoreServices', '-framework IOKit');
113
+ if (-e "/usr/local/libproc.h") {
114
+ push @cppflags, '-DDARWIN_HAS_LIBPROC_H';
115
+ }
116
+ }
117
+ elsif ($os =~ /bsd/) {
118
+ $os = 'darwin';
119
+ @libs = qw(kvm);
120
+ }
121
+
122
+ push @cppflags,
123
+ '-I../../include',
124
+ "-I../../src/os/$os";
125
+
126
+ unless ($is_win32) {
127
+ push @cppflags, '-U_FILE_OFFSET_BITS';
128
+ }
129
+
130
+ my(@src) = (<../../src/*.c>, <../../src/os/$os/*.c>, <../../src/os/$os/*.cpp>);
131
+
132
+ return {
133
+ is_win32 => $is_win32,
134
+ os => $os,
135
+ libs => \@libs,
136
+ cppflags => \@cppflags,
137
+ ldflags => \@ldflags,
138
+ src => \@src,
139
+ };
140
+ }
141
+
142
+ #perl -Mlib=.. -MSigarBuild -e cppflags
143
+ sub cppflags {
144
+ print join ' ', @{ flags()->{cppflags} };
145
+ }
146
+
147
+ sub ldflags {
148
+ print join ' ', @{ flags()->{ldflags} };
149
+ }
150
+
151
+ sub libs {
152
+ print join ' ', @{ flags()->{libs} };
153
+ }
154
+
155
+ sub os {
156
+ print flags()->{os};
157
+ }
158
+
159
+ sub src {
160
+ print join ' ', @{ flags()->{src} };
161
+ }
162
+
163
+ sub inline_src {
164
+ my $stdout = @_ ? 0 : 1;
165
+ my $flags = shift || flags();
166
+ my $src = $flags->{src};
167
+ my $dir = $flags->{build_dir} || $ARGV[0];
168
+ my(@files);
169
+ #unlink symlinks incase of nfs shared dir...
170
+ for my $file (grep { -l } <*.c>) {
171
+ unlink $file;
172
+ }
173
+ for my $file (@$src) {
174
+ my $cf = basename $file;
175
+ #sigar.c -> libsigar.c else
176
+ #sigar.o and perl Sigar.o clash on case insensitive filesystems
177
+ $cf = 'libsigar.c' if $cf eq 'sigar.c';
178
+ if ($dir) {
179
+ $cf = join '/', $dir, $cf;
180
+ $file = File::Spec->rel2abs($file);
181
+ }
182
+ push @files, $cf;
183
+ if ($flags->{is_win32}) {
184
+ copy($file, $cf);
185
+ }
186
+ else {
187
+ symlink($file, $cf) unless -e $cf;
188
+ }
189
+ }
190
+ if ($stdout) {
191
+ print join ' ', @files;
192
+ }
193
+ else {
194
+ return @files;
195
+ }
196
+ }
197
+
198
+ sub scm_revision {
199
+ my $rev;
200
+ $rev = `git rev-parse --short HEAD`;
201
+ if ($rev) {
202
+ chomp $rev;
203
+ }
204
+ else {
205
+ $rev = "exported";
206
+ }
207
+ return $rev;
208
+ }
209
+
210
+ sub build_date {
211
+ return POSIX::strftime("%m/%d/%Y %I:%M %p", localtime);
212
+ }
213
+
214
+ sub find_file {
215
+ my $file = shift;
216
+ for my $dir (qw(../.. .. .)) {
217
+ my $pfile = "$dir/$file";
218
+ return $pfile if -e $pfile;
219
+ }
220
+ return $file;
221
+ }
222
+
223
+ sub version_properties {
224
+ my $props = {};
225
+ my $file = $_[0] || find_file('version.properties');
226
+ open my $fh, $file or die "open $file: $!";
227
+ while (<$fh>) {
228
+ chomp;
229
+ my($key,$val) = split '=';
230
+ next unless $key and defined $val;
231
+ $props->{$key} = $val;
232
+ }
233
+ close $fh;
234
+
235
+ $props->{'scm.revision'} = scm_revision();
236
+
237
+ $props->{'build.date'} = build_date();
238
+
239
+ $props->{'version'} =
240
+ join '.', map $props->{"version.$_"}, qw(major minor maint);
241
+
242
+ $props->{'version.build'} = $ENV{BUILD_NUMBER} || '0';
243
+
244
+ $props->{'version.string'} =
245
+ join '.', $props->{'version'}, $props->{'version.build'};
246
+
247
+ return $props;
248
+ }
249
+
250
+ sub resource_file {
251
+ my(@args) = @_ ? @_ : @ARGV;
252
+ version_file(find_file("src/os/win32/sigar.rc.in"), "sigar.rc", @args);
253
+ }
254
+
255
+ sub version_file {
256
+ local $_;
257
+ my($source, $dest, %filters);
258
+ my(@args) = @_ ? @_ : @ARGV;
259
+ for (@args) {
260
+ if (/=/) {
261
+ my($key,$val) = split '=', $_, 2;
262
+ $filters{$key} = $val;
263
+ }
264
+ else {
265
+ if ($source) {
266
+ $dest = $_;
267
+ }
268
+ else {
269
+ $source = $_;
270
+ }
271
+ }
272
+ }
273
+ unless ($source) {
274
+ $dest = 'sigar_version.c';
275
+ $source = find_file("src/$dest.in");
276
+ }
277
+ my $props = version_properties();
278
+ while (my($key,$val) = each %$props) {
279
+ $key = uc $key;
280
+ $key =~ s/\./_/;
281
+ $filters{$key} = $val;
282
+ }
283
+ my $re = join '|', keys %filters;
284
+ open my $in, $source or die "open $source: $!";
285
+ my $out;
286
+ if ($dest) {
287
+ open $out, '>', $dest or die "open $dest: $!";
288
+ }
289
+ else {
290
+ $out = \*STDOUT;
291
+ }
292
+ while (<$in>) {
293
+ s/\@\@($re)\@\@/$filters{$1}/go;
294
+ print $out $_;
295
+ }
296
+ close $in;
297
+ close $out if $dest;
298
+ }
299
+
300
+ 1;
301
+ __END__