# Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=5 inherit games MY_PN="${PN%-maps}" DESCRIPTION="Xonotic maps" HOMEPAGE="http://www.xonotic.org/" LICENSE="GPL-2" SLOT="0" IUSE="unofficial" RDEPEND="" DEPEND=" app-arch/unzip net-misc/wget " S="${WORKDIR}" RESTRICT="test" pkg_pretend() { check-reqs_pkg_pretend } pkg_setup() { check-reqs_pkg_setup games_pkg_setup ewarn "Downloaded pk3 files will be stored in \"xonotic-maps\" subdirectory of your DISTDIR" echo if use unofficial; then ewarn "You have enabled \"unofficial\" USE flag. Incomplete, unstable or broken maps may be installed." echo fi } src_unpack() { # Used git.eclass,v 1.50 as example : ${MAPS_STORE_DIR:="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/xonotic-maps"} # initial download, we have to create master maps storage directory and play # nicely with sandbox if [[ ! -d ${MAPS_STORE_DIR} ]] ; then addwrite / mkdir -p "${MAPS_STORE_DIR}" \ || die "can't mkdir ${MAPS_STORE_DIR}." export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}" fi # allow writing into MAPS_STORE_DIR addwrite "${MAPS_STORE_DIR}" # FETCHCOMMAND from make.globals is example local WGET="/usr/bin/wget -t 3 -T 60" local base_url="http://beta.xonotic.org/autobuild-bsp/" einfo "Downloading lists" $WGET -O all_maps.html \ "${base_url}" || die $WGET -O official_maps.html \ 'http://git.xonotic.org/?p=xonotic/xonotic-maps.pk3dir.git;a=tree;f=maps' || die grep -e '\.map' official_maps.html |\ sed -e 's,.*">\([^<]*\).map<\/a>.*,\1,' > official_maps.txt || die [ -s official_maps.txt ] || die "List of official maps is empty" cp official_maps.txt install_maps.txt || die if use unofficial; then # For maps not in master branch we need to download fullpk3 # AllMaps - OfficialMaps = UnofficialMaps grep all_maps.html \ -e '' |\ sed -e 's,.*="mapname">\([^<]*\)<.*,\1,' |\ sort -u |\ grep -v -x -e '' \ -f official_maps.txt |\ sed -e 's,$,-full,' > unofficial_maps.txt [ -s unofficial_maps.txt ] || die "List of unofficial maps is empty" cat unofficial_maps.txt >> install_maps.txt fi latest_pk3_version() { # latest builds of maps are above latest_version="$( grep all_maps.html -m1 \ -e "href=\"${name%-full}-.*.pk3\">bspk3<" |\ sed -e "s,.*href=\"${name%-full}-\([^\"]*\).pk3\">bspk3<.*,\1," )" } validate_pk3() { if unzip -t "${1}" > /dev/null; then true else ewarn "\"${1}\" is not valid pk3 file, removing" rm -f "${1}" || die fi } # Remove obsolete and broken files from MAPS_STORE_DIR # If map becomes official, it changes branch and git hashes in name => no need to check both fullpk3 and bsppk3 einfo "Cleaning \"${MAPS_STORE_DIR}\"" for file in "${MAPS_STORE_DIR}"/*; do local name="$( echo "${file}" |\ sed -e "s,${MAPS_STORE_DIR}/\([^/]*\)-[0-9a-f]\{40\}-[0-9a-f]\{40\}.pk3$,\1," )" local version="$( echo "${file}" |\ sed -e "s,${MAPS_STORE_DIR}/${name}-\([0-9a-f]\{40\}-[0-9a-f]\{40\}\).pk3$,\1," )" latest_pk3_version if [ "${version}" != "${latest_version}" ]; then einfo "\"${file}\" is obsolete, removing" rm -f "${file}" || die elif [ "x${version}" = "x" ]; then ewarn "\"${file}\" has incorrect name, removing" rm -f "${file}" || die elif [ "x${latest_version}" = "x" ]; then ewarn "\"${file}\" is not available in ${base_url}, removing" rm -f "${file}" || die else validate_pk3 "${file}" fi done einfo "Downloading maps" while read name; do latest_pk3_version local file="${name}-${latest_version}.pk3" local path="${MAPS_STORE_DIR}/${file}" local url="${base_url}${file}" if [[ ! -f "${path}" ]]; then rm -f "${path}" 2> /dev/null || die einfo "Downloading ${file}" $WGET "${url}" -O "${path}" || ewarn "downloading \"${url}\" failed" validate_pk3 "${path}" fi echo "${file}" >> install_files.txt done < install_maps.txt } src_prepare() { :; } src_configure() { :; } src_compile() { :; } src_install() { insinto "${GAMES_DATADIR}/${MY_PN}/data" while read file; do nonfatal doins "${MAPS_STORE_DIR}/${file}" || ewarn "installing \"${file}\" failed" done < install_files.txt prepgamesdirs }