Makefile.in
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Mon Feb 13 21:47:25 2012 +0100 (2012-02-13)
changeset 2883 cea814c9932a
parent 2838 822af73497bf
child 2999 4ccfca658d9b
permissions -rw-r--r--
libc/glibc: do not consume parameters when parsing them

Currently, there are two constructs used to parse arguments in
glibc backends, one that consumes args as they are parsed, and
one that does not.

Always use the construct that does not eat args as they are parsed.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.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