#############operating system detection:
1.用户情况
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
if echo '\c' | grep '\c' >/dev/null; then
ECHO_N=-n
else
ECHO_C='\c'
fi
PLATFORM_X11=no
PLATFORM_QWS=maybe
PLATFORM_QPA=maybe
BUILD_ON_MAC=no
if [ -d /System/Library/Frameworks/Carbon.framework ]; then
PLATFORM_MAC=maybe
BUILD_ON_MAC=yes
else
PLATFORM_MAC=no
fi
configure目录下src/corelib/global/qglobal.h文件中#define QT_VERSION_STR获取Qt version,#define QT_PACKAGEDATE_STR获取该QT版本发包时间
###############check the license
略去不看
###############initalize variables
1.若下列变量"RANLIB STRIP OBJDUMP LD CC CXX CFLAGS CXXFLAGS LDFLAGS存在,将变量以QMAKE_CFLAGS=$CFLAGS形式写入$QMAKE_VARS_FILE2.将 styles += cde mac motif plastique cleanlooks windows
decorations += default windows styled
mouse-drivers += pc
kbd-drivers += tty 写入$QMAKE_VARS_FILE
3.如$UNAME_SYSTEM值为Linux,将gfx-drivers += linuxfb,mouse-drivers += linuxtp写入$QMAKE_VARS_FILE
4.如configure传入-developer-build/-nokia-developer参数,将kbd-drivers += um写入$QMAKE_VARS_FILE
5.unset QTDIR
6.变量初始化
MIN_DBUS_1_VERSION=0.93
CFG_CONFIGURE_EXIT_ON_ERROR=yes
CFG_PROFILE=no
CFG_EXCEPTIONS=unspecified
CFG_GUI=auto # (yes|no|auto)
CFG_SCRIPT=auto # (yes|no|auto)
CFG_SCRIPTTOOLS=auto # (yes|no|auto)
CFG_XMLPATTERNS=auto # (yes|no|auto)
CFG_INCREMENTAL=auto
CFG_QCONFIG=full
CFG_DEBUG=auto
CFG_MYSQL_CONFIG=
CFG_DEBUG_RELEASE=no
CFG_SHARED=yes
CFG_SM=auto
CFG_XSHAPE=auto
CFG_XSYNC=auto
CFG_XVIDEO=auto
CFG_XINERAMA=runtime
CFG_XFIXES=runtime
CFG_ZLIB=auto
CFG_SYMBIAN_DEFFILES=auto
CFG_S60=auto
CFG_SQLITE=qt
CFG_GIF=auto
CFG_TIFF=auto
CFG_LIBTIFF=auto
CFG_PNG=yes
CFG_LIBPNG=auto
CFG_JPEG=auto
CFG_LIBJPEG=auto
CFG_MNG=auto
CFG_LIBMNG=auto
CFG_XCURSOR=runtime
CFG_XRANDR=runtime
CFG_XRENDER=auto
CFG_MITSHM=auto
CFG_OPENGL=auto
CFG_OPENVG=auto
CFG_OPENVG_LC_INCLUDES=no
CFG_OPENVG_SHIVA=auto
CFG_OPENVG_ON_OPENGL=auto
CFG_EGL=no
CFG_EGL_GLES_INCLUDES=no
CFG_SSE=auto
CFG_FONTCONFIG=auto
CFG_QWS_FREETYPE=auto
CFG_LIBFREETYPE=auto
CFG_SQL_AVAILABLE=
QT_DEFAULT_BUILD_PARTS="libs tools examples demos docs translations"
CFG_BUILD_PARTS=""
CFG_NOBUILD_PARTS=""
CFG_RELEASE_QMAKE=no
CFG_PHONON=auto
CFG_PHONON_BACKEND=yes
CFG_MULTIMEDIA=auto
CFG_AUDIO_BACKEND=auto
CFG_SVG=auto
CFG_DECLARATIVE=auto
CFG_DECLARATIVE_DEBUG=yes
CFG_WEBKIT=auto # (yes|no|auto|debug)
CFG_JAVASCRIPTCORE_JIT=auto
CFG_STACK_PROTECTOR_STRONG=auto
CFG_GFX_AVAILABLE="linuxfb transformed qvfb vnc multiscreen directfb"
CFG_GFX_ON="linuxfb multiscreen"
CFG_GFX_PLUGIN_AVAILABLE=
CFG_GFX_PLUGIN=
CFG_GFX_OFF=
CFG_KBD_AVAILABLE="tty linuxinput qvfb"
CFG_KBD_ON="tty" #default, see QMakeVar above
CFG_MOUSE_AVAILABLE="pc linuxtp linuxinput tslib qvfb"
CFG_MOUSE_ON="pc linuxtp" #default, see QMakeVar above
if [ -f "$relpath/src/gui/embedded/qscreenqnx_qws.cpp" ]; then
CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} qnx"
CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} qnx"
CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} qnx"
fi
if [ -f "$relpath/src/gui/embedded/qscreenintegrityfb_qws.cpp" ]; then
CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} integrity"
CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} integrity"
CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} integrityfb"
fi
if [ -f "$relpath/src/gui/embedded/qscreenvxworksfb_qws.cpp" ]; then
CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} vxworks"
CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} vxworks"
CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} vxworksfb"
fi
CFG_ARCH=
CFG_HOST_ARCH=
CFG_KBD_PLUGIN_AVAILABLE=
CFG_KBD_PLUGIN=
CFG_KBD_OFF=
CFG_MOUSE_PLUGIN_AVAILABLE=
CFG_MOUSE_PLUGIN=
CFG_MOUSE_OFF=
CFG_USE_GNUMAKE=no
CFG_IM=yes
CFG_DECORATION_AVAILABLE="styled windows default"
CFG_DECORATION_ON="${CFG_DECORATION_AVAILABLE}" # all on by default
CFG_DECORATION_PLUGIN_AVAILABLE=
CFG_DECORATION_PLUGIN=
CFG_XINPUT=runtime
CFG_XKB=auto
CFG_NIS=auto
CFG_CUPS=auto
CFG_ICONV=auto
CFG_DBUS=auto
CFG_GLIB=auto
CFG_GSTREAMER=auto
CFG_QGTKSTYLE=auto
CFG_QS60STYLE=auto
CFG_LARGEFILE=auto
CFG_OPENSSL=auto
CFG_PTMALLOC=no
CFG_STL=auto
CFG_PRECOMPILE=auto
CFG_SEPARATE_DEBUG_INFO=no
CFG_SEPARATE_DEBUG_INFO_NOCOPY=no
CFG_REDUCE_EXPORTS=auto
CFG_MMX=auto
CFG_3DNOW=auto
CFG_SSE=auto
CFG_SSE2=auto
CFG_SSE3=auto
CFG_SSSE3=auto
CFG_SSE4_1=auto
CFG_SSE4_2=auto
CFG_AVX=auto
CFG_REDUCE_RELOCATIONS=no
CFG_IPV6=auto
CFG_NAS=no
CFG_QWS_DEPTHS=all
CFG_USER_BUILD_KEY=
CFG_ACCESSIBILITY=auto
CFG_QT3SUPPORT=yes
CFG_ENDIAN=auto
CFG_HOST_ENDIAN=auto
CFG_DOUBLEFORMAT=auto
CFG_ARMFPA=auto
CFG_IWMMXT=no
CFG_NEON=auto
CFG_CLOCK_GETTIME=auto
CFG_CLOCK_MONOTONIC=auto
CFG_MREMAP=auto
CFG_GETADDRINFO=auto
CFG_IPV6IFNAME=auto
CFG_GETIFADDRS=auto
CFG_INOTIFY=auto
CFG_RPATH=yes
CFG_FRAMEWORK=auto
CFG_MAC_ARCHS=
MAC_CONFIG_TEST_COMMANDLINE= # used to make the configure tests run with the correct arch's and SDK settings
CFG_MAC_DWARF2=auto
CFG_MAC_XARCH=auto
CFG_MAC_CARBON=no
CFG_MAC_COCOA=yes
COMMANDLINE_MAC_CARBON=no
CFG_MAC_HARFBUZZ=no
CFG_SXE=no
CFG_PREFIX_INSTALL=yes
CFG_SDK=
D_FLAGS=
I_FLAGS=
L_FLAGS=
RPATH_FLAGS=
l_FLAGS=
QCONFIG_FLAGS=
XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce"
XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*)
XPLATFORM_INTEGRITY=no # Whether target platform is INTEGRITY (*integrity*)
XPLATFORM_SYMBIAN=no # Whether target platform is SYMBIAN (*symbian*)
XPLATFORM_SYMBIAN_SBSV2=no # Whether target platform is SYMBIAN_SBSV2 (symbian-sbsv2)
XPLATFORM_QNX=no
PLATFORM=$QMAKESPEC
QT_CROSS_COMPILE=no
OPT_CONFIRM_LICENSE=no
OPT_SHADOW=maybe
OPT_FAST=auto
OPT_VERBOSE=no
OPT_HELP=
CFG_SILENT=no
CFG_GRAPHICS_SYSTEM=default
CFG_RUNTIME_SYSTEM=
CFG_ALSA=auto
CFG_PULSEAUDIO=auto
CFG_COREWLAN=auto
CFG_ICD=auto
CFG_NOPROCESS=no
CFG_ICU=auto
CFG_SYSTEM_PROXIES=no
CFG_SLOG2=auto
# initalize variables used for installation
QT_INSTALL_PREFIX=
QT_INSTALL_DOCS=
QT_INSTALL_HEADERS=
QT_INSTALL_LIBS=
QT_INSTALL_BINS=
QT_INSTALL_PLUGINS=
QT_INSTALL_IMPORTS=
QT_INSTALL_DATA=
QT_INSTALL_TRANSLATIONS=
QT_INSTALL_SETTINGS=
QT_INSTALL_EXAMPLES=
QT_INSTALL_DEMOS=
QT_HOST_PREFIX=
#flags for SQL drivers
QT_CFLAGS_PSQL=
QT_LFLAGS_PSQL=
QT_CFLAGS_MYSQL=
QT_LFLAGS_MYSQL=
QT_LFLAGS_MYSQL_R=
QT_CFLAGS_SQLITE=
QT_LFLAGS_SQLITE=
QT_LFLAGS_ODBC="-lodbc"
QT_LFLAGS_TDS=
# flags for libdbus-1
QT_CFLAGS_DBUS=
QT_LIBS_DBUS=
# flags for Glib (X11 only)
QT_CFLAGS_GLIB=
QT_LIBS_GLIB=
# flags for GStreamer (X11 only)
QT_CFLAGS_GSTREAMER=
QT_LIBS_GSTREAMER=
# default qpa platform
QT_QPA_DEFAULT_PLATFORM=
#flag for Symbian fpu settings
QT_CFLAGS_FPU=
# flags for libconnsettings0 (used for Maemo ICD bearer management plugin)
QT_CFLAGS_CONNSETTINGS=
QT_LIBS_CONNSETTINGS=
#-------------------------------------------------------------------------------
# check SQL drivers, mouse drivers and decorations available in this package
#-------------------------------------------------------------------------------
1.在src/plugins/sqldrivers/目录下,对每个文件夹名$a,CFG_SQL_AVAILABE += $a,CFG_SQL_$a=auto
2.在src/plugins/decorations目录下,对每个文件夹名$a,CFG_DECORATION_PLUGIN_AVAILABLE += $a
3.在src/plugins/kbddrivers目录下,对每个文件夹名$a,CFG_KBD_PLUGIN_AVAILABLE += $a
4.在src/plugins/mousedrivers目录下,对每个文件夹名$a,CFG_MOUSE_PLUGIN_AVAILABLE += $a
5.在src/plugins/gfxdrivers目录下,对每个文件夹名$a,CFG_GFX_PLUGIN_AVAILABLE += $a,CFG_GFX_OFF=$CFG_GFX_AVAILABLE
6.在src/plugins/imageformats目录下,对每个文件夹名$a,CFG_IMAGEFORMAT_PLUGIN_AVAILABLE += $a
#-------------------------------------------------------------------------------
# Set Default NaCl options
#-------------------------------------------------------------------------------
if [ "$CFG_EMBEDDED" = "nacl" ] 执行的代码,略去不看
#-------------------------------------------------------------------------------
# parse command line arguments
#-------------------------------------------------------------------------------
对参数进行解析
根据$CFG_QCONFIG值minimal/small/medium/large/full,QT_CONFIG += $CFG_QCONFIG(将所有小于该值的选项加入)-config
#-------------------------------------------------------------------------------
# build tree initialization
#-------------------------------------------------------------------------------
确定AWK=gawk/nawk/awk(优先级降序),确定PERL=perl的位置
# is this a shadow build?
# detect build style
# symlink fonts to be able to run application from build directory
# find a make command
#-------------------------------------------------------------------------------
# auto-detect all that hasn't been specified in the arguments
#-------------------------------------------------------------------------------
部分未指定的参数,根据当前平台自动检测设置
#-------------------------------------------------------------------------------
# determine the system architecture
#-------------------------------------------------------------------------------
与交叉编译有关
#-------------------------------------------------------------------------------
# tests that don't need qmake (must be run before displaying help)
#-------------------------------------------------------------------------------
与交叉编译有关
#-------------------------------------------------------------------------------
# post process QT_INSTALL_* variables
#-------------------------------------------------------------------------------
#prefix #docs #headers #libs #bins #plugins #imports #data #translations
#settings #examples #demos
#-------------------------------------------------------------------------------
# help - interactive parts of the script _after_ this section please
#-------------------------------------------------------------------------------
# next, emit a usage message if something failed.
help回应
# -----------------------------------------------------------------------------
# LICENSING, INTERACTIVE PART
# -----------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# generate qconfig.cpp
#-------------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# build qmake
# -----------------------------------------------------------------------------
# symlink includes
# build qmake
#-------------------------------------------------------------------------------
# write out device config before we run the test.
#-------------------------------------------------------------------------------
PKG_CONFIG thing
#-------------------------------------------------------------------------------
# tests that need qmake
#-------------------------------------------------------------------------------
测试并决定安装部件列表
#-------------------------------------------------------------------------------
# ask for all that hasn't been auto-detected or specified in the arguments
#-------------------------------------------------------------------------------
询问用户相关安装选项
#-------------------------------------------------------------------------------
# generate QT_BUILD_KEY
#-------------------------------------------------------------------------------
编译器版本检测
#-------------------------------------------------------------------------------
# part of configuration information goes into qconfig.h
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# save configuration into qconfig.pri
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# save configuration into .qmake.cache
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# give feedback on configuration
#-------------------------------------------------------------------------------
列出编译器信息/安装部件目录
#-------------------------------------------------------------------------------
# build makefiles based on the configuration
#-------------------------------------------------------------------------------
正式干活,生成Makefile
#-------------------------------------------------------------------------------
# check for platforms that we don't yet know about
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# check if the user passed the -no-zlib option, which is no longer supported
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# finally save the executed command to another script
#-------------------------------------------------------------------------------
部分变量:
relconf=获得脚本名 configure
relpath=获得脚本目录 /home/troublemakers/下载/qt-everywhere-opensource-src-4.8.6
outpath=设置生成目录 /home/troublemakers/下载/qt-everywhere-opensource-src-4.8.6
OPT_CMDLINE=命令参数列表,去掉-v
QMAKE_SWITCHES=
QMAKE_VARS=
QMAKE_CONFIG=
QTCONFIG_CONFIG=
QT_CONFIG=
SUPPORTED=
QMAKE_VARS_FILE= 新建或清空.qmake.vars
DEVICE_VARS_FILE= 新建或清空.device.vars
$QT_LICENSE_FILE 变量值为LICENSE文件,如变量值不存在,默认$HOME下.qt-license文件。如果存在普通文件LICENSE,将文件转存为Linux下格式(去掉\r)的新文件LICENSE.tmp
部分函数:
shellEscape() //将命令参数中的空格转义
QMakeVar() //$2 $eq $3存入QMAKE_VARS_FILE,第一个参数若是set/add/del,eq为=/+=/-=,否则eq为空
getQMakeConf1() //echo $1文件,在将$1中所有include展开后
getQMakeConf2() //
getQMakeConf3() //
===========================================================================
未解:getQMakeConf2()函数中为何首先声明 values["LITERAL_WHITESPACE"] = " " 和 values["LITERAL_DOLLAR"] = "$"