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

Last change on this file since 96776 was 96776, checked in by blair@…, 7 years ago

group/*: trim trailing whitespace.

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