mirror of
https://github.com/gnustep/tools-make.git
synced 2025-04-22 13:50:47 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@39172 72102866-910b-0410-8b05-ffd578937521
354 lines
12 KiB
Bash
Executable file
354 lines
12 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Copyright (C) 2014 Free Software Foundation, Inc.
|
|
#
|
|
# Author: Ivan Vucica <ivan@vucica.net>
|
|
#
|
|
# This file is part of the GNUstep Makefile Package.
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 3
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# You should have received a copy of the GNU General Public
|
|
# License along with this library; see the file COPYING.
|
|
# If not, write to the Free Software Foundation,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
if [ -z "${1}" ] ; then
|
|
echo "usage: "$(basename "${0}")" [source_code_directory]"
|
|
exit 1
|
|
fi
|
|
|
|
cd ${1} && destination="$(pwd)" && cd -
|
|
destination="${destination}"/debian
|
|
if mkdir -p "${destination}" ; then : else exit 1 ; fi
|
|
rm "${destination}"/control 2> /dev/null
|
|
rm "${destination}"/changelog 2> /dev/null
|
|
|
|
deb_lowercase_package_name=$(echo ${PACKAGE_NAME} | sed -e 's/\(.*\)/\L\1/')
|
|
if [ ! -z "${SVNPREFIX}" ] ; then
|
|
svn_path="${SVNPREFIX}"
|
|
fi
|
|
if [ ! -z "${SVN_BASE_URL}" ] && [ ! -z "${SVN_MODULE_NAME}" ] ; then
|
|
svn_path=${SVN_BASE_URL}/${SVN_MODULE_NAME}
|
|
fi
|
|
default_distribution="unstable"
|
|
distrib_id="$(grep DISTRIB_ID /etc/lsb-release | sed 's/DISTRIB_ID=\(.*\)$/\1/')"
|
|
if [[ "${distrib_id}" == "Ubuntu" ]] ; then
|
|
default_distribution=$(grep DISTRIB_CODENAME /etc/lsb-release | sed 's/DISTRIB_CODENAME=//')
|
|
fi
|
|
|
|
if true ; then
|
|
# Forcing 'any' as we'd like Launchpad to build packages for all architectures.
|
|
# DEB_ARCHITECTURE can still be overridden.
|
|
target_arch=any
|
|
else
|
|
target_arch=${GNUSTEP_TARGET_CPU:-any}
|
|
if [[ "${target_arch}" == "i686" ]] ; then
|
|
target_arch=i386
|
|
elif [[ "${target_arch}" == "x86_64" ]] ; then
|
|
target_arch=amd64
|
|
fi
|
|
fi
|
|
|
|
PACKAGE_VERSION=${PACKAGE_VERSION:-${VERSION}}
|
|
DEB_SOURCE=${DEB_SOURCE:-${deb_lowercase_package_name}}
|
|
DEB_PACKAGE=${DEB_PACKAGE:-${deb_lowercase_package_name}}
|
|
DEB_ARCHITECTURE=${DEB_ARCHITECTURE:-${target_arch}} #$(shell (/bin/bash -c "$(CC) -dumpmachine | sed -e 's,\\([^-]*\\).*,\\1,g'"))}
|
|
DEB_SECTION=${DEB_SECTION:-gnustep}
|
|
DEB_PRIORITY=${DEB_PRIORITY:-optional}
|
|
DEB_VCS_SVN=${DEB_VCS_SVN:-${svn_path}}
|
|
DEB_VERSION=${DEB_VERSION:-${TARBALL_VERSION:-${PACKAGE_VERSION}}}
|
|
if [ -z "${DEB_BUILD_DEPENDS}" ] ; then
|
|
DEB_BUILD_DEPENDS="debhelper (>= 9), cdbs"
|
|
else
|
|
DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, debhelper (>= 9), cdbs"
|
|
fi
|
|
if [ ! -z "${DEB_DEPENDS}" ]; then
|
|
DEB_DEPENDS=", ${DEB_DEPENDS}"
|
|
fi
|
|
DEB_DEPENDS='${shlibs:Depends}, ${misc:Depends}'" ${DEB_DEPENDS}"
|
|
|
|
DEB_DISTRIBUTION=${DEB_DISTRIBUTION:-${default_distribution}}
|
|
|
|
# DEB_VERSION_SUFFIX intentionally unset.
|
|
|
|
# Attempt to extract information from a .spec or a .spec.in file.
|
|
if which python > /dev/null ; then
|
|
FN=$(python - << _EOF
|
|
|
|
import tempfile
|
|
import sys
|
|
|
|
def process_specfile(specfilename):
|
|
description_mode=False
|
|
with open(specfilename) as specfile:
|
|
with tempfile.NamedTemporaryFile(delete=False) as tf:
|
|
|
|
print tf.name
|
|
vars={}
|
|
|
|
for line in specfile.readlines():
|
|
line=line.rstrip()
|
|
for var in vars:
|
|
line=line.replace('%{' + var + '}', vars[var])
|
|
|
|
if description_mode:
|
|
if len(line.lstrip()) > 0 and line.lstrip()[0] == '#':
|
|
continue
|
|
if len(line.lstrip()) > 0 and line.lstrip()[0] == '%':
|
|
description_mode=False
|
|
continue
|
|
tf.write("RPM_DESCRIPTION=\"\${RPM_DESCRIPTION}%s\\n\"\n" % line.replace('\\'', '\\\\\\'').replace('\\"', '\\\\\\"').replace('(', '\\(').replace(')', '\\)'))
|
|
continue
|
|
|
|
if not len(line):
|
|
continue
|
|
components=line.split(':')
|
|
if len(components)>=2:
|
|
key=components[0]
|
|
value=':'.join(components[1:]).lstrip()
|
|
if key=="Name":
|
|
tf.write("DEB_PACKAGE=\${DEB_PACKAGE:-%s}\n" % value)
|
|
tf.write("DEB_SOURCE=\${DEB_SOURCE:-%s}\n" % value)
|
|
elif key=="Release":
|
|
tf.write("DEB_VERSION_SUFFIX=\${DEB_VERSION_SUFFIX:-%s}\n" % value)
|
|
elif key=="Source":
|
|
# Source URL is not mappable to anything useful.
|
|
# Possibly only includable in README.Debian.
|
|
pass
|
|
elif key=="License":
|
|
tf.write("DEB_LICENSE=\${DEB_LICENSE:-%s}\n" % value)
|
|
elif key=="Copyright":
|
|
# Seems to do the same as License?
|
|
pass
|
|
elif key=="Group":
|
|
# Ignore; not easily mappable, plus Debian has separate
|
|
# 'gnustep' section.
|
|
pass
|
|
elif key=="Summary":
|
|
# First line of 'Description' field
|
|
tf.write("RPM_DESCRIPTION=\"%s\n\"\n" % value)
|
|
elif key=="Packager":
|
|
tf.write("DEB_MAINTAINER=\${DEB_MAINTAINER:-\"%s\"}\n" % value)
|
|
elif key=="Vendor":
|
|
# Ignore; not useful anywhere in .deb
|
|
pass
|
|
elif key=="URL":
|
|
tf.write("DEB_HOMEPAGE=\${DEB_HOMEPAGE:-%s}\n" % value)
|
|
elif key=="Requires":
|
|
# We support only comma separated dependencies (to simplify version handling).
|
|
# Also, version mapping is very trivial.
|
|
rpmdeps = value.split(',')
|
|
debdeps = []
|
|
for rpmdep in rpmdeps:
|
|
rpmdepcomponents = rpmdep.split(' ')
|
|
debdep = rpmdepcomponents[0]
|
|
if len(rpmdepcomponents) > 1:
|
|
debdep += ' (%s)' % ' '.join(rpmdepcomponents[1:])
|
|
debdeps.append(debdep)
|
|
tf.write("if [ -z \\"\${DEB_DEPENDS}\\" ] ; then\n")
|
|
tf.write(" DEB_DEPENDS=\"%s\"\n" % ', '.join(debdeps))
|
|
tf.write("else\n")
|
|
tf.write(" DEB_DEPENDS=\"\${DEB_DEPENDS}, %s\"\n" % ', '.join(debdeps))
|
|
tf.write("fi\n")
|
|
elif key=="Provides":
|
|
tf.write("if [ -z \\"\${DEB_PROVIDES}\\" ] ; then\n")
|
|
tf.write(" DEB_PROVIDES=\"%s\"\n" % value)
|
|
tf.write("else\n")
|
|
tf.write(" DEB_PROVIDES=\"\${DEB_PROVIDES}, %s\"\n" % value)
|
|
elif key=="Version":
|
|
tf.write("DEB_VERSION=\${DEB_VERSION:-%s}\n" % value)
|
|
else:
|
|
if line == "%description":
|
|
description_mode = True
|
|
elif line.startswith('%define'):
|
|
segs=line[len('%define')+1:].lstrip().replace('\\t', ' ').split(' ')
|
|
segs=[seg.rstrip().lstrip() for seg in segs]
|
|
vars[segs[0]] = ' '.join(segs[1:])
|
|
|
|
|
|
try:
|
|
process_specfile('${DEB_PACKAGE}.spec')
|
|
except:
|
|
try:
|
|
process_specfile('${DEB_PACKAGE}.spec.in')
|
|
except Exception as e:
|
|
sys.stderr.write('could not process either ${DEB_PACKAGE}.spec or ${DEB_PACKAGE}.spec.in\n')
|
|
raise
|
|
_EOF
|
|
)
|
|
if [ ! -z "${FN}" ] ; then
|
|
. $FN
|
|
DEB_DESCRIPTION="${DEB_DESCRIPTION:-${RPM_DESCRIPTION}}"
|
|
fi
|
|
fi
|
|
|
|
DEB_DESCRIPTION="${DEB_DESCRIPTION:-$(printf "Debian packaging for GNUstep based software ${PACKAGE_NAME}.\nThis package was built using gnustep-make.\n")}"
|
|
|
|
# Check that maintainer and package builder are set.
|
|
if [ -z "${DEB_MAINTAINER}" ] ; then
|
|
echo "error: You must set DEB_MAINTAINER in GNUmakefile, in .spec file, or on command line."
|
|
exit 1
|
|
fi
|
|
if [ -z "${DEB_PACKAGE_BUILDER}" ] ; then
|
|
echo "error: You must set DEB_PACKAGE_BUILDER in GNUmakefile or on command line."
|
|
echo "(It's recommended you set it on the command line, so other people"
|
|
echo "don't accidentally claim you built their package.)"
|
|
exit 1
|
|
fi
|
|
|
|
# Check some other fields
|
|
if [ -z "${DEB_PACKAGE}" ] ; then
|
|
echo "error: Package name was not properly set in GNUmakefile."
|
|
exit 1
|
|
fi
|
|
if [ -z "${DEB_VERSION}" ] ; then
|
|
echo "error: Package version was not properly set in GNUmakefile."
|
|
exit 1
|
|
fi
|
|
if [ ! -z "${DEB_VERSION_SUFFIX}" ] ; then
|
|
DEB_VERSION=${DEB_VERSION}-${DEB_VERSION_SUFFIX}
|
|
#ln -s ${destination}/../../${PACKAGE_NAME}-${VERSION}.orig.tar.gz ${destination}/../../${PACKAGE_NAME}-${DEB_VERSION}.orig.tar.gz
|
|
fi
|
|
|
|
echo ${destination}
|
|
# For documentation, see:
|
|
# https://www.debian.org/doc/debian-policy/ch-controlfields.html
|
|
echo "Source: " ${DEB_SOURCE} >> "${destination}"/control
|
|
echo "Maintainer:" ${DEB_MAINTAINER} >> "${destination}"/control
|
|
echo "Section:" ${DEB_SECTION} >> "${destination}"/control
|
|
echo "Priority:" ${DEB_PRIORITY} >> "${destination}"/control
|
|
if [ ! -z "${DEB_BUILD_DEPENDS}" ] ; then
|
|
echo "Build-Depends:" ${DEB_BUILD_DEPENDS} >> "${destination}"/control
|
|
fi
|
|
echo "Standards-Version: 3.9.4" >> "${destination}"/control
|
|
if [ ! -z "${DEB_HOMEPAGE}" ] ; then
|
|
echo "Homepage:" ${DEB_HOMEPAGE} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_BROWSER}" ] ; then
|
|
echo "Vcs-Browser:" ${DEB_VCS_BROWSER} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_ARCH}" ] ; then
|
|
echo "Vcs-Arch:" ${DEB_VCS_ARCH} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_BZR}" ] ; then
|
|
echo "Vcs-Bzr:" ${DEB_VCS_BZR} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_CVS}" ] ; then
|
|
echo "Vcs-Cvs:" ${DEB_VCS_CVS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_DARCS}" ] ; then
|
|
echo "Vcs-Darcs:" ${DEB_VCS_DARCS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_GIT}" ] ; then
|
|
echo "Vcs-Git:" ${DEB_VCS_GIT} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_HG}" ] ; then
|
|
echo "Vcs-Hg:" ${DEB_VCS_HG} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_MTN}" ] ; then
|
|
echo "Vcs-Mtn:" ${DEB_VCS_MTN} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_VCS_SVN}" ] ; then
|
|
echo "Vcs-Svn:" ${DEB_VCS_SVN} >> "${destination}"/control
|
|
fi
|
|
|
|
echo "" >> "${destination}"/control
|
|
|
|
echo "Package:" ${DEB_PACKAGE} >> "${destination}"/control
|
|
echo "Architecture:" ${DEB_ARCHITECTURE} >> "${destination}"/control
|
|
|
|
# Comma-separated lists of packages
|
|
if [ ! -z "${DEB_PRE_DEPENDS}" ] ; then
|
|
echo "Pre-Depends:" ${DEB_PRE_DEPENDS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_DEPENDS}" ] ; then
|
|
echo "Depends:" ${DEB_DEPENDS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_RECOMMENDS}" ] ; then
|
|
echo "Recommends:" ${DEB_RECOMMENDS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_SUGGESTS}" ] ; then
|
|
echo "Suggests:" ${DEB_SUGGESTS} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_PROVIDES}" ] ; then
|
|
echo "Provides:" ${DEB_PROVIDES} >> "${destination}"/control
|
|
fi
|
|
if [ ! -z "${DEB_REPLACES}" ] ; then
|
|
echo "Replaces:" ${DEB_REPLACES} >> "${destination}"/control
|
|
fi
|
|
|
|
if [ ! -z "${DEB_ESSENTIAL}" ] ; then
|
|
echo "Essential:" ${DEB_ESSENTIAL} >> "${destination}"/control
|
|
fi
|
|
|
|
echo "Description:" "$(echo "${DEB_DESCRIPTION}" | sed 's/^[\s]*$/./' | sed 's/\(.*\)/ \1/' | tail -c+2)" >> "${destination}"/control
|
|
|
|
###########
|
|
|
|
echo "${DEB_SOURCE} (${DEB_VERSION}) ${DEB_DISTRIBUTION}; urgency=low" >> "${destination}"/changelog
|
|
echo "" >> "${destination}"/changelog
|
|
echo " * New build." >> "${destination}"/changelog
|
|
echo "" >> "${destination}"/changelog
|
|
echo "" >> "${destination}"/changelog
|
|
echo " -- ${DEB_PACKAGE_BUILDER} $(date -R)" >> "${destination}"/changelog
|
|
|
|
##########
|
|
|
|
# Intentionally overwriting.
|
|
echo "9" > "${destination}"/compat
|
|
mkdir -p "${destination}"/source
|
|
echo "3.0 (quilt)" > "${destination}"/source/format
|
|
|
|
###########
|
|
|
|
# Intentionally overwriting.
|
|
cat > "${destination}"/rules << _EOF
|
|
#!/usr/bin/make -f
|
|
include /usr/share/cdbs/1/rules/debhelper.mk
|
|
ifneq (\$(wildcard configure),)
|
|
include /usr/share/cdbs/1/class/autotools.mk
|
|
else
|
|
include /usr/share/cdbs/1/class/makefile.mk
|
|
DEB_MAKE_INSTALL_TARGET := install DESTDIR=\$(CURDIR)/debian/${deb_lowercase_package_name}
|
|
endif
|
|
|
|
DEB_BUILD_PARALLEL = 1
|
|
|
|
DEB_CONFIGURE_EXTRA_FLAGS += ${DEB_CONFIGURE_EXTRA_FLAGS}
|
|
DEB_CONFIGURE_SCRIPT_ENV += ${DEB_CONFIGURE_SCRIPT_ENV}
|
|
DEB_DH_LINK_ARGS += ${DEB_DH_LINK_ARGS}
|
|
|
|
DEB_SHLIBS_ARGS_ALL += ${DEB_SHLIBS_ARGS_ALL}
|
|
DEB_SHLIBS_ARGS += ${DEB_SHLIBS_ARGS}
|
|
DEB_SHLIBS_INCLUDE += ${DEB_SHLIBS_INCLUDE}
|
|
|
|
DEB_MAKE_ENVVARS += BUILDING_DEB=1
|
|
|
|
export build :
|
|
ifneq (${PACKAGE_NAME}, gnustep-make)
|
|
GNUSTEP_MAKEFILES = \$(shell gnustep-config --variable=GNUSTEP_MAKEFILES)
|
|
ifneq (\$(GNUSTEP_MAKEFILES), )
|
|
DEB_MAKE_ENVVARS += \$(shell sh -c ". \$(GNUSTEP_MAKEFILES)/GNUstep.sh && env |grep GNUSTEP")
|
|
else
|
|
\$(error Failed to get GNUSTEP_MAKEFILES variable. Is gnustep-config properly installed?)
|
|
exit 1
|
|
endif
|
|
endif
|
|
|
|
_EOF
|
|
|
|
chmod 755 "${destination}"/rules
|
|
|
|
##########
|
|
|
|
if [ -e COPYING ] ; then
|
|
cp COPYING ${destination}/copyright
|
|
fi
|
|
if [ -e LICENSE ] ; then
|
|
cp LICENSE ${destination}/copyright
|
|
fi
|
|
|