Makefile.in
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Tue May 29 18:52:13 2012 +0200 (2012-05-29)
changeset 2988 a57b8a45ea26
parent 2838 822af73497bf
child 2999 4ccfca658d9b
permissions -rw-r--r--
completion: fix function name

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
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@2834
    41
# Stuff found by ./configure
yann@2835
    42
export DATE            := @DATE@
yann@2835
    43
export LOCAL           := @enable_local@
yann@2835
    44
export PROG_SED        := @program_transform_name@
yann@2835
    45
export PACKAGE_TARNAME := @PACKAGE_TARNAME@
yann@2835
    46
export VERSION         := @PACKAGE_VERSION@
yann@2835
    47
export prefix          := @prefix@
yann@2835
    48
export exec_prefix     := @exec_prefix@
yann@2835
    49
export bindir          := @bindir@
yann@2835
    50
export libdir          := @libdir@@sublibdir@
yann@2835
    51
export docdir          := @docdir@@subdocdir@
yann@2835
    52
export mandir          := @mandir@
yann@2835
    53
export datarootdir     := @datarootdir@
yann@2835
    54
export install         := @INSTALL@
yann@2835
    55
export bash            := @_BASH@
yann@2839
    56
export grep            := @GREP@
yann@2835
    57
export make            := @MAKE@
yann@2835
    58
export sed             := @SED@
yann@2835
    59
export libtool         := @LIBTOOL@
yann@2835
    60
export libtoolize      := @LIBTOOLIZE@
yann@2835
    61
export objcopy         := @OBJCOPY@
yann@2835
    62
export objdump         := @OBJDUMP@
yann@2835
    63
export readelf         := @READELF@
yann@2835
    64
export patch           := @PATCH@
yann@2835
    65
export CC              := @CC@
yann@2835
    66
export CPP             := @CPP@
yann@2835
    67
export CPPFLAGS        := @CPPFLAGS@
yann@2835
    68
export CFLAGS          := @CFLAGS@
yann@2835
    69
export LDFLAGS         := @LDFLAGS@
yann@2835
    70
export LIBS            := @LIBS@
yann@2835
    71
export curses_hdr      := @ac_ct_curses_hdr@
yann@2835
    72
export gettext         := @gettext@
yann@1109
    73
yann@2481
    74
# config options to push down to kconfig
yann@2834
    75
KCONFIG:= @kconfig_options@
yann@2481
    76
yann@1109
    77
###############################################################################
yann@2026
    78
# Non-configure variables
yann@2026
    79
MAN_SECTION := 1
yann@2026
    80
MAN_SUBDIR := /man$(MAN_SECTION)
yann@2026
    81
yann@2834
    82
PROG_NAME := $(shell echo 'ct-ng' |$(sed) -r -e '$(PROG_SED)' )
yann@2620
    83
yann@2026
    84
###############################################################################
yann@1109
    85
# Sanity checks
yann@1109
    86
yann@1109
    87
# Check if Makefile is up to date:
yann@1109
    88
Makefile: Makefile.in
yann@1109
    89
	@echo "$< did changed: you must re-run './configure'"
yann@1109
    90
	@false
yann@1109
    91
yann@1109
    92
# If installing with DESTDIR, check it's an absolute path
yann@1109
    93
ifneq ($(strip $(DESTDIR)),)
yann@1109
    94
  ifneq ($(DESTDIR),$(abspath /$(DESTDIR)))
yann@1109
    95
    $(error DESTDIR is not an absolute PATH: '$(DESTDIR)')
yann@1109
    96
  endif
yann@1109
    97
endif
yann@182
    98
yann@182
    99
###############################################################################
yann@182
   100
# Global make rules
yann@182
   101
yann@1156
   102
# If any extra MAKEFLAGS were added, re-run ourselves
yann@1156
   103
# See top of file for an explanation of why this is needed...
yann@1156
   104
ifneq ($(strip $(CT_MAKEFLAGS)),)
yann@1156
   105
yann@2505
   106
# Somehow, the new auto-completion for make in the recent distributions
yann@2505
   107
# trigger a behavior where our Makefile calls itself recursively, in a
yann@2505
   108
# never-ending loop (except on lack of ressources, swap, PIDs...)
yann@2505
   109
# Avoid this situation by cutting the recursion short at the first
yann@2505
   110
# level.
yann@2505
   111
# This has the side effect of only showing the real targets, and hiding our
yann@2505
   112
# internal ones. :-)
yann@2505
   113
ifneq ($(MAKELEVEL),0)
yann@2505
   114
$(error Recursion detected, bailing out...)
yann@2505
   115
endif
yann@2505
   116
yann@1156
   117
MAKEFLAGS += $(CT_MAKEFLAGS)
yann@2834
   118
build install clean distclean mrproper uninstall:
yann@1156
   119
	@$(MAKE) $@
yann@1156
   120
yann@1156
   121
else
yann@1156
   122
# There were no additional MAKEFLAGS to add, do the job
yann@1156
   123
yann@2835
   124
TARGETS := bin lib lib-kconfig doc man
yann@182
   125
yann@555
   126
build: $(patsubst %,build-%,$(TARGETS))
yann@182
   127
yann@1101
   128
install: build real-install
yann@555
   129
yann@555
   130
clean: $(patsubst %,clean-%,$(TARGETS))
yann@182
   131
yann@182
   132
distclean: clean
yann@554
   133
	@echo "  RM     'Makefile'"
yann@182
   134
	@rm -f Makefile
yann@182
   135
yann@2834
   136
mrproper: distclean
yann@2834
   137
	@echo "  RM     'autostuff'"
yann@2834
   138
	@ rm -rf autom4te.cache config.log config.status configure
yann@2834
   139
yann@1048
   140
uninstall: real-uninstall
yann@182
   141
yann@182
   142
###############################################################################
yann@182
   143
# Specific make rules
yann@182
   144
yann@182
   145
#--------------------------------------
yann@182
   146
# Build rules
yann@182
   147
yann@2835
   148
build-bin: $(PROG_NAME)             \
yann@2835
   149
           scripts/crosstool-NG.sh  \
yann@2835
   150
           scripts/saveSample.sh    \
yann@2835
   151
           scripts/showTuple.sh
yann@1297
   152
	@chmod 755 $^
yann@182
   153
yann@2838
   154
build-lib: config/configure.in  \
yann@2838
   155
           paths.mk             \
yann@2838
   156
           paths.sh
yann@2835
   157
yann@2835
   158
build-lib-kconfig:
yann@2835
   159
	@$(MAKE) -C kconfig
yann@182
   160
yann@555
   161
build-doc:
yann@555
   162
yann@2620
   163
build-man: docs/$(PROG_NAME).1.gz
yann@309
   164
yann@2620
   165
docs/$(PROG_NAME).1.gz: docs/$(PROG_NAME).1
yann@554
   166
	@echo "  GZIP   '$@'"
yann@317
   167
	@gzip -c9 $< >$@
yann@182
   168
yann@2621
   169
define sed_it
yann@2621
   170
	@echo "  SED    '$@'"
yann@2834
   171
	@$(sed) -r -e 's,@@CT_BINDIR@@,$(bindir),g;'        \
yann@2834
   172
	           -e 's,@@CT_LIBDIR@@,$(libdir),g;'        \
yann@2834
   173
	           -e 's,@@CT_DOCDIR@@,$(docdir),g;'        \
yann@2834
   174
	           -e 's,@@CT_MANDIR@@,$(mandir),g;'        \
yann@2621
   175
	           -e 's,@@CT_PROG_NAME@@,$(PROG_NAME),g;'  \
yann@2621
   176
	           -e 's,@@CT_VERSION@@,$(VERSION),g;'	    \
yann@2621
   177
	           -e 's,@@CT_DATE@@,$(DATE),g;'            \
yann@2621
   178
	           -e 's,@@CT_make@@,$(make),g;'            \
yann@2621
   179
	           -e 's,@@CT_bash@@,$(bash),g;'            \
yann@2621
   180
	           $< >$@
yann@2621
   181
endef
yann@2621
   182
yann@2622
   183
docs/$(PROG_NAME).1: docs/ct-ng.1.in Makefile
yann@2622
   184
	$(call sed_it)
yann@2622
   185
yann@2623
   186
$(PROG_NAME): ct-ng.in Makefile
yann@2621
   187
	$(call sed_it)
yann@2621
   188
yann@470
   189
%: %.in Makefile
yann@2621
   190
	$(call sed_it)
yann@1153
   191
yann@1153
   192
# We create a script fragment that is parseable from inside a Makefile,
yann@2838
   193
# and one from inside a shell script
yann@2481
   194
paths.mk: FORCE
yann@1153
   195
	@echo "  GEN    '$@'"
yann@2838
   196
	@(echo 'export install=$(install)';         \
yann@2838
   197
	  echo 'export bash=$(bash)';               \
yann@2838
   198
	  echo 'export grep=$(grep)';               \
yann@2838
   199
	  echo 'export make=$(make)';               \
yann@2838
   200
	  echo 'export sed=$(sed)';                 \
yann@2838
   201
	  echo 'export libtool=$(libtool)';         \
yann@2838
   202
	  echo 'export libtoolize=$(libtoolize)';   \
yann@2838
   203
	  echo 'export objcopy=$(objcopy)';         \
yann@2838
   204
	  echo 'export objdump=$(objdump)';         \
yann@2838
   205
	  echo 'export readelf=$(readelf)';         \
yann@2838
   206
	  echo 'export patch=$(patch)';             \
yann@2838
   207
	 ) >$@
yann@2838
   208
yann@2838
   209
paths.sh: FORCE
yann@2838
   210
	@echo "  GEN    '$@'"
yann@2838
   211
	@(echo 'export install="$(install)"';       \
yann@2838
   212
	  echo 'export bash="$(bash)"';             \
yann@2838
   213
	  echo 'export grep="$(grep)"';             \
yann@2838
   214
	  echo 'export make="$(make)"';             \
yann@2838
   215
	  echo 'export sed="$(sed)"';               \
yann@2838
   216
	  echo 'export libtool="$(libtool)"';       \
yann@2838
   217
	  echo 'export libtoolize="$(libtoolize)"'; \
yann@2838
   218
	  echo 'export objcopy="$(objcopy)"';       \
yann@2838
   219
	  echo 'export objdump="$(objdump)"';       \
yann@2838
   220
	  echo 'export readelf="$(readelf)"';       \
yann@2838
   221
	  echo 'export patch="$(patch)"';           \
yann@2838
   222
	 ) >$@
yann@182
   223
yann@2481
   224
config/configure.in: FORCE
yann@2481
   225
	@echo "  GEN    '$@'"
yann@2481
   226
	@{  printf "# Generated file, do not edit\n";            \
yann@2481
   227
	    printf "# Default values as found by ./configure\n"; \
yann@2481
   228
	    for var in $(KCONFIG); do                            \
yann@2481
   229
	        printf "\n";                                     \
yann@2481
   230
	        printf "config CONFIGURE_$${var%%=*}\n";         \
yann@2481
   231
	        if [ "$${var#*=}" = "y" ]; then                  \
yann@2631
   232
	            printf "    def_bool y\n";                   \
yann@2631
   233
	        else                                             \
yann@2631
   234
	            printf "    bool\n";                         \
yann@2481
   235
	        fi;                                              \
yann@2481
   236
	    done;                                                \
yann@2481
   237
	 } >$@
yann@2481
   238
yann@2481
   239
FORCE:
yann@2481
   240
yann@182
   241
#--------------------------------------
yann@182
   242
# Clean rules
yann@182
   243
yann@182
   244
clean-bin:
yann@2620
   245
	@echo "  RM     '$(PROG_NAME)'"
yann@2620
   246
	@rm -f $(PROG_NAME)
yann@1339
   247
	@echo "  RM     'scripts/crosstool-NG.sh'"
yann@1158
   248
	@rm -f scripts/crosstool-NG.sh
yann@1339
   249
	@echo "  RM     'scripts/saveSample.sh'"
yann@1186
   250
	@rm -f scripts/saveSample.sh
yann@1339
   251
	@echo "  RM     'scripts/showTuple.sh'"
yann@1336
   252
	@rm -f scripts/showTuple.sh
yann@182
   253
yann@182
   254
clean-lib:
yann@2838
   255
	@echo "  RM     'paths'"
yann@2838
   256
	@rm -f paths.mk paths.sh
yann@2481
   257
	@echo "  RM     'config/configure.in'"
yann@2481
   258
	@rm -f config/configure.in
yann@182
   259
yann@2835
   260
clean-lib-kconfig:
yann@2835
   261
	@$(MAKE) -C kconfig clean
yann@2835
   262
yann@182
   263
clean-doc:
yann@555
   264
yann@555
   265
clean-man:
yann@2620
   266
	@echo "  RM     'docs/$(PROG_NAME).1'"
yann@2620
   267
	@rm -f docs/$(PROG_NAME).1
yann@2620
   268
	@echo "  RM     'docs/$(PROG_NAME).1.gz'"
yann@2620
   269
	@rm -f docs/$(PROG_NAME).1.gz
yann@182
   270
yann@182
   271
#--------------------------------------
yann@554
   272
# Check for --local setup
yann@182
   273
yann@2834
   274
ifeq ($(strip $(LOCAL)),yes)
yann@1048
   275
yann@1101
   276
real-install:
yann@1297
   277
	@true
yann@1048
   278
yann@1048
   279
real-uninstall:
yann@1048
   280
	@true
yann@1048
   281
yann@1048
   282
else
yann@285
   283
yann@554
   284
#--------------------------------------
yann@554
   285
# Install rules
yann@554
   286
yann@1876
   287
real-install: $(patsubst %,install-%,$(TARGETS)) install-post
yann@1048
   288
yann@2834
   289
install-bin: $(DESTDIR)$(bindir)
yann@2620
   290
	@echo "  INST    '$(PROG_NAME)'"
yann@2834
   291
	@$(install) -m 755 $(PROG_NAME) "$(DESTDIR)$(bindir)/$(PROG_NAME)"
yann@182
   292
yann@555
   293
# If one is hacking crosstool-NG, the patch set might change between any two
yann@555
   294
# installations of the same VERSION, thus the patches must be removed prior
yann@555
   295
# to being installed. It is simpler to remove the whole lib/ directory, as it
yann@555
   296
# is the goal of the install-lib rule to install the lib/ directory...
yann@2835
   297
install-lib: uninstall-lib          \
yann@2835
   298
             $(DESTDIR)$(libdir)    \
yann@2835
   299
             install-lib-main       \
yann@2835
   300
             install-lib-samples
yann@182
   301
yann@2835
   302
LIB_SUB_DIR := config contrib patches scripts
yann@2834
   303
$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): $(DESTDIR)$(libdir)
yann@1994
   304
	@echo "  INSTDIR '$(patsubst install-lib-%-copy,%,$(@))/'"
yann@1994
   305
	@tar cf - --exclude='*.sh.in' $(patsubst install-lib-%-copy,%,$(@)) \
yann@2834
   306
	 |(cd "$(DESTDIR)$(libdir)"; tar xf -)
yann@1994
   307
yann@1994
   308
# Huh? It seems we need at least one command to make this rule kick-in.
yann@1994
   309
install-lib-%: install-lib-%-copy; @true
yann@1994
   310
yann@1994
   311
# Huh? that one does not inherit the -opy dependency, above...
yann@1994
   312
install-lib-scripts: install-lib-scripts-copy
yann@2834
   313
	@chmod a+x $(DESTDIR)$(libdir)/scripts/crosstool-NG.sh
yann@2834
   314
	@chmod a+x $(DESTDIR)$(libdir)/scripts/saveSample.sh
yann@2834
   315
	@rm -f "$(DESTDIR)$(libdir)/scripts/addToolVersion.sh"
yann@1994
   316
yann@2834
   317
install-lib-main: $(DESTDIR)$(libdir) $(patsubst %,install-lib-%,$(LIB_SUB_DIR))
yann@1994
   318
	@echo "  INST    'steps.mk'"
yann@2834
   319
	@$(install) -m 644 steps.mk "$(DESTDIR)$(libdir)/steps.mk"
yann@2838
   320
	@echo "  INST    'paths'"
yann@2838
   321
	@$(install) -m 644 paths.mk paths.sh "$(DESTDIR)$(libdir)"
yann@182
   322
yann@182
   323
# Samples need a little love:
yann@425
   324
#  - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
yann@2834
   325
install-lib-samples: $(DESTDIR)$(libdir) install-lib-main
yann@1994
   326
	@echo "  INSTDIR 'samples/'"
yann@2577
   327
	@for samp_dir in samples/*/; do                                         \
yann@2834
   328
	     mkdir -p "$(DESTDIR)$(libdir)/$${samp_dir}";                       \
yann@2422
   329
	     $(sed) -r -e 's:\$$\{CT_TOP_DIR\}:\$$\{CT_LIB_DIR\}:;'             \
yann@2422
   330
	               -e 's:^(CT_WORK_DIR)=.*:\1="\$${CT_TOP_DIR}/.build":;'   \
yann@2577
   331
	            $${samp_dir}/crosstool.config                               \
yann@2834
   332
	            >"$(DESTDIR)$(libdir)/$${samp_dir}/crosstool.config";       \
yann@2577
   333
	     $(install) -m 644 "$${samp_dir}/reported.by"                       \
yann@2834
   334
	                       "$(DESTDIR)$(libdir)/$${samp_dir}";              \
yann@2577
   335
	     for libc_cfg in "$${samp_dir}/"*libc*.config; do                   \
yann@2577
   336
	         [ -f "$${libc_cfg}" ] || continue;                             \
yann@2577
   337
	         $(install) -m 644 "$${libc_cfg}"                               \
yann@2834
   338
	                           "$(DESTDIR)$(libdir)/$${samp_dir}";          \
yann@2577
   339
	     done;                                                              \
yann@182
   340
	 done
yann@2834
   341
	@$(install) -m 644 samples/samples.mk "$(DESTDIR)$(libdir)/samples/samples.mk"
yann@182
   342
yann@2835
   343
KCONFIG_FILES := conf mconf nconf kconfig.mk
yann@2835
   344
install-lib-kconfig: $(DESTDIR)$(libdir) install-lib-main
yann@2835
   345
	@echo "  INST    'kconfig/'"
yann@2835
   346
	@for f in $(KCONFIG_FILES); do                                      \
yann@2835
   347
	    install -D "kconfig/$${f}" "$(DESTDIR)$(libdir)/kconfig/$${f}"; \
yann@2835
   348
	 done
yann@2835
   349
yann@2834
   350
install-doc: $(DESTDIR)$(docdir)
yann@2076
   351
	@echo "  INST    'docs/*.txt'"
yann@2076
   352
	@for doc_file in docs/*.txt; do                              \
yann@2834
   353
	     $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(docdir)"; \
yann@182
   354
	 done
yann@249
   355
yann@2834
   356
install-man: $(DESTDIR)$(mandir)$(MAN_SUBDIR)
yann@2620
   357
	@echo "  INST    '$(PROG_NAME).1.gz'"
yann@2834
   358
	@$(install) -m 644 docs/$(PROG_NAME).1.gz "$(DESTDIR)$(mandir)$(MAN_SUBDIR)"
yann@182
   359
yann@2834
   360
$(sort $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(DESTDIR)$(docdir) $(DESTDIR)$(mandir)$(MAN_SUBDIR)):
yann@1994
   361
	@echo "  MKDIR   '$@/'"
yann@1153
   362
	@$(install) -m 755 -d "$@"
yann@182
   363
yann@1876
   364
install-post:
yann@1876
   365
	@echo
yann@2620
   366
	@echo "For auto-completion, do not forget to install '$(PROG_NAME).comp' into"
yann@1994
   367
	@echo "your bash completion directory (usually /etc/bash_completion.d)"
yann@182
   368
yann@182
   369
#--------------------------------------
yann@182
   370
# Uninstall rules
yann@182
   371
yann@1048
   372
real-uninstall: $(patsubst %,uninstall-%,$(TARGETS))
yann@1048
   373
yann@554
   374
uninstall-bin:
yann@2834
   375
	@echo "  RM      '$(DESTDIR)$(bindir)/$(PROG_NAME)'"
yann@2834
   376
	@rm -f "$(DESTDIR)$(bindir)/$(PROG_NAME)"
yann@182
   377
yann@554
   378
uninstall-lib:
yann@2834
   379
	@echo "  RMDIR   '$(DESTDIR)$(libdir)/'"
yann@2834
   380
	@rm -rf "$(DESTDIR)$(libdir)"
yann@298
   381
yann@554
   382
uninstall-doc:
yann@2834
   383
	@echo "  RMDIR   '$(DESTDIR)$(docdir)/'"
yann@2834
   384
	@rm -rf "$(DESTDIR)$(docdir)"
yann@554
   385
yann@554
   386
uninstall-man:
yann@2834
   387
	@echo "  RM      '$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1.gz'"
yann@2834
   388
	@rm -f "$(DESTDIR)$(mandir)$(MAN_SUBDIR)/$(PROG_NAME).1"{,.gz}
yann@1048
   389
yann@1048
   390
endif # Not --local
yann@1156
   391
yann@1156
   392
endif # No extra MAKEFLAGS were added
michael@2694
   393
michael@2694
   394
.PHONY: build $(patsubst %,build-%,$(TARGETS)) install