From: Peter Korsgaard <jacmet@uclibc.org>
To: buildroot@busybox.net
Subject: [Buildroot] advice on makefile
Date: Thu, 10 Apr 2008 10:37:36 +0200 [thread overview]
Message-ID: <87k5j6aywf.fsf@macbook.be.48ers.dk> (raw)
In-Reply-To: <1207813956.6817.405.camel@nigel-x60> (Nigel Kukard's message of "Thu\, 10 Apr 2008 07\:52\:36 +0000")
>>>>> "Nigel" == Nigel Kukard <nkukard@lbsd.net> writes:
Hi,
Nigel> Hi Guys,
Nigel> Could someone lend me some tips on improving my rpm.mk file, I"m not
Nigel> happy to commit it yet as it looks scrappy. I've spent a few hours
Nigel> looking over it and reading the gnu make manpage.
Nigel> As I think another chap pointed out, Makefiles are not shell scripts,
Nigel> but what is the right way then to install? I know $(INSTALL) but
Nigel> makefile equiv for for i in xxxx yyy zzz?
Nigel> -N
Nigel> #############################################################
Nigel> #
Nigel> # rpm
Nigel> #
Nigel> #############################################################
Nigel> RPM_VERSION:=5.0.3
Nigel> RPM_SOURCE:=rpm-$(RPM_VERSION).tar.gz
Nigel> RPM_SITE:=http://rpm5.org/files/rpm/rpm-5.0/
Nigel> RPM_DIR:=$(BUILD_DIR)/rpm-$(RPM_VERSION)
Nigel> RPM_CAT:=$(ZCAT)
Nigel> RPM_BINARIES:=rpm
Nigel> RPM_LIBS:=librpmio-5.0.so librpmdb-5.0.so librpm-5.0.so librpmbuild-5.0.so librpmmisc-5.0.so
You could use patsubst, E.G.:
RPM_LIBS=$(patsubst %,lib%-5.0.so,rpmio rpmdb rpm rpmbuild rpmmisc)
Nigel> $(DL_DIR)/$(RPM_SOURCE):
Nigel> $(WGET) -P $(DL_DIR) $(RPM_SITE)/$(RPM_SOURCE)
Nigel> rpm-source: $(DL_DIR)/$(RPM_SOURCE)
Nigel> $(RPM_DIR)/.unpacked: $(DL_DIR)/$(RPM_SOURCE)
Nigel> $(RPM_CAT) $(DL_DIR)/$(RPM_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
Nigel> find $(RPM_DIR) -name '*.rej' | xargs --no-run-if-empty rm
What are those .rej files?
Nigel> toolchain/patch-kernel.sh $(RPM_DIR) package/rpm/ rpm\*.patch
Nigel> touch $@
Nigel> #perl -pi -e 's|#![^ ]+ |#!/bin/|' installplatform;
Please use sed for replacing text.
Nigel> $(RPM_DIR)/.configured: $(RPM_DIR)/.unpacked
It looks like you need to depend on beecrypt and neon installing into
STAGING_DIR.
Nigel> (cd $(RPM_DIR); rm -rf config.cache; \
Nigel> autoreconf; \
Nigel> $(TARGET_CONFIGURE_OPTS) \
Nigel> $(TARGET_CONFIGURE_ARGS) \
Nigel> CFLAGS="$(CFLAGS) -I$(STAGING_DIR)/usr/include/beecrypt -I$(STAGING_DIR)/usr/include/neon" \
Nigel> LDFLAGS="-lz" \
Nigel> ac_cv_va_copy=yes \
Nigel> ./configure \
Nigel> --target=$(GNU_TARGET_NAME) \
Nigel> --host=$(GNU_TARGET_NAME) \
Nigel> --build=$(GNU_HOST_NAME) \
Nigel> --prefix=$(STAGING_DIR)/usr \
Nigel> --exec_prefix=$(STAGING_DIR) \
Nigel> --libdir=$(STAGING_DIR)/usr/lib \
Nigel> --includedir=$(STAGING_DIR)/usr/include \
Nigel> --bindir=/usr/bin \
Nigel> --sbindir=/usr/sbin \
Nigel> --libexecdir=/usr/lib \
Nigel> --sysconfdir=/etc \
Nigel> --datadir=/usr/share \
Nigel> --localstatedir=/var \
Nigel> --mandir=/usr/man \
Nigel> --infodir=/usr/info \
Is all of this needed? Normally you just need to set prefix=/usr and
use DESTDIR when installing into STAGING_DIR / TARGET_DIR.
Nigel> --program-prefix= \
Nigel> --disable-build-versionscript \
Nigel> --without-selinux \
Nigel> --without-python \
We have a python package. Maybe we should add something like the
DISABLE_NLS stuff for it?
Nigel> --without-perl \
Nigel> $(DISABLE_NLS) \
Nigel> )
Nigel> touch $@
Nigel> $(RPM_DIR)/.built: $(RPM_DIR)/.configured
Nigel> $(MAKE1) $(TARGET_CONFIGURE_OPTS) -C $(RPM_DIR)
Nigel> touch $@
Nigel> RPM_STAGING_LIBS:=$(addprefix $(STAGING_DIR)/usr/lib/,$(RPM_LIBS))
Nigel> RPM_STAGING_BINARIES:=$(addprefix $(STAGING_DIR)/usr/bin/, $(addprefix $(GNU_TARGET_NAME)-,$(RPM_BINARIES)))
Nigel> $(RPM_STAGING_LIBS) $(RPM_STAGING_BINARIES): $(RPM_DIR)/.built
Nigel> $(MAKE) prefix=$(STAGING_DIR) \
Nigel> exec_prefix=$(STAGING_DIR) \
Nigel> bindir=$(STAGING_DIR)/usr/bin \
Nigel> sbindir=$(STAGING_DIR)/usr/sbin \
Nigel> libexecdir=$(STAGING_DIR)/usr/lib \
Nigel> datadir=$(STAGING_DIR)/usr/share \
Nigel> sysconfdir=$(STAGING_DIR)/etc \
Nigel> sharedstatedir=$(STAGING_DIR)/com \
Nigel> localstatedir=$(STAGING_DIR)/var \
Nigel> libdir=$(STAGING_DIR)/usr/lib \
Nigel> includedir=$(STAGING_DIR)/usr/include \
Nigel> infodir=$(STAGING_DIR)/usr/info \
Nigel> mandir=$(STAGING_DIR)/usr/man \
Is this needed? Doesn't make install support DESTDIR=$(STAGING_DIR)?
Nigel> -C $(RPM_DIR) install
Nigel> RPM_TARGET_LIBS:=$(addprefix $(TARGET_DIR)/usr/lib/,$(RPM_LIBS))
Nigel> RPM_TARGET_BINARIES:=$(addprefix $(TARGET_DIR)/usr/bin/,$(RPM_BINARIES))
Nigel> $(RPM_TARGET_LIBS) $(RPM_TARGET_BINARIES): $(RPM_STAGING_LIBS) $(RPM_STAGING_BINARIES)
Nigel> mkdir -p $(TARGET_DIR)/usr/lib/rpm
Nigel> for i in $(RPM_BINARIES); do cp -pf $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-$$i $(TARGET_DIR)/usr/bin/$$i; done
Well, RPM_BINARIES=rpm, so if you don't forsee more programs to be
added, just drop the loop.
Nigel> for i in $(RPM_LIBS); do cp -pf $(STAGING_DIR)/usr/lib/$$i $(TARGET_DIR)/usr/lib/$$i; done
cp -pf $(RPM_STAGING_LIBS) $(TARGET_DIR)/usr/lib ?
Nigel> ifeq ($(BR2_HAVE_MANPAGES),y)
Nigel> mkdir -p $(STAGING_DIR)/usr/man/man{1,8}
Nigel> for i in gendiff; do gzip -9 < $(STAGING_DIR)/usr/man/man1/$(GNU_TARGET_NAME)-$i.1 > $(TARGET_DIR)/usr/man/man1/$i.1.gz; done
Nigel> for i in rpm rpmbuild rpm2cpio; do gzip -9 < $(STAGING_DIR)/usr/man/man8/$(GNU_TARGET_NAME)-$i.1 > $(TARGET_DIR)/usr/man/man8/$i.8.gz; done
Nigel> endif
Nigel> rpm: libbeecrypt libneon libpopt $(RPM_TARGET_LIBS) $(RPM_TARGET_BINARIES)
The rpm target shouldn't depend on the full installation in TARGET_DIR
of libeecrypt / libneon / libpopt, instead the configure target should
depend on those libraries installing into $(STAGING_DIR).
Nigel> rpm-clean:
Nigel> rm -f $(TARGET_DIR)/bin/rpm
Nigel> for i in $(BIN_PROGS) $(BIN2_PROGS); do rm -f $(TARGET_DIR)/usr/bin/$$i; done
What are BIN_PROGS / BIN2_PROGS?
Why not simply rm -f $(RPM_TARGET_LIBS) $(RPM_TARGET_BINARIES) instead?
Nigel> for i in $(LIBS); do rm -f $(TARGET_DIR)/usr/lib/$$i; done
Nigel> rm -rf $(TARGET_DIR)/usr/lib/rpm
Nigel> -$(MAKE) -C $(RPM_DIR) clean
What about the manpages?
Nigel> rpm-dirclean:
Nigel> rm -rf $(RPM_DIR)
Nigel> #############################################################
Nigel> #
Nigel> # Toplevel Makefile options
Nigel> #
Nigel> #############################################################
Nigel> ifeq ($(strip $(BR2_PACKAGE_RPM)),y)
Nigel> TARGETS+=rpm
Nigel> endif
--
Bye, Peter Korsgaard
next prev parent reply other threads:[~2008-04-10 8:37 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-10 7:52 [Buildroot] advice on makefile Nigel Kukard
2008-04-10 8:37 ` Peter Korsgaard [this message]
-- strict thread matches above, loose matches on Subject: below --
2008-04-10 11:32 Nigel Kukard
2008-04-10 11:56 ` Peter Korsgaard
2008-04-10 14:11 ` Nigel Kukard
2008-04-10 14:35 ` Peter Korsgaard
2008-04-10 14:51 ` Nigel Kukard
2008-04-12 9:25 ` Hamish Moffatt
2008-04-12 13:16 ` Peter Korsgaard
2008-04-10 17:28 ` Nigel Kukard
2008-04-10 17:30 ` Nigel Kukard
2008-04-10 18:09 ` Peter Korsgaard
[not found] ` <1207851468.6817.498.camel@nigel-x60>
2008-04-10 18:59 ` Peter Korsgaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k5j6aywf.fsf@macbook.be.48ers.dk \
--to=jacmet@uclibc.org \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.