From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnout Vandecappelle Date: Mon, 28 Apr 2014 07:49:32 +0200 Subject: [Buildroot] [PATCH] Makefile: target-purgelocales: add dependencies In-Reply-To: References: <1398356679-1438-1-git-send-email-fabio.porcedda@gmail.com> <20140424184136.572de3d0@skate> Message-ID: <535DEBEC.80605@mind.be> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net On 25/04/14 23:50, Fabio Porcedda wrote: > On Thu, Apr 24, 2014 at 6:41 PM, Thomas Petazzoni > wrote: >> Dear Fabio Porcedda, >> >> On Thu, 24 Apr 2014 18:24:39 +0200, Fabio Porcedda wrote: >> >>> -target-purgelocales: >>> +target-purgelocales: $(filter-out target-purgelocales,$(TARGETS)) >>> rm -f $(LOCALE_WHITELIST) >>> for i in $(LOCALE_NOPURGE); do echo $$i >> $(LOCALE_WHITELIST); done >> >> Don't we have several other targets that need to be executed only after >> all packages have been built and installed? Wouldn't it make sense to >> have a common solution for these? Like maybe a dedicated target? > > Can you please give some examples? I know only tatget-purgelocales and > target-finalize. > > About the common solution, i see two possible solutions of the problem: > > 1) all those targets must be listed in a variable like > TARGETS_PRE_ROOTFS, but those targets must be able to be executed in > parallel without a specific order. > > 2) all those targets must be converted in hooks and added to a > variable like PRE_ROOTFS_HOOKS, so those steps are going to be > executed in serial observing a specific order. > > What is the more appropriate solution? The easiest and fastest one is > the first, but i'm not sure if those targets can be executed in > parallel. My personal preference is to have a single rule (e.g. target-finalize) that performs everything that is post-targets and pre-rootfs. There isn't much that needs to be done so parallelisation doesn't make sense. And I think it's much easier to understand which steps are executed and in which order if they are all put together in a single rule rather than spread out over several. To make things more readable, we can put the commands into separate variables. For instance: define TARGET_PURGE_LOCALES rm -f $(LOCALE_WHITELIST) ... endef define TARGET_PURGE_DEVFILES rm -rf $(TARGET_DIR)/usr/include ... ... endef ifneq ($(BR2_PACKAGE_GDB),y) define TARGET_PURGE_GDB rm -rf $(TARGET_DIR)/usr/share/gdb endef endif target-finalize: $(TARGETS) $(TARGET_PURGE_LOCALES) $(TARGET_PURGE_DEVFILES) $(TARGET_PURGE_GDB) $(TARGET_PURGE_DOC) ... I'm giving the content of target-finalize as an example here, but it's not immediately needed to convert those into variables. The different target-* steps that are currently added to TARGETS are rather more important. Regards, Arnout -- Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F