Makefile.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jun 11 21:47:19 2009 +0000 (2009-06-11)
branch1.4
changeset 1451 25d050084e98
parent 1297 7439f29a0476
child 1336 bc8b9381f637
permissions -rw-r--r--
populate: fix installing dynamic linker 'ld.so'

The dynamic linker, ld.so, needs the execute bit to be set.
Detect tht the library being installed is in fact ld.so and
install it with 0755 instead of 0644.

Fix detecting src == dst.

Use a simpler command to copy src -> dst.

Also change echo to printf, get rid of 'echo -n', which is
highly non-portable.


-------- diffstat follows --------
/trunk/scripts/populate.in | 76 43 33 0 +++++++++++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 33 deletions(-)
(transplanted from d7ddcb75e0f703e2ba6d17169167356389224870)
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@1186
   105
build-bin: ct-ng scripts/crosstool-NG.sh scripts/saveSample.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
yann@1153
   132
# use := to set varaibles, 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@1158
   150
	@echo "  RM     'script/crosstool-NG.sh'"
yann@1158
   151
	@rm -f scripts/crosstool-NG.sh
yann@1186
   152
	@echo "  RM     'script/saveSample.sh'"
yann@1186
   153
	@rm -f scripts/saveSample.sh
yann@182
   154
yann@182
   155
clean-lib:
yann@1154
   156
	@echo "  RM     'paths.mk'"
yann@1154
   157
	@rm -f paths.mk
yann@182
   158
yann@182
   159
clean-doc:
yann@555
   160
yann@555
   161
clean-man:
yann@554
   162
	@echo "  RM     'docs/ct-ng.1'"
yann@318
   163
	@rm -f docs/ct-ng.1
yann@554
   164
	@echo "  RM     'docs/ct-ng.1.gz'"
yann@318
   165
	@rm -f docs/ct-ng.1.gz
yann@182
   166
yann@182
   167
#--------------------------------------
yann@554
   168
# Check for --local setup
yann@182
   169
yann@1297
   170
ifeq ($(strip $(LOCAL)),y)
yann@1048
   171
yann@1101
   172
real-install:
yann@1297
   173
	@true
yann@1048
   174
yann@1048
   175
real-uninstall:
yann@1048
   176
	@true
yann@1048
   177
yann@1048
   178
else
yann@285
   179
yann@554
   180
#--------------------------------------
yann@554
   181
# Install rules
yann@554
   182
yann@1101
   183
real-install: $(patsubst %,install-%,$(TARGETS))
yann@1048
   184
yann@1047
   185
install-bin: $(DESTDIR)$(BINDIR)
yann@554
   186
	@echo "  INST   'ct-ng'"
yann@1153
   187
	@$(install) -m 755 ct-ng "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   188
yann@555
   189
# If one is hacking crosstool-NG, the patch set might change between any two
yann@555
   190
# installations of the same VERSION, thus the patches must be removed prior
yann@555
   191
# to being installed. It is simpler to remove the whole lib/ directory, as it
yann@555
   192
# is the goal of the install-lib rule to install the lib/ directory...
yann@1047
   193
install-lib: uninstall-lib $(DESTDIR)$(LIBDIR) install-lib-main install-lib-samples
yann@182
   194
yann@1048
   195
install-lib-main: $(DESTDIR)$(LIBDIR)
yann@1184
   196
	@for src_dir in config kconfig patches scripts; do              \
yann@1184
   197
	     echo "  INST   '$${src_dir}/'";                            \
yann@1184
   198
	     tar cf - --exclude=.svn --exclude='*.sh.in' $${src_dir}    \
yann@1184
   199
	     |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -);                     \
yann@182
   200
	 done
yann@1184
   201
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/crosstool-NG.sh
yann@1186
   202
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/saveSample.sh
yann@1101
   203
	@rm -f "$(DESTDIR)$(LIBDIR)/scripts/addToolVersion.sh"
yann@554
   204
	@echo "  INST   'steps.mk'"
yann@1153
   205
	@$(install) -m 644 steps.mk "$(DESTDIR)$(LIBDIR)/steps.mk"
yann@1153
   206
	@echo "  INST   'paths.mk'"
yann@1153
   207
	@$(install) -m 644 paths.mk "$(DESTDIR)$(LIBDIR)/paths.mk"
yann@182
   208
yann@182
   209
# Samples need a little love:
yann@425
   210
#  - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
yann@1047
   211
install-lib-samples: $(DESTDIR)$(LIBDIR) install-lib-main
yann@554
   212
	@echo "  INST   'samples/'"
yann@1047
   213
	@tar cf - --exclude=.svn samples |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -)
yann@1141
   214
	@for samp_file in "$(DESTDIR)$(LIBDIR)/samples/"*"/crosstool.config"; do                    \
yann@1153
   215
	     $(sed) -r -i -e 's,\$$\{CT_TOP_DIR\},\$$\{CT_LIB_DIR\},g;' $${samp_file};           \
yann@1153
   216
	     $(sed) -r -i -e 's,^(CT_WORK_DIR)=.*,\1="\$${CT_TOP_DIR}/targets",;' $${samp_file}; \
yann@182
   217
	 done
yann@182
   218
yann@1047
   219
install-doc: $(DESTDIR)$(DOCDIR)
yann@1141
   220
	@for doc_file in docs/CREDITS docs/overview.txt; do             \
yann@1141
   221
	     echo "  INST   '$${doc_file}'";                            \
yann@1153
   222
	     $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(DOCDIR)"; \
yann@182
   223
	 done
yann@249
   224
yann@1047
   225
install-man: $(DESTDIR)$(MANDIR)
yann@554
   226
	@echo "  INST   'ct-ng.1.gz'"
yann@1153
   227
	@$(install) -m 644 docs/ct-ng.1.gz "$(DESTDIR)$(MANDIR)"
yann@182
   228
yann@1047
   229
$(sort $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(DOCDIR) $(DESTDIR)$(MANDIR)):
yann@554
   230
	@echo "  MKDIR  '$@'"
yann@1153
   231
	@$(install) -m 755 -d "$@"
yann@182
   232
yann@182
   233
yann@182
   234
#--------------------------------------
yann@182
   235
# Uninstall rules
yann@182
   236
yann@1048
   237
real-uninstall: $(patsubst %,uninstall-%,$(TARGETS))
yann@1048
   238
yann@554
   239
uninstall-bin:
yann@1047
   240
	@echo "  RM     '$(DESTDIR)$(BINDIR)/ct-ng'"
yann@1047
   241
	@rm -f "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   242
yann@554
   243
uninstall-lib:
yann@1047
   244
	@echo "  RMDIR  '$(DESTDIR)$(LIBDIR)/'"
yann@1047
   245
	@rm -rf "$(DESTDIR)$(LIBDIR)"
yann@298
   246
yann@554
   247
uninstall-doc:
yann@1047
   248
	@echo "  RMDIR  '$(DESTDIR)$(DOCDIR)/'"
yann@1047
   249
	@rm -rf "$(DESTDIR)$(DOCDIR)"
yann@554
   250
yann@554
   251
uninstall-man:
yann@1047
   252
	@echo "  RM     '$(DESTDIR)$(MANDIR)/ct-ng.1.gz'"
yann@1047
   253
	@rm -f "$(DESTDIR)$(MANDIR)/ct-ng.1"{,.gz}
yann@1048
   254
yann@1048
   255
endif # Not --local
yann@1156
   256
yann@1156
   257
endif # No extra MAKEFLAGS were added