#!/usr/bin/env port-tclsh # -*- 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 # $Id$ # # Create Portfile package require cmdline package require portutil 1.0 package require Pextlib 1.0 package require portchecksum 1.0 # Get tarball filename from tarball URL proc get_tarball_filename {url} { set length [string length $url] set last [string last "/" $url] incr last; # Discard prefix "/" return [string range $url $last $length] } # Get name from tarball filename proc get_name {tarball} { set last_dash [string last "-" $tarball] incr last_dash -1; # Discard suffix "-" return [string range $tarball 0 $last_dash] } # Get version from tarball filename proc get_version {tarball} { set rtv [regexp {(\d+\.)?(\d+\.)?(\*|\d+)} $tarball match] if {$rtv == 1} { return $match } else { return 0 } } proc get_group {group argv} { switch $group { github { puts [exec github2port/github2port -github {*}$argv] } bitbucket { puts [exec github2port/github2port -bitbucket {*}$argv] } default { puts [exec portfile-gen/portfile-gen -g $group {*}$argv] } } } proc read_template {file} { set fp [open $file r] set template [read $fp] close $fp return $template } proc val_or_def {val def} { expr {$val ne "" ? $val : $def} } set options { {url.arg "" "set the tarball URL of port"} {name.arg "" "set the name of port" } {version.arg "" "set the version of port" } {group.arg "" "set the group of port" } {homebrew.arg "" "Search Homebrew" } {fink.arg "" "Search Fink" } {debian.arg "" "Search Debian" } {opensuse.arg "" "Search openSUSE" } {fedora.arg "" "Search Fedora" } {ubuntu.arg "" "Search Ubuntu" } {arch.arg "" "Search Archlinux" } } set usage ": $argv0 \[-url ] \[-name ] \[-version ] \[-group ] \[-homebrew|-fink|-debian|-opensuse|-fedora|-ubuntu|-arch ] options:" if {[catch {array set params [cmdline::getoptions ::argv $options $usage]}]} { puts [cmdline::usage $options $usage] exit 2 } # Parse search on other sites options set query $params(homebrew) if {[expr {[string length $query] > 0}]} { exec open "https://github.com/Homebrew/homebrew/search?l=ruby&q=$query" exit 0 } set query $params(fink) if {[expr {[string length $query] > 0}]} { exec open "http://pdb.finkproject.org/pdb/browse.php?summary=$query" exit 0 } set query $params(debian) if {[expr {[string length $query] > 0}]} { exec open "https://packages.debian.org/search?keywords=${query}&searchon=names&suite=all§ion=all" exit 0 } set query $params(opensuse) if {[expr {[string length $query] > 0}]} { exec open "https://software.opensuse.org/search?q=${query}" exit 0 } set query $params(fedora) if {[expr {[string length $query] > 0}]} { exec open "https://admin.fedoraproject.org/pkgdb/packages/%2A${query}%2A/" exit 0 } set query $params(ubuntu) if {[expr {[string length $query] > 0}]} { exec open "http://packages.ubuntu.com/search?keywords=${query}&searchon=names&suite=all§ion=all" exit 0 } set query $params(arch) if {[expr {[string length $query] > 0}]} { exec open "https://www.archlinux.org/packages/?q=${query}" exit 0 } # Parse -group if {[expr {[string length $params(group)] > 0}]} { get_group $params(group) $argv exit 0 } set name "replaceme" set version "replaceme" set maintainers "replaceme" set master_sites "replaceme" set rmd160 "replaceme" set sha256 "replaceme" # Parse -url if {[expr {[string length $params(url)] > 0}]} { set tarball [get_tarball_filename $params(url)] set name [val_or_def [get_name $tarball] $name] set version [val_or_def [get_version $tarball] $version] set master_sites [val_or_def [string range $params(url) 0 end-[string length $tarball]] $master_sites] set file_url "/tmp/$tarball.TMP" curl fetch $params(url) $file_url set rmd160 [val_or_def [portchecksum::calc_rmd160 $file_url] $rmd160] set sha256 [val_or_def [portchecksum::calc_sha256 $file_url] $sha256] } # Parse -name and -version set name [val_or_def $params(name) $name] set version [val_or_def $params(version) $version] if {[info exist env(EMAIL)]} { set maintainers $env(EMAIL) } ################## ## Print Result ## ################## puts "# -*- 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" puts "# \$Id\$" puts "" puts "PortSystem 1.0" puts "" puts "name ${name}" puts "version ${version}" puts "categories replaceme" puts "platforms darwin" puts "homepage replaceme" puts "maintainers replaceme" puts "license replaceme" puts "maintainers ${maintainers}" puts "" puts "description replaceme" puts "" puts "long_description replaceme" puts "" puts "master_sites ${master_sites}" puts "" puts "checksums rmd160 ${rmd160} \\" puts " sha256 ${sha256}"