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

Last change on this file since 81442 was 81442, checked in by ryandesign@…, 8 years ago

ruby-1.0.tcl: remove ruby.inoack.com which is offline, possibly gone; see #30473

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 12.3 KB
Line 
1# $Id: ruby-1.0.tcl 81442 2011-07-30 22:25:18Z ryandesign@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                        livecheck.type  regex
132                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
133                        livecheck.regex "<strong>${ruby.module}</strong></td><td>(?:REL )?(.*)$"
134                }
135                rubyforge_gem {
136                        homepage                http://rubyforge.org/projects/${ruby.project}
137                        master_sites    http://gems.rubyforge.vm.bytemark.co.uk/gems/ \
138                                        http://rubyforge.iasi.roedu.net/gems/
139                        livecheck.type  regex
140                        livecheck.url   http://rubyforge.org/projects/${ruby.project}
141                        livecheck.regex "<strong>${ruby.module}</strong></td><td>(?:REL )?(.*)$"
142                }
143                rubygems {
144                    homepage        http://www.rubygems.org/gems/${ruby.project}
145                    master_sites    http://www.rubygems.org/downloads/
146                    livecheck.type  regex
147                    livecheck.url   http://www.rubygems.org/gems/${ruby.project}
148                    livecheck.regex {<h3>(\d|\d[0-9.]*\d)</h3>}
149                }
150                sourceforge:* {
151                        set ruby.project [lindex [split ${source} {:}] 1]
152                        homepage                http://sourceforge.net/projects/${ruby.project}
153                        master_sites    sourceforge:${ruby.project}
154                }
155                sourceforge {
156                        homepage                http://sourceforge.net/projects/${ruby.project}
157                        master_sites    sourceforge:${ruby.project}
158                }
159        }
160
161        distname                ${ruby.filename}-${vers}
162        dist_subdir             ruby
163
164        depends_lib             port:${implementation}
165
166        post-extract {
167                # Create the work directory for gem-based ruby ports.
168                system "mkdir -p ${worksrcpath}"
169                system "find ${worksrcpath} -type d -name CVS | xargs rm -rf"
170        }
171
172        switch -glob ${type} {
173                basic_install.rb {
174                        post-patch {
175                                # create destroot setup file
176                                set fp [open ${worksrcpath}/destroot.rb w]
177                                puts $fp "
178                                        require 'rbconfig'
179                                        include Config
180                                        DESTROOT=ENV\['DESTROOT'\] || ''
181                                        CONFIG.keys.find_all { |d|
182                                                d.match(/dir\$/) and !d.match(/(src|build|compile)/)
183                                        }.each {|confdir|
184                                                CONFIG\[confdir\]=DESTROOT+CONFIG\[confdir\]
185                                        }
186                                        \$:.reverse.each { |d| \$:.unshift(DESTROOT+d) }
187                                "
188                                close $fp
189                                # adjust basic install.rb script
190                                reinplace "s|site_ruby|vendor_ruby|" ${worksrcpath}/install.rb
191                        }
192
193                        use_configure   no
194
195                        build                   {}
196
197                        pre-destroot {
198                                xinstall -d -m 0755 ${destroot}${ruby.lib}
199                        }
200                        destroot.env    DESTROOT=${destroot}
201                        destroot.cmd    ${ruby.bin} -rvendor-specific -rdestroot install.rb
202                        destroot.target
203                        destroot.destdir
204                }
205                copy_install:* {
206                        set ruby.srcdir [lindex [split ${type} {:}] 1]
207
208                        use_configure   no
209
210                        build                   {}
211
212                        destroot {
213                                set root ${worksrcpath}/${ruby.srcdir}
214                                xinstall -d -m 0755 ${destroot}${ruby.lib}
215                                fs-traverse file $root {
216                                        set file [trimroot $root $file]
217                                        if {$file ne ""} {
218                                                set filepath [file join $root $file]
219                                                if {[file isdirectory $filepath]} {
220                                                        xinstall -d -m 0755 ${destroot}${ruby.lib}/${file}
221                                                } else {
222                                                        xinstall -m 0644 $filepath ${destroot}${ruby.lib}/${file}
223                                                }
224                                        }
225                                }
226                        }
227                }
228                install.rb {
229                        configure.cmd           ${ruby.bin} -rvendor-specific install.rb
230                        configure.pre_args      config
231
232                        build.cmd                       ${ruby.bin} -rvendor-specific install.rb
233                        build.target            setup
234
235                        pre-destroot {
236                                if {[file isfile ${worksrcpath}/config.save]} {
237                                        reinplace "s|^prefix=${prefix}|prefix=${destroot}${prefix}|g" \
238                                                ${worksrcpath}/config.save
239                                }
240                                if {[file isfile ${worksrcpath}/.config]} {
241                                        reinplace "s|^prefix=${prefix}|prefix=${destroot}${prefix}|g" \
242                                                ${worksrcpath}/.config
243                                }
244                        }
245                        destroot.cmd            ${ruby.bin} -rvendor-specific install.rb
246                        destroot.target         install
247                        destroot.destdir
248                }
249                setup.rb {
250                        configure.cmd           ${ruby.bin} -rvendor-specific setup.rb
251                        configure.pre_args      config
252
253                        build.cmd                       ${ruby.bin} -rvendor-specific setup.rb
254                        build.target            setup
255
256                        pre-destroot {
257                                if {[file isfile ${worksrcpath}/config.save]} {
258                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
259                                                ${worksrcpath}/config.save
260                                }
261                                if {[file isfile ${worksrcpath}/.config]} {
262                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
263                                                ${worksrcpath}/.config
264                                }
265                        }
266                        destroot.cmd            ${ruby.bin} -rvendor-specific setup.rb
267                        destroot.target         install
268                        destroot.destdir
269                }
270                extconf.rb {
271                        configure.cmd           ${ruby.bin} -rvendor-specific extconf.rb
272                        configure.pre_args
273                        configure.args          --prefix=${prefix}
274
275                        build.args                      RUBY="${ruby.bin} -rvendor-specific"
276
277                        destroot.args           RUBY="${ruby.bin} -rvendor-specific"
278                }
279                gnu {
280                        build.args                      RUBY="${ruby.bin} -rvendor-specific"
281
282                        pre-destroot {
283                                if {[file isfile ${worksrcpath}/config.save]} {
284                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
285                                                ${worksrcpath}/config.save
286                                }
287                                if {[file isfile ${worksrcpath}/.config]} {
288                                        reinplace "s|${prefix}|${destroot}${prefix}|g" \
289                                                ${worksrcpath}/.config
290                                }
291                        }
292                        destroot.args           RUBY="${ruby.bin} -rvendor-specific"
293                }
294                gem {
295                        use_configure no
296                        extract.suffix .gem
297                       
298                        if {${implementation} eq "ruby"} {
299                            depends_lib-append  port:rb-rubygems
300                        }
301                       
302                        extract {}
303                        build {}
304                       
305                        pre-destroot {
306                                xinstall -d -m 0755 ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version}
307                        }
308                       
309                        destroot {
310                          system "cd ${worksrcpath} && ${ruby.gem} install --local --force --install-dir ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version} ${distpath}/${distname}"
311                       
312                                set binDir ${destroot}${prefix}/lib/ruby${ruby.prog_suffix}/gems/${ruby.version}/bin
313                                if {[file isdirectory $binDir]} {
314                                        foreach file [readdir $binDir] {
315                                                file copy [file join $binDir $file] ${destroot}${prefix}/bin
316                                        }
317                                }
318                        }
319                }
320                fetch {
321                        # do nothing but fetch and extract - for strange installers
322                        build {}
323                }
324                default {
325                        ui_error "ruby.setup: unknown setup type '${type}' specified!"
326                        return -code error "ruby.setup failed"
327                }
328        }
329
330    if {$type != "gnu"} {
331        configure.universal_args-delete  --disable-dependency-tracking
332        }
333
334        post-destroot {
335                # Install documentation files (if specified)
336                if {[llength ${ruby.docs}] > 0} {
337                        set docPath ${prefix}/share/doc/${name}
338                        xinstall -d -m 0755 ${destroot}${docPath}
339                        foreach docitem ${ruby.docs} {
340                                set docitem [file join ${worksrcpath} ${docitem}]
341                                if {[file isdirectory ${docitem}]} {
342                                    set subdir [file tail $docitem]
343                                    xinstall -d -m 0755 ${destroot}${docPath}/${subdir}
344                                        fs-traverse file $docitem {
345                                                set file [trimroot $docitem $file]
346                                                if {$file ne ""} {
347                                                        set filepath [file join $docitem $file]
348                                                        if {[file isdirectory $filepath]} {
349                                                                xinstall -d -m 0755 ${destroot}${docPath}/${subdir}/${file}
350                                                        } else {
351                                                                xinstall -m 0644 $filepath ${destroot}${docPath}/${subdir}/${file}
352                                                        }
353                                                }
354                                        }
355                                } else {
356                                        xinstall -m 0644 ${docitem} ${destroot}${docPath}
357                                }
358                        }
359                }
360        }
361}
362
363proc trimroot {root path} {
364        set acc {}
365        set skiproot no
366        foreach rootf [file split $root] pathf [file split $path] {
367                if {$pathf eq ""} {
368                        # we've hit the end of the path
369                        break
370                } elseif {$skiproot eq "yes" || $rootf eq ""} {
371                        lappend acc $pathf
372                } elseif {$rootf ne $pathf} {
373                        # diverged from the root
374                        lappend acc $pathf
375                        set skiproot yes
376                }
377        }
378        if {[llength $acc] == 0} {
379                return ""
380        } else {
381                return [eval [subst -nobackslashes -nocommands {file join $acc}]]
382        }
383}
Note: See TracBrowser for help on using the repository browser.