On Wed, Aug 20, 2014 at 10:07 AM, Michał Górny <mgo...@gentoo.org> wrote:
> Dnia 2014-08-17, o godz. 20:38:18
> Davide Pesavento <p...@gentoo.org> napisał(a):
>
>> # @FUNCTION: qt5-build_src_unpack
>> # @DESCRIPTION:
>> # Unpacks the sources.
>> qt5-build_src_unpack() {
>>       if [[ $(gcc-major-version) -lt 4 ]] || [[ $(gcc-major-version) -eq 4 
>> && $(gcc-minor-version) -lt 5 ]]; then
>>               ewarn
>>               ewarn "Using a GCC version lower than 4.5 is not supported."
>>               ewarn
>>       fi
>>
>>       if [[ ${PN} == qtwebkit ]]; then
>>               eshopts_push -s extglob
>>               if is-flagq '-g?(gdb)?([1-9])'; then
>
> Wouldn't that be equivalent to '-g[^0]'? And I think this would
> actually work without extglob.

That doesn't match '-g' though, does it?

>
>>                       ewarn
>>                       ewarn "You have enabled debug info (probably have -g 
>> or -ggdb in your CFLAGS/CXXFLAGS)."
>>                       ewarn "You may experience really long compilation 
>> times and/or increased memory usage."
>>                       ewarn "If compilation fails, please try removing 
>> -g/-ggdb before reporting a bug."
>>                       ewarn "For more info check out 
>> https://bugs.gentoo.org/307861";
>>                       ewarn
>>               fi
>>               eshopts_pop
>>       fi
>>
>>       case ${QT5_BUILD_TYPE} in
>>               live)    git-r3_src_unpack ;;
>>               release) default ;;
>>       esac
>> }
>>
>> # @FUNCTION: qt5-build_src_prepare
>> # @DESCRIPTION:
>> # Prepares the sources before the configure phase.
>> qt5-build_src_prepare() {
>>       qt5_prepare_env
>>
>>       if [[ ${QT5_MODULE} == qtbase ]]; then
>>               # Avoid unnecessary qmake recompilations
>>               sed -i -re "s|^if true;.*(\[ 
>> '\!').*(\"\\\$outpath/bin/qmake\".*)|if \1 -e \2 then|" \
>>                       configure || die "sed failed (skip qmake bootstrap)"
>
> Any chance for something more readable? :) Like a inline patch.

I think it's a fairly straightforward substitution, not pretty maybe
but... heh ;) Also, it's not something that you have to look at all
the time since the configure line doesn't change often, and the intent
is clear from the comment, so I'm not going to change it.

>
>>               # Respect CC, CXX, *FLAGS, MAKEOPTS and EXTRA_EMAKE when 
>> bootstrapping qmake
>>               sed -i -e "/outpath\/qmake\".*\"\$MAKE\")/ s:): \
>>                       ${MAKEOPTS} ${EXTRA_EMAKE} 'CC=$(tc-getCC)' 
>> 'CXX=$(tc-getCXX)' \
>>                       'QMAKE_CFLAGS=${CFLAGS}' 'QMAKE_CXXFLAGS=${CXXFLAGS}' 
>> 'QMAKE_LFLAGS=${LDFLAGS}'&:" \
>>                       -e '/"$CFG_RELEASE_QMAKE"/,/^\s\+fi$/ d' \
>>                       configure || die "sed failed (respect env for qmake 
>> build)"
>
> Ditto ;).

ditto ;)

>
>>               sed -i -e '/^CPPFLAGS\s*=/ s/-g //' \
>>                       qmake/Makefile.unix || die "sed failed (CPPFLAGS for 
>> qmake build)"
>>
>>               # Respect CXX in {bsymbolic_functions,fvisibility,precomp}.test
>>               sed -i -e "/^QMAKE_CONF_COMPILER=/ s:=.*:=\"$(tc-getCXX)\":" \
>>                       configure || die "sed failed (QMAKE_CONF_COMPILER)"
>>
>>               # Respect toolchain and flags in config.tests
>>               find config.tests/unix -name '*.test' -type f -print0 \
>>                       | xargs -0 sed -i -e '/bin\/qmake/ s/-nocache //' \
>>                       || die "sed failed (config.tests)"
>
> find ... -exec sed ... {} +
>
>>       fi
>>
>>       if [[ ${PN} != qtcore ]]; then
>>               qt5_symlink_tools_to_build_dir
>>       fi
>>
>>       # apply patches
>>       [[ ${PATCHES[@]} ]] && epatch "${PATCHES[@]}"
>>       epatch_user
>> }
>
> [...]
>
>> # @FUNCTION: qt5-build_src_install
>> # @DESCRIPTION:
>> # Performs the actual installation of target directories.
>> qt5-build_src_install() {
>>       qt5_foreach_target_subdir emake INSTALL_ROOT="${D}" install
>>
>>       if [[ ${PN} == qtcore ]]; then
>>               pushd "${QT5_BUILD_DIR}" >/dev/null || die
>>               einfo "Running emake INSTALL_ROOT=${D} 
>> install_{mkspecs,qmake,syncqt}"
>
> You can put that command-line in an array or set to argv.
>
>>               emake INSTALL_ROOT="${D}" install_{mkspecs,qmake,syncqt}
>>               popd >/dev/null || die
>>
>>               # install an empty Gentoo/gentoo-qconfig.h in ${D}
>>               # so that it's placed under package manager control
>>               > "${T}"/gentoo-qconfig.h
>>               (
>>                       insinto "${QT5_HEADERDIR#${EPREFIX}}"/Gentoo
>>                       doins "${T}"/gentoo-qconfig.h
>>               )
>>
>>               # include gentoo-qconfig.h at the beginning of QtCore/qconfig.h
>>               sed -i -e '1a#include <Gentoo/gentoo-qconfig.h>\n' \
>>                       "${D}${QT5_HEADERDIR}"/QtCore/qconfig.h \
>>                       || die "sed failed (qconfig.h)"
>>       fi
>>
>>       qt5_install_module_qconfigs
>>       prune_libtool_files
>> }
>
> [...]
>
>> # @FUNCTION: qt5_base_configure
>> # @INTERNAL
>> # @DESCRIPTION:
>> # Runs ./configure for modules belonging to qtbase.
>> qt5_base_configure() {
>>       # setup toolchain variables used by configure
>>       tc-export CC CXX RANLIB STRIP
>>       export LD="$(tc-getCXX)"
>>
>>       # configure arguments
>>       local conf=(
>>               # installation paths
>>               -prefix "${QT5_PREFIX}"
>>               -bindir "${QT5_BINDIR}"
>>               -headerdir "${QT5_HEADERDIR}"
>>               -libdir "${QT5_LIBDIR}"
>>               -archdatadir "${QT5_ARCHDATADIR}"
>>               -plugindir "${QT5_PLUGINDIR}"
>>               -libexecdir "${QT5_LIBEXECDIR}"
>>               -importdir "${QT5_IMPORTDIR}"
>>               -qmldir "${QT5_QMLDIR}"
>>               -datadir "${QT5_DATADIR}"
>>               -docdir "${QT5_DOCDIR}"
>>               -translationdir "${QT5_TRANSLATIONDIR}"
>>               -sysconfdir "${QT5_SYSCONFDIR}"
>>               -examplesdir "${QT5_EXAMPLESDIR}"
>>               -testsdir "${QT5_TESTSDIR}"
>>
>>               # debug/release
>>               $(use debug && echo -debug || echo -release)
>>               -no-separate-debug-info
>>
>>               # licensing stuff
>>               -opensource -confirm-license
>>
>>               # let configure automatically figure out if C++11 is supported
>>               #-c++11
>
> Doesn't switching C++11 support involve changing ABI? I suspect Qt may
> be actually free of that.

No, the ABI doesn't change. I asked upstream some time ago.

>
>>               # build shared libraries
>>               -shared
>>
>>               # always enable large file support
>>               -largefile
>>
>>               # disabling accessibility is not recommended by upstream, as
>>               # it will break QStyle and may break other internal parts of Qt
>>               -accessibility
>>
>>               # disable all SQL drivers by default, override in qtsql
>>               -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci 
>> -no-sql-odbc
>>               -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-tds
>>
>>               # obsolete flag, does nothing
>>               #-qml-debug
>>
>>               # use pkg-config to detect include and library paths
>>               -pkg-config
>>
>>               # prefer system libraries (only common deps here)
>>               -system-zlib
>>               -system-pcre
>>
>>               # don't specify -no-gif because there is no way to override it 
>> later
>>               #-no-gif
>>
>>               # disable everything to prevent automagic deps (part 1)
>>               -no-mtdev
>>               -no-journald
>>               -no-libpng -no-libjpeg
>>               -no-freetype -no-harfbuzz
>>               -no-openssl
>>               -no-xinput2 -no-xcb-xlib
>>
>>               # always enable glib event loop support
>>               -glib
>>
>>               # disable everything to prevent automagic deps (part 2)
>>               -no-pulseaudio -no-alsa
>>
>>               # disable gtkstyle because it adds qt4 include paths to the 
>> compiler
>>               # command line if x11-libs/cairo is built with USE=qt4 (bug 
>> 433826)
>>               -no-gtkstyle
>>
>>               # exclude examples and tests from default build
>>               -nomake examples
>>               -nomake tests
>>               -no-compile-examples
>>
>>               # disable rpath on non-prefix (bugs 380415 and 417169)
>>               $(use prefix || echo -no-rpath)
>>
>>               # print verbose information about each configure test
>>               -verbose
>>
>>               # doesn't actually matter since we override CXXFLAGS
>>               #-no-optimized-qmake
>>
>>               # obsolete flag, does nothing
>>               #-nis
>>
>>               # always enable iconv support
>>               -iconv
>>
>>               # disable everything to prevent automagic deps (part 3)
>>               -no-cups -no-evdev -no-icu -no-fontconfig -no-dbus
>>
>>               # don't strip
>>               -no-strip
>>
>>               # precompiled headers are not that useful for us
>>               # and cause problems on hardened, so turn them off
>>               -no-pch
>>
>>               # reduced relocations cause major breakage on at least arm and 
>> ppc, so we
>>               # don't specify anything and let configure figure out if they 
>> are supported,
>>               # see also https://bugreports.qt-project.org/browse/QTBUG-36129
>>               #-reduce-relocations
>>
>>               # let configure automatically detect if GNU gold is available
>>               #-use-gold-linker
>>
>>               # disable all platform plugins by default, override in qtgui
>>               -no-xcb -no-eglfs -no-directfb -no-linuxfb -no-kms
>>
>>               # disable undocumented X11-related flags, override in qtgui
>>               # (not shown in ./configure -help output)
>>               -no-xkb -no-xrender
>>
>>               # disable obsolete/unused X11-related flags
>>               # (not shown in ./configure -help output)
>>               -no-mitshm -no-xcursor -no-xfixes -no-xinerama -no-xinput
>>               -no-xrandr -no-xshape -no-xsync -no-xvideo
>>
>>               # always enable session management support: it doesn't need 
>> extra deps
>>               # at configure time and turning it off is dangerous, see bug 
>> 518262
>>               -sm
>>
>>               # typedef qreal to double (warning: changing this flag breaks 
>> the ABI)
>>               -qreal double
>>
>>               # disable opengl and egl by default, override in qtgui and 
>> qtopengl
>>               -no-opengl -no-egl
>>
>>               # use upstream default
>>               #-no-system-proxies
>>
>>               # do not build with -Werror
>>               -no-warnings-are-errors
>>
>>               # module-specific options
>>               "${myconf[@]}"
>>       )
>>
>>       mkdir -p "${QT5_BUILD_DIR}" || die
>>       pushd "${QT5_BUILD_DIR}" >/dev/null || die
>>
>>       einfo "Configuring with: ${conf[@]}"
>>       "${S}"/configure "${conf[@]}" || die "configure failed"
>>
>>       popd >/dev/null || die
>> }
>
> --
> Best regards,
> Michał Górny

Reply via email to