Makefile.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1576 906b7509835e
child 1876 a6a4beab3125
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
yann@197
     1
# Makefile.in for building crosstool-NG
yann@182
     2
# This file serves as source for the ./configure operation
yann@182
     3
yann@1156
     4
# This series of test is here because GNU make 3.81 will *not* use MAKEFLAGS
yann@1156
     5
# to set additional flags in the current Makfile ( see:
yann@1156
     6
# http://savannah.gnu.org/bugs/?20501 ), although the make manual says it
yann@1156
     7
# should ( see: http://www.gnu.org/software/make/manual/make.html#Options_002fRecursion )
yann@1156
     8
# so we have to work it around by calling ourselves back if needed
yann@1156
     9
yann@1156
    10
# So why do we need not to use the built rules and variables? Because we
yann@1156
    11
# need to generate scripts/crosstool-NG.sh from scripts/crosstool-NG.sh.in
yann@1156
    12
# and there is a built-in implicit rule '%.sh:' that has neither a pre-requisite
yann@1156
    13
# nor a command associated, and that built-in implicit rule takes precedence
yann@1156
    14
# over our non-built-in implicit rule '%: %.in', below.
yann@1156
    15
yann@1156
    16
# CT_MAKEFLAGS will be used later, below...
yann@1156
    17
yann@1156
    18
# Do not print directories as we descend into them
yann@1156
    19
ifeq ($(filter --no-print-directory,$(MAKEFLAGS)),)
yann@1156
    20
CT_MAKEFLAGS += --no-print-directory
yann@1156
    21
endif
yann@1156
    22
yann@1156
    23
# Use neither builtin rules, nor builtin variables
yann@1156
    24
# Note: dual test, because if -R and -r are given on the command line
yann@1156
    25
# (who knows?), MAKEFLAGS contains 'Rr' instead of '-Rr', while adding
yann@1156
    26
# '-Rr' to MAKEFLAGS adds it literaly ( and does not add 'Rr' )
yann@1156
    27
ifeq ($(filter Rr,$(MAKEFLAGS)),)
yann@1156
    28
ifeq ($(filter -Rr,$(MAKEFLAGS)),)
yann@1156
    29
CT_MAKEFLAGS += -Rr
yann@1156
    30
endif # No -Rr
yann@1156
    31
endif # No Rr
yann@1156
    32
yann@1156
    33
# Remove any suffix rules
yann@1156
    34
.SUFFIXES:
yann@554
    35
yann@382
    36
all: Makefile build
yann@382
    37
yann@1047
    38
###############################################################################
yann@182
    39
# Configuration variables
yann@182
    40
yann@182
    41
VERSION:= @@VERSION@@
yann@182
    42
BINDIR := @@BINDIR@@
yann@185
    43
LIBDIR := @@LIBDIR@@
yann@185
    44
DOCDIR := @@DOCDIR@@
yann@185
    45
MANDIR := @@MANDIR@@
yann@182
    46
DATE   := @@DATE@@
yann@285
    47
LOCAL  := @@LOCAL@@
yann@1141
    48
yann@1141
    49
# Paths found by ./configure
yann@1153
    50
install:= @@install@@
yann@1153
    51
bash   := @@bash@@
yann@1153
    52
grep   := @@grep@@
yann@1153
    53
make   := @@make@@
yann@1153
    54
sed    := @@sed@@
yann@1109
    55
yann@1109
    56
###############################################################################
yann@1109
    57
# Sanity checks
yann@1109
    58
yann@1109
    59
# Check if Makefile is up to date:
yann@1109
    60
Makefile: Makefile.in
yann@1109
    61
	@echo "$< did changed: you must re-run './configure'"
yann@1109
    62
	@false
yann@1109
    63
yann@1109
    64
# If installing with DESTDIR, check it's an absolute path
yann@1109
    65
ifneq ($(strip $(DESTDIR)),)
yann@1109
    66
  ifneq ($(DESTDIR),$(abspath /$(DESTDIR)))
yann@1109
    67
    $(error DESTDIR is not an absolute PATH: '$(DESTDIR)')
yann@1109
    68
  endif
yann@1109
    69
endif
yann@182
    70
yann@182
    71
###############################################################################
yann@182
    72
# Global make rules
yann@182
    73
yann@1156
    74
# If any extra MAKEFLAGS were added, re-run ourselves
yann@1156
    75
# See top of file for an explanation of why this is needed...
yann@1156
    76
ifneq ($(strip $(CT_MAKEFLAGS)),)
yann@1156
    77
yann@1156
    78
MAKEFLAGS += $(CT_MAKEFLAGS)
yann@1156
    79
build install clean distclean uninstall:
yann@1156
    80
	@$(MAKE) $@
yann@1156
    81
yann@1156
    82
else
yann@1156
    83
# There were no additional MAKEFLAGS to add, do the job
yann@1156
    84
yann@555
    85
TARGETS := bin lib doc man
yann@182
    86
yann@555
    87
build: $(patsubst %,build-%,$(TARGETS))
yann@182
    88
yann@1101
    89
install: build real-install
yann@555
    90
yann@555
    91
clean: $(patsubst %,clean-%,$(TARGETS))
yann@182
    92
yann@182
    93
distclean: clean
yann@554
    94
	@echo "  RM     'Makefile'"
yann@182
    95
	@rm -f Makefile
yann@182
    96
yann@1048
    97
uninstall: real-uninstall
yann@182
    98
yann@182
    99
###############################################################################
yann@182
   100
# Specific make rules
yann@182
   101
yann@182
   102
#--------------------------------------
yann@182
   103
# Build rules
yann@182
   104
yann@1336
   105
build-bin: ct-ng scripts/crosstool-NG.sh scripts/saveSample.sh scripts/showTuple.sh
yann@1297
   106
	@chmod 755 $^
yann@182
   107
yann@1153
   108
build-lib: paths.mk
yann@182
   109
yann@555
   110
build-doc:
yann@555
   111
yann@309
   112
build-man: docs/ct-ng.1.gz
yann@309
   113
yann@309
   114
docs/ct-ng.1.gz: docs/ct-ng.1
yann@554
   115
	@echo "  GZIP   '$@'"
yann@317
   116
	@gzip -c9 $< >$@
yann@182
   117
yann@470
   118
%: %.in Makefile
yann@554
   119
	@echo "  SED    '$@'"
yann@1153
   120
	@$(sed) -r -e 's,@@CT_BINDIR@@,$(BINDIR),g;'    \
yann@1153
   121
	           -e 's,@@CT_LIBDIR@@,$(LIBDIR),g;'    \
yann@1153
   122
	           -e 's,@@CT_DOCDIR@@,$(DOCDIR),g;'    \
yann@1153
   123
	           -e 's,@@CT_MANDIR@@,$(MANDIR),g;'    \
yann@1153
   124
	           -e 's,@@CT_VERSION@@,$(VERSION),g;'	\
yann@1153
   125
	           -e 's,@@CT_DATE@@,$(DATE),g;'        \
yann@1153
   126
	           -e 's,@@CT_make@@,$(make),g;'        \
yann@1156
   127
	           -e 's,@@CT_bash@@,$(bash),g;'        \
yann@1153
   128
	           $@.in >$@
yann@1153
   129
yann@1153
   130
# We create a script fragment that is parseable from inside a Makefile,
yann@1153
   131
# but also from inside a shell script, hence the reason why we don't
fr@1643
   132
# use := to set variables, although that will incur a (very small)
yann@1153
   133
# penalty from the Makefile that includes it (due to re-evaluation at
yann@1153
   134
# each call).
yann@1153
   135
paths.mk:
yann@1153
   136
	@echo "  GEN    '$@'"
yann@1153
   137
	@(echo "export install=$(install)"; \
yann@1153
   138
	  echo "export bash=$(bash)";       \
yann@1153
   139
	  echo "export grep=$(grep)";       \
yann@1153
   140
	  echo "export make=$(make)";       \
yann@1153
   141
	  echo "export sed=$(sed)";         \
yann@1153
   142
	 ) >paths.mk
yann@182
   143
yann@182
   144
#--------------------------------------
yann@182
   145
# Clean rules
yann@182
   146
yann@182
   147
clean-bin:
yann@554
   148
	@echo "  RM     'ct-ng'"
yann@182
   149
	@rm -f ct-ng
yann@1339
   150
	@echo "  RM     'scripts/crosstool-NG.sh'"
yann@1158
   151
	@rm -f scripts/crosstool-NG.sh
yann@1339
   152
	@echo "  RM     'scripts/saveSample.sh'"
yann@1186
   153
	@rm -f scripts/saveSample.sh
yann@1339
   154
	@echo "  RM     'scripts/showTuple.sh'"
yann@1336
   155
	@rm -f scripts/showTuple.sh
yann@182
   156
yann@182
   157
clean-lib:
yann@1154
   158
	@echo "  RM     'paths.mk'"
yann@1154
   159
	@rm -f paths.mk
yann@182
   160
yann@182
   161
clean-doc:
yann@555
   162
yann@555
   163
clean-man:
yann@554
   164
	@echo "  RM     'docs/ct-ng.1'"
yann@318
   165
	@rm -f docs/ct-ng.1
yann@554
   166
	@echo "  RM     'docs/ct-ng.1.gz'"
yann@318
   167
	@rm -f docs/ct-ng.1.gz
yann@182
   168
yann@182
   169
#--------------------------------------
yann@554
   170
# Check for --local setup
yann@182
   171
yann@1297
   172
ifeq ($(strip $(LOCAL)),y)
yann@1048
   173
yann@1101
   174
real-install:
yann@1297
   175
	@true
yann@1048
   176
yann@1048
   177
real-uninstall:
yann@1048
   178
	@true
yann@1048
   179
yann@1048
   180
else
yann@285
   181
yann@554
   182
#--------------------------------------
yann@554
   183
# Install rules
yann@554
   184
yann@1101
   185
real-install: $(patsubst %,install-%,$(TARGETS))
yann@1048
   186
yann@1047
   187
install-bin: $(DESTDIR)$(BINDIR)
yann@554
   188
	@echo "  INST   'ct-ng'"
yann@1153
   189
	@$(install) -m 755 ct-ng "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   190
yann@555
   191
# If one is hacking crosstool-NG, the patch set might change between any two
yann@555
   192
# installations of the same VERSION, thus the patches must be removed prior
yann@555
   193
# to being installed. It is simpler to remove the whole lib/ directory, as it
yann@555
   194
# is the goal of the install-lib rule to install the lib/ directory...
yann@1047
   195
install-lib: uninstall-lib $(DESTDIR)$(LIBDIR) install-lib-main install-lib-samples
yann@182
   196
yann@1048
   197
install-lib-main: $(DESTDIR)$(LIBDIR)
yann@1576
   198
	@for src_dir in config kconfig patches scripts; do  \
yann@1576
   199
	     echo "  INST   '$${src_dir}/'";                \
yann@1576
   200
	     tar cf - --exclude='*.sh.in' $${src_dir}       \
yann@1576
   201
	     |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -);         \
yann@182
   202
	 done
yann@1184
   203
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/crosstool-NG.sh
yann@1186
   204
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/saveSample.sh
yann@1101
   205
	@rm -f "$(DESTDIR)$(LIBDIR)/scripts/addToolVersion.sh"
yann@554
   206
	@echo "  INST   'steps.mk'"
yann@1153
   207
	@$(install) -m 644 steps.mk "$(DESTDIR)$(LIBDIR)/steps.mk"
yann@1153
   208
	@echo "  INST   'paths.mk'"
yann@1153
   209
	@$(install) -m 644 paths.mk "$(DESTDIR)$(LIBDIR)/paths.mk"
yann@182
   210
yann@182
   211
# Samples need a little love:
yann@425
   212
#  - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
yann@1047
   213
install-lib-samples: $(DESTDIR)$(LIBDIR) install-lib-main
yann@554
   214
	@echo "  INST   'samples/'"
yann@1576
   215
	@tar cf - samples |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -)
yann@1141
   216
	@for samp_file in "$(DESTDIR)$(LIBDIR)/samples/"*"/crosstool.config"; do                    \
yann@1153
   217
	     $(sed) -r -i -e 's,\$$\{CT_TOP_DIR\},\$$\{CT_LIB_DIR\},g;' $${samp_file};           \
yann@1153
   218
	     $(sed) -r -i -e 's,^(CT_WORK_DIR)=.*,\1="\$${CT_TOP_DIR}/targets",;' $${samp_file}; \
yann@182
   219
	 done
yann@182
   220
yann@1047
   221
install-doc: $(DESTDIR)$(DOCDIR)
yann@1141
   222
	@for doc_file in docs/CREDITS docs/overview.txt; do             \
yann@1141
   223
	     echo "  INST   '$${doc_file}'";                            \
yann@1153
   224
	     $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(DOCDIR)"; \
yann@182
   225
	 done
yann@249
   226
yann@1047
   227
install-man: $(DESTDIR)$(MANDIR)
yann@554
   228
	@echo "  INST   'ct-ng.1.gz'"
yann@1153
   229
	@$(install) -m 644 docs/ct-ng.1.gz "$(DESTDIR)$(MANDIR)"
yann@182
   230
yann@1047
   231
$(sort $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(DOCDIR) $(DESTDIR)$(MANDIR)):
yann@554
   232
	@echo "  MKDIR  '$@'"
yann@1153
   233
	@$(install) -m 755 -d "$@"
yann@182
   234
yann@182
   235
yann@182
   236
#--------------------------------------
yann@182
   237
# Uninstall rules
yann@182
   238
yann@1048
   239
real-uninstall: $(patsubst %,uninstall-%,$(TARGETS))
yann@1048
   240
yann@554
   241
uninstall-bin:
yann@1047
   242
	@echo "  RM     '$(DESTDIR)$(BINDIR)/ct-ng'"
yann@1047
   243
	@rm -f "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   244
yann@554
   245
uninstall-lib:
yann@1047
   246
	@echo "  RMDIR  '$(DESTDIR)$(LIBDIR)/'"
yann@1047
   247
	@rm -rf "$(DESTDIR)$(LIBDIR)"
yann@298
   248
yann@554
   249
uninstall-doc:
yann@1047
   250
	@echo "  RMDIR  '$(DESTDIR)$(DOCDIR)/'"
yann@1047
   251
	@rm -rf "$(DESTDIR)$(DOCDIR)"
yann@554
   252
yann@554
   253
uninstall-man:
yann@1047
   254
	@echo "  RM     '$(DESTDIR)$(MANDIR)/ct-ng.1.gz'"
yann@1047
   255
	@rm -f "$(DESTDIR)$(MANDIR)/ct-ng.1"{,.gz}
yann@1048
   256
yann@1048
   257
endif # Not --local
yann@1156
   258
yann@1156
   259
endif # No extra MAKEFLAGS were added