#!/bin/sh VERBOSE=1 CALLED_SCRIPT=$(basename $0) usage() { echo ${CALLED_SCRIPT} } get_username() { [ ${DEBFULLNAME} ] && _USERNAME=${DEBFULLNAME} && return _USERNAME=$(getent passwd ${LOGNAME} | cut -d: -f5 | cut -d, -f1) } get_email() { [ ${DEBEMAIL} ] && _EMAIL=${DEBEMAIL} && return [ ${EMAIL} ] && _EMAIL=${EMAIL} && return MAILHOST=$(cat /etc/mailname) [ -z "${MAILHOST}" ] && MAILHOST=unknown _EMAIL="${LOGNAME}@${MAILHOST}" } get_date() { _DATE=$(822-date) } control() { [ -z "${_USERNAME}" ] && get_username [ -z "${_EMAIL}" ] && get_email cat < Build-Depends: debhelper (>> 4.0.0) Build-Depends-Indep: zip Standards-Version: 3.6.1 Package: mozilla-${PACKAGE} Architecture: all Depends: ${DEPENDS} Conflicts: ${CONFLICTS} Description: ${DESCRIPTION} EOF } changelog() { [ -z "${_USERNAME}" ] && get_username [ -z "${_EMAIL}" ] && get_email [ -z "${_DATE}" ] && get_date cat < ${_DATE} EOF } copyright() { [ -z "${_USERNAME}" ] && get_username [ -z "${_EMAIL}" ] && get_email [ -z "${_DATE}" ] && get_date cat< on ${_DATE}. It was downloaded from Copyright: Upstream Author(s): License: EOF } install_xsl() { cat< EOF } install_js() { cat<&2 return 1 fi } clean_up() { rm -rf "${TMPDIR}" } xpi2tgz_internal() { if [ ! -f "${FILENAME}" ]; then echo "No such file: ${FILENAME}" return 1 fi mkdir "${TMPDIR}/package" if [ ! -d "${TMPDIR}/package" ]; then echo "Error while creating temporary directory" >&2 return 1 fi [ ${VERBOSE} ] && echo "Extracting ${FILENAME} into ${TMPDIR}/package" >&2 if ! unzip -q -d "${TMPDIR}/package" "${FILENAME}"; then echo "Error while extracting ${FILENAME}" >&2 return 1 fi if [ "${VERSION}" = "" ] || [ "${PACKAGE}" = "" ]; then if [ -f "${TMPDIR}/package/install.rdf" ]; then if which xsltproc 2>&1 > /dev/null; then [ ${VERBOSE} ] && echo "Scanning ${TMPDIR}/package/install.rdf using xsltproc" >&2 install_xsl | xsltproc - "${TMPDIR}/package/install.rdf" > "${TMPDIR}/tmp" elif which xmlstarlet 2>&1 > /dev/null; then [ ${VERBOSE} ] && echo "Scanning ${TMPDIR}/package/install.rdf using xmlstarlet" >&2 xmlstarlet sel -T -N em="http://www.mozilla.org/2004/em-rdf#" -N rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" -t -v "/rdf:RDF/rdf:Description[@about='urn:mozilla:install-manifest']/em:version" -n -v "/rdf:RDF/rdf:Description[@about='urn:mozilla:install-manifest']/em:file/rdf:Description/@about" -n "${TMPDIR}/package/install.rdf" > "${TMPDIR}/tmp" elif which xpath 2>&1 > /dev/null; then [ ${VERBOSE} ] && echo "Scanning ${TMPDIR}/package/install.rdf using xpath" >&2 xpath -e "/RDF/Description[@about='urn:mozilla:install-manifest']/em:version/text()" -q "${TMPDIR}/package/install.rdf" > "${TMPDIR}/tmp" xpath -e "/RDF/Description[@about='urn:mozilla:install-manifest']/em:file/Description/@about" -q "${TMPDIR}/package/install.rdf" | sed 's/^.*about="\(.*\)".*$/\1/' >> "${TMPDIR}/tmp" else echo "Warning: In order to get package information from install.rdf, you need either xsltproc, libxml-xpath-perl or xmlstarlet" >&2 fi if [ -f "${TMPDIR}/tmp" ]; then { read DETECTED_VERSION; read DETECTED_PACKAGE; } < "${TMPDIR}/tmp" DETECTED_PACKAGE=$(echo ${DETECTED_PACKAGE} | sed 's/^.*:\(.*\)\.jar$/\1/') fi fi if [ "$VERSION" = "" ] && [ "$DETECTED_VERSION" = "" ]; then [ ${VERBOSE} ] && echo "Couldn't get information from install.rdf. Trying install.js instead." >&2 if [ -f "${TMPDIR}/package/install.js" ]; then if ! which smjs 2>&1 > /dev/null; then echo "Warning: In order to get package information from install.js, you need spidermonkey-bin" >&2 else [ ${VERBOSE} ] && echo "Scanning ${TMPDIR}/package/install.js" >&2 install_js "${TMPDIR}/package/install.js" | smjs > /dev/null 2>&1 > "${TMPDIR}/tmp" { read DETECTED_VERSION; read DETECTED_PACKAGE; } < "${TMPDIR}/tmp" DETECTED_PACKAGE=$(echo ${DETECTED_PACKAGE} | sed 's,\(.*\)\.jar$,\1,') fi fi fi fi # Unpacking all jar files for file in $(find ${TMPDIR}/package -type f -name "*.jar"); do [ ${VERBOSE} ] && echo "Extracting $file" >&2 if unzip -q -d $(dirname $file) $file; then [ ${VERBOSE} ] && echo "Removing $file" >&2 rm -f $file else echo "Error while extracting $file" >&2 return 1 fi if [ "${DETECTED_PACKAGE}" = "" ]; then # Package name will be jar file name DETECTED_PACKAGE=$(basename ${file} | sed 's,^\(.*\)\.jar$,\1,') fi done [ "${PACKAGE}" = "" ] && PACKAGE=${DETECTED_PACKAGE} if [ "${PACKAGE}" = "" ]; then echo "Couldn't find package name. Use -p option." >&2 return 1 fi [ "${VERSION}" = "" ] && VERSION=${DETECTED_VERSION} if [ "${VERSION}" = "" ]; then echo "Couldn't find version number. Use -v option." >&2 return 1 fi echo "Package: ${PACKAGE}" >&2 echo "Version: ${VERSION}" >&2 if [ -f "${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz" ]; then echo "File ${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz already exists. Aborting." >&2 return 1 fi [ ${VERBOSE} ] && echo "Creating archive ${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz" mv "${TMPDIR}/package" "${TMPDIR}/${PACKAGE}-${VERSION}" if ! tar -zcf "${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz" -C "${TMPDIR}" "${PACKAGE}-${VERSION}"; then echo "Error while creating archive ${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz" >&2 return 1 fi } xpi2tgz() { init FILENAME=$1 OUTPUT_DIR=$(pwd) xpi2tgz_internal STATUS=$? clean_up return ${STATUS} } xpi2deb() { init FILENAME=$1 OUTPUT_DIR=$(pwd) xpi2tgz_internal STATUS=$? if [ "$STATUS" -eq 0 ]; then if [ -e "${OUTPUT_DIR}/${PACKAGE}_${VERSION}.orig.tar.gz" ]; then echo "File ${OUTPUT_DIR}/${PACKAGE}_${VERSION}.orig.tar.gz already exists. Aborting." >&2 STATUS=1 elif [ -e "${OUTPUT_DIR}/${PACKAGE}-${VERSION}" ]; then echo "File or directory ${OUTPUT_DIR}/${PACKAGE}-${VERSION} already exists. Aborting." >&2 STATUS=1 else [ ${VERBOSE} ] && echo "Creating ${OUTPUT_DIR}/${PACKAGE}_${VERSION}.orig.tar.gz link." >&2 ln -s "${OUTPUT_DIR}/${PACKAGE}-${VERSION}.tar.gz" "${OUTPUT_DIR}/${PACKAGE}_${VERSION}.orig.tar.gz" [ ${VERBOSE} ] && echo "Moving ${TMPDIR}/${PACKAGE}-${VERSION} into ${OUTPUT_DIR}" >&2 if ! mv "${TMPDIR}/${PACKAGE}-${VERSION}" "${OUTPUT_DIR}"; then echo "Error while moving ${TMPDIR}/${PACKAGE}-${VERSION} into ${OUTPUT_DIR}" >&2 STATUS=1 elif ! mkdir "${OUTPUT_DIR}/${PACKAGE}-${VERSION}/debian"; then echo "Error while creating ${OUTPUT_DIR}/${PACKAGE}-${VERSION}/debian" >&2 STATUS=1 else DEB_DIR="${OUTPUT_DIR}/${PACKAGE}-${VERSION}/debian" [ ${VERBOSE} ] && echo "Creating ${DEB_DIR}/copyright" copyright > ${DEB_DIR}/copyright [ ${VERBOSE} ] && echo "Creating ${DEB_DIR}/changelog" changelog > ${DEB_DIR}/changelog [ ${VERBOSE} ] && echo "Creating ${DEB_DIR}/compat" echo 4 > ${DEB_DIR}/compat [ ${VERBOSE} ] && echo "Creating ${DEB_DIR}/control" control > ${DEB_DIR}/control fi fi fi clean_up return ${STATUS} } if [ "$#" = 0 ]; then usage exit fi case "${CALLED_SCRIPT}" in xpi2tgz) xpi2tgz $@ ;; xpi2deb) xpi2deb $@ ;; *) echo "${CALLED_SCRIPT} is an invalid command name for xpitools" ;; esac exit $?