source: trunk/dports/_resources/port1.0/group/ruby-1.0.tcl @ 73308

Last change on this file since 73308 was 73308, checked in by jmr@…, 9 years ago

ruby portgroup: remove dead mirror (#27219)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 12.4 KB
Line 
1# $Id: ruby-1.0.tcl 73308 2010-11-10 01:36:23Z jmr@macports.org $
2# ruby-1.0.tcl
3#
4# Group file for 'ruby' group.
5#
6# Copyright (c) 2004 Robert Shaw <rshaw@opendarwin.org>
7# Copyright (c) 2002 Apple Computer, Inc.
8# All rights reserved.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions are
12# met:
13#
14# 1. Redistributions of source code must retain the above copyright
15#    notice, this list of conditions and the following disclaimer.
16# 2. Redistributions in binary form must reproduce the above copyright
17#    notice, this list of conditions and the following disclaimer in the
18#    documentation and/or other materials provided with the distribution.
19# 3. Neither the name of Apple Computer, Inc. nor the names of its
20#    contributors may be used to endorse or promote products derived from
21#    this software without specific prior written permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
35# Define these variables assuming ruby1.8 to make them accessible in
36# the portfile after port group declaration. They can be modified by
37# ruby.setup, e.g. to use another ruby than 1.8.
38set ruby.bin            ${prefix}/bin/ruby
39set ruby.rdoc           ${prefix}/bin/rdoc
40set ruby.gem            ${prefix}/bin/gem
41
42proc ruby.extract_config {var {default ""}} {
43        global ruby.bin
44        if {[catch {set val [exec ${ruby.bin} -e "require 'rbconfig';puts Config::CONFIG\[\"${var}\"\]"]}]} {
45                set val ${default}
46        }
47        return $val
48}
49
50options ruby.version ruby.arch ruby.lib ruby.archlib
51default ruby.version    {[ruby.extract_config ruby_version]}
52default ruby.arch               {[ruby.extract_config arch "${os.arch}-${os.platform}${os.major}"]}
53# define installation libraries as vendor location
54default ruby.lib                {[ruby.extract_config vendorlibdir ${prefix}/lib/ruby/vendor_ruby/${ruby.version}]}
55default ruby.archlib    {[ruby.extract_config vendorarchdir ${ruby.lib}/${ruby.arch}]}
56
57set ruby.module         ""
58set ruby.filename       ""
59set ruby.project        ""
60set ruby.docs           {}
61set ruby.srcdir         ""
62
63# ruby group setup procedure; optional for ruby 1.8 if you want only
64# basic variables, like ruby.lib and ruby.archlib.
65proc ruby.setup {module vers {type "install.rb"} {docs {}} {source "custom"} {implementation "ruby"}} {
66        global destroot prefix worksrcpath os.platform
67        global ruby.bin ruby.rdoc ruby.gem
68        global ruby.version ruby.lib
69        global ruby.module ruby.filename ruby.project ruby.docs ruby.srcdir
70        global ruby.prog_suffix
71
72        if {${implementation} eq "ruby19"} {
73            set ruby.port_prefix rb19
74            set ruby.prog_suffix "1.9"
75        } elseif {${implementation} eq "ruby"} {
76                # ruby.bin, ruby.rdoc, and ruby.gem set to 1.8 by default
77                set ruby.port_prefix rb
78                # no program suffix by default, so leave as blank
79                set ruby.prog_suffix ""
80        } else {
81                ui_error "ruby.setup: unknown implementation '${implementation}' specified (ruby, ruby19 possible)"
82                return -code error "ruby.setup failed"
83        }
84        set ruby.bin    ${prefix}/bin/ruby${ruby.prog_suffix}
85        set ruby.rdoc   ${prefix}/bin/rdoc${ruby.prog_suffix}
86        set ruby.gem    ${prefix}/bin/gem${ruby.prog_suffix}
87
88        # define ruby global names and lists
89        # check if module is a list or string
90        if {[llength ${module}] > 1} {
91                # if a list, first item is the module name
92                set ruby.module         [lindex ${module} 0]
93                # second argument is the project & file name
94                set ruby.project        [lindex ${module} 1]
95                set ruby.filename       [lindex ${module} 1]
96        } else {
97                # else, module, project, and file name are the same
98                set ruby.module         ${module}
99                set ruby.project        ${module}
100                set ruby.filename       ${module}
101        }
102        set ruby.docs   ${docs}
103
104        name                    ${ruby.port_prefix}-[string tolower ${ruby.module}]
105        version                 ${vers}
106        categories              ruby
107
108        switch -glob ${source} {
109                rubyforge:*:* {
110                        set num [lindex [split ${source} {:}] 1]
111                        set ruby.project [string tolower [lindex [split ${source} {:}] 2]]
112                        homepage                http://rubyforge.org/projects/${ruby.project}
113                        master_sites    http://rubyforge.org/frs/download.php/${num}/
114                        livecheck.type  regex
115                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
116                        livecheck.regex "<strong>${ruby.project}</strong></td><td>(?:REL )?(.*)$"
117                }
118                rubyforge:* {
119                        set num [lindex [split ${source} {:}] 1]
120                        homepage                http://rubyforge.org/projects/${ruby.project}
121                        master_sites    http://rubyforge.org/frs/download.php/${num}/
122                        livecheck.type  regex
123                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
124                        livecheck.regex "<strong>${ruby.project}</strong></td><td>(?:REL )?(.*)$"
125                }
126                rubyforge_gem:* {
127                        set ruby.project [lindex [split ${source} {:}] 1]
128                        homepage                http://rubyforge.org/projects/${ruby.project}
129                        master_sites    http://gems.rubyforge.vm.bytemark.co.uk/gems/ \
130                                        http://rubyforge.iasi.roedu.net/gems/ \
131                                        http://ruby.inoack.com/gems/
132                        livecheck.type  regex
133                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
134                        livecheck.regex "<strong>${ruby.module}</strong></td><td>(?:REL )?(.*)$"
135                }
136                rubyforge_gem {
137                        homepage                http://rubyforge.org/projects/${ruby.project}
138                        master_sites    http://gems.rubyforge.vm.bytemark.co.uk/gems/ \
139                                        http://rubyforge.iasi.roedu.net/gems/ \
140                                        http://ruby.inoack.com/gems/
141                        livecheck.type  regex
142                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
143                        livecheck.regex "<strong>${ruby.module}</strong></td><td>(?:REL )?(.*)$"
144                }
145                rubygems {
146                    homepage        http://www.rubygems.org/gems/${ruby.project}
147                    master_sites    http://www.rubygems.org/downloads/
148                    livecheck.type  regex
149                    livecheck.url   http://www.rubygems.org/gems/${ruby.project}
150                    livecheck.regex {<h3>(\d|\d[0-9.]*\d)</h3>}
151                }
152                sourceforge:* {
153                        set ruby.project [lindex [split ${source} {:}] 1]
154                        homepage                http://sourceforge.net/projects/${ruby.project}
155                        master_sites    sourceforge:${ruby.project}
156                }
157                sourceforge {
158                        homepage                http://sourceforge.net/projects/${ruby.project}
159                        master_sites    sourceforge:${ruby.project}
160                }
161        }
162
163        distname                ${ruby.filename}-${vers}
164        dist_subdir             ruby
165
166        depends_lib             port:${implementation}
167
168        post-extract {
169                # Create the work directory for gem-based ruby ports.
170                system "mkdir -p ${worksrcpath}"
171                system "find ${worksrcpath} -type d -name CVS | xargs rm -rf"
172        }
173
174        switch -glob ${type} {
175                basic_install.rb {
176                        post-patch {
177                                # create destroot setup file
178                                set fp [open ${worksrcpath}/destroot.rb w]
179                                puts $fp "
180                                        require 'rbconfig'
181                                        include Config
182                                        DESTROOT=ENV\['DESTROOT'\] || ''
183                                        CONFIG.keys.find_all { |d|
184                                                d.match(/dir\$/) and !d.match(/(src|build|compile)/)
185                                        }.each {|confdir|
186                                                CONFIG\[confdir\]=DESTROOT+CONFIG\[confdir\]
187                                        }
188                                        \$:.reverse.each { |d| \$:.unshift(DESTROOT+d) }
189                                "
190                                close $fp
191                                # adjust basic install.rb script
192                                reinplace "s|site_ruby|vendor_ruby|" ${worksrcpath}/install.rb
193                        }
194
195                        use_configure   no
196
197                        build                   {}
198
199                        pre-destroot {
200                                xinstall -d -m 0755 ${destroot}${ruby.lib}
201                        }
202                        destroot.env    DESTROOT=${destroot}
203                        destroot.cmd    ${ruby.bin} -rvendor-specific -rdestroot install.rb
204                        destroot.target
205                        destroot.destdir
206                }
207                copy_install:* {
208                        set ruby.srcdir [lindex [split ${type} {:}] 1]
209
210                        use_configure   no
211
212                        build                   {}
213
214                        destroot {
215                                set root ${worksrcpath}/${ruby.srcdir}
216                                xinstall -d -m 0755 ${destroot}${ruby.lib}
217                                fs-traverse file $root {
218                                        set file [trimroot $root $file]
219                                        if {$file ne ""} {
220                                                set filepath [file join $root $file]
221                                                if {[file isdirectory $filepath]} {
222                                                        xinstall -d -m 0755 ${destroot}${ruby.lib}/${file}
223                                                } else {
224                                                        xinstall -m 0644 $filepath ${destroot}${ruby.lib}/${file}
225                                                }
226                                        }
227                                }
228                        }
229                }
230                install.rb {
231                        configure.cmd           ${ruby.bin} -rvendor-specific install.rb
232                        configure.pre_args      config
233
234                        build.cmd                       ${ruby.bin} -rvendor-specific install.rb
235                        build.target            setup
236
237                        pre-destroot {
238                                if {[file isfile ${worksrcpath}/config.save]} {
239                                        reinplace "s|^prefix=${prefix}|prefix=${destroot}${prefix}|g" \
240                                                ${worksrcpath}/config.save
241                                }
242                                if {[file isfile ${worksrcpath}/.config]} {
243                                        reinplace "s|^prefix=${prefix}|prefix=${destroot}${prefix}|g" \
244                                                ${worksrcpath}/.config
245                                }
246                        }
247                        destroot.cmd            ${ruby.bin} -rvendor-specific install.rb
248                        destroot.target         install
249                        destroot.destdir
250                }
251                setup.rb {
252                        configure.cmd           ${ruby.bin} -rvendor-specific setup.rb
253                        configure.pre_args      config
254
255                        build.cmd                       ${ruby.bin} -rvendor-specific setup.rb
256                        build.target            setup
257
258                        pre-destroot {
259                                if {[file isfile ${worksrcpath}/config.save]} {
260                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
261                                                ${worksrcpath}/config.save
262                                }
263                                if {[file isfile ${worksrcpath}/.config]} {
264                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
265                                                ${worksrcpath}/.config
266                                }
267                        }
268                        destroot.cmd            ${ruby.bin} -rvendor-specific setup.rb
269                        destroot.target         install
270                        destroot.destdir
271                }
272                extconf.rb {
273                        configure.cmd           ${ruby.bin} -rvendor-specific extconf.rb
274                        configure.pre_args
275                        configure.args          --prefix=${prefix}
276
277                        build.args                      RUBY="${ruby.bin} -rvendor-specific"
278
279                        destroot.args           RUBY="${ruby.bin} -rvendor-specific"
280                }
281                gnu {
282                        build.args                      RUBY="${ruby.bin} -rvendor-specific"
283
284                        pre-destroot {
285                                if {[file isfile ${worksrcpath}/config.save]} {
286                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
287                                                ${worksrcpath}/config.save
288                                }
289                                if {[file isfile ${worksrcpath}/.config]} {
290                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
291                                                ${worksrcpath}/.config
292                                }
293                        }
294                        destroot.args           RUBY="${ruby.bin} -rvendor-specific"
295                }
296                gem {
297                        use_configure no
298                        extract.suffix .gem
299                       
300                        if {${implementation} eq "ruby"} {
301                            depends_lib-append  port:rb-rubygems
302                        }
303                       
304                        extract {}
305                        build {}
306                       
307                        pre-destroot {
308                                xinstall -d -m 0755 ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version}
309                        }
310                       
311                        destroot {
312                          system "cd ${worksrcpath} && ${ruby.gem} install --local --force --install-dir ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version} ${distpath}/${distname}"
313                       
314                                set binDir ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version}/bin
315                                if {[file isdirectory $binDir]} {
316                                        foreach file [readdir $binDir] {
317                                                file copy [file join $binDir $file] ${destroot}${prefix}/bin
318                                        }
319                                }
320                        }
321                }
322                fetch {
323                        # do nothing but fetch and extract - for strange installers
324                        build {}
325                }
326                default {
327                        ui_error "ruby.setup: unknown setup type '${type}' specified!"
328                        return -code error "ruby.setup failed"
329                }
330        }
331
332    if {$type != "gnu"} {
333        configure.universal_args-delete  --disable-dependency-tracking
334        }
335
336        post-destroot {
337                # Install documentation files (if specified)
338                if {[llength ${ruby.docs}] > 0} {
339                        set docPath ${prefix}/share/doc/${name}
340                        xinstall -d -m 0755 ${destroot}${docPath}
341                        foreach docitem ${ruby.docs} {
342                                set docitem [file join ${worksrcpath} ${docitem}]
343                                if {[file isdirectory ${docitem}]} {
344                                    set subdir [file tail $docitem]
345                                    xinstall -d -m 0755 ${destroot}${docPath}/${subdir}
346                                        fs-traverse file $docitem {
347                                                set file [trimroot $docitem $file]
348                                                if {$file ne ""} {
349                                                        set filepath [file join $docitem $file]
350                                                        if {[file isdirectory $filepath]} {
351                                                                xinstall -d -m 0755 ${destroot}${docPath}/${subdir}/${file}
352                                                        } else {
353                                                                xinstall -m 0644 $filepath ${destroot}${docPath}/${subdir}/${file}
354                                                        }
355                                                }
356                                        }
357                                } else {
358                                        xinstall -m 0644 ${docitem} ${destroot}${docPath}
359                                }
360                        }
361                }
362        }
363}
364
365proc trimroot {root path} {
366        set acc {}
367        set skiproot no
368        foreach rootf [file split $root] pathf [file split $path] {
369                if {$pathf eq ""} {
370                        # we've hit the end of the path
371                        break
372                } elseif {$skiproot eq "yes" || $rootf eq ""} {
373                        lappend acc $pathf
374                } elseif {$rootf ne $pathf} {
375                        # diverged from the root
376                        lappend acc $pathf
377                        set skiproot yes
378                }
379        }
380        if {[llength $acc] == 0} {
381                return ""
382        } else {
383                return [eval [subst -nobackslashes -nocommands {file join $acc}]]
384        }
385}
Note: See TracBrowser for help on using the repository browser.