Re: install script...
Hi,
> Date: Sat, 19 Jun 1999 11:45:26 BST
> To: debian-mentors@lists.debian.org
> From: John Travers <jtravs@debian.org>
> Subject: install script...
>
> Right, I'm getting there..
>
> anyway, I use a configure script and do
>
> ./configure --with-datadir=/usr/lib
>
> in my rules file, (under commands to compile the package ) and have:
>
> $(MAKE) install prefix='pwd'/debian/tmp/usr
>
> (under commands to install the package) but when I run dpkg-buildpackage,
> the script installs them in my real system, not in debian/tmp/usr.
>
> how do I solve this?
>
> (The configure script must have the real data dir names as it is hardcoded in
> the programs, so I can't fo --with-datadir='pwd'/debian/tmp/usr/lib)
I'll explain this as well as I can here; it will be more general, so you will
need to figure some things out and experiment with others. You can also see
http://www.debian.org/doc/maint-guide/ch-modify.html
So...
I might as well license this, so it can be used in places like tutorials:
# Copyright (c) 1999 by Jim Lynch.
# This document comes with NO WARRANTY WHATSOEVER.
#
# This document 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; version 2 dated June, 1991, or, at your
# option, any LATER version.
#
# This document is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details, which is included
# here by reference.
your makefile install target has to have a DESTDIR variable (well, I don't
think the name is so important, however debhelper I think does use this name
for this concept).
should be something like this...
#edited for debian
DESTDIR =
(debhelper will override this variable to point at debian/temp or somewhere
like that; if you have to add things to the debhelper-generated debian/rules
file, you will have to look in there to find out how it passes DESTDIR.)
:
:
install: myBinary
cp myBinary $(DESTDIR)/usr/bin/myBinary
chmod +whatever $(DESTDIR)/usr/bin/myBinary
cp myBinary.4 $(DESTDIR)/usr/man/man4/myBinary.4
mkdir -p $(DESTDIR)/var/lib/myPackageName/theData
So you have to alter your makefile's "install" target to add implementation
for this concept. If you see that a path is told to the compilation process
through a define passed in the makefile, note that this becomes a "hard-wired
path" in the compiled output, and should NOT, therefore, have the DESTDIR
variable in it. If it does, then it will expect to find the binary INSTALLED
in the -source- dir, in debian/tmp somewhere, and this is not where the
installed files will ultimately be found.
Example: If myBinary is a c program that refers to a text file which it prints,
its code might look like this...
void main(void)
{
int result = 0; /* optimistic attitude */
FILE *theFileP = fopen(INTRO_BANNER_PATH, "r");
if(theFileP)
{
/* read the file and do something with it, like print it */
fclose(theFileP);
}
:
:
return result;
}
If the banner file is in the tarball in the same dir as is the debian/ dir,
you would install it like this maybe:
BANNERPATH = /var/lib/myPackageName/banner.txt
:
:
install:
:
:
cp banner.txt $(DESTDIR)$(BANNERPATH)
:
:
which would copy the file into the package's temporary place.
The target that compiles myBinary.c into myBinary.o would NOT have DESTDIR:
myBinary.o: myBinary.c
$(CC) -DINTRO_BANNER_PATH=\"$(BANNERPATH)\" -c myBinary.c
because myBinary should refer to the -installed- version of the file, !not! the
one in the tarball, and certainly not the one in debian/tmp.
To summarize: if one variable isn't general enough to do the job, introduce
another :)
-Jim
Reply to: