Debian packaging of LinuxCNC
============================

debian/copyright
----------------

Automated tools to check licenses within the source tree will likely find
CC-2.5 referenced. But this refers only to some image files that were
not adopted by the source tree, only the README describing them was 
intentionally left unchanged.

Steps
-----

The following steps were performed to transform Upstream's git repository
into
 - a source tarball and
 - a debian subdirectory
for Debian's main distribution.

LinuxCNC is used across a wide span of releases, now supporting from
Squeeze up to the latest version of Ubuntu. Not too many changes are
required for Debian unstable.

1. Generate the source tarball, This will use the version as specified
   in the first line of the debian/changelog file. And maybe remove
   anything outdated, just to avoid confusions:

   If this is not the original tarball but an interim git tag/snapshot,
   then set the version in debian/changelog. For git checkout, the
   version stated in debian/changelog receives the suffix +gitYYYYMMDD.githash

   VERSION=$(head -n1 debian/changelog |cut -f2 -d' ' | tr -d "()" | sed -e 's/^[0-9]://' )

   If the current source tree is not the regular release but git checkout also
   create the fitting tarball:

   echo -n "I: Version: $VERSION -> "
   VERSION=$(git log --date=format:%Y%m%d --pretty=${VERSION}+git%cd.%h| head -n1)
   echo $VERSION
   foldername=$(basename $(pwd))
   if [ -d debian/patches ]; then quilt pop -a && rm -rf .pc; fi
   echo "I: taring up CWD into linuxcnc_${VERSION}.orig.tar.xz - this will take a minute or two"
   (cd .. && tar --exclude=.git* --exclude=.pc -cJf "linuxcnc_${VERSION}.orig.tar.xz" "$foldername")
   du -sh ../$foldername
   echo "I: Please inspect with 'tar Jtf ../linuxcnc_${VERSION}.orig.tar.xz'"

2. Prepare shell to work in temp directory

   export VERSION
   export WORKDIR=$(mktemp -d)
   mv "../linuxcnc_${VERSION}.orig.tar.xz" ${WORKDIR}/ && \
   pushd $WORKDIR && bash
   echo -n "I: Now working in "; pwd

3. Unpack

   echo -n "I: Unpacking source tree to build from newly generated orig.tar.xz"
   tar xJvf linuxcnc_*.orig.tar.xz
   cd linuxcnc

4. Configure debian directory for the "uspace" packages that are
   prepared for the Non-RTAI but preempt realtime kernels that are
   distributed with Debian.

   debian/configure

5. Slightly adapt for upload to d/unstable

   mkdir -p debian/source
   echo "3.0 (quilt)" > debian/source/format

   # dch is from the devscripts package
   dch -b -m -v "$VERSION" --distribution unstable  "New upstream version."

6a. build Debian package if in doubt - optional

   dpkg-buildpackage

6b. build Debian source package, which is what is uploaded to Debian upon acceptance and for updates

   dpkg-buildpackage -S

7. test build in cowbuilder

   sudo cowbuilder --update
   sudo cowbuilder --build ../linuxcnc_*.dsc

8. check that nothing avoidable slipped through

   lintian -i /var/cache/pbuilder/results/linuxcnc_*.changes

8. get all the files just created

   exit
   mv ${WORKDIR}/linuxcnc_* ..

Above sketched differences are not impeding routine workflows of Debian
packaging. For instance we found that the routine-update script (from the
Debian Science team) deals with these adaptations just fine.


How to contribute
-----------------

LinuxCNC does not have a representation on salsa.debian.org. 
Please join us on https://github.com/LinuxCNC/linuxcnc/ .
