qt5base-lts/configure.bat
Alexandru Croitor 126c5c501a CMake: Disable building Qt with qmake
Print an error message when configure is passed the -qmake option.
The only supported way to build Qt now is with CMake.

This means the CMakeLists.txt files are the source of truth now, and
pro2cmake will not have to be used anymore.
The .pro files can be removed at a later time.

The same is true for configure.cmake files. They are the authoritative
source, and the configure.json files will be removed at a later time.

Task-number: QTBUG-88741
Change-Id: Ia9de4c1411978b40b13e9b982977e7818164c984
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-12-10 15:25:37 +01:00

331 lines
8.5 KiB
Batchfile

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: Copyright (C) 2016 The Qt Company Ltd.
:: Copyright (C) 2016 Intel Corporation.
:: Contact: https://www.qt.io/licensing/
::
:: This file is part of the tools applications of the Qt Toolkit.
::
:: $QT_BEGIN_LICENSE:GPL-EXCEPT$
:: Commercial License Usage
:: Licensees holding valid commercial Qt licenses may use this file in
:: accordance with the commercial license agreement provided with the
:: Software or, alternatively, in accordance with the terms contained in
:: a written agreement between you and The Qt Company. For licensing terms
:: and conditions see https://www.qt.io/terms-conditions. For further
:: information use the contact form at https://www.qt.io/contact-us.
::
:: GNU General Public License Usage
:: Alternatively, this file may be used under the terms of the GNU
:: General Public License version 3 as published by the Free Software
:: Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
:: included in the packaging of this file. Please review the following
:: information to ensure the GNU General Public License requirements will
:: be met: https://www.gnu.org/licenses/gpl-3.0.html.
::
:: $QT_END_LICENSE$
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set ARGS=%*
set QTSRC=%~dp0
set QTSRC=%QTSRC:~0,-1%
set QTDIR=%CD%
rem Make sure qmake is not confused by these. Recursion via Makefiles would
rem be still affected, so just unsetting them here is not an option.
if not "%QMAKESPEC%" == "" goto envfail
if not "%XQMAKESPEC%" == "" goto envfail
if not "%QMAKEPATH%" == "" goto envfail
if not "%QMAKEFEATURES%" == "" goto envfail
goto envok
:envfail
echo >&2 Please make sure to unset the QMAKESPEC, XQMAKESPEC, QMAKEPATH,
echo >&2 and QMAKEFEATURES environment variables prior to building Qt.
exit /b 1
:envok
rem Parse command line
set TOPLEVEL=false
set TOPQTSRC=%QTSRC%
set TOPQTDIR=%QTDIR%
if /i not "%~1" == "-top-level" goto notoplevel
set ARGS=%ARGS:~10%
set TOPLEVEL=true
for %%P in ("%TOPQTSRC%") do set TOPQTSRC=%%~dpP
set TOPQTSRC=%TOPQTSRC:~0,-1%
for %%P in ("%QTDIR%") do set TOPQTDIR=%%~dpP
set TOPQTDIR=%TOPQTDIR:~0,-1%
goto wastoplevel
:notoplevel
if not exist ..\.qmake.super goto wastoplevel
echo ERROR: You cannot configure qtbase separately within a top-level build. >&2
exit /b 1
:wastoplevel
set SYNCQT=
set PLATFORM=
set MAKE=
set CMAKE=true
call :doargs %ARGS%
if errorlevel 1 exit /b
goto doneargs
:doargs
if "%~1" == "" exit /b
if "%~1" == "/?" goto help
if "%~1" == "-?" goto help
if /i "%~1" == "/h" goto help
if /i "%~1" == "-h" goto help
if /i "%~1" == "/help" goto help
if /i "%~1" == "-help" goto help
if /i "%~1" == "--help" goto help
if /i "%~1" == "-redo" goto redo
if /i "%~1" == "--redo" goto redo
if /i "%~1" == "-platform" goto platform
if /i "%~1" == "--platform" goto platform
if /i "%~1" == "-no-syncqt" goto nosyncqt
if /i "%~1" == "--no-syncqt" goto nosyncqt
if /i "%~1" == "-make-tool" goto maketool
if /i "%~1" == "--make-tool" goto maketool
if /i "%~1" == "-cmake" goto cmake
if /i "%~1" == "--cmake" goto cmake
if /i "%~1" == "-qmake" goto qmake
if /i "%~1" == "--qmake" goto qmake
:nextarg
shift
goto doargs
:help
type %QTSRC%\config_help.txt
if %TOPLEVEL% == false exit /b 1
for /d %%p in ("%TOPQTSRC%"\qt*) do (
if not "%%p" == "%QTSRC%" (
if exist "%%p\config_help.txt" (
echo.
type "%%p\config_help.txt"
)
)
)
exit /b 1
:redo
if not exist "%TOPQTDIR%\config.opt" goto redoerr
set rargs=
for /f "usebackq delims=" %%i in ("%TOPQTDIR%\config.opt") do set rargs=!rargs! "%%i"
call :doargs %rargs%
goto nextarg
:redoerr
echo No config.opt present - cannot redo configuration. >&2
exit /b 1
:platform
shift
set PLATFORM=%~1
if "%PLATFORM:~0,10%" == "win32-msvc" goto msvc
goto nextarg
:msvc
echo. >&2
echo Notice: re-mapping requested qmake spec to unified 'win32-msvc'. >&2
echo. >&2
set PLATFORM=win32-msvc
goto nextarg
:nosyncqt
set SYNCQT=false
goto nextarg
:maketool
shift
set MAKE=%~1
goto nextarg
:cmake
set CMAKE=true
goto nextarg
:qmake
set CMAKE=false
goto nextarg
:doneargs
if "%CMAKE%" == "true" goto cmake
echo ERROR: You cannot configure Qt 6 with qmake anymore. Please configure with -cmake instead. >&2
exit /b 1
rem Find various executables
for %%C in (clang-cl.exe clang.exe cl.exe icl.exe g++.exe perl.exe jom.exe) do set %%C=%%~$PATH:C
rem Determine host spec
if "%PLATFORM%" == "" (
if not "%icl.exe%" == "" (
set PLATFORM=win32-icc
) else if not "%cl.exe%" == "" (
set PLATFORM=win32-msvc
) else if not "%clang-cl.exe%" == "" (
set PLATFORM=win32-clang-msvc
) else if not "%clang.exe%" == "" (
set PLATFORM=win32-clang-g++
) else if not "%g++.exe%" == "" (
set PLATFORM=win32-g++
) else (
echo Cannot detect host toolchain. Please use -platform. Aborting. >&2
exit /b 1
)
)
if not exist "%QTSRC%\mkspecs\%PLATFORM%\qmake.conf" (
echo Host platform '%PLATFORM%' is invalid. Aborting. >&2
exit /b 1
)
if "%PLATFORM:g++=%" == "%PLATFORM%" (
if "%MAKE%" == "" (
if not "%jom.exe%" == "" (
set MAKE=jom
) else (
set MAKE=nmake
)
)
set tmpl=win32
) else (
if "%MAKE%" == "" (
set MAKE=mingw32-make
)
set tmpl=unix
)
rem Prepare build dir
if not exist mkspecs (
md mkspecs
if errorlevel 1 exit /b
)
if not exist bin (
md bin
if errorlevel 1 exit /b
)
if not exist qmake (
md qmake
if errorlevel 1 exit /b
)
rem Extract Qt's version from .qmake.conf
for /f "eol=# tokens=1,2,3,4 delims=.= " %%i in (%QTSRC%\.qmake.conf) do (
if %%i == MODULE_VERSION (
set QTVERMAJ=%%j
set QTVERMIN=%%k
set QTVERPAT=%%l
)
)
set QTVERSION=%QTVERMAJ%.%QTVERMIN%.%QTVERPAT%
rem Create forwarding headers
if "%SYNCQT%" == "" (
if exist "%QTSRC%\.git" (
set SYNCQT=true
) else (
set SYNCQT=false
)
)
if "%SYNCQT%" == "true" (
if not "%perl.exe%" == "" (
echo Running syncqt ...
"%perl.exe%" -w "%QTSRC%\bin\syncqt.pl" -minimal -version %QTVERSION% -module QtCore -outdir "%QTDIR%" %QTSRC%
if errorlevel 1 exit /b
) else (
echo Perl not found in PATH. Aborting. >&2
exit /b 1
)
)
rem Build qmake
echo Bootstrapping qmake ...
cd qmake
if errorlevel 1 exit /b
echo #### Generated by configure.bat - DO NOT EDIT! ####> Makefile
echo/>> Makefile
echo BUILD_PATH = ..>> Makefile
if "%tmpl%" == "win32" (
echo SOURCE_PATH = %QTSRC%>> Makefile
) else (
echo SOURCE_PATH = %QTSRC:\=/%>> Makefile
)
if exist "%QTSRC%\.git" (
echo INC_PATH = ../include>> Makefile
) else (
echo INC_PATH = $^(SOURCE_PATH^)/include>> Makefile
)
echo QT_VERSION = %QTVERSION%>> Makefile
rem These must have trailing spaces to avoid misinterpretation as 5>>, etc.
echo QT_MAJOR_VERSION = %QTVERMAJ% >> Makefile
echo QT_MINOR_VERSION = %QTVERMIN% >> Makefile
echo QT_PATCH_VERSION = %QTVERPAT% >> Makefile
if "%tmpl%" == "win32" (
echo QMAKESPEC = %PLATFORM%>> Makefile
) else (
echo QMAKESPEC = $^(SOURCE_PATH^)/mkspecs/%PLATFORM%>> Makefile
echo CONFIG_CXXFLAGS = -std=c++17 -ffunction-sections>> Makefile
echo CONFIG_LFLAGS = -Wl,--gc-sections>> Makefile
type "%QTSRC%\qmake\Makefile.unix.win32" >> Makefile
type "%QTSRC%\qmake\Makefile.unix.mingw" >> Makefile
)
echo/>> Makefile
type "%QTSRC%\qmake\Makefile.%tmpl%" >> Makefile
%MAKE%
if errorlevel 1 (cd .. & exit /b 1)
cd ..
rem Generate qt.conf
> "%QTDIR%\bin\qt.conf" (
@echo [EffectivePaths]
@echo Prefix=..
@echo [Paths]
@echo TargetSpec=dummy
@echo HostSpec=%PLATFORM%
)
if not "%QTDIR%" == "%QTSRC%" (
>> "%QTDIR%\bin\qt.conf" (
@echo [EffectiveSourcePaths]
@echo Prefix=%QTSRC:\=/%
)
)
rem Launch qmake-based configure
cd "%TOPQTDIR%"
"%QTDIR%\bin\qmake.exe" "%TOPQTSRC%" -- %ARGS%
goto :eof
:cmake
cd "%TOPQTDIR%"
rem Write config.opt if we're not currently -redo'ing
if "%rargs%" == "" (
cmake -DOUT_FILE=config.opt -DIGNORE_ARGS=-top-level -P "%QTSRC%\cmake\QtWriteArgsFile.cmake" %*
)
rem Launch CMake-based configure
set TOP_LEVEL_ARG=
if %TOPLEVEL% == true set TOP_LEVEL_ARG=-DTOP_LEVEL=TRUE
cmake -DOPTFILE=config.opt %TOP_LEVEL_ARG% -P "%QTSRC%\cmake\QtProcessConfigureArgs.cmake"