You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
7.3 KiB
222 lines
7.3 KiB
# |
|
# Top-level Makefile for LTP. See INSTALL for more info. |
|
# |
|
# Copyright (C) 2009-2010, Cisco Systems Inc. |
|
# Copyright (C) 2010-2011, Linux Test Project. |
|
# |
|
# This program 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; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# This program 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. |
|
# |
|
# You should have received a copy of the GNU General Public License along |
|
# with this program; if not, write to the Free Software Foundation, Inc., |
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
|
# |
|
# Ngie Cooper, July 2009 |
|
# |
|
|
|
# Force IDcheck.sh to fix any issues found with $(DESTDIR)/etc/group and |
|
# $(DESTDIR)/etc/passwd automatically when after running the top-level |
|
# install target. |
|
CREATE_ENTRIES ?= 0 |
|
|
|
top_srcdir ?= $(CURDIR) |
|
|
|
include $(top_srcdir)/include/mk/env_pre.mk |
|
include $(top_srcdir)/include/mk/automake.mk |
|
include $(top_srcdir)/include/mk/gitignore.mk |
|
|
|
.SUFFIXES: |
|
.SUFFIXES: .am .default .h .in .m4 .mk |
|
|
|
vpath %.am $(top_srcdir)/m4 |
|
vpath %.default $(top_srcdir)/include |
|
vpath %.h $(top_srcdir)/include:$(top_builddir)/include |
|
vpath %.in $(top_srcdir)/include |
|
vpath %.m4 $(top_srcdir)/m4 |
|
vpath %.mk $(top_srcdir)/mk:$(top_srcdir)/mk/include |
|
|
|
# Skip running IDcheck.sh at the end of install? |
|
SKIP_IDCHECK ?= 0 |
|
|
|
# User wants uclinux binaries? |
|
UCLINUX ?= 0 |
|
export UCLINUX |
|
|
|
# CLEAN_TARGETS: Targets which exist solely in clean. |
|
# COMMON_TARGETS: Targets which exist in all, clean, and install. |
|
# INSTALL_TARGETS: Targets which exist in clean and install (contains |
|
# COMMON_TARGETS). |
|
# BOOTSTRAP_TARGETS: Directories required to bootstrap out-of-build-tree |
|
# support. |
|
|
|
# We're not using uclinux based targets (default). |
|
ifneq ($(UCLINUX),1) |
|
COMMON_TARGETS := pan utils |
|
INSTALL_TARGETS := doc |
|
endif |
|
|
|
define target_to_dir_dep_mapping |
|
ifeq ($$(filter %-clean,$(1)),) # not *-clean |
|
$(1): | $$(abs_top_builddir)/$$(basename $$(subst -,.,$(1))) |
|
else # clean |
|
$(1):: | $$(abs_top_builddir)/$$(basename $$(subst -,.,$(1))) |
|
endif |
|
endef |
|
|
|
COMMON_TARGETS += testcases tools |
|
# Don't want to nuke the original files if we're installing in-build-tree. |
|
ifneq ($(BUILD_TREE_STATE),$(BUILD_TREE_SRCDIR_INSTALL)) |
|
INSTALL_TARGETS += runtest scenario_groups testscripts |
|
CLEAN_TARGETS += include runtest scenario_groups testscripts |
|
endif |
|
INSTALL_TARGETS += $(COMMON_TARGETS) |
|
CLEAN_TARGETS += $(COMMON_TARGETS) lib |
|
BOOTSTRAP_TARGETS := $(sort $(COMMON_TARGETS) $(CLEAN_TARGETS) $(INSTALL_TARGETS)) |
|
|
|
CLEAN_TARGETS := $(addsuffix -clean,$(CLEAN_TARGETS)) |
|
INSTALL_TARGETS := $(addsuffix -install,$(INSTALL_TARGETS)) |
|
MAKE_TARGETS := $(addsuffix -all,$(filter-out lib,$(COMMON_TARGETS))) |
|
|
|
# There's no reason why we should run `all' twice. Otherwise we're just wasting |
|
# 3+ mins of useful CPU cycles on a modern machine, and even more time on an |
|
# overtaxed one, or one where -j => 1 was specified. |
|
all: $(addsuffix -all,$(COMMON_TARGETS)) Version |
|
|
|
$(MAKE_TARGETS): lib-all |
|
|
|
.PHONY: include-all include-install |
|
include-install: $(top_builddir)/include/config.h include/mk/config.mk include-all |
|
|
|
INSTALL_DIR := $(DESTDIR)/$(prefix) |
|
|
|
# DO NOT REMOVE THIS CALL (see clean_install_dir call below...)!!!! |
|
ifdef MAKE_3_80_COMPAT |
|
INSTALL_DIR := $(call MAKE_3_80_abspath,$(INSTALL_DIR)) |
|
else |
|
INSTALL_DIR := $(abspath $(INSTALL_DIR)) |
|
endif |
|
|
|
# build tree bootstrap targets and $(INSTALL_DIR) target. |
|
$(sort $(addprefix $(abs_top_builddir)/,$(BOOTSTRAP_TARGETS)) $(INSTALL_DIR) $(DESTDIR)/$(bindir)): |
|
mkdir -m 00755 -p "$@" |
|
|
|
## Pattern based subtarget rules. |
|
lib-install: lib-all |
|
|
|
$(MAKE_TARGETS) include-all lib-all: |
|
$(MAKE) -C "$(subst -all,,$@)" \ |
|
-f "$(abs_top_srcdir)/$(subst -all,,$@)/Makefile" all |
|
|
|
# Let's not conflict with ac-clean, maintainer-clean, etc, so. |
|
$(filter-out include-clean,$(CLEAN_TARGETS)):: |
|
-$(MAKE) -C "$(subst -clean,,$@)" \ |
|
-f "$(abs_top_srcdir)/$(subst -clean,,$@)/Makefile" clean |
|
|
|
# Just like everything depends on include-all / -install, we need to get rid |
|
# of include last to ensure that things won't be monkey screwed up. Only do |
|
# this if we're invoking clean or a subclean directly though. |
|
ifneq ($(filter clean,$(MAKECMDGOALS)),) |
|
INCLUDE_CLEAN_RDEP_SUBJECT := $(CLEAN_TARGETS) |
|
else |
|
ifneq ($(filter %clean,$(MAKECMDGOALS)),) |
|
INCLUDE_CLEAN_RDEP_SUBJECT := $(MAKECMDGOALS) |
|
endif |
|
endif |
|
|
|
# Remove potential for circular dependencies. |
|
INCLUDE_CLEAN_RDEPS := $(filter-out include-clean,$(INCLUDE_CLEAN_RDEP_SUBJECT)) |
|
|
|
include-clean:: $(INCLUDE_CLEAN_RDEPS) | $(abs_top_builddir)/include |
|
-$(MAKE) -C include -f "$(abs_top_srcdir)/include/Makefile" clean |
|
|
|
# include-install is separate to avoid creating a circular dependency below in |
|
# the install target. |
|
$(INSTALL_TARGETS) include-install lib-install: |
|
$(MAKE) -C "$(subst -install,,$@)" \ |
|
-f "$(abs_top_srcdir)/$(subst -install,,$@)/Makefile" install |
|
|
|
# Just in case configure hasn't been run yet, let's not overambitiously remove |
|
# the $(INSTALL_DIR). |
|
.PHONY: clean_install_dir |
|
clean_install_dir:: |
|
$(RM) -Rf "$(INSTALL_DIR)" |
|
|
|
# Clean the directory if the build-tree is properly configured and not set to |
|
# the srcdir. |
|
ifeq ($(filter $(BUILD_TREE_STATE),$(BUILD_TREE_SRCDIR_INSTALL) $(BUILD_TREE_UNCONFIGURED)),) |
|
# Make sure that we don't whack `/'!!!!! |
|
ifneq ($(INSTALL_DIR),/) |
|
CLEAN_TARGETS += clean_install_dir |
|
endif |
|
endif |
|
|
|
clean:: $(CLEAN_TARGETS) |
|
$(RM) -f Version |
|
|
|
$(foreach tgt,$(MAKE_TARGETS) include-all lib-all $(filter-out clean_install_dir,$(CLEAN_TARGETS)) $(INSTALL_TARGETS) include-install lib-install,$(eval $(call target_to_dir_dep_mapping,$(tgt)))) |
|
|
|
BINDIR_INSTALL_SCRIPTS := execltp |
|
SRCDIR_INSTALL_SCRIPTS := IDcheck.sh runltp runltplite.sh ver_linux |
|
SRCDIR_INSTALL_READONLY := Version |
|
SRCDIR_INSTALL_TARGETS := $(SRCDIR_INSTALL_SCRIPTS) $(SRCDIR_INSTALL_READONLY) |
|
|
|
# |
|
# If we are in git repository, use git describe to indentify current version, |
|
# otherwise if downloaded as tarball use VERSION file. |
|
# |
|
.PHONY: Version |
|
Version: |
|
if git describe >/dev/null 2>&1; then \ |
|
git describe > "$@"; \ |
|
else \ |
|
cp $(top_srcdir)/VERSION "$@"; \ |
|
fi |
|
|
|
$(INSTALL_DIR)/Version: Version |
|
install -m 00644 "$(top_builddir)/$(@F)" "$@" |
|
|
|
$(addprefix $(DESTDIR)/$(bindir)/,$(BINDIR_INSTALL_SCRIPTS)): %: |
|
install -m 00755 "$(top_builddir)/$(@F)" "$@" |
|
|
|
$(addprefix $(INSTALL_DIR)/,$(SRCDIR_INSTALL_SCRIPTS)): %: |
|
install -m 00755 "$(top_srcdir)/$(@F)" "$@" |
|
|
|
ifneq ($(BUILD_TREE_STATE),$(BUILD_TREE_SRCDIR_INSTALL)) |
|
INSTALL_TARGETS += $(addprefix $(INSTALL_DIR)/,$(SRCDIR_INSTALL_TARGETS)) |
|
endif |
|
INSTALL_TARGETS += $(addprefix $(DESTDIR)/$(bindir)/,$(BINDIR_INSTALL_SCRIPTS)) |
|
|
|
$(INSTALL_TARGETS): $(INSTALL_DIR) $(DESTDIR)/$(bindir) |
|
|
|
## Install |
|
install: $(INSTALL_TARGETS) |
|
ifeq ($(SKIP_IDCHECK),0) |
|
-@CREATE_ENTRIES=$(CREATE_ENTRIES) \ |
|
DESTDIR="$(DESTDIR)" \ |
|
"$(top_srcdir)/IDcheck.sh" |
|
else |
|
@echo "*******************************************************" |
|
@echo "** Will not run IDcheck.sh (SKIP_IDCHECK set to 1). **" |
|
@echo "*******************************************************" |
|
endif |
|
|
|
## Misc targets. |
|
|
|
## Help |
|
.PHONY: help |
|
help: |
|
@echo "Please read the Configuration section in $(top_srcdir)/INSTALL" |
|
@exit 1 |
|
|
|
## Menuconfig |
|
menuconfig: |
|
@$(SHELL) "$(top_srcdir)/ltpmenu" |
|
|
|
## End misc targets.
|
|
|