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