diff --git a/.gitignore b/.gitignore index 0386e03..3a3134b 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,8 @@ pgadmin4.log /build /mac-build /src-build +/win-build /dist +runtime/Makefile.Debug +runtime/Makefile.Release +runtime/release/ diff --git a/Make.bat b/Make.bat new file mode 100644 index 0000000..075705e --- /dev/null +++ b/Make.bat @@ -0,0 +1,429 @@ +@ECHO off +SETLOCAL +REM +REM **************************************************************** +SET WD=%CD% +SET "PGBUILDPATH=%WD%\win-build" +SET CMDOPTION="" +IF "%1" == "clean" SET CMDOPTION="VALID" +IF "%1" == "x86" SET CMDOPTION="VALID" +IF "%1" == "amd64" SET CMDOPTION="VALID" + +IF NOT %CMDOPTION%=="VALID" ( GOTO USAGE ) +SET ARCHITECTURE=%1 + +IF "%ARCHITECTURE%"=="clean" ( + GOTO CLEAN_RELEASE + goto:exit +) + +REM Check os architecture x86 or amd64 +SET RegQry=HKLM\Hardware\Description\System\CentralProcessor\0 +REG.exe Query %RegQry% > checkOS.txt +Find /i "x86" < CheckOS.txt > StringCheck.txt +SET OSTYPE="" +IF %ERRORLEVEL% == 0 ( + SET OSTYPE=x86 +) else ( + SET OSTYPE=amd64 +) +DEL CheckOS.txt StringCheck.txt +SET OSVALUE="" +IF "%OSTYPE%"=="x86" ( + IF "%ARCHITECTURE%"=="amd64" ( + ECHO ARCHITECTURE - %ARCHITECTURE% cannot be run on 32 bit machine + goto:exit + ) + OSVALUE=%OSTYPE% +) + +REM Check IF its is windows 32 bit machine and selected architecture is x86 +IF %OSVALUE%=="x86" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\System32\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + goto SKIPARCVALIDATION +) + +REM Check IF its is windows 32 bit machine and selected architecture is x86 or amd64 +IF "%ARCHITECTURE%"=="x86" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files (x86)\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files (x86)\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC" +) + +IF "%ARCHITECTURE%"=="amd64" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27-x64" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\System32\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" +) + +:SKIPARCVALIDATION +REM SET the variables IF not availalbe in windows enviroment +SET VCVAR=%VCDIR%\vcvarsall.bat +SET VCNMAKE=%VCDIR%\bin\nmake.exe +SET QMAKE=%QTDIR%\bin\qmake.exe +SET VIRTUALENV=ve_python +SET TARGETINSTALLER=%WD%\dist + +FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_RELEASE=%%a +FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_REVISION_VERSION=%%a +FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_SUFFIX_VERSION=%%a +REM remove single quote from the string +SET APP_SUFFIX_VERSION=%APP_SUFFIX_VERSION:'=% +SET APP_NAME="" +FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a +SET INSTALLERNAME=%APP_NAME%-v%APP_RELEASE%.%APP_REVISION_VERSION%-%APP_SUFFIX_VERSION%-%ARCHITECTURE%.exe + +SET PGADMIN4_VERSION=v%APP_RELEASE% +SET PGADMIN4_APP_VERSION=%APP_RELEASE%.%APP_REVISION_VERSION% + +ECHO **************************************************************** +ECHO S U M M A R Y +ECHO **************************************************************** +ECHO Target mode = %ARCHITECTURE% +ECHO INNOTOOL = %INNOTOOL% +ECHO VCDIR = %VCDIR% +ECHO NMAKE = %VCNMAKE% +ECHO QTDIR = %QTDIR% +ECHO QMAKE = %QMAKE% +ECHO PYTHON_HOME = %PYTHON_HOME% +ECHO PYTHON_DLL = %PYTHON_DLL% +ECHO PGDIR = %PGDIR% +ECHO **************************************************************** + +REM Check IF path SET in enviroments really exist or not ? +IF NOT EXIST "%INNOTOOL%" GOTO err_handle_inno +IF NOT EXIST "%VCDIR%" GOTO err_handle_visualstudio +IF NOT EXIST "%VCVAR%" GOTO err_handle_visualstudio +IF NOT EXIST "%VCNMAKE%" GOTO err_handle_visualstudio +IF NOT EXIST "%QTDIR%" GOTO err_handle_qt +IF NOT EXIST "%QMAKE%" GOTO err_handle_qt +IF NOT EXIST "%PYTHON_HOME%" GOTO err_handle_python +IF NOT EXIST "%PYTHON_DLL%" GOTO err_handle_python +IF NOT EXIST "%PGDIR%" GOTO err_handle_pg + +REM Check for QT and VC dependences +FOR /L %%G IN (15,1,19) DO "%VCDIR%\bin\cl.exe" /? 2>&1 | findstr /C:"Version %%G" > nul && SET MSVC_MAJOR_VERSION=%%G && GOTO QT_MSVC + +:QT_MSVC +IF %MSVC_MAJOR_VERSION%==19 SET QT_MSVC_PATH=msvc2015 +IF %MSVC_MAJOR_VERSION%==18 SET QT_MSVC_PATH=msvc2013 +IF %MSVC_MAJOR_VERSION%==17 SET QT_MSVC_PATH=msvc2012 +IF %MSVC_MAJOR_VERSION%==16 SET QT_MSVC_PATH=msvc2010 +IF %MSVC_MAJOR_VERSION%==15 SET QT_MSVC_PATH=msvc2008 + +IF NOT EXIST "%QTDIR%\..\%QT_MSVC_PATH%" GOTO err_handle_qt_mismatch +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +REM get Python version ex. 2.7.1 will get as 27 +for /f "tokens=1 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print sys.version.split(' ')[0]"') DO SET PYTHON_MAJOR=%%G +for /f "tokens=2 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print sys.version.split(' ')[0]"') DO SET PYTHON_MINOR=%%G +SET "PYTHON_VERSION=%PYTHON_MAJOR%%PYTHON_MINOR%" + +IF NOT EXIST "%PYTHON_HOME%\Scripts\virtualenv.exe" GOTO err_handle_pythonvirtualenv + +SET REQUIRMENTTXT="" +IF "%PYTHON_MAJOR%"=="2" SET REQUIRMENTTXT=requirements_py2.txt +IF "%PYTHON_MAJOR%"=="3" SET REQUIRMENTTXT=requirements_py3.txt +IF %REQUIRMENTTXT% == "" GOTO err_handle_pythonversion +SET PATH=%PGDIR%;%PGDIR%\bin;%PATH% + +REM Main Functions +call :CLEAN_RELEASE + +call :CREATE_VIRTUAL_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_RUNTIME_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_PYTHON_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CLEANUP_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_INSTALLER +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% +CD %WD% +goto:EXIT + +:CLEAN_RELEASE + ECHO Calling Clean Release... + IF EXIST "%PGBUILDPATH%" rmdir /s /q "%PGBUILDPATH%" > nul + for /R "%WD%" %%f in (*.pyc) do DEL /q "%%f" > nul + IF EXIST "%WD%\pkg\win32\Output" rmdir /s /q "%WD%\pkg\win32\Output" > nul + DEL /q "%WD%\pkg\win32\installer.iss" > nul + CD %WD% +GOTO:EOF + +:CREATE_VIRTUAL_ENV + ECHO Creating Virtual Enviroment... + IF NOT EXIST "%PGBUILDPATH%" MKDIR "%PGBUILDPATH%" + + CD "%PGBUILDPATH%" + "%PYTHON_HOME%\Scripts\virtualenv.exe" "%VIRTUALENV%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + ECHO Activating Virtual Enviroment - %PGBUILDPATH%\%VIRTUALENV%\Scripts\activate... + CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\activate" + SET PATH=%PGDIR%\bin;%PATH% + + ECHO Installing dependencies... + pip install -r "%WD%\%REQUIRMENTTXT%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM This is required because windows only work with 2.6.1 version + pip install psycopg2 -U + ECHO Virtual Enviroment created successfully. + + ECHO Deactivating Virtual Enviroment - %PGBUILDPATH%\%VIRTUALENV%\Scripts\deactivate... + CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\deactivate" + + CD %WD% +GOTO:EOF + +:CREATE_RUNTIME_ENV + ECHO Compiling source code... + MKDIR "%PGBUILDPATH%\runtime" > nul + + REM --- Processing WEB --- + CD "%WD%" + CD web + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%WD%\web" "%PGBUILDPATH%\web" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + REM Clean up .pyc, pgadmin4.db, config_local.py + for /R "%PGBUILDPATH%\web" %%f in (*.pyc) do DEL /q "%%f" + DEL /s "%PGBUILDPATH%\web\pgadmin4.db" > nul + DEL /s "%PGBUILDPATH%\web\config_local.py" > nul + ECHO SERVER_MODE = False > "%PGBUILDPATH%\web\config_local.py" + ECHO HELP_PATH = '../../../docs/en_US/html/' >> "%PGBUILDPATH%\web\config_local.py" + ECHO MINIFY_HTML = False >> "%PGBUILDPATH%\web\config_local.py" + REM Compile doc folder + MKDIR "%PGBUILDPATH%\docs\en_US\html" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM compile docs - web + "%PGBUILDPATH%\%VIRTUALENV%\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%PGBUILDPATH%\docs\en_US\html" + + REM --- Processing RUNTIME --- + CD "%WD%" + CD runtime + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCVAR%" %ARCHITECTURE% + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO Calling - call "%VCVAR%" %ARCHITECTURE% + + call "%QMAKE%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCNMAKE%" clean + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCNMAKE%" + IF ERRORLEVEL 1 GOTO ERR_HANDLER + REM Copy binary to Release Folder + copy "%WD%\runtime\release\pgAdmin4.exe" "%PGBUILDPATH%\runtime" + IF ERRORLEVEL 1 GOTO ERR_HANDLER + + REM Copy QTP dependences + copy "%QTDIR%\bin\icudt54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\icuin54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\icuuc54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Core.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Sql.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Gui.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Qml.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5OpenGL.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Quick.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Sensors.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Widgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebKit.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Network.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Multimedia.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebChannel.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Positioning.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5PrintSupport.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebKitWidgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5MultimediaWidgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + MKDIR "%PGBUILDPATH%\runtime\platforms" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + copy "%QTDIR%\plugins\platforms\qwindows.dll" "%PGBUILDPATH%\runtime\platforms" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO [Paths] > "%PGBUILDPATH%\runtime\qt.conf" + ECHO Plugins=plugins >> "%PGBUILDPATH%\runtime\qt.conf" + ECHO Runtime source code built successfully. + + CD %WD% +GOTO:EOF + +:CREATE_PYTHON_ENV + copy %PYTHON_DLL% "%PGBUILDPATH%\runtime" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%PYTHON_HOME%\DLLs" "%PGBUILDPATH%\%VIRTUALENV%\DLLs" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%PYTHON_HOME%\Lib" "%PGBUILDPATH%\%VIRTUALENV%\Lib" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + CD %WD% +GOTO:EOF + +:CREATE_INSTALLER + ECHO Preparing for creation of windows installer... + IF NOT EXIST "%TARGETINSTALLER%" MKDIR "%TARGETINSTALLER%" + + copy "%WD%\pkg\win32\Resources\pgAdmin4.ico" "%PGBUILDPATH%"\ + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM search and replace string from config.py and copy to config_local.py + CD "%WD%" + CD pkg + CD win32 + + @ECHO off + SETlocal disableDelayedExpansion + SET InputFile=installer.iss.in + SET OutputFile=installer.iss + SET "_strFind=#define MyAppVersion "0.0"" + SET "_strInsert=#define MyAppVersion "%PGADMIN4_VERSION%"" + SET "_strFind1=#define MyAppFullVersion "0.0"" + SET "_strInsert1=#define MyAppFullVersion "%PGADMIN4_APP_VERSION%"" + SET "_strFind2=#define MyAppName "0.0"" + SET "_strInsert2=#define MyAppName "%APP_NAME%"" + SET "_strFind3=#define MyAppArchitecturesMode" + SET "_strInsert3=#define MyAppArchitecturesMode" + IF "%ARCHITECTURE%"=="amd64" SET "_strInsert3=#define MyAppArchitecturesMode="x64"" + + :Replace + >"%OutputFile%" ( + for /f "usebackq DELims=" %%A in ("%InputFile%") do ( + IF "%%A" equ "%_strFind%" (ECHO %_strInsert%) else ( + IF "%%A" equ "%_strFind1%" (ECHO %_strInsert1%) else ( + IF "%%A" equ "%_strFind2%" (ECHO %_strInsert2%) else ( + IF "%%A" equ "%_strFind3%" (ECHO %_strInsert3%) else (ECHO %%A)))) + ) + ) + REM IF "%ARCHITECTURE%" equ "amd64" (ECHO %_strInsert3% + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + CALL "%INNOTOOL%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO move "%WD%\pkg\win32\Output\SETup.exe" "%TARGETINSTALLER%\%INSTALLERNAME%" + MOVE "%WD%\pkg\win32\Output\SETup.exe" "%TARGETINSTALLER%\%INSTALLERNAME%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + ECHO "Location - %TARGETINSTALLER%\%INSTALLERNAME%" + ECHO Installer generated successfully. + GOTO CLEAN_RELEASE + CD %WD% +GOTO:EOF + +:CLEANUP_ENV + rd "%PGBUILDPATH%\%VIRTUALENV%\Include" /S /Q + rd "%PGBUILDPATH%\%VIRTUALENV%\Scripts" /S /Q + DEL /s "%PGBUILDPATH%\%VIRTUALENV%\pip-selfcheck.json" + + ECHO Cleaned up private environment successfully. + CD %WD% +GOTO:EOF + +:err_handle_inno + ECHO %INNOTOOL% does not exist + ECHO Please Install Innotool and SET INNOTOOL enviroment Variable. + ECHO SET "INNOTOOL=" +goto EXIT + +:err_handle_visualstudio + ECHO %VCDIR% does not exist, or + ECHO %VCVAR% does not exist, or + ECHO %VCNMAKE% does not exist. + ECHO Please Install Microsoft Visual studio and SET the VCDIR enviroment Variable. + ECHO SET "VCDIR%=" + ECHO SET "VCVAR%=" + ECHO SET "VCNMAKE%=" +goto EXIT + +:err_handle_python + ECHO %PYTHON_HOME% does not exist, or + ECHO PYTHON_VERSION is not SET, or + ECHO %PYTHON_DLL% does not exist. + ECHO Please install Python and SET the PYTHON_HOME enviroment Variable. + ECHO SET "PYTHON_VERSION=" + ECHO SET "PYTHON_HOME=" + ECHO SET "PYTHON_DLL=" +goto EXIT + +:err_handle_qt + ECHO %QTDIR% does not exist. + ECHO Please Install QT SDK and SET the QTDIR enviroment variable. + ECHO SET "QTDIR=" +goto EXIT + +:err_handle_qt_mismatch + ECHO %QTDIR%\..\%QT_MSVC_PATH%" does not match with your current Visual Studio, version %QT_MSVC_PATH% + ECHO Your current QT installation willraise a linking error with an MSVC version mismatch. + ECHO Please use a valid QT installation with a folder %QT_MSVC_PATH%. You can use the Qt Maintenance + ECHO Tool to add or remove compiler kits. +goto EXIT + +:err_handle_pg + ECHO %PGDIR% does not exist. + ECHO Please Install Postgres and SET enviroment Variable + ECHO SET "PGDIR=" +goto EXIT + +:err_handle_pythonversion + ECHO Python version supported Above 2.6, 2.xx and 3.xx only +goto EXIT + +:err_handle_pythonvirtualenv + ECHO Python virtualenv is missing @ location - %PYTHON_HOME%\Scripts\virtualenv.exe +goto EXIT + +:ERR_HANDLER + ECHO. + ECHO Aborting build! + CD %WD% + exit /B 1 +GOTO:EOF + +:USAGE + ECHO Invalid command line options.... + ECHO Usage: "Make.bat " + ECHO. + exit /B 1 +GOTO EXIT + +:EXIT + endlocal + exit /B 0 \ No newline at end of file diff --git a/pkg/win32/README.txt b/pkg/win32/README.txt new file mode 100644 index 0000000..fced29a --- /dev/null +++ b/pkg/win32/README.txt @@ -0,0 +1,82 @@ +pgAdmin 4 +========= + +Prerequisites +------------- + +To generate a pgAdmin 4 installer for Windows bit, the following packages +must be installed: + +1. Python installation + - Python 2.6 or above from https://www.python.org/ + +2. QT installation + - Qt 4.6 through 5.5 from http://www.qt.io/ + +3. PostgreSQL installation + - PostgreSQL 9.1 or above from http://www.postgresql.org/ + +4. Inno Setup Installer + - 5.0 and above from http://www.jrsoftware.org/isdl.php + +5. Microsoft visual studio (2008 and above) + +The following environment variables may be defined to override defaults in the +build script (Make.bat): + +INNOTOOL, VCDIR, PYTHON_HOME, PYTHON_DLL, QTDIR, PGDIR + +The default settings are equivalent to (for x86 on 32bit Windows): + +SET "PYTHON_HOME=C:\Python27" +SET "PYTHON_DLL=C:\Windows\System32\python27.dll" +SET "QTDIR=C:\Qt\5.5\msvc2013" +SET "PGDIR=C:\Program Files\PostgreSQL\9.5" +SET "INNOTOOL=C:\Program Files\Inno Setup 5" +SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + +Or for x86 on 64bit Windows: + +SET "PYTHON_HOME=C:\Python27" +SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll" +SET "QTDIR=C:\Qt\5.5\msvc2013" +SET "PGDIR=C:\Program Files (x86)\PostgreSQL\9.5" +SET "INNOTOOL=C:\Program Files (x86)\Inno Setup 5” +SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + +Or for x86_64: + +SET "PYTHON_HOME=C:\Python27-x64" +SET "PYTHON_DLL=C:\Windows\System32\python27.dll" +SET "QTDIR=C:\Qt\5.5\msvc2013_64" +SET "PGDIR=C:\Program Files\PostgreSQL\9.5" +SET "INNOTOOL=C:\Program Files\Inno Setup 5” +SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + +How to build +------------ +Now, run the top level batch script to build and generate the installer: + +> cd +> Make.bat x86|amd64|clean + +To build for Win32: + +> Make.bat x86 + +To build for Win64/x64: + +> Make.bat amd64 + +The script will create a python virtual environment and install all the required python modules +using pip, build the runtime code and finally create the installer in ./dist directory + +For example: + +on x86: pgAdmin 4-v1.0-beta1-x86.exe +on x86_64: pgAdmin 4-v1.0-beta1-x64.exe + +To cleanup all output, run the clean target: + +> Make.bat clean + diff --git a/pkg/win32/Resources/SplashScreen.bmp b/pkg/win32/Resources/SplashScreen.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c2407307ef3ba7d4093c7a0762cd94cbc84316cc GIT binary patch literal 196662 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 z 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 P38)fKC7?>+J(R$|!7~Vf literal 0 HcmV?d00001 diff --git a/pkg/win32/Resources/license.rtf b/pkg/win32/Resources/license.rtf new file mode 100644 index 0000000000000000000000000000000000000000..40555108fa0575040cd3d8bb06da301fea2dd2a6 --- /dev/null +++ b/pkg/win32/Resources/license.rtf @@ -0,0 +1,13 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057\deflangfe2057{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}} +{\*\generator Riched20 6.2.9200}\viewkind4\uc1 +\pard\f0\fs28\lang1033 pgAdmin 4\fs18\par +\b\par +Copyright (C) 2002 - 2016, The pgAdmin Development Team\b0\par + +\pard\qj Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.\par +\par +IN NO EVENT SHALL THE PGADMIN DEVELOPMENT TEAM BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE PGADMIN DEVELOPMENT TEAM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\par +THE PGADMIN DEVELOPMENT TEAM SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE PGADMIN DEVELOPMENT TEAM HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\par +} + \ No newline at end of file diff --git a/pkg/win32/Resources/pgAdmin4.ico b/pkg/win32/Resources/pgAdmin4.ico new file mode 100644 index 0000000000000000000000000000000000000000..3fcebafdc9c16dedaf800066f84a3fb91a226ec1 GIT binary patch literal 35147 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 '{#MyAppFullVersion}' then + begin + MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK); + Result := False; + end + else + begin + Result := True; + end + end + else + begin + Result := True; + end + + Splash.Close; +end; \ No newline at end of file