Building MapGuide on Windows

From OSGeo
Revision as of 02:45, 31 October 2007 by Wiki-Jackie.ng (talk | contribs) (→‎Environment Variables)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This is a working document which attempts to describe how to build MapGuide Open Source from the latest SVN source on Windows.

This initial version is based on my initial experience, contains errors, and some lazyness. You may find that the FDO build instructions are better than these for the FDO portion of the build.

Jasonbirch 07:53, 10 November 2006 (CET)


Prerequisites

These prerequisites are based on the structure that was used, and may require adjustment for your environment.

Some requirements may not be strictly be required if all you are doing is building a "Release" version of MapGuide Open Source and not doing the unit tests or building the documentation. A knowledgeable user may be able to pare down this list. More information is available in the official build documentation at: [1] and [2]. This document varies from these instructions considerably.


Directory Structure

The examples in this document assume that your working directory is:

D:\OSGeo\

and that you have the following directories created under that location:

D:\OSGeo\FDOBuild
D:\OSGeo\FDODev
D:\OSGeo\MGBuild
D:\OSGeo\MGDev
D:\OSGeo\MGPkg   optional


Applications

The following applications should be installed in their default locations unless otherwise noted.


The original author is thinks that these are probably optional - if you don't install them, make sure you adjust the environment variables to suit

  • GNUWin32 - it is recommended to use the GetGNUWin32 utility to download and install at least Bison and Sed. However, you don't need to stop there. The original author find uses for "find", "grep", "xargs", and many other utilities on a daily basis. It gives your Windows environment much of the power of a Unix shell.
  • Doxygen Documentation Tool
  • GraphViz Graphing Tool
  • Microsoft HTML Help Workshop


Environment Variables

These are specific to the original author's environment and will likely need modification.

JAVA_HOME={YourJdkInstallationPath}
BUILD_ROOT=D:\OSGeo
FDO=%BUILD_ROOT%\FDOBuild\fdo
FDOBUILD=%BUILD_ROOT%\FDOBuild
FDOMYSQL=C:\Program Files\MySQL\MySQL Server 5.0
FDOTHIRDPARTY=%BUILD_ROOT%\FDOBuild\Thirdparty
FDOUTILITIES=%BUILD_ROOT%\FDOBuild\Utilities
FDO_SVN_ROOT=%BUILD_ROOT%\FDODev
GDAL_DATA=%BUILD_ROOT%\MGBuild\Oem\gdal-1.3.0\data
MGBUILD=%BUILD_ROOT%\MGBuild
NLSDIR=%BUILD_ROOT%\FDOBuild\Thirdparty\apache\xml-xalan\c\Src\xalanc\NLS
PATH=%PATH%;C:\Program Files\Subversion\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\7-Zip;C:\Program Files\ATT\Graphviz\bin;C:\Program Files\doxygen\bin;C:\Program Files\GnuWin32\bin;C:\Perl\bin;%JAVA_HOME%\bin
PROJ_LIB=%BUILD_ROOT%\MGBuild\Oem\proj-4.4.9\nad
XALANROOT=%BUILD_ROOT%\FDOBuild\Thirdparty\apache\xml-xalan\c
XERCESCROOT=%BUILD_ROOT%\FDOBuild\Thirdparty\apache\xml-xerces\c

Configuration

Visual Studio will need to have some paths set up. Go to:

Tools->Options->"Projects & Solutions"->"VC++ Directories"

When showing directories for "executable files", add the following:

{YourJdkInstallPath}/bin

When showing directories for "include files", add the following:

{YourJdkInstallPath}/include
{YourJdkInstallPath}/include/Win32


ArcSDE

The original author does not have ArcSDE SDK available. Hopefully instructions that include this provider will be created at some point. In the meantime, refer to the FDO build docs for clues.


Initial SVN Checkout

This takes quite a while the first time, and should probably be batched.

svn checkout https://fdocore.osgeo.org/svn/fdocore/trunk/Fdo "D:\OSGeo\FDODev" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdocore.osgeo.org/svn/fdocore/trunk/Thirdparty "D:\OSGeo\FDODev\Thirdparty" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdocore.osgeo.org/svn/fdocore/trunk/Utilities "D:\OSGeo\FDODev\Utilities" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdocore.osgeo.org/svn/fdocore/trunk -N "D:\OSGeo\FDODev" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdoshp.osgeo.org/svn/fdoshp/trunk/Providers/SHP "D:\OSGeo\FDODev\Providers\SHP" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdosdf.osgeo.org/svn/fdosdf/trunk/Providers/SDF "D:\OSGeo\FDODev\Providers\SDF" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdowfs.osgeo.org/svn/fdowfs/trunk/Providers/WFS "D:\OSGeo\FDODev\Providers\WFS" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdowms.osgeo.org/svn/fdowms/trunk/Providers/WMS "D:\OSGeo\FDODev\Providers\WMS" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdoarcsde.osgeo.org/svn/fdoarcsde/trunk/Providers/ArcSDE "D:\OSGeo\FDODev\Providers\ArcSDE" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdordbms.osgeo.org/svn/fdordbms/trunk/Providers/GenericRdbms "D:\OSGeo\FDODev\Providers\GenericRdbms" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdogdal.osgeo.org/svn/fdogdal/trunk/Providers/GDAL "D:\OSGeo\FDODev\Providers\GDAL" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://fdogdal.osgeo.org/svn/fdogdal/trunk/Providers/GDAL "D:\OSGeo\FDODev\Providers\GDAL" --username myOSGeoUsername --password myOSGeoPassword
svn checkout https://mapguide.osgeo.org/svn/mapguide/trunk/MgDev "D:\OSGeo\MGDev" --username myOSGeoUsername --password myOSGeoPassword

After the first checkout these can be done with an "update". Actually I think the first checkout can too...


Copy to a Clean Build Area

The svn "export" command allows you to make a nice clean copy to build in.

del /Q D:\OSGeo\FDOBuild\*
svn export --force "D:\OSGeo\FDODev" "D:\OSGeo\FDOBuild"

rd /S /Q D:\OSGeo\FDOBuild\Thirdparty
svn export "D:\OSGeo\FDODev\Thirdparty" "D:\OSGeo\FDOBuild\Thirdparty"

rd /S /Q D:\OSGeo\FDOBuild\Fdo
svn export "D:\OSGeo\FDODev\Fdo" "D:\OSGeo\FDOBuild\Fdo"

rd /S /Q D:\OSGeo\FDOBuild\Utilities
svn export "D:\OSGeo\FDODev\Utilities" "D:\OSGeo\FDOBuild\Utilities"

rd /S /Q D:\OSGeo\FDOBuild\Providers
mkdir D:\OSGeo\FDOBuild\Providers
svn export "D:\OSGeo\FDODev\Providers\SHP" "D:\OSGeo\FDOBuild\Providers\SHP"
svn export "D:\OSGeo\FDODev\Providers\SDF" "D:\OSGeo\FDOBuild\Providers\SDF"
svn export "D:\OSGeo\FDODev\Providers\WFS" "D:\OSGeo\FDOBuild\Providers\WFS"
svn export "D:\OSGeo\FDODev\Providers\WMS" "D:\OSGeo\FDOBuild\Providers\WMS"
svn export "D:\OSGeo\FDODev\Providers\GDAL" "D:\OSGeo\FDOBuild\Providers\GDAL"

svn export "D:\OSGeo\FDODev\Providers\GenericRdbms" "D:\OSGeo\FDOBuild\Providers\GenericRdbms"

REM Don't have the ArcSDE SDK files...
REM svn export "D:\OSGeo\FDODev\Providers\ArcSDE" "D:\OSGeo\FDOBuild\Providers\ArcSDE"

rd /S /Q D:\OSGeo\MGBuild
svn export "D:\OSGeo\MGDev" "D:\OSGeo\MGBuild" 


Build FDO Thirdparty

The FDO build complains if some of the environment variables which are required for MapGuide are set when it's built (because those components aren't compiled yet). What you can do to work around this is to create a batchfile in the D:\OSGeo directory with the following contents and use it to build the third party components.

@echo off

SET OLD_GDAL_DATA=%GDAL_DATA%
SET GDAL_DATA=
SET OLD_PROJ_LIB=%PROJ_LIB%
SET PROJ_LIB=

pushd %FDOBUILD%
call build_thirdparty.bat
popd

SET GDAL_DATA=%OLD_GDAL_DATA%
SET OLD_GDAL_DATA=
SET PROJ_LIB=%OLD_PROJ_LIB%
SET OLD_PROJ_LIB=


Build FDO

The same logic applies here.

@echo off

SET OLD_GDAL_DATA=%GDAL_DATA%
SET GDAL_DATA=
SET OLD_PROJ_LIB=%PROJ_LIB%
SET PROJ_LIB=

pushd %FDOBUILD%
call build.bat
popd

SET GDAL_DATA=%OLD_GDAL_DATA%
SET OLD_GDAL_DATA=
SET PROJ_LIB=%OLD_PROJ_LIB%
SET OLD_PROJ_LIB=


Install FDO into the MapGuide Build Area

This batch file installs both the required third party libraries and the compiled common FDO components and providers into the MapGuide build area

@echo off

SET OLD_GDAL_DATA=%GDAL_DATA%
SET GDAL_DATA=
SET OLD_PROJ_LIB=%PROJ_LIB%
SET PROJ_LIB=

pushd %FDOBUILD%
call build.bat -a=install -o=D:\OSGeo\MGBuild\Oem
popd

pushd %FDOBUILD%
call build_thirdparty.bat -a=install -o=D:\OSGeo\MGBuild\Oem
popd

SET GDAL_DATA=%OLD_GDAL_DATA%
SET OLD_GDAL_DATA=
SET PROJ_LIB=%OLD_PROJ_LIB%
SET OLD_PROJ_LIB=


When this is done, go to the FDO directory and edit the providers.xml file so that it no longer contains the path to the providers. If you don't do this, you will have to fix every installation that you make from this source.


Compile MapGuide

This is the fun part. Make sure to either compile all of the components in Debug mode or all of them in Release mode. Do not mix and match.

For each of the following, open it in Visual Studio, compile it, and close.

D:\OSGeo\MGBuild\OEM\oem.sln
D:\OSGeo\MGBuild\Oem\fcgi\fcgi-2.4.0\Win32\FastCGI.sln
D:\OSGeo\MGBuild\Oem\fcgi\isapi\FcgiWin.sln
D:\OSGeo\MGBuild\Server\Server.sln
D:\OSGeo\MGBuild\Web\src\WebTier.sln

Now we're cooking with gas :)

Note that the serverconfig.ini file uses paths relative to the server bin directory for repositories, packages, etc. If you are saving yourself some work and installing this build into a previous installation of MapGuide, be aware that these will have to be fixed one way or another.


Copy to a Live Server

optional

You can run a script that shuts down IIS on my VMWare Server, stops the MapGuide service (use "net stop|start" instead of sc on platforms earlier than XP), and then starts them back up. This has some lazy bits in it (such as the PHP extension install).

iisreset \\MyComputerName /stop

sc \\MyComputerName stop MapGuideServer

REM Server Copy
xcopy "D:\OSGeo\MGBuild\Server\RepositoryAdmin" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\Server\RepositoryAdmin" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Server\bin\release" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\Server\bin" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\gdal-1.3.0\data" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\Server\data" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\proj-4.4.9\nad" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\Server\nad" /E /Y /Q

REM Web Extensions Copy
xcopy "D:\OSGeo\MGBuild\Oem\gdal-1.3.0\data" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\data" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\localized" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\localized" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapadmin" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapadmin" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapagent" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapagent" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapagent" /E /Y /EXCLUDE:mg_exclusions_mapagent.txt /Q
xcopy "D:\OSGeo\MGBuild\UnitTest\WebTier\MapAgent\MapAgentForms" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapagent" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapviewerphp" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapviewerphp" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\proj-4.4.9\nad" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\nad" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\stdicons" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\stdicons" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\viewerfiles" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\viewerfiles" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\webstudio" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\webstudio" /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\fcgi\isapi\isapi_fcgi\Release\isapi_fcgi.dll" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapagent"  /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\fcgi\fcgi-2.4.0\libfcgi\Release\libfcgi.dll" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\www\mapagent"  /E /Y /Q

REM PHP Extension Copy
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\Php\ext\" /E /Y /EXCLUDE:mg_exclusions_php.txt /Q
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "\\MyComputerName\c$\Program Files\MapGuideOpenSource\WebServerExtensions\Php\" /E /Y /EXCLUDE:mg_exclusions_php.txt /Q

sc \\MyComputerName start MapGuideServer

iisreset \\MyComputerName /start

And here are the XCOPY exclusion files:

mg_exclusions_php.txt

DotNet
Java

mg_exclusions_mapagent.txt

php_MapGuideApi


Package

optional

And of course you could do something really similar that packages the build for installation elsewhere.

REM Server Copy
xcopy "D:\OSGeo\MGBuild\Server\RepositoryAdmin" "D:\OSGeo\MGPkg\Server\RepositoryAdmin" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Server\bin\release" "D:\OSGeo\MGPkg\Server\bin" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\gdal-1.3.0\data" "D:\OSGeo\MGPkg\Server\data" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\proj-4.4.9\nad" "D:\OSGeo\MGPkg\Server\nad" /I /E /Y /Q

REM Web Extensions Copy
xcopy "D:\OSGeo\MGBuild\Oem\gdal-1.3.0\data" "D:\OSGeo\MGPkg\WebServerExtensions\www\data" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\localized" "D:\OSGeo\MGPkg\WebServerExtensions\www\localized" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapadmin" "D:\OSGeo\MGPkg\WebServerExtensions\www\mapadmin" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapagent" "D:\OSGeo\MGPkg\WebServerExtensions\www\mapagent" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "D:\OSGeo\MGPkg\WebServerExtensions\www\mapagent" /I /E /Y /EXCLUDE:mg_exclusions_mapagent.txt /Q
xcopy "D:\OSGeo\MGBuild\UnitTest\WebTier\MapAgent\MapAgentForms" "D:\OSGeo\MGPkg\WebServerExtensions\www\mapagent" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\mapviewerphp" "D:\OSGeo\MGPkg\WebServerExtensions\www\mapviewerphp" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Oem\proj-4.4.9\nad" "D:\OSGeo\MGPkg\WebServerExtensions\www\nad" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\stdicons" "D:\OSGeo\MGPkg\WebServerExtensions\www\stdicons" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\viewerfiles" "D:\OSGeo\MGPkg\WebServerExtensions\www\viewerfiles" /I /E /Y /Q
xcopy "D:\OSGeo\MGBuild\Web\src\webstudio" "D:\OSGeo\MGPkg\WebServerExtensions\www\webstudio" /I /E /Y /Q

REM PHP Extension Copy
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "D:\OSGeo\MGPkg\WebServerExtensions\Php\ext\" /I /E /Y /EXCLUDE:mg_exclusions_php.txt /Q
xcopy "D:\OSGeo\MGBuild\Web\bin\release" "D:\OSGeo\MGPkg\WebServerExtensions\Php\" /I /E /Y /EXCLUDE:mg_exclusions_php.txt /Q


Download the Batchfiles

optional

If you want, you can download the (slightly different than these instructions) batchfiles that Jason uses from his site:

http://www.jasonbirch.com/files/mapguide_build.zip