1# =========================================================================== 2# Kernel configuration targets 3# These targets are used from top-level makefile 4 5PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config 6 7xconfig: $(obj)/qconf 8 $< arch/$(ARCH)/Kconfig 9 10gconfig: $(obj)/gconf 11 $< arch/$(ARCH)/Kconfig 12 13menuconfig: $(obj)/mconf 14 $< arch/$(ARCH)/Kconfig 15 16config: $(obj)/conf 17 $< arch/$(ARCH)/Kconfig 18 19oldconfig: $(obj)/conf 20 $< -o arch/$(ARCH)/Kconfig 21 22silentoldconfig: $(obj)/conf 23 $< -s arch/$(ARCH)/Kconfig 24 25# Create new linux.po file 26# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files 27# The symlink is used to repair a deficiency in arch/um 28update-po-config: $(obj)/kxgettext 29 xgettext --default-domain=linux \ 30 --add-comments --keyword=_ --keyword=N_ \ 31 --from-code=UTF-8 \ 32 --files-from=scripts/kconfig/POTFILES.in \ 33 --output $(obj)/config.pot 34 $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot 35 $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch 36 (for i in `ls arch/`; \ 37 do \ 38 $(obj)/kxgettext arch/$$i/Kconfig; \ 39 done ) >> $(obj)/config.pot 40 msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \ 41 --output $(obj)/linux.pot 42 $(Q)rm -f arch/um/Kconfig.arch 43 $(Q)rm -f $(obj)/config.pot 44 45PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig 46 47randconfig: $(obj)/conf 48 $< -r arch/$(ARCH)/Kconfig 49 50allyesconfig: $(obj)/conf 51 $< -y arch/$(ARCH)/Kconfig 52 53allnoconfig: $(obj)/conf 54 $< -n arch/$(ARCH)/Kconfig 55 56allmodconfig: $(obj)/conf 57 $< -m arch/$(ARCH)/Kconfig 58 59defconfig: $(obj)/conf 60ifeq ($(KBUILD_DEFCONFIG),) 61 $< -d arch/$(ARCH)/Kconfig 62else 63 @echo *** Default configuration is based on '$(KBUILD_DEFCONFIG)' 64 $(Q)$< -D arch/$(ARCH)/configs/$(KBUILD_DEFCONFIG) arch/$(ARCH)/Kconfig 65endif 66 67%_defconfig: $(obj)/conf 68 $(Q)$< -D arch/$(ARCH)/configs/$@ arch/$(ARCH)/Kconfig 69 70# Help text used by make help 71help: 72 @echo ' config - Update current config utilising a line-oriented program' 73 @echo ' menuconfig - Update current config utilising a menu based program' 74 @echo ' xconfig - Update current config utilising a QT based front-end' 75 @echo ' gconfig - Update current config utilising a GTK based front-end' 76 @echo ' oldconfig - Update current config utilising a provided .config as base' 77 @echo ' silentoldconfig - Same as oldconfig, but quietly' 78 @echo ' randconfig - New config with random answer to all options' 79 @echo ' defconfig - New config with default answer to all options' 80 @echo ' allmodconfig - New config selecting modules when possible' 81 @echo ' allyesconfig - New config where all options are accepted with yes' 82 @echo ' allnoconfig - New config where all options are answered with no' 83 84# lxdialog stuff 85check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh 86 87# Use reursively expanded variables so we do not call gcc unless 88# we really need to do so. (Do not call gcc as part of make mrproper) 89HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) 90HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC)) 91 92HOST_EXTRACFLAGS += -DLOCALE 93 94PHONY += $(obj)/dochecklxdialog 95$(obj)/dochecklxdialog: 96 $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES) 97 98always := dochecklxdialog 99 100 101# =========================================================================== 102# Shared Makefile for the various kconfig executables: 103# conf: Used for defconfig, oldconfig and related targets 104# mconf: Used for the mconfig target. 105# Utilizes the lxdialog package 106# qconf: Used for the xconfig target 107# Based on QT which needs to be installed to compile it 108# gconf: Used for the gconfig target 109# Based on GTK which needs to be installed to compile it 110# object files used by all kconfig flavours 111 112lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o 113lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o 114 115conf-objs := conf.o zconf.tab.o 116mconf-objs := mconf.o zconf.tab.o $(lxdialog) 117kxgettext-objs := kxgettext.o zconf.tab.o 118 119hostprogs-y := conf qconf gconf kxgettext 120 121ifeq ($(MAKECMDGOALS),menuconfig) 122 hostprogs-y += mconf 123endif 124 125ifeq ($(MAKECMDGOALS),xconfig) 126 qconf-target := 1 127endif 128ifeq ($(MAKECMDGOALS),gconfig) 129 gconf-target := 1 130endif 131 132 133ifeq ($(qconf-target),1) 134qconf-cxxobjs := qconf.o 135qconf-objs := kconfig_load.o zconf.tab.o 136endif 137 138ifeq ($(gconf-target),1) 139gconf-objs := gconf.o kconfig_load.o zconf.tab.o 140endif 141 142clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ 143 .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c 144clean-files += mconf qconf gconf 145 146# Needed for systems without gettext 147KBUILD_HAVE_NLS := $(shell \ 148 if echo "\#include <libintl.h>" | $(HOSTCC) $(HOSTCFLAGS) -E - > /dev/null 2>&1 ; \ 149 then echo yes ; \ 150 else echo no ; fi) 151ifeq ($(KBUILD_HAVE_NLS),no) 152HOSTCFLAGS += -DKBUILD_NO_NLS 153endif 154 155# generated files seem to need this to find local include files 156HOSTCFLAGS_lex.zconf.o := -I$(src) 157HOSTCFLAGS_zconf.tab.o := -I$(src) 158 159HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl 160HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK 161 162HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` 163HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \ 164 -D LKC_DIRECT_LINK 165 166$(obj)/qconf.o: $(obj)/.tmp_qtcheck 167 168ifeq ($(qconf-target),1) 169$(obj)/.tmp_qtcheck: $(src)/Makefile 170-include $(obj)/.tmp_qtcheck 171 172# QT needs some extra effort... 173$(obj)/.tmp_qtcheck: 174 @set -e; echo " CHECK qt"; dir=""; pkg=""; \ 175 pkg-config --exists qt 2> /dev/null && pkg=qt; \ 176 pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \ 177 if [ -n "$$pkg" ]; then \ 178 cflags="\$$(shell pkg-config $$pkg --cflags)"; \ 179 libs="\$$(shell pkg-config $$pkg --libs)"; \ 180 moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \ 181 dir="$$(pkg-config $$pkg --variable=prefix)"; \ 182 else \ 183 for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \ 184 if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \ 185 done; \ 186 if [ -z "$$dir" ]; then \ 187 echo "*"; \ 188 echo "* Unable to find the QT3 installation. Please make sure that"; \ 189 echo "* the QT3 development package is correctly installed and"; \ 190 echo "* either install pkg-config or set the QTDIR environment"; \ 191 echo "* variable to the correct location."; \ 192 echo "*"; \ 193 false; \ 194 fi; \ 195 libpath=$$dir/lib; lib=qt; osdir=""; \ 196 $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \ 197 osdir=x$$($(HOSTCXX) -print-multi-os-directory); \ 198 test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \ 199 test -f $$libpath/libqt-mt.so && lib=qt-mt; \ 200 cflags="-I$$dir/include"; \ 201 libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \ 202 moc="$$dir/bin/moc"; \ 203 fi; \ 204 if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \ 205 echo "*"; \ 206 echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \ 207 echo "*"; \ 208 moc="/usr/bin/moc"; \ 209 fi; \ 210 echo "KC_QT_CFLAGS=$$cflags" > $@; \ 211 echo "KC_QT_LIBS=$$libs" >> $@; \ 212 echo "KC_QT_MOC=$$moc" >> $@ 213endif 214 215$(obj)/gconf.o: $(obj)/.tmp_gtkcheck 216 217ifeq ($(gconf-target),1) 218-include $(obj)/.tmp_gtkcheck 219 220# GTK needs some extra effort, too... 221$(obj)/.tmp_gtkcheck: 222 @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then \ 223 if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \ 224 touch $@; \ 225 else \ 226 echo "*"; \ 227 echo "* GTK+ is present but version >= 2.0.0 is required."; \ 228 echo "*"; \ 229 false; \ 230 fi \ 231 else \ 232 echo "*"; \ 233 echo "* Unable to find the GTK+ installation. Please make sure that"; \ 234 echo "* the GTK+ 2.0 development package is correctly installed..."; \ 235 echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \ 236 echo "*"; \ 237 false; \ 238 fi 239endif 240 241$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c 242 243$(obj)/kconfig_load.o: $(obj)/lkc_defs.h 244 245$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h 246 247$(obj)/gconf.o: $(obj)/lkc_defs.h 248 249$(obj)/%.moc: $(src)/%.h 250 $(KC_QT_MOC) -i $< -o $@ 251 252$(obj)/lkc_defs.h: $(src)/lkc_proto.h 253 sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/' 254 255 256### 257# The following requires flex/bison/gperf 258# By default we use the _shipped versions, uncomment the following line if 259# you are modifying the flex/bison src. 260# LKC_GENPARSER := 1 261 262ifdef LKC_GENPARSER 263 264$(obj)/zconf.tab.c: $(src)/zconf.y 265$(obj)/lex.zconf.c: $(src)/zconf.l 266$(obj)/zconf.hash.c: $(src)/zconf.gperf 267 268%.tab.c: %.y 269 bison -l -b $* -p $(notdir $*) $< 270 cp $@ $@_shipped 271 272lex.%.c: %.l 273 flex -L -P$(notdir $*) -o$@ $< 274 cp $@ $@_shipped 275 276%.hash.c: %.gperf 277 gperf < $< > $@ 278 cp $@ $@_shipped 279 280endif 281