126c5c501a
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>
331 lines
8.5 KiB
Batchfile
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"
|