discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Debian packages from GNUmakefiles


From: Gregory Casamento
Subject: Re: Debian packages from GNUmakefiles
Date: Tue, 26 Aug 2014 16:51:53 -0400

I have been thinking of setting up a server to build packages periodically (perhaps nightly) so that people can download and install them as they see fit or even use it as a package repository for GNUstep's packages for debian and other distros.  

I don't want to duplicate any efforts by the launchpad team or anything.  I would like to help if possible.  I can get a server on aws to do this periodically or allocate one of my machines here to do the build on a nightly basis.

Any thoughts?



On Sun, May 11, 2014 at 9:18 AM, Ivan Vučica <ivan@vucica.net> wrote:
Small update.

Packages are now available in the following PPA for Ubuntu Trusty:
https://launchpad.net/~ivucica/+archive/gnustep

Main goal was to make creating a Debian package, ready for upload to Ubuntu's Launchpad, trivial -- and not necessarily correct. Another goal was to empower other people to create their own packages (depending, of course, on a recent SVN revision of gnustep-make). There are better Debian packages out there (Philippe etc). If correctness is desired, I heartily recommend using them.

I currently targeted Ubuntu Trusty and not Debian proper, because of Canonical's nice build farm.

Caveats:
- Packages are not Lintian-clean, and they don't currently make distinctions between libgnustep-* from libgnustep*-dev or -doc. That's slightly more difficult to do with this kind of automation.
- Packages don't even have prefix lib* when they should.
- I make no guarantee that I'll be updating the packages regularly or that I'll expand the covered packages. (Since it's trivial to do so I probably will.)
- Packages don't use libobjc2. libobjc2 would need to be packaged first, which is just slightly more work, as it uses cmake.
- Packages don't build with clang. Because Debian. I could and will hack it together at some point.
- There is an inconsistency between building gnustep-make and every other package. (Especially with how and when to get tarball version to have SVN revision and date-time appended to it.)
- We don't want to list build dependencies in the shell script, but set them in the project's GNUmakefile (or in .spec file). I never got around to it.
- There are multiple targets manually called from the shell script. This is intentional, to allow for optional customization between steps, without touching the makefiles themselves. (Also, people may in the future want to do 'make debfiles' only once, to avoid overwriting changelog, and then manually deploy and unpack .orig.tar.gz before using 'make deb' for other steps. Since my main goal here was to provide trivial-to-build packages that are also trivial to install, and to provide tools for others to build and deploy their own packages, and since I don't really want to go into the business of packaging, this wasn't done.)
- Missing is a stub package that will depend on other packages. Sorry about that.
- You still need to add an inclusion of Master/deb.make manually to GNUmakefiles. Sorry about that.
- In the shellscript below, gnustep-pure/ and gnustep/ are simply two checkouts of GNUstep's modules/ tree, the gnustep/ one having some local uncommitted modifications, while gnustep-pure/ actually only contains modules/core/. The actual paths don't matter, though.

Note how the build processes for gnustep-make and Ink differ. 
- gnustep-make has a 'special' build process separate from the rules it itself defines.
- Ink is not maintained as nicely as other packages, so I had some trouble getting it to create tarball with 'svn-snapshot' target. I should probably take another look at that.

Again, one of the goals was to empower people to create their own packages. So if you maintain a project and want a Debian package, give this approach a shot. You'll need a GPG key named the same as in DEB_PACKAGE_BUILDER variable, and you'll need to associate it with your PPA. After you create a PPA repository on Launchpad and build a package, the 'dput' command makes it trivial to upload the package. PRIORITY=low is a nice default; in the script below I'm upgrading it to normal so the build is slightly prioritized and I don't have what is sometimes an 8 hour delay. For a continuous build, I would (of course) be a nice guy and set it to low.

export DEB_PACKAGE_BUILDER="Your Name <your@email.example>"
export DEB_BUILD_OPTIONS="parallel=16" # I have a 4-core CPU, 8 with hyperthreading; so doubling should be fine.
export CC=gcc # In my bash_profile I define CC to clang. Rolling back to default here.
export CXX=g++
export PRIORITY=normal

# We can create a Debian package from current revision (svn-snapshot) or from
# current working copy (svn-export).
if false ; then
  DIST_ACTION=svn-export
  export TARBALL_VERSION_INCLUDE_SVN_REVISION=yes
  export TARBALL_VERSION_INCLUDE_DATE_TIME=yes
  export DEB_VERSION_SUFFIX=1.$(date +%Y.%m.%d.%H.%M) 
else
  DIST_ACTION=svn-snapshot
  export TARBALL_VERSION_INCLUDE_SVN_REVISION=yes
  export TARBALL_VERSION_INCLUDE_DATE_TIME=no
  export DEB_VERSION_SUFFIX=1
fi

if true ; then
(cd gnustep-pure/core/make &&
./configure &&
make debclean &&
make ${DIST_ACTION} &&
export DEB_TARBALL_VERSION=$(cat ${DIST_ACTION}-tarball-version) &&
make debfiles &&
sed -i 's/low/'${PRIORITY}'/' debian_dist/gnustep-make-${DEB_TARBALL_VERSION}/debian/changelog &&
make deb debsign=yes &&
sudo dpkg -i debian_dist/*${DEB_TARBALL_VERSION}*.deb)
fi &&

if true ; then
(cd gnustep-pure/core/base &&
export DEB_BUILD_DEPENDS="gobjc, libffi-dev, libxml2-dev, libicu-dev, libgmp3-dev, libssl-dev, libxslt-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libgnutls-dev" &&
export DEB_DEPENDS="gnustep-make" &&
. $(gnustep-config --variable=GNUSTEP_MAKEFILES)/GNUstep.sh &&
./configure --with-installation-domain=SYSTEM &&
make debclean &&
make ${DIST_ACTION} &&
make debfiles &&
sed -i 's/low/'${PRIORITY}'/' obj/debian_dist/gnustep-base-*/debian/changelog &&
make deb debsign=yes &&
sudo dpkg -i obj/debian_dist/*.deb)
fi &&

if true ; then
(cd gnustep-pure/core/gui &&
export DEB_BUILD_DEPENDS="gobjc, libffi-dev, libxml2-dev, libicu-dev, libgmp3-dev, libssl-dev, libxslt-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libgnutls-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libjpeg-dev, libtiff-dev, libpng-dev, libcairo-dev, libxt-dev, libgl1-mesa-dev, libglu1-mesa-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, gnustep-base" &&
export DEB_DEPENDS="gnustep-make, gnustep-base" &&
. $(gnustep-config --variable=GNUSTEP_MAKEFILES)/GNUstep.sh &&
./configure &&
make debclean &&
make ${DIST_ACTION} &&
make debfiles &&
sed -i 's/low/'${PRIORITY}'/' obj/debian_dist/gnustep-gui-*/debian/changelog &&
make deb debsign=yes &&
sudo dpkg -i obj/debian_dist/*.deb)
fi &&

if true ; then
(cd gnustep-pure/core/back &&
export DEB_BUILD_DEPENDS="gobjc, libffi-dev, libxml2-dev, libicu-dev, libgmp3-dev, libssl-dev, libxslt-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libgnutls-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libjpeg-dev, libtiff-dev, libpng-dev, libcairo-dev, libxt-dev, libgl1-mesa-dev, libglu1-mesa-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, gnustep-base, gnustep-gui" &&
export DEB_DEPENDS="gnustep-make, gnustep-base, gnustep-gui" &&
. $(gnustep-config --variable=GNUSTEP_MAKEFILES)/GNUstep.sh &&
./configure &&
make debclean &&
make ${DIST_ACTION} &&
make debfiles &&
sed -i 's/low/'${PRIORITY}'/' obj/debian_dist/gnustep-back-*/debian/changelog &&
make deb debsign=yes &&
sudo dpkg -i obj/debian_dist/*.deb)
fi &&

if true ; then
(cd gnustep/usr-apps/examples/gui/Ink &&
export DEB_MAINTAINER="GNUstep Developers <gnustep-dev@gnu.org>" &&
DIST_ACTION=svn-export &&
export TARBALL_VERSION_INCLUDE_SVN_REVISION=yes &&
export TARBALL_VERSION_INCLUDE_DATE_TIME=yes &&
export DEB_VERSION_SUFFIX=1.$(date +%Y.%m.%d.%H.%M) &&
export DEB_BUILD_DEPENDS="gobjc, libffi-dev, libxml2-dev, libicu-dev, libgmp3-dev, libssl-dev, libxslt-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libgnutls-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, libjpeg-dev, libtiff-dev, libpng-dev, libcairo-dev, libxt-dev, libgl1-mesa-dev, libglu1-mesa-dev" &&
export DEB_BUILD_DEPENDS="${DEB_BUILD_DEPENDS}, gnustep-base, gnustep-gui" &&
export DEB_DEPENDS="gnustep-make, gnustep-base, gnustep-gui" &&
export DEB_RECOMMENDS="gnustep-back" &&
. $(gnustep-config --variable=GNUSTEP_MAKEFILES)/GNUstep.sh &&
make debclean &&
make ${DIST_ACTION} &&
make debfiles &&
sed -i 's/low/'${PRIORITY}'/' obj/debian_dist/gnustep-Ink-*/debian/changelog &&
make deb debsign=yes &&
sudo dpkg -i obj/debian_dist/*.deb)
fi &&


echo "Done"
echo "dput ppa:your-launchpad-username/your-launchpad-repository gnustep-pure/core/{make,base/obj,gui/obj,back/obj}/debian_dist/*_source.changes gnustep/usr-apps/examples/gui/Ink/obj/debian_dist/*_source.changes"



On Mon, May 5, 2014 at 2:48 AM, Ivan Vučica <ivan@vucica.net> wrote:
Cheers,

I've checked in improved support for Debian packaging into gnustep-make. Previously only production of binary packages was possible; now, 'make deb' will produce actual source packages.

Also, <package>.spec files are parsed in a very elementary way and used as additional input for Debian control files, reducing need for duplication of data.

Example script is below (presuming GNUstep's 'modules' is checked out into gnustep-pure/ directory). 'if true' is there solely so I can more easily disable building of a particular package. Note that packages do need to be installed as part of the build process, as each package that follows depends on the previous one being actually installed.

Aside from the script below, I have also played a bit with the ability to install GNUstep into /GNUstep with a non-fhs layout. The script is a total mess, so I'm not including a description of how to do it at this point.

Small patches were done to other core libraries; their GNUmakefiles are now including Master/deb.make, and their specfiles now include a tiny bit more consistent (and larger) amount of data.

Some known issues exist: The packages are not lintian-clean. gnustep-make is correctly defined in its control file as 'it builds on any platform'; apparently when building a package on Canonical's Launchpad that means 'it builds on i386'. Since other packages have locally been (incorrectly) defined as building on x86_64, that means no other package has been built.

I'd appreciate it if people checked if I broke their workflow or anything else; this did consist of messing around with the core of the build system, so who knows what I broke. (Without a code review procedure or a DVCS, it's hard to request code review apart from submitting .patches to the mailing list. And that doesn't feel too fun.)

export DEB_PACKAGE_BUILDER="Ivan Vucica <ivan@vucica.net>"
export DEB_BUILD_OPTIONS="parallel=16"
export CC=gcc
export CXX=g++

if true ; then
(cd gnustep-pure/core/make
./configure
make deb debsign=yes
sudo dpkg -i debian_dist/*.deb)
fi

if true ; then
(cd gnustep-pure/core/base
./configure
make deb debsign=yes
sudo dpkg -i obj/debian_dist/*.deb)
fi

if true ; then
(cd gnustep-pure/core/gui
./configure
make deb debsign=yes
sudo dpkg -i obj/debian_dist/*.deb)
fi

if true ; then
(cd gnustep-pure/core/back
./configure
make deb debsign=yes
sudo dpkg -i obj/debian_dist/*.deb)
fi

--
Ivan Vučica



--
Ivan Vučica

_______________________________________________
Discuss-gnustep mailing list
Discuss-gnustep@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnustep




--
Gregory Casamento
Open Logic Corporation, Principal Consultant
yahoo/skype: greg_casamento, aol: gjcasa
(240)274-9630 (Cell)
http://www.gnustep.org
http://heronsperch.blogspot.com

reply via email to

[Prev in Thread] Current Thread [Next in Thread]