Subject: PATCH: pgAdmin4 windows installer

From: Paresh More <[email-masked]>
Date: Fri, 25 Mar 2016 17:10:20 +0530

Hello Team,

Attached is the patch which will create windows 32 installer for pgAdmin4
(runtime mode) for python 2.7 version.

This installer code has problem with psycopg2(2.5.2 version) for windows

As discussed with Ashesh Vashi, I have changed to point to 2.6.1 version
and now the installer is working fine.

So it would now generate windows 32 bit installer using psycopg2 (2.6.1
version)

Kindly please review and let me know if any changes required.

Please also suggest whether we should go with 2.5.2(psycopg2) or with the
latest version.

-- 

Thanks & Regards

*Paresh More*

Pune, India.
Cell :  +919922000564 |  www.enterprisedb.com

-- 
Sent via pgadmin-hackers mailing list ([email-masked])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

---

From: Paresh More <[email-masked]>
Date: Fri, 25 Mar 2016 17:44:40 +0530

Hello Team,
This is regarding pgAdmin4 windows 32 bit installer (runtime mode) using
python 2.7

What the patch will create ?
-It would create a folder as pkg/win32
-It would create Make.bat,installer.iss, and Resource folder  inside
pkg/win32 folder

What Make.bat would generate
-It would create private environment and install all the
dependencies(requirements_py2.txt) inside the environment.
-It would then compile the runtime source code using QT(5.5.1) and VC2013
-It would bundle the pgadmin binary file and required dependencies such as
QT, python(2.7) using INNO setup tool and generate the windows 32 bit
installer (pgadmin4-runtime.exe) in pkg/win32/Release folder.

The pgadmin4-runtime.exe is a single file installer for installing pgAdmin4
runtime mode on windows 32 bit machine.

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Thu, 7 Apr 2016 21:47:53 +0100

Hi

First round feedback (finally - sorry for the delay!):

- Please move Make.bat to the root directory of the source tree.

- The built installer should be created in dist/ in the root directory of
the source tree (as the PIP package is)

- The version number should be extracted from config.py, and used to create
the installer filename, i.e. pgadmin4-APP_VERSION.exe, which would
currently make "pgadmin4-1.0.0-dev.exe"

- Please add a README.rst file to pkg/win32 that describes the required
packages to setup a build environment, and (where non-obvious, e.g. setting
up the compiler for PIP) including instructions on how to setup everything.

- The user should never need to edit Make.bat, so any paths that might
change should come from the environment (with instructions telling the user
what to set where required). e.g. use vars like PYTHON_VERSION,
PYTHON_PATH, QTDIR. These should override any hard-coded defaults in the
script. Of course, where possible we should use variables standard to, or
set by the other products.

- Any script errors should cause an exit. For example, my QT is a different
version than you used, but the build script just ignored the fact that
qmake couldn't be found and built an installer anyway.

- Side-by-side installations of major versions of pgAdmin should be
allowed, so an installation directory of "C:\Program Files (x86)\pgAdmin
4\" should actually install into C:\Program Files (x86)\pgAdmin
4\<major>.<minor>, e.g. "C:\Program Files (x86)\pgAdmin 4\1.0\"

- Revision version updates should update the installed version, not install
side-by-side.  Care should be taken to ensure the Add/Remove Programs
entries support both side-by-side installations and upgrades (e.g. 1.0.0 ->
1.0.1)

- The first screen of the installer shows the version of pgAdmin as 1.0. It
should be APP_VERSION from config.py.

- To aid with error handling, the script should check to ensure it can find
required executables (e.g. qmake.exe, ISCC.exe) as a pre-flight check.

- We need a simple way to create a 64bit build.

- I'm not sure we should try to use any part of VC++ (NMAKE, VCVARS etc.).
The script failed to build the runtime for me - I think because VCVARS was
conflicting with QMAKE settings. I was getting errors like:

Generating Code...
        link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO
/SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32'
name='Microsoft.Windows.Common-Controls' version='6.0.0.0'
publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"
/MANIFEST /MANIFESTFILE:release\pgAdmin4.exe.embed.manifest
/OUT:release\pgAdmin4.exe @C:\Users\dpage\AppData\Local\Temp\nm196C.tmp
qtmain.lib(qtmain_win.obj) : error LNK2038: mismatch detected for
'_MSC_VER': value '1700' doesn't match value '1600' in pgAdmin4.obj
qtmain.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol
"__declspec(dllimport) void __cdecl std::_Xbad_alloc(void)"
(__imp_?_Xbad_alloc@std@@YAXXZ) referenced in function "char * __cdecl
std::_Allocate<char>(unsigned int,char *)" (??$_Allocate@D@std@@YAPADIPAD@Z)
qtmain.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol
"__declspec(dllimport) char const * __cdecl std::_Syserror_map(int)"
(__imp_?_Syserror_map@std@@YAPBDH@Z) referenced in function "public:
virtual class std::error_condition __thiscall
std::_System_error_category::default_error_condition(int)const "
(?default_error_condition@_System_error_category@std
@@UBE?AVerror_condition@2@H@Z)
qtmain.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol
"__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)"
(__imp_?_Winerror_map@std@@YAPBDH@Z) referenced in function "public:
virtual class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > __thiscall
std::_System_error_category::message(int)const " (?message@
_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@
@V?$allocator@D@2@@2@H@Z)
release\pgAdmin4.exe : fatal error LNK1120: 3 unresolved externals
NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio
10.0\VC\BIN\link.EXE"' : return code '0x460'

Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\bin\nmake.exe"' : return code '0x2'
Stop.

Aborting build!

Thanks!

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

---

From: Paresh More <[email-masked]>
Date: Fri, 15 Apr 2016 21:01:39 +0530

Hello Dave,

I have made changes according which you mentioned.

Binary is located @ location
https://uploads.enterprisedb.com/download.php?file=1f92c5abbaf7014d9aa8fb0711d53f6d

Patch is attached in the Email.

- Please move Make.bat to the root directory of the source tree.
*DONE* - Make.bat is moved to root directory

- The built installer should be created in dist/ in the root directory of
the source tree (as the PIP package is)
*DONE - *dist would be created in the root directory of the source tree.

- The version number should be extracted from config.py, and used to create
the installer filename, i.e. pgadmin4-APP_VERSION.exe, which would
currently make "pgadmin4-1.0.0-dev.exe"
*DONE* - Now it reads from config.py and accordingly create installer
filename.

*DONE*

- The user should never need to edit Make.bat, so any paths that might
change should come from the environment (with instructions telling the user
what to set where required). e.g. use vars like PYTHON_VERSION,
PYTHON_PATH, QTDIR. These should override any hard-coded defaults in the
script. Of course, where possible we should use variables standard to, or
set by the other products.
*DONE* - It would check environment variables and override if it is set,
else default values would be used and a check is put which would ensure all
the prerequisite requirement is installed or abort.

- Any script errors should cause an exit. For example, my QT is a different
version than you used, but the build script just ignored the fact that
qmake couldn't be found and built an installer anyway.
*DONE* - Pre check is put which would ensure prerequisite requirement is
installed

- Side-by-side installations of major versions of pgAdmin should be
allowed, so an installation directory of "C:\Program Files (x86)\pgAdmin
4\" should actually install into C:\Program Files (x86)\pgAdmin
4\<major>.<minor>, e.g. "C:\Program Files (x86)\pgAdmin 4\1.0\"
*DONE-*Side-by-side installation depending on Major and minor number is
handled.
Ex: All 1.0.0, 1.0.1,1.0.2,etc..... would go in C:\Program Files
(x86)\pgAdmin 4\1.0
All 1.1.0, 1.1.1,1.1.2,etc..... would go in C:\Program Files (x86)\pgAdmin
4\1.1
and so on

- Revision version updates should update the installed version, not install
side-by-side.  Care should be taken to ensure the Add/Remove Programs
entries support both side-by-side installations and upgrades (e.g. 1.0.0 ->
1.0.1)
*DONE* - Revision version update would update the installed version
A extra check is also put which insure older version would not be allowed
to install if higher version is already installed.

- The first screen of the installer shows the version of pgAdmin as 1.0. It
should be APP_VERSION from config.py.
*DONE*- Screen shows APP_Version from config.py

- To aid with error handling, the script should check to ensure it can find
required executables (e.g. qmake.exe, ISCC.exe) as a pre-flight check.
*DONE*- Pre check is set, which will ensure all prerequisite is already set
and installed.

*DONE*

On Fri, Apr 8, 2016 at 2:17 AM, Dave Page <[email-masked]> wrote:

> - The version number should be extracted from config.py, and used to
> create the installer filename, i.e. pgadmin4-APP_VERSION.exe, which would
> - Any script errors should cause an exit. For example, my QT is a
> different version than you used, but the build script just ignored the fact
> that qmake couldn't be found and built an installer anyway.
>
> - Revision version updates should update the installed version, not
> install side-by-side.  Care should be taken to ensure the Add/Remove
> Programs entries support both side-by-side installations and upgrades (e.g.
> 1.0.0 -> 1.0.1)
>
> - The first screen of the installer shows the version of pgAdmin as 1.0.
> It should be APP_VERSION from config.py.
>
> - To aid with error handling, the script should check to ensure it can
> find required executables (e.g. qmake.exe, ISCC.exe) as a pre-flight check.
>
> NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual
> Studio 10.0\VC\BIN\link.EXE"' : return code '0x460'
>
> Stop.
> NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual
> Studio 12.0\VC\bin\nmake.exe"' : return code '0x2'
> Stop.
>
> Aborting build!
>
> Thanks!
>
> On Fri, Mar 25, 2016 at 11:40 AM, Paresh More <
> [email-masked]> wrote:
>
>> Hello Team,
>>

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Mon, 9 May 2016 13:43:35 +0100

Hi

> *DONE* - Make.bat is moved to root directory

OK.

> *DONE - *dist would be created in the root directory of the source tree.

OK

> *DONE* - Now it reads from config.py and accordingly create installer

OK

> up the compiler for PIP) including instructions on how to setup everything.

I've edited (and renamed for consistency) this file. Please find the update
attached.

I notice that it does not mention anything about setting up a compiler for
PIP etc. Is that needed?

> the prerequisite requirement is installed or abort.

This doesn't appear to work at all. I set QTDIR in my environment, but the
script complains that the default paths don't exist. I removed the default
for QTDIR, and then get output like the following:

C:\Users\dpage\Documents\pgadmin4>make
'Files' is not recognized as an internal or external command,
operable program or batch file.
'Files' is not recognized as an internal or external command,
operable program or batch file.
'Files' is not recognized as an internal or external command,
operable program or batch file.
'Files' is not recognized as an internal or external command,
operable program or batch file.
C:\Qt\5.5\msvc2013_64 does not exist.
"C:\Qt\5.5\msvc2013_64\bin\qmake.exe"s does not exist.
Please Install QT SDK and set the QTDIR enviroment Variable.

Clearly there are quoting issues here.

> *DONE* - Pre check is put which would ensure prerequisite requirement is

OK

> All 1.1.0, 1.1.1,1.1.2,etc..... would go in C:\Program Files
> (x86)\pgAdmin 4\1.1
> and so on
>

OK.

> Programs entries support both side-by-side installations and upgrades (e.g.

OK.

> *DONE*- Screen shows APP_Version from config.py

OK.

> *DONE*- Pre check is set, which will ensure all prerequisite is already
> set and installed.
>

OK. Please adjust the error reporting, e.g.

:setInnoDetails
echo %INNOTOOL% does not exist
echo Please Install Innotool and set the INNOTOOL enviroment variable.
goto EXIT

:setVCDetails
echo %VCDIR% does not exist.
echo %VCVAR% does not exist.
echo %VCNMAKE% does not exist.
echo Please Install Microsoft Visual Studio and set the VCDIR environment
variable.
goto EXIT

:setPythonDetails
echo %PYTHON_HOME% does not exist.
echo %PYTHON_VERSION% not set.
echo %PYTHON_DLL% does not exist.
echo Please Install Python and set the PYTHON_HOME enviroment Variable.
goto EXIT

:setQtDetails
echo %QTDIR% does not exist.
echo %QMAKE% does not exist.
echo Please Install the QT SDK and set the QTDIR enviroment variable.
goto EXIT

> - We need a simple way to create a 64bit build.

How is that done? It's not mentioned in the README.

>> - I'm not sure we should try to use any part of VC++ (NMAKE, VCVARS
>> etc.). The script failed to build the runtime for me - I think because
>> VCVARS was conflicting with QMAKE settings. I was getting errors like:
>>
>> Generating Code...
>>> Attached is the patch which will create windows 32 installer for
>>> pgAdmin4 (runtime mode) for python 2.7 version.
>>>
>>> Please also suggest whether we should go with 2.5.2(psycopg2) or with
>>> the latest version.
>>>
>>> --
>>>
>>> Thanks & Regards
>>>
>>> *Paresh More*
>>>
>>>
>>> Pune, India.

---

From: Paresh More <[email-masked]>
Date: Fri, 20 May 2016 14:03:40 +0530

Hello Dave.

Attached are two patch for pgAdmin4-windows

pgAdmin4_createDB.patch
- patch for pgAdmin4.py to autocreate database configuration if does not
exist.
- Now pgadmin.db would be not be bundled with installer, it would be
created if pgAdmin4.py is executed for the first time.

*pgAdmin4_windows.patch*
- Environment variables once set will over ride the existing script
variables.
- Issue related to path with quotes are removed.
- New Readme.txt is added.
- Modified Error reporting.
- Python check was missing related to which requirement file it should pick
for creating private environment based on python version is also fixed.

Windows pgAdmin4 Installer Download Link is @ location
https://uploads.enterprisedb.com/download.php?file=cc348a6d233400fa80fb2a4fd53336a3

On Mon, May 9, 2016 at 6:13 PM, Dave Page <[email-masked]> wrote:

> Hi
>
> On Fri, Apr 15, 2016 at 4:31 PM, Paresh More <[email-masked]
> > wrote:
>
>> Hello Dave,
>>
> I've edited (and renamed for consistency) this file. Please find the
> update attached.
>
>>> - The built installer should be created in dist/ in the root directory
>>> of the source tree (as the PIP package is)
>>>
>>>> As discussed with Ashesh Vashi, I have changed to point to 2.6.1
>>>> version and now the installer is working fine.
>>>>

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Thu, 26 May 2016 14:43:05 +0100

Hi

> created if pgAdmin4.py is executed for the first time.

This is committed.

> - Python check was missing related to which requirement file it should
> pick for creating private environment based on python version is also fixed.
>

Attached is an update to this patch, which modifies the following:

- Avoids trashing a pre-existing config_local.py, and creates a very simple
one in the staging directory.

- Various tidy-ups of Make.bat.

- Change the default path to %ProgramFiles%\pgAdmin 4\v<major> (added the
v, as <major> on it's own looks weird)

Please update further to address the following issues. I need this
completed ASAP, thanks:

- Make.bat should take a "clean" parameter, to cleanup all output it
creates in normal mode.

- The package name in the installer should be set from config.py as the
version is.

- I see the following error:

  error: [Error 183] Cannot create a file when that file already exists:
'build\\bdist.win32\\wheel\\importlib-1.0.3.data\\..'

  ----------------------------------------
  Failed building wheel for importlib

- And the following error:

  C:\Users\dpage\AppData\Local\Programs\Common\Microsoft\Visual C++ for
Python\9.0\VC\Bin\link.exe /DLL /nologo /INCREMENTAL:NO
/LIBPATH:c:\python27\Libs
/LIBPATH:c:\users\dpage\documents\pgadmin4\pkg\win32\release\ve_python\libs
/LIBPATH:c:\users\dpage\documents\pgadmin4\pkg\win32\release\ve_python\PCbuild
/LIBPATH:c:\users\dpage\documents\pgadmin4\pkg\win32\release\ve_python\PC\VS9.0
/LIBPATH:C:/PROGRA~1/PG/pg95/lib ws2_32.lib advapi32.lib secur32.lib
libpq.lib shfolder.lib
build\temp.win32-2.7\Release\psycopg\psycopgmodule.obj
build\temp.win32-2.7\Release\psycopg\green.obj
build\temp.win32-2.7\Release\psycopg\pqpath.obj
build\temp.win32-2.7\Release\psycopg\utils.obj
build\temp.win32-2.7\Release\psycopg\bytes_format.obj
build\temp.win32-2.7\Release\psycopg\connection_int.obj
build\temp.win32-2.7\Release\psycopg\connection_type.obj
build\temp.win32-2.7\Release\psycopg\cursor_int.obj
build\temp.win32-2.7\Release\psycopg\cursor_type.obj
build\temp.win32-2.7\Release\psycopg\diagnostics_type.obj
build\temp.win32-2.7\Release\psycopg\error_type.obj
build\temp.win32-2.7\Release\psycopg\lobject_int.obj
build\temp.win32-2.7\Release\psycopg\lobject_type.obj
build\temp.win32-2.7\Release\psycopg\notify_type.obj
build\temp.win32-2.7\Release\psycopg\xid_type.obj
build\temp.win32-2.7\Release\psycopg\adapter_asis.obj
build\temp.win32-2.7\Release\psycopg\adapter_binary.obj
build\temp.win32-2.7\Release\psycopg\adapter_datetime.obj
build\temp.win32-2.7\Release\psycopg\adapter_list.obj
build\temp.win32-2.7\Release\psycopg\adapter_pboolean.obj
build\temp.win32-2.7\Release\psycopg\adapter_pdecimal.obj
build\temp.win32-2.7\Release\psycopg\adapter_pint.obj
build\temp.win32-2.7\Release\psycopg\adapter_pfloat.obj
build\temp.win32-2.7\Release\psycopg\adapter_qstring.obj
build\temp.win32-2.7\Release\psycopg\microprotocols.obj
build\temp.win32-2.7\Release\psycopg\microprotocols_proto.obj
build\temp.win32-2.7\Release\psycopg\typecast.obj
/OUT:build\lib.win32-2.7\psycopg2\_psycopg.pyd
/IMPLIB:build\temp.win32-2.7\Release\psycopg\_psycopg.lib
/MANIFESTFILE:build\temp.win32-2.7\Release\psycopg\_psycopg.pyd.manifest
  LINK : fatal error LNK1181: cannot open input file 'libpq.lib'
  error: command
'C:\\Users\\dpage\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++
for Python\\9.0\\VC\\Bin\\link.exe' failed with exit status 1181

  ----------------------------------------
  Failed building wheel for psycopg2

  %PGDIR% is set to: C:/Program Files (x86)/PostgreSQL/9.5, but note that
/LIBPATH is including "C:/PROGRA~1/PG/pg95/lib".

- As far as I can see, the Helpfiles are not built or bundled (talk to
Sandeep about this)

- No Start Menu icon is created.

- Why is 3rd_party_licences.txt included? We don't need that.

- pkg/win32/installer.iss should be added to a .gitignore file.

- SplashScreen.bmp doesn't seem to be used (though it is referenced from
the installer config file.

- Running the app fails with the following (I suspect because of the
psycopg2 issue above):

---------------------------
Setup
---------------------------
Unable to execute file:
C:\Program Files (x86)\pgAdmin 4\v1\runtime\pgAdmin4.exe

CreateProcess failed; code 2.
The system cannot find the file specified.
---------------------------
OK
---------------------------

The only file in that directory is python27.dll. This is probably caused by
this:

fatal error LNK1112: module machine type 'x64' conflicts with target
machine type 'X86'

- The Add/Remove Programs entry text should be: "pgAdmin 4 v1", thus
allowing v1.1 to be a bug-fix release, and 2.0 to be the next major version.

- Any pre-existing pgadmin4.db is being shipped.

- Any pre-existing *.pyc files are being shipped.

---

From: Paresh More <[email-masked]>
Date: Fri, 27 May 2016 22:32:24 +0530

Hello Dave,

Make.bat usage is change to

Make.bat x86           // It would generated 32 bit installer
Make.bat adm64     // would generated 64 bit installer
Make.bat clean       // Will cleanup all output it creates in normal mode

Now Make.bat would generated 32/64 installers as per selected.

DONE

- Various tidy-ups of Make.bat.
Tried to clean up code and added some information to the scripts

- Change the default path to %ProgramFiles%\pgAdmin 4\v<major> (added the
v, as <major> on it's own looks weird)
DONE - Based on 32 bit or 64 bit it would install accordingly

DONE

DONE

  psycopg2 issue is resolved.

- As far as I can see, the Helpfiles are not built or bundled (talk to
Sandeep about this)
DONE - Helpfiles are added to installer

DONE

- Why is 3rd_party_licences.txt included? We don't need that.
Removed it is not required

DONE

- SplashScreen.bmp doesn't seem to be used (though it is referenced from
the installer config file.
Splashscreen would be now displayed during installation

- Based on 32/64 python27.dll would be shipped

DONE

DONE

DONE

I have tested on 32 bit machine only and its working fine, for 64 bit all
changes are in place, Make.bat amd64 would generate the desired installers.

Attached is the updated Patch.

On Thu, May 26, 2016 at 7:13 PM, Dave Page <[email-masked]> wrote:

> Hi
>
> On Fri, May 20, 2016 at 9:33 AM, Paresh More <[email-masked]
> > wrote:
>
>> Hello Dave.
>>
> - Avoids trashing a pre-existing config_local.py, and creates a very
> simple one in the staging directory.
>
> The only file in that directory is python27.dll. This is probably caused
> by this:
>

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Paresh More <[email-masked]>
Date: Mon, 30 May 2016 12:10:31 +0530

Hello Dave,

Following things are also fixed in the patch as per discussed with sandeep.

- added "MINIFY_HTML = False" to config_local.py
- win-build removed following a successful build

Installer download link is:
https://uploads.enterprisedb.com/download.php?file=3d9f8c2458e27a5a34ba8e942687f55f

Attached is the updated patch.

On Fri, May 27, 2016 at 10:32 PM, Paresh More <[email-masked]>
wrote:

>> On Fri, May 20, 2016 at 9:33 AM, Paresh More <
>>> - patch for pgAdmin4.py to autocreate database configuration if does
>>> not exist.

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Tue, 31 May 2016 15:04:51 +0100

Hi

This still doesn't build for me:

> make x86
...
...

Generating Code...
        link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO
/SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='M
icrosoft.Windows.Common-Controls' version='6.0.0.0'
publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture
='*'" /MANIFEST:embed /OUT:release\pgAdmin4.exe
@C:\Users\dpage\AppData\Local\Temp\nm5F51.tmp
Qt5Core.lib(Qt5Core.dll) : fatal error LNK1112: module machine type 'x64'
conflicts with target machine type 'X86'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\BIN\link.EXE"' : return code '0x458'

Stop.

Aborting build!
"Preparing Creation of windows installer"
cp: cannot create regular file
`C:\\Users\\dpage\\Documents\\pgadmin4\\pkg\\win32\\win-build\\/C:\\Users\\dpage\\Documen
ts\\pgadmin4\\pkg\\win32\\Resources\\pgAdmin4.ico': No such file or
directory
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" /q
"C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss"
Error on line 101 in
C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss: Column 3:
Semicolon (';') expected.
Compile aborted.

(note that the build doesn't abort). I then try a different QTDIR, this
time a 32 bit one:

        link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO
/SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='M
icrosoft.Windows.Common-Controls' version='6.0.0.0'
publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture
='*'" /MANIFEST /MANIFESTFILE:release\pgAdmin4.exe.embed.manifest
/OUT:release\pgAdmin4.exe @C:\Users\dpage\AppData\Loca
l\Temp\nm1C68.tmp
qtmain.lib(qtmain_win.obj) : error LNK2038: mismatch detected for
'_MSC_VER': value '1700' doesn't match value '1800' in
 pgAdmin4.obj
release\pgAdmin4.exe : fatal error LNK1319: 1 mismatches detected
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\BIN\link.EXE"' : return code '0x527'

Stop.

Aborting build!
"Preparing Creation of windows installer"
cp: cannot create regular file
`C:\\Users\\dpage\\Documents\\pgadmin4\\pkg\\win32\\win-build\\/C:\\Users\\dpage\\Documen
ts\\pgadmin4\\pkg\\win32\\Resources\\pgAdmin4.ico': No such file or
directory
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" /q
"C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss"
Error on line 101 in
C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss: Column 3:
Semicolon (';') expected.
Compile aborted.

If I then try a 64bit build:

> make amd64
...
...

Generating Code...
        link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO
/SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='M
icrosoft.Windows.Common-Controls' version='6.0.0.0'
publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture
='*'" /MANIFEST:embed /OUT:release\pgAdmin4.exe
@C:\Users\dpage\AppData\Local\Temp\nmF7B9.tmp
Server.obj : error LNK2019: unresolved external symbol
__imp_PyString_FromString referenced in function "public: __cdecl
 Server::Server(unsigned short)" (??0Server@@QEAA@G@Z)
Server.obj : error LNK2019: unresolved external symbol __imp_PyList_Append
referenced in function "public: __cdecl Serve
r::Server(unsigned short)" (??0Server@@QEAA@G@Z)
Server.obj : error LNK2019: unresolved external symbol
__imp_PyFile_FromString referenced in function "protected: virtua
l void __cdecl Server::run(void)" (?run@Server@@MEAAXXZ)
Server.obj : error LNK2019: unresolved external symbol __imp_PyFile_AsFile
referenced in function "protected: virtual vo
id __cdecl Server::run(void)" (?run@Server@@MEAAXXZ)
Server.obj : error LNK2019: unresolved external symbol
__imp_Py_SetProgramName referenced in function "public: __cdecl S
erver::Server(unsigned short)" (??0Server@@QEAA@G@Z)
Server.obj : error LNK2019: unresolved external symbol __imp_Py_Initialize
referenced in function "public: __cdecl Serve
r::Server(unsigned short)" (??0Server@@QEAA@G@Z)
Server.obj : error LNK2019: unresolved external symbol __imp_Py_Finalize
referenced in function "public: virtual __cdecl
 Server::~Server(void)" (??1Server@@UEAA@XZ)
Server.obj : error LNK2019: unresolved external symbol
__imp_PyRun_SimpleStringFlags referenced in function "protected:
virtual void __cdecl Server::run(void)" (?run@Server@@MEAAXXZ)
Server.obj : error LNK2019: unresolved external symbol
__imp_PyRun_SimpleFileExFlags referenced in function "protected:
virtual void __cdecl Server::run(void)" (?run@Server@@MEAAXXZ)
Server.obj : error LNK2019: unresolved external symbol
__imp_PySys_GetObject referenced in function "public: __cdecl Ser
ver::Server(unsigned short)" (??0Server@@QEAA@G@Z)
Server.obj : error LNK2019: unresolved external symbol __imp_Py_NoSiteFlag
referenced in function "public: __cdecl Serve
r::Server(unsigned short)" (??0Server@@QEAA@G@Z)
release\pgAdmin4.exe : fatal error LNK1120: 11 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\BIN\amd64\link.EXE"' : return code '
0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\bin\nmake.exe"' : return code '0x2'
Stop.

Aborting build!
"Preparing Creation of windows installer"
cp: cannot create regular file
`C:\\Users\\dpage\\Documents\\pgadmin4\\pkg\\win32\\win-build\\/C:\\Users\\dpage\\Documen
ts\\pgadmin4\\pkg\\win32\\Resources\\pgAdmin4.ico': No such file or
directory
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" /q
"C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss"
Error on line 101 in
C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss: Column 3:
Semicolon (';') expected.
Compile aborted.On Mon, May 30,

So, specific issues seen:

- At least one of the default paths in make.bat is wrong - the one
containing Syswow64 should contain a 32 bit library.

- The 32 bit paths will certainly be wrong on 32 bit Windows.

- Make.bat does not properly exit following errors.

- Error handlers like setPythonDetails don't have appropriate names (maybe
err_handle_python ?)

- Error handlers like setPythonDetails display multiple errors at once,
only one of may have been the actual problem.

- Using SET in the batch script is modifying the environment of the parent
shell (which I found earlier has probably wasted a lot of my time)

- In general, it seems very fragile, and easy to break with different
versions of tools being installed. Such issues should be checked for and
warned about (e.g. if there is a 32/64 bit mismatch).

- Shouldn't it be PGDIR, not PG_PATH? That's what I see being used
elsewhere.

- The installer build complains it cannot find the icon.

- The installer build fails due to a syntax error in installer.iss.

- Shouldn't the temp folders be in $SRC/win32-build to match what is done
on Mac?

- A number of tabs have crept back into Make.bat after I replaced them all
with '    ' last time.

- %wd is used in some places, %WD in others. Similar, rem vs. REM (the
latter of which I standardised on last time)

- The README is poorly formatted and doesn't make sense in a number of
places. Rough update attached for review and further improvement.

2016 at 7:40 AM, Paresh More <[email-masked]> wrote:

> On Fri, May 27, 2016 at 10:32 PM, Paresh More <
>>> - Change the default path to %ProgramFiles%\pgAdmin 4\v<major> (added
>>> the v, as <major> on it's own looks weird)
>>>
>>>   %PGDIR% is set to: C:/Program Files (x86)/PostgreSQL/9.5, but note
>>> that /LIBPATH is including "C:/PROGRA~1/PG/pg95/lib".
>>>

---

From: Dave Page <[email-masked]>
Date: Tue, 31 May 2016 15:47:08 +0100

Oh - in addition, pgadmin4.db is being shipped.

On Tue, May 31, 2016 at 3:04 PM, Dave Page <[email-masked]> wrote:

> Studio 12.0\VC\BIN\link.EXE"' : return code '0x458'
>
> Stop.
> Studio 12.0\VC\BIN\link.EXE"' : return code '0x527'
>
> Stop.
> Studio 12.0\VC\BIN\amd64\link.EXE"' : return code '
> 0x460'
> Stop.
>>> I have tested on 32 bit machine only and its working fine, for 64 bit
>>> all changes are in place, Make.bat amd64 would generate the desired
>>> installers.
>>>
>>>
>>>>   error: [Error 183] Cannot create a file when that file already
>>>> exists: 'build\\bdist.win32\\wheel\\importlib-1.0.3.data\\..'
>>>>
>>>> - SplashScreen.bmp doesn't seem to be used (though it is referenced
>>>> from the installer config file.
>>>>
>>>> The only file in that directory is python27.dll. This is probably
>>>> caused by this:
>>>>

---

From: Paresh More <[email-masked]>
Date: Fri, 3 Jun 2016 19:15:24 +0530

Hello Dave

Attached is the updated patch for pgAdmin 4 windows

- Windows x86 and amd64 check is added, so now on 32 machine if amd64 is
selected it would not allow to generate installer.
- check is added which will check if any mismatch in QT(msvc) and VC version

Installer location -

https://uploads.enterprisedb.com/download.php?file=7486e62c393b168f3df74d983268b923

And all issues which you mentioned are also fixed.

On Tue, May 31, 2016 at 8:17 PM, Dave Page <[email-masked]> wrote:

>> __imp_PyList_Append referenced in function "public: __cdecl Serve
>> __imp_PyFile_AsFile referenced in function "protected: virtual vo
>> __imp_Py_Initialize referenced in function "public: __cdecl Serve
>> __imp_Py_NoSiteFlag referenced in function "public: __cdecl Serve
>> - Error handlers like setPythonDetails don't have appropriate names
>> (maybe err_handle_python ?)
>>
>> - Using SET in the batch script is modifying the environment of the
>> parent shell (which I found earlier has probably wasted a lot of my time)
>>
>> - A number of tabs have crept back into Make.bat after I replaced them
>> all with '    ' last time.
>>
>>>>>> - Python check was missing related to which requirement file it
>>>>>> should pick for creating private environment based on python version is
>>>>>> also fixed.
>>>>>>
>>>>>
>>>>> - The package name in the installer should be set from config.py as
>>>>> the version is.
>>>>>
>>>>>   C:\Users\dpage\AppData\Local\Programs\Common\Microsoft\Visual C++
>>>>> for Python\9.0\VC\Bin\link.exe /DLL /nologo /INCREMENTAL:NO

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Fri, 3 Jun 2016 17:29:31 +0100

Hi

> - check is added which will check if any mismatch in QT(msvc) and VC

Yeah, that is better (e.g. it detected one mismatch), but after I updated
Qt so I had 5.5 with the msvc2013 and msvc2013_64 kits installed, it would
still let me try to build a 32 bit package with msvc2013_64.

> And all issues which you mentioned are also fixed.

Not entirely:

Error on line 101 in

>>> with '    ' last time.
I've fixed a few more tabs, and tidied up the README and Make.bat some
more. Please find attached. I've still yet to get a working installer out.

Thanks.

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
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=<PATH>"
+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%=<PATH>"
+    ECHO SET "VCVAR%=<PATH>"
+    ECHO SET "VCNMAKE%=<PATH>"
+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=<VERSION NUMBER>"
+    ECHO SET "PYTHON_HOME=<PATH>"
+    ECHO SET "PYTHON_DLL=<PATH>"
+goto EXIT
+
+:err_handle_qt
+    ECHO %QTDIR% does not exist.
+    ECHO Please Install QT SDK and SET the QTDIR enviroment variable.
+    ECHO SET "QTDIR=<PATH>"
+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=<PATH>"
+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 <x86 | amd64 | clean>"
+    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 <PGADMIN4_SRC>
+> 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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
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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
NUx1Z5xNhk0{{S#nc=-ST

literal 0
HcmV?d00001

diff --git a/pkg/win32/installer.iss.in b/pkg/win32/installer.iss.in
new file mode 100644
index 0000000..3ec4b8c
--- /dev/null
+++ b/pkg/win32/installer.iss.in
@@ -0,0 +1,114 @@
+#define MyAppName "0.0"
+#define MyAppVersion "0.0"
+#define MyAppPublisher "The pgAdmin Development Team"
+#define MyAppURL "www.pgadmin.org"
+#define MyAppExeName "pgAdmin4.exe"
+#define MyAppID "C14F64E7-DCB9-4DE1-8560-16F08FCFF64E"
+#define MyAppFullVersion "0.0"
+#define MyAppArchitecturesMode
+[Setup]
+AppId={#MyAppName}{#MyAppVersion}
+AppName={#MyAppName}
+AppVersion={#MyAppFullVersion}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+DefaultDirName={pf}\{#MyAppName}\{#MyAppVersion}
+DisableWelcomePage=no
+DisableProgramGroupPage=yes
+LicenseFile=Resources\license.rtf
+OutputBaseFilename=setup
+SetupIconFile=Resources\pgAdmin4.ico
+Compression=lzma
+SolidCompression=yes
+PrivilegesRequired=admin
+ChangesEnvironment=yes
+;UninstallFilesDir={app}\{#MyAppVersion}
+ArchitecturesInstallIn64BitMode={#MyAppArchitecturesMode}
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Icons]
+Name: {group}\{#MyAppName}; Filename: {app}\runtime\{#MyAppExeName}; IconFilename: {app}\pgAdmin4.ico; WorkingDir: {app}; Comment: "{#MyAppName}";
+Name: {commondesktop}\{#MyAppName}; Filename: {app}\runtime\{#MyAppExeName}; IconFilename: {app}\pgAdmin4.ico; WorkingDir: {app}; Comment: "{#MyAppName}";
+
+[Files]
+Source: "Resources\SplashScreen.bmp"; DestDir: {tmp}; Flags: dontcopy
+Source: "..\..\win-build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
+
+[Run]
+Filename: "{app}\runtime\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent
+
+[CustomMessages]
+english.NewerVersionExists=A newer version of {#MyAppName}
+
+[Registry]
+Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekeyifempty
+Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekey
+Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
+Root: HKLM; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string; ValueName: "Version"; ValueData: "{#MyAppFullVersion}"
+
+[Code]
+var
+  // Required for Splash Screen.
+  Splash  : TSetupForm;
+
+procedure CurStepChanged(CurStep: TSetupStep);
+var
+ value : string;
+ begin
+   if CurStep = ssInstall then begin
+     value := ExpandConstant('{app}') + '\ve_python\Lib\site-packages' + ';' +
+     ExpandConstant('{app}') + '\ve_python\Lib' + ';' +
+     ExpandConstant('{app}') + '\ve_python\Lib\lib-tk' + ';' +
+     ExpandConstant('{app}') + '\ve_python\DLLs';
+     RegWriteStringValue(HKEY_CURRENT_USER,'Software\pgAdmin Development Team\pgAdmin 4', 'PythonPath', value);
+ end;
+end;
+
+// find current version before installation
+function InitializeSetup: Boolean;
+var
+  Version: String;
+  BitmapImage1 : TBitmapImage;
+begin
+  Splash := CreateCustomForm;
+  Splash.BorderStyle := bsNone;
+  BitmapImage1 := TBitmapImage.Create(Splash);
+  BitmapImage1.AutoSize := True;
+  BitmapImage1.Align := alClient;
+  BitmapImage1.Left := 0;
+  BitmapImage1.Top := 0;
+  BitmapImage1.stretch := True;
+  BitmapImage1.Parent := Splash;
+  ExtractTemporaryFile('SplashScreen.bmp');
+  BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\SplashScreen.bmp');
+  Splash.Width := BitmapImage1.Width;
+  Splash.Height := BitmapImage1.Height;
+  Splash.Center;
+  Splash.Show;
+  BitmapImage1.Refresh;
+  Sleep(3000);
+
+  if RegValueExists(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version') then
+    begin
+      RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
+      if Version > '{#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

---

From: Paresh More <[email-masked]>
Date: Sat, 4 Jun 2016 02:00:52 +0530

Hello Dave.

There was problem with the Make.bat file ^M characters which is been
removed.

Issues are fixed along with some code and README tidied

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Mon, 6 Jun 2016 10:21:10 +0100

Hi,

> Issues are fixed along with some code and README tidied

I'm still seeing the same error:

copy "C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss.in"
"C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss"
        1 file(s) copied.
Error on line 113 in
C:\Users\dpage\Documents\pgadmin4\pkg\win32\installer.iss: Column 3:
Semicolon (';') expected.
Compile aborted.

---

From: Paresh More <[email-masked]>
Date: Mon, 6 Jun 2016 15:16:05 +0530

Hello Dave,

Can you please attached the file C:\Users\dpage\Documents\
pgadmin4\pkg\win32\installer.iss

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Mon, 6 Jun 2016 11:05:55 +0100

PFA.

On Mon, Jun 6, 2016 at 10:46 AM, Paresh More <[email-masked]>
wrote:

>> On Fri, Jun 3, 2016 at 9:30 PM, Paresh More <[email-masked]
>> > wrote:
>>
>>> Hello Dave.
>>>

---

From: Paresh More <[email-masked]>
Date: Mon, 6 Jun 2016 22:45:29 +0530

Hello Dave,

Windows batch has problem with file search and replace when it comes to
white spaces. Now the search and replace code is change to python.

So the installer creation issue is resolve.

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Paresh More <[email-masked]>
Date: Wed, 8 Jun 2016 11:53:29 +0530

Hello Dave,

As discuss added vcdist runtime, remove splash screen and added start menu
icon.

Now also inno setup standard and Unicode both version are working fine.

-- 

Thanks & Regards

*Paresh More*

Pune, India.

---

From: Dave Page <[email-masked]>
Date: Wed, 8 Jun 2016 12:31:30 +0100

Thanks! That's now committed, with a few modifications:

- Install/uninstall Sphinx as it's not actually in the requirements.txt
file and is only needed for building.
- Detect errors in the doc build.
- Rename ve_python to venv for consistency with Mac.
- Comment/progress info improvements