local RELEASE="${4:-unstable}"
local DEPENDENCIES="$5"
local DESCRIPTION="$6"
+ local SECTION="${7:-others}"
+ local DISTSECTION
+ if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
+ DISTSECTION="main"
+ else
+ DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)"
+ fi
msgndebug "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CDEBUG}… "
local BUILDDIR=incoming/${NAME}-${VERSION}
mkdir -p ${BUILDDIR}/debian/source
cd ${BUILDDIR}
echo "* most suckless software product ever" > FEATURES
- test -e debian/copyright || (echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright)
- test -e debian/changelog || (echo "$NAME ($VERSION) $RELEASE; urgency=low
+ test -e debian/copyright || echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright
+ test -e debian/changelog || echo "$NAME ($VERSION) $RELEASE; urgency=low
* Initial release
- -- Joe Sixpack <joe@example.org> $(date -R)" > debian/changelog)
- test -e debian/control || (echo "Source: $NAME
-Section: admin
+ -- Joe Sixpack <joe@example.org> $(date -R)" > debian/changelog
+ test -e debian/control || echo "Source: $NAME
+Section: $SECTION
Priority: optional
Maintainer: Joe Sixpack <joe@example.org>
Build-Depends: debhelper (>= 7)
Standards-Version: 3.9.1
Package: $NAME
-Architecture: $ARCH" > debian/control)
+Architecture: $ARCH" > debian/control
test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control
if [ -z "$DESCRIPTION" ]; then
echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
else
echo "Description: $DESCRIPTION" >> debian/control
fi
- test -e debian/compat || (echo "7" > debian/compat)
- test -e debian/source/format || (echo "3.0 (native)" > debian/source/format)
+ test -e debian/compat || echo "7" > debian/compat
+ test -e debian/source/format || echo "3.0 (native)" > debian/source/format
test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules
- dpkg-buildpackage -uc -us -a$ARCH > /dev/null 2> /dev/null
+ local BUILT="$(dpkg-buildpackage -uc -us -a$ARCH 2> /dev/null)"
+ local PKGS="$( echo "$BUILT" | grep '^dpkg-deb: building package' | cut -d'/' -f 2 | sed -e "s#'\.##")"
+ local SRCS="$( echo "$BUILT" | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._-]*$')"
cd - > /dev/null
+ for PKG in $PKGS; do
+ echo "pool/${PKG}" >> ./incoming/${RELEASE}.${DISTSECTION}.pkglist
+ done
+ for SRC in $SRCS; do
+ echo "pool/${SRC}" >> ./incoming/${RELEASE}.${DISTSECTION}.srclist
+ done
rm -rf $BUILDDIR
msgdone "debug"
}
buildaptarchive() {
- msgninfo "Build APT archive for ${CCMD}$0${CINFO} based on "
if [ -d incoming ]; then
buildaptarchivefromincoming $*
else
CacheDir "' >> ftparchive.conf
echo -n $(readlink -f ..) >> ftparchive.conf
echo -n '";
+ FileListDir "' >> ftparchive.conf
+ echo -n $(readlink -f pool/) >> ftparchive.conf
+ echo -n '";
+};
+Default {
+ Packages::Compress ". gzip bzip2 lzma";
+ Sources::Compress ". gzip bzip2 lzma";
+ Contents::Compress ". gzip bzip2 lzma";
};
TreeDefault {
Directory "pool/";
};
};
};' >> ftparchive.conf
- if [ -z "$1" ]; then
- echo -n 'tree "dists/unstable" {
+ for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do
+ echo -n 'tree "dists/' >> ftparchive.conf
+ echo -n "$DIST" >> ftparchive.conf
+ echo -n '" {
Architectures "' >> ftparchive.conf
echo -n "$ARCHS" >> ftparchive.conf
- echo 'source";
- Sections "main";
+ echo -n 'source";
+ FileList "' >> ftparchive.conf
+ echo -n "${DIST}.\$(SECTION).pkglist" >> ftparchive.conf
+ echo -n '";
+ SourceFileList "' >> ftparchive.conf
+ echo -n "${DIST}.\$(SECTION).srclist" >> ftparchive.conf
+ echo -n '";
+ Sections "' >> ftparchive.conf
+ echo -n "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')" >> ftparchive.conf
+ echo '";
};' >> ftparchive.conf
- fi
+ done
+ less ftparchive.conf
}
buildaptftparchivedirectorystructure() {
- local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#')"
- for arch in $ARCHS; do
- mkdir -p dists/unstable/main/binary-${arch}
+ local DISTS="$(grep -i '^tree ' ftparchive.conf | cut -d'/' -f 2 | sed -e 's#".*##')"
+ for DIST in $DISTS; do
+ local SECTIONS="$(grep -i -A 5 "dists/$DIST" ftparchive.conf | grep -i 'Sections' | cut -d'"' -f 2)"
+ for SECTION in $SECTIONS; do
+ local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')"
+ for ARCH in $ARCHS; do
+ mkdir -p dists/${DIST}/${SECTION}/binary-${ARCH}
+ done
+ mkdir -p dists/${DIST}/${SECTION}/source
+ mkdir -p dists/${DIST}/${SECTION}/i18n
+ done
done
- mkdir -p dists/unstable/main/source
- mkdir -p dists/unstable/main/i18n
}
buildaptarchivefromincoming() {
- msginfo "incoming packages…"
+ msginfo "Build APT archive for ${CCMD}$0${CINFO} based on incoming packages…"
cd aptarchive
[ -e pool ] || ln -s ../incoming pool
[ -e ftparchive.conf ] || createaptftparchiveconfig
[ -e dists ] || buildaptftparchivedirectorystructure
+ msgninfo "\tGenerate Packages, Sources and Contents files… "
aptftparchive -qq generate ftparchive.conf
+ msgdone "info"
+ msgninfo "\tGenerate Release files… "
for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do
- aptftparchive -qq release $dir > $dir/Release
- sed -i -e '/0 Release$/ d' $dir/Release # remove the self reference
+ aptftparchive -qq release $dir | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference
done
cd - > /dev/null
msgdone "info"
}
buildaptarchivefromfiles() {
- msginfo "prebuild files…"
+ msginfo "Build APT archive for ${CCMD}$0${CINFO} based on prebuild files…"
cd aptarchive
if [ -f Packages ]; then
msgninfo "\tPackages file… "
cat Sources | lzma > Sources.lzma
msgdone "info"
fi
- aptftparchive -qq release . > Release
- sed -i -e '/0 Release$/ d' Release # remove the self reference
+ msgninfo "\tRelease file… "
+ aptftparchive -qq release . | sed -e '/0 Release$/ d' > Release # remove the self reference
+ msgdone "info"
cd ..
}
-setupaptarchive() {
- buildaptarchive
+setupdistsaptarchive() {
+ local APTARCHIVE=$(readlink -f ./aptarchive)
+ rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list
+ rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list
+ for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do
+ SECTIONS=$(find ./aptarchive/dists/${DISTS}/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ')
+ msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… "
+ echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list
+ echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list
+ msgdone "info"
+ done
+}
+
+setupflataptarchive() {
local APTARCHIVE=$(readlink -f ./aptarchive)
if [ -f ${APTARCHIVE}/Packages ]; then
msgninfo "\tadd deb sources.list line… "
else
rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
fi
+}
+
+setupaptarchive() {
+ buildaptarchive
+ if [ -e aptarchive/dists ]; then
+ setupdistsaptarchive
+ else
+ setupflataptarchive
+ fi
aptget update -qq
}