propset - enables svn keywords
[build.git] / packages.sh
1 #!/bin/bash
2 #
3 # Generates XML manifest of packages for
4 # http://www.planet-lab.org/Software/download.php
5 #
6 # Mark Huang <mlhuang@cs.princeton.edu>
7 # Copyright (C) 2004 The Trustees of Princeton University
8 #
9 # $Id$
10 #
11
12 # Set defaults
13 BASE=
14
15 # Get options
16 while getopts "b:h" opt ; do
17     case $opt in
18         b)
19             BASE=$OPTARG
20             ;;
21         h|*)
22             echo "usage: `basename $0` [OPTION]..."
23             echo "      -b base         URL base for packages (default: none)"
24             exit 1
25             ;;
26     esac
27 done
28 shift $(($OPTIND - 1))
29
30 xml_escape_pcdata() {
31     # & to &amp;
32     # " to &quot;
33     # ' to &apos;
34     # < to &lt;
35     # > to &gt;
36     sed \
37         -e 's/\&/\&amp;/g' | sed \
38         -e 's/"/\&quot;/g' \
39         -e "s/'/\&apos;/g" \
40         -e 's/</\&lt;/g' \
41         -e 's/>/\&gt;/g'
42 }
43
44 xml_escape_cdata() {
45     # & to &amp;
46     # \ to \\
47     # " to \"
48     # ' to &apos;
49     # < to &lt;
50     # > to &gt;
51     sed \
52         -e 's/\&/\&amp;/g' \
53         -e 's/\\/\\\\/g' | sed \
54         -e 's/"/\\"/g' \
55         -e "s/'/\&apos;/g" \
56         -e 's/</\&lt;/g' \
57         -e 's/>/\&gt;/g'
58 }
59
60 # XXX rpmquery version 4.3.1 crashes if too large of a queryformat is passed
61 #TAGS=$(rpm --querytags)
62 TAGS="NAME VERSION RELEASE ARCH URL BUILDTIME DESCRIPTION"
63
64 cat <<EOF
65 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
66 <!-- \$Id$ -->
67 <!-- Generated at $(date) in $(cd ${1-.} && pwd -P) on $HOSTNAME by $USER -->
68 <!DOCTYPE PACKAGES [
69   <!ELEMENT PACKAGES (PACKAGE)*>
70   <!ATTLIST PACKAGES
71   BASE CDATA #REQUIRED
72   >
73   <!ELEMENT PACKAGE (#PCDATA)>
74   <!ATTLIST PACKAGE
75 EOF
76
77 # List each tag as an attribute
78 QUERYFORMAT=
79 for tag in $TAGS ; do
80
81 cat <<EOF
82   $tag CDATA #REQUIRED
83 EOF
84
85     # Build up QUERYFORMAT for later use
86     QUERYFORMAT="$QUERYFORMAT  $tag=@QUOTE@%{$tag}@QUOTE@\n"
87
88 done
89
90 cat <<EOF
91   >
92 ]>
93 <PACKAGES
94 BASE="$BASE"
95 >
96 EOF
97
98 # For every RPM in the current directory
99 RPMS=$(find ${1-.} -name '*.rpm' -and -not -name '*debuginfo*' | sort)
100 for rpm in $RPMS ; do
101
102 cat <<EOF
103   <PACKAGE
104 EOF
105
106     # Print the tags (@QUOTE@ prevents escaping of syntax)
107     rpmquery --queryformat "$QUERYFORMAT" -p $rpm | xml_escape_cdata | sed -e 's/@QUOTE@/"/g'
108
109 # Print the name of the RPM
110 cat <<EOF
111   >
112   $(basename $rpm | xml_escape_pcdata)
113   </PACKAGE>
114 EOF
115
116 done
117
118 cat <<EOF
119 </PACKAGES>
120 EOF