#!/bin/bash # meta generator # metafile matrix # Common infos -> meta # ---------------------------- # lineno description example # 01 PNAME glibc-nptl # 02 PCATEGORIE sys-libs # 03 PVER 2.5.0 # 04 PBUILD 7 # 05 STATE unstable # 06 DESCRIPTION GNU libc6 (also called glibc2) C library with NPTL Threads. # 07 HOMEPAGE http://www.gnu.org/software/libc/libc.html # 08 PKGTYPE # 09 SPLIT_PACKAGE_BASE # 10 INHERITS mtools # # # Arch specific -> ${arch}/desc # ---------------------------- # lineno description example # 1 MD5 7ba206976e312a456dc29cea4bb283ea # 2 SIZE # 3 MTIME 1187714117 # # Dependencies # --------------------------------- # DEPEND -> ${ARCH}/depend # SDEPEND -> ${ARCH}/sdepend # PROVIDE -> ${ARCH}/provide # # # Content # --------------------------------- # CHAR -> ${ARCH}/char # DIRS -> ${ARCH}/dirs # FILES -> ${ARCH}/files # PIPES -> ${ARCH}/pipes # SYMLINKS -> ${ARCH}/symlinks # --extract -> extract info from given package # no params given/smage2, it uses the current build environment # default die function die() { echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT} echo -e ${COLRED}"$@"${COLDEFAULT} exit 1 } add2meta() { local var="$1" local value="$2" echo "${var}=\"${value}\"" >> ${METAFILE} } ## only for tests -> normally in /etc/rc.d/init.d/functions COLRED="\033[1;6m\033[31m" COLGREEN="\033[1;6m\033[32m" COLYELLOW="\033[1;6m\033[33m" COLBLUE="\033[1;6m\033[34m" COLMAGENTA="\033[1;6m\033[35m" COLWHITE="\033[1;6m\033[37m" COLGRAY="\033[0;6m\033[37m" COLBOLD="\033[1m" COLDEFAULT="\033[0m" # get mage environment [ -f /etc/mage.rc.global ] && source /etc/mage.rc.global || die "/etc/mage.rc.global missing" [ -f ${MAGERC} ] && source ${MAGERC} || die "Your ${MAGERC} is missing. Aborting." [ -f ${MLIBDIR}/mage4.functions.sh ] && source ${MLIBDIR}/mage4.functions.sh || die "mage functions missing" [ -f ${MLIBDIR}/smage2.functions.sh ] && source ${MLIBDIR}/smage2.functions.sh || die "mage functions missing" # default variables PKGTARBALL="" SMAGEFILE="" METADIR="${PKGDIR}/meta" METASUFFIX="meta" METAFILE="" # very basic getops for i in $* do case $1 in --extract|-c) shift; PKGTARBALL="$1" ;; esac # shift done SMAGEFILE="$1" [ -z ${SMAGEFILE} ] && die "No smage file given." [ -e ${SMAGEFILE} ] || die "Smage file '${SMAGEFILE}' does not exist." if [[ -n ${PKGTARBALL} ]] then # abort if given file is not a pkg [[ ${PKGTARBALL##*.} != ${PKGSUFFIX} ]] && die "${PKGTARBALL} is not a valid pkg file." [[ ! -d ${SOURCEDIR} ]] && install -d ${SOURCEDIR} # unpack srctarball [[ ! -f ${PKGTARBALL} ]] && die "Error: ${PKGTARBALL} does not exist. Aborting." # set correct SMAGENAME; use the one that the src_pkg provide # /path/to/SOURCEDIR/PNAME/SMAGENAME SMAGEFILE="${SOURCEDIR}/$(basename ${PKGTARBALL%-*-*})/$(basename ${PKGTARBALL} .${PKGSUFFIX}).${SMAGESUFFIX}" tar xvjf ${SRCPKGTARBALL} -C ${SOURCEDIR} || die "Error unpackung src-tarball ${SRCPKGTARBALL}" fi # get generic package information from smage file smagesource ${SMAGEFILE} # set the right meta-location [[ ! -d ${METADIR} ]] && install -d ${METADIR} METAFILE="${METADIR}/${PNAME}-${PVER}-${ARCH}-${PBUILD}.${METASUFFIX}" # create a clean metafile :> ${METAFILE} # basic packages information add2meta PNAME "${PNAME}" add2meta PCATEGORIE "${PCATEGORIE}" add2meta PVER "${PVER}" add2meta PBUILD "${PBUILD}" #add2meta STATE "${STATE}" add2meta DESCRIPTION "${DESCRIPTION}" add2meta HOMEPAGE "${HOMEPAGE}" add2meta PKGTYPE "${PKGTYPE}" #add2meta SPLIT_PACKAGE_BASE "${SPLIT_PACKAGE_BASE}" #add2meta INHERITS "${INHERITS}" # arch specific add2meta ARCH "${ARCH}" add2meta SIZE "$(du -Ds ${BUILDDIR}/${PNAME}-${PVER}-${ARCH}-${PBUILD}/binfiles | sed 's/^\(.*\)\t.*/\1/')" add2meta MTIME "$(< ${BUILDDIR}/${PNAME}-${PVER}-${ARCH}-${PBUILD}/.mtime)" # provided binfiles SEARCH_DIRS="bin,sbin,usr/bin,usr/sbin" SEARCH_DIRS+=",usr/*/bin,usr/*/sbin" SEARCH_DIRS+=",opt/bin,opt/*/bin,opt/*/sbin" SEARCH_DIRS+=",opt/*/jre/bin" # at last add braces SEARCH_DIRS="{${SEARCH_DIRS}}" # search them add2meta PROVIDED_BINARIES "$(find $(eval echo ${BUILDDIR}/${PNAME}-${PVER}-${ARCH}-${PBUILD}/binfiles/${SEARCH_DIRS}) -type f -printf '%f ' 2> /dev/null)" # generate MD5SUM (get it with tail -n1) echo >> ${METAFILE} echo '# MD5 CHECKSUM:' >> ${METAFILE} ( cd ${PKGDIR}; md5sum ${PNAME}-${PVER}-${ARCH}-${PBUILD}.${PKGSUFFIX} >> ${METAFILE} )