'cd' in debian/rules

Matt G. mattismyname at gmail.com
Mon Mar 31 04:21:17 BST 2008


It works.  I should have figured that out myself.

thanks,
Matt

On Sun, Mar 30, 2008 at 7:43 PM, Christopher Halse Rogers
<chalserogers at gmail.com> wrote:
> On 3/31/08, Matt G. <mattismyname at gmail.com> wrote:
>  > Hello all,
>  >
>  ...
>
> >
>  >   I'm up to the point of running debuild but have run into trouble.  The
>  >   normal build sequence for this library is "./configure; cd src; make".
>  >   So, I've edited the debian/rules file that was autogenerated by
>  >   dh_make to add the "cd src" command to the build-stamp target right
>  >   before the line containing $(MAKE).  I also added a 'cd src' command
>  >   for the clean target.  However, the cd command does not seem to get
>  >   executed for build-stamp: or clean:.
>  >
>  I replied in #ubuntu-motu, but for posterity's sake...
>  This is because each tab-indented line of a Makefile is interpreted in
>  a separate shell.  So make encounters "\t cd src", promptly spawns a
>  shell and runs "cd src" in that shell.  The current working directory
>  of _that shell_ is now ./src, but it has successfully completed that
>  command, and so exits.  Make then goes on to run the next line
>  "\t$(MAKE)" in a new shell, which has inherited the Makefile's current
>  working directory, and so fails.
>
>  You'll notice in your build output:
>
>
> >   matt at Aluminumy:~/Packaging/libgfx/libgfx-debhelper-1.1.0$ debuild
>  >   fakeroot debian/rules clean
>  >   dh_testdir
>  >   dh_testroot
>  >   rm -f build-stamp
>  >   # Add here commands to clean up after the build process.
>  >   # -/usr/bin/make distclean
>  >   cd src
>  ^^^^^^^^^
>  >   /usr/bin/make clean
>  >   make[1]: Entering directory
>  >  `/home/matt/Packaging/libgfx/libgfx-debhelper-1.1.0'
>  >   make[1]: *** No rule to make target `clean'.  Stop.
>  >   make[1]: Leaving directory `/home/matt/Packaging/libgfx/libgfx-debhelper-1.1.0'
>  >   make: [clean] Error 2 (ignored)
>  >   cd ..
>  ^^^^^^^^
>  >   rm -f config.sub config.guess
>  >   dh_clean
>  >   dpkg-source -b libgfx-debhelper-1.1.0
>  >   dpkg-source: warning: source directory './libgfx-debhelper-1.1.0' is
>  >   not <sourcepackage>-<upstreamversion> 'libgfx-1.1.0'
>  >   dpkg-source: warning: .orig directory name libgfx-debhelper-1.1.0.orig
>  >   is not <package>-<upstreamversion> (wanted libgfx-1.1.0.orig)
>  >   dpkg-source: building libgfx using existing libgfx_1.1.0.orig.tar.gz
>  >   dpkg-source: building libgfx in libgfx_1.1.0-0ubuntu0.diff.gz
>  >   dpkg-source: warning: executable mode 0755 of 'config.status' will not
>  >   be represented in diff
>  >   dpkg-source: building libgfx in libgfx_1.1.0-0ubuntu0.dsc
>  >   debian/rules build
>  >   dh_testdir
>  >   # Add here commands to compile the package.
>  >   cd src
>  ^^^^^^^^
>  >   /usr/bin/make
>  >   make[1]: Entering directory
>  >  `/home/matt/Packaging/libgfx/libgfx-debhelper-1.1.0'
>  >   make[1]: *** No targets specified and no makefile found.  Stop.
>  >   make[1]: Leaving directory `/home/matt/Packaging/libgfx/libgfx-debhelper-1.1.0'
>  >   make: *** [build-stamp] Error 2
>  >   debuild: fatal error at line 1247:
>  >   debian/rules build failed
>  >
>  that your cd commands get run.
>
>  Probably what you actually want to do is pass -C src/ to make (so
>  $(MAKE) -C src), which tells it to start in the src/ directory.  Or
>  ask the upstream developers why the build system is strange. :)
>
>  Makefiles can be a bit strange when you start.  It's very important to
>  remember that they are _not_ shell scripts!
>



More information about the Ubuntu-motu mailing list