2014-04-07 00:42:20 +00:00
#!/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
2014-05-06 01:29:07 +00:00
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
2014-04-07 00:42:20 +00:00
fi
2014-05-05 00:47:20 +00:00
PACKAGE_VERSION = ${ PACKAGE_VERSION :- ${ VERSION } }
2014-04-07 00:42:20 +00:00
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 }
2015-11-14 23:37:51 +00:00
DEB_PRIORITY = ${ DEB_PRIORITY :- optional }
2014-04-07 00:42:20 +00:00
DEB_VCS_SVN = ${ DEB_VCS_SVN :- ${ svn_path } }
2014-05-06 01:29:07 +00:00
DEB_VERSION = ${ DEB_VERSION :- ${ TARBALL_VERSION :- ${ PACKAGE_VERSION } } }
2014-04-07 00:42:20 +00:00
if [ -z " ${ DEB_BUILD_DEPENDS } " ] ; then
2014-05-05 00:47:20 +00:00
DEB_BUILD_DEPENDS = "debhelper (>= 9), cdbs"
2014-04-07 00:42:20 +00:00
else
2014-05-05 00:47:20 +00:00
DEB_BUILD_DEPENDS = " ${ DEB_BUILD_DEPENDS } , debhelper (>= 9), cdbs "
2014-04-07 00:42:20 +00:00
fi
2014-05-06 18:56:58 +00:00
if [ ! -z " ${ DEB_DEPENDS } " ] ; then
DEB_DEPENDS = " , ${ DEB_DEPENDS } "
fi
2014-04-07 00:42:20 +00:00
DEB_DEPENDS = '${shlibs:Depends}, ${misc:Depends}' " ${ DEB_DEPENDS } "
DEB_DISTRIBUTION = ${ DEB_DISTRIBUTION :- ${ default_distribution } }
2014-05-05 00:47:20 +00:00
# DEB_VERSION_SUFFIX intentionally unset.
2014-04-07 00:42:20 +00:00
# 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
2014-04-07 01:20:27 +00:00
with open( specfilename) as specfile:
with tempfile.NamedTemporaryFile( delete = False) as tf:
2014-04-07 00:42:20 +00:00
print tf.name
2014-04-07 01:20:27 +00:00
vars = { }
2014-04-07 00:42:20 +00:00
for line in specfile.readlines( ) :
line = line.rstrip( )
2014-04-07 01:20:27 +00:00
for var in vars:
2014-05-05 00:47:20 +00:00
line = line.replace( '%{' + var + '}' , vars[ var] )
2014-04-07 01:20:27 +00:00
2014-04-07 00:42:20 +00:00
if description_mode:
if len( line.lstrip( ) ) > 0 and line.lstrip( ) [ 0] = = '#' :
continue
2014-04-07 01:20:27 +00:00
if len( line.lstrip( ) ) > 0 and line.lstrip( ) [ 0] = = '%' :
description_mode = False
continue
2014-04-07 00:42:20 +00:00
tf.write( "RPM_DESCRIPTION=\"\${RPM_DESCRIPTION}%s\\n\"\n" % line.replace( '\\' ', ' \\ \\ \\ '' ) .replace( '\\"' , '\\\\\\"' ) .replace( '(' , '\\(' ) .replace( ')' , '\\)' ) )
2014-04-07 01:20:27 +00:00
continue
2014-04-07 00:42:20 +00:00
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" :
2014-05-05 01:14:22 +00:00
tf.write( "DEB_VERSION_SUFFIX=\${DEB_VERSION_SUFFIX:-%s}\n" % value)
2014-04-07 00:42:20 +00:00
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
2014-04-07 01:20:27 +00:00
elif line.startswith( '%define' ) :
2014-05-05 00:47:20 +00:00
segs = line[ len( '%define' ) +1:] .lstrip( ) .replace( '\\t' , ' ' ) .split( ' ' )
2014-04-07 01:20:27 +00:00
segs = [ seg.rstrip( ) .lstrip( ) for seg in segs]
2014-05-05 00:47:20 +00:00
vars[ segs[ 0] ] = ' ' .join( segs[ 1:] )
2014-04-07 01:20:27 +00:00
2014-04-07 00:42:20 +00:00
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
2014-05-05 00:47:20 +00:00
echo "error: You must set DEB_MAINTAINER in GNUmakefile, in .spec file, or on command line."
2014-04-07 00:42:20 +00:00
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
2014-05-05 00:47:20 +00:00
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
2014-04-07 00:42:20 +00:00
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
2014-04-07 01:20:27 +00:00
echo " * New build." >> " ${ destination } " /changelog
2014-04-07 00:42:20 +00:00
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
2014-05-05 00:47:20 +00:00
include /usr/share/cdbs/1/rules/debhelper.mk
2014-05-06 02:28:22 +00:00
ifneq ( \$ ( wildcard configure) ,)
2014-05-05 00:47:20 +00:00
include /usr/share/cdbs/1/class/autotools.mk
2014-05-06 02:28:22 +00:00
else
include /usr/share/cdbs/1/class/makefile.mk
DEB_MAKE_INSTALL_TARGET := install DESTDIR = \$ ( CURDIR) /debian/${ deb_lowercase_package_name }
endif
2014-05-05 00:47:20 +00:00
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
2014-05-06 01:29:07 +00:00
\$ ( error Failed to get GNUSTEP_MAKEFILES variable. Is gnustep-config properly installed?)
2014-05-05 00:47:20 +00:00
exit 1
endif
endif
2014-04-07 00:42:20 +00:00
_EOF
2014-05-06 01:29:07 +00:00
2014-04-07 00:42:20 +00:00
chmod 755 " ${ destination } " /rules
##########
if [ -e COPYING ] ; then
cp COPYING ${ destination } /copyright
fi
if [ -e LICENSE ] ; then
cp LICENSE ${ destination } /copyright
fi