From 990247efe8f559758a35cd5ab09ead7ab654a215 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Wed, 1 Oct 2008 03:56:21 +0200 Subject: [PATCH] Add mktmpl.sh, a shell script to create new templates. It will make you some questions and it will download the tarball, compute the checksum to finally create a minimal template that should work for many cases using GNU configure scripts. --HG-- extra : convert_revision : f6c1d7793c32ebd3d29eb679ad1ea0d38aa84210 --- mktmpl.sh | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100755 mktmpl.sh diff --git a/mktmpl.sh b/mktmpl.sh new file mode 100755 index 0000000000..9db629e6d2 --- /dev/null +++ b/mktmpl.sh @@ -0,0 +1,188 @@ +#!/bin/sh +# +#- +# Copyright (c) 2008 Juan Romero Pardines. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#- +# +# Shell script to automate the creation of new templates for pkgfs. +# Only writes basic stuff into the template, if you need advanced stuff +# you'll have to do that manually. +# +# At least it will fetch the distfile and compute the checksum, plus +# other stuff for free... so it's not that bad, heh. +# + +: ${ftp_cmd:=/usr/bin/ftp -a} +: ${awk_cmd:=/usr/bin/awk} +: ${cksum_cmd:=/usr/bin/cksum -a rmd160} +: ${sed_cmd:=/usr/bin/sed} +: ${db_cmd:=/usr/bin/db -q} + +write_new_template() +{ + local tmpldir="$PKGFS_DISTRIBUTIONDIR/templates" + local depsdir="$PKGFS_DISTRIBUTIONDIR/dependencies" + local distdir="$PKGFS_SRCDISTDIR" + local checksum= + local dfile= + + [ ! -d $distdir -o ! -d $tmpldir -o ! -d $depsdir ] && exit 1 + + save_pwd=$(pwd -P 2>/dev/null) + echo "=> Fetching distfile from $url" + cd $distdir && $ftp_cmd $url + [ "$?" -ne 0 ] && echo "Error fetching file, aborting." && exit 1 + + dfile=$(basename $url) + checksum=$($cksum_cmd $dfile|$awk_cmd '{print $4}') + [ -z "$checksum" ] && echo "Checksum empty, aborting." && exit 1 + + cd $save_pwd + + pkg="$pkgname-$version" + pkg_sufx=${dfile##$pkg} + + if [ "$build_style" = "g" ]; then + build_style=gnu_configure + else + build_style=configure + fi + + if [ -f "$tmpldir/$pkg.tmpl" ]; then + echo "There's an existing template with the same name, do you" + echo -n "want to overwrite it? (y)es or (n)o: " + read overwrite + if [ "$overwrite" = "n" ]; then + echo "not overwriting... bye." + exit 1 + elif [ -z "$overwrite" ]; then + echo "no answer?... will overwrite" + fi + fi + + ( \ + echo "# Template build file for '$pkg'."; \ + echo "pkgname=$pkg"; \ + echo "extract_sufx=\"$pkg_sufx\""; \ + echo "url=${url%%/$dfile}"; \ + echo "build_style=$build_style"; \ + if [ -n "$pcfiles" ]; then \ + echo "pkgconfig_override=\"$pcfiles\""; \ + fi; \ + echo "short_desc=\"$short_desc\""; \ + echo "checksum=$checksum"; \ + echo "longdesc=\"...\""; \ + ) > $tmpldir/$pkg.tmpl + + if [ ! -r "$tmpldir/$pkg.tmpl" ]; then + echo "Couldn't write template, aborting." + exit 1 + fi + + if [ -n "$deps" ]; then + [ -n "$pcfiles" ] && deps="pkg-config-0.23 $deps" + + $db_cmd -C -P 512 -w btree $depsdir/$pkg-deps.db deps \ + "$deps" 2>&1 >/dev/null + [ "$?" -ne 0 ] && \ + echo "Errong writing dependencies db file." && exit 1 + fi + + echo + echo "=> Template created at: $tmpldir/$pkg.tmpl" + echo + echo "If you need more changes, do them manually. You can also look" + echo "at $tmpldir/example.tmpl to know what variables can be used and" + echo "to learn about their meanings. Don't forget to set \$long_desc!" + echo + echo "Happy hacking!" +} + +read_parameters() +{ + if [ ! -f "$config_file" ]; then + echo "-- Configuration file cannot be read --" + exit 1 + fi + + . $config_file + + echo -n "Enter name of this package: " + read pkgname + + [ -z "$pkgname" ] && echo "-- Empty value --" && exit 1 + + echo -n "Enter version number of this package: " + read version + + [ -z "$version" ] && echo "-- Empty value --" && exit 1 + + echo "What's the build style for this template?" + echo -n "(g)nu_configure, (c)onfigure: " + read build_style + + if [ -z "$build_style" ]; then + echo " -- Empty value --" + exit 1 + elif [ "$build_style" = "g" ]; then + gnu_configure=yes + elif [ "$build_style" = "c" ]; then + configure=yes + else + echo " -- Invalid answer --" + exit 1 + fi + + echo "Please enter exact dependencies required for this template." + echo "They must be separated by whitespaces, e.g: foo-1.0 blah-2.0" + echo -n "> " + read deps + [ -z "$deps" ] && echo "No dependencies, continuing..." + + echo "Will this package install pkg-config files?" + echo "If true, enter the names of the files with the .pc extension" + echo "and separated with whitespaces between them, e.g: foo.pc blah.pc." + echo + echo "Alternatively press the enter key to ignore this question." + echo -n "> " + read pcfiles + + echo "Enter full URL to download the distfile: " + echo -n "> " + read url + [ -z "$url" ] && echo " -- Empty value --" && exit 1 + + echo "Enter short description (max 72 characters):" + echo -n "> " + read short_desc + + write_new_template +} + +config_file="$1" +[ -z "$config_file" ] && \ + echo "usage: $(basename $0) /path/to/pkgfs.conf" && exit 1 + +read_parameters +exit $?