[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mapguide-commits
Subject:    [mapguide-commits] r9977 - in trunk/MgDev: . Bindings Bindings/src Bindings/src/Bindings Bindings/sr
From:       svn_mapguide () osgeo ! org
Date:       2022-10-10 11:14:40
Message-ID: 20221010111441.36215138C87 () trac ! osgeo ! org
[Download RAW message or body]

Author: jng
Date: 2022-10-10 04:14:40 -0700 (Mon, 10 Oct 2022)
New Revision: 9977

Added:
   trunk/MgDev/Bindings/src/Bindings/Java/jar_helper.sh
   trunk/MgDev/Bindings/src/Managed/CMakeLists.txt
   trunk/MgDev/Bindings/src/Managed/DotNet/MapViewerStub/
   trunk/MgDev/Bindings/src/Managed/DotNet/OSGeo.MapGuide.MapGuideCommon/custom/
   trunk/MgDev/Bindings/src/Managed/Java/CMakeLists.txt
   trunk/MgDev/Bindings/src/Test/Php/RefCounting.php
   trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/atomic.h
   trunk/MgDev/Oem/php/build/
   trunk/MgDev/Oem/php/include/
   trunk/MgDev/Oem/php/lib/
   trunk/MgDev/Oem/php/phpize.bat
   trunk/MgDev/Oem/php/script/
   trunk/MgDev/clean.bat
   trunk/MgDev/cmake/modules/FindUUID.cmake
   trunk/MgDev/csmap_excludes.txt
   trunk/MgDev/debug_excludes.txt
   trunk/MgDev/release_excludes.txt
Removed:
   trunk/MgDev/Bindings/src/Bindings/mapadmin/
   trunk/MgDev/Bindings/src/Bindings/mapviewerphp/
   trunk/MgDev/Bindings/src/Tools/swig/
   trunk/MgDev/Oem/LinuxApt/build_apt.sh
   trunk/MgDev/Oem/php/Zend/
   trunk/MgDev/Oem/php/main/
   trunk/MgDev/Oem/php/x64/
Modified:
   trunk/MgDev/
   trunk/MgDev/Bindings/
   trunk/MgDev/Bindings/TODO.txt
   trunk/MgDev/Bindings/src/Bindings/Bindings.sln
   trunk/MgDev/Bindings/src/Bindings/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/DotNetUnmanagedApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/FoundationApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/GeometryApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/MapGuideCommonApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/PlatformBaseApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/DotNet/Web/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/DotNet/Web/WebApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/Java/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/Java/JavaApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/MapGuideApi/Constants.xml
   trunk/MgDev/Bindings/src/Bindings/MapGuideApi/MapGuideApiGen.xml
   trunk/MgDev/Bindings/src/Bindings/Php/
   trunk/MgDev/Bindings/src/Bindings/Php/CMakeLists.txt
   trunk/MgDev/Bindings/src/Bindings/Php/PhpApi.vcxproj
   trunk/MgDev/Bindings/src/Bindings/Php/README.md
   trunk/MgDev/Bindings/src/Bindings/Php/php.i
   trunk/MgDev/Bindings/src/CMakeLists.txt
   trunk/MgDev/Bindings/src/IMake/IMake.cpp
   trunk/MgDev/Bindings/src/SwigCommon/Java/exception.i
   trunk/MgDev/Bindings/src/SwigCommon/Java/monkey_patch.i
   trunk/MgDev/Bindings/src/SwigCommon/Php/exception.i
   trunk/MgDev/Bindings/src/SwigCommon/Php/monkey_patch.i
   trunk/MgDev/Bindings/src/SwigCommon/Php/pointer.i
   trunk/MgDev/Bindings/src/SwigCommon/refcount.i
   trunk/MgDev/Bindings/src/Test/DotNet/src/TestMisc/TestMisc.csproj
   trunk/MgDev/Bindings/src/Test/DotNet/src/TestRunner/TestRunner.csproj
   trunk/MgDev/Bindings/src/Test/Php/DrawingServiceAPI.php
   trunk/MgDev/Bindings/src/Test/Php/FeatureServiceAPI.php
   trunk/MgDev/Bindings/src/Test/Php/MapLayerAPI.php
   trunk/MgDev/Bindings/src/Test/Php/ResourceServiceAPI.php
   trunk/MgDev/Bindings/src/Test/Php/RunTests.php
   trunk/MgDev/Bindings/src/Test/Php/SQLiteEngine.php
   trunk/MgDev/Bindings/src/Test/Php/ServerAdminAPI.php
   trunk/MgDev/Bindings/src/Test/Php/SiteServiceAPI.php
   trunk/MgDev/Bindings/src/Test/Php/Test1.php
   trunk/MgDev/Bindings/src/Test/Php/Utils.php
   trunk/MgDev/Bindings/src/Test/Php/ValidateUtils.php
   trunk/MgDev/Bindings/src/Test/Php/WebLayoutAPI.php
   trunk/MgDev/Bindings/src/Test/Php/master.php
   trunk/MgDev/Bindings/src/Tools/ClassMapGen/ClassMapGen.csproj
   trunk/MgDev/Bindings/src/Tools/MgTestAdmin/MgTestAdmin.csproj
   trunk/MgDev/Bindings/src/Tools/MgTestAdmin/Properties/
   trunk/MgDev/Bindings/src/Tools/PhpPostProcess/PhpPostProcess.csproj
   trunk/MgDev/Bindings/src/Tools/StampVer/StampVer.csproj
   trunk/MgDev/Bindings/src/Tools/SwigPrepare/SwigPrepare.csproj
   trunk/MgDev/CMakeLists.txt
   trunk/MgDev/Common/Foundation/Data/BatchPropertyCollection.h
   trunk/MgDev/Common/Foundation/Data/PropertyCollection.h
   trunk/MgDev/Common/Foundation/Data/PropertyDefinition.h
   trunk/MgDev/Common/Foundation/Data/StringCollection.h
   trunk/MgDev/Common/Foundation/Exception/Exception.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemMeasure.h
   trunk/MgDev/Common/Geometry/GeometryCommon.h
   trunk/MgDev/Common/MapGuideCommon/MapLayer/Map.h
   trunk/MgDev/Common/PlatformBase/Data/IntCollection.h
   trunk/MgDev/Common/PlatformBase/Data/PropertyDefinitionCollection.h
   trunk/MgDev/Common/PlatformBase/MapLayer/LayerCollection.h
   trunk/MgDev/Common/PlatformBase/MapLayer/LayerGroupCollection.h
   trunk/MgDev/Common/PlatformBase/Services/ClassDefinition.h
   trunk/MgDev/Common/PlatformBase/Services/ClassDefinitionCollection.h
   trunk/MgDev/Common/PlatformBase/Services/FeatureSchema.h
   trunk/MgDev/Common/PlatformBase/Services/FeatureSchemaCollection.h
   trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.cpp
   trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.h
   trunk/MgDev/Doc/samples/javasamples/hello_map/display_spatial_reference.jsp
   trunk/MgDev/Doc/samples/javasamples/index.jsp
   trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/layer_visibility.jsp
   trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/toggle_roads_label.jsp
   trunk/MgDev/Doc/samples/javasamples/main.jsp
   trunk/MgDev/Doc/samples/javaviewersample/utilityfunctions.jsp
   trunk/MgDev/Doc/samples/phpsamples/common/common.php
   trunk/MgDev/Doc/samples/phpsamples/custom_output/createmapimage.php
   trunk/MgDev/Doc/samples/phpsamples/custom_output/eplot.php
   trunk/MgDev/Doc/samples/phpsamples/custom_output/multiplot.php
   trunk/MgDev/Doc/samples/phpsamples/interacting_with_layers/toggle_roads_label.php
   trunk/MgDev/Doc/samples/phpviewersample/JSON.php
   trunk/MgDev/Doc/samples/phpviewersample/plot/plot.php
   trunk/MgDev/Doc/samples/phpviewersample/utilityfunctions.php
   trunk/MgDev/Oem/
   trunk/MgDev/Oem/DWFTK/develop/global/src/CMakeLists.txt
   trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/CMakeLists.txt
   trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/Core.cpp
   trunk/MgDev/Oem/agg-2.4/include/agg_renderer_outline_aa.h
   trunk/MgDev/Oem/dbxml/db-4.8.26/dbinc/atomic.h
   trunk/MgDev/Oem/dbxml/db-4.8.26/mutex/mut_tas.c
   trunk/MgDev/Oem/php/CHANGES.TXT
   trunk/MgDev/Oem/php/PROVENANCE.TXT
   trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp
   trunk/MgDev/Server/src/Common/Manager/PermissionInfo.cpp
   trunk/MgDev/Server/src/Services/Feature/ServerDescribeSchema.cpp
   trunk/MgDev/Server/src/Services/Feature/ServerGetSpatialContexts.cpp
   trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
   trunk/MgDev/Server/src/Services/Resource/ApplicationResourceContentManager.cpp
   trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.cpp
   trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.h
   trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.cpp
   trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.h
   trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.cpp
   trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.h
   trunk/MgDev/Server/src/Services/Resource/SiteResourceContentManager.cpp
   trunk/MgDev/Server/src/Services/Tile/ServerTileService.cpp
   trunk/MgDev/Server/src/Services/Tile/TileCacheDefault.cpp
   trunk/MgDev/Web/src/CMakeLists.txt
   trunk/MgDev/Web/src/MapGuideApi/copydlls.bat
   trunk/MgDev/Web/src/mapadmin/resizablepagecomponents.php
   trunk/MgDev/Web/src/mapadmin/serverdatafunctions.php
   trunk/MgDev/Web/src/mapadmin/viewserverstatusbottom.php
   trunk/MgDev/Web/src/mapviewerjava/common.jsp
   trunk/MgDev/Web/src/mapviewerjava/init.jsp
   trunk/MgDev/Web/src/mapviewerjava/mainframe.jsp
   trunk/MgDev/Web/src/mapviewerphp/ajaxviewerabout.php
   trunk/MgDev/Web/src/mapviewerphp/buffer.php
   trunk/MgDev/Web/src/mapviewerphp/bufferui.php
   trunk/MgDev/Web/src/mapviewerphp/colorpicker.php
   trunk/MgDev/Web/src/mapviewerphp/createlayer.php
   trunk/MgDev/Web/src/mapviewerphp/gettingstarted.php
   trunk/MgDev/Web/src/mapviewerphp/legend.php
   trunk/MgDev/Web/src/mapviewerphp/legendui.php
   trunk/MgDev/Web/src/mapviewerphp/mainframe.php
   trunk/MgDev/Web/src/mapviewerphp/mapframe.php
   trunk/MgDev/Web/src/mapviewerphp/measure.php
   trunk/MgDev/Web/src/mapviewerphp/propertyctrl.php
   trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php
   trunk/MgDev/Web/src/mapviewerphp/quickplotpanel.php
   trunk/MgDev/Web/src/mapviewerphp/quickplotpreviewinner.php
   trunk/MgDev/Web/src/mapviewerphp/search.php
   trunk/MgDev/Web/src/mapviewerphp/searchprompt.php
   trunk/MgDev/Web/src/mapviewerphp/selectwithin.php
   trunk/MgDev/Web/src/mapviewerphp/selectwithinui.php
   trunk/MgDev/Web/src/mapviewerphp/taskframe.php
   trunk/MgDev/Web/src/schemareport/displayschema.php
   trunk/MgDev/Web/src/schemareport/main.php
   trunk/MgDev/Web/src/schemareport/showclass.php
   trunk/MgDev/Web/src/schemareport/showgeom.php
   trunk/MgDev/Web/src/viewerfiles/
   trunk/MgDev/Web/src/viewerfiles/ajaxmappane.templ
   trunk/MgDev/build.bat
   trunk/MgDev/cmake/configs/mapguide.conf.in
   trunk/MgDev/cmake/configs/php.ini.in
   trunk/MgDev/cmake_bootstrap.sh
   trunk/MgDev/cmake_linuxapt.sh
   trunk/MgDev/prepare_webtier_components.bat
   trunk/MgDev/setenvironment64.bat
Log:
Merged revision(s) 9916-9968 from sandbox/jng/vanilla_swig:
Add PHP 8.1.4 development pack contents to Oem/php. Everything needed to build a PHP \
extension is in here, so we will no longer try to use headers from the extracted php \
tarball in LinuxApt, though we will still patch whatever headers in here for ACE \
                compatibility on Windows if required
........
Patch PHP headers for ACE compatibility. Update provenance docs
........
Update binding projects to use an externally installed version of SWIG (defined by \
the SWIG_DIR environment variable, now checked by setenvironment64.bat)

Also update various .net projects to target net6.0

Also bring the PHP binding back into the solution and compiling against the PHP 8.1.4 \
                extension SDK (whose contents were committed previously)
........
Current SWIG git master doesn't quite properly handle overloads of overridden methods \
that only exist on the derived class and not the base. The following parts of the \
MapGuide API are affected by this problem:

 - MgCoordinateSystemMeasure::GetDistance
 - MgCoordinateSystemMeasure::GetAzimuth
 - MgCoordinateSystemMeasure::GetCoordinate
 - MgMap::Create

Until a solution is found for this (if there is even one), such problem signatures \
are %rename-d in monkey_patch.i to something else to avoid being treated as \
overloaded methods in PHP. Also disable all existing hacks in monkey_patch.i as we're \
starting from a clean slate. They were introduced when our environment was SWIG \
3.0.12 + PHP7.

Also update MapGuideApiGen.xml with changes that we previously patched in via the \
SwigPrepare tool because we were previously working on vanilla SWIG binding support \
out-of-source-tree. We can probably get rid of that tool now that we're continuing \
                this work in-source-tree.
........
Updated TODO
........
PHP Breakthrough! The cause of the null internal pointers was due to a bad/stale \
pointer.i typemap defn that handled downcasting. It was unconditionally setting the \
native pointer to the return_value zval when we should actually be setting it to the \
SWIG $result placeholder, which SWIG will appropriately determine to be either \
return_value (for methods that return pointers) or ZEND_THIS (for constructors). Not \
                setting ZEND_THIS for constructor calls was the cause of the null \
                internal pointers.
........
Get MgException throwing properly in PHP
........
Current SWIG git master is now smart enough to define classes with constants in PHP. \
As such, IMake no longer generates constants.php, instead it now generates \
constants.i, which contains the verbatim C++ constant class definitions. This file is \
included in the root php.i, which will generate the proper zend_* API calls to \
                register all these members as class constants.
........
Temporarily re-activate refcounting diagnostics. Update Test1.php sanity script with \
refined checks. Also add RefCounting.php to test refcounting (this script is expected \
to be run with the PHP extension built with refcounting diagnostic support.

The RefCounting.php script has verified that the MgException leaking if one has \
                multiple MgException catch blocks using the same variable name no \
                longer happens
........
Fix MgByteReader typemap and start fixing parts of the main test suite (explicit \
                casts now needed for some overloaded class method calls)
........
Make sure to stringify a MgByteReader in our Test1.php sanity test (to make sure SWIG \
                isn't doing any unwanted elision on our existing ToString methods)
........
Fix the bulk of the test failures on the PHP test suite:
 1. Don't bind the "Result" column as a BLOB. Bind it as a string
 2. When catching a MgException, return its exception code instead of class name due \
                to the flattened exception hierarchy
........
Fix PHP deprecation warnings
........
Target more projects to net6.0
........
On windows, the necessary PHP headers are already checked in to Oem/php thus it is no \
longer necessary to use the LinuxApt tarball as the source of PHP headers. \
prepare_webtier_components.bat has been updated to remove the need to extract the PHP \
                tarball in LinuxApt
........
Fix HTTPD_SRC env var
........
Suffix our refcounting diagnostic functions/macros with "Hook" to prevent calls to \
                JNIEnv->NewObject in the Java API binding being interpreted as a \
                macro
........
Update build.bat to build oem/server/web/bindings end-to-end. 
Update copydlls.bat to be usable from the root build.bat.
Update setenvironment64.bat to do a "dotnet restore" on the bindings solution (as it \
                has net6.0 projects with external nuget package references).
........
Fix output path for PhpApi.vcxproj to match the .net and Java bindings
........
First round of site administrator fixes for PHP8 compatibility. With these changes we \
can now successfully load a package:

 - Remove constants.php reference. Not required because constants are now baked into \
                the zend extension itself.
 - Fix up all classes to use __construct instead of a function of the same name
 - Strong-type all properties of the GeneralPropsRecord class
........
Fix up OnlineSelectorRecord class
........
PHP binding fixes:
 - Properly handle MapGuide APIs that can return nullptr
 - Fix monkey_patch.i to be more selective about what APIs are to be ignored
........
First round AJAX viewer fixes:
 - Remove references to constants.php
........
Fix AJAX viewer buffer tool. Comment out string un-escaping code that no longer works \
because get_magic_quotes_gpc has been removed. Time will tell if we can just remove \
                this outright instead of commenting out.
........
First round of AJAX viewer fixes for Java:
 - Remove references to MapGuideJavaApiEx 
 - Fix MgInitializeWebTier calls as the binding now respects camelCase Java naming \
                conventions
 - Remove catch blocks that caught for specific subclasses of MgException. Use the \
                new getExceptionCode() API to test for and handle specific exception \
                types
........
Do not apply most-derived-type checking for MgCoordinate* out typemap. PHP type \
checking in the SWIG wrapper is exact and does not take inheritance into account. \
This means we cannot pass a MgCoordinateXY to a method that takes a parameter of type \
MgCoordinate despite MgCoordinateXY being derived from MgCoordinate. This appears to \
                be the only type that requires such treatment
........
Fix up QuickPlot in PHP AJAX viewer. Force correct double/int data types where \
                required.
........
Point fusion to php8 sandbox branch
........
Current vanilla SWIG has issues with MgResourcePermission::ReadOnly for PHP because \
"readonly" is now a reserved keyword in PHP. To avoid this problem, all members of \
                MgResourcePermission are now prefixed with "Permission"
........
Fix PHP sample code
........
- Restore some xcopy exclusion files
- Make dotnet restore more reliable in setenvironment64.bat
- Document PHP migration issues
........
Fix up java viewer samples and fix up ajaxmappane.templ to guard against non-existent \
                commands
........
Fix up schema report for PHP8 compatibility
........
- Remove monolithic .net binding projects from Bindings.sln. Files to be physically \
                removed at a later time.
- Remove stub mapadmin/mapviewerphp directories as we no longer generate \
                constants.php that would go into these directories.
- Add missing .net implementation of MgLocalizer to our MapGuideCommon .net project
- Copy generated nuget packages to $INSTALL\Web\nuget so a MG installation will \
                always carry these files
- Add helper clean.bat to delete what needs deleting to ensure the next build \
                actually (re-)builds
- Update TODO.txt
........
- Add new MapViewerStub project whose purpose is to be built against our generated \
nuget packages and when published, produces a nice list of dlls that we need to copy \
                over to the bin folder of mapviewernet and our .net samples
- Ensure MapViewerStub is published and relevant dlls copied in build.bat
- Update clean.bat to also clean any locally cached MapGuide nuget package \
directories if they exist

........
Acquire/build SWIG in cmake_bootstrap.sh if required
........
XSS security fix for site administrator

........
Start fixing up the Linux build:
 - Don't add_subdirectory the BuildTools directory. This caused a double-definition \
of the IMake target. The one in BuildTools is the older one which will be removed \
                soon.
 - Add local atomic.h to DWFTK. This is a file we previously externally overlaid into \
/usr/include in our build VM images or docker build containers, so it was trusted to \
                exist. When building on bare-metal Ubuntu this isn't the case.
 - Use cmake packages to find pthread and uuid for DWFTK instead of find_library
 - Fix berkeley db build. 
   - Rename "__atomic_compare_exchange" to "__atomic_compare_exchange_db" to prevent \
                collision with a built-in of the same name
   - The previous fixes to get this compiling for MSVC 2019 on Windows was incomplete \
for Linux as there was still several cases of "atomic_init" that didn't get renamed \
                to "bdb_atomic_init"
 - Fix up SWIG acquision code to not wget the master archive if it already exists in \
                destination
 - Remove non-const profile() method from agg_renderer_outline_aa
 - Update various version numbers of LinuxApt tarballs in cmake_linuxapt.sh
 - Update php ./configure arguments for PHP 8.1
........
Fix up the Linux build some more:
 - Don't search for internal SWIG. This tool is now assumed to be externally \
                available
 - Remove more invalid params in PHP ./configure call in cmake_linuxapt.sh
 - Don't add_subdirectory the "legacy" Java and PHP binding directires in WebTier. \
                These directories will be removed eventually
 - CMake changes/fixes for binding targets:
   - Fix up IMake/SWIG invocation to now assume external SWIG (that we assume will be \
SWIG 4.1+). Primarily, the invocations should be done in the context of the original \
*source* directory and not the active cmake binary dir because the relative header \
paths in the *Constants and *ApiGen xml files are relative the the *source* \
                directory, not the active cmake binary dir
   - Remove hack PHP swig workarounds
   - Streamline expected include directories
........
More binding fixes on Linux:
 - Only build the .net SWIG glub libraries if building for the common libs subset. \
                Don't do this for the regular end-to-end full build.
 - Copy missing .java files to the expected build location for the Java binding
 - Add missing .jar file creation commands
 - Add missing install targets for PHP and Java bindings
 - Remove existing Java cleanup typemaps and replace it with the existing delete \
                method rename for certain classes from the legacy Java binding
 - Update TODO list
........
Document the needed method name changes for specific language binding targets
........
- Remove Oem/LinuxApt/build_apt.sh as cmake_linuxapt.sh is now the canonical build \
                script to build these components
- Update cmake_bootstrap.sh to download the SWIG source archive to /tmp/download so \
that if building within a docker container, we can volume mount /tmp/download \
externally so that we don't have to repeatedly download this archive if building \
                within a container
- Ensure proper lib dir install location for SWIG binding targets
- Update base php.ini.in cmake template to use the PHP 8.1 production default config
- Fix expected PHP handler in httpd config. PHP 8.1 now works!
- Update TODO again
........
Final set of changes to get a fully functional Linux build
- Add a jar_helper.sh helper script that helps us invoke jar to build the Java API \
jars without working path issues due to our peculiar way of invoking SWIG for the \
                CMake/Linux build of the Java API binding
- Fix various comment typos
- Document more language-specific API renames
........


Index: trunk/MgDev
===================================================================
--- trunk/MgDev	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev	2022-10-10 11:14:40 UTC (rev 9977)

Property changes on: trunk/MgDev
___________________________________________________________________
Modified: svn:mergeinfo
## -41,6 +41,6 ##
 /sandbox/jng/utfgrid:9179-9212
 /sandbox/jng/v30:8212-8227
 /sandbox/jng/v4:9511-9519
-/sandbox/jng/vanilla_swig:9757-9823,9825-9915
+/sandbox/jng/vanilla_swig:9757-9823,9825-9968
 /sandbox/jng/wfs_hits:9569-9577
 /sandbox/rfc94:5099-5163
\ No newline at end of property
Index: trunk/MgDev/Bindings
===================================================================
--- trunk/MgDev/Bindings	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings	2022-10-10 11:14:40 UTC (rev 9977)

Property changes on: trunk/MgDev/Bindings
___________________________________________________________________
Modified: svn:ignore
## -1 +1,2 ##
 linux-x64
+packages
Modified: trunk/MgDev/Bindings/TODO.txt
===================================================================
--- trunk/MgDev/Bindings/TODO.txt	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/TODO.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -8,7 +8,7 @@
  - [x] Consolidate Tools.sln into Bindings.sln
  - [ ] Relocate/remove existing test code
  - [x] Move packages dir up to to top-level MgDev subdirectory and make sure \
                nuget.config sources from this dir
- - [ ] Update build batch files to build bindings/portable
+ - [x] Update build batch files to build bindings/portable
  - [ ] Fix binding pre-build events to copy ACE/GEOS/lib_json dlls from their \
                respective Oem directories
  - Split .net binding into the Foundation/Geometry/PlatformBase/MapGuideCommon/Web \
                layout \
                (https://github.com/jumpinjackie/mapguide-api-bindings/issues/18)
    - [x] Add .targets files to each C# project so that native dlls are copied \
properly when consumed by legacy .net framework applications/libraries @@ -39,36 \
                +39,85 @@
  - Java binding
    - [ ] Running javadoc against the generated sources produces many errors. See if \
                we can fix them
    - [x] Verify test suite still passes (Windows)
+   - [ ] Tomcat/JSP now working on Linux, but none of the JSP code compiles (lots of \
                <MapGuide API symbol> cannot be resolved)
    - [ ] Verify test suite still passes (Linux)
  - [ ] Migrate to SWIG 4.1.0 \
                (https://github.com/jumpinjackie/mapguide-api-bindings/issues/36)
-   - [ ] SWIG 4.1 has not been released yet, so migrate to swig git master
+   - [x] SWIG 4.1 has not been released yet, so migrate to swig git master
    - [ ] Check if we can get rid of custom .net wstring marshaler (presumably SWIG \
                4.0 has better support in this area)
  - PHP 8 binding (https://github.com/jumpinjackie/mapguide-api-bindings/issues/21)
-   - [ ] Re-base work against PHP 8.1
-   - [ ] Make sure downcasting still works (eg. MgSiteConnection::CreateService \
                returns an appropriate MgService-derived subclass and not MgService)
-   - [ ] Make sure that our byte typemaps still work (test APIs that deal with \
                MgByteReader)
-   - [ ] Make sure we can throw MgException
-   - [ ] Make sure that caught MgException instances are properly released
-   - [ ] Get our binding building against the NTS (non-thread-safe) profile so it \
                can be used in both IIS and Apache (via mod_fcgid)
-   - [ ] Review the usage of our monkey-patched PHP traits and see whether they're \
                still necessary
-      - [ ] Especially the custom dtor for MgException-derived classes since there \
                is now only one MgException class with no subclasses
-   - [ ] Put all the generated code under a OSGeo\MapGuide namespace
-   - [ ] Get it building (Linux)
-   - [ ] Verify test suite still passes (Windows)
+   - [x] Re-base work against PHP 8.1
+   - !!! Immediate problems that need to be addressed (to get Test1.php passing \
again) !!! +      - [x] Figure out how to (if it is possible to) handle subclass \
methods of the same name but with different signatures +         - Example error: 
+            PHP Fatal error:  Declaration of \
MgCoordinateSystemMeasure::GetDistance(MgCoordinate|float|null $arg1, \
MgCoordinate|float|null $arg2, float $arg3, float $arg4): float must be compatible \
with MgMeasure::GetDistance(?MgCoordinate $arg1, ?MgCoordinate $arg2): float in \
Unknown on line 0 +         - MgCoordinateSystemMeasure::GetDistance signature is \
unique to MgCoordinateSystemMeasure (the subclass) that is not in the parent \
(MgMeasure) +         - Affected hierarchies with such methods:
+            - MgCoordinateSystemMeasure > MgMeasure
+            - MgMap > MgMapBase
+      - [x] Type information is being lost (something like \
https://github.com/swig/swig/issues/2216) +         - It seems new-ing any PHP proxy \
object is losing the underlying MgObject ptr. Dispatching any method causes AV \
because the this ptr is nullptr. +   - [x] Make sure downcasting still works (eg. \
MgSiteConnection::CreateService returns an appropriate MgService-derived subclass and \
not MgService) +   - [x] Make sure that our byte typemaps still work (test APIs that \
deal with MgByteReader) +   - [x] Make sure we can throw MgException
+   - [ ] Clean MgException stack trace formatting to match its PHP exception \
counterpart +   - [x] Make sure that caught MgException instances are properly \
released +   - [x] Get our binding building against the NTS (non-thread-safe) profile \
so it can be used in both IIS and Apache (via mod_fcgid) +   - [x] Review the usage \
of our monkey-patched PHP traits and see whether they're still necessary +      - [x] \
Especially the custom dtor for MgException-derived classes since there is now only \
one MgException class with no subclasses +   - [~] SKIP: Put all the generated code \
under a OSGeo\MapGuide namespace +   - [x] Get it building (Linux)
+   - [~] Verify test suite still passes (Windows)
+      - There is 1 failing test that sounds inconsequential, but should still be \
                fixed
    - [ ] Verify test suite still passes (Linux)
+   - It should be possible to now get rid of constants.php and define our various \
constants in the PHP extension itself! +      - [x] Pivot IMake to instead generate a \
SWIG interface file of constant class defns to be included in the main SWIG interface \
file +   - [x] (Linux) update php.ini.in cmake template to be based on a production \
PHP 8.1 config (it is still based on a PHP 5.6 one) +   - [x] (Linux) Remove \
                Oem/LinuxApt/build_apt.sh
  - Fix up existing web apps
-   - [ ] mapviewerjava
-   - [ ] mapviewerphp
-   - [ ] schemareport
-   - [ ] mapadmin
-   - [ ] fusion
-   - [ ] mapviewernet
+   - [x] mapviewerjava
+   - [x] mapviewerphp
+      - [x] Fix a method overload issue in quickplotgeneratepicture.php
+      
+      PHP Fatal error:  Uncaught TypeError: No matching function for overloaded \
'MgRenderingService_RenderMap' in \
C:\Workspace\mapguide\MgDev\Release64\Web\www\mapviewerphp\quickplotgeneratepicture.php:115
 +Stack trace:
+#0 C:\Workspace\mapguide\MgDev\Release64\Web\www\mapviewerphp\quickplotgeneratepicture.php(115): \
MgRenderingService->RenderMap(Object(MgMap), Object(MgSelection), \
Object(MgCoordinateXY), 2500, 2081, 1786, Object(MgColor), 'PNG', false) +
+          - Suspect that the 3rd param (MgCoordinateXY) is not passing as its parent \
(MgCoordinate) +          - Need to setup the same parameter tests in a debuggable \
PHP script to find out +      
+   - [x] schemareport
+   - [x] mapadmin
+   - [x] fusion
+   - [x] mapviewernet
+      - It looks like mapviewernet *can* work with the netstandard2.0 package, but \
there is some setup work required first +        - [x] Create a new stub net48 \
project that consumes the created nuget packages +        - [x] Perform a \
framework-dependent publish of this project as part of build (do this after the .net \
bindings are built). Copy all the dlls in this published dir to mapviewernet/bin +    \
- [x] Tools like buffer are throwing "potentially dangerous Request.Form" errors. \
Need to find the right setting to apply to revert to legacy behavior. +        - Copy \
the publish output into the mapviewernet/bin directory on install layout preparation. \
We expect this to have +           - The OSGeo.* assemblies
+           - The supporting native dlls
      - If raw .aspx files cannot consume our netstandard2.0 package, retian \
                Oem/SwigEx for the purpose of building "legacy" .net bindings
-   - [ ] MapGuide Developer's Guide
-   - [ ] viewer samples (PHP)
-   - [ ] viewer samples (Java)
+        - ( ) If this is indeed the case, replace the NMake-based .net projects \
(that call csc.exe) with SDK-style csproj files that target net48 +   - [x] MapGuide \
Developer's Guide +   - [x] viewer samples (PHP)
+   - [x] viewer samples (Java)
    - [ ] viewer samples (.net)
      - Give the .net viewer samples the same migration plan as mapviewernet
+   - [ ] Include a web.config for all .net directories with the required settings to \
avoid needing to set this information with installer or MgInstantSetup: +     - Add \
assembly reference to netstandard +     - Enable legacy request validation mode
+     - Target .net Framework 4.8
+ - [x] Document cases where APIs have been renamed on certain language targets
+   - MgCoordinateSystemMeasure
+      - GetDistance -> GetDistanceSimple
+      - GetAzimuth -> GetAzimuthSimple
+      - GetCoordinate -> GetCoordinateSimple
+   - MgMap
+      - Create -> CreateStateless
+   - MgPropertyDefinition/MgClassDefinition/MgFeatureSchema
+      - Delete -> MarkAsDeleted
+   - Mg*Collection
+      - Add -> AddItem
  - Revise API documentation strategy
    - [ ] Don't use doxygen. Instead use the appropriate docgen tool for the \
                languages we support:
      - PHP: phpDocumentor (https://phpdoc.org/)

Modified: trunk/MgDev/Bindings/src/Bindings/Bindings.sln
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Bindings.sln	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/Bindings.sln	2022-10-10 11:14:40 UTC (rev 9977)
@@ -3,18 +3,6 @@
 # Visual Studio Version 17
 VisualStudioVersion = 17.0.31912.275
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DotNetUnmanagedApi", \
                "DotNet\DotNetUnmanagedApi.vcxproj", \
                "{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}"
-	ProjectSection(ProjectDependencies) = postProject
-		{795B1B0E-4EC8-469D-B641-E26324266FBF} = {795B1B0E-4EC8-469D-B641-E26324266FBF}
-		{78619D0E-D3F9-4DDF-B90E-F99CB03DFC44} = {78619D0E-D3F9-4DDF-B90E-F99CB03DFC44}
-		{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4} = {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}
-		{B601F04C-0D42-4AFC-A092-B31185E2EA8C} = {B601F04C-0D42-4AFC-A092-B31185E2EA8C}
-		{B797917B-6842-467C-8B14-E00B76A91247} = {B797917B-6842-467C-8B14-E00B76A91247}
-		{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425} = {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}
-		{5287A594-4D4F-43FE-A281-E279AB708CF1} = {5287A594-4D4F-43FE-A281-E279AB708CF1}
-		{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0} = {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}
-	EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IMake", \
"..\IMake\IMake.vcxproj", "{B601F04C-0D42-4AFC-A092-B31185E2EA8C}"  EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution \
Items", "{8B6FBCB3-F11C-4AB9-AEE5-6A272E31EA7F}" @@ -32,13 +20,6 @@
 		{B601F04C-0D42-4AFC-A092-B31185E2EA8C} = {B601F04C-0D42-4AFC-A092-B31185E2EA8C}
 	EndProjectSection
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MapGuideDotNetApi", \
"..\Managed\DotNet\MapGuideDotNetApi\MapGuideDotNetApi.csproj", \
                "{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}"
-	ProjectSection(ProjectDependencies) = postProject
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E} = {FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "monolith", "monolith", \
                "{59509894-F4A9-4C44-8B39-8B5115384DD0}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FoundationApi", \
"DotNet\Foundation\FoundationApi.vcxproj", "{73C62FF2-C188-4A61-929E-2F112D7E17AA}"  \
ProjectSection(ProjectDependencies) = postProject  \
{B601F04C-0D42-4AFC-A092-B31185E2EA8C} = {B601F04C-0D42-4AFC-A092-B31185E2EA8C} @@ \
-100,7 +81,6 @@  {B601F04C-0D42-4AFC-A092-B31185E2EA8C} = \
{B601F04C-0D42-4AFC-A092-B31185E2EA8C}  {B994F673-EB8E-4C65-8884-B56AB8783115} = \
{B994F673-EB8E-4C65-8884-B56AB8783115}  {B797917B-6842-467C-8B14-E00B76A91247} = \
                {B797917B-6842-467C-8B14-E00B76A91247}
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4} = {4A3F2DA2-F53F-48EE-9505-8285F3E089D4}
 		{73C62FF2-C188-4A61-929E-2F112D7E17AA} = {73C62FF2-C188-4A61-929E-2F112D7E17AA}
 		{42FC41FD-742B-4AED-816E-C211F1B07F3F} = {42FC41FD-742B-4AED-816E-C211F1B07F3F}
 	EndProjectSection
@@ -139,6 +119,19 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Security", \
"..\..\..\Common\Security\Security.vcxproj", "{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}" \
EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhpApi", \
"Php\PhpApi.vcxproj", "{696D2664-D17F-4357-8A19-2B5DC4B29962}" \
+	ProjectSection(ProjectDependencies) = postProject \
+		{795B1B0E-4EC8-469D-B641-E26324266FBF} = {795B1B0E-4EC8-469D-B641-E26324266FBF} \
+		{78619D0E-D3F9-4DDF-B90E-F99CB03DFC44} = {78619D0E-D3F9-4DDF-B90E-F99CB03DFC44} \
+		{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4} = {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4} \
+		{B601F04C-0D42-4AFC-A092-B31185E2EA8C} = {B601F04C-0D42-4AFC-A092-B31185E2EA8C} \
+		{B797917B-6842-467C-8B14-E00B76A91247} = {B797917B-6842-467C-8B14-E00B76A91247} \
+		{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425} = {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425} \
+		{5287A594-4D4F-43FE-A281-E279AB708CF1} = {5287A594-4D4F-43FE-A281-E279AB708CF1} \
+		{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B} = {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B} \
+		{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0} = {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0} \
+	EndProjectSection +EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|x64 = Debug|x64
@@ -147,12 +140,6 @@
 		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Debug|x64.ActiveCfg = Debug|x64
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Debug|x64.Build.0 = Debug|x64
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Debug|x86.ActiveCfg = Debug|x64
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Release|x64.ActiveCfg = Release|x64
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Release|x64.Build.0 = Release|x64
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E}.Release|x86.ActiveCfg = Release|x64
 		{B601F04C-0D42-4AFC-A092-B31185E2EA8C}.Debug|x64.ActiveCfg = Debug|x64
 		{B601F04C-0D42-4AFC-A092-B31185E2EA8C}.Debug|x86.ActiveCfg = Debug|x64
 		{B601F04C-0D42-4AFC-A092-B31185E2EA8C}.Release|x64.ActiveCfg = Release|x64
@@ -165,14 +152,6 @@
 		{C02F44CB-D916-428D-A1A5-04E225A2A4EC}.Release|x64.ActiveCfg = Release|x64
 		{C02F44CB-D916-428D-A1A5-04E225A2A4EC}.Release|x64.Build.0 = Release|x64
 		{C02F44CB-D916-428D-A1A5-04E225A2A4EC}.Release|x86.ActiveCfg = Release|x64
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Debug|x64.Build.0 = Debug|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Debug|x86.Build.0 = Debug|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Release|x64.ActiveCfg = Release|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Release|x64.Build.0 = Release|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Release|x86.ActiveCfg = Release|Any CPU
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4}.Release|x86.Build.0 = Release|Any CPU
 		{73C62FF2-C188-4A61-929E-2F112D7E17AA}.Debug|x64.ActiveCfg = Debug|x64
 		{73C62FF2-C188-4A61-929E-2F112D7E17AA}.Debug|x64.Build.0 = Debug|x64
 		{73C62FF2-C188-4A61-929E-2F112D7E17AA}.Debug|x86.ActiveCfg = Debug|x64
@@ -363,16 +342,21 @@
 		{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|x64.Build.0 = Release|x64
 		{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|x86.ActiveCfg = Release|Win32
 		{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|x86.Build.0 = Release|Win32
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Debug|x64.ActiveCfg = Debug|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Debug|x64.Build.0 = Debug|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Debug|x86.ActiveCfg = Debug|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Debug|x86.Build.0 = Debug|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Release|x64.ActiveCfg = Release|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Release|x64.Build.0 = Release|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Release|x86.ActiveCfg = Release|x64
+		{696D2664-D17F-4357-8A19-2B5DC4B29962}.Release|x86.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
-		{FDC09E9D-72BB-4C74-B88B-727D9D1D6C4E} = {59509894-F4A9-4C44-8B39-8B5115384DD0}
 		{B601F04C-0D42-4AFC-A092-B31185E2EA8C} = {99132700-5CAD-4540-9939-7502C1A448EA}
 		{C02F44CB-D916-428D-A1A5-04E225A2A4EC} = {664329B8-67BD-4D38-AE4B-A2920B038C09}
-		{4A3F2DA2-F53F-48EE-9505-8285F3E089D4} = {59509894-F4A9-4C44-8B39-8B5115384DD0}
-		{59509894-F4A9-4C44-8B39-8B5115384DD0} = {A9257857-9844-4CEA-AF02-A7D8AB8F46AB}
 		{73C62FF2-C188-4A61-929E-2F112D7E17AA} = {025034E6-A625-427B-AA99-5158095ED5F9}
 		{120AC2A9-5EBE-4512-9FF7-54EA04192196} = {025034E6-A625-427B-AA99-5158095ED5F9}
 		{B994F673-EB8E-4C65-8884-B56AB8783115} = {025034E6-A625-427B-AA99-5158095ED5F9}
@@ -399,6 +383,7 @@
 		{B797917B-6842-467C-8B14-E00B76A91247} = {8CF61B8E-3BE0-4F25-B663-DFB082A67F00}
 		{795B1B0E-4EC8-469D-B641-E26324266FBF} = {8CF61B8E-3BE0-4F25-B663-DFB082A67F00}
 		{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B} = {8CF61B8E-3BE0-4F25-B663-DFB082A67F00}
+		{696D2664-D17F-4357-8A19-2B5DC4B29962} = {323AEA7C-774B-49D8-8D34-7A766288C549}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {733BCCC2-0431-4AB7-ABB6-AAE81AB54C48}

Modified: trunk/MgDev/Bindings/src/Bindings/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/CMakeLists.txt	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Bindings/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev \
9977) @@ -1,7 +1,23 @@
-add_subdirectory(DotNet)
-#if (WITH_JAVA)
-#    add_subdirectory(Java)
-#endif (WITH_JAVA)
-#if (WITH_PHP)
-#    add_subdirectory(Php)
-#endif (WITH_PHP)
\ No newline at end of file
+# These include dirs will be common for all language binding C++ glue being built, \
so define it here +include_directories(
+    ${MG_COMMON_DIR}/MdfModel
+    ${MG_COMMON_DIR}/Foundation
+    ${MG_COMMON_DIR}/Geometry
+    ${MG_COMMON_DIR}/PlatformBase
+    ${MG_COMMON_DIR}/MapGuideCommon
+    ${ACE_INCLUDE_DIR}
+    ${MG_WEB_DIR}/src/HttpHandler
+    ${MG_WEB_DIR}/src/WebSupport
+    ${MG_WEB_DIR}/src/WebApp
+    ${XERCESC_INCLUDE_DIR}
+)
+
+# We only need to build the .net SWIG glue libs if building for the common subset
+# We don't build this in a regular full end-to-end MG build
+if (MG_COMMON_SUBSET_ONLY)
+    add_subdirectory(DotNet)
+endif (MG_COMMON_SUBSET_ONLY)
+if (WITH_JAVA)
+    add_subdirectory(Java)
+endif (WITH_JAVA)
+add_subdirectory(Php)
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/CMakeLists.txt	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/CMakeLists.txt	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -1,16 +1,3 @@
-include_directories(
-    ${MG_COMMON_DIR}/MdfModel
-    ${MG_COMMON_DIR}/Foundation
-    ${MG_COMMON_DIR}/Geometry
-    ${MG_COMMON_DIR}/PlatformBase
-    ${MG_COMMON_DIR}/MapGuideCommon
-    ${ACE_INCLUDE_DIR}
-    ${MG_WEB_DIR}/src/HttpHandler
-    ${MG_WEB_DIR}/src/WebSupport
-    ${MG_WEB_DIR}/src/WebApp
-    ${XERCESC_INCLUDE_DIR}
-)
-
 add_subdirectory(Foundation)
 add_subdirectory(Geometry)
 add_subdirectory(PlatformBase)

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/DotNetUnmanagedApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/DotNetUnmanagedApi.vcxproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/DotNetUnmanagedApi.vcxproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l C# -o \
"$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi\Constants.cs" -t  copy \
"$(ProjectDir)dotnetcore.i" "$(ProjectDir)language.i"  \
"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l C#
-"..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideDotNetUnmanagedApi -o "$(ProjectDir)MgApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi" MapGuideApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideDotNetUnmanagedApi -o "$(ProjectDir)MgApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi" MapGuideApi.i  del /Q \
..\..\Managed\DotNet\MapGuideDotNetApi\MapGuideDotNetUnmanagedApi.cs  </Command>
     </PreBuildEvent>
@@ -97,7 +97,7 @@
 "..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l C# -o \
"$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi\Constants.cs" -t  copy \
"$(ProjectDir)dotnetcore.i" "$(ProjectDir)language.i"  \
"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l C#
-"..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideDotNetUnmanagedApi -o "$(ProjectDir)MgApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi" MapGuideApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideDotNetUnmanagedApi -o "$(ProjectDir)MgApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\Managed\DotNet\MapGuideDotNetApi" MapGuideApi.i  del /Q \
..\..\Managed\DotNet\MapGuideDotNetApi\MapGuideDotNetUnmanagedApi.cs  </Command>
     </PreBuildEvent>

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/CMakeLists.txt	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/CMakeLists.txt	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -51,6 +51,13 @@
             -x "FoundationApi"
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_BINARY_DIR}/FoundationApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E copy
+            ${CMAKE_CURRENT_SOURCE_DIR}/FoundationApi_Properties.i
+            ${CMAKE_CURRENT_BINARY_DIR}/FoundationApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_SOURCE_DIR}/FoundationApi_Properties.i
     COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [DotNet]. Output Dir: \
${MG_DOTNET_PROJECT_DIR}  COMMAND ${SWIG_EXECUTABLE} -c++ -csharp 
             ${SWIG_DOTNET_DEFS} -DDOTNETCORE -DSWIG_CSHARP_NO_EXCEPTION_HELPER
@@ -61,18 +68,15 @@
             -o "${CMAKE_CURRENT_BINARY_DIR}/FoundationUnmanagedApi_wrap.cpp"
             -outdir "${MG_DOTNET_PROJECT_DIR}" 
             "${CMAKE_CURRENT_BINARY_DIR}/FoundationApi.i"
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 target_link_libraries(FoundationUnmanagedApi
     ${ACE_LIBRARY}
     MgFoundation${MG_VERSION_SUFFIX}
-    #MgGeometry${MG_VERSION_SUFFIX}
-    #MgPlatformBase${MG_VERSION_SUFFIX}
-    #MgMapGuideCommon${MG_VERSION_SUFFIX}
-    #MgHttpHandler${MG_VERSION_SUFFIX}
-    #MgMdfModel${MG_VERSION_SUFFIX}
-    #MgMdfParser${MG_VERSION_SUFFIX}
-    #MgWebApp${MG_VERSION_SUFFIX}
     ${XERCESC_LIBRARIES}
 )
 

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/FoundationApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/FoundationApi.vcxproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Foundation/FoundationApi.vcxproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)FoundationConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)FoundationApiGen.xml" -l C# -x "FoundationApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module FoundationUnmanagedApi -o \
"$(ProjectDir)FoundationUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation" FoundationApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module FoundationUnmanagedApi -o \
"$(ProjectDir)FoundationUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation" FoundationApi.i  del \
/Q ..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation\FoundationUnmanagedApi.cs  copy \
/Y "$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\ACE*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\xerces-c*.*" \
"$(TargetDir)\native\" @@ -101,7 +101,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)FoundationConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)FoundationApiGen.xml" -l C# -x "FoundationApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module FoundationUnmanagedApi -o \
"$(ProjectDir)FoundationUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation" FoundationApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module FoundationUnmanagedApi -o \
"$(ProjectDir)FoundationUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation" FoundationApi.i  del \
/Q ..\..\..\Managed\DotNet\OSGeo.MapGuide.Foundation\FoundationUnmanagedApi.cs  copy \
/Y "$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\ACE*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\xerces-c*.*" \
"$(TargetDir)\native\"

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/CMakeLists.txt	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/CMakeLists.txt	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -49,6 +49,13 @@
             -x "GeometryApi"
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_BINARY_DIR}/GeometryApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E copy
+            ${CMAKE_CURRENT_SOURCE_DIR}/GeometryApi_Properties.i
+            ${CMAKE_CURRENT_BINARY_DIR}/GeometryApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_SOURCE_DIR}/GeometryApi_Properties.i
     COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [DotNet]. Output Dir: \
${MG_DOTNET_PROJECT_DIR}  COMMAND ${SWIG_EXECUTABLE} -c++ -csharp 
             ${SWIG_DOTNET_DEFS} -DDOTNETCORE -DSWIG_CSHARP_NO_EXCEPTION_HELPER
@@ -59,6 +66,10 @@
             -o "${CMAKE_CURRENT_BINARY_DIR}/GeometryUnmanagedApi_wrap.cpp"
             -outdir "${MG_DOTNET_PROJECT_DIR}" 
             "${CMAKE_CURRENT_BINARY_DIR}/GeometryApi.i"
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 target_link_libraries(GeometryUnmanagedApi

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/GeometryApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/GeometryApi.vcxproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Geometry/GeometryApi.vcxproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)GeometryConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry\Constants.cs" -t  copy \
"$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)GeometryApiGen.xml" -l C# -x "GeometryApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module GeometryUnmanagedApi -o \
"$(ProjectDir)GeometryUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry" GeometryApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module GeometryUnmanagedApi -o \
"$(ProjectDir)GeometryUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry" GeometryApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry\GeometryUnmanagedApi.cs  </Command>
     </PreBuildEvent>
@@ -97,7 +97,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)GeometryConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry\Constants.cs" -t  copy \
"$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)GeometryApiGen.xml" -l C# -x "GeometryApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module GeometryUnmanagedApi -o \
"$(ProjectDir)GeometryUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry" GeometryApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module GeometryUnmanagedApi -o \
"$(ProjectDir)GeometryUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry" GeometryApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.Geometry\GeometryUnmanagedApi.cs  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\GEOS*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgGeometry*.*" \
"$(TargetDir)\native\"

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/CMakeLists.txt	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/CMakeLists.txt	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -49,6 +49,17 @@
             -x "MapGuideCommonApi"
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
+    # Nothing in the MapGuideCommon API surface currently declares .net property \
wrapper annotations so +    # no _Properties.i file is generated at the moment. \
If/when that changes, uncomment the lines below to +    # ensure this generated file \
is "moved" to the proper location +
+    # COMMAND ${CMAKE_COMMAND} -E remove -f
+    #         ${CMAKE_CURRENT_BINARY_DIR}/MapGuideCommonApi_Properties.i
+    # COMMAND ${CMAKE_COMMAND} -E copy
+    #         ${CMAKE_CURRENT_SOURCE_DIR}/MapGuideCommonApi_Properties.i
+    #         ${CMAKE_CURRENT_BINARY_DIR}/MapGuideCommonApi_Properties.i
+    # COMMAND ${CMAKE_COMMAND} -E remove -f
+    #         ${CMAKE_CURRENT_SOURCE_DIR}/MapGuideCommonApi_Properties.i
     COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [DotNet]. Output Dir: \
${MG_DOTNET_PROJECT_DIR}  COMMAND ${SWIG_EXECUTABLE} -c++ -csharp 
             ${SWIG_DOTNET_DEFS} -DDOTNETCORE -DSWIG_CSHARP_NO_EXCEPTION_HELPER
@@ -59,6 +70,10 @@
             -o "${CMAKE_CURRENT_BINARY_DIR}/MapGuideCommonUnmanagedApi_wrap.cpp"
             -outdir "${MG_DOTNET_PROJECT_DIR}" 
             "${CMAKE_CURRENT_BINARY_DIR}/MapGuideCommonApi.i"
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 target_link_libraries(MapGuideCommonUnmanagedApi

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/MapGuideCommonApi.vcxproj
 ===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/MapGuideCommonApi.vcxproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/MapGuideCommon/MapGuideCommonApi.vcxproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)MapGuideCommonConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)MapGuideCommonApiGen.xml" -l C# -x "MapGuideCommonApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideCommonUnmanagedApi -o \
"$(ProjectDir)MapGuideCommonUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon" \
MapGuideCommonApi.i +"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideCommonUnmanagedApi -o \
"$(ProjectDir)MapGuideCommonUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon" \
MapGuideCommonApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon\MapGuideCommonUnmanagedApi.cs  \
copy /Y "$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgMapGuideCommon*.*" \
"$(TargetDir)\native\"  </Command>
@@ -98,7 +98,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)MapGuideCommonConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)MapGuideCommonApiGen.xml" -l C# -x "MapGuideCommonApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideCommonUnmanagedApi -o \
"$(ProjectDir)MapGuideCommonUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon" \
MapGuideCommonApi.i +"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module MapGuideCommonUnmanagedApi -o \
"$(ProjectDir)MapGuideCommonUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon" \
MapGuideCommonApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.MapGuideCommon\MapGuideCommonUnmanagedApi.cs  \
copy /Y "$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgMapGuideCommon*.*" \
"$(TargetDir)\native\"  </Command>

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/CMakeLists.txt	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/CMakeLists.txt	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -49,6 +49,13 @@
             -x "PlatformBaseApi"
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_BINARY_DIR}/PlatformBaseApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E copy
+            ${CMAKE_CURRENT_SOURCE_DIR}/PlatformBaseApi_Properties.i
+            ${CMAKE_CURRENT_BINARY_DIR}/PlatformBaseApi_Properties.i
+    COMMAND ${CMAKE_COMMAND} -E remove -f
+            ${CMAKE_CURRENT_SOURCE_DIR}/PlatformBaseApi_Properties.i
     COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [DotNet]. Output Dir: \
${MG_DOTNET_PROJECT_DIR}  COMMAND ${SWIG_EXECUTABLE} -c++ -csharp 
             ${SWIG_DOTNET_DEFS} -DDOTNETCORE -DSWIG_CSHARP_NO_EXCEPTION_HELPER
@@ -59,6 +66,10 @@
             -o "${CMAKE_CURRENT_BINARY_DIR}/PlatformBaseUnmanagedApi_wrap.cpp"
             -outdir "${MG_DOTNET_PROJECT_DIR}" 
             "${CMAKE_CURRENT_BINARY_DIR}/PlatformBaseApi.i"
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 target_link_libraries(PlatformBaseUnmanagedApi

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/PlatformBaseApi.vcxproj
 ===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/PlatformBaseApi.vcxproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/PlatformBase/PlatformBaseApi.vcxproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)PlatformBaseConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)PlatformBaseApiGen.xml" -l C# -x "PlatformBaseApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module PlatformBaseUnmanagedApi -o \
"$(ProjectDir)PlatformBaseUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase" PlatformBaseApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module PlatformBaseUnmanagedApi -o \
"$(ProjectDir)PlatformBaseUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase" PlatformBaseApi.i  \
del /Q ..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase\PlatformBaseUnmanagedApi.cs
  copy /Y "$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgMdfParser*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgPlatformBase*.*" \
"$(TargetDir)\native\" @@ -99,7 +99,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)PlatformBaseConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase\Constants.cs" -t  \
copy "$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)PlatformBaseApiGen.xml" -l C# -x "PlatformBaseApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module PlatformBaseUnmanagedApi -o \
"$(ProjectDir)PlatformBaseUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase" PlatformBaseApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module PlatformBaseUnmanagedApi -o \
"$(ProjectDir)PlatformBaseUnmanagedApi_wrap.cpp" -outdir \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase" PlatformBaseApi.i  \
del /Q ..\..\..\Managed\DotNet\OSGeo.MapGuide.PlatformBase\PlatformBaseUnmanagedApi.cs
  copy /Y "$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgMdfParser*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Common\bin\$(Configuration)64\MgPlatformBase*.*" \
"$(TargetDir)\native\"

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Web/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Web/CMakeLists.txt	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Web/CMakeLists.txt	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -52,6 +52,13 @@
             -x "WebApi"
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
+    # COMMAND ${CMAKE_COMMAND} -E remove -f
+    #         ${CMAKE_CURRENT_BINARY_DIR}/WebApi_Properties.i
+    # COMMAND ${CMAKE_COMMAND} -E copy
+    #         ${CMAKE_CURRENT_SOURCE_DIR}/WebApi_Properties.i
+    #         ${CMAKE_CURRENT_BINARY_DIR}/WebApi_Properties.i
+    # COMMAND ${CMAKE_COMMAND} -E remove -f
+    #         ${CMAKE_CURRENT_SOURCE_DIR}/WebApi_Properties.i
     COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [DotNet]. Output Dir: \
${MG_DOTNET_PROJECT_DIR}  COMMAND ${SWIG_EXECUTABLE} -c++ -csharp 
             ${SWIG_DOTNET_DEFS} -DDOTNETCORE -DSWIG_CSHARP_NO_EXCEPTION_HELPER
@@ -62,6 +69,10 @@
             -o "${CMAKE_CURRENT_BINARY_DIR}/WebUnmanagedApi_wrap.cpp"
             -outdir "${MG_DOTNET_PROJECT_DIR}" 
             "${CMAKE_CURRENT_BINARY_DIR}/WebApi.i"
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 target_link_libraries(WebUnmanagedApi

Modified: trunk/MgDev/Bindings/src/Bindings/DotNet/Web/WebApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/DotNet/Web/WebApi.vcxproj	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/DotNet/Web/WebApi.vcxproj	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -60,7 +60,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)WebConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web\Constants.cs" -t  copy \
"$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)WebApiGen.xml" -l C# -x "WebApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module WebUnmanagedApi -o "$(ProjectDir)WebUnmanagedApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web" WebApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module WebUnmanagedApi -o "$(ProjectDir)WebUnmanagedApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web" WebApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.Web\WebUnmanagedApi.cs  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\MgHttpHandler*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\MgWebApp*.*" \
"$(TargetDir)\native\" @@ -102,7 +102,7 @@
 "..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)WebConstants.xml" -l C# -o \
"$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web\Constants.cs" -t  copy \
"$(ProjectDir)..\dotnetcore_split.i" "$(ProjectDir)language.i"  \
"..\..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)WebApiGen.xml" -l C# -x "WebApi"
-"..\..\..\Tools\swig\install\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module WebUnmanagedApi -o "$(ProjectDir)WebUnmanagedApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web" WebApi.i \
+"$(SWIG_DIR)\swig.exe" -c++ -csharp -DDOTNETCORE -DWIN32 \
-DSWIG_CSHARP_NO_EXCEPTION_HELPER -DSWIG_CSHARP_NO_STRING_HELPER \
-DSWIG_CSHARP_NO_WSTRING_HELPER -namespace OSGeo.MapGuide -nodefaultctor \
-nodefaultdtor -module WebUnmanagedApi -o "$(ProjectDir)WebUnmanagedApi_wrap.cpp" \
-outdir "$(ProjectDir)..\..\..\Managed\DotNet\OSGeo.MapGuide.Web" WebApi.i  del /Q \
..\..\..\Managed\DotNet\OSGeo.MapGuide.Web\WebUnmanagedApi.cs  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\MgHttpHandler*.*" \
"$(TargetDir)\native\"  copy /Y \
"$(ProjectDir)..\..\..\..\..\Web\bin\$(Configuration)64\MgWebApp*.*" \
"$(TargetDir)\native\"

Modified: trunk/MgDev/Bindings/src/Bindings/Java/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Java/CMakeLists.txt	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/Java/CMakeLists.txt	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -1,17 +1,6 @@
 project(MapGuideJavaApi)
 
-include_directories(${JNI_INCLUDE_DIRS}
-    ${MG_COMMON_DIR}/MdfModel
-    ${MG_COMMON_DIR}/Foundation
-    ${MG_COMMON_DIR}/Geometry
-    ${MG_COMMON_DIR}/PlatformBase
-    ${MG_COMMON_DIR}/MapGuideCommon
-    ${ACE_INCLUDE_DIR}
-    ${MG_WEB_DIR}/HttpHandler
-    ${MG_WEB_DIR}/WebSupport
-    ${MG_WEB_DIR}/WebApp
-    ${XERCESC_INCLUDE_DIR}
-)
+include_directories(${JNI_INCLUDE_DIRS})
 
 set(SWIG_JAVA_DEFS "")
 if (WIN32)
@@ -31,17 +20,17 @@
 
 message(STATUS "Using IMake at: ${IMAKE_TOOL}")
 add_custom_command(OUTPUT ${MapGuideJavaApi_SRCS}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${MG_JAVA_OUTPUT_DIR}
+    COMMAND ${CMAKE_COMMAND} -E make_directory \
${CMAKE_CURRENT_BINARY_DIR}/org/osgeo/mapguide  COMMAND ${CMAKE_COMMAND} -E echo \
                Regenerating constant classes
-    COMMAND ${IMAKE_TOOL} -p \
${CMAKE_CURRENT_BINARY_DIR}/../MapGuideApi/Constants.xml  +    COMMAND ${IMAKE_TOOL} \
                -p ${CMAKE_CURRENT_SOURCE_DIR}/../MapGuideApi/Constants.xml 
             -l Java 
             ${IMAKE_RELATIVE_RESOLUTION}
-            -o ${MG_JAVA_PROJECT_DIR}/org/osgeo/mapguide
+            -o ${CMAKE_CURRENT_BINARY_DIR}/org/osgeo/mapguide
             -t
     COMMAND ${CMAKE_COMMAND} -E copy
             ${CMAKE_CURRENT_BINARY_DIR}/java.i
             ${CMAKE_CURRENT_BINARY_DIR}/language.i
-    COMMAND ${IMAKE_TOOL} -p ../MapGuideApi/MapGuideApiGen.xml
+    COMMAND ${IMAKE_TOOL} -p \
                ${CMAKE_CURRENT_SOURCE_DIR}/../MapGuideApi/MapGuideApiGen.xml
             -l Java
             ${IMAKE_RELATIVE_RESOLUTION}
             -o ${CMAKE_CURRENT_BINARY_DIR}
@@ -53,11 +42,41 @@
             -module MapGuideJavaApi 
             -o "${CMAKE_CURRENT_BINARY_DIR}/MgApi_wrap.cpp" 
             ${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi.i
+    COMMAND ${CMAKE_COMMAND} -E echo Remove old class files
     COMMAND ${CMAKE_COMMAND} -E remove -f 
-            ${MG_JAVA_PROJECT_DIR}/org/osgeo/mapguide/*.class 
+            ${CMAKE_CURRENT_BINARY_DIR}/org/osgeo/mapguide/*.class 
+    COMMAND ${CMAKE_COMMAND} -E echo Copy predefined java sources
     COMMAND ${MOVE_COMMAND} ${MOVE_ARGS}
-            *.java
-            ${MG_JAVA_PROJECT_DIR}/org/osgeo/mapguide
+            ${CMAKE_CURRENT_BINARY_DIR}/*.java
+            ${CMAKE_CURRENT_BINARY_DIR}/org/osgeo/mapguide
+    COMMAND ${CMAKE_COMMAND} -E echo Running javac
+    COMMAND ${Java_JAVAC_EXECUTABLE} -classpath ${CMAKE_CURRENT_BINARY_DIR} \
${CMAKE_CURRENT_BINARY_DIR}/org/osgeo/mapguide/*.java +    COMMAND ${CMAKE_COMMAND} \
-E echo Making sure jar_helper script is executable +    COMMAND chmod +x \
${CMAKE_CURRENT_BINARY_DIR}/jar_helper.sh +    COMMAND ${CMAKE_COMMAND} -E echo \
Creating MapGuideApi jar +    COMMAND ${CMAKE_CURRENT_BINARY_DIR}/jar_helper.sh
+            ${Java_JAR_EXECUTABLE}
+            ${CMAKE_CURRENT_BINARY_DIR}
+            MapGuideApi.jar
+            org/osgeo/mapguide/*.class
+    # COMMAND ${Java_JAR_EXECUTABLE} -cf 
+    #         ${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi.jar
+    #         -C ${CMAKE_CURRENT_BINARY_DIR}
+    #         org/osgeo/mapguide/*.class
+    COMMAND ${CMAKE_COMMAND} -E echo Creating MapGuideApi sources jar
+    COMMAND ${CMAKE_CURRENT_BINARY_DIR}/jar_helper.sh
+            ${Java_JAR_EXECUTABLE}
+            ${CMAKE_CURRENT_BINARY_DIR}
+            MapGuideApi-sources.jar
+            org/osgeo/mapguide/*.java
+    # COMMAND ${Java_JAR_EXECUTABLE} -cf 
+    #         ${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi-sources.jar
+    #         -C ${CMAKE_CURRENT_BINARY_DIR}
+    #         org/osgeo/mapguide/*.java
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
 add_library(MapGuideJavaApi${MG_VERSION_SUFFIX} SHARED ${MapGuideJavaApi_SRCS})
@@ -73,36 +92,29 @@
 endif (MSVC)
 add_dependencies(MapGuideJavaApi${MG_VERSION_SUFFIX} IMake)
 
-# if (UNIX)
-#     install(TARGETS MapGuideJavaApi${MG_VERSION_SUFFIX} DESTINATION \
                ${LIB_INSTALL_DIR} COMPONENT ${MG_COMPONENT})
-#     install_symlink(${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/libMapGuideJavaApi${MG_VERSION_SUFFIX}.so \
                libMapGuideJavaApi.so ${MG_COMPONENT})
-#     set(MG_JARS
-#         "${MG_JAVA_OUTPUT_DIR}/MapGuideApi.jar"
-#         "${MG_JAVA_OUTPUT_DIR}/MapGuideApi-sources.jar"
-#     )
-#     install(FILES ${MG_JARS} DESTINATION ${MG_WWWROOT}/WEB-INF/lib)
-# endif (UNIX)
+if (UNIX)
+    message(STATUS "MapGuideJavaApi will install to: ${LIB_INSTALL_DIR}")
+    install(TARGETS MapGuideJavaApi${MG_VERSION_SUFFIX} DESTINATION \
${LIB_INSTALL_DIR} COMPONENT ${MG_COMPONENT}) +    \
install_symlink(libMapGuideJavaApi${MG_VERSION_SUFFIX}.so libMapGuideJavaApi.so \
${MG_COMPONENT}) +    set(MG_JARS
+        "${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi.jar"
+        "${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi-sources.jar"
+    )
+    install(FILES ${MG_JARS} DESTINATION ${MG_WWWROOT}/WEB-INF/lib)
+endif (UNIX)
 target_link_libraries(MapGuideJavaApi${MG_VERSION_SUFFIX}
     ${ACE_LIBRARY}
     #${JNI_LIBRARIES}
-    ${MG_FOUNDATION_LIBRARY}
-    ${MG_GEOMETRY_LIBRARY}
-    ${MG_PLATFORMBASE_LIBRARY}
-    ${MG_COMMON_LIBRARY}
-    ${MG_HTTPHANDLER_LIBRARY}
-    ${MG_WEBAPP_LIBRARY}
-    ${MG_MDFMODEL_LIBRARY}
-    ${MG_MDFPARSER_LIBRARY}
-    ${MG_WEBSUPPORT_LIBRARY}
-    #MgFoundation${MG_VERSION_SUFFIX}
-    #MgGeometry${MG_VERSION_SUFFIX}
-    #MgPlatformBase${MG_VERSION_SUFFIX}
-    #MgMapGuideCommon${MG_VERSION_SUFFIX}
-    #MgHttpHandler${MG_VERSION_SUFFIX}
-    #MgMdfModel${MG_VERSION_SUFFIX}
-    #MgMdfParser${MG_VERSION_SUFFIX}
+    MgFoundation${MG_VERSION_SUFFIX}
+    MgGeometry${MG_VERSION_SUFFIX}
+    MgPlatformBase${MG_VERSION_SUFFIX}
+    MgMapGuideCommon${MG_VERSION_SUFFIX}
+    MgHttpHandler${MG_VERSION_SUFFIX}
+    MgMdfModel${MG_VERSION_SUFFIX}
+    MgMdfParser${MG_VERSION_SUFFIX}
     ${XERCESC_LIBRARIES}
-    #MgWebApp${MG_VERSION_SUFFIX}
+    MgWebApp${MG_VERSION_SUFFIX}
+    MgWebSupport${MG_VERSION_SUFFIX}
 )
 
 # Only needed for Linux
@@ -109,6 +121,14 @@
 if (UNIX)
     file(COPY "InitializeWebTier.cpp" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
     install( TARGETS MapGuideJavaApi${MG_VERSION_SUFFIX} DESTINATION \
"${MG_JAVA_OUTPUT_DIR}/${MG_DISTRO}" ) +    file(COPY "jar_helper.sh" DESTINATION \
${CMAKE_CURRENT_BINARY_DIR})  endif (UNIX)
 
-file(COPY "java.i" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
\ No newline at end of file
+file(COPY "java.i" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+# Set RPATH to avoid needing to use LD_LIBRARY_PATH in various configs
+if(MG_CPU EQUAL 64)
+    set_target_properties(MapGuideJavaApi${MG_VERSION_SUFFIX} PROPERTIES \
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../lib64") +else(MG_CPU EQUAL 64)
+    set_target_properties(MapGuideJavaApi${MG_VERSION_SUFFIX} PROPERTIES \
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../lib") +endif(MG_CPU EQUAL 64)
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Bindings/Java/JavaApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Java/JavaApi.vcxproj	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/Java/JavaApi.vcxproj	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -58,7 +58,7 @@
       <Command>"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l Java -o . -t  copy .\java.i \
.\language.i  "..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l Java
-"..\..\Tools\swig\install\swig.exe" -c++ -java -DJAVA -DWIN32 -package \
org.osgeo.mapguide -nodefaultctor -nodefaultdtor -module MapGuideJavaApi -o \
MgApi_wrap.cpp MapGuideApi.i +"$(SWIG_DIR)\swig.exe" -c++ -java -DJAVA -DWIN32 \
-package org.osgeo.mapguide -nodefaultctor -nodefaultdtor -module MapGuideJavaApi -o \
MgApi_wrap.cpp MapGuideApi.i  move /Y "$(ProjectDir)*.java" \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide"  if exist \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide\*.class" del \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide\*.class"</Command>  \
</PreBuildEvent> @@ -105,7 +105,7 @@
       <Command>"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l Java -o . -t  copy .\java.i \
.\language.i  "..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l Java
-"..\..\Tools\swig\install\swig.exe" -c++ -java -DJAVA -DWIN32 -package \
org.osgeo.mapguide -nodefaultctor -nodefaultdtor -module MapGuideJavaApi -o \
MgApi_wrap.cpp MapGuideApi.i +"$(SWIG_DIR)\swig.exe" -c++ -java -DJAVA -DWIN32 \
-package org.osgeo.mapguide -nodefaultctor -nodefaultdtor -module MapGuideJavaApi -o \
MgApi_wrap.cpp MapGuideApi.i  move /Y *.java \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide"  if exist \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide\*.class" del \
"$(ProjectDir)..\..\Managed\Java\org\osgeo\mapguide\*.class"</Command>  \
</PreBuildEvent>

Copied: trunk/MgDev/Bindings/src/Bindings/Java/jar_helper.sh (from rev 9968, \
sandbox/jng/vanilla_swig/Bindings/src/Bindings/Java/jar_helper.sh) \
                ===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Java/jar_helper.sh	                        (rev \
                0)
+++ trunk/MgDev/Bindings/src/Bindings/Java/jar_helper.sh	2022-10-10 11:14:40 UTC (rev \
9977) @@ -0,0 +1,13 @@
+#!/bin/sh
+JAR_CMD=$1
+WORKDIR=$2
+JAR_NAME=$3
+REL_PATH=$4
+echo "pwd: $PWD"
+echo "Jar command: $JAR_CMD"
+echo "In directory: $WORKDIR"
+echo "Jar name: $JAR_NAME"
+echo "Contents to package: $REL_PATH"
+cd "$WORKDIR" || exit
+echo "Executing command: $JAR_CMD -cf $JAR_NAME $REL_PATH"
+$JAR_CMD -cf $JAR_NAME $REL_PATH || exit
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Bindings/MapGuideApi/Constants.xml
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/MapGuideApi/Constants.xml	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/MapGuideApi/Constants.xml	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -6,15 +6,15 @@
    Type replacements.
 -->
 <PHPTypeReplacements>
-    <TypeReplacement oldtype="STRING" newtype="" />
-    <TypeReplacement oldtype="INT8" newtype="" />
-    <TypeReplacement oldtype="INT16" newtype="" />
-    <TypeReplacement oldtype="INT32" newtype="" />
-    <TypeReplacement oldtype="int" newtype="" />
-    <TypeReplacement oldtype="float" newtype="" />
-    <TypeReplacement oldtype="double" newtype="" />
-    <TypeReplacement oldtype="static" newtype="" />
-    <TypeReplacement oldtype="bool" newtype="" />
+    <TypeReplacement oldtype="STRING" newtype="STRING" />
+    <TypeReplacement oldtype="INT8" newtype="INT8" />
+    <TypeReplacement oldtype="INT16" newtype="INT16" />
+    <TypeReplacement oldtype="INT32" newtype="INT32" />
+    <TypeReplacement oldtype="int" newtype="int" />
+    <TypeReplacement oldtype="float" newtype="float" />
+    <TypeReplacement oldtype="double" newtype="double" />
+    <TypeReplacement oldtype="static" newtype="static" />
+    <TypeReplacement oldtype="bool" newtype="bool" />
 </PHPTypeReplacements>
 <CSharpTypeReplacements>
     <TypeReplacement oldtype="STRING" newtype="string" />

Modified: trunk/MgDev/Bindings/src/Bindings/MapGuideApi/MapGuideApiGen.xml
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/MapGuideApi/MapGuideApiGen.xml	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/MapGuideApi/MapGuideApiGen.xml	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -74,12 +74,12 @@
 
 #if defined(PHPSWIG)
   // We force UTF-8 encoding for PHP
-  typedef char*         STRINGPARAM;
+  typedef std::wstring  STRINGPARAM;
   typedef char*         STRING;
   typedef char*         BYTE_ARRAY_IN;
   typedef char*         BYTE_ARRAY_OUT;
   typedef unsigned char BYTE;
-#elseif defined(JAVA)
+#elif defined(JAVA)
   typedef std::wstring  STRINGPARAM;
   typedef signed char   BYTE;  //mapped to byte in Java
 #else // .Net

Index: trunk/MgDev/Bindings/src/Bindings/Php
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/Php	2022-10-10 11:14:40 UTC (rev 9977)

Property changes on: trunk/MgDev/Bindings/src/Bindings/Php
___________________________________________________________________
Modified: svn:ignore
## -1 +1,7 ##
 PhpApi.vcxproj.user
+constants.i
+language.i
+MapGuideApi.i
+MapGuideApi_Doc.i
+MgApi_wrap.cpp
+php_MapGuideApi.h
Modified: trunk/MgDev/Bindings/src/Bindings/Php/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Php/CMakeLists.txt	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Bindings/Php/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev \
9977) @@ -5,25 +5,25 @@
     set ( CMAKE_SHARED_LINKER_FLAGS "${WEB_CMAKE_SHARED_LINKER_FLAGS}")
 endif (CMAKE_COMPILER_IS_GNUCXX)
 
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
-    ${MG_COMMON_DIR}/MdfModel
-    ${MG_COMMON_DIR}/Foundation
-    ${MG_COMMON_DIR}/Geometry
-    ${MG_COMMON_DIR}/PlatformBase
-    ${MG_COMMON_DIR}/MapGuideCommon
-    ${PHP_INCLUDE_DIR}/TSRM
+include_directories(${PHP_INCLUDE_DIR}/TSRM
     ${PHP_INCLUDE_DIR}/Zend
     ${PHP_INCLUDE_DIR}/main
-    ${PHP_INCLUDE_DIR}
-    ${ACE_INCLUDE_DIR}
-    ${MG_WEB_DIR}/HttpHandler
-    ${MG_WEB_DIR}/WebSupport
-    ${MG_WEB_DIR}/WebApp
-    ${XERCESC_INCLUDE_DIR}
-)
+    ${PHP_INCLUDE_DIR})
 
-set(MG_PHP_OUTPUT_DIR "${MG_PACKAGE_OUTPUT_DIR}/Php/${CMAKE_BUILD_TYPE}/${MG_ARCH}")
+set(SWIG_PHP_DEFS "")
+if (WIN32)
+    set(SWIG_PHP_DEFS "-DWIN32")
+endif (WIN32)
 
+# Only needed for Linux
+if (UNIX)
+    file(COPY "InitializeWebTier.cpp" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+endif (UNIX)
+# These 2 files will be #included in the MgApi_wrap translation unit so they need
+# to be present on the current binary dir where MgApi_wrap.cpp will be generated in
+file(COPY "PhpClassMap.cpp" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(COPY "PhpLocalizer.cpp" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
 set(php_MapGuideApi_SRCS
     ${CMAKE_CURRENT_BINARY_DIR}/MgApi_wrap.cpp
 )
@@ -52,58 +52,55 @@
 
 message(STATUS "Using IMake at: ${IMAKE_TOOL}")
 add_custom_command(OUTPUT ${php_MapGuideApi_SRCS}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${MG_PHP_OUTPUT_DIR}
-    COMMAND ${CMAKE_COMMAND} -E echo Regenerating: \
                ${CMAKE_CURRENT_BINARY_DIR}/constants.php
-    COMMAND ${IMAKE_TOOL} -p \
${CMAKE_CURRENT_BINARY_DIR}/../MapGuideApi/Constants.xml  +    COMMAND ${IMAKE_TOOL} \
                -p ${CMAKE_CURRENT_SOURCE_DIR}/../MapGuideApi/Constants.xml 
         -l PHP 
         ${IMAKE_RELATIVE_RESOLUTION}
-        -o ${MG_PHP_OUTPUT_DIR}/constants.php
+        -o ${CMAKE_CURRENT_BINARY_DIR}/constants.i
         -t
     COMMAND ${CMAKE_COMMAND} -E copy
         ${CMAKE_CURRENT_BINARY_DIR}/php.i
         ${CMAKE_CURRENT_BINARY_DIR}/language.i
-    COMMAND ${IMAKE_TOOL} -p ../MapGuideApi/MapGuideApiGen.xml
+    COMMAND ${IMAKE_TOOL} -p \
                ${CMAKE_CURRENT_SOURCE_DIR}/../MapGuideApi/MapGuideApiGen.xml
         -l PHP
         ${IMAKE_RELATIVE_RESOLUTION}
         -o ${CMAKE_CURRENT_BINARY_DIR}
-    COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [PHP7]
-    COMMAND ${SWIG_TOOL} -c++ -php7 
-        -DWIN32 -DPHPSWIG
+    COMMAND ${CMAKE_COMMAND} -E echo Running SWIG [PHP]
+    COMMAND ${SWIG_TOOL} -c++ -php 
+        -DPHPSWIG ${SWIG_PHP_DEFS}
         -nodefaultctor -nodefaultdtor 
         -o "${CMAKE_CURRENT_BINARY_DIR}/MgApi_wrap.cpp"
         ${CMAKE_CURRENT_BINARY_DIR}/MapGuideApi.i
-    COMMAND ${CMAKE_COMMAND} -E echo Applying PHP7 swig workaround patch
-    COMMAND ${SED_COMMAND} ${SED_ARGS} \
"s#(MapGuideApi_globals.error_msg)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
error_msg)#g; s#(MapGuideApi_globals.error_code)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
                error_code)#g"
-        "${CMAKE_CURRENT_BINARY_DIR}/MgApi_wrap.cpp"
-    COMMAND ${MOVE_COMMAND} ${MOVE_ARGS}
-        MapGuideApi.php
-        ${MG_PHP_OUTPUT_DIR}
+    # These commands need to be run in the context of the source directory so that \
the relative header references +    # in the Constants and ApiGen xml files will \
resolve properly (because these headers won't exist in the cmake +    # binary dir)
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
-# if (UNIX)
-#     install(TARGETS php_MapGuideApi${MG_VERSION_SUFFIX} DESTINATION \
                ${LIB_INSTALL_DIR} COMPONENT ${MG_COMPONENT})
-#     install_symlink(${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/libphp_MapGuideApi${MG_VERSION_SUFFIX}.so \
                libphp_MapGuideApi.so ${MG_COMPONENT})
-#     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/constants.php DESTINATION \
                ${MG_WWWROOT}/mapadmin COMPONENT ${MG_COMPONENT})
-#     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/constants.php DESTINATION \
                ${MG_WWWROOT}/mapviewerphp COMPONENT ${MG_COMPONENT})
-# endif (UNIX)
+if (UNIX)
+    message(STATUS "php_MapGuideApi will install to: ${LIB_INSTALL_DIR}")
+    install(TARGETS php_MapGuideApi${MG_VERSION_SUFFIX} DESTINATION \
${LIB_INSTALL_DIR} COMPONENT ${MG_COMPONENT}) +    \
install_symlink(${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/libphp_MapGuideApi${MG_VERSION_SUFFIX}.so \
libphp_MapGuideApi.so ${MG_COMPONENT}) +endif (UNIX)
 target_link_libraries(php_MapGuideApi${MG_VERSION_SUFFIX}
     ${ACE_LIBRARY}
     ${PHP_LIBRARY}
-    ${MG_FOUNDATION_LIBRARY}
-    ${MG_GEOMETRY_LIBRARY}
-    ${MG_PLATFORMBASE_LIBRARY}
-    ${MG_COMMON_LIBRARY}
-    ${MG_HTTPHANDLER_LIBRARY}
-    ${MG_WEBAPP_LIBRARY}
-    ${MG_MDFMODEL_LIBRARY}
-    ${MG_MDFPARSER_LIBRARY}
-    ${MG_WEBSUPPORT_LIBRARY}
+    MgFoundation${MG_VERSION_SUFFIX}
+    MgGeometry${MG_VERSION_SUFFIX}
+    MgPlatformBase${MG_VERSION_SUFFIX}
+    MgMapGuideCommon${MG_VERSION_SUFFIX}
+    MgHttpHandler${MG_VERSION_SUFFIX}
+    MgMdfModel${MG_VERSION_SUFFIX}
+    MgMdfParser${MG_VERSION_SUFFIX}
     ${XERCESC_LIBRARIES}
+    MgWebApp${MG_VERSION_SUFFIX}
+    MgWebSupport${MG_VERSION_SUFFIX}
 )
 
-# Only needed for Linux
-if (UNIX)
-    file(COPY "InitializeWebTier.cpp" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-endif (UNIX)
+file(COPY "php.i" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 
-file(COPY "php.i" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
\ No newline at end of file
+# Set RPATH to avoid needing to use LD_LIBRARY_PATH in various configs
+if(MG_CPU EQUAL 64)
+    set_target_properties(php_MapGuideApi${MG_VERSION_SUFFIX} PROPERTIES \
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../lib64") +else(MG_CPU EQUAL 64)
+    set_target_properties(php_MapGuideApi${MG_VERSION_SUFFIX} PROPERTIES \
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../lib") +endif(MG_CPU EQUAL 64)
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Bindings/Php/PhpApi.vcxproj
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Php/PhpApi.vcxproj	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Bindings/Php/PhpApi.vcxproj	2022-10-10 11:14:40 UTC (rev \
9977) @@ -38,10 +38,10 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\packages\php\$(Configuration)\x64\</OutDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\..\packages\php\$(Configuration)\x64\</OutDir>
                
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\obj\$(Configuration)64\PhpApi\</IntDir>
                
     <LinkIncremental \
                Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
                
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\packages\php\$(Configuration)\x64\</OutDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\..\packages\php\$(Configuration)\x64\</OutDir>
                
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\obj\$(Configuration)64\PhpApi\</IntDir>
                
     <LinkIncremental \
                Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
                
     <CodeAnalysisRuleSet \
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 @@ -55,19 +55,15 @@
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <PreBuildEvent>
-      <Command>"..\..\IMake\Win32\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\Constants.xml" -l PHP -o ./constants.php \
                -t
-copy .\constants.php ..\mapadmin
-copy .\constants.php ..\mapviewerphp
+      <Command>"..\..\IMake\Win32\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l PHP -o ./constants.i -t  copy .\php.i \
                "$(ProjectDir)language.i"
-"..\..\IMake\Win32\IMake.exe" -p "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l \
                PHP
-$(SWIG_TOOL_PATH)\swig -c++ -php7 -DWIN32 -DPHPSWIG -nodefaultctor -nodefaultdtor -o \
                "$(ProjectDir)MgApi_wrap_orig.cpp" MapGuideApi.i
-move /Y "$(ProjectDir)\*.php" "$(OutDir)"
-sed "s#(MapGuideApi_globals.error_msg)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
error_msg)#g; s#(MapGuideApi_globals.error_code)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
error_code)#g" "$(ProjectDir)MgApi_wrap_orig.cpp" &gt; "$(ProjectDir)MgApi_wrap.cpp" \
+"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l PHP +"$(SWIG_DIR)\swig.exe" -c++ \
-php -DWIN32 -DPHPSWIG -nodefaultctor -nodefaultdtor -o "$(ProjectDir)MgApi_wrap.cpp" \
MapGuideApi.i  </Command>
     </PreBuildEvent>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\..\..\Web\src\HttpHandler;..\..\..\..\Web\s \
rc\WebApp;..\..\..\..\Web\src\WebSupport;..\..\..\..\Common\MdfModel;..\..\..\..\Commo \
n\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\C \
ommon\MapGuideCommon;$(PHP_SRC);$(PHP_SRC)\main;$(PHP_SRC)\TSRM;$(PHP_SRC)\Zend;$(PHP_SRC)\ext\w32api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <AdditionalIncludeDirectories>..\..\..\..\Web\src\HttpHandler;..\..\..\..\Web\ \
src\WebApp;..\..\..\..\Web\src\WebSupport;..\..\..\..\Common\MdfModel;..\..\..\..\Comm \
on\Foundation;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Common\Geometry;..\..\..\.. \
\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;$(PHP_SRC);$(PHP_SRC)\main;$(PH \
P_SRC)\TSRM;$(PHP_SRC)\Zend;$(PHP_SRC)\ext\w32api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
  <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PHPPROXYAPI_EXPORTS;SWIG_PUBL \
IC_API;_XKEYCHECK_H;ZEND_WIN32;PHP_WIN32;ZEND_DEBUG=0;PHP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
  <ExceptionHandling>Async</ExceptionHandling>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -78,9 +74,9 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
-      <AdditionalDependencies>ACEd.lib;php7.lib;MgFoundation.lib;MgGeometry.lib;MgPla \
tformBase.lib;MgMapGuideCommon.lib;HttpHandler.lib;WebApp.lib;WebSupport.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <AdditionalDependencies>ACEd.lib;php8.lib;MgFoundation.lib;MgGeometry.lib;MgPl \
atformBase.lib;MgMapGuideCommon.lib;HttpHandler.lib;WebApp.lib;WebSupport.lib;%(AdditionalDependencies)</AdditionalDependencies>
  <OutputFile>$(OutDir)php_MapGuideApid.dll</OutputFile>
-      <AdditionalLibraryDirectories>$(MG_SDK_LIB64);..\..\..\Oem\ACE\ACE_wrappers\lib \
64\$(Configuration);$(PHP_LIB64);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 +      <AdditionalLibraryDirectories>..\..\..\..\Oem\ACE\ACE_wrappers\lib64\$(Configu \
ration);$(PHP_LIB);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>  \
                <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)php_MapGuideApid.pdb</ProgramDatabaseFile>
       <SubSystem>Windows</SubSystem>
@@ -93,19 +89,15 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <PreBuildEvent>
-      <Command>"..\..\IMake\Win32\IMake.exe" -p \
                "$(ProjectDir)..\MapGuideApi\Constants.xml" -l PHP -o ./constants.php \
                -t
-copy .\constants.php ..\mapadmin
-copy .\constants.php ..\mapviewerphp
+      <Command>"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\Constants.xml" -l PHP -o ./constants.i -t  copy .\php.i \
                "$(ProjectDir)language.i"
-"..\..\IMake\Win32\IMake.exe" -p "$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l \
                PHP
-$(SWIG_TOOL_PATH)\swig -c++ -php7 -DWIN32 -DPHPSWIG -nodefaultctor -nodefaultdtor -o \
                "$(ProjectDir)MgApi_wrap_orig.cpp" MapGuideApi.i
-move /Y "$(ProjectDir)\*.php" "$(OutDir)"
-sed "s#(MapGuideApi_globals.error_msg)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
error_msg)#g; s#(MapGuideApi_globals.error_code)#ZEND_MODULE_GLOBALS_ACCESSOR(MapGuideApi, \
error_code)#g" "$(ProjectDir)MgApi_wrap_orig.cpp" &gt; "$(ProjectDir)MgApi_wrap.cpp" \
+"..\..\IMake\$(Platform)\$(Configuration)\bin\IMake.exe" -p \
"$(ProjectDir)..\MapGuideApi\MapGuideApiGen.xml" -l PHP +"$(SWIG_DIR)\swig.exe" -c++ \
-php -DWIN32 -DPHPSWIG -nodefaultctor -nodefaultdtor -o "$(ProjectDir)MgApi_wrap.cpp" \
MapGuideApi.i  </Command>
     </PreBuildEvent>
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories>$(MG_SDK_INC);$(MG_HTTPHANDLER_INCLUDE_DIR);$(MG_ \
WEBAPP_INCLUDE_DIR);$(MG_WEBSUPPORT_INCLUDE_DIR);$(MG_MDFMODEL_INCLUDE_DIR);$(MG_FOUND \
ATION_INCLUDE_DIR);$(MG_GEOMETRY_INCLUDE_DIR);$(MG_PLATFORMBASE_INCLUDE_DIR);$(MG_MAPG \
UIDECOMMON_INCLUDE_DIR);$(MG_OEM_ACE_INCLUDE_DIR);$(PHP_SRC);$(PHP_SRC)\main;$(PHP_SRC \
)\TSRM;$(PHP_SRC)\Zend;$(PHP_SRC)\ext\w32api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <AdditionalIncludeDirectories>..\..\..\..\Web\src\HttpHandler;..\..\..\..\Web\ \
src\WebApp;..\..\..\..\Web\src\WebSupport;..\..\..\..\Common\MdfModel;..\..\..\..\Comm \
on\Foundation;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Common\Geometry;..\..\..\.. \
\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;$(PHP_SRC);$(PHP_SRC)\main;$(PH \
P_SRC)\TSRM;$(PHP_SRC)\Zend;$(PHP_SRC)\ext\w32api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
  <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PHPPROXYAPI_EXPORTS;SWIG_PUBL \
IC_API;_XKEYCHECK_H;ZEND_WIN32;PHP_WIN32;ZEND_DEBUG=0;PHP;_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
  <ExceptionHandling>Async</ExceptionHandling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -116,9 +108,9 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
-      <AdditionalDependencies>ACE.lib;php7.lib;MgFoundation.lib;MgGeometry.lib;MgPlat \
formBase.lib;MgMapGuideCommon.lib;HttpHandler.lib;WebApp.lib;WebSupport.lib;%(AdditionalDependencies)</AdditionalDependencies>
 +      <AdditionalDependencies>ACE.lib;php8.lib;MgFoundation.lib;MgGeometry.lib;MgPla \
tformBase.lib;MgMapGuideCommon.lib;HttpHandler.lib;WebApp.lib;WebSupport.lib;%(AdditionalDependencies)</AdditionalDependencies>
  <OutputFile>$(OutDir)php_MapGuideApi.dll</OutputFile>
-      <AdditionalLibraryDirectories>$(MG_SDK_LIB64);..\..\..\Oem\ACE\ACE_wrappers\lib \
64\$(Configuration);$(PHP_LIB64);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 +      <AdditionalLibraryDirectories>..\..\..\..\Oem\ACE\ACE_wrappers\lib64\$(Configu \
ration);..\..\..\..\Common\lib\Release64;..\..\..\..\Web\lib\Release64;$(PHP_LIB);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
  <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)php_MapGuideApi.pdb</ProgramDatabaseFile>
       <SubSystem>Windows</SubSystem>

Modified: trunk/MgDev/Bindings/src/Bindings/Php/README.md
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Php/README.md	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Bindings/Php/README.md	2022-10-10 11:14:40 UTC (rev \
9977) @@ -4,49 +4,56 @@
 
 # Supported PHP version
 
-This binding targets the Windows release of PHP 7.1.19, the current PHP version in \
the 7.1 series. +This binding targets the Windows release of PHP 8.1.4, the current \
PHP version in the 8.1 series.  
 The binding is built against the *non-thread-safe* release of PHP, meaning it \
currently can only be used in Apache httpd server via FastCGI with the `mod_fcgid` \
module  
-No binding is provided for PHP 7.1 on Linux at this point in time as none of the \
Linux distros where we provide MapGuide binaries for (CentOS 6.x / Ubuntu 14.04), \
provide an official PHP 7.x package. +# Migration Notes
 
-# Usage
+## `constants.php` no longer required
 
-NOTE: 
+All constants defined in the MapGuide API are now baked into the PHP extension \
itself, eliminating the need for us having to generate this file and for your PHP \
MapGuide applications to include this file.  
-As MapGuide currently does not bundle PHP 7.1, these instructions assume you already \
have PHP 7.1 installed. How to install PHP 7.1 is beyond the scope of this document \
+Remove all references to `include`/`include_once`/`require`/`require_once` to \
`constants.php` in your code  
-1. Copy `php_MapGuideApi.dll` and supporting dlls to the `ext` subdirectory of your \
                PHP 7.1 installation.
-2. Modify `php.ini` and add the line `extension=php_MapGuideApi.dll` to the \
extensions section of the file. +## `MgPlotSpecification` constructor
 
-# Known issues
+You now need to specify all 4 margin parameters in the `MgPlotSpecification` \
constructor. If you don't need a margin, or need to set it later on (with the \
`SetMargins()` method), you can pass `0.0` for all 4 arguments.  
- * Some APIs with many overloads may have incorrect wrapper code generated by \
vanilla SWIG. We've been working around this by monkey-patching away such problematic \
APIs. Please report any APIs that do not behave as they did in the official PHP 5.x \
binding. +## Exception handling
 
- * If you have multiple try/catch blocks within the same scope, make sure to use \
different exception variable names. For example: +`MgException` is now the sole \
exception class in the MapGuide API. Sub-classifications can be determined by \
checking the value of `GetExceptionCode()`. All known sub-classifications are defined \
in a new `MgExceptionCodes` string constant class.  
- ```
- try {
-   //Some code that throws
- } catch (MgException $ex) {
-   //Handle this exception
- }
+For example, a try/catch block like this:
 
- try {
-   //Some more code that throws
- } catch (MgException $ex) {
-   //$ex from previous catch block is not properly cleaned up and will leak memory. \
                You should use a different variable name here
- }
- ```
+```
+try {
+  ...
+} catch (MgUserNotFoundException $ex) {
+  ...
+} catch (MgUnauthorizedAccessException $ex) {
+  ...
+}
+```
 
-# Differences from the official PHP binding
+Needs to be converted to this:
 
- * Usage
-   * You will need to include `MapGuideApi.php` to access the MapGuide API.
+```
+try {
+  ...
+} catch (MgException $ex) {
+  if ($ex->GetExceptionCode() == MgExceptionCodes::MgUserNotFoundException) {
+    ...
+  } else if ($ex->GetExceptionCode() == \
MgExceptionCodes::MgUnauthorizedAccessException) { +    ...
+  }
+}
+```
 
- * Removed classes/APIs
-   * `MgLayerBase::MgLayerBase`
-   * `MgMapBase::Open`
-   * `MgResource::Save`
-   * `MgConfigurationException::GetExceptionMessage`
-   * `MgSerializable` This is only a "marker" class for server/webtier serialization \
plumbing. Needed to be removed so that `MgException` can be rebased against PHP \
`Exception` to make it throwable. \ No newline at end of file
+## Stronger typing
+
+PHP 8 is more strict about data types and attempting to do things like assigning \
`int` to `double` and vice-versa and will generally error out in such cases. +
+This strictness may arise in calls to APIs like `MgRenderingService`::`RenderMap` \
where there is a mixture of `int` and `double` parameters in the method signature. +
+To ensure the correct data types are passed in, wrap expected `int` parameters with \
`intval()` and expected `double` parameters with `doubleval()` \ No newline at end of \
file

Modified: trunk/MgDev/Bindings/src/Bindings/Php/php.i
===================================================================
--- trunk/MgDev/Bindings/src/Bindings/Php/php.i	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Bindings/Php/php.i	2022-10-10 11:14:40 UTC (rev 9977)
@@ -16,6 +16,9 @@
 //
 
 %begin %{
+//Uncomment to enable extra refcounting related debug chatter
+//#define REFCOUNTING_DIAGNOSTICS
+
 //HACK: ACE and PHP conflict on some typedefs. In this battle, PHP must give way \
through  //select patched headers on the PHP end.
 //
@@ -26,6 +29,21 @@
 #include "MapGuideCommon.h"
 %}
 
+// All our strings are std::wstring, so overwrite the default string constant member
+// typemap with one that makes sure to call MgUtil::WideCharToMultiByte() for every \
string +// constant to register
+%typemap(classconsttab) char *,
+                        const char *,
+                        char [],
+                        const char [] %{
+  zend_declare_class_constant_string(SWIG_Php_ce_$class, "$const_name", \
sizeof("$const_name") - 1, MgUtil::WideCharToMultiByte($value).c_str()); +%}
+
+// This file is generated automatically by IMake and is the successor to \
constants.php  +// and should be present at the time SWIG is invoked against this \
file. Constant definitions +// are now baked into the PHP extension itself
+%include "constants.i"
+
 %include "../../SwigCommon/Php/pointer.i"
 %include "../../SwigCommon/Php/exception.i"
 %include "../../SwigCommon/Php/monkey_patch.i"
@@ -99,17 +117,15 @@
 //
 %typemap(in, byref=1) BYTE_ARRAY_OUT buffer (INT32 length)
 {
-    bool isNull = (Z_TYPE($input) == IS_NULL);
-    bool isRef = Z_ISREF($input);
-    if (isNull)
+    if (Z_TYPE($input) == IS_NULL)
     {
         $1 = (BYTE_ARRAY_OUT)0;
     }
-    else if (isRef)
+    else if (Z_ISREF($input))
     {
         /* use a stack allocated temp string */
-        convert_to_long(&args[1 + 1]);
-        length = (INT32)Z_LVAL((args[1 + 1]));
+        convert_to_long(&args[$argnum - 1]);
+        length = (INT32)Z_LVAL((args[$argnum - 1]));
         $1 = (BYTE_ARRAY_OUT)emalloc(length + 1);
         if ($1 == NULL)
             zend_error(E_ERROR, "Out of memory");

Modified: trunk/MgDev/Bindings/src/CMakeLists.txt
===================================================================
--- trunk/MgDev/Bindings/src/CMakeLists.txt	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,6 +1,12 @@
 set(MG_COMPONENT ${MG_COMPONENT_COMMON})
-set_install_subdir("")
 
+if (NOT MG_COMMON_SUBSET_ONLY)
+    # As these are bindings to the Web API, the libs need to sit at the same level \
as where HttpHandler and WebSupport resides +    \
set_install_subdir("webserverextensions/") +else (NOT MG_COMMON_SUBSET_ONLY) # For \
the common subset we want all the libs to be collected into a single place +    \
set_install_subdir("") +endif (NOT MG_COMMON_SUBSET_ONLY)
+
 # Do not allow for the possibility of undefined symbols
 if( CMAKE_COMPILER_IS_GNUCXX )
     if (NEED_LIBRT)
@@ -16,4 +22,5 @@
 file(COPY "SwigCommon" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 
 add_subdirectory(IMake)
+add_subdirectory(Managed)
 add_subdirectory(Bindings)
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/IMake/IMake.cpp
===================================================================
--- trunk/MgDev/Bindings/src/IMake/IMake.cpp	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/IMake/IMake.cpp	2022-10-10 11:14:40 UTC (rev 9977)
@@ -4,6 +4,7 @@
 #include "stdafx.h"
 #include "SimpleXmlParser.h"
 #include <tclap/CmdLine.h>
+#include <cassert>
 
 enum Language
 {
@@ -13,7 +14,7 @@
     java
 };
 
-static char version[] = "1.5.3";
+static char version[] = "1.6.0";
 static char EXTERNAL_API_DOCUMENTATION[] = "(NOTE: This API is not officially \
supported and may be subject to removal in a future release without warning. Use with \
caution.)";  
 static string module;
@@ -1733,7 +1734,7 @@
                 for(int k = colonPos + 1; k < j; k++)
                     fprintf(outfile, "%s ", tokens[k].c_str());
             }
-            if(!translateMode)
+            if(!translateMode || (translateMode && language == php))
                 fprintf(outfile, "\n{\npublic:\n");
             else
                 fprintf(outfile, "\n{\n");
@@ -1789,14 +1790,15 @@
         if(!ignore)
         {
             fprintf(outfile, "\n}");
-            if(!translateMode) {
+            if(!translateMode || (translateMode && language == php))
+            {
                 fprintf(outfile, ";\n\n");
             }
-            else {
+            else
+            {
                 fprintf(outfile, "\n\n");
             }
         }
-
     }
 }
 
@@ -1885,6 +1887,14 @@
 
 void createNativeFile(const string& outDir, const string& relRoot)
 {
+    // NOTE: With IMake 1.6.0, we no longer generate constants.php
+    // for PHP language in translateMode. Instead we generate the verbatim
+    // C++ classes to a SWIG interface file to be %include-d by the main
+    // PHP language SWIG interface file (SWIG is now smart enough to generate
+    // constants directly into the PHP extension!)
+
+    assert(translateMode);
+
     if(target.length() == 0)
         error("Target section is missing");
 
@@ -1906,9 +1916,7 @@
         }
     }
 
-    if(language == php)
-        fprintf(outfile, "<?php\n\n");
-    else
+    if (language != php)
     {
         if(nameSpace != "")
         {
@@ -1927,9 +1935,7 @@
     for(vector<string>::const_iterator it = headers.begin(); it != headers.end(); \
it++)  processHeaderFile(*it, relRoot);
 
-    if(language == php)
-        fprintf(outfile, "?>");
-    else
+    if (language != php)
     {
         if(nameSpace != "")
         {

Copied: trunk/MgDev/Bindings/src/Managed/CMakeLists.txt (from rev 9968, \
sandbox/jng/vanilla_swig/Bindings/src/Managed/CMakeLists.txt) \
                ===================================================================
--- trunk/MgDev/Bindings/src/Managed/CMakeLists.txt	                        (rev 0)
+++ trunk/MgDev/Bindings/src/Managed/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev \
9977) @@ -0,0 +1,3 @@
+if (WITH_JAVA)
+    add_subdirectory(Java)
+endif (WITH_JAVA)
\ No newline at end of file

Copied: trunk/MgDev/Bindings/src/Managed/Java/CMakeLists.txt (from rev 9968, \
sandbox/jng/vanilla_swig/Bindings/src/Managed/Java/CMakeLists.txt) \
                ===================================================================
--- trunk/MgDev/Bindings/src/Managed/Java/CMakeLists.txt	                        (rev \
                0)
+++ trunk/MgDev/Bindings/src/Managed/Java/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev \
9977) @@ -0,0 +1,4 @@
+file(GLOB MG_JAVA_SOURCES
+    "org/osgeo/mapguide/*.java"
+)
+file(COPY ${MG_JAVA_SOURCES} DESTINATION \
${CMAKE_CURRENT_BINARY_DIR}/../../Bindings/Java/org/osgeo/mapguide) \ No newline at \
end of file

Modified: trunk/MgDev/Bindings/src/SwigCommon/Java/exception.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/Java/exception.i	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/Java/exception.i	2022-10-10 11:14:40 UTC (rev \
9977) @@ -34,7 +34,7 @@
     if (mgException != NULL) {
         //AddRef the exception as this is a Ptr<> it will auto-unref when leaving \
the method  (*mgException).AddRef();
-        RefCount(mgException);
+        RefCountHook(mgException);
         ThrowJavaExceptionWrapper(jenv, mgException);
     }
 }
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/SwigCommon/Java/monkey_patch.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/Java/monkey_patch.i	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/Java/monkey_patch.i	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -5,40 +5,19 @@
 
 //---------------------- Renames to avoid Java/C++ API clashes \
---------------------------//  
-/**
- * Rename SWIG's "delete" to "destroy". However the typemaps to do this cannot just \
                rename the thing
- * we have to repeat the expected implementation verbatim with the new name
- */
-%typemap(javafinalize) SWIGTYPE %{
-  protected void finalize() {
-    destroy();  // renamed to prevent conflict with existing delete method
-  }
-%}
-%typemap(javadestruct, methodname="destroy", methodmodifiers="public synchronized") \
                SWIGTYPE
-{
-    if (swigCPtr != 0) {
-      if (swigCMemOwn) {
-        swigCMemOwn = false;
-        $jnicall;
-      }
-      swigCPtr = 0;
-    }
-}
-%typemap(javadestruct_derived, methodname="destroy", methodmodifiers="public \
                synchronized") SWIGTYPE
-{
-    if (swigCPtr != 0) {
-      if (swigCMemOwn) {
-        swigCMemOwn = false;
-        $jnicall;
-      }
-      swigCPtr = 0;
-    }
-    super.destroy();
-}
-
 //Already defined in Java Exception so rename our proxy method
 %rename(getExceptionStackTrace) MgException::GetStackTrace;
 
+//delete() is the name of the standard SWIG release method called on finalize(). \
Unfortunately this conflicts with +//MgPropertyDefinition::Delete, \
MgClassDefinition::Delete and MgFeatureSchema::Delete when java proxy clases for \
these +//classes are generated
+//
+//So rename the java proxies to these methods. This is the most minimally \
destructive change of all the available options +//available to us
+%rename(markAsDeleted) MgPropertyDefinition::Delete;
+%rename(markAsDeleted) MgClassDefinition::Delete;
+%rename(markAsDeleted) MgFeatureSchema::Delete;
+
 //If we want to implement java.util.Collection, we need to rename this incompatible \
API (as add() is expected to   //return boolean in the java.util.Collection API)
 %rename(addItem) MgBatchPropertyCollection::Add;

Modified: trunk/MgDev/Bindings/src/SwigCommon/Php/exception.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/Php/exception.i	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/Php/exception.i	2022-10-10 11:14:40 UTC (rev \
9977) @@ -46,10 +46,8 @@
         else
         {
             zval obj;
-            zval cPtr;
-            SWIG_SetPointerZval(&cPtr, (void *)e, ty, 1);
             object_init_ex(&obj, ce);
-            add_property_zval(&obj, "_cPtr", &cPtr);
+            SWIG_SetPointerZval(&obj, (void *)e, ty, 1);
             zend_throw_exception_object(&obj);
         }
     }
@@ -63,8 +61,8 @@
     if (mgException != NULL) {
         //AddRef the exception as this is a Ptr<> it will auto-unref when leaving \
the method  (*mgException).AddRef();
-        RefCount(mgException);
+        RefCountHook(mgException);
         ThrowPhpExceptionWrapper(mgException);
-        goto thrown; //thrown is a SWIG-generated label
+        SWIG_fail;
     }
 }
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/SwigCommon/Php/monkey_patch.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/Php/monkey_patch.i	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/Php/monkey_patch.i	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -25,6 +25,16 @@
  *     it does not provide sufficient augmentation points for generated PHP classes.
  */
 
+%rename(GetDistanceSimple) MgCoordinateSystemMeasure::GetDistance(double, double, \
double, double); +%rename(GetAzimuthSimple) \
MgCoordinateSystemMeasure::GetAzimuth(double, double, double, double); \
+%rename(GetCoordinateSimple) MgCoordinateSystemMeasure::GetCoordinate(double, \
double, double, double); +
+%rename(CreateStateless) MgMap::Create(MgResourceIdentifier*, STRINGPARAM, INT32, \
INT32, double, double, double, INT32); +
+%ignore MgResource;
+%ignore MgMapBase::Open(MgResourceService*, STRINGPARAM);
+
+ /*
 %ignore MgConfigurationLoadFailedException::GetExceptionMessage;
 %ignore MgResource::Save;
 %ignore MgMapBase::Open;
@@ -73,4 +83,5 @@
     }
 }
 
-//======================== End PHP Traits ===========================//"
\ No newline at end of file
+//======================== End PHP Traits ===========================//"
+*/
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/SwigCommon/Php/pointer.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/Php/pointer.i	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/Php/pointer.i	2022-10-10 11:14:40 UTC (rev \
9977) @@ -5,21 +5,52 @@
  */
 
 ///////////////////////////////////////////////////////////
-// Custom generic pointer typemap. This overrides the default
-// typemap to support downcasting
+// Custom generic pointer typemaps. This overrides the default
+// typemap to support downcasting and/or hooking into our refcounting
+// diagnostics
 //
+
+
+// Default typemap is to try for the most-derived type
+//
+// TODO: We can avoid the most-derived type check if we know SWIGTYPE to not
+// be an abstract class. Is there a SWIG-typemap-level way to check for this?
 %typemap(out) SWIGTYPE* 
 {
-    const char* retClassName = \
ResolveMgClassName(static_cast<MgObject*>($1)->GetClassId());  swig_type_info* ty = \
                NULL;
-    if (NULL != retClassName)
+    if ($1) // Try to resolve most-derived type through its class id
     {
-        ty = SWIG_TypeQuery(retClassName);
+        const char* retClassName = \
ResolveMgClassName(static_cast<MgObject*>($1)->GetClassId()); +        if (NULL != \
retClassName) +        {
+            ty = SWIG_TypeQuery(retClassName);
+        }
     }
     if (NULL == ty) //Fallback to original descriptor
     {
         ty = $1_descriptor;
     }
-    SWIG_SetPointerZval(return_value, (void *)$1, ty, 1); /* $owner */
-    RefCount($1);
+    SWIG_SetPointerZval($result, (void *)$1, ty, 1); /* owner = $owner */
+    if ($owner) // is owner?
+        NewObjectHook($1);
+    else
+        RefCountHook($1);
+}
+
+// But for certain return types, we want to preserve its base-type-ness, otherwise
+// we can't pass said instances as arguments to methods that are expecting that base
+// type (because the PHP type checking in the SWIG wrapper is by exact type and \
isn't  +// aware of inheritance, so you can't pass a MgCoordinateXY to an argument \
expecting +// MgCoordinate for example). Also said types are "pure abstract" and the \
consumer will +// almost never need downcast to the most-derived type.
+//
+// For now, MgCoordinate is such a return type
+%typemap(out) MgCoordinate* 
+{
+    swig_type_info* ty = $1_descriptor;
+    SWIG_SetPointerZval($result, (void *)$1, ty, 1); /* owner = $owner */
+    if ($owner) // is owner?
+        NewObjectHook($1);
+    else
+        RefCountHook($1);
 }
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/SwigCommon/refcount.i
===================================================================
--- trunk/MgDev/Bindings/src/SwigCommon/refcount.i	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/SwigCommon/refcount.i	2022-10-10 11:14:40 UTC (rev 9977)
@@ -7,9 +7,12 @@
 // SWIG is refcounting aware and since our C++ classes follow a refcounting scheme
 // we can tap into this feature
 //
-// NOTE: We don't implement ref because anything from the native boundary is already \
AddRef'd +// NOTE: We don't implement %feature("ref") because anything from the \
native boundary is already AddRef'd and the +// ref feature assumes refcounted \
objects that were just instantiated start off with a reference count of 0, ours  +// \
start at 1. (based from their refcounting example: \
https://swig.org/Doc4.0/SWIGDocumentation.html#SWIGPlus_ref_unref) +//
 // All the managed layer should do when Disposed or GC'd is to make sure it is \
                released
-%feature("ref")   MgDisposable "RefCount($this);"
+%feature("ref")   MgDisposable ""
 %feature("unref") MgDisposable "ReleaseObject($this);"
 
 %runtime %{
@@ -16,12 +19,27 @@
 #include "Foundation.h"
 
 #if defined(REFCOUNTING_DIAGNOSTICS)
-INT32 RefCount(MgDisposable* obj)
+INT32 NewObjectHook(MgDisposable* obj)
 {
     if (NULL != obj)
     {
         INT32 rc = obj->GetRefCount();
     #if defined(SWIGPHP)
+        zend_printf("[zend]: New instance of (%s): %p - %d\n", \
obj->GetMultiByteClassName(), (void*)obj, rc); +    #else
+        printf("[native]: New instance of (%s): %p - %d\n", \
obj->GetMultiByteClassName(), (void*)obj, rc); +    #endif
+        return rc;
+    }
+    return -1;
+}
+
+INT32 RefCountHook(MgDisposable* obj)
+{
+    if (NULL != obj)
+    {
+        INT32 rc = obj->GetRefCount();
+    #if defined(SWIGPHP)
         zend_printf("[zend]: Ref-count for instance of (%s): %p - %d\n", \
obj->GetMultiByteClassName(), (void*)obj, rc);  #else
         printf("[native]: Ref-count for instance of (%s): %p - %d\n", \
obj->GetMultiByteClassName(), (void*)obj, rc); @@ -45,7 +63,8 @@
     SAFE_RELEASE(obj);
 }
 #else
-#define RefCount(obj)
+#define NewObjectHook(obj)
+#define RefCountHook(obj)
 void ReleaseObject(MgDisposable* obj)
 {
     SAFE_RELEASE(obj);

Modified: trunk/MgDev/Bindings/src/Test/DotNet/src/TestMisc/TestMisc.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Test/DotNet/src/TestMisc/TestMisc.csproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/DotNet/src/TestMisc/TestMisc.csproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>

Modified: trunk/MgDev/Bindings/src/Test/DotNet/src/TestRunner/TestRunner.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Test/DotNet/src/TestRunner/TestRunner.csproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/DotNet/src/TestRunner/TestRunner.csproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -2,7 +2,7 @@
   <PropertyGroup>
     <Description>TestRunner Console Application</Description>
     <Authors>OSGeo</Authors>
-    <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
+    <TargetFrameworks>net6.0</TargetFrameworks>
     <AssemblyName>TestRunner</AssemblyName>
     <OutputType>Exe</OutputType>
     <PackageId>TestRunner</PackageId>

Modified: trunk/MgDev/Bindings/src/Test/Php/DrawingServiceAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/DrawingServiceAPI.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/DrawingServiceAPI.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -79,7 +79,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -106,7 +106,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -140,7 +140,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -176,7 +176,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -207,7 +207,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -234,7 +234,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -266,7 +266,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -297,7 +297,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {

Modified: trunk/MgDev/Bindings/src/Test/Php/FeatureServiceAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/FeatureServiceAPI.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/FeatureServiceAPI.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -72,7 +72,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -94,7 +94,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -122,7 +122,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -154,7 +154,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -216,7 +216,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -256,7 +256,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -289,7 +289,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -332,7 +332,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -375,7 +375,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -418,7 +418,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -453,7 +453,7 @@
                 $this->unitTestParamVm->Execute("Select ParamValue from Params WHERE \
                ParamSet=$paramSet AND ParamName=\"CONNECTIONSTRING\"");
                 $this->arrayParam["CONNECTIONSTRING"]=$this->unitTestParamVm->GetString("ParamValue");
  
-                $response = \
$this->featureSrvc->TestConnection($this->arrayParam["PROVIDER"], \
$this->arrayParam["CONNECTIONSTRING"]); +                $response = \
$this->featureSrvc->TestConnection((string)$this->arrayParam["PROVIDER"], \
(string)$this->arrayParam["CONNECTIONSTRING"]);  }
             $result = new Result(Utils::BooleanToString($response), "text/plain");
 
@@ -461,7 +461,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -490,7 +490,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -522,7 +522,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {

Modified: trunk/MgDev/Bindings/src/Test/Php/MapLayerAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/MapLayerAPI.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/MapLayerAPI.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -69,7 +69,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -83,7 +83,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -97,7 +97,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -119,7 +119,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -141,7 +141,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -161,7 +161,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -181,7 +181,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -201,7 +201,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -220,7 +220,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -240,7 +240,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -269,7 +269,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -299,7 +299,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -321,7 +321,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -343,7 +343,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -357,7 +357,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -371,7 +371,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -386,7 +386,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -408,7 +408,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -436,7 +436,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -456,7 +456,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -474,7 +474,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 

Copied: trunk/MgDev/Bindings/src/Test/Php/RefCounting.php (from rev 9968, \
sandbox/jng/vanilla_swig/Bindings/src/Test/Php/RefCounting.php) \
                ===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/RefCounting.php	                        (rev 0)
+++ trunk/MgDev/Bindings/src/Test/Php/RefCounting.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -0,0 +1,156 @@
+<?php
+
+function exceptionTest() {
+	/*
+	Expected release book-keeping:
+		MgException - 1
+	 */
+	try {
+		$rid = new MgResourceIdentifier("iamnotvalid");
+	} catch (MgException $ex) {
+
+	}
+}
+
+function throwingFunction() {
+	$agfRw = new MgAgfReaderWriter();
+	$wktRw = new MgWktReaderWriter();
+
+	$rid = new MgResourceIdentifier("iamnotvalid");
+}
+
+function exceptionTest2() {
+	/*
+	Expected release book-keeping:
+		MgAgfReaderWriter - 1
+		MgWktReaderWriter - 1
+		MgException - 1
+	 */
+	try {
+		throwingFunction();
+	} catch (MgException $ex) {
+
+	}
+}
+
+function exceptionTest3() {
+	/*
+	Expected release book-keeping:
+		MgAgfReaderWriter - 1
+		MgWktReaderWriter - 1
+		MgException - 2
+	 */
+	try {
+		$rid = new MgResourceIdentifier("iamnotvalid");
+	} catch (MgException $ex) {
+
+	}
+
+	try {
+		throwingFunction();
+	} catch (MgException $ex) {
+		//Previous iterations of the binding would leak the previous $ex when
+		//reusing the variable in this catch block
+		//If the release book-keeping for MgException is 2, then this is no
+		//longer the case
+	}
+}
+
+function geometryXformTest() {
+	/*
+	Expected release book-keeping:
+		MgCoordinateSystemFactory - 1
+		MgCoordinateSystem - 2
+		MgTransform - 1
+		MgWktReaderWriter - 1
+		MgPoint - 2
+		MgCoordinateXY - 2
+	 */
+	$csFactory = new MgCoordinateSystemFactory();
+	$cs1 = $csFactory->CreateFromCode("LL84");
+	$cs2 = $csFactory->CreateFromCode("WGS84.PseudoMercator");
+	$xform = $csFactory->GetTransform($cs1, $cs2);
+	$wktRw = new MgWktReaderWriter();
+	$pt = $wktRw->Read("POINT (1 2)");
+	$coord = $pt->GetCoordinate();
+	echo "Point (".$coord->GetX().", ".$coord->GetY().")\n";
+	$pt = $pt->Transform($xform);
+	$coord = $pt->GetCoordinate();
+	echo "XPoint (".$coord->GetX().", ".$coord->GetY().")\n";
+}
+
+function connectionServiceTest() {
+	/*
+	Expected release book-keeping:
+		MgUserInformation - 1
+		MgSiteConnection - 1
+		MgProxyResourceService - 1
+		MgProxyFeatureService - 1
+		MgProxyRenderingService - 1
+		MgProxyMappingService - 1
+		MgProxyKmlService - 1
+		MgProxyDrawingService - 1
+		MgProxyTileService - 1
+		MgProxyProfilingService - 1
+	 */
+
+	$userInfo = new MgUserInformation("Anonymous", "");
+	$site = new MgSiteConnection();
+	$site->Open($userInfo);
+
+	$service1 = $site->CreateService(MgServiceType::ResourceService);
+	$service2 = $site->CreateService(MgServiceType::FeatureService);
+	$service3 = $site->CreateService(MgServiceType::RenderingService);
+	$service4 = $site->CreateService(MgServiceType::MappingService);
+	$service5 = $site->CreateService(MgServiceType::KmlService);
+	$service6 = $site->CreateService(MgServiceType::DrawingService);
+	$service7 = $site->CreateService(MgServiceType::TileService);
+	$service8 = $site->CreateService(MgServiceType::ProfilingService);
+}
+
+function functionWithParam($userInfo) {
+	$userInfo->SetLocale("en");
+}
+
+function parameterPassingTest() {
+	// We want to check parameters of Mg* objects passed do not encounter
+	// refcounting shenanigans, but if they do, we want to make sure that
+	// proper increment/decrement is happening so that the MgUserInformation
+	// is released to 0 refcount (and thus deleted) when this function returns
+
+	/*
+	Expected release book-keeping:
+		MgUserInformation - 1
+	 */
+	$userInfo = new MgUserInformation();
+	functionWithParam($userInfo);
+	echo "Locale: " . $userInfo->GetLocale() . "\n";
+}
+
+MgInitializeWebTier("C:\\mg-4.0-install\\Web\\www\\webconfig_dev.ini");
+
+echo "=========== BEGIN - exceptionTest() ===========\n";
+exceptionTest();
+echo "=========== END - exceptionTest() ===========\n";
+
+echo "=========== BEGIN - exceptionTest2() ===========\n";
+exceptionTest2();
+echo "=========== END - exceptionTest2() ===========\n";
+
+echo "=========== BEGIN - exceptionTest3() ===========\n";
+exceptionTest3();
+echo "=========== END - exceptionTest3() ===========\n";
+
+echo "=========== BEGIN - connectionServiceTest() ===========\n";
+connectionServiceTest();
+echo "=========== END - connectionServiceTest() ===========\n";
+
+echo "=========== BEGIN - parameterPassingTest() ===========\n";
+parameterPassingTest();
+echo "=========== END - parameterPassingTest() ===========\n";
+
+echo "=========== BEGIN - geometryXformTest() ===========\n";
+geometryXformTest();
+echo "=========== END - geometryXformTest() ===========\n";
+
+?>
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Test/Php/ResourceServiceAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/ResourceServiceAPI.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/ResourceServiceAPI.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -88,13 +88,13 @@
                 $repId = new MgResourceIdentifier($arrayParam["RESOURCEID"]);
             }
 
-            $byteReader = $this->resourceSrvc->EnumerateResources( $repId, \
$arrayParam["DEPTH"], $arrayParam["TYPE"]); +            $byteReader = \
$this->resourceSrvc->EnumerateResources($repId, $arrayParam["DEPTH"], \
(string)$arrayParam["TYPE"]);  
             return Utils::GetResponse($byteReader);
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -154,7 +154,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -187,7 +187,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -221,7 +221,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -253,7 +253,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -283,7 +283,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -318,7 +318,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -377,7 +377,7 @@
             if (($e instanceof MgFileNotFoundException) && !Utils::IsWindows()) {
                 return new Result("", "text/plain");
             } else {
-                return new Result(get_class($e), "text/plain");
+                return new Result($e->GetExceptionCode(), "text/plain");
             }
         }
         catch (SqliteException $s)
@@ -417,7 +417,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -454,7 +454,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -485,7 +485,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -516,7 +516,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -575,7 +575,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -606,7 +606,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -651,7 +651,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -693,7 +693,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -730,7 +730,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -761,7 +761,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -793,7 +793,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {

Modified: trunk/MgDev/Bindings/src/Test/Php/RunTests.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/RunTests.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/RunTests.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -39,27 +39,30 @@
     echo $str;
     fwrite($file, $str);
 
-    if (($_SERVER['argc'] >1) && ($_SERVER['argv'][1] == "-help"))
+    $argc = $_SERVER['argc'];
+    $argv = $_SERVER['argv'];
+
+    if (($argc >1) && ($argv[1] == "-help"))
     {
         ShowUsage();
     }
 
-    if (($_SERVER['argc']>1) && ($_SERVER['argv'][1]=="/enterprise"))
+    if (($argc>1) && ($argv[1]=="/enterprise"))
     {
         $isEnterprise = true;
     }
     
-    if (($_SERVER['argc']>1))
+    if (($argc>1))
     {
-        for ($i = 0; $i < count($_SERVER['argv']); $i++)
+        for ($i = 0; $i < count($argv); $i++)
         {
-            if ($_SERVER['argv'][$i] == "-apionly")
+            if ($argv[$i] == "-apionly")
             {
                 $runApiTestsOnly = true;
             }
-            else if ($_SERVER['argv'][$i] == "-config" && $i < \
count($_SERVER['argv']) - 1) +            else if ($argv[$i] == "-config" && $i < \
count($argv) - 1)  {
-                define("WEBCONFIGINI", $_SERVER['argv'][$i+1]);
+                define("WEBCONFIGINI", $argv[$i+1]);
             }
         }
     }

Modified: trunk/MgDev/Bindings/src/Test/Php/SQLiteEngine.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/SQLiteEngine.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/SQLiteEngine.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -156,7 +156,7 @@
             foreach ($this->nameIndexMap as $colName => $index)
             {
                 if ($colName == "Result") {
-                    $this->currentStmt->bindColumn(($index+1), \
$this->currentRow[$colName], PDO::PARAM_LOB); +                    \
$this->currentStmt->bindColumn(($index+1), $this->currentRow[$colName]); //, \
PDO::PARAM_LOB);  //echo "Bound $colName as BLOB<br/>";
                 } else {
                     $this->currentStmt->bindColumn(($index+1), \
$this->currentRow[$colName]);

Modified: trunk/MgDev/Bindings/src/Test/Php/ServerAdminAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/ServerAdminAPI.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/ServerAdminAPI.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -66,7 +66,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -81,7 +81,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -96,7 +96,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -126,7 +126,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -175,7 +175,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -190,7 +190,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -203,7 +203,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -220,7 +220,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -239,7 +239,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -252,7 +252,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -269,7 +269,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -286,7 +286,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -304,7 +304,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -320,7 +320,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 }

Modified: trunk/MgDev/Bindings/src/Test/Php/SiteServiceAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/SiteServiceAPI.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/SiteServiceAPI.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -78,7 +78,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -94,7 +94,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -117,7 +117,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -136,7 +136,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
     function EnumerateUsers($paramSet)
@@ -158,7 +158,7 @@
             }
             else
             {
-                $byteReader = \
$this->site->EnumerateUsers($this->arrayParam['GROUP']); +                $byteReader \
= $this->site->EnumerateUsers((string)$this->arrayParam['GROUP']);  }
             return Utils::GetResponse($byteReader);
         }
@@ -165,7 +165,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -196,7 +196,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -229,7 +229,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -252,7 +252,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -277,7 +277,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -301,7 +301,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -326,7 +326,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -351,7 +351,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -369,7 +369,7 @@
             $this->unitTestParamVm->Execute("Select ParamValue from Params WHERE \
                ParamSet=$paramSet AND ParamName=\"ROLE\"");
             $this->arrayParam['ROLE']=$this->unitTestParamVm->GetString("ParamValue")."";
  
-            $byteReader = $this->site->EnumerateGroups($this->arrayParam['USER'], \
$this->arrayParam['ROLE']); +            $byteReader = \
$this->site->EnumerateGroups((string)$this->arrayParam['USER'], \
(string)$this->arrayParam['ROLE']);  
             return Utils::GetResponse($byteReader);
         }
@@ -376,7 +376,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -414,7 +414,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -452,7 +452,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -478,7 +478,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -506,7 +506,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -528,7 +528,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -553,7 +553,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -578,7 +578,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -603,7 +603,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -622,7 +622,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -650,7 +650,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -681,7 +681,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -703,7 +703,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -726,7 +726,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -751,7 +751,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -776,7 +776,7 @@
 
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {

Modified: trunk/MgDev/Bindings/src/Test/Php/Test1.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/Test1.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/Test1.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,13 +1,33 @@
 <?php
 
-//This file is just to test any arbitrary API without going through the whole suite
-require_once("master.php");
-
 echo "Initializing web tier";
+try {
+    MgInitializeWebTier("C:\\mg-4.0-install\\Web\\www\\webconfig_dev.ini");
+} catch (MgException $initEx) {
+    echo "Init failure!";
+    die;
+} catch (Exception $ex) {
+    echo "[php]: Exception: " . $ex->getMessage() . "\n";
+    die;
+}
+echo "[php]: Initialized\n";
 
-MgInitializeWebTier("C:\\Program Files\\OSGeo\\MapGuide\\Web\\www\\webconfig.ini");
-echo "[php]: Initialized\n";
+// We haven't and shouldn't need to require/include constants.php
+// they are now baked into the PHP extension along with the other
+// MapGuide API proxy classes
+echo "[php]: Testing some constants\n";
+echo "  - " . MgMimeType::Agf . "\n";
+echo "  - " . MgMimeType::Kml . "\n";
+echo "  - " . MgMimeType::Mvt . "\n";
+echo "  - " . MgImageFormats::Png . "\n";
+echo "  - " . MgImageFormats::Gif . "\n";
+echo "  - " . MgLogFileType::Authentication . "\n";
+echo "  - " . MgServerInformationProperties::ClientOperationsQueueCount . "\n";
+
 $user = new MgUserInformation("Anonymous", "");
+// Basic set/get
+$user->SetLocale("en");
+echo "[php]: Locale is: " . $user->GetLocale() . "\n";
 $conn = new MgSiteConnection();
 $conn->Open($user);
 // Create a session repository
@@ -20,7 +40,7 @@
 echo "[php]: Created Resource Service\n";
 $mappingService = $conn->CreateService(MgServiceType::MappingService);
 echo "[php]: Created Mapping Service\n";
-$resId = new MgResourceIdentifier("Library://UnitTest/");
+$resId = new MgResourceIdentifier("Library://");
 echo "[php]: Enumeratin'\n";
 $resources = $resourceService->EnumerateResources($resId, -1, "");
 echo $resources->ToString() . "\n";
@@ -47,8 +67,8 @@
 $coord = $pt->GetCoordinate();
 echo "[php]: X: ".$coord->GetX().", Y: ".$coord->GetY()."\n";
 $site->DestroySession($sessionID);
-echo "[php]: Destroyed session $sessionID";
-echo "[php]: Test byte reader\n";
+echo "[php]: Destroyed session $sessionID\n";
+echo "[php]: Test byte reader (read_size=2)\n";
 $bs = new MgByteSource("abcd1234", 8);
 $content = "";
 $br = $bs->GetReader();
@@ -57,7 +77,7 @@
     echo "Buffer: '$buf'\n";
     $content .= $buf;
 }
-echo "[php]: Test byte reader2\n";
+echo "[php]: Test byte reader2 (read_size=3)\n";
 $bs2 = new MgByteSource("abcd1234", 8);
 $content = "";
 $br2 = $bs2->GetReader();
@@ -66,6 +86,10 @@
     echo "Buffer: '$buf'\n";
     $content .= $buf;
 }
+echo "[php]: Test byte reader3 (stringification)\n";
+$bs3 = new MgByteSource("abcd1234", 8);
+$br3 = $bs3->GetReader();
+echo "Stringified: " . $br3->ToString() . "\n";
 $agfRw = new MgAgfReaderWriter();
 echo "[php]: Trigger an exception\n";
 try {
@@ -72,9 +96,11 @@
     $agfRw->Read(NULL);
 } catch (MgException $ex) {
     echo "[php]: MgException caught\n";
+    echo "[php]: MgException - Code: ".$ex->GetExceptionCode()."\n";
     echo "[php]: MgException - Message: ".$ex->GetExceptionMessage()."\n";
     echo "[php]: MgException - Details: ".$ex->GetDetails()."\n";
     echo "[php]: MgException - Stack: ".$ex->GetStackTrace()."\n";
+    echo "Is standard PHP exception too? " . ($ex instanceof Exception) . "\n";
 } catch (Exception $ex) {
     echo "[php]: Exception: " . $ex->getMessage() . "\n";
 }
@@ -83,10 +109,16 @@
     $r2 = new MgResourceIdentifier("");
 } catch (MgException $ex2) {
     echo "[php]: MgException caught\n";
+    echo "[php]: MgException - Code: ".$ex2->GetExceptionCode()."\n";
     echo "[php]: MgException - Message: ".$ex2->GetExceptionMessage()."\n";
     echo "[php]: MgException - Details: ".$ex2->GetDetails()."\n";
     echo "[php]: MgException - Stack: ".$ex2->GetStackTrace()."\n";
+    echo "Is standard PHP exception too? " . ($ex2 instanceof Exception) . "\n";
 } catch (Exception $ex) {
     echo "[php]: Exception: " . $ex->getMessage() . "\n";
 }
+
+echo "Press any key to exit\n";
+readline();
+
 ?>
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Test/Php/Utils.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/Utils.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/Utils.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -159,7 +159,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 

Modified: trunk/MgDev/Bindings/src/Test/Php/ValidateUtils.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/ValidateUtils.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/ValidateUtils.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -73,7 +73,7 @@
         {
             $extension = "dwf";
         }
-        elseif (strstr($mimeType, "ePlot") != FALSE)
+        elseif ($mimeType != null && strstr($mimeType, "ePlot") != FALSE)
         {
             $extension = "dwf";
         }
@@ -85,7 +85,7 @@
         {
             $extension = "png";
         }
-        elseif (strstr($mimeType,"text/plain") != FALSE)
+        elseif ($mimeType != null && strstr($mimeType,"text/plain") != FALSE)
         {
             $extension = "txt";
         }
@@ -93,7 +93,7 @@
         {
             $extension = "tiff";
         }
-        elseif (strstr($mimeType,"text/html") != FALSE)
+        elseif ($mimeType != null && strstr($mimeType,"text/html") != FALSE)
         {
             $extension = "html";
         }

Modified: trunk/MgDev/Bindings/src/Test/Php/WebLayoutAPI.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/WebLayoutAPI.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Bindings/src/Test/Php/WebLayoutAPI.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -59,7 +59,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -73,7 +73,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -87,7 +87,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -105,7 +105,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -120,7 +120,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -135,7 +135,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -150,7 +150,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -165,7 +165,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -180,7 +180,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -195,7 +195,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -210,7 +210,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -225,7 +225,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -240,7 +240,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -255,7 +255,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -289,7 +289,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
         catch (SqliteException $s)
         {
@@ -309,7 +309,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -325,7 +325,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -341,7 +341,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -357,7 +357,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -373,7 +373,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -389,7 +389,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -405,7 +405,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -421,7 +421,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 
@@ -437,7 +437,7 @@
         }
         catch (MgException $e)
         {
-            return new Result(get_class($e), "text/plain");
+            return new Result($e->GetExceptionCode(), "text/plain");
         }
     }
 

Modified: trunk/MgDev/Bindings/src/Test/Php/master.php
===================================================================
--- trunk/MgDev/Bindings/src/Test/Php/master.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Test/Php/master.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,6 +1,5 @@
 <?php
 
-require_once("MapGuideApi.php");
-require_once("constants.php");
+//require_once("constants.php");
 
 ?>
\ No newline at end of file

Modified: trunk/MgDev/Bindings/src/Tools/ClassMapGen/ClassMapGen.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Tools/ClassMapGen/ClassMapGen.csproj	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/ClassMapGen/ClassMapGen.csproj	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
@@ -31,7 +31,7 @@
   </ItemGroup>
 
   <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
-    <Exec Command="&quot;..\..\Tools\swig\install\swig.exe&quot; -c++ -xml \
-nodefaultctor -nodefaultdtor -module MapGuideClassIds classids.i" /> +    <Exec \
Command="&quot;$(SWIG_DIR)\swig.exe&quot; -c++ -xml -nodefaultctor -nodefaultdtor \
-module MapGuideClassIds classids.i" />  </Target>
   
 </Project>

Modified: trunk/MgDev/Bindings/src/Tools/MgTestAdmin/MgTestAdmin.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Tools/MgTestAdmin/MgTestAdmin.csproj	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/MgTestAdmin/MgTestAdmin.csproj	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net5.0-windows</TargetFramework>
+    <TargetFramework>net6.0-windows</TargetFramework>
     <UseWindowsForms>true</UseWindowsForms>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>

Index: trunk/MgDev/Bindings/src/Tools/MgTestAdmin/Properties
===================================================================
--- trunk/MgDev/Bindings/src/Tools/MgTestAdmin/Properties	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/MgTestAdmin/Properties	2022-10-10 11:14:40 UTC \
(rev 9977)

Property changes on: trunk/MgDev/Bindings/src/Tools/MgTestAdmin/Properties
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+PublishProfiles
Modified: trunk/MgDev/Bindings/src/Tools/PhpPostProcess/PhpPostProcess.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Tools/PhpPostProcess/PhpPostProcess.csproj	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/PhpPostProcess/PhpPostProcess.csproj	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
     <LangVersion>latest</LangVersion>
   </PropertyGroup>
 

Modified: trunk/MgDev/Bindings/src/Tools/StampVer/StampVer.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Tools/StampVer/StampVer.csproj	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/StampVer/StampVer.csproj	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
 </Project>

Modified: trunk/MgDev/Bindings/src/Tools/SwigPrepare/SwigPrepare.csproj
===================================================================
--- trunk/MgDev/Bindings/src/Tools/SwigPrepare/SwigPrepare.csproj	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Bindings/src/Tools/SwigPrepare/SwigPrepare.csproj	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
 </Project>

Modified: trunk/MgDev/CMakeLists.txt
===================================================================
--- trunk/MgDev/CMakeLists.txt	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -194,10 +194,8 @@
 find_package(Sanitizers)
 find_package(MapGuideThirdparty REQUIRED)
 
-# Set internal tool paths
-set(IMAKE_TOOL ${CMAKE_CURRENT_BINARY_DIR}/BuildTools/WebTools/IMake/IMake)
-set(SWIG_TOOL ${MG_OEM_ROOT_BUILD_DIR}/SWIGEx/swig)
-set(SWIG_LIB_PATH ${MG_OEM_ROOT_BUILD_DIR}/SWIGEx/Lib)
+# We no longer use internal SWIG, we expect this to be found externally
+find_program(SWIG_TOOL swig)
 
 # Set common commands.
 set(MOVE_COMMAND "mv")
@@ -253,9 +251,6 @@
     set (NEED_LIBRT 1)
 endif (NOT HAVE_CLOCK_GETTIME)
 
-if (NOT MG_COMMON_SUBSET_ONLY)
-    add_subdirectory(BuildTools)
-endif (NOT MG_COMMON_SUBSET_ONLY)
 add_subdirectory(Oem)
 add_subdirectory(Common)
 if (NOT MG_COMMON_SUBSET_ONLY)

Modified: trunk/MgDev/Common/Foundation/Data/BatchPropertyCollection.h
===================================================================
--- trunk/MgDev/Common/Foundation/Data/BatchPropertyCollection.h	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Common/Foundation/Data/BatchPropertyCollection.h	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -87,12 +87,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// virtual int Add(MgPropertyCollection value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// virtual int Add(MgPropertyCollection value);
+    /// virtual int addItem(MgPropertyCollection value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// virtual int Add(MgPropertyCollection value);

Modified: trunk/MgDev/Common/Foundation/Data/PropertyCollection.h
===================================================================
--- trunk/MgDev/Common/Foundation/Data/PropertyCollection.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/Foundation/Data/PropertyCollection.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -94,12 +94,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// virtual int Add(MgProperty value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// virtual int Add(MgProperty value);
+    /// virtual int addItem(MgProperty value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// virtual int Add(MgProperty value);

Modified: trunk/MgDev/Common/Foundation/Data/PropertyDefinition.h
===================================================================
--- trunk/MgDev/Common/Foundation/Data/PropertyDefinition.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/Foundation/Data/PropertyDefinition.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -186,12 +186,15 @@
     /// \brief
     /// Marks the property definition for deletion.
     ///
+    /// \remarks
+    /// This method is called markAsDeleted in Java (to avoid conflicting with a \
SWIG-generated method of the same name) +    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Delete();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Delete();
+    /// void markAsDeleted();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Delete();
@@ -201,7 +204,8 @@
     /// Returns nothing.
     ///
     /// \since 2.2
-	///
+    /// \since 4.0 Documented the name change for Java
+    ///
     void Delete();
 
 EXTERNAL_API:

Modified: trunk/MgDev/Common/Foundation/Data/StringCollection.h
===================================================================
--- trunk/MgDev/Common/Foundation/Data/StringCollection.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/Foundation/Data/StringCollection.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -130,12 +130,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// virtual int Add(string value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// virtual int Add(String value);
+    /// virtual int addItem(String value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// virtual int Add(string value);

Modified: trunk/MgDev/Common/Foundation/Exception/Exception.h
===================================================================
--- trunk/MgDev/Common/Foundation/Exception/Exception.h	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Common/Foundation/Exception/Exception.h	2022-10-10 11:14:40 UTC (rev \
9977) @@ -115,7 +115,7 @@
     /// string GetStackTrace();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// String GetStackTrace();
+    /// String getExceptionStackTrace();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// string GetStackTrace();
@@ -124,6 +124,9 @@
     /// \return
     /// Call stack trace with method parameters
     ///
+    /// \since 4.0 In Java, this method was renamed from GetStackTrace to \
getExceptionStackTrace to avoid name conflict +    /// with \
java.lang.Throwable.getStackTrace() which has an incompatible method signature +    \
///  STRING GetStackTrace() throw();
 
     ///////////////////////////////////////////////////////////////////////////

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemMeasure.h
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemMeasure.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemMeasure.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -128,6 +128,11 @@
     /// \brief
     /// Computes the distance between two coordinates.
     ///
+    /// \remarks
+    /// This method is called GetDistanceSimple in PHP
+    ///
+    /// \since 4.0 Documented method name change for PHP
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     ///  virtual double GetDistance(double x1, double y1, double x2, double y2);
@@ -136,7 +141,7 @@
     ///  virtual double GetDistance(double x1, double y1, double x2, double y2);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
-    ///  virtual double GetDistance(double x1, double y1, double x2, double y2);
+    ///  virtual double GetDistanceSimple(double x1, double y1, double x2, double \
y2);  /// \htmlinclude SyntaxBottom.html
     ///
     /// \param x1 (double)
@@ -162,7 +167,7 @@
     /// 42.355892) is Boston, Massachusetts. $distance is
     /// 361777.95418396 meters.
     /// \code
-    /// $distance = $coordSysMeasure->Getdistance(-74.806394, 40.714169, -71.061342, \
42.355892); +    /// $distance = $coordSysMeasure->GetDistanceSimple(-74.806394, \
40.714169, -71.061342, 42.355892);  /// \endcode
     /// \htmlinclude ExampleBottom.html
     ////
@@ -273,6 +278,11 @@
     /// Computes the angle with respect to the north of a vector
     /// formed by two coordinates.
     ///
+    /// \remarks
+    /// This method is called GetAzimuthSimple in PHP
+    ///
+    /// \since 4.0 Documented method name change for PHP
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     ///  virtual double GetAzimuth(double lon1, double lat1, double lon2, double \
lat2); @@ -281,7 +291,7 @@
     ///  virtual double GetAzimuth(double lon1, double lat1, double lon2, double \
lat2);  /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
-    ///  virtual double GetAzimuth(double lon1, double lat1, double lon2, double \
lat2); +    ///  virtual double GetAzimuthSimple(double lon1, double lat1, double \
lon2, double lat2);  /// \htmlinclude SyntaxBottom.html
     ///
     /// \param x1 (double)
@@ -307,8 +317,8 @@
     /// 42.355892) is Boston, Massachusetts. $azimuth12 is
     /// 58.507421025167, and $azimuth21 = -119.00856518347.
     /// \code
-    /// $azimuth12 = $coordSysMeasure->GetAzimuth(-74.806394, 40.714169, -71.061342, \
                42.355892);
-    /// $azimuth21 = $coordSysMeasure->GetAzimuth(-71.061342, 42.355892, -74.806394, \
40.714169); +    /// $azimuth12 = $coordSysMeasure->GetAzimuthSimple(-74.806394, \
40.714169, -71.061342, 42.355892); +    /// $azimuth21 = \
$coordSysMeasure->GetAzimuthSimple(-71.061342, 42.355892, -74.806394, 40.714169);  \
/// \endcode  /// \htmlinclude ExampleBottom.html
     ///
@@ -418,7 +428,7 @@
     ///
     /// \exception MgCoordinateSystemMeasureFailedException
     ///
-     virtual MgCoordinate* GetCoordinate(MgCoordinate* coord, double azimuth, double \
distance)=0; +    virtual MgCoordinate* GetCoordinate(MgCoordinate* coord, double \
azimuth, double distance)=0;  
     ///////////////////////////////////////////////////////////////////////////////// \
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /// \brief
@@ -426,6 +436,11 @@
     /// defined by a starting coordinate and an azimuth
     /// (Angle with respect to the North).
     ///
+    /// \remarks
+    /// This method is called GetCoordinateSimple in PHP
+    ///
+    /// \since 4.0 Documented method name change for PHP
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     ///  virtual MgCoordinate GetCoordinate(double lon, double lat, double azimuth, \
double distance); @@ -434,7 +449,7 @@
     ///  virtual MgCoordinate GetCoordinate(double lon, double lat, double azimuth, \
double distance);  /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
-    ///  virtual MgCoordinate GetCoordinate(double lon, double lat, double azimuth, \
double distance); +    ///  virtual MgCoordinate GetCoordinateSimple(double lon, \
double lat, double azimuth, double distance);  /// \htmlinclude SyntaxBottom.html
     ///
     /// \param xStart (double)

Modified: trunk/MgDev/Common/Geometry/GeometryCommon.h
===================================================================
--- trunk/MgDev/Common/Geometry/GeometryCommon.h	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/Geometry/GeometryCommon.h	2022-10-10 11:14:40 UTC (rev 9977)
@@ -138,6 +138,7 @@
 #include "CoordinateSystem/CoordinateSystemEllipsoidDictionary.h"           //for \
MgCoordinateSystemEllipsoidDictionary  #include \
"CoordinateSystem/CoordinateSystemCategoryDictionary.h"            //for \
MgCoordinateSystemCategoryDictionary  #include \
"CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h"    //for \
MgCoordinateSystemGeodeticTransformDefDictionary +#include \
"CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h"    //for \
MgCoordinateSystemGeodeticTransformGridFileFormat  #include \
"CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h"            //for \
MgCoordinateSystemGeodeticPathDictionary  #include \
"CoordinateSystem/CoordinateSystemDictionaryUtility.h"             //for \
MgCoordinateSystemDictionaryUtility  #include \
"CoordinateSystem/CoordinateSystemCatalog.h"

Modified: trunk/MgDev/Common/MapGuideCommon/MapLayer/Map.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/MapLayer/Map.h	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Common/MapGuideCommon/MapLayer/Map.h	2022-10-10 11:14:40 UTC (rev \
9977) @@ -285,11 +285,6 @@
     /// definition and a name for the map. This method is used for
     /// MapGuide Viewers or for offline map production.
     ///
-    /// \remarks
-    /// If creating a MgMap object from a tile set definition, only "Default" is the
-    /// acceptable tile provider. Any other provider will cause this method to
-    /// throw a MgUnsupportedTileProviderException
-    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Create(MgResourceIdentifier mapDefinition, string mapName);
@@ -321,6 +316,9 @@
     /// \endcode
     /// \htmlinclude ExampleBottom.html
     ///
+    /// \since 4.0 This method no longer throws MgUnsupportedTileProviderException \
if passing a resource +    /// id of a tile set definition not using the "Default" \
tile provider +    ///
     virtual void Create(MgResourceIdentifier* resource, CREFSTRING mapName);
 
     //////////////////////////////////////////////////////////////////
@@ -358,9 +356,7 @@
     /// This method is used for MapGuide Viewers or for offline map production.
     ///
     /// \remarks
-    /// If creating a MgMap object from a tile set definition, only "Default" is the
-    /// acceptable tile provider. Any other provider will cause this method to
-    /// throw a MgUnsupportedTileProviderException
+    /// This method is called CreateStateless in PHP
     ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
@@ -370,7 +366,7 @@
     /// void Create(MgResourceIdentifier mapDefinition, String mapName, int \
displayWidth, int displayHeight, double x, double y, double scale, int dpi);  /// \
\htmlinclude SyntaxBottom.html  /// \htmlinclude PHPSyntaxTop.html
-    /// void Create(MgResourceIdentifier mapDefinition, string mapName, int \
displayWidth, int displayHeight, double x, double y, double scale, int dpi); +    /// \
void CreateStateless(MgResourceIdentifier mapDefinition, string mapName, int \
displayWidth, int displayHeight, double x, double y, double scale, int dpi);  /// \
\htmlinclude SyntaxBottom.html  ///
     /// \param resource
@@ -404,7 +400,7 @@
     /// $resourceID = new  \
MgResourceIdentifier('Library://Calgary/Maps/Calgary.MapDefinition');  /// $map = new \
                MgMap($site);
     /// // Initializes the map to be centered on the Calgary CBD at 1:5000 scale \
                with a DPI of 96
-    /// $map->Create($resourceID, 'Calgary', 640, 480, -114.054565, 51.068369, \
5000.0, 96); +    /// $map->CreateStateless($resourceID, 'Calgary', 640, 480, \
-114.054565, 51.068369, 5000.0, 96);  /// \endcode
     /// \htmlinclude ExampleBottom.html
     ///

Modified: trunk/MgDev/Common/PlatformBase/Data/IntCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Data/IntCollection.h	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Common/PlatformBase/Data/IntCollection.h	2022-10-10 11:14:40 UTC (rev \
9977) @@ -131,12 +131,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// virtual int Add(int value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// virtual int Add(int value);
+    /// virtual int addItem(int value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// virtual int Add(int value);

Modified: trunk/MgDev/Common/PlatformBase/Data/PropertyDefinitionCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Data/PropertyDefinitionCollection.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Data/PropertyDefinitionCollection.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -110,12 +110,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// virtual int Add(MgPropertyDefinition value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// virtual int Add(MgPropertyDefinition value);
+    /// virtual int addItem(MgPropertyDefinition value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// virtual int Add(MgPropertyDefinition value);

Modified: trunk/MgDev/Common/PlatformBase/MapLayer/LayerCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/MapLayer/LayerCollection.h	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/MapLayer/LayerCollection.h	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -143,12 +143,18 @@
     /// \brief
     /// Adds a layer to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Add(MgLayerBase value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Add(MgLayerBase value);
+    /// void addItem(MgLayerBase value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Add(MgLayerBase value);

Modified: trunk/MgDev/Common/PlatformBase/MapLayer/LayerGroupCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/MapLayer/LayerGroupCollection.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/MapLayer/LayerGroupCollection.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -137,12 +137,18 @@
     /// \brief
     /// Adds a layer group to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Add(MgLayerGroup value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Add(MgLayerGroup value);
+    /// void addItem(MgLayerGroup value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Add(MgLayerGroup value);

Modified: trunk/MgDev/Common/PlatformBase/Services/ClassDefinition.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/ClassDefinition.h	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/ClassDefinition.h	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -303,12 +303,15 @@
     /// \brief
     /// Marks the class definition for deletion.
     ///
+    /// \remarks
+    /// This method is called markAsDeleted in Java (to avoid conflicting with a \
SWIG-generated method of the same name) +    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Delete();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Delete();
+    /// void markAsDeleted();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Delete();
@@ -318,6 +321,7 @@
     /// Returns nothing.
     ///
     /// \since 2.2
+    /// \since 4.0 Documented the name change for Java
 	///
     void Delete();
 

Modified: trunk/MgDev/Common/PlatformBase/Services/ClassDefinitionCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/ClassDefinitionCollection.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/ClassDefinitionCollection.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -90,12 +90,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Add(MgClassDefinition value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Add(MgClassDefinition value);
+    /// void addItem(MgClassDefinition value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Add(MgClassDefinition value);

Modified: trunk/MgDev/Common/PlatformBase/Services/FeatureSchema.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/FeatureSchema.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/FeatureSchema.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -185,12 +185,15 @@
     /// \brief
     /// Marks the feature schema for deletion.
     ///
+    /// \remarks
+    /// This method is called markAsDeleted in Java (to avoid conflicting with a \
SWIG-generated method of the same name) +    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// void Delete();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// void Delete();
+    /// void markAsDeleted();
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// void Delete();
@@ -200,6 +203,7 @@
     /// Returns nothing.
     ///
     /// \since 2.2
+    /// \since 4.0 Documented the name change for Java
 	///
     void Delete();
 

Modified: trunk/MgDev/Common/PlatformBase/Services/FeatureSchemaCollection.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/FeatureSchemaCollection.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/FeatureSchemaCollection.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -90,12 +90,18 @@
     /// \brief
     /// Adds the specified item to the end of the collection.
     ///
+    /// \remarks
+    /// This method is called addItem in Java (to avoid incompatible method \
signature as a result of  +    /// the Java proxy class implementing the \
java.util.Collection interface) +    ///
+    /// \since 4.0 Documented method name change for Java
+    ///
     /// <!-- Syntax in .Net, Java, and PHP -->
     /// \htmlinclude DotNetSyntaxTop.html
     /// int Add(MgFeatureSchema value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude JavaSyntaxTop.html
-    /// int Add(MgFeatureSchema value);
+    /// int addItem(MgFeatureSchema value);
     /// \htmlinclude SyntaxBottom.html
     /// \htmlinclude PHPSyntaxTop.html
     /// int Add(MgFeatureSchema value);

Modified: trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.cpp
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.cpp	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.cpp	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -105,9 +105,9 @@
 ///////////////////////////////////////////////////////////////////////////////
 /// Types of resource permissions
 ///
-const STRING MgResourcePermission::NoAccess         = L"n";
-const STRING MgResourcePermission::ReadOnly         = L"r";
-const STRING MgResourcePermission::ReadWrite        = L"r,w";
+const STRING MgResourcePermission::PermissionNoAccess         = L"n";
+const STRING MgResourcePermission::PermissionReadOnly         = L"r";
+const STRING MgResourcePermission::PermissionReadWrite        = L"r,w";
 
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Common/PlatformBase/Services/ResourceDefs.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -570,15 +570,18 @@
 
     /// \brief
     /// No Access permission.
-    static const STRING NoAccess;       ///\if INTERNAL value("n") \endif
+    /// \since 4.0 This has been renamed from NoAccess to PermissionNoAccess
+    static const STRING PermissionNoAccess;       ///\if INTERNAL value("n") \endif
 
     /// \brief
     /// Read-Only permission.
-    static const STRING ReadOnly;       ///\if INTERNAL value("r") \endif
+    /// \since 4.0 This has been renamed from ReadOnly to PermissionReadOnly
+    static const STRING PermissionReadOnly;       ///\if INTERNAL value("r") \endif
 
     /// \brief
     /// Read/Write permission.
-    static const STRING ReadWrite;      ///\if INTERNAL value("r,w") \endif
+    /// \since 4.0 This has been renamed from ReadWrite to PermissionReadWrite
+    static const STRING PermissionReadWrite;      ///\if INTERNAL value("r,w") \
\endif  };
 
 

Modified: trunk/MgDev/Doc/samples/javasamples/hello_map/display_spatial_reference.jsp
===================================================================
--- trunk/MgDev/Doc/samples/javasamples/hello_map/display_spatial_reference.jsp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javasamples/hello_map/display_spatial_reference.jsp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -42,7 +42,7 @@
       // --------------------------------------------------//
       // Basic initialization needs to be done every time.
       
-      MapGuideJavaApiEx.MgInitializeWebTier(webconfigFilePath);
+      MapGuideJavaApi.mgInitializeWebTier(webconfigFilePath);
 
       // Get the user information using the session id,
       // and set up a connection to the site server.

Modified: trunk/MgDev/Doc/samples/javasamples/index.jsp
===================================================================
--- trunk/MgDev/Doc/samples/javasamples/index.jsp	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javasamples/index.jsp	2022-10-10 11:14:40 UTC (rev 9977)
@@ -61,9 +61,9 @@
       Viewer Samples
     </h1>
       <ul>
-        <li><a href="../javaviewersample/dwfviewersample.jsp?SESSION=<?= $sessionId \
                ?>&MAPNAME=<?= $mapName ?>" target="_blank">Using DWF Viewer</a></li>
-        <li><a href="../javaviewersample/ajaxviewersample.jsp?SESSION=<?= $sessionId \
                ?>&MAPNAME=<?= $mapName ?>" target="_blank">Using Ajax \
                Viewer</a></li>
-        <li><a href="../javaviewersample/ajaxtiledviewersample.jsp?SESSION=<?= \
$sessionId ?>&MAPNAME=<?= $mapName ?>" target="_blank">Using Tiled Ajax \
Viewer</a></li> +        <li><a \
href="../javaviewersample/dwfviewersample.jsp?SESSION=<%= sessionId %>&MAPNAME=<%= \
mapName %>" target="_blank">Using DWF Viewer</a></li> +        <li><a \
href="../javaviewersample/ajaxviewersample.jsp?SESSION=<%= sessionId %>&MAPNAME=<%= \
mapName %>" target="_blank">Using Ajax Viewer</a></li> +        <li><a \
href="../javaviewersample/ajaxtiledviewersample.jsp?SESSION=<%= sessionId \
%>&MAPNAME=<%= mapName %>" target="_blank">Using Tiled Ajax Viewer</a></li>  </ul>
     <%
     String helpDir = webExtensionsDirectory + "www/Help/";

Modified: trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/layer_visibility.jsp
 ===================================================================
--- trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/layer_visibility.jsp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/layer_visibility.jsp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -39,7 +39,7 @@
 
     try
     {
-      MapGuideJavaApiEx.MgInitializeWebTier(webconfigFilePath);
+      MapGuideJavaApi.mgInitializeWebTier(webconfigFilePath);
 
       // Get the user information using the session id,
       // and set up a connection to the site server.

Modified: trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/toggle_roads_label.jsp
 ===================================================================
--- trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/toggle_roads_label.jsp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javasamples/interacting_with_layers/toggle_roads_label.jsp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -51,7 +51,7 @@
       // the Web Extensions session identifier stored in PHP
       // session state.
 
-      MapGuideJavaApiEx.MgInitializeWebTier(webconfigFilePath);
+      MapGuideJavaApi.mgInitializeWebTier(webconfigFilePath);
 
       // Get the user information using the session id,
       // and set up a connection to the site server.
@@ -86,18 +86,15 @@
       "&MAPNAME=" + mapName + "\">Run again</a></p>");
 
     }
-    catch (MgLayerNotFoundException e)
-    {
-      out.println("<p>Layer not found</p>");
-    }
-    catch (MgObjectNotFoundException e)
-    {
-      out.println("<p>Layer not found</p>");
-    }
     catch (MgException e)
     {
-      out.println(e.getExceptionMessage());
-      out.println(e.getDetails());
+      if (e.getExceptionCode().equals(MgExceptionCodes.MgLayerNotFoundException)
+        || e.getExceptionCode().equals(MgExceptionCodes.MgObjectNotFoundException)) \
{ +        out.println("<p>Layer not found</p>");
+      } else {
+        out.println(e.getExceptionMessage());
+        out.println(e.getDetails());
+      }
     }
   %>
 

Modified: trunk/MgDev/Doc/samples/javasamples/main.jsp
===================================================================
--- trunk/MgDev/Doc/samples/javasamples/main.jsp	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javasamples/main.jsp	2022-10-10 11:14:40 UTC (rev 9977)
@@ -30,7 +30,7 @@
     // Initialize web tier with the site configuration file.  The config
     // file should be in the same folder as this script.
     String configPath =  realpath + "webconfig.ini";
-    MapGuideJavaApiEx.MgInitializeWebTier( configPath );
+    MapGuideJavaApi.mgInitializeWebTier( configPath );
 
     MgUserInformation userInfo = new MgUserInformation("Author", "author");
     MgSite site = new MgSite();

Modified: trunk/MgDev/Doc/samples/javaviewersample/utilityfunctions.jsp
===================================================================
--- trunk/MgDev/Doc/samples/javaviewersample/utilityfunctions.jsp	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/javaviewersample/utilityfunctions.jsp	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -26,7 +26,7 @@
     // Initialize web tier with the site configuration file.  The config
     // file should be in the same folder as this script.
     String configPath =  realpath + "webconfig.ini";
-    MapGuideJavaApiEx.MgInitializeWebTier( configPath );
+    MapGuideJavaApi.mgInitializeWebTier( configPath );
 }
 
 String GetQueryXmlTemplatePath()

Modified: trunk/MgDev/Doc/samples/phpsamples/common/common.php
===================================================================
--- trunk/MgDev/Doc/samples/phpsamples/common/common.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Doc/samples/phpsamples/common/common.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -20,7 +20,5 @@
 $viewerFilesDirectory = $webRootDirectory . '/viewerfiles';  
 $schemaDirectory = dirname(__FILE__);
 $webconfigFilePath = $webRootDirectory . '/webconfig.ini';
-// Include constants like MgServiceType::ResourceService
-require_once($webRootDirectory . '/mapadmin/constants.php');	
 
 ?>
\ No newline at end of file

Modified: trunk/MgDev/Doc/samples/phpsamples/custom_output/createmapimage.php
===================================================================
--- trunk/MgDev/Doc/samples/phpsamples/custom_output/createmapimage.php	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/phpsamples/custom_output/createmapimage.php	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -23,11 +23,11 @@
 $sessionId = $args['SESSION'];
 $xmlSelection = $args['SELECTION'];
 $mapName = $args['MAPNAME'];
-$mapScale = $args['SCALE'];
-$imageHeight = $args['HEIGHT'];
-$imageWidth = $args['WIDTH'];
-$mapCenterX = $args['CENTERX'];
-$mapCenterY = $args['CENTERY'];
+$mapScale = doubleval($args['SCALE']);
+$imageHeight = intval($args['HEIGHT']);
+$imageWidth = intval($args['WIDTH']);
+$mapCenterX = doubleval($args['CENTERX']);
+$mapCenterY = doubleval($args['CENTERY']);
 
 try
 {

Modified: trunk/MgDev/Doc/samples/phpsamples/custom_output/eplot.php
===================================================================
--- trunk/MgDev/Doc/samples/phpsamples/custom_output/eplot.php	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/phpsamples/custom_output/eplot.php	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -41,8 +41,7 @@
 
   $dwfVersion = new MgDwfVersion("6.01", "1.2");
 
-  $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches);
-  $plotSpec->SetMargins(0.5, 0.5, 0.5, 0.5);
+  $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches, 0.5, 0.5, \
0.5, 0.5);  
   $layoutRes = new MgResourceIdentifier("Library://Samples/Sheboygan/Layouts/SheboyganMap.PrintLayout");
  $layout =  new MgLayout($layoutRes, "City of Sheboygan", MgPageUnitsType::Inches);

Modified: trunk/MgDev/Doc/samples/phpsamples/custom_output/multiplot.php
===================================================================
--- trunk/MgDev/Doc/samples/phpsamples/custom_output/multiplot.php	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/phpsamples/custom_output/multiplot.php	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -41,8 +41,7 @@
 
   $dwfVersion = new MgDwfVersion("6.01", "1.2");
 
-  $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches);
-  $plotSpec->SetMargins(0.5, 0.5, 0.5, 0.5);
+  $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches, 0.5, 0.5, \
0.5, 0.5);  
   $layout = null;
   $layoutRes = new MgResourceIdentifier("Library://Samples/Sheboygan/Layouts/SheboyganMap.PrintLayout");


Modified: trunk/MgDev/Doc/samples/phpsamples/interacting_with_layers/toggle_roads_label.php
 ===================================================================
--- trunk/MgDev/Doc/samples/phpsamples/interacting_with_layers/toggle_roads_label.php	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/phpsamples/interacting_with_layers/toggle_roads_label.php	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -79,18 +79,15 @@
       '&MAPNAME=' . $mgMapName . '">Run again</a></p>';
 
     }
-    catch (MgLayerNotFoundException $e)
-    {
-      echo '<p>Layer not found</p>';
-    }
-    catch (MgObjectNotFoundException $e)
-    {
-      echo '<p>Layer not found</p>';
-    }
     catch (MgException $e)
     {
-      echo $e->GetExceptionMessage();
-      echo $e->GetDetails();
+      if ($e->GetExceptionCode() == MgExceptionCodes::MgLayerNotFoundException ||
+          $e->GetExceptionCode() == MgExceptionCodes::MgObjectNotFoundException) {
+        echo '<p>Layer not found</p>';
+      } else {
+        echo $e->GetExceptionMessage();
+        echo $e->GetDetails();
+      }
     }
   ?>
 

Modified: trunk/MgDev/Doc/samples/phpviewersample/JSON.php
===================================================================
--- trunk/MgDev/Doc/samples/phpviewersample/JSON.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Doc/samples/phpviewersample/JSON.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -114,6 +114,8 @@
  */
 class Services_JSON
 {
+    private int $use;
+
    /**
     * constructs a new JSON instance
     *
@@ -130,7 +132,7 @@
     *                                   bubble up with an error, so all return \
                values
     *                                   from encode() should be checked with \
                isError()
     */
-    function Services_JSON($use = 0)
+    function __construct($use = 0)
     {
         $this->use = $use;
     }
@@ -153,7 +155,7 @@
             return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
         }
 
-        $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
+        $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
 
         switch(true) {
             case ((0x7F & $bytes) == $bytes):
@@ -206,17 +208,17 @@
             case 2:
                 // return a UTF-16 character from a 2-byte UTF-8 char
                 // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0x07 & (ord($utf8{0}) >> 2))
-                     . chr((0xC0 & (ord($utf8{0}) << 6))
-                         | (0x3F & ord($utf8{1})));
+                return chr(0x07 & (ord($utf8[0]) >> 2))
+                     . chr((0xC0 & (ord($utf8[0]) << 6))
+                         | (0x3F & ord($utf8[1])));
 
             case 3:
                 // return a UTF-16 character from a 3-byte UTF-8 char
                 // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr((0xF0 & (ord($utf8{0}) << 4))
-                         | (0x0F & (ord($utf8{1}) >> 2)))
-                     . chr((0xC0 & (ord($utf8{1}) << 6))
-                         | (0x7F & ord($utf8{2})));
+                return chr((0xF0 & (ord($utf8[0]) << 4))
+                         | (0x0F & (ord($utf8[1]) >> 2)))
+                     . chr((0xC0 & (ord($utf8[1]) << 6))
+                         | (0x7F & ord($utf8[2])));
         }
 
         // ignoring UTF-32 for now, sorry
@@ -261,7 +263,7 @@
                 */
                 for ($c = 0; $c < $strlen_var; ++$c) {
 
-                    $ord_var_c = ord($var{$c});
+                    $ord_var_c = ord($var[$c]);
 
                     switch (true) {
                         case $ord_var_c == 0x08:
@@ -284,18 +286,18 @@
                         case $ord_var_c == 0x2F:
                         case $ord_var_c == 0x5C:
                             // double quote, slash, slosh
-                            $ascii .= '\\'.$var{$c};
+                            $ascii .= '\\'.$var[$c];
                             break;
 
                         case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
                             // characters U-00000000 - U-0000007F (same as ASCII)
-                            $ascii .= $var{$c};
+                            $ascii .= $var[$c];
                             break;
 
                         case (($ord_var_c & 0xE0) == 0xC0):
                             // characters U-00000080 - U-000007FF, mask 110XXXXX
                             // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+                            $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
                             $c += 1;
                             $utf16 = $this->utf82utf16($char);
                             $ascii .= sprintf('\u%04s', bin2hex($utf16));
@@ -305,8 +307,8 @@
                             // characters U-00000800 - U-0000FFFF, mask 1110XXXX
                             // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                             $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}));
+                                         ord($var[$c + 1]),
+                                         ord($var[$c + 2]));
                             $c += 2;
                             $utf16 = $this->utf82utf16($char);
                             $ascii .= sprintf('\u%04s', bin2hex($utf16));
@@ -316,9 +318,9 @@
                             // characters U-00010000 - U-001FFFFF, mask 11110XXX
                             // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                             $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}));
+                                         ord($var[$c + 1]),
+                                         ord($var[$c + 2]),
+                                         ord($var[$c + 3]));
                             $c += 3;
                             $utf16 = $this->utf82utf16($char);
                             $ascii .= sprintf('\u%04s', bin2hex($utf16));
@@ -328,10 +330,10 @@
                             // characters U-00200000 - U-03FFFFFF, mask 111110XX
                             // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                             $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}));
+                                         ord($var[$c + 1]),
+                                         ord($var[$c + 2]),
+                                         ord($var[$c + 3]),
+                                         ord($var[$c + 4]));
                             $c += 4;
                             $utf16 = $this->utf82utf16($char);
                             $ascii .= sprintf('\u%04s', bin2hex($utf16));
@@ -341,11 +343,11 @@
                             // characters U-04000000 - U-7FFFFFFF, mask 1111110X
                             // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                             $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}),
-                                         ord($var{$c + 5}));
+                                         ord($var[$c + 1]),
+                                         ord($var[$c + 2]),
+                                         ord($var[$c + 3]),
+                                         ord($var[$c + 4]),
+                                         ord($var[$c + 5]));
                             $c += 5;
                             $utf16 = $this->utf82utf16($char);
                             $ascii .= sprintf('\u%04s', bin2hex($utf16));
@@ -520,7 +522,7 @@
                     for ($c = 0; $c < $strlen_chrs; ++$c) {
 
                         $substr_chrs_c_2 = substr($chrs, $c, 2);
-                        $ord_chrs_c = ord($chrs{$c});
+                        $ord_chrs_c = ord($chrs[$c]);
 
                         switch (true) {
                             case $substr_chrs_c_2 == '\b':
@@ -550,7 +552,7 @@
                             case $substr_chrs_c_2 == '\\/':
                                 if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
                                    ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
-                                    $utf8 .= $chrs{++$c};
+                                    $utf8 .= $chrs[++$c];
                                 }
                                 break;
 
@@ -563,7 +565,7 @@
                                 break;
 
                             case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
-                                $utf8 .= $chrs{$c};
+                                $utf8 .= $chrs[$c];
                                 break;
 
                             case ($ord_chrs_c & 0xE0) == 0xC0:
@@ -610,7 +612,7 @@
                 } elseif (preg_match('/^\[.*\]$/s', $str) || \
preg_match('/^\{.*\}$/s', $str)) {  // array, or object notation
 
-                    if ($str{0} == '[') {
+                    if ($str[0] == '[') {
                         $stk = array(SERVICES_JSON_IN_ARR);
                         $arr = array();
                     } else {
@@ -649,7 +651,7 @@
                         $top = end($stk);
                         $substr_chrs_c_2 = substr($chrs, $c, 2);
 
-                        if (($c == $strlen_chrs) || (($chrs{$c} == ',') && \
($top['what'] == SERVICES_JSON_SLICE))) { +                        if (($c == \
                $strlen_chrs) || (($chrs[$c] == ',') && ($top['what'] == \
                SERVICES_JSON_SLICE))) {
                             // found a comma that is not inside a string, array, \
                etc.,
                             // OR we've reached the end of the character list
                             $slice = substr($chrs, $top['where'], ($c - \
$top['where'])); @@ -691,12 +693,12 @@
 
                             }
 
-                        } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && \
($top['what'] != SERVICES_JSON_IN_STR)) { +                        } elseif \
((($chrs[$c] == '"') || ($chrs[$c] == "'")) && ($top['what'] != \
                SERVICES_JSON_IN_STR)) {
                             // found a quote, and we are not inside a string
-                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, \
'where' => $c, 'delim' => $chrs{$c})); +                            array_push($stk, \
array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs[$c]));  \
//print("Found start of string at {$c}\n");  
-                        } elseif (($chrs{$c} == $top['delim']) &&
+                        } elseif (($chrs[$c] == $top['delim']) &&
                                  ($top['what'] == SERVICES_JSON_IN_STR) &&
                                  ((strlen(substr($chrs, 0, $c)) - \
                strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
                             // found a quote, we're in a string, and it's not \
escaped @@ -705,24 +707,24 @@
                             array_pop($stk);
                             //print("Found end of string at {$c}: ".substr($chrs, \
$top['where'], (1 + 1 + $c - $top['where']))."\n");  
-                        } elseif (($chrs{$c} == '[') &&
+                        } elseif (($chrs[$c] == '[') &&
                                  in_array($top['what'], array(SERVICES_JSON_SLICE, \
                SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
                             // found a left-bracket, and we are in an array, object, \
                or slice
                             array_push($stk, array('what' => SERVICES_JSON_IN_ARR, \
'where' => $c, 'delim' => false));  //print("Found start of array at {$c}\n");
 
-                        } elseif (($chrs{$c} == ']') && ($top['what'] == \
SERVICES_JSON_IN_ARR)) { +                        } elseif (($chrs[$c] == ']') && \
                ($top['what'] == SERVICES_JSON_IN_ARR)) {
                             // found a right-bracket, and we're in an array
                             array_pop($stk);
                             //print("Found end of array at {$c}: ".substr($chrs, \
$top['where'], (1 + $c - $top['where']))."\n");  
-                        } elseif (($chrs{$c} == '{') &&
+                        } elseif (($chrs[$c] == '{') &&
                                  in_array($top['what'], array(SERVICES_JSON_SLICE, \
                SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
                             // found a left-brace, and we are in an array, object, \
                or slice
                             array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, \
'where' => $c, 'delim' => false));  //print("Found start of object at {$c}\n");
 
-                        } elseif (($chrs{$c} == '}') && ($top['what'] == \
SERVICES_JSON_IN_OBJ)) { +                        } elseif (($chrs[$c] == '}') && \
                ($top['what'] == SERVICES_JSON_IN_OBJ)) {
                             // found a right-brace, and we're in an object
                             array_pop($stk);
                             //print("Found end of object at {$c}: ".substr($chrs, \
$top['where'], (1 + $c - $top['where']))."\n");

Modified: trunk/MgDev/Doc/samples/phpviewersample/plot/plot.php
===================================================================
--- trunk/MgDev/Doc/samples/phpviewersample/plot/plot.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Doc/samples/phpviewersample/plot/plot.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -42,8 +42,7 @@
     // current view of the map.
 
     $dwfVersion = new MgDwfVersion("6.01", "1.2");
-    $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches);
-    $plotSpec->SetMargins(0.5, 0.5, 0.5, 0.5);
+    $plotSpec = new MgPlotSpecification(8.5, 11, MgPageUnitsType::Inches, 0.5, 0.5, \
0.5, 0.5);  
     $mappingService = $siteConnection->CreateService(MgServiceType::MappingService);
 

Modified: trunk/MgDev/Doc/samples/phpviewersample/utilityfunctions.php
===================================================================
--- trunk/MgDev/Doc/samples/phpviewersample/utilityfunctions.php	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Doc/samples/phpviewersample/utilityfunctions.php	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -30,9 +30,6 @@
 	$web_Dir = substr($thisFile, 0, $pos+1);
 	$configFilePath = $web_Dir . "../webconfig.ini";
 
-	include $web_Dir . "../mapviewerphp/constants.php";
-
-
 	// Searches the map for a layer with the specified name.
 
 	function GetXmlPath()

Index: trunk/MgDev/Oem
===================================================================
--- trunk/MgDev/Oem	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem	2022-10-10 11:14:40 UTC (rev 9977)

Property changes on: trunk/MgDev/Oem
___________________________________________________________________
Modified: svn:externals
## -1,2 +1,2 ##
 /metacrs/csmap/trunk CsMap
-/fusion/trunk fusion
+/fusion/sandbox/php8 fusion
Modified: trunk/MgDev/Oem/DWFTK/develop/global/src/CMakeLists.txt
===================================================================
--- trunk/MgDev/Oem/DWFTK/develop/global/src/CMakeLists.txt	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Oem/DWFTK/develop/global/src/CMakeLists.txt	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -2,8 +2,8 @@
 
 add_definitions(-DDWFCORE_BUILD_ZLIB -DDWFCORE_BUILD_EXPAT)
 
-find_library(pthread REQUIRED)
-find_library(uuid REQUIRED)
+find_package(Threads REQUIRED)
+find_package(UUID REQUIRED)
 check_cxx_source_compiles(
     "#include <uuid/uuid.h>
     int main() {

Modified: trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/CMakeLists.txt
===================================================================
--- trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/CMakeLists.txt	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/CMakeLists.txt	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -107,19 +107,19 @@
 
 add_library(dwfcore-${DWFCORE_VERSION} SHARED ${dwfcore_SRCS})
 
-if (HAS_UUID AND NOT uuid-NOTFOUND)
+if (UUID_FOUND)
     target_link_libraries(dwfcore-${DWFCORE_VERSION}
         -Wl,-Bsymbolic
         dl
-        pthread
-        uuid
+        ${CMAKE_THREAD_LIBS_INIT}
+        ${UUID_LIBRARY}
     )
-else (HAS_UUID AND NOT uuid-NOTFOUND)
+else (UUID_FOUND)
     target_link_libraries(dwfcore-${DWFCORE_VERSION}
         -Wl,-Bsymbolic
         dl
-        pthread
+        ${CMAKE_THREAD_LIBS_INIT}
     )
-endif (HAS_UUID AND NOT uuid-NOTFOUND)
+endif (UUID_FOUND)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in \
${CMAKE_CURRENT_BINARY_DIR}/config.h) \ No newline at end of file

Modified: trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/Core.cpp
===================================================================
--- trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/Core.cpp	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/Core.cpp	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -66,7 +66,7 @@
 				#elif   defined( HAVE_ALSA_IATOMIC_H )
 				#include <alsa/iatomic.h>
 				#else
-				#error  Missing atomic header file containing definition of atomic_t - cannot \
continue +				#include "atomic.h"
 				#endif
 
 

Copied: trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/atomic.h (from rev 9968, \
sandbox/jng/vanilla_swig/Oem/DWFTK/develop/global/src/dwfcore/x64/atomic.h) \
                ===================================================================
--- trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/atomic.h	                    \
                (rev 0)
+++ trunk/MgDev/Oem/DWFTK/develop/global/src/dwfcore/x64/atomic.h	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -0,0 +1,127 @@
+#ifndef _ATOMIC_H
+#define _ATOMIC_H
+
+/**
+ * Atomic type.
+ */
+typedef struct {
+    volatile int counter;
+} atomic_t;
+
+#define ATOMIC_INIT(i)  { (i) }
+
+/**
+ * Read atomic variable
+ * @param v pointer of type atomic_t
+ *
+ * Atomically reads the value of @v.
+ */
+#define atomic_read(v) ((v)->counter)
+
+/**
+ * Set atomic variable
+ * @param v pointer of type atomic_t
+ * @param i required value
+ */
+#define atomic_set(v,i) (((v)->counter) = (i))
+
+/**
+ * Add to the atomic variable
+ * @param i integer value to add
+ * @param v pointer of type atomic_t
+ */
+static inline void atomic_add( int i, atomic_t *v )
+{
+         (void)__sync_add_and_fetch(&v->counter, i);
+}
+
+/**
+ * Subtract the atomic variable
+ * @param i integer value to subtract
+ * @param v pointer of type atomic_t
+ *
+ * Atomically subtracts @i from @v.
+ */
+static inline void atomic_sub( int i, atomic_t *v )
+{
+        (void)__sync_sub_and_fetch(&v->counter, i);
+}
+
+/**
+ * Subtract value from variable and test result
+ * @param i integer value to subtract
+ * @param v pointer of type atomic_t
+ *
+ * Atomically subtracts @i from @v and returns
+ * true if the result is zero, or false for all
+ * other cases.
+ */
+static inline int atomic_sub_and_test( int i, atomic_t *v )
+{
+        return !(__sync_sub_and_fetch(&v->counter, i));
+}
+
+/**
+ * Increment atomic variable
+ * @param v pointer of type atomic_t
+ *
+ * Atomically increments @v by 1.
+ */
+static inline void atomic_inc( atomic_t *v )
+{
+       (void)__sync_fetch_and_add(&v->counter, 1);
+}
+
+/**
+ * @brief decrement atomic variable
+ * @param v: pointer of type atomic_t
+ *
+ * Atomically decrements @v by 1.  Note that the guaranteed
+ * useful range of an atomic_t is only 24 bits.
+ */
+static inline void atomic_dec( atomic_t *v )
+{
+       (void)__sync_fetch_and_sub(&v->counter, 1);
+}
+
+/**
+ * @brief Decrement and test
+ * @param v pointer of type atomic_t
+ *
+ * Atomically decrements @v by 1 and
+ * returns true if the result is 0, or false for all other
+ * cases.
+ */
+static inline int atomic_dec_and_test( atomic_t *v )
+{
+       return !(__sync_sub_and_fetch(&v->counter, 1));
+}
+
+/**
+ * @brief Increment and test
+ * @param v pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+static inline int atomic_inc_and_test( atomic_t *v )
+{
+      return !(__sync_add_and_fetch(&v->counter, 1));
+}
+
+/**
+ * @brief add and test if negative
+ * @param v pointer of type atomic_t
+ * @param i integer value to add
+ *
+ * Atomically adds @i to @v and returns true
+ * if the result is negative, or false when
+ * result is greater than or equal to zero.
+ */
+static inline int atomic_add_negative( int i, atomic_t *v )
+{
+       return (__sync_add_and_fetch(&v->counter, i) < 0);
+}
+
+#endif

Deleted: trunk/MgDev/Oem/LinuxApt/build_apt.sh
===================================================================
--- trunk/MgDev/Oem/LinuxApt/build_apt.sh	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem/LinuxApt/build_apt.sh	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,534 +0,0 @@
-#! /bin/bash
-#
-
-# MapGuide Open Source Apache, Php, Tomcat Build Script
-#
-#**********************************************************
-# Initialization
-#**********************************************************
-
-echo
-echo "MapGuide Open Source build/install script for Apache, Php, Tomcat"
-echo "-----------------------------------------------------------------"
-echo
-
-INSTALLDIR=/usr/local/mapguideopensource
-
-HTTPD_VER=2.4.52
-PHP_VER=5.6.40
-TOMCAT_VER=9.0.37
-CONNECTOR_VER=1.2.48
-APR_VER=1.7.0
-APR_UTIL_VER=1.6.1
-PORT=8008
-TOMCAT=0
-TOMCAT_PORT=8009
-START_HTTPD=0
-START_TOMCAT=0
-
-while [ $# -gt 0 ]; do    # Until you run out of parameters . . .
-  case "$1" in
-    -port|--port)
-              PORT="$2"
-              shift
-              ;;
-    -tomcat-port|--tomcat-port)
-              TOMCAT_PORT="$2"
-              shift
-              ;;
-    -prefix|--prefix)
-              INSTALLDIR="$2"
-              shift
-              ;;
-    -with-tomcat|--with-tomcat)
-              TOMCAT=1
-              shift
-              ;;
-    -start-tomcat|--start-tomcat)
-              START_TOMCAT=1
-              shift
-              ;;
-    -start-httpd|--start-httpd)
-              START_HTTPD=1
-              shift
-              ;;
-    -help|--help)
-              echo "Usage: $0 (options)"
-              echo "Options:"
-              echo "  --port [Apache port number]"
-              echo "  --prefix [installation directory]"
-              echo "  --start-httpd Automatically start httpd once compiled"
-              echo "  --with-tomcat Configure and install Tomcat"
-              echo "  --tomcat-port [Tomcat port number]"
-              echo "  --start-tomcat Automatically start tomcat once configured"
-              echo "  --help Display usage"
-              exit 0
-              ;;
-  esac
-  shift       # Check next set of parameters.
-done
-
-INSTALLWEB=$INSTALLDIR/webserverextensions
-
-echo "Apache will be built/installed to $INSTALLWEB/apache2."
-echo "Php will be built/installed to $INSTALLWEB/php."
-if [ "$TOMCAT" = "1" ]; then
-  echo "Tomcat will be installed to $INSTALLWEB/tomcat."
-fi
-echo
-echo "Apache will be configured to run on port $PORT."
-if [ "$TOMCAT" = "1" ]; then
-  echo "Tomcat will be configured to run on port $TOMCAT_PORT."
-fi
-
-
-# exit status of previous command
-#echo $? 
-
-check_apache_build ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Apache build failed ($error)."
-    exit $error
-  fi
-}
-
-check_php_build ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Php build failed ($error)."
-    exit $error
-  fi
-}
-
-check_apache_install ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Apache install failed ($error)."
-    exit $error
-  fi
-}
-
-check_php_install ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Php install failed ($error)."
-    exit $error
-  fi
-}
-
-check_tomcat_build ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Tomcat build failed ($error)."
-    exit $error
-  fi
-}
-
-check_tomcat_install ()
-{
-  error=$?
-  if [ $error -ne 0 ]; then
-    echo "Tomcat install failed ($error)."
-    exit $error
-  fi
-}
-
-#**********************************************************
-# Apache build procedure
-# Notes: Be sure to install pcre-devel (on CentOS) or an
-# equivalent library in other Linux distributions
-#**********************************************************
-echo "Apache Httpd build started"
-tar -jxf httpd-$HTTPD_VER.tar.bz2
-if [ ! -d "httpd-$HTTPD_VER/srclib/apr" ]; then
-	tar -jxf apr-$APR_VER.tar.bz2
-	mv apr-$APR_VER httpd-$HTTPD_VER/srclib/apr
-fi
-if [ ! -d "httpd-$HTTPD_VER/srclib/aprutil" ]; then
-	tar -jxf apr-util-$APR_UTIL_VER.tar.bz2
-	mv apr-util-$APR_UTIL_VER httpd-$HTTPD_VER/srclib/apr-util
-fi
-pushd httpd-$HTTPD_VER
-./configure --prefix=$INSTALLWEB/apache2 --enable-mods-shared=all \
---with-included-apr --with-port=$PORT
-check_apache_build
-make
-check_apache_build
-popd
-echo "Apache Httpd build completed"
-
-#**********************************************************
-# Apache shutdown  procedure
-# Notes: none
-#**********************************************************
-echo "Checking for existing Apache install"
-if [ -d $INSTALLWEB/apache2/bin ]; then
-  echo "Attempting to shutdown Apache"
-  pushd $INSTALLWEB/apache2/bin
-  ./apachectl stop
-  popd
-  echo "Attempting to remove old Apache and Php"
-  pushd $INSTALLWEB
-  rm -rf apache2
-  rm -rf php
-  popd
-  echo "Completed uninstall of Apache and Php"
-fi
-
-#**********************************************************
-# Apache install procedure
-# Notes: none
-#**********************************************************
-echo "Apache install started"
-pushd httpd-$HTTPD_VER
-make install
-check_apache_install
-popd
-
-pushd $INSTALLWEB/apache2/conf
-# Prep httpd.conf to read mapguide configuration
-echo "" > tmpfile
-echo "Include conf/mapguide.conf" >> tmpfile
-cp httpd.conf httpd.conf.mgorig_
-cat httpd.conf.mgorig_ tmpfile > httpd.conf
-rm httpd.conf.mgorig_
-popd
-
-echo "Apache install completed"
-
-pushd $INSTALLWEB/apache2/conf
-cat > mapguide.conf <<END-OF-CONFIGURATION
-
-
-END-OF-CONFIGURATION
-
-popd
-
-# Create dummy mapagent.fcgi and symlinks for module.
-mkdir -p $INSTALLWEB/www/mapagent
-mkdir $INSTALLWEB/bin
-pushd $INSTALLWEB/www/mapagent
-cat > mapagent.fcgi <<END-OF-FCGI
-// Empty file.  IIS application mappings and Apache script aliases are
-used to bind this file to the actual MapAgent binaries
-END-OF-FCGI
-popd
-
-mkdir -p $INSTALLWEB/lib
-pushd $INSTALLWEB/apache2/modules
-ln -s ../../lib/mod_mgmapagent.so mod_mgmapagent.so
-popd
-
-#**********************************************************
-# Php build procedure
-# Notes: none
-#**********************************************************
-echo "Php build started"
-tar -jxf php-$PHP_VER.tar.bz2
-pushd php-$PHP_VER
-./configure --prefix=$INSTALLWEB/php --with-apxs2=$INSTALLWEB/apache2/bin/apxs \
                --with-openssl \
---with-curl --enable-xml --enable-wddx --enable-shared  \
---enable-safe-mode --with-zlib --enable-zip --enable-mbstring=all \
                --with-xsl=/usr/lib --with-gd --with-png --with-jpeg --with-freetype
-check_php_build
-make
-check_php_build
-popd
-echo "Php build completed"
-
-#**********************************************************
-# Php install procedure
-# Notes: none
-#**********************************************************
-echo "Php install started"
-pushd php-$PHP_VER
-make install
-check_php_install
-popd
-echo "Php install completed"
-
-#**********************************************************
-# Tomcat connector build/install procedure
-# Notes: none
-#**********************************************************
-if [ "$TOMCAT" = "1" ]; then
-echo "Tomcat connector build/install started"
-tar -zxf tomcat-connectors-$CONNECTOR_VER-src.tar.gz
-pushd tomcat-connectors-$CONNECTOR_VER-src/native
-
-./configure --with-apxs=$INSTALLWEB/apache2/bin/apxs
-check_tomcat_build
-make
-check_tomcat_build
-make install
-check_tomcat_install
-popd
-echo "Tomcat connector build/install completed"
-fi
-
-#**********************************************************
-# Tomcat install procedure
-# Notes: none
-#**********************************************************
-if [ "$TOMCAT" = "1" ]; then
-echo "Tomcat install started"
-tar -zxf apache-tomcat-$TOMCAT_VER.tar.gz -C $INSTALLWEB
-check_tomcat_install
-pushd $INSTALLWEB
-mv apache-tomcat-$TOMCAT_VER tomcat
-check_tomcat_install
-popd
-echo "Tomcat install completed"
-fi
-
-#**********************************************************
-# Configuration file updates for Apache
-# Notes: none
-#**********************************************************
-
-echo "Apache configuration started"
-
-pushd $INSTALLWEB/apache2/conf
-# Prep httpd.conf to read mapguide configuration
-echo "" > tmpfile
-echo "Include conf/mapguide.conf" >> tmpfile
-cp httpd.conf httpd.conf.mgorig_
-# Activate mod_rewrite
-sed -i "s/#LoadModule rewrite_module modules\/mod_rewrite.so/LoadModule \
                rewrite_module modules\/mod_rewrite.so/g" httpd.conf.mgorig_
-cat httpd.conf.mgorig_ tempfile > httpd.conf
-rm httpd.conf.mgorig_
-popd
-
-# Required modifications for envvars
-pushd $INSTALLWEB/apache2/bin
-cat >> envvars <<END-OF-ENVVARS
-export LD_LIBRARY_PATH=$INSTALLWEB/lib:$INSTALLWEB/php/lib:$INSTALLDIR/lib
-export MENTOR_DICTIONARY_PATH=$INSTALLDIR/share/gis/coordsys
-END-OF-ENVVARS
-popd
-
-# Required modifications to httpd.conf, append to mapguide.conf
-pushd $INSTALLWEB/apache2/conf
-cat >> mapguide.conf <<END-OF-CONFIGURATION
-
-# Environment variables for MapGuide
-SetEnv LD_LIBRARY_PATH "$INSTALLWEB/lib:$INSTALLWEB/php/lib:$INSTALLDIR/lib"
-SetEnv MENTOR_DICTIONARY_PATH "$INSTALLDIR/share/gis/coordsys"
-
-LoadModule mgmapagent_module modules/mod_mgmapagent.so
-
-RewriteEngine On
-
-#START NormalCGI PHP configuration
-#ScriptAlias /php/ "$INSTALLWEB/php/bin/"
-#Action application/x-httpd-php "/php/php"
-#AddType application/x-httpd-php .php
-#END NormalCGI PHP configuration
-
-# CGI agent alias
-#ScriptAlias /mapguide/mapagent/mapagent.fcgi "$INSTALLWEB/www/mapagent/mapagent"
-
-# mapviewerajax to mapviewerphp rewrite rules
-# comment out for java api/viewer
-RewriteRule ^/mapguide/mapviewerajax/([^\?])(.*)$ /mapguide/mapviewerphp/\$1\$2 [PT]
-RewriteRule ^/mapguide/mapviewerajax/(.*)$ /mapguide/mapviewerphp/ajaxviewer.php\$1 \
                [PT]
-RewriteRule ^/mapguide/mapviewerdwf/([^\?])(.*)$ /mapguide/mapviewerphp/\$1\$2 [PT]
-RewriteRule ^/mapguide/mapviewerdwf/(.*)$ /mapguide/mapviewerphp/dwfviewer.php\$1 \
                [PT]
-
-# mapviewerajax to mapviewerjava aliases
-# uncomment for java api/viewer
-#RewriteRule ^/mapguide/mapviewerajax/([^\?])(.*)$ /mapguide/mapviewerjava/\$1\$2 \
                [PT]
-#RewriteRule ^/mapguide/mapviewerajax/(.*)$ \
                /mapguide/mapviewerjava/ajaxviewer.jsp\$1 [PT]
-#RewriteRule ^/mapguide/mapviewerdwf/([^\?])(.*)$ /mapguide/mapviewerjava/\$1\$2 \
                [PT]
-#RewriteRule ^/mapguide/mapviewerdwf/(.*)$ /mapguide/mapviewerjava/dwfviewer.jsp\$1 \
                [PT]
-
-Alias /mapguide "$INSTALLWEB/www/"
-
-<Directory "$INSTALLWEB/www/">
-  AllowOverride All
-  Options All
-  Require all granted
-
-  AddHandler php5-script .php
-  AddHandler mgmapagent_handler fcgi
-
-  RewriteEngine on
-  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
-</Directory>
-
-END-OF-CONFIGURATION
-popd
-
-echo "Apache configuration completed"
-
-#**********************************************************
-# Tomcat configuration procedure
-# Notes: none
-#**********************************************************
-if [ "$TOMCAT" = "1" ]; then
-echo "Tomcat configuration started"
-pushd $INSTALLWEB/apache2/conf
-cat >> mapguide.conf <<END-OF-CONFIGURATION
-
-#Tomcat Integration
-# Load mod_jk module
-# Update this path to match your modules location
-LoadModule    jk_module  modules/mod_jk.so
-# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
-# AddModule     mod_jk.c
-# Where to find workers.properties
-# Update this path to match your conf directory location (put workers.properties \
                next to httpd.conf)
-JkWorkersFile "$INSTALLWEB/apache2/conf/workers.properties"
-# Where to put jk logs
-# Update this path to match your logs directory location (put mod_jk.log next to \
                access_log)
-JkLogFile     "$INSTALLWEB/apache2/logs/mod_jk.log"
-# Set the jk log level [debug/error/info]
-JkLogLevel    info
-# Select the log format
-JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
-# JkOptions indicate to send SSL KEY SIZE, 
-JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
-# JkRequestLogFormat set the request format 
-JkRequestLogFormat     "%w %V %T"
-# Send everything for context /examples to worker named worker1 (ajp13)
-JkMount  /mapguide/mapviewerjava/* worker1
-JkMount  /mapguide/javaviewersample/* worker1
-
-END-OF-CONFIGURATION
-
-cat > workers.properties <<END-OF-CONFIGURATION
-# Define 1 real worker using ajp13
-worker.list=worker1
-# Set properties for worker1 (ajp13)
-worker.worker1.type=ajp13
-worker.worker1.host=localhost
-worker.worker1.port=$TOMCAT_PORT
-worker.worker1.lbfactor=50
-worker.worker1.cachesize=10
-worker.worker1.cache_timeout=600
-worker.worker1.socket_keepalive=1
-worker.worker1.recycle_timeout=300
-END-OF-CONFIGURATION
-
-popd
-
-if [ ! -d $INSTALLWEB/tomcat/conf/Catalina/localhost ]; then
-mkdir -p $INSTALLWEB/tomcat/conf/Catalina/localhost
-fi
-
-pushd $INSTALLWEB/tomcat/conf/Catalina/localhost
-cat > mapguide.xml <<END_OF_CONFIGURATION
-<!--
-
-    Context configuration file for the Tomcat Manager Web App
-
-    $Id: manager.xml,v 1.3 2004/08/26 17:03:34 remm Exp $
-
--->
-
-
-<Context docBase="$INSTALLWEB/www"
-         privileged="true" antiResourceLocking="false" antiJARLocking="false">
-
-  <!-- Link to the user database we will get roles from -->
-  <ResourceLink name="users" global="UserDatabase"
-                type="org.apache.catalina.UserDatabase"/>
-
-</Context>
-END_OF_CONFIGURATION
-
-popd
-
-mv -f $INSTALLWEB/tomcat/conf/server.xml $INSTALLWEB/tomcat/conf/server_orig.xml
-cp -f server.xml $INSTALLWEB/tomcat/conf
-
-pushd $INSTALLWEB/tomcat/bin
-if [ ! -e startup.sh.orig ]; then
-mv startup.sh startup.sh.orig
-fi
-
-LIB_PATH=$INSTALLWEB/lib:$INSTALLDIR/lib
-cat > startup.sh <<END_OF_CONFIGURATION
-#!/bin/bash
-export LD_LIBRARY_PATH=$LIB_PATH
-export MENTOR_DICTIONARY_PATH=$INSTALLDIR/share/gis/coordsys
-export JAVA_OPTS="-Djava.library.path=$LIB_PATH"
-END_OF_CONFIGURATION
-
-cat startup.sh.orig >> startup.sh
-chmod 755 startup.sh
-popd
-
-echo "Tomcat configuration completed"
-fi
-
-
-#**********************************************************
-# Configuration file updates for Php
-# Notes: none
-#**********************************************************
-
-# Required modifications to php.ini
-# Uses php.ini-mapguide as a template and replaces the ext path
-# with the appropriate installdir path
-# Note:  Custom built PHP will look in php/lib for ini file
-
-echo "Php configuration started"
-
-BACKINSTALL=${INSTALLWEB//\//\\\/}
-cat php.ini-mapguide | sed "s/INSTALLDIR/$BACKINSTALL\/lib/g" > \
                $INSTALLWEB/php/lib/php.ini
-
-echo "Php configuration completed"
-
-echo "Adding test pages"
-
-if [ ! -d "$INSTALLWEB/www" ]; then
-	mkdir $INSTALLWEB/www
-fi
-cat >> $INSTALLWEB/www/index.html <<ENDOFINDEX
-<html>
-<body>
-<p>If you are seeing this page then Apache Httpd has been successfully
-configured and installed for MapGuide.
-</body>
-</html>
-ENDOFINDEX
-
-cat >> $INSTALLWEB/www/phpinfo.php <<ENDOFINFO
-<?php
-phpinfo();
-?>
-ENDOFINFO
-
-echo "Installation complete."
-
-if [ "$START_HTTPD" = "1" ]; then
-#**********************************************************
-# Start Apache
-# Notes: none
-#**********************************************************
-echo "Bringing Apache online..."
-pushd $INSTALLWEB/apache2/bin
-./apachectl start
-popd
-echo "Apache is now online."
-fi
-
-#**********************************************************
-# Tomcat startup procedure
-# Notes: none
-#**********************************************************
-if [ "$TOMCAT" = "1" -a "$START_TOMCAT" = "1" ]; then
-echo "Tomcat startup"
-pushd $INSTALLWEB/tomcat/bin
-./startup.sh
-popd
-
-echo "Tomcat startup completed"
-fi
-

Modified: trunk/MgDev/Oem/agg-2.4/include/agg_renderer_outline_aa.h
===================================================================
--- trunk/MgDev/Oem/agg-2.4/include/agg_renderer_outline_aa.h	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Oem/agg-2.4/include/agg_renderer_outline_aa.h	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -1365,7 +1365,6 @@
         //---------------------------------------------------------------------
         void profile(const line_profile_aa& prof) { m_profile = &prof; }
         const line_profile_aa& profile() const { return *m_profile; }
-        line_profile_aa& profile() { return *m_profile; }
 
         //---------------------------------------------------------------------
         int subpixel_width() const { return m_profile->subpixel_width(); }

Modified: trunk/MgDev/Oem/dbxml/db-4.8.26/dbinc/atomic.h
===================================================================
--- trunk/MgDev/Oem/dbxml/db-4.8.26/dbinc/atomic.h	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem/dbxml/db-4.8.26/dbinc/atomic.h	2022-10-10 11:14:40 UTC (rev 9977)
@@ -144,7 +144,7 @@
 #define	atomic_inc(env, p)	__atomic_inc(p)
 #define	atomic_dec(env, p)	__atomic_dec(p)
 #define	atomic_compare_exchange(env, p, o, n)	\
-	__atomic_compare_exchange((p), (o), (n))
+	__atomic_compare_exchange_db((p), (o), (n))
 static inline int __atomic_inc(db_atomic_t *p)
 {
 	int	temp;
@@ -176,7 +176,7 @@
  * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
  * which configure could be changed to use.
  */
-static inline int __atomic_compare_exchange(
+static inline int __atomic_compare_exchange_db(
 	db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
 {
 	atomic_value_t was;
@@ -206,7 +206,7 @@
 #define	atomic_dec(env, p)	(--(p)->value)
 #define	atomic_compare_exchange(env, p, oldval, newval)		\
 	(DB_ASSERT(env, atomic_read(p) == (oldval)),		\
-	atomic_init(p, (newval)), 1)
+	bdb_atomic_init(p, (newval)), 1)
 #else
 #define atomic_inc(env, p)	__atomic_inc(env, p)
 #define atomic_dec(env, p)	__atomic_dec(env, p)

Modified: trunk/MgDev/Oem/dbxml/db-4.8.26/mutex/mut_tas.c
===================================================================
--- trunk/MgDev/Oem/dbxml/db-4.8.26/mutex/mut_tas.c	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Oem/dbxml/db-4.8.26/mutex/mut_tas.c	2022-10-10 11:14:40 UTC (rev \
9977) @@ -46,7 +46,7 @@
 
 #ifdef HAVE_SHARED_LATCHES
 	if (F_ISSET(mutexp, DB_MUTEX_SHARED))
-		atomic_init(&mutexp->sharecount, 0);
+		bdb_atomic_init(&mutexp->sharecount, 0);
 	else
 #endif
 	if (MUTEX_INIT(&mutexp->tas)) {
@@ -486,7 +486,7 @@
 			F_CLR(mutexp, DB_MUTEX_LOCKED);
 			/* Flush flag update before zeroing count */
 			MEMBAR_EXIT();
-			atomic_init(&mutexp->sharecount, 0);
+			bdb_atomic_init(&mutexp->sharecount, 0);
 		} else {
 			DB_ASSERT(env, sharecount > 0);
 			MEMBAR_EXIT();

Modified: trunk/MgDev/Oem/php/CHANGES.TXT
===================================================================
--- trunk/MgDev/Oem/php/CHANGES.TXT	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem/php/CHANGES.TXT	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,7 +1,7 @@
-main/win95nt.h:
+include/main/php.h
 
-    Add ACE define checks to prevent redefinition of uid_t, gid_t and pid_t
+    Add ACE define checks to prevent redefinition of uid_t and gid_t
 
-TSRM/readdir.h:
+include/win32/ipc.h
 
-    Add ACE define check to prevent redefinition of struct dirent
+    Add ACE define check to prevent redefinition of key_t

Modified: trunk/MgDev/Oem/php/PROVENANCE.TXT
===================================================================
--- trunk/MgDev/Oem/php/PROVENANCE.TXT	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Oem/php/PROVENANCE.TXT	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,14 +1,6 @@
-main\config.w32.h
+The contents of this directory originate from the PHP 8.1.4 development package SDK \
with key headers patched for ACE compatbility.  
-	Generated by running buildconf and configure on the official PHP 5.5.3 source
+https://windows.php.net/downloads/releases/php-devel-pack-8.1.4-nts-Win32-vs16-x64.zip
 +sha256: cc7d4a7f62feec88ea94a96d476ad5fae5ea9a953ecbe6a22eda94947d88d8a7
 
-Release_TS
-x64\Release_TS
-
-	php5ts.lib extracted from official VC11 binary distribution of PHP 5.6.59 \
                (http://windows.php.net/download/)
-
-main\win95nt.h
-
-	Extracted from official PHP 5.5.3 source tarball (http://www.php.net/downloads.php)
-
-	Patched for compatibility with ACE
+Refer to CHANGES.TXT for details on what was patched
\ No newline at end of file

Copied: trunk/MgDev/Oem/php/phpize.bat (from rev 9968, \
sandbox/jng/vanilla_swig/Oem/php/phpize.bat) \
                ===================================================================
--- trunk/MgDev/Oem/php/phpize.bat	                        (rev 0)
+++ trunk/MgDev/Oem/php/phpize.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -0,0 +1,10 @@
+@echo off
+SET PHP_BUILDCONF_PATH=%~dp0
+cscript /nologo /e:jscript %PHP_BUILDCONF_PATH%\script\phpize.js %*
+IF NOT EXIST configure.bat (
+	echo Error generating configure script, configure script was not copied
+	exit /b 3
+) ELSE (
+	echo Now run 'configure --help'
+)
+SET PHP_BUILDCONF_PATH=

Modified: trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Server/src/Common/Manager/CacheManager.cpp	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -287,7 +287,7 @@
     }
     else
     {
-        CheckPermission(resource, MgResourcePermission::ReadOnly);
+        CheckPermission(resource, MgResourcePermission::PermissionReadOnly);
     }
 
     MG_CATCH_AND_THROW(L"MgCacheManager.GetFeatureSourceCacheItem")
@@ -344,7 +344,7 @@
     }
     else
     {
-        CheckPermission(resource, MgResourcePermission::ReadOnly);
+        CheckPermission(resource, MgResourcePermission::PermissionReadOnly);
     }
 
     MG_CATCH_AND_THROW(L"MgCacheManager.GetSpatialContextCacheItem")
@@ -434,7 +434,7 @@
     }
     else
     {
-        CheckPermission(resource, MgResourcePermission::ReadOnly);
+        CheckPermission(resource, MgResourcePermission::PermissionReadOnly);
     }
 
     MG_CATCH_AND_THROW(L"MgCacheManager.GetResourceLayerDefinitionCacheItem")

Modified: trunk/MgDev/Server/src/Common/Manager/PermissionInfo.cpp
===================================================================
--- trunk/MgDev/Server/src/Common/Manager/PermissionInfo.cpp	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Server/src/Common/Manager/PermissionInfo.cpp	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -218,15 +218,15 @@
     {
         CREFSTRING grantedPermission = (*i).second;
 
-        if (MgResourcePermission::NoAccess != grantedPermission)
+        if (MgResourcePermission::PermissionNoAccess != grantedPermission)
         {
             if (permission == grantedPermission)
             {
                 status = MgPermissionInfo::Permitted;
             }
-            else if (MgResourcePermission::ReadWrite == grantedPermission)
+            else if (MgResourcePermission::PermissionReadWrite == grantedPermission)
             {
-                if (MgResourcePermission::ReadOnly == permission)
+                if (MgResourcePermission::PermissionReadOnly == permission)
                 {
                     status = MgPermissionInfo::Permitted;
                 }
@@ -257,15 +257,15 @@
     {
         CREFSTRING grantedPermission = (*i).second;
 
-        if (MgResourcePermission::NoAccess != grantedPermission)
+        if (MgResourcePermission::PermissionNoAccess != grantedPermission)
         {
             if (permission == grantedPermission)
             {
                 status = MgPermissionInfo::Permitted;
             }
-            else if (MgResourcePermission::ReadWrite == grantedPermission)
+            else if (MgResourcePermission::PermissionReadWrite == grantedPermission)
             {
-                if (MgResourcePermission::ReadOnly == permission)
+                if (MgResourcePermission::PermissionReadOnly == permission)
                 {
                     status = MgPermissionInfo::Permitted;
                 }

Modified: trunk/MgDev/Server/src/Services/Feature/ServerDescribeSchema.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerDescribeSchema.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Feature/ServerDescribeSchema.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -577,7 +577,7 @@
     }
     else
     {
-        m_cacheManager->CheckPermission(resource, MgResourcePermission::ReadOnly);
+        m_cacheManager->CheckPermission(resource, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resource, \
L"MgServerDescribeSchema.DescribeSchema") @@ -626,7 +626,7 @@
             }
             else
             {
-                m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +                \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
}  
             // Get the schema XML.
@@ -636,12 +636,12 @@
         }
         else
         {
-            m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +            \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
}  }
     else
     {
-        m_cacheManager->CheckPermission(resource, MgResourcePermission::ReadOnly);
+        m_cacheManager->CheckPermission(resource, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CATCH_AND_THROW_WITH_FEATURE_SOURCE(L"MgServerDescribeSchema.DescribeSchemaAsXml", \
resource) @@ -856,7 +856,7 @@
         {
             if (connection->SupportsCommand((INT32)FdoCommandType_GetSchemaNames))
             {
-                m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +                \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
                
                 // The reference to the FDO connection from the \
                MgServerFeatureConnection object must be cleaned up
                 // before the parent object, otherwise it leaves the FDO connection \
marked as still in use. @@ -888,7 +888,7 @@
                 }
                 else
                 {
-                    m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +                    \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
}  
                 // Get the schema names.
@@ -905,7 +905,7 @@
     }
     else
     {
-        m_cacheManager->CheckPermission(resource, MgResourcePermission::ReadOnly);
+        m_cacheManager->CheckPermission(resource, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resource, \
L"MgServerDescribeSchema.GetSchemas") @@ -969,7 +969,7 @@
                 }
                 else
                 {
-                    m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +                    \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
}  
                 // Get the class names.
@@ -977,7 +977,7 @@
             }
             else
             {
-                m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +                \
m_cacheManager->CheckPermission(resource, MgResourcePermission::PermissionReadOnly);  \
                
                 // The reference to the FDO connection from the \
                MgServerFeatureConnection object must be cleaned up
                 // before the parent object, otherwise it leaves the FDO connection \
marked as still in use. @@ -1008,7 +1008,7 @@
     }
     else
     {
-        m_cacheManager->CheckPermission(resource, MgResourcePermission::ReadOnly);
+        m_cacheManager->CheckPermission(resource, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resource, \
L"MgServerDescribeSchema.GetClasses") @@ -1066,7 +1066,7 @@
     }
     else
     {
-        m_cacheManager->CheckPermission(resource, MgResourcePermission::ReadOnly);
+        m_cacheManager->CheckPermission(resource, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CATCH_AND_THROW_WITH_FEATURE_SOURCE(L"MgServerDescribeSchema.GetClassDefinition", \
resource) @@ -1162,7 +1162,7 @@
         }
         else
         {
-            m_cacheManager->CheckPermission(resource, \
MgResourcePermission::ReadOnly); +            \
                m_cacheManager->CheckPermission(resource, \
                MgResourcePermission::PermissionReadOnly);
             fdoSchemas = \
MgServerFeatureUtil::GetFdoFeatureSchemaCollection(mgSchemas.p);  }
 

Modified: trunk/MgDev/Server/src/Services/Feature/ServerGetSpatialContexts.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerGetSpatialContexts.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Feature/ServerGetSpatialContexts.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -94,7 +94,7 @@
     }
     else
     {
-        MgCacheManager::GetInstance()->CheckPermission(resId, \
MgResourcePermission::ReadOnly); +        \
MgCacheManager::GetInstance()->CheckPermission(resId, \
MgResourcePermission::PermissionReadOnly);  }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resId, \
L"MgServerGetSpatialContexts.GetSpatialContexts")

Modified: trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -486,7 +486,7 @@
     if(cascade)
     {
         MgApplicationResourceContentManager* resourceContentMan = \
                GetApplicationResourceContentManager();
-        referencingIds = resourceContentMan->EnumerateAllReferences(sourceResource, \
MgResourcePermission::ReadWrite); +        referencingIds = \
resourceContentMan->EnumerateAllReferences(sourceResource, \
MgResourcePermission::PermissionReadWrite);  }
 
     // Move the resource and all of its children.
@@ -870,7 +870,7 @@
         GetApplicationResourceContentManager();
     STRING resourceTags;
     XmlDocument xmlDoc = resourceContentMan->GetResourceTags(resource,
-        MgResourcePermission::ReadWrite, resourceTags);
+        MgResourcePermission::PermissionReadWrite, resourceTags);
 
     // Set the resource data.
 
@@ -1006,7 +1006,7 @@
         GetApplicationResourceContentManager();
     STRING resourceTags;
     XmlDocument xmlDoc = resourceContentMan->GetResourceTags(resource,
-        MgResourcePermission::ReadWrite, resourceTags);
+        MgResourcePermission::PermissionReadWrite, resourceTags);
 
     // Delete the resource tag.
 
@@ -1102,7 +1102,7 @@
         GetApplicationResourceContentManager();
     STRING resourceTags;
     XmlDocument xmlDoc = resourceContentMan->GetResourceTags(resource,
-        MgResourcePermission::ReadWrite, resourceTags);
+        MgResourcePermission::PermissionReadWrite, resourceTags);
 
     MgTagManager tagMan(resourceTags);
     MgTagInfo tagInfo;
@@ -1185,7 +1185,7 @@
     STRING resourceTags;
 
     resourceContentMan->GetResourceTags(resource,
-        MgResourcePermission::ReadOnly, resourceTags);
+        MgResourcePermission::PermissionReadOnly, resourceTags);
 
     MgTagManager tagMan(resourceTags);
     MgTagInfo tagInfo;

Modified: trunk/MgDev/Server/src/Services/Resource/ApplicationResourceContentManager.cpp
 ===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ApplicationResourceContentManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ApplicationResourceContentManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -101,7 +101,7 @@
         currResource.SetResource(MgUtil::MultiByteToWideChar(xmlDoc.getName()));
 
         if (CheckPermission(currResource,
-            MgResourcePermission::ReadOnly, false))
+            MgResourcePermission::PermissionReadOnly, false))
         {
             list += "\t<ResourceId>";
             list += xmlDoc.getName();
@@ -386,7 +386,7 @@
     // Get the resource tags.
 
     STRING resourceTags;
-    GetResourceTags(resource, MgResourcePermission::ReadOnly, resourceTags);
+    GetResourceTags(resource, MgResourcePermission::PermissionReadOnly, \
resourceTags);  
     MgTagManager tagMan(resourceTags);
     MgTagMap& tagMap = tagMan.GetTagMap();

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -267,7 +267,7 @@
         string currPathname = currDoc.getName();
         MgResourceIdentifier \
currResource(MgUtil::MultiByteToWideChar(currPathname));  
-        CheckParentPermission(currResource, MgResourcePermission::ReadWrite);
+        CheckParentPermission(currResource, \
MgResourcePermission::PermissionReadWrite);  
         if (sourceResourceIsFolder)
         {
@@ -412,7 +412,7 @@
         string currPathname = currDoc.getName();
         MgResourceIdentifier \
currResource(MgUtil::MultiByteToWideChar(currPathname));  
-        sourceResourceContentMan->CheckPermission(currResource, \
MgResourcePermission::ReadOnly); +        \
sourceResourceContentMan->CheckPermission(currResource, \
MgResourcePermission::PermissionReadOnly);  
         if (sourceResourceIsFolder)
         {
@@ -606,7 +606,7 @@
 
     // Check if the current user is allowed to perform the current operation.
 
-    CheckParentPermission(resource, MgResourcePermission::ReadWrite);
+    CheckParentPermission(resource, MgResourcePermission::PermissionReadWrite);
 
     // Notify the applicable caches of the changed resource.
 
@@ -649,7 +649,7 @@
 
     // Check if the current user is allowed to perform the current operation.
 
-    CheckPermission(resource, MgResourcePermission::ReadWrite);
+    CheckPermission(resource, MgResourcePermission::PermissionReadWrite);
 
     // Notify the applicable caches of the changed resource.
 
@@ -681,7 +681,7 @@
 
     // Check if the current user is allowed to perform the current operation.
 
-    CheckParentPermission(resource, MgResourcePermission::ReadWrite);
+    CheckParentPermission(resource, MgResourcePermission::PermissionReadWrite);
 
     // Delete the resource data.
 

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.h
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceContentManager.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -63,7 +63,7 @@
         CREFSTRING rootName, CREFSTRING schemaName);
 
     virtual XmlDocument GetDocument(MgResourceIdentifier& resource,
-        CREFSTRING permission = MgResourcePermission::ReadOnly);
+        CREFSTRING permission = MgResourcePermission::PermissionReadOnly);
     virtual void PutDocument(MgResourceIdentifier& resource,
         XmlDocument& xmlDoc, XmlUpdateContext& updateContext);
     virtual void TransformDocument(const string& xmlStr,

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -245,7 +245,7 @@
     // Get the document.
 
     MgResourceIdentifier& resource = resourceInfo.GetIdentifier();
-    XmlDocument xmlDoc = GetDocument(resource, MgResourcePermission::ReadWrite);
+    XmlDocument xmlDoc = GetDocument(resource, \
MgResourcePermission::PermissionReadWrite);  
     // Convert an XML string into an XML document.
 

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.h
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceDefinitionManager.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -91,7 +91,7 @@
         CREFSTRING rootName, CREFSTRING schemaName) = 0;
 
     virtual XmlDocument GetDocument(MgResourceIdentifier& resource,
-        CREFSTRING permission = MgResourcePermission::ReadOnly) = 0;
+        CREFSTRING permission = MgResourcePermission::PermissionReadOnly) = 0;
     virtual void PutDocument(MgResourceIdentifier& resource,
         XmlDocument& xmlDoc, XmlUpdateContext& updateContext) = 0;
     virtual void TransformDocument(const string& xmlStr,

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -282,7 +282,7 @@
                 if (!m_repositoryMan.m_currUserIsAdmin)
                 {
                     if (!CheckParentPermission(currResource,
-                        MgResourcePermission::ReadOnly, false))
+                        MgResourcePermission::PermissionReadOnly, false))
                     {
                         continue;
                     }
@@ -401,7 +401,7 @@
 
         // Check if the current user has read access to the current resource.
 
-        CheckParentPermission(*resource, MgResourcePermission::ReadOnly);
+        CheckParentPermission(*resource, MgResourcePermission::PermissionReadOnly);
 
         // Filter resources based on modified date.
 
@@ -717,7 +717,7 @@
         string currPathname = currDoc.getName();
         MgResourceIdentifier \
currResource(MgUtil::MultiByteToWideChar(currPathname));  
-        CheckParentPermission(currResource, MgResourcePermission::ReadWrite);
+        CheckParentPermission(currResource, \
MgResourcePermission::PermissionReadWrite);  
         if (sourceResourceIsFolder)
         {
@@ -882,7 +882,7 @@
         string currPathname = currDoc.getName();
         MgResourceIdentifier \
currResource(MgUtil::MultiByteToWideChar(currPathname));  
-        sourceResourceHeaderMan->CheckPermission(currResource, \
MgResourcePermission::ReadOnly); +        \
sourceResourceHeaderMan->CheckPermission(currResource, \
MgResourcePermission::PermissionReadOnly);  
         if (sourceResourceIsFolder)
         {
@@ -1082,7 +1082,7 @@
 
         if (!m_repositoryMan.m_currUserIsAdmin
             && !CheckParentPermission(
-                currResource, MgResourcePermission::ReadOnly, false))
+                currResource, MgResourcePermission::PermissionReadOnly, false))
         {
             continue;
         }
@@ -1519,7 +1519,7 @@
     {
         permissionInfo->SetInherited(false);
         permissionInfo->SetGroupPermission(
-            MgGroup::Everyone, MgResourcePermission::ReadWrite);
+            MgGroup::Everyone, MgResourcePermission::PermissionReadWrite);
     }
     else // Sub-folder or document
     {
@@ -1892,7 +1892,7 @@
         }
 
         if (m_accessibleResources[resource].empty() ||
-            MgResourcePermission::ReadWrite == permission)
+            MgResourcePermission::PermissionReadWrite == permission)
         {
             m_accessibleResources[resource] = permission;
         }
@@ -1925,7 +1925,7 @@
         }
 
         if (m_inaccessibleResources[resource].empty() ||
-            MgResourcePermission::ReadOnly == permission)
+            MgResourcePermission::PermissionReadOnly == permission)
         {
             m_inaccessibleResources[resource] = permission;
         }
@@ -2439,7 +2439,7 @@
 
     // Only allow the author to have write access.
 
-    if (MgResourcePermission::ReadWrite == permission
+    if (MgResourcePermission::PermissionReadWrite == permission
         && !m_repositoryMan.m_currUserIsAuthor)
     {
         if (strict)
@@ -2739,7 +2739,7 @@
 
     // Check if the current user is allowed to perform the current operation.
 
-    CheckParentPermission(resource, MgResourcePermission::ReadWrite);
+    CheckParentPermission(resource, MgResourcePermission::PermissionReadWrite);
 
     // Insert the resource.
 
@@ -2748,7 +2748,7 @@
     // Update the local permission cache.
 
     UpdatePermissionCache(MgResourceService::opIdSetResource,
-        resource.ToString(), MgResourcePermission::ReadWrite, xmlDoc, true);
+        resource.ToString(), MgResourcePermission::PermissionReadWrite, xmlDoc, \
true);  
     MG_RESOURCE_SERVICE_CATCH_AND_THROW(L"MgResourceHeaderManager.PutDocument")
 }
@@ -2833,11 +2833,11 @@
 
     if (MgResourceService::opIdMoveResource == opId)
     {
-        CheckParentPermission(resource, MgResourcePermission::ReadWrite);
+        CheckParentPermission(resource, MgResourcePermission::PermissionReadWrite);
     }
     else
     {
-        CheckPermission(resource, MgResourcePermission::ReadWrite);
+        CheckPermission(resource, MgResourcePermission::PermissionReadWrite);
     }
 
     // Update the resource.
@@ -2847,7 +2847,7 @@
     // Update the local permission cache.
 
     UpdatePermissionCache(opId, resource.ToString(),
-        MgResourcePermission::ReadWrite, xmlDoc, true);
+        MgResourcePermission::PermissionReadWrite, xmlDoc, true);
 
     MG_RESOURCE_SERVICE_CATCH_AND_THROW(L"MgResourceHeaderManager.UpdateDocument")
 }
@@ -2871,12 +2871,12 @@
 
     // Check if the current user is allowed to perform the current operation.
 
-    CheckParentPermission(resource, MgResourcePermission::ReadWrite);
+    CheckParentPermission(resource, MgResourcePermission::PermissionReadWrite);
 
     // Update the local permission cache.
 
     UpdatePermissionCache(MgResourceService::opIdDeleteResource,
-        resource.ToString(), MgResourcePermission::ReadWrite, xmlDoc, false);
+        resource.ToString(), MgResourcePermission::PermissionReadWrite, xmlDoc, \
false);  
     // Delete the resource.
 
@@ -3029,7 +3029,7 @@
 
         // Check if the current user has a read permission.
         if (CheckPermission(currResource,
-            MgResourcePermission::ReadOnly, false))
+            MgResourcePermission::PermissionReadOnly, false))
         {
             // Package the resource header.
             packageMaker.PackageResourceHeader(currResource, xmlDoc);

Modified: trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.h
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.h	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/ResourceHeaderManager.h	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -92,7 +92,7 @@
         CREFSTRING rootName, CREFSTRING schemaName);
 
     virtual XmlDocument GetDocument(MgResourceIdentifier& resource,
-        CREFSTRING permission = MgResourcePermission::ReadOnly);
+        CREFSTRING permission = MgResourcePermission::PermissionReadOnly);
     virtual void PutDocument(MgResourceIdentifier& resource,
         XmlDocument& xmlDoc, XmlUpdateContext& updateContext);
     virtual void TransformDocument(const string& xmlStr,

Modified: trunk/MgDev/Server/src/Services/Resource/SiteResourceContentManager.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Resource/SiteResourceContentManager.cpp	2022-10-10 \
                10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Resource/SiteResourceContentManager.cpp	2022-10-10 \
11:14:40 UTC (rev 9977) @@ -1196,7 +1196,7 @@
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
-        XmlDocument groupDoc = this->GetDocument(groupRes, \
MgResourcePermission::ReadWrite); +        XmlDocument groupDoc = \
this->GetDocument(groupRes, MgResourcePermission::PermissionReadWrite);  string \
xmlContent;  MgXmlUtil xmlUtil(groupDoc.getContent(xmlContent));
         DOMDocument* groupDOM = xmlUtil.GetDocument();
@@ -1586,7 +1586,7 @@
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
-        XmlDocument roleDoc = this->GetDocument(roleRes, \
MgResourcePermission::ReadWrite); +        XmlDocument roleDoc = \
this->GetDocument(roleRes, MgResourcePermission::PermissionReadWrite);  string \
xmlContent;  MgXmlUtil xmlUtil(roleDoc.getContent(xmlContent));
         DOMDocument* roleDOM = xmlUtil.GetDocument();
@@ -1818,7 +1818,7 @@
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
-        XmlDocument roleDoc = this->GetDocument(roleRes, \
MgResourcePermission::ReadWrite); +        XmlDocument roleDoc = \
this->GetDocument(roleRes, MgResourcePermission::PermissionReadWrite);  string \
xmlContent;  MgXmlUtil xmlUtil(roleDoc.getContent(xmlContent));
         DOMDocument* roleDOM = xmlUtil.GetDocument();
@@ -2019,7 +2019,7 @@
 
     // Get the group document.
 
-    XmlDocument xmlDoc = GetDocument(*groupRes, MgResourcePermission::ReadWrite);
+    XmlDocument xmlDoc = GetDocument(*groupRes, \
MgResourcePermission::PermissionReadWrite);  XmlValue docValue(xmlDoc);
 
     // Set up an XQuery.
@@ -2133,7 +2133,7 @@
 
     // Get the role document.
 
-    XmlDocument xmlDoc = GetDocument(*roleRes, MgResourcePermission::ReadWrite);
+    XmlDocument xmlDoc = GetDocument(*roleRes, \
MgResourcePermission::PermissionReadWrite);  XmlValue docValue(xmlDoc);
 
     // Set up an XQuery.
@@ -2247,7 +2247,7 @@
 
     // Get the role document.
 
-    XmlDocument xmlDoc = GetDocument(*roleRes, MgResourcePermission::ReadWrite);
+    XmlDocument xmlDoc = GetDocument(*roleRes, \
MgResourcePermission::PermissionReadWrite);  XmlValue docValue(xmlDoc);
 
     // Set up an XQuery.

Modified: trunk/MgDev/Server/src/Services/Tile/ServerTileService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Tile/ServerTileService.cpp	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Server/src/Services/Tile/ServerTileService.cpp	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -483,7 +483,7 @@
             serviceMan->RequestService(MgServiceType::ResourceService));
         assert(NULL != resourceService);
 
-        if (!resourceService->HasPermission(resource, \
MgResourcePermission::ReadOnly)) +        if \
(!resourceService->HasPermission(resource, MgResourcePermission::PermissionReadOnly)) \
                {
             MG_LOG_AUTHENTICATION_ENTRY(MgResources::PermissionDenied.c_str());
 

Modified: trunk/MgDev/Server/src/Services/Tile/TileCacheDefault.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Tile/TileCacheDefault.cpp	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Server/src/Services/Tile/TileCacheDefault.cpp	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -544,7 +544,7 @@
         serviceMan->RequestService(MgServiceType::ResourceService));
     assert(NULL != resourceService);
 
-    if (!resourceService->HasPermission(mapDefinition, \
MgResourcePermission::ReadOnly)) +    if \
(!resourceService->HasPermission(mapDefinition, \
MgResourcePermission::PermissionReadOnly))  {
         MG_LOG_AUTHENTICATION_ENTRY(MgResources::PermissionDenied.c_str());
 

Modified: trunk/MgDev/Web/src/CMakeLists.txt
===================================================================
--- trunk/MgDev/Web/src/CMakeLists.txt	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/CMakeLists.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -9,15 +9,7 @@
 if (NOT MG_COMMON_SUBSET_ONLY)
     add_subdirectory(DevHttpServer)
     #add_subdirectory(CgiAgent)
-    add_subdirectory(PhpApi)
-    if (WITH_JAVA)
-        # For preview 3 until new vanilla SWIG wrapper in place, only build/ship \
                MapGuideJavaApiEx.jar
-        #add_subdirectory(JavaApi)
-        add_subdirectory(JavaApiEx)
-    endif (WITH_JAVA)
 
-    # Needed for api binding generation
-    file(COPY "MapGuideApi" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
     file(COPY "WEB-INF" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 
     install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/localized DESTINATION \
${MG_WWWROOT} COMPONENT ${MG_COMPONENT})

Modified: trunk/MgDev/Web/src/MapGuideApi/copydlls.bat
===================================================================
--- trunk/MgDev/Web/src/MapGuideApi/copydlls.bat	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/MapGuideApi/copydlls.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -16,9 +16,13 @@
 
 if "%1"=="BUILD" goto copy_build
 if "%1"=="RELEASE" goto copy_release
+if "%1"=="Release" goto copy_release
 if "%1"=="RELEASE64" goto copy_release64
+if "%1"=="Release64" goto copy_release64
 if "%1"=="DEBUG" goto copy_debug
+if "%1"=="Debug" goto copy_debug
 if "%1"=="DEBUG64" goto copy_debug64
+if "%1"=="Debug64" goto copy_debug64
 
 
 REM ---- DEFAULT -----

Modified: trunk/MgDev/Web/src/mapadmin/resizablepagecomponents.php
===================================================================
--- trunk/MgDev/Web/src/mapadmin/resizablepagecomponents.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Web/src/mapadmin/resizablepagecomponents.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -540,7 +540,7 @@
         var $disabled;
         var $submitForm;
 
-        function ToolbarButtonRecord()
+        function __construct()
         {
             $this->id = "";
             $this->label = "";
@@ -669,7 +669,7 @@
         var $col1Vals;
         var $col3Vals;
 
-        function AddRemoveControlRecord()
+        function __construct()
         {
             $this->enabled = false;
             $this->size = 10;
@@ -815,7 +815,7 @@
         var $tileOn;
         var $enabled;
 
-        function ServiceSelectorRecord()
+        function __construct()
         {
             $this->serverAddress = "";
             $this->drawingOnID = "drawingServiceOn";
@@ -883,7 +883,7 @@
         var $onlineVal;
         var $enabled;
 
-        function OnlineSelectorRecord()
+        function __construct()
         {
             $this->onlineID = "";
             $this->onlineVal = false;

Modified: trunk/MgDev/Web/src/mapadmin/serverdatafunctions.php
===================================================================
--- trunk/MgDev/Web/src/mapadmin/serverdatafunctions.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapadmin/serverdatafunctions.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     require_once 'xmlparser.php';
-    require_once 'constants.php';
 
     ////// Utility functions //////
     function CopyArray( $sourceArray, &$destArray )
@@ -123,7 +122,7 @@
         var $description;
         var $groups;
 
-        function UserTableRecord( $name, $description )
+        function __construct( $name, $description )
         {
             $this->name = $name;
             $this->description = $description;
@@ -289,7 +288,7 @@
         var $users;
 
         // Print contents
-        function GroupTableRecord( $description )
+        function __construct( $description )
         {
             $this->description = $description;
             $this->users = array();
@@ -606,7 +605,7 @@
         var $online;
         var $services;
 
-        function ServerTableRecord( $name, $description )
+        function __construct( $name, $description )
         {
             $this->name = $name;
             $this->description = $description;
@@ -946,28 +945,28 @@
 
     class GeneralPropsRecord
     {
-        var $displayName;
-        var $displayNamePropStr;
-        var $locale;
-        var $localePropStr;
-        var $defaultMessageLocale;
-        var $defaultMessageLocalePropStr;
-        var $localizationResourcesPath;
-        var $localizationResourcesPathPropStr;
-        var $tcpIpMtu;
-        var $tcpIpMtuPropStr;
-        var $tempPath;
-        var $tempPathPropStr;
-        var $fdoPath;
-        var $fdoPathPropStr;
-        var $email;
-        var $emailPropStr;
-        var $connectionTimeOut;
-        var $connectionTimeOutPropStr;
-        var $connectionTimerInt;
-        var $connectionTimerIntPropStr;
+        public string $displayName;
+        public string $displayNamePropStr;
+        public string $locale;
+        public string $localePropStr;
+        public string $defaultMessageLocale;
+        public string $defaultMessageLocalePropStr;
+        public string $localizationResourcesPath;
+        public string $localizationResourcesPathPropStr;
+        public string $tcpIpMtu;
+        public string $tcpIpMtuPropStr;
+        public string $tempPath;
+        public string $tempPathPropStr;
+        public string $fdoPath;
+        public string $fdoPathPropStr;
+        public string $email;
+        public string $emailPropStr;
+        public int $connectionTimeOut;
+        public string $connectionTimeOutPropStr;
+        public int $connectionTimerInt;
+        public string $connectionTimerIntPropStr;
 
-        function GeneralPropsRecord()
+        function __construct()
         {
             $this->displayName = "";
             $this->displayNamePropStr = \
MgConfigProperties::GeneralPropertyDisplayName; @@ -1110,7 +1109,7 @@
          var $threadPoolSize;
          var $threadPoolSizePropStr;
 
-        function ConnectionPropsRecord( $connStr, $propSectionStr, $maxConnsPropStr, \
$portPropStr, $queueSizePropStr, $threadPoolSizePropStr ) +        function \
__construct( $connStr, $propSectionStr, $maxConnsPropStr, $portPropStr, \
$queueSizePropStr, $threadPoolSizePropStr )  {
             $this->connStr = $connStr;
             $this->propSectionStr = $propSectionStr;
@@ -1189,7 +1188,7 @@
         var $dataCacheSize;
         var $dataCacheSizePropStr;
 
-        function FeatureServicePropsRecord()
+        function __construct()
         {
             $this->enabled = true;
             $this->enabledID = "featureServiceEnabled";
@@ -1294,7 +1293,7 @@
         var $packagesPathPropStr;
 
 
-        function ResourceServicePropsRecord()
+        function __construct()
         {
             $this->enabled = true;
             $this->dataFileTrashFolder = "";
@@ -1436,7 +1435,7 @@
         var $tileCachePath;
         var $tileCachePathPropStr;
 
-        function TileServicePropsRecord()
+        function __construct()
         {
             $this->enabled = true;
             $this->tileCachePath = "";
@@ -1481,7 +1480,7 @@
         var $sessionTimerInt;
         var $sessionTimerIntPropStr;
 
-        function SiteServicePropsRecord()
+        function __construct()
         {
             $this->enabled = true;
             $this->sessionTimeout = 0;
@@ -1646,7 +1645,7 @@
         var $filenamePropStr;
         var $parmsPropStr;
 
-         function LogPropsRecord( $propSectionStr, $enabledPropStr, \
$filenamePropStr, $parmsPropStr, $allPossibleParms ) +        function __construct( \
$propSectionStr, $enabledPropStr, $filenamePropStr, $parmsPropStr, $allPossibleParms \
)  {
             $this->propSectionStr = $propSectionStr;
             $this->enabledPropStr = $enabledPropStr;
@@ -1733,7 +1732,7 @@
         var $type;
         var $status;
 
-        function LogFileRecord( $type, $status )
+        function __construct( $type, $status )
         {
             $this->type = $type;
             $this->status = $status;
@@ -1857,9 +1856,10 @@
     // Package Table record type
     class PackageTableRecord
     {
-        var $status;
+        public string $status;
+        public int $size;
 
-        function PackageTableRecord( $serverAdmin, $packageName )
+        function __construct( $serverAdmin, $packageName )
         {
             global $errCannotGetPackageStatus;
 
@@ -2026,7 +2026,7 @@
         var $serviceMetadata;
         var $keywords;
 
-        function WMSPropsRecord()
+        function __construct()
         {
             global $wmsServiceMetadataItems;
 
@@ -2184,7 +2184,7 @@
         var $serviceMetadata;
         var $keywords;
 
-        function WFSPropsRecord()
+        function __construct()
         {
             global $wfsServiceMetadataItems;
 

Modified: trunk/MgDev/Web/src/mapadmin/viewserverstatusbottom.php
===================================================================
--- trunk/MgDev/Web/src/mapadmin/viewserverstatusbottom.php	2022-10-10 10:58:26 UTC \
                (rev 9976)
+++ trunk/MgDev/Web/src/mapadmin/viewserverstatusbottom.php	2022-10-10 11:14:40 UTC \
(rev 9977) @@ -36,7 +36,7 @@
             var $divisor;
             var $nextUnit;
 
-            function TimeUnitFormattingData( $divisor, $nextUnit )
+            function __construct( $divisor, $nextUnit )
             {
                 $this->divisor = $divisor;
                 $this->nextUnit = $nextUnit;
@@ -85,7 +85,7 @@
             var $totalVirtualMemory;
             var $virtualMemoryUsed;
 
-            function ServerHealthPageRecord()
+            function __construct()
             {
                 $this->timeStamp = 0;
                 $this->cpuUtilization = 0;

Modified: trunk/MgDev/Web/src/mapviewerjava/common.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/common.jsp	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerjava/common.jsp	2022-10-10 11:14:40 UTC (rev 9977)
@@ -32,7 +32,7 @@
     //
     String realpath = getServletContext().getRealPath("/");
     String configPath =  realpath + "webconfig.ini";
-    MapGuideJavaApiEx.MgInitializeWebTier(configPath);
+    MapGuideJavaApi.mgInitializeWebTier(configPath);
 }
 
 String GetDefaultLocale()

Modified: trunk/MgDev/Web/src/mapviewerjava/init.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/init.jsp	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerjava/init.jsp	2022-10-10 11:14:40 UTC (rev 9977)
@@ -24,7 +24,7 @@
     // Initialize web tier with the site configuration file.  The config
     // file should be in the same folder as this script.
     String configPath =  realpath + "webconfig.ini";
-    MapGuideJavaApiEx.MgInitializeWebTier( configPath );
+    MapGuideJavaApi.mgInitializeWebTier( configPath );
 }
 
 %>

Modified: trunk/MgDev/Web/src/mapviewerjava/mainframe.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/mainframe.jsp	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerjava/mainframe.jsp	2022-10-10 11:14:40 UTC (rev \
9977) @@ -549,23 +549,15 @@
     response.getWriter().write(templ);
     response.setContentLength(templ.length());
 }
-catch(MgUserNotFoundException e)
-{
-    RequestAuthentication(response);
-    return;
-}
-catch(MgUnauthorizedAccessException e)
-{
-    RequestAuthentication(response);
-    return;
-}
-catch(MgAuthenticationFailedException e)
-{
-    RequestAuthentication(response);
-    return;
-}
 catch(MgException e)
 {
+    if (e.getExceptionCode() == MgExceptionCodes.MgUserNotFoundException ||
+        e.getExceptionCode() == MgExceptionCodes.MgUnauthorizedAccessException ||
+        e.getExceptionCode() == MgExceptionCodes.MgAuthenticationFailedException) {
+        RequestAuthentication(response);
+        return;
+    }
+
     String msg = EscapeForHtml(e.getExceptionMessage());
     response.getWriter().write(msg);
     response.setContentLength(msg.length());

Modified: trunk/MgDev/Web/src/mapviewerphp/ajaxviewerabout.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/ajaxviewerabout.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/ajaxviewerabout.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -19,7 +19,6 @@
 
 include 'common.php';
 include 'product.php';
-include 'constants.php';
 
 define('VIEWER_VERSION', "4.0.0.0" );
 

Modified: trunk/MgDev/Web/src/mapviewerphp/buffer.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/buffer.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/buffer.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $mapName = "";
@@ -390,6 +389,7 @@
 
     //unescape strings
     //
+    /*
     if(ini_get("magic_quotes_sybase") == "1")
         $selText = str_replace("''", "'", $selText);
     else if(get_magic_quotes_gpc() == "1")
@@ -400,6 +400,7 @@
         //remove additional backslash
         $selText = str_replace("\\", "", $selText);
     }
+    */
 
     if((int)$foretrans < 0 || (int)$foretrans > 100)
         $foretrans = 50;

Modified: trunk/MgDev/Web/src/mapviewerphp/bufferui.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/bufferui.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/bufferui.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $popup = 0;

Modified: trunk/MgDev/Web/src/mapviewerphp/colorpicker.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/colorpicker.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/colorpicker.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $clr = "000000";

Modified: trunk/MgDev/Web/src/mapviewerphp/createlayer.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/createlayer.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/createlayer.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
 include("common.php");
-include("constants.php");
 require_once("layerdefinitionfactory.php");
 
 InitializeWebTier();

Modified: trunk/MgDev/Web/src/mapviewerphp/gettingstarted.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/gettingstarted.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/gettingstarted.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $cmdListPage = "WS1a9193826455f5ff9110c71085341391d-2e28.htm";
 

Modified: trunk/MgDev/Web/src/mapviewerphp/legend.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/legend.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/legend.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     class TreeItem
     {

Modified: trunk/MgDev/Web/src/mapviewerphp/legendui.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/legendui.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/legendui.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     GetRequestParameters();

Modified: trunk/MgDev/Web/src/mapviewerphp/mainframe.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/mainframe.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/mainframe.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
 include 'common.php';
-include 'constants.php';
 include 'product.php';
 
 $webLayoutDefinition = '';

Modified: trunk/MgDev/Web/src/mapviewerphp/mapframe.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/mapframe.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/mapframe.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
 include 'common.php';
-include 'constants.php';
 
 $mapDefinition = "";
 $locale = "";

Modified: trunk/MgDev/Web/src/mapviewerphp/measure.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/measure.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/measure.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $mapName = "";

Modified: trunk/MgDev/Web/src/mapviewerphp/propertyctrl.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/propertyctrl.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/propertyctrl.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $mapFrame = "";

Modified: trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -1,7 +1,6 @@
 <?php
 
     include 'common.php';
-    include 'constants.php';
 
     $sessionID = "";
     $mapName   = "";
@@ -46,7 +45,7 @@
 
         $array       = explode(",", $args["paper_size"]);
         $paperSize   = new Size(ParseLocaleDouble($array[0]), \
                ParseLocaleDouble($array[1]));
-        $printSize   = new Size($paperSize->width / 25.4 * $printDpi, \
$paperSize->height / 25.4 * $printDpi); +        $printSize   = new \
Size(intval($paperSize->width / 25.4 * $printDpi), intval($paperSize->height / 25.4 * \
$printDpi));  
         $array       = explode(",", $args["box"]);
         $captureBox  = CreatePolygon($array);
@@ -105,15 +104,15 @@
         $colorString = substr($colorString, 2, 6) . substr($colorString, 0, 2);
         $color = new MgColor($colorString);
 
-        $mgReader = $renderingService->RenderMap($map, 
-                                                $selection, 
-                                                $center,
-                                                $scaleDenominator, 
-                                                $toSize->width, 
-                                                $toSize->height,
-                                                $color,
-                                                "PNG",
-                                                false);
+        $mgReader = $renderingService->RenderMap($map,
+                                                 $selection,
+                                                 $center,
+                                                 doubleval($scaleDenominator),
+                                                 intval($toSize->width),
+                                                 intval($toSize->height),
+                                                 $color,
+                                                 "PNG",
+                                                 false);
 
         $tempImage = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "mgo" . uniqid();
         $mgReader->ToFile($tempImage);
@@ -126,7 +125,7 @@
         imagedestroy($image);
         // Crop the normalized image
         $croppedImg = imagecreatetruecolor($size->width, $size->height);
-        imagecopy($croppedImg, $normalizedImg, 0, 0, (imagesx($normalizedImg) - \
$size->width) / 2, (imagesy($normalizedImg) - $size->height) / 2, $size->width, \
$size->height); +        imagecopy($croppedImg, $normalizedImg, 0, 0, \
intval((imagesx($normalizedImg) - $size->width) / 2), intval((imagesy($normalizedImg) \
- $size->height) / 2), $size->width, $size->height);  // Free the normalized image
         imagedestroy($normalizedImg);
         // Draw the north arrow on the map
@@ -172,10 +171,10 @@
         $naRes      = 300;
         $naMargin   = 12;
         // Calculate the margin as pixels according to the resolutions
-        $margin     = $resolution * $naMargin / 25.4;
+        $margin     = intval($resolution * $naMargin / 25.4);
         // Get the width of the north arrow on the map picture
-        $drawWidth  = $naWidth * $resolution / $naRes;
-        $drawHeight = $naHeight * $resolution / $naRes;
+        $drawWidth  = intval($naWidth * $resolution / $naRes);
+        $drawHeight = intval($naHeight * $resolution / $naRes);
         // Draw the north arrow on the map picture
         imagecopyresized($map, $rotatedNa, $mapWidth - $drawWidth - $margin, \
$mapHeight - $drawHeight - $margin, 0, 0, $drawWidth, $drawHeight, $naWidth, \
$naHeight);  // Free the north arrow image


Property changes on: trunk/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php
___________________________________________________________________
Modified: svn:mergeinfo
## -2,5 +2,6 ##
 /sandbox/adsk/2.4jbeta2/Web/src/mapviewerphp/quickplotgeneratepicture.php:6334-6374
 /sandbox/jng/createruntimemap/Web/src/mapviewerphp/quickplotgeneratepicture.php:7486-7555
  /sandbox/jng/v30/Web/src/mapviewerphp/quickplotgeneratepicture.php:8220-8221
+/sandbox/jng/vanilla_swig/Web/src/mapviewerphp/quickplotgeneratepicture.php:9916-9968
  /sandbox/jng/webtier_upgrade_v2/MgDev/Web/src/mapviewerphp/quickplotgeneratepicture.php:7817-7861
  /sandbox/rfc94/Web/src/mapviewerphp/quickplotgeneratepicture.php:5099-5163
\ No newline at end of property
Modified: trunk/MgDev/Web/src/mapviewerphp/quickplotpanel.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/quickplotpanel.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/quickplotpanel.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $targetType = 0;

Modified: trunk/MgDev/Web/src/mapviewerphp/quickplotpreviewinner.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/quickplotpreviewinner.php	2022-10-10 10:58:26 \
                UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/quickplotpreviewinner.php	2022-10-10 11:14:40 \
UTC (rev 9977) @@ -16,7 +16,6 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = GetDefaultLocale();
     $scaleDenominator;

Modified: trunk/MgDev/Web/src/mapviewerphp/search.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/search.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/search.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -21,7 +21,6 @@
     ob_start();
 
     include 'common.php';
-    include 'constants.php';
 
     class SearchError extends Exception
     {

Modified: trunk/MgDev/Web/src/mapviewerphp/searchprompt.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/searchprompt.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/searchprompt.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $cmdIndex = 0;

Modified: trunk/MgDev/Web/src/mapviewerphp/selectwithin.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/selectwithin.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/selectwithin.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $mapName = "";
     $sessionId = "";

Modified: trunk/MgDev/Web/src/mapviewerphp/selectwithinui.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/selectwithinui.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/mapviewerphp/selectwithinui.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -18,7 +18,6 @@
 //
 
     include 'common.php';
-    include 'constants.php';
 
     $locale = "";
     $popup = 0;

Modified: trunk/MgDev/Web/src/mapviewerphp/taskframe.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/taskframe.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/mapviewerphp/taskframe.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -18,7 +18,6 @@
 //
 
 include 'common.php';
-include 'constants.php';
 
 $sessionId = "";
 $webLayoutId = "";

Modified: trunk/MgDev/Web/src/schemareport/displayschema.php
===================================================================
--- trunk/MgDev/Web/src/schemareport/displayschema.php	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/schemareport/displayschema.php	2022-10-10 11:14:40 UTC (rev \
9977) @@ -17,7 +17,6 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-    include '../mapadmin/constants.php';
     include 'stringconstants.php';
 ?>
 
@@ -39,6 +38,7 @@
             $schemaName = $_GET['schemaName'];
             $className = $_GET['className'];
             $viewer = $_GET['viewer'];
+            $firstSchema = "";
             $firstClass = "";
 
             try

Modified: trunk/MgDev/Web/src/schemareport/main.php
===================================================================
--- trunk/MgDev/Web/src/schemareport/main.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/schemareport/main.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -17,7 +17,6 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-    include '../mapadmin/constants.php';
     include 'stringconstants.php';
 ?>
 
@@ -33,7 +32,7 @@
     <body>
 
         <?php
-
+            $sessionId = "";
             $username = "Administrator";
             $password = "admin";
 

Modified: trunk/MgDev/Web/src/schemareport/showclass.php
===================================================================
--- trunk/MgDev/Web/src/schemareport/showclass.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/schemareport/showclass.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -17,7 +17,6 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-    include '../mapadmin/constants.php';
     include 'stringconstants.php';
     include 'displayschemafunctions.php';
 ?>

Modified: trunk/MgDev/Web/src/schemareport/showgeom.php
===================================================================
--- trunk/MgDev/Web/src/schemareport/showgeom.php	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/schemareport/showgeom.php	2022-10-10 11:14:40 UTC (rev 9977)
@@ -17,7 +17,6 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-    include '../mapadmin/constants.php';
     include 'stringconstants.php';
     include 'displayschemafunctions.php';
     include 'layerdefinitionfactory.php';

Index: trunk/MgDev/Web/src/viewerfiles
===================================================================
--- trunk/MgDev/Web/src/viewerfiles	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/Web/src/viewerfiles	2022-10-10 11:14:40 UTC (rev 9977)

Property changes on: trunk/MgDev/Web/src/viewerfiles
___________________________________________________________________
Modified: svn:mergeinfo
## -8,4 +8,5 ##
 /sandbox/jng/createruntimemap/Web/src/viewerfiles:7486-7555
 /sandbox/jng/layer_bbox_toggle/Web/src/viewerfiles:9635-9643
 /sandbox/jng/ogc_viewer_representation/Web/src/viewerfiles:9678-9698
-/sandbox/jng/v30/Web/src/viewerfiles:8226-8227
\ No newline at end of property
+/sandbox/jng/v30/Web/src/viewerfiles:8226-8227
+/sandbox/jng/vanilla_swig/Web/src/viewerfiles:9916-9968
\ No newline at end of property
Modified: trunk/MgDev/Web/src/viewerfiles/ajaxmappane.templ
===================================================================
--- trunk/MgDev/Web/src/viewerfiles/ajaxmappane.templ	2022-10-10 10:58:26 UTC (rev \
                9976)
+++ trunk/MgDev/Web/src/viewerfiles/ajaxmappane.templ	2022-10-10 11:14:40 UTC (rev \
9977) @@ -1162,7 +1162,9 @@
         else if(item.type == 1)
         {
             var cmd = parent.commands[item.cmdIndex];
-            addMenuOption(menuObj, item.name, item.cmdIndex, 1, cmd.icon, \
cmd.iconDisabled, cmd.enabled); +            if (cmd) {
+                addMenuOption(menuObj, item.name, item.cmdIndex, 1, cmd.icon, \
cmd.iconDisabled, cmd.enabled); +            }
         }
         else  if(item.type == 3)
         {

Modified: trunk/MgDev/build.bat
===================================================================
--- trunk/MgDev/build.bat	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/build.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,4 +1,4 @@
-@echo off
+@echo on
 rem MapGuide build script for windows
 rem
 rem Author: Jackie Ng (jumpinjackie@gmail.com)
@@ -286,80 +286,114 @@
 :install_server
 echo [install]: Server
 echo [install]: Server - Binaries
-%XCOPY_SINGLE% "%MG_SERVER%\bin\%TYPEBUILD%" "%MG_OUTPUT_SERVER%\bin" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY_SINGLE% \
"%MG_SERVER%\bin\%TYPEBUILD%" "%MG_OUTPUT_SERVER%\bin" \
/EXCLUDE:%CONFIGURATION%_excludes.txt  echo [install]: Server - FDO
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\FDO" "%MG_OUTPUT_SERVER%\FDO" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\FDO" "%MG_OUTPUT_SERVER%\FDO" \
/EXCLUDE:%CONFIGURATION%_excludes.txt  echo [install]: Server - Logs
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Logs" "%MG_OUTPUT_SERVER%\Logs" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Logs" "%MG_OUTPUT_SERVER%\Logs"  echo [install]: Server \
                - Packages
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Packages" "%MG_OUTPUT_SERVER%\Packages" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Packages" "%MG_OUTPUT_SERVER%\Packages"  echo [install]: \
                Server - Repositories
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Repositories" "%MG_OUTPUT_SERVER%\Repositories" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Repositories" "%MG_OUTPUT_SERVER%\Repositories"  echo \
                [install]: Server - Resources
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Resources" "%MG_OUTPUT_SERVER%\Resources" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Resources" "%MG_OUTPUT_SERVER%\Resources"  echo \
                [install]: Server - Schema
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Schema" "%MG_OUTPUT_SERVER%\Schema" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Schema" "%MG_OUTPUT_SERVER%\Schema"  echo [install]: \
                Server - Temp
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Temp" "%MG_OUTPUT_SERVER%\Temp" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\Temp" "%MG_OUTPUT_SERVER%\Temp"  echo [install]: Server \
                - WFS
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\wfs" "%MG_OUTPUT_SERVER%\wfs" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\wfs" "%MG_OUTPUT_SERVER%\wfs"  echo [install]: Server - \
                WMS
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\wms" "%MG_OUTPUT_SERVER%\wms" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\bin\%TYPEBUILD%\wms" "%MG_OUTPUT_SERVER%\wms"  echo [install]: Server - \
                DBXML
-copy /Y "%MG_BUILD_DBXML_EXE_PATH%\*.exe" "%MG_OUTPUT_SERVER%\bin"
+copy /Y "%MG_BUILD_DBXML_EXE_PATH%\*.exe" "%MG_OUTPUT_SERVER%\bin" \
/EXCLUDE:%CONFIGURATION%_excludes.txt  echo [install]: Server - RepositoryAdmin
-%XCOPY% "%MG_SERVER%\RepositoryAdmin" "%MG_OUTPUT_SERVER%\RepositoryAdmin" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_SERVER%\RepositoryAdmin" "%MG_OUTPUT_SERVER%\RepositoryAdmin"  echo [install]: \
                CsMap Dictionaries
-%XCOPY% "%MG_OEM%\CSMap\CsMapDev\Dictionaries" "%MG_OUTPUT_CSMAP%\Dictionaries" \
/EXCLUDE:svn_excludes.txt+csmap_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_OEM%\CSMap\CsMapDev\Dictionaries" "%MG_OUTPUT_CSMAP%\Dictionaries" \
/EXCLUDE:csmap_excludes.txt  echo [install]: PDBs - Common
-%XCOPY% "%MG_COMMON%\bin\%TYPEBUILD%\*.pdb" "%MG_OUTPUT%\pdbs" \
/EXCLUDE:pdb_excludes.txt +%XCOPY% "%MG_COMMON%\bin\%TYPEBUILD%\*.pdb" \
"%MG_OUTPUT%\pdbs"  echo [install]: PDBs - Server
-%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\*.pdb" "%MG_OUTPUT%\pdbs" \
/EXCLUDE:pdb_excludes.txt +%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\*.pdb" \
"%MG_OUTPUT%\pdbs"  echo [install]: PDBs - Web
-%XCOPY% "%MG_WEB%\bin\%TYPEBUILD%\*.pdb" "%MG_OUTPUT%\pdbs" \
                /EXCLUDE:pdb_excludes.txt
-%XCOPY% "%MG_WEB%\src\mapagent64\*.pdb" "%MG_OUTPUT%\pdbs" /EXCLUDE:pdb_excludes.txt
+%XCOPY_SINGLE% "%MG_WEB%\bin\%TYPEBUILD%\*.pdb" "%MG_OUTPUT%\pdbs"
+%XCOPY_SINGLE% "%MG_WEB%\src\mapagent64\*.pdb" "%MG_OUTPUT%\pdbs"
 if "%TYPECOMPONENT%"=="server" goto quit
 if "%TYPECOMPONENT%"=="web" goto quit
 
 :install_web
-echo [install]: web Tier
-
+echo [install]: Web Tier - dll setup
+pushd "%MG_WEB_SRC%\MapGuideApi"
+call copydlls.bat %TYPEBUILD% %CONFIGURATION%
+popd
 echo [install]: Web Tier - localized
-%XCOPY% "%MG_WEB_SRC%\localized" "%MG_OUTPUT_WEB%\www\localized" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_WEB_SRC%\localized" \
"%MG_OUTPUT_WEB%\www\localized"  echo [install]: Web Tier - mapadmin
-%XCOPY% "%MG_WEB_SRC%\mapadmin" "%MG_OUTPUT_WEB%\www\mapadmin" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_WEB_SRC%\mapadmin" \
"%MG_OUTPUT_WEB%\www\mapadmin"  echo [install]: Web Tier - mapagent
-%XCOPY% "%MG_BUILD_MAPAGENT_PATH%" "%MG_OUTPUT_WEB%\www\mapagent" \
/EXCLUDE:svn_excludes.txt+mapagent_excludes.txt+%TYPEBUILD%_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY% "%MG_BUILD_MAPAGENT_PATH%" "%MG_OUTPUT_WEB%\www\mapagent" \
/EXCLUDE:%CONFIGURATION%_excludes.txt  echo [install]: Web Tier - MapGuide API \
                unmanaged binaries
-%XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" "%MG_OUTPUT_WEB%\www\mapagent" \
/EXCLUDE:php_excludes.txt+dotnetapi_excludes.txt+dotnetxml_excludes.txt+java_excludes.txt+svn_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY_SINGLE% "%MG_WEB_BIN%\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\www\mapagent"
 echo [install]: Web Tier - mapagent test forms
-%XCOPY% "%MG_UNIT_TEST%\WebTier\MapAgent\MapAgentForms" \
"%MG_OUTPUT_WEB%\www\mapagent" /EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt \
+%XCOPY% "%MG_UNIT_TEST%\WebTier\MapAgent\MapAgentForms" \
"%MG_OUTPUT_WEB%\www\mapagent"  echo [install]: Web Tier - stdicons
-%XCOPY% "%MG_WEB_SRC%\stdicons" "%MG_OUTPUT_WEB%\www\stdicons" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_WEB_SRC%\stdicons" \
"%MG_OUTPUT_WEB%\www\stdicons"  echo [install]: Web Tier - viewerfiles
-%XCOPY% "%MG_WEB_SRC%\viewerfiles" "%MG_OUTPUT_WEB%\www\viewerfiles" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_WEB_SRC%\viewerfiles" "%MG_OUTPUT_WEB%\www\viewerfiles"  echo [install]: Web \
                Tier - schemareport
-%XCOPY% "%MG_WEB_SRC%\schemareport" "%MG_OUTPUT_WEB%\www\schemareport" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_WEB_SRC%\schemareport" "%MG_OUTPUT_WEB%\www\schemareport" +echo [install]: Web \
Tier - Resources +%XCOPY% "%MG_SERVER%\bin\%TYPEBUILD%\Resources" \
"%MG_OUTPUT_WEB%\www\mapagent\Resources"  echo [install]: Web Tier - webconfig.ini
 copy /Y "%MG_WEB_SRC%\webconfig.ini" "%MG_OUTPUT_WEB%\www"
 echo [install]: Web Tier - mapviewerphp
-%XCOPY% "%MG_WEB_SRC%\mapviewerphp" "%MG_OUTPUT_WEB%\www\mapviewerphp" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_WEB_SRC%\mapviewerphp" "%MG_OUTPUT_WEB%\www\mapviewerphp"  echo [install]: Web \
                Tier - Tomcat - MapGuide API unmanaged binaries
-%XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" \
"%MG_OUTPUT_WEB%\Tomcat\bin"/EXCLUDE:java_excludes.txt+dotnetapi_excludes.txt+dotnetxml_excludes.txt+svn_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY_SINGLE% "%MG_WEB_BIN%\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\Tomcat\bin"
 echo [install]: Web Tier - php - MapGuide API unmanaged binaries
-%XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" \
"%MG_OUTPUT_WEB%\Php"/EXCLUDE:php_excludes.txt+dotnetapi_excludes.txt+dotnetxml_excludes.txt+svn_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY_SINGLE% "%MG_WEB_BIN%\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\Php"
 echo [install]: Web Tier - php ext - MapGuide API unmanaged binaries
-%XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" "%MG_OUTPUT_WEB%\Php\ext" \
/EXCLUDE:php_excludes.txt+dotnetapi_excludes.txt+dotnetxml_excludes.txt+svn_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY_SINGLE% "%MG_WEB_BIN%\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\Php\ext"
 echo [install]: Web Tier - mapviewernet
-%XCOPY% "%MG_WEB_SRC%\mapviewernet" "%MG_OUTPUT_WEB%\www\mapviewernet" \
                /EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt
-echo [install]: Web Tier - mapviewernet - MapGuide API unmanaged binaries
-%XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" "%MG_OUTPUT_WEB%\www\mapviewernet\bin" \
/EXCLUDE:svn_excludes.txt+dotnet_excludes.txt+%TYPEBUILD%_excludes.txt+%TYPEBUILD%_excludes.txt
 +%XCOPY% "%MG_WEB_SRC%\mapviewernet" "%MG_OUTPUT_WEB%\www\mapviewernet"
 echo [install]: Web Tier - mapviewerjava
-%XCOPY% "%MG_WEB_SRC%\mapviewerjava" "%MG_OUTPUT_WEB%\www\mapviewerjava" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_WEB_SRC%\mapviewerjava" "%MG_OUTPUT_WEB%\www\mapviewerjava"  echo [install]: Web \
                Tier - mapviewerjava - WEB-INF
-%XCOPY% "%MG_WEB_SRC%\WEB-INF" "%MG_OUTPUT_WEB%\www\WEB-INF" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_WEB_SRC%\WEB-INF" \
"%MG_OUTPUT_WEB%\www\WEB-INF" +echo [install]: Web Tier - PHP Bindings
+%XCOPY% "%CD%\packages\php\%CONFIGURATION%\x64\php_MapGuideApi.*" \
"%MG_OUTPUT_WEB%\Php\ext" /EXCLUDE:%CONFIGURATION%_excludes.txt +echo [install]: Web \
Tier - Java Bindings +%XCOPY_SINGLE% "%CD%\packages\Java\%CONFIGURATION%\x64\*.jar" \
"%MG_OUTPUT_WEB%\www\WEB-INF\lib" +%XCOPY_SINGLE% \
"%CD%\packages\Java\%CONFIGURATION%\x64\*.dll" "%MG_OUTPUT_WEB%\Tomcat\bin" +echo \
[install]: Web Tier - .net Bindings +SET \
MG_NUGET_PKG_DIR=%CD%\packages\DotNet\%CONFIGURATION% +SET \
MG_ASSEMBLIES_DIR=%CD%\Bindings\src\Managed\DotNet\MapViewerStub\bin\%PLATFORM_CLR%\%CONFIGURATION%\net48\win-x64\publish
 +REM We need the full .net assembly set and its native dependencies for mapviewernet
+REM To easily produce this list for copying to mapviewernet, we will do a \
framework-dependent +REM publish of MapViewerStub for this very purpose
+REM
+REM Before we begin, do a sanity check: Our source nuget package dir should have the \
built nuget packages +echo [install]: Sanity checking that nuget packages have been \
built and exist in the expected directory +if not exist "%MG_NUGET_PKG_DIR%\*.nupkg" \
( +    echo [error]: No NuGet packages found in expected directory. Building the \
bindings should have put nuget packages in here. +    exit /B 1
+)
+REM Now do the publish
+pushd "%CD%\Bindings\src\Managed\DotNet\MapViewerStub"
+dotnet add package OSGeo.MapGuide.Foundation -s "%MG_NUGET_PKG_DIR%"
+dotnet add package OSGeo.MapGuide.Geometry -s "%MG_NUGET_PKG_DIR%"
+dotnet add package OSGeo.MapGuide.PlatformBase -s "%MG_NUGET_PKG_DIR%"
+dotnet add package OSGeo.MapGuide.MapGuideCommon -s "%MG_NUGET_PKG_DIR%"
+dotnet add package OSGeo.MapGuide.Web -s "%MG_NUGET_PKG_DIR%"
+dotnet publish --configuration %CONFIGURATION%
+popd
+REM The publish output dir should now have the full MapGuide .net assemblies and \
their native dependencies. +REM Copy them all to the destination mapviewernet bin \
directory +echo [install]: Copying full dll list to mapviewernet
+%XCOPY_SINGLE% "%MG_ASSEMBLIES_DIR%\*.dll" "%MG_OUTPUT_WEB%\www\mapviewernet\bin"
+if not exist "%MG_OUTPUT_WEB%\nuget" mkdir "%MG_OUTPUT_WEB%\nuget"
+%XCOPY_SINGLE% "%CD%\packages\DotNet\%CONFIGURATION%\*.nupkg" \
"%MG_OUTPUT_WEB%\nuget"  REM Required for Web Tier unit tests
-copy /Y "%MG_BUILD_SQLITE_PHP_API%" "%MG_OUTPUT_WEB%\Php\ext"
 echo [build]: Web Tier - Clean fusion
 call %ANT% clean -f "%MG_OEM%\fusion\build.xml"
 if not "%errorlevel%"=="0" goto error
@@ -373,43 +407,45 @@
 call %ANT% selfbuild -Dselfbuild.home="%MG_OUTPUT%\fusion-selfbuild" -f \
"%MG_OEM%\fusion\build.xml"  if not "%errorlevel%"=="0" goto error
 echo [install]: Web Tier - fusion templates
-%XCOPY% "%MG_OEM%\fusionMG" "%MG_OUTPUT_WEB%\www\fusion" \
/EXCLUDE:svn_excludes.txt+%CONFIGURATION%_excludes.txt +%XCOPY% "%MG_OEM%\fusionMG" \
"%MG_OUTPUT_WEB%\www\fusion"  echo [install]: Web Tier - MgDevHttpServer
 if not exist "%MG_OUTPUT_WEB%\DevHttpServer" mkdir "%MG_OUTPUT_WEB%\DevHttpServer"
+%XCOPY_SINGLE% "%MG_WEB_BIN%\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\DevHttpServer"
 copy /Y "%MG_WEB%\DevHttpServer\%TYPEBUILD%\*.dll" "%MG_OUTPUT_WEB%\DevHttpServer"
 copy /Y "%MG_WEB%\DevHttpServer\%TYPEBUILD%\*.exe" "%MG_OUTPUT_WEB%\DevHttpServer"
 echo [install]: Web Tier - Apache module
 if not exist "%MG_OUTPUT_WEB%\Apache24\modules" mkdir \
                "%MG_OUTPUT_WEB%\Apache24\modules"
-%XCOPY% /F "%MG_BUILD_MAPAGENT%" "%MG_OUTPUT_WEB%\Apache24\modules"
+%XCOPY% /F "%MG_BUILD_MAPAGENT%" "%MG_OUTPUT_WEB%\Apache24\modules" \
/EXCLUDE:%CONFIGURATION%_excludes.txt +
 if "%TYPECOMPONENT%"=="server" goto quit
 if "%TYPECOMPONENT%"=="web" goto quit
 
 :install_doc
 echo [install]: Documentation
-%XCOPY% "%MG_DOC_OUTPUT%" "%MG_OUTPUT_WEB%\www\help\webapi" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_DOC_OUTPUT%" \
"%MG_OUTPUT_WEB%\www\help\webapi"  echo [install]: MapGuide Developer's Guide
-%XCOPY% "%MG_DOC%\devguide\build\html" "%MG_OUTPUT_WEB%\www\help\devguide" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC%\devguide\build\html" "%MG_OUTPUT_WEB%\www\help\devguide"  echo [install]: \
                Developer's Guide Sample Code (PHP)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\phpsamples" "%MG_OUTPUT_WEB%\www\phpsamples" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\phpsamples" "%MG_OUTPUT_WEB%\www\phpsamples"  echo \
                [install]: Developer's Guide Sample Code (Java)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\javasamples" "%MG_OUTPUT_WEB%\www\javasamples" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\javasamples" "%MG_OUTPUT_WEB%\www\javasamples"  echo \
                [install]: Developer's Guide Sample Code (DotNet)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\dotnetsamples" \
"%MG_OUTPUT_WEB%\www\dotnetsamples" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\dotnetsamples" "%MG_OUTPUT_WEB%\www\dotnetsamples"  echo \
                [install]: Developer's Guide Sample Code (PHP)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\phpviewersample" \
"%MG_OUTPUT_WEB%\www\phpviewersample" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\phpviewersample" "%MG_OUTPUT_WEB%\www\phpviewersample"  \
                echo [install]: Developer's Guide Sample Code (Java)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\javaviewersample" \
"%MG_OUTPUT_WEB%\www\javaviewersample" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\javaviewersample" "%MG_OUTPUT_WEB%\www\javaviewersample"  \
                echo [install]: Developer's Guide Sample Code (DotNet)
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\dotnetviewersample" \
"%MG_OUTPUT_WEB%\www\dotnetviewersample" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\dotnetviewersample" \
"%MG_OUTPUT_WEB%\www\dotnetviewersample"  echo [install]: OpenLayers Samples
-%XCOPY% "%MG_DOC_DEVGUIDE_SAMPLES%\clientsamples" \
"%MG_OUTPUT_WEB%\www\clientsamples" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% \
"%MG_DOC_DEVGUIDE_SAMPLES%\clientsamples" "%MG_OUTPUT_WEB%\www\clientsamples"  echo \
[install]: Samples landing page  copy /Y "%MG_DOC_DEVGUIDE_SAMPLES%\samples.php" \
"%MG_OUTPUT_WEB%\www"  echo [install]: Viewer API documentation
-%XCOPY% "%MG_DOC%\viewerapi" "%MG_OUTPUT_WEB%\www\help\viewerapi" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY% "%MG_DOC%\viewerapi" \
"%MG_OUTPUT_WEB%\www\help\viewerapi"  echo [install]: Copy dlls into .net samples
-%XCOPY% "%MG_OUTPUT_WEB%\www\mapviewernet\bin\*.dll" \
"%MG_OUTPUT_WEB%\www\dotnetsamples\bin" \
                /EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt
-%XCOPY% "%MG_OUTPUT_WEB%\www\mapviewernet\bin\*.dll" \
"%MG_OUTPUT_WEB%\www\dotnetviewersample\bin" \
/EXCLUDE:svn_excludes.txt+%TYPEBUILD%_excludes.txt +%XCOPY_SINGLE% \
"%MG_ASSEMBLIES_DIR%\*.dll" "%MG_OUTPUT_WEB%\www\dotnetsamples\bin" +%XCOPY_SINGLE% \
"%MG_ASSEMBLIES_DIR%\*.dll" "%MG_OUTPUT_WEB%\www\dotnetviewersample\bin"  if not \
exist "%MG_DEV%\UnitTest\TestData\Samples\Sheboygan\Sheboygan.mgp" (  echo [build]: \
Sheboygan Sample data set  pushd %MG_DEV%\UnitTest\TestData\Samples\Sheboygan
@@ -422,8 +458,6 @@
 :install_test
 echo [install]: Test Suite
 %XCOPY% "%MG_UNIT_TEST%" "%MG_OUTPUT_TEST%\UnitTest"
-if not exist "%MG_OUTPUT_TEST%\Oem\SQLite\bin\%TYPEBUILD%" mkdir \
                "%MG_OUTPUT_TEST%\Oem\SQLite\bin\%TYPEBUILD%"
-copy /Y "%MG_BUILD_SQLITE_DOTNET_API%" "%MG_OUTPUT_TEST%\Oem\SQLite\bin\%TYPEBUILD%"
 copy /Y test_readme.txt "%MG_OUTPUT_TEST%"
 copy /Y run_tests.bat "%MG_OUTPUT_TEST%"
 copy /Y run_tests.sh "%MG_OUTPUT_TEST%"

Copied: trunk/MgDev/clean.bat (from rev 9968, sandbox/jng/vanilla_swig/clean.bat)
===================================================================
--- trunk/MgDev/clean.bat	                        (rev 0)
+++ trunk/MgDev/clean.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -0,0 +1,39 @@
+@echo off
+echo [clean]: Oem
+if exist Oem\ACE\ACE_wrappers\lib64 rd /S /Q Oem\ACE\ACE_wrappers\lib64
+if exist Oem\ACE\ACE_wrappers\obj64 rd /S /Q Oem\ACE\ACE_wrappers\obj64
+if exist Oem\CppUnit-1.9.14\lib64 rd /S /Q Oem\CppUnit-1.9.14\lib64
+if exist Oem\CppUnit-1.9.14\src\cppunit\Release64 rd /S /Q \
Oem\CppUnit-1.9.14\src\cppunit\Release64 +if exist Oem\CppUnit-1.9.14\src\obj64 rd /S \
/Q Oem\CppUnit-1.9.14\src\obj64 +if exist Oem\CsMap\CsMapDev\bin160 rd /S /Q \
Oem\CsMap\CsMapDev\bin160 +if exist Oem\CsMap\CsMapDev\lib160 rd /S /Q \
Oem\CsMap\CsMapDev\lib160 +if exist Oem\CsMap\CsMapDev\obj160 rd /S /Q \
Oem\CsMap\CsMapDev\obj160 +echo [clean]: Packages
+if exist packages\DotNet rd /S /Q packages\DotNet
+if exist packages\Java rd /S /Q packages\Java
+if exist packages\Php rd /S /Q packages\Php
+REM If these exist, it may trip up the publishing of MapViewerStub because these may \
be stale, we always +REM want to build MapViewerStub from freshly installed .nupkg \
files and never from this cached location +if exist \
packages\Installed\osgeo.mapguide.foundation rd /S /Q \
packages\Installed\osgeo.mapguide.foundation +if exist \
packages\Installed\osgeo.mapguide.geometry rd /S /Q \
packages\Installed\osgeo.mapguide.geometry +if exist \
packages\Installed\osgeo.mapguide.mapguidecommon rd /S /Q \
packages\Installed\osgeo.mapguide.mapguidecommon +if exist \
packages\Installed\osgeo.mapguide.platformbase rd /S /Q \
packages\Installed\osgeo.mapguide.platformbase +if exist \
packages\Installed\osgeo.mapguide.web rd /S /Q packages\Installed\osgeo.mapguide.web \
+echo [clean]: Common +if exist Common\bin rd /S /Q Common\bin
+if exist Common\lib rd /S /Q Common\lib
+if exist Common\obj rd /S /Q Common\obj
+echo [clean]: Server
+if exist Server\bin rd /S /Q Server\bin
+if exist Server\lib rd /S /Q Server\lib
+if exist Server\obj rd /S /Q Server\obj
+echo [clean]: Web
+if exist Web\bin rd /S /Q Web\bin
+if exist Web\lib rd /S /Q Web\lib
+if exist Web\obj rd /S /Q Web\obj
+echo [clean]: Portable
+if exist Portable\bin rd /S /Q Portable\bin
+if exist Portable\lib rd /S /Q Portable\lib
+if exist Portable\obj rd /S /Q Portable\obj
+echo [clean]: Doc
+if exist Doc\MgOpensource_WebAPIReference rd /S /Q Doc\MgOpensource_WebAPIReference
\ No newline at end of file

Modified: trunk/MgDev/cmake/configs/mapguide.conf.in
===================================================================
--- trunk/MgDev/cmake/configs/mapguide.conf.in	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/cmake/configs/mapguide.conf.in	2022-10-10 11:14:40 UTC (rev 9977)
@@ -36,7 +36,7 @@
   Options All
   Require all granted
 
-  AddHandler php5-script .php
+  AddHandler application/x-httpd-php .php
   AddHandler mgmapagent_handler fcgi
 
   RewriteEngine on

Modified: trunk/MgDev/cmake/configs/php.ini.in
===================================================================
--- trunk/MgDev/cmake/configs/php.ini.in	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/cmake/configs/php.ini.in	2022-10-10 11:14:40 UTC (rev 9977)
@@ -3,159 +3,226 @@
 ;;;;;;;;;;;;;;;;;;;
 ; About php.ini   ;
 ;;;;;;;;;;;;;;;;;;;
-; This file controls many aspects of PHP's behavior.  In order for PHP to
-; read it, it must be named 'php.ini'.  PHP looks for it in the current
-; working directory, in the path designated by the environment variable
-; PHPRC, and in the path that was defined in compile time (in that order).
-; Under Windows, the compile-time path is the Windows directory.  The
-; path in which the php.ini file is looked for can be overridden using
-; the -c argument in command line mode.
-;
-; The syntax of the file is extremely simple.  Whitespace and Lines
+; PHP's initialization file, generally called php.ini, is responsible for
+; configuring many of the aspects of PHP's behavior.
+
+; PHP attempts to find and load this configuration from a number of locations.
+; The following is a summary of its search order:
+; 1. SAPI module specific location.
+; 2. The PHPRC environment variable. (As of PHP 5.2.0)
+; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0)
+; 4. Current working directory (except CLI)
+; 5. The web server's directory (for SAPI modules), or directory of PHP
+; (otherwise in Windows)
+; 6. The directory from the --with-config-file-path compile time option, or the
+; Windows directory (usually C:\windows)
+; See the PHP docs for more specific information.
+; https://php.net/configuration.file
+
+; The syntax of the file is extremely simple.  Whitespace and lines
 ; beginning with a semicolon are silently ignored (as you probably guessed).
 ; Section headers (e.g. [Foo]) are also silently ignored, even though
 ; they might mean something in the future.
-;
+
+; Directives following the section heading [PATH=/www/mysite] only
+; apply to PHP files in the /www/mysite directory.  Directives
+; following the section heading [HOST=www.example.com] only apply to
+; PHP files served from www.example.com.  Directives set in these
+; special sections cannot be overridden by user-defined INI files or
+; at runtime. Currently, [PATH=] and [HOST=] sections only work under
+; CGI/FastCGI.
+; https://php.net/ini.sections
+
 ; Directives are specified using the following syntax:
 ; directive = value
 ; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
-;
+; Directives are variables used to configure PHP or PHP extensions.
+; There is no name validation.  If PHP can't find an expected
+; directive because it is not set or is mistyped, a default value will be used.
+
 ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
 ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
-; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
-;
+; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a
+; previously set variable or directive (e.g. ${foo})
+
 ; Expressions in the INI file are limited to bitwise operators and parentheses:
-; |        bitwise OR
-; &        bitwise AND
-; ~        bitwise NOT
-; !        boolean NOT
-;
+; |  bitwise OR
+; ^  bitwise XOR
+; &  bitwise AND
+; ~  bitwise NOT
+; !  boolean NOT
+
 ; Boolean flags can be turned on using the values 1, On, True or Yes.
 ; They can be turned off using the values 0, Off, False or No.
-;
+
 ; An empty string can be denoted by simply not writing anything after the equal
 ; sign, or by using the None keyword:
-;
-;  foo =         ; sets foo to an empty string
-;  foo = none    ; sets foo to an empty string
-;  foo = "none"  ; sets foo to the string 'none'
-;
+
+; foo =         ; sets foo to an empty string
+; foo = None    ; sets foo to an empty string
+; foo = "None"  ; sets foo to the string 'None'
+
 ; If you use constants in your value, and these constants belong to a
 ; dynamically loaded extension (either a PHP extension or a Zend extension),
 ; you may only use these constants *after* the line that loads the extension.
-; 
-;
+
 ;;;;;;;;;;;;;;;;;;;
 ; About this file ;
 ;;;;;;;;;;;;;;;;;;;
-; This is the recommended, PHP 5-style version of the php.ini-dist file.  It
-; sets some non standard settings, that make PHP more efficient, more secure,
-; and encourage cleaner coding.
-;
-; The price is that with these settings, PHP may be incompatible with some
-; applications, and sometimes, more difficult to develop with.  Using this
-; file is warmly recommended for production sites.  As all of the changes from
-; the standard settings are thoroughly documented, you can go over each one,
-; and decide whether you want to use it or not.
-;
-; For general information about the php.ini file, please consult the php.ini-dist
-; file, included in your PHP distribution.
-;
-; This file is different from the php.ini-dist file in the fact that it features
-; different values for several directives, in order to improve performance, while
-; possibly breaking compatibility with the standard out-of-the-box behavior of
-; PHP.  Please make sure you read what's different, and modify your scripts
-; accordingly, if you decide to use this file instead.
-;
-; - register_globals = Off         [Security, Performance]
-;     Global variables are no longer registered for input data (POST, GET, cookies,
-;     environment and other server variables).  Instead of using $foo, you must use
-;     you can use $_REQUEST["foo"] (includes any variable that arrives through the
-;     request, namely, POST, GET and cookie variables), or use one of the specific
-;     $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending
-;     on where the input originates.  Also, you can look at the
-;     import_request_variables() function.
-;     Note that register_globals is going to be depracated (i.e., turned off by
-;     default) in the next version of PHP, because it often leads to security bugs.
-;     Read http://php.net/manual/en/security.registerglobals.php for further
-;     information.
-; - register_long_arrays = Off     [Performance]
-;     Disables registration of the older (and deprecated) long predefined array
-;     variables ($HTTP_*_VARS).  Instead, use the superglobals that were
-;     introduced in PHP 4.1.0
-; - display_errors = Off           [Security]
-;     With this directive set to off, errors that occur during the execution of
-;     scripts will no longer be displayed as a part of the script output, and thus,
-;     will no longer be exposed to remote users.  With some errors, the error \
                message
-;     content may expose information about your script, web server, or database
-;     server that may be exploitable for hacking.  Production sites should have this
-;     directive set to off.
-; - log_errors = On                [Security]
-;     This directive complements the above one.  Any errors that occur during the
-;     execution of your script will be logged (typically, to your server's error \
                log,
-;     but can be configured in several ways).  Along with setting display_errors to \
                off,
-;     this setup gives you the ability to fully understand what may have gone wrong,
-;     without exposing any sensitive information to remote users.
-; - output_buffering = 4096        [Performance]
-;     Set a 4KB output buffer.  Enabling output buffering typically results in less
-;     writes, and sometimes less packets sent on the wire, which can often lead to
-;     better performance.  The gain this directive actually yields greatly depends
-;     on which Web server you're working with, and what kind of scripts you're \
                using.
-; - register_argc_argv = Off       [Performance]
-;     Disables registration of the somewhat redundant $argv and $argc global
-;     variables.
-; - magic_quotes_gpc = Off         [Performance]
-;     Input data is no longer escaped with slashes so that it can be sent into
-;     SQL databases without further manipulation.  Instead, you should use the
-;     function addslashes() on each input element you wish to send to a database.
-; - variables_order = "GPCS"       [Performance]
-;     The environment variables are not hashed into the $_ENV.  To access
-;     environment variables, you can use getenv() instead.
-; - error_reporting = E_ALL        [Code Cleanliness, Security(?)]
-;     By default, PHP surpresses errors of type E_NOTICE.  These error messages
-;     are emitted for non-critical errors, but that could be a symptom of a bigger
-;     problem.  Most notably, this will cause error messages about the use
-;     of uninitialized variables to be displayed.
-; - allow_call_time_pass_reference = Off     [Code cleanliness]
-;     It's not possible to decide to force a variable to be passed by reference
-;     when calling a function.  The PHP 4 style to do this is by making the
-;     function require the relevant argument by reference.
+; PHP comes packaged with two INI files. One that is recommended to be used
+; in production environments and one that is recommended to be used in
+; development environments.
 
+; php.ini-production contains settings which hold security, performance and
+; best practices at its core. But please be aware, these settings may break
+; compatibility with older or less security conscience applications. We
+; recommending using the production ini in production and testing environments.
 
+; php.ini-development is very similar to its production variant, except it is
+; much more verbose when it comes to errors. We recommend using the
+; development version only in development environments, as errors shown to
+; application users can inadvertently leak otherwise secure information.
+
+; This is the php.ini-production INI file.
+
+;;;;;;;;;;;;;;;;;;;
+; Quick Reference ;
+;;;;;;;;;;;;;;;;;;;
+
+; The following are all the settings which are different in either the production
+; or development versions of the INIs with respect to PHP's default behavior.
+; Please see the actual settings later in the document for more details as to why
+; we recommend these changes in PHP's behavior.
+
+; display_errors
+;   Default Value: On
+;   Development Value: On
+;   Production Value: Off
+
+; display_startup_errors
+;   Default Value: On
+;   Development Value: On
+;   Production Value: Off
+
+; error_reporting
+;   Default Value: E_ALL
+;   Development Value: E_ALL
+;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
+
+; log_errors
+;   Default Value: Off
+;   Development Value: On
+;   Production Value: On
+
+; max_input_time
+;   Default Value: -1 (Unlimited)
+;   Development Value: 60 (60 seconds)
+;   Production Value: 60 (60 seconds)
+
+; output_buffering
+;   Default Value: Off
+;   Development Value: 4096
+;   Production Value: 4096
+
+; register_argc_argv
+;   Default Value: On
+;   Development Value: Off
+;   Production Value: Off
+
+; request_order
+;   Default Value: None
+;   Development Value: "GP"
+;   Production Value: "GP"
+
+; session.gc_divisor
+;   Default Value: 100
+;   Development Value: 1000
+;   Production Value: 1000
+
+; session.sid_bits_per_character
+;   Default Value: 4
+;   Development Value: 5
+;   Production Value: 5
+
+; short_open_tag
+;   Default Value: On
+;   Development Value: Off
+;   Production Value: Off
+
+; variables_order
+;   Default Value: "EGPCS"
+;   Development Value: "GPCS"
+;   Production Value: "GPCS"
+
+; zend.exception_ignore_args
+;   Default Value: Off
+;   Development Value: Off
+;   Production Value: On
+
+; zend.exception_string_param_max_len
+;   Default Value: 15
+;   Development Value: 15
+;   Production Value: 0
+
 ;;;;;;;;;;;;;;;;;;;;
+; php.ini Options  ;
+;;;;;;;;;;;;;;;;;;;;
+; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini"
+;user_ini.filename = ".user.ini"
+
+; To disable this feature set this option to an empty value
+;user_ini.filename =
+
+; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 \
seconds (5 minutes) +;user_ini.cache_ttl = 300
+
+;;;;;;;;;;;;;;;;;;;;
 ; Language Options ;
 ;;;;;;;;;;;;;;;;;;;;
 
 ; Enable the PHP scripting language engine under Apache.
+; https://php.net/engine
 engine = On
 
-; Enable compatibility mode with Zend Engine 1 (PHP 4.x)
-zend.ze1_compatibility_mode = Off
+; This directive determines whether or not PHP will recognize code between
+; <? and ?> tags as PHP source which should be processed as such. It is
+; generally recommended that <?php and ?> should be used and that this feature
+; should be disabled, as enabling it may result in issues when generating XML
+; documents, however this remains supported for backward compatibility reasons.
+; Note that this directive does not control the <?= shorthand tag, which can be
+; used regardless of this directive.
+; Default Value: On
+; Development Value: Off
+; Production Value: Off
+; https://php.net/short-open-tag
+short_open_tag = Off
 
-; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
-; NOTE: Using short tags should be avoided when developing applications or
-; libraries that are meant for redistribution, or deployment on PHP
-; servers which are not under your control, because short tags may not
-; be supported on the target server. For portable, redistributable code,
-; be sure not to use short tags.
-short_open_tag = On
-
-; Allow ASP-style <% %> tags.
-asp_tags = Off
-
 ; The number of significant digits displayed in floating point numbers.
-precision    =  14
+; https://php.net/precision
+precision = 14
 
-; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
-y2k_compliance = On
-
-; Output buffering allows you to send header lines (including cookies) even
-; after you send body content, at the price of slowing PHP's output layer a
-; bit.  You can enable output buffering during runtime by calling the output
-; buffering functions.  You can also enable output buffering for all files by
-; setting this directive to On.  If you wish to limit the size of the buffer
-; to a certain size - you can use a maximum number of bytes instead of 'On', as
-; a value for this directive (e.g., output_buffering=4096).
+; Output buffering is a mechanism for controlling how much output data
+; (excluding headers and cookies) PHP should keep internally before pushing that
+; data to the client. If your application's output exceeds this setting, PHP
+; will send that data in chunks of roughly the size you specify.
+; Turning on this setting and managing its maximum buffer size can yield some
+; interesting side-effects depending on your application and web server.
+; You may be able to send headers and cookies after you've already sent output
+; through print or echo. You also may see performance benefits if your server is
+; emitting less packets due to buffered output versus PHP streaming the output
+; as it gets it. On production servers, 4096 bytes is a good setting for performance
+; reasons.
+; Note: Output buffering can also be controlled via Output Buffering Control
+;   functions.
+; Possible Values:
+;   On = Enabled and buffer is unlimited. (Use with caution)
+;   Off = Disabled
+;   Integer = Enables the buffer and sets its maximum size in bytes.
+; Note: This directive is hardcoded to Off for the CLI SAPI
+; Default Value: Off
+; Development Value: 4096
+; Production Value: 4096
+; https://php.net/output-buffering
 output_buffering = 4096
 
 ; You can redirect all of the output of your scripts to a function.  For
@@ -163,29 +230,52 @@
 ; encoding will be transparently converted to the specified encoding.
 ; Setting any output handler automatically turns on output buffering.
 ; Note: People who wrote portable scripts should not depend on this ini
-;       directive. Instead, explicitly set the output handler using ob_start().
-;       Using this ini directive may cause problems unless you know what script
-;       is doing.
+;   directive. Instead, explicitly set the output handler using ob_start().
+;   Using this ini directive may cause problems unless you know what script
+;   is doing.
 ; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
-;       and you cannot use both "ob_gzhandler" and "zlib.output_compression".
+;   and you cannot use both "ob_gzhandler" and "zlib.output_compression".
 ; Note: output_handler must be empty if this is set 'On' !!!!
-;       Instead you must use zlib.output_handler.
+;   Instead you must use zlib.output_handler.
+; https://php.net/output-handler
 ;output_handler =
 
+; URL rewriter function rewrites URL on the fly by using
+; output buffer. You can set target tags by this configuration.
+; "form" tag is special tag. It will add hidden input tag to pass values.
+; Refer to session.trans_sid_tags for usage.
+; Default Value: "form="
+; Development Value: "form="
+; Production Value: "form="
+;url_rewriter.tags
+
+; URL rewriter will not rewrite absolute URL nor form by default. To enable
+; absolute URL rewrite, allowed hosts must be defined at RUNTIME.
+; Refer to session.trans_sid_hosts for more details.
+; Default Value: ""
+; Development Value: ""
+; Production Value: ""
+;url_rewriter.hosts
+
 ; Transparent output compression using the zlib library
 ; Valid values for this option are 'off', 'on', or a specific buffer size
 ; to be used for compression (default is 4KB)
 ; Note: Resulting chunk size may vary due to nature of compression. PHP
-;       outputs chunks that are few hundreds bytes each as a result of
-;       compression. If you prefer a larger chunk size for better
-;       performance, enable output_buffering in addition.
+;   outputs chunks that are few hundreds bytes each as a result of
+;   compression. If you prefer a larger chunk size for better
+;   performance, enable output_buffering in addition.
 ; Note: You need to use zlib.output_handler instead of the standard
-;       output_handler, or otherwise the output will be corrupted.
+;   output_handler, or otherwise the output will be corrupted.
+; https://php.net/zlib.output-compression
 zlib.output_compression = Off
 
+; https://php.net/zlib.output-compression-level
+;zlib.output_compression_level = -1
+
 ; You cannot specify additional output handlers if zlib.output_compression
 ; is activated here. This setting does the same as output_handler but in
 ; a different order.
+; https://php.net/zlib.output-handler
 ;zlib.output_handler =
 
 ; Implicit flush tells PHP to tell the output layer to flush itself
@@ -193,127 +283,181 @@
 ; PHP function flush() after each and every call to print() or echo() and each
 ; and every HTML block.  Turning this option on has serious performance
 ; implications and is generally recommended for debugging purposes only.
+; https://php.net/implicit-flush
+; Note: This directive is hardcoded to On for the CLI SAPI
 implicit_flush = Off
 
 ; The unserialize callback function will be called (with the undefined class'
 ; name as parameter), if the unserializer finds an undefined class
-; which should be instanciated.
-; A warning appears if the specified function is not defined, or if the
-; function doesn't include/implement the missing class.
+; which should be instantiated. A warning appears if the specified function is
+; not defined, or if the function doesn't include/implement the missing class.
 ; So only set this entry, if you really want to implement such a
 ; callback-function.
-unserialize_callback_func=
+unserialize_callback_func =
 
-; When floats & doubles are serialized store serialize_precision significant
+; The unserialize_max_depth specifies the default depth limit for unserialized
+; structures. Setting the depth limit too high may result in stack overflows
+; during unserialization. The unserialize_max_depth ini setting can be
+; overridden by the max_depth option on individual unserialize() calls.
+; A value of 0 disables the depth limit.
+;unserialize_max_depth = 4096
+
+; When floats & doubles are serialized, store serialize_precision significant
 ; digits after the floating point. The default value ensures that when floats
 ; are decoded with unserialize, the data will remain the same.
-serialize_precision = 100
+; The value is also used for json_encode when encoding double values.
+; If -1 is used, then dtoa mode 0 is used which automatically select the best
+; precision.
+serialize_precision = -1
 
-; Whether to enable the ability to force arguments to be passed by reference
-; at function call time.  This method is deprecated and is likely to be
-; unsupported in future versions of PHP/Zend.  The encouraged method of
-; specifying which arguments should be passed by reference is in the function
-; declaration.  You're encouraged to try and turn this option Off and make
-; sure your scripts work properly with it in order to ensure they will work
-; with future versions of the language (you will receive a warning each time
-; you use this feature, and the argument will be passed by value instead of by
-; reference).
-allow_call_time_pass_reference = Off
-
-;
-; Safe Mode
-;
-safe_mode = Off
-
-; By default, Safe Mode does a UID compare check when
-; opening files. If you want to relax this to a GID compare,
-; then turn on safe_mode_gid.
-safe_mode_gid = Off
-
-; When safe_mode is on, UID/GID checks are bypassed when
-; including files from this directory and its subdirectories.
-; (directory must also be in include_path or full path must
-; be used when including)
-safe_mode_include_dir =
-
-; When safe_mode is on, only executables located in the safe_mode_exec_dir
-; will be allowed to be executed via the exec family of functions.
-safe_mode_exec_dir =
-
-; Setting certain environment variables may be a potential security breach.
-; This directive contains a comma-delimited list of prefixes.  In Safe Mode,
-; the user may only alter environment variables whose names begin with the
-; prefixes supplied here.  By default, users will only be able to set
-; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
-;
-; Note:  If this directive is empty, PHP will let the user modify ANY
-; environment variable!
-safe_mode_allowed_env_vars = PHP_
-
-; This directive contains a comma-delimited list of environment variables that
-; the end user won't be able to change using putenv().  These variables will be
-; protected even if safe_mode_allowed_env_vars is set to allow to change them.
-safe_mode_protected_env_vars = LD_LIBRARY_PATH
-
 ; open_basedir, if set, limits all file operations to the defined directory
 ; and below.  This directive makes most sense if used in a per-directory
-; or per-virtualhost web server configuration file. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
+; or per-virtualhost web server configuration file.
+; Note: disables the realpath cache
+; https://php.net/open-basedir
 ;open_basedir =
 
-; This directive allows you to disable certain functions for security reasons.
-; It receives a comma-delimited list of function names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
+; This directive allows you to disable certain functions.
+; It receives a comma-delimited list of function names.
+; https://php.net/disable-functions
 disable_functions =
 
-; This directive allows you to disable certain classes for security reasons.
-; It receives a comma-delimited list of class names. This directive is
-; *NOT* affected by whether Safe Mode is turned On or Off.
+; This directive allows you to disable certain classes.
+; It receives a comma-delimited list of class names.
+; https://php.net/disable-classes
 disable_classes =
 
 ; Colors for Syntax Highlighting mode.  Anything that's acceptable in
 ; <span style="color: ???????"> would work.
+; https://php.net/syntax-highlighting
 ;highlight.string  = #DD0000
 ;highlight.comment = #FF9900
 ;highlight.keyword = #007700
-;highlight.bg      = #FFFFFF
 ;highlight.default = #0000BB
 ;highlight.html    = #000000
 
+; If enabled, the request will be allowed to complete even if the user aborts
+; the request. Consider enabling it if executing long requests, which may end up
+; being interrupted by the user or a browser timing out. PHP's default behavior
+; is to disable this feature.
+; https://php.net/ignore-user-abort
+;ignore_user_abort = On
 
-;
-; Misc
-;
+; Determines the size of the realpath cache to be used by PHP. This value should
+; be increased on systems where PHP opens many files to reflect the quantity of
+; the file operations performed.
+; Note: if open_basedir is set, the cache is disabled
+; https://php.net/realpath-cache-size
+;realpath_cache_size = 4096k
+
+; Duration of time, in seconds for which to cache realpath information for a given
+; file or directory. For systems with rarely changing files, consider increasing \
this +; value.
+; https://php.net/realpath-cache-ttl
+;realpath_cache_ttl = 120
+
+; Enables or disables the circular reference collector.
+; https://php.net/zend.enable-gc
+zend.enable_gc = On
+
+; If enabled, scripts may be written in encodings that are incompatible with
+; the scanner.  CP936, Big5, CP949 and Shift_JIS are the examples of such
+; encodings.  To use this feature, mbstring extension must be enabled.
+;zend.multibyte = Off
+
+; Allows to set the default encoding for the scripts.  This value will be used
+; unless "declare(encoding=...)" directive appears at the top of the script.
+; Only affects if zend.multibyte is set.
+;zend.script_encoding =
+
+; Allows to include or exclude arguments from stack traces generated for exceptions.
+; In production, it is recommended to turn this setting on to prohibit the output
+; of sensitive information in stack traces
+; Default Value: Off
+; Development Value: Off
+; Production Value: On
+zend.exception_ignore_args = On
+
+; Allows setting the maximum string length in an argument of a stringified stack \
trace +; to a value between 0 and 1000000.
+; This has no effect when zend.exception_ignore_args is enabled.
+; Default Value: 15
+; Development Value: 15
+; Production Value: 0
+; In production, it is recommended to set this to 0 to reduce the output
+; of sensitive information in stack traces.
+zend.exception_string_param_max_len = 0
+
+;;;;;;;;;;;;;;;;;
+; Miscellaneous ;
+;;;;;;;;;;;;;;;;;
+
 ; Decides whether PHP may expose the fact that it is installed on the server
 ; (e.g. by adding its signature to the Web server header).  It is no security
 ; threat in any way, but it makes it possible to determine whether you use PHP
 ; on your server or not.
+; https://php.net/expose-php
 expose_php = On
 
-
 ;;;;;;;;;;;;;;;;;;;
 ; Resource Limits ;
 ;;;;;;;;;;;;;;;;;;;
 
-max_execution_time = 60     ; Maximum execution time of each script, in seconds
-max_input_time = 60	; Maximum amount of time each script may spend parsing request \
                data
-memory_limit = 32M      ; Maximum amount of memory a script may consume (8MB)
+; Maximum execution time of each script, in seconds
+; https://php.net/max-execution-time
+; Note: This directive is hardcoded to 0 for the CLI SAPI
+max_execution_time = 30
 
+; Maximum amount of time each script may spend parsing request data. It's a good
+; idea to limit this time on productions servers in order to eliminate unexpectedly
+; long running scripts.
+; Note: This directive is hardcoded to -1 for the CLI SAPI
+; Default Value: -1 (Unlimited)
+; Development Value: 60 (60 seconds)
+; Production Value: 60 (60 seconds)
+; https://php.net/max-input-time
+max_input_time = 60
 
+; Maximum input variable nesting level
+; https://php.net/max-input-nesting-level
+;max_input_nesting_level = 64
+
+; How many GET/POST/COOKIE input variables may be accepted
+;max_input_vars = 1000
+
+; Maximum amount of memory a script may consume
+; https://php.net/memory-limit
+memory_limit = 128M
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Error handling and logging ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-; error_reporting is a bit-field.  Or each number up to get desired error
-; reporting level
-; E_ALL             - All errors and warnings (doesn't include E_STRICT)
+; This directive informs PHP of which errors, warnings and notices you would like
+; it to take action for. The recommended way of setting values for this
+; directive is through the use of the error level constants and bitwise
+; operators. The error level constants are below here for convenience as well as
+; some common settings and their meanings.
+; By default, PHP is set to take action on all errors, notices and warnings EXCEPT
+; those related to E_NOTICE and E_STRICT, which together cover best practices and
+; recommended coding standards in PHP. For performance reasons, this is the
+; recommend error reporting setting. Your production server shouldn't be wasting
+; resources complaining about best practices and coding standards. That's what
+; development servers and development settings are for.
+; Note: The php.ini-development file has this setting as E_ALL. This
+; means it pretty much reports everything which is exactly what you want during
+; development and early testing.
+;
+; Error Level Constants:
+; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 5.4.0)
 ; E_ERROR           - fatal run-time errors
+; E_RECOVERABLE_ERROR  - almost fatal run-time errors
 ; E_WARNING         - run-time warnings (non-fatal errors)
 ; E_PARSE           - compile-time parse errors
 ; E_NOTICE          - run-time notices (these are warnings which often result
 ;                     from a bug in your code, but it's possible that it was
 ;                     intentional (e.g., using an uninitialized variable and
-;                     relying on the fact it's automatically initialized to an
+;                     relying on the fact it is automatically initialized to an
 ;                     empty string)
 ; E_STRICT          - run-time notices, enable to have PHP suggest changes
 ;                     to your code which will ensure the best interoperability
@@ -326,170 +470,268 @@
 ; E_USER_ERROR      - user-generated error message
 ; E_USER_WARNING    - user-generated warning message
 ; E_USER_NOTICE     - user-generated notice message
+; E_DEPRECATED      - warn about code that will not work in future versions
+;                     of PHP
+; E_USER_DEPRECATED - user-generated deprecation warnings
 ;
-; Examples:
-;
-;   - Show all errors, except for notices and coding standards warnings
-;
-;error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
-;
-;   - Show all errors, except for notices
-;
-;error_reporting = E_ALL & ~E_NOTICE
-;
-;   - Show only errors
-;
-;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
-;
-;   - Show all errors
-;
-error_reporting  =  E_ALL
+; Common Values:
+;   E_ALL (Show all errors, warnings and notices including coding standards.)
+;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
+;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding \
standards warnings.) +;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  \
(Show only errors) +; Default Value: E_ALL
+; Development Value: E_ALL
+; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
+; https://php.net/error-reporting
+error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
 
-; Print out errors (as a part of the output).  For production web sites,
-; you're strongly encouraged to turn this feature off, and use error logging
-; instead (see below).  Keeping display_errors enabled on a production web site
-; may reveal security information to end users, such as file paths on your Web
-; server, your database schema or other information.
+; This directive controls whether or not and where PHP will output errors,
+; notices and warnings too. Error output is very useful during development, but
+; it could be very dangerous in production environments. Depending on the code
+; which is triggering the error, sensitive information could potentially leak
+; out of your application such as database usernames and passwords or worse.
+; For production environments, we recommend logging errors rather than
+; sending them to STDOUT.
+; Possible Values:
+;   Off = Do not display any errors
+;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
+;   On or stdout = Display errors to STDOUT
+; Default Value: On
+; Development Value: On
+; Production Value: Off
+; https://php.net/display-errors
 display_errors = Off
 
-; Even when display_errors is on, errors that occur during PHP's startup
-; sequence are not displayed.  It's strongly recommended to keep
-; display_startup_errors off, except for when debugging.
+; The display of errors which occur during PHP's startup sequence are handled
+; separately from display_errors. We strongly recommend you set this to 'off'
+; for production servers to avoid leaking configuration details.
+; Default Value: On
+; Development Value: On
+; Production Value: Off
+; https://php.net/display-startup-errors
 display_startup_errors = Off
 
-; Log errors into a log file (server-specific log, stderr, or error_log (below))
-; As stated above, you're strongly advised to use error logging in place of
-; error displaying on production web sites.
+; Besides displaying errors, PHP can also log errors to locations such as a
+; server-specific log, STDERR, or a location specified by the error_log
+; directive found below. While errors should not be displayed on productions
+; servers they should still be monitored and logging is a great way to do that.
+; Default Value: Off
+; Development Value: On
+; Production Value: On
+; https://php.net/log-errors
 log_errors = On
 
-; Set maximum length of log_errors. In error_log information about the source is
-; added. The default is 1024 and 0 allows to not apply any maximum length at all.
-log_errors_max_len = 1024
-
 ; Do not log repeated messages. Repeated errors must occur in same file on same
-; line until ignore_repeated_source is set true.
+; line unless ignore_repeated_source is set true.
+; https://php.net/ignore-repeated-errors
 ignore_repeated_errors = Off
 
 ; Ignore source of message when ignoring repeated messages. When this setting
 ; is On you will not log errors with repeated messages from different files or
-; sourcelines.
+; source lines.
+; https://php.net/ignore-repeated-source
 ignore_repeated_source = Off
 
 ; If this parameter is set to Off, then memory leaks will not be shown (on
-; stdout or in the log). This has only effect in a debug compile, and if
+; stdout or in the log). This is only effective in a debug compile, and if
 ; error reporting includes E_WARNING in the allowed list
+; https://php.net/report-memleaks
 report_memleaks = On
 
-; Store the last error/warning message in $php_errormsg (boolean).
-track_errors = Off
+; This setting is off by default.
+;report_zend_debug = 0
 
-; Disable the inclusion of HTML tags in error messages.
-; Note: Never use this feature for production boxes.
-;html_errors = Off
+; Turn off normal error reporting and emit XML-RPC error XML
+; https://php.net/xmlrpc-errors
+;xmlrpc_errors = 0
 
-; If html_errors is set On PHP produces clickable error messages that direct
-; to a page describing the error or function causing the error in detail.
-; You can download a copy of the PHP manual from http://www.php.net/docs.php
+; An XML-RPC faultCode
+;xmlrpc_error_number = 0
+
+; When PHP displays or logs an error, it has the capability of formatting the
+; error message as HTML for easier reading. This directive controls whether
+; the error message is formatted as HTML or not.
+; Note: This directive is hardcoded to Off for the CLI SAPI
+; https://php.net/html-errors
+;html_errors = On
+
+; If html_errors is set to On *and* docref_root is not empty, then PHP
+; produces clickable error messages that direct to a page describing the error
+; or function causing the error in detail.
+; You can download a copy of the PHP manual from https://php.net/docs
 ; and change docref_root to the base URL of your local copy including the
 ; leading '/'. You must also specify the file extension being used including
-; the dot.
+; the dot. PHP's default behavior is to leave these settings empty, in which
+; case no links to documentation are generated.
 ; Note: Never use this feature for production boxes.
+; https://php.net/docref-root
+; Examples
 ;docref_root = "/phpmanual/"
+
+; https://php.net/docref-ext
 ;docref_ext = .html
 
-; String to output before an error message.
-;error_prepend_string = "<font color=ff0000>"
+; String to output before an error message. PHP's default behavior is to leave
+; this setting blank.
+; https://php.net/error-prepend-string
+; Example:
+;error_prepend_string = "<span style='color: #ff0000'>"
 
-; String to output after an error message.
-;error_append_string = "</font>"
+; String to output after an error message. PHP's default behavior is to leave
+; this setting blank.
+; https://php.net/error-append-string
+; Example:
+;error_append_string = "</span>"
 
-; Log errors to specified file.
-;error_log = filename
-
-; Log errors to syslog (Event Log on NT, not valid in Windows 95).
+; Log errors to specified file. PHP's default behavior is to leave this value
+; empty.
+; https://php.net/error-log
+; Example:
+;error_log = php_errors.log
+; Log errors to syslog (Event Log on Windows).
 ;error_log = syslog
 
+; The syslog ident is a string which is prepended to every message logged
+; to syslog. Only used when error_log is set to syslog.
+;syslog.ident = php
 
+; The syslog facility is used to specify what type of program is logging
+; the message. Only used when error_log is set to syslog.
+;syslog.facility = user
+
+; Set this to disable filtering control characters (the default).
+; Some loggers only accept NVT-ASCII, others accept anything that's not
+; control characters. If your logger accepts everything, then no filtering
+; is needed at all.
+; Allowed values are:
+;   ascii (all printable ASCII characters and NL)
+;   no-ctrl (all characters except control characters)
+;   all (all characters)
+;   raw (like "all", but messages are not split at newlines)
+; https://php.net/syslog.filter
+;syslog.filter = ascii
+
+;windows.show_crt_warning
+; Default value: 0
+; Development value: 0
+; Production value: 0
+
 ;;;;;;;;;;;;;;;;;
 ; Data Handling ;
 ;;;;;;;;;;;;;;;;;
-;
-; Note - track_vars is ALWAYS enabled as of PHP 4.0.3
 
 ; The separator used in PHP generated URLs to separate arguments.
-; Default is "&".
+; PHP's default setting is "&".
+; https://php.net/arg-separator.output
+; Example:
 ;arg_separator.output = "&amp;"
 
 ; List of separator(s) used by PHP to parse input URLs into variables.
-; Default is "&".
+; PHP's default setting is "&".
 ; NOTE: Every character in this directive is considered as separator!
+; https://php.net/arg-separator.input
+; Example:
 ;arg_separator.input = ";&"
 
-; This directive describes the order in which PHP registers GET, POST, Cookie,
-; Environment and Built-in variables (G, P, C, E & S respectively, often
-; referred to as EGPCS or GPC).  Registration is done from left to right, newer
-; values override older values.
+; This directive determines which super global arrays are registered when PHP
+; starts up. G,P,C,E & S are abbreviations for the following respective super
+; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty
+; paid for the registration of these arrays and because ENV is not as commonly
+; used as the others, ENV is not recommended on productions servers. You
+; can still get access to the environment variables through getenv() should you
+; need to.
+; Default Value: "EGPCS"
+; Development Value: "GPCS"
+; Production Value: "GPCS";
+; https://php.net/variables-order
 variables_order = "GPCS"
 
-; Whether or not to register the EGPCS variables as global variables.  You may
-; want to turn this off if you don't want to clutter your scripts' global scope
-; with user data.  This makes most sense when coupled with track_vars - in which
-; case you can access all of the GPC variables through the $HTTP_*_VARS[],
-; variables.
-;
-; You should do your best to write your scripts so that they do not require
-; register_globals to be on;  Using form variables as globals can easily lead
-; to possible security problems, if the code is not very well thought of.
-register_globals = Off
+; This directive determines which super global data (G,P & C) should be
+; registered into the super global array REQUEST. If so, it also determines
+; the order in which that data is registered. The values for this directive
+; are specified in the same manner as the variables_order directive,
+; EXCEPT one. Leaving this value empty will cause PHP to use the value set
+; in the variables_order directive. It does not mean it will leave the super
+; globals array REQUEST empty.
+; Default Value: None
+; Development Value: "GP"
+; Production Value: "GP"
+; https://php.net/request-order
+request_order = "GP"
 
-; Whether or not to register the old-style input arrays, HTTP_GET_VARS
-; and friends.  If you're not using them, it's recommended to turn them off,
-; for performance reasons.
-register_long_arrays = Off
-
-; This directive tells PHP whether to declare the argv&argc variables (that
-; would contain the GET information).  If you don't use these variables, you
-; should turn it off for increased performance.
+; This directive determines whether PHP registers $argv & $argc each time it
+; runs. $argv contains an array of all the arguments passed to PHP when a script
+; is invoked. $argc contains an integer representing the number of arguments
+; that were passed when the script was invoked. These arrays are extremely
+; useful when running scripts from the command line. When this directive is
+; enabled, registering these variables consumes CPU cycles and memory each time
+; a script is executed. For performance reasons, this feature should be disabled
+; on production servers.
+; Note: This directive is hardcoded to On for the CLI SAPI
+; Default Value: On
+; Development Value: Off
+; Production Value: Off
+; https://php.net/register-argc-argv
 register_argc_argv = Off
 
-; When enabled, the SERVER and ENV variables are created when they're first
-; used (Just In Time) instead of when the script starts. If these variables
-; are not used within a script, having this directive on will result in a
-; performance gain. The PHP directives register_globals, register_long_arrays,
-; and register_argc_argv must be disabled for this directive to have any affect.
+; When enabled, the ENV, REQUEST and SERVER variables are created when they're
+; first used (Just In Time) instead of when the script starts. If these
+; variables are not used within a script, having this directive on will result
+; in a performance gain. The PHP directive register_argc_argv must be disabled
+; for this directive to have any effect.
+; https://php.net/auto-globals-jit
 auto_globals_jit = On
 
+; Whether PHP will read the POST data.
+; This option is enabled by default.
+; Most likely, you won't want to disable this option globally. It causes $_POST
+; and $_FILES to always be empty; the only way you will be able to read the
+; POST data will be through the php://input stream wrapper. This can be useful
+; to proxy requests or to process the POST data in a memory efficient fashion.
+; https://php.net/enable-post-data-reading
+;enable_post_data_reading = Off
+
 ; Maximum size of POST data that PHP will accept.
-post_max_size = 32M
+; Its value may be 0 to disable the limit. It is ignored if POST data reading
+; is disabled through enable_post_data_reading.
+; https://php.net/post-max-size
+post_max_size = 8M
 
-; Magic quotes
-;
+; Automatically add files before PHP document.
+; https://php.net/auto-prepend-file
+auto_prepend_file =
 
-; Magic quotes for incoming GET/POST/Cookie data.
-magic_quotes_gpc = Off
-
-; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
-magic_quotes_runtime = Off
-
-; Use Sybase-style magic quotes (escape ' with '' instead of \').
-magic_quotes_sybase = Off
-
-; Automatically add files before or after any PHP document.
-auto_prepend_file =
+; Automatically add files after PHP document.
+; https://php.net/auto-append-file
 auto_append_file =
 
-; As of 4.0b4, PHP always outputs a character encoding by default in
-; the Content-type: header.  To disable sending of the charset, simply
-; set it to be empty.
+; By default, PHP will output a media type using the Content-Type header. To
+; disable this, simply set it to be empty.
 ;
-; PHP's built-in default is text/html
+; PHP's built-in default media type is set to text/html.
+; https://php.net/default-mimetype
 default_mimetype = "text/html"
-;default_charset = "iso-8859-1"
 
-; Always populate the $HTTP_RAW_POST_DATA variable.
-always_populate_raw_post_data = -1
+; PHP's default character set is set to UTF-8.
+; https://php.net/default-charset
+default_charset = "UTF-8"
 
+; PHP internal character encoding is set to empty.
+; If empty, default_charset is used.
+; https://php.net/internal-encoding
+;internal_encoding =
 
+; PHP input character encoding is set to empty.
+; If empty, default_charset is used.
+; https://php.net/input-encoding
+;input_encoding =
+
+; PHP output character encoding is set to empty.
+; If empty, default_charset is used.
+; See also output_buffer.
+; https://php.net/output-encoding
+;output_encoding =
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Paths and Directories ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -499,6 +741,9 @@
 ;
 ; Windows: "\path1;\path2"
 ;include_path = ".;c:\php\includes"
+;
+; PHP's default setting for include_path is ".;/path/to/php/pear"
+; https://php.net/include-path
 
 ; The root of the PHP pages, used only if nonempty.
 ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
@@ -505,53 +750,85 @@
 ; if you are running php as a CGI under any web server (other than IIS)
 ; see documentation for security issues.  The alternate is to use the
 ; cgi.force_redirect configuration below
+; https://php.net/doc-root
 doc_root =
 
 ; The directory under which PHP opens the script using /~username used only
 ; if nonempty.
+; https://php.net/user-dir
 user_dir =
 
 ; Directory in which the loadable extensions (modules) reside.
+; https://php.net/extension-dir
 extension_dir = "@MG_INSTALL_WEB_PREFIX_ABS@/lib@LIB_SUFFIX@"
 
+; Directory where the temporary files should be placed.
+; Defaults to the system default (see sys_get_temp_dir)
+;sys_temp_dir = "/tmp"
+
 ; Whether or not to enable the dl() function.  The dl() function does NOT work
 ; properly in multithreaded servers, such as IIS or Zeus, and is automatically
 ; disabled on them.
-enable_dl = On
+; https://php.net/enable-dl
+enable_dl = Off
 
 ; cgi.force_redirect is necessary to provide security running PHP as a CGI under
 ; most web servers.  Left undefined, PHP turns this on by default.  You can
 ; turn it off here AT YOUR OWN RISK
 ; **You CAN safely turn this off for IIS, in fact, you MUST.**
-; cgi.force_redirect = 1
+; https://php.net/cgi.force-redirect
+;cgi.force_redirect = 1
 
 ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
-; every request.
-; cgi.nph = 1
+; every request. PHP's default behavior is to disable this feature.
+;cgi.nph = 1
 
 ; if cgi.force_redirect is turned on, and you are not running under Apache or \
Netscape  ; (iPlanet) web servers, you MAY need to set an environment variable name \
that PHP  ; will look for to know it is OK to continue execution.  Setting this \
variable MAY  ; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
-; cgi.redirect_status_env = ;
+; https://php.net/cgi.redirect-status-env
+;cgi.redirect_status_env =
 
-; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
+; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
+; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
+; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
+; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
+; of zero causes PHP to behave as before.  Default is 1.  You should fix your \
scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
+; https://php.net/cgi.fix-pathinfo
+;cgi.fix_pathinfo=1
+
+; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside
+; of the web tree and people will not be able to circumvent .htaccess security.
+;cgi.discard_path=1
+
+; FastCGI under IIS supports the ability to impersonate
 ; security tokens of the calling client.  This allows IIS to define the
 ; security context that the request runs under.  mod_fastcgi under Apache
 ; does not currently support this feature (03/17/2002)
 ; Set to 1 if running under IIS.  Default is zero.
-; fastcgi.impersonate = 1;
+; https://php.net/fastcgi.impersonate
+;fastcgi.impersonate = 1
 
-; Disable logging through FastCGI connection
-; fastcgi.log = 0
+; Disable logging through FastCGI connection. PHP's default behavior is to enable
+; this feature.
+;fastcgi.logging = 0
 
 ; cgi.rfc2616_headers configuration option tells PHP what type of headers to
-; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
-; is supported by Apache. When this option is set to 1 PHP will send
+; use when sending HTTP response code. If set to 0, PHP sends Status: header that
+; is supported by Apache. When this option is set to 1, PHP will send
 ; RFC2616 compliant header.
 ; Default is zero.
+; https://php.net/cgi.rfc2616-headers
 ;cgi.rfc2616_headers = 0
 
+; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #!
+; (shebang) at the top of the running script. This line might be needed if the
+; script support running both as stand-alone script and via PHP CGI<. PHP in CGI
+; mode skips this line and ignores its content if this directive is turned on.
+; https://php.net/cgi.check-shebang-line
+;cgi.check_shebang_line=1
 
 ;;;;;;;;;;;;;;;;
 ; File Uploads ;
@@ -558,15 +835,20 @@
 ;;;;;;;;;;;;;;;;
 
 ; Whether to allow HTTP file uploads.
+; https://php.net/file-uploads
 file_uploads = On
 
 ; Temporary directory for HTTP uploaded files (will use system default if not
 ; specified).
+; https://php.net/upload-tmp-dir
 ;upload_tmp_dir =
 
 ; Maximum allowed size for uploaded files.
+; https://php.net/upload-max-filesize
 upload_max_filesize = 2M
 
+; Maximum number of files that can be uploaded via a single request
+max_file_uploads = 20
 
 ;;;;;;;;;;;;;;;;;;
 ; Fopen wrappers ;
@@ -573,15 +855,24 @@
 ;;;;;;;;;;;;;;;;;;
 
 ; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
+; https://php.net/allow-url-fopen
 allow_url_fopen = On
 
-; Define the anonymous ftp password (your email address)
+; Whether to allow include/require to open URLs (like https:// or ftp://) as files.
+; https://php.net/allow-url-include
+allow_url_include = Off
+
+; Define the anonymous ftp password (your email address). PHP's default setting
+; for this is empty.
+; https://php.net/from
 ;from="john@doe.com"
 
-; Define the User-Agent string
-; user_agent="PHP"
+; Define the User-Agent string. PHP's default setting for this is empty.
+; https://php.net/user-agent
+;user_agent="PHP"
 
 ; Default timeout for socket based streams (seconds)
+; https://php.net/default-socket-timeout
 default_socket_timeout = 60
 
 ; If your scripts have to deal with files from Macintosh systems,
@@ -589,181 +880,283 @@
 ; unix or win32 systems, setting this flag will cause PHP to
 ; automatically detect the EOL character in those files so that
 ; fgets() and file() will work regardless of the source of the file.
-; auto_detect_line_endings = Off
+; https://php.net/auto-detect-line-endings
+;auto_detect_line_endings = Off
 
-
 ;;;;;;;;;;;;;;;;;;;;;;
 ; Dynamic Extensions ;
 ;;;;;;;;;;;;;;;;;;;;;;
-;
+
 ; If you wish to have an extension loaded automatically, use the following
 ; syntax:
 ;
-;   extension=modulename.extension
+;   extension=modulename
 ;
-; For example, on Windows:
+; For example:
 ;
-;   extension=msql.dll
+;   extension=mysqli
 ;
-; ... or under UNIX:
+; When the extension library to load is not located in the default extension
+; directory, You may specify an absolute path to the library file:
 ;
-;   extension=msql.so
+;   extension=/path/to/extension/mysqli.so
 ;
-; Note that it should be the name of the module only; no directory information
-; needs to go here.  Specify the location of the extension with the
-; extension_dir directive above.
+; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and
+; 'extension='php_<ext>.dll') is supported for legacy reasons and may be
+; deprecated in a future PHP major version. So, when it is possible, please
+; move to the new ('extension=<ext>) syntax.
+;
+; Notes for Windows environments :
+;
+; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
+;   extension folders as well as the separate PECL DLL download (PHP 5+).
+;   Be sure to appropriately set the extension_dir directive.
+;
+;extension=bz2
+;extension=curl
+;extension=ffi
+;extension=ftp
+;extension=fileinfo
+;extension=gd
+;extension=gettext
+;extension=gmp
+;extension=intl
+;extension=imap
+;extension=ldap
+;extension=mbstring
+;extension=exif      ; Must be after mbstring as it depends on it
+;extension=mysqli
+;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
+;extension=oci8_19  ; Use with Oracle Database 19 Instant Client
+;extension=odbc
+;extension=openssl
+;extension=pdo_firebird
+;extension=pdo_mysql
+;extension=pdo_oci
+;extension=pdo_odbc
+;extension=pdo_pgsql
+;extension=pdo_sqlite
+;extension=pgsql
+;extension=shmop
+extension=libphp_MapGuideApi.so
 
+; The MIBS data available in the PHP distribution must be installed.
+; See https://www.php.net/manual/en/snmp.installation.php
+;extension=snmp
 
-;Windows Extensions
-;Note that ODBC support is built in, so no dll is needed for it.
-;
+;extension=soap
+;extension=sockets
+;extension=sodium
+;extension=sqlite3
+;extension=tidy
+;extension=xsl
 
-;extension=php_mbstring.dll
-;extension=php_bz2.dll
-;extension=php_cpdf.dll
-;extension=php_curl.dll
-;extension=php_dba.dll
-;extension=php_dbase.dll
-;extension=php_dbx.dll
-;extension=php_exif.dll
-;extension=php_fdf.dll
-;extension=php_filepro.dll
-;extension=php_gd2.dll
-;extension=php_gettext.dll
-;extension=php_ifx.dll
-;extension=php_iisfunc.dll
-;extension=php_imap.dll
-;extension=php_interbase.dll
-;extension=php_java.dll
-;extension=php_ldap.dll
-;extension=php_mcrypt.dll
-;extension=php_mhash.dll
-;extension=php_mime_magic.dll
-;extension=php_ming.dll
-;extension=php_mssql.dll
-;extension=php_msql.dll
-;extension=php_mysql.dll
-;extension=php_oci8.dll
-;extension=php_openssl.dll
-;extension=php_oracle.dll
-;extension=php_pdf.dll
-;extension=php_pgsql.dll
-;extension=php_shmop.dll
-;extension=php_snmp.dll
-;extension=php_sockets.dll
-;extension=php_sybase_ct.dll
-;extension=php_tidy.dll
-;extension=php_w32api.dll
-;extension=php_xmlrpc.dll
-;extension=php_xsl.dll
-;extension=php_yaz.dll
-;extension=php_zip.dll
-extension=libphp_MapGuideApi.so
+;zend_extension=opcache
 
-
 ;;;;;;;;;;;;;;;;;;;
 ; Module Settings ;
 ;;;;;;;;;;;;;;;;;;;
 
+[CLI Server]
+; Whether the CLI web server uses ANSI color coding in its terminal output.
+cli_server.color = On
+
 [Date]
 ; Defines the default timezone used by the date functions
-; http://php.net/date.timezone
-date.timezone = 'UTC'
+; https://php.net/date.timezone
+;date.timezone =
 
-[Syslog]
-; Whether or not to define the various syslog variables (e.g. $LOG_PID,
-; $LOG_CRON, etc.).  Turning it off is a good idea performance-wise.  In
-; runtime, you can define these variables by calling define_syslog_variables().
-define_syslog_variables  = Off
+; https://php.net/date.default-latitude
+;date.default_latitude = 31.7667
 
+; https://php.net/date.default-longitude
+;date.default_longitude = 35.2333
+
+; https://php.net/date.sunrise-zenith
+;date.sunrise_zenith = 90.833333
+
+; https://php.net/date.sunset-zenith
+;date.sunset_zenith = 90.833333
+
+[filter]
+; https://php.net/filter.default
+;filter.default = unsafe_raw
+
+; https://php.net/filter.default-flags
+;filter.default_flags =
+
+[iconv]
+; Use of this INI entry is deprecated, use global input_encoding instead.
+; If empty, default_charset or input_encoding or iconv.input_encoding is used.
+; The precedence is: default_charset < input_encoding < iconv.input_encoding
+;iconv.input_encoding =
+
+; Use of this INI entry is deprecated, use global internal_encoding instead.
+; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.
+; The precedence is: default_charset < internal_encoding < iconv.internal_encoding
+;iconv.internal_encoding =
+
+; Use of this INI entry is deprecated, use global output_encoding instead.
+; If empty, default_charset or output_encoding or iconv.output_encoding is used.
+; The precedence is: default_charset < output_encoding < iconv.output_encoding
+; To use an output encoding conversion, iconv's output handler must be set
+; otherwise output encoding conversion cannot be performed.
+;iconv.output_encoding =
+
+[imap]
+; rsh/ssh logins are disabled by default. Use this INI entry if you want to
+; enable them. Note that the IMAP library does not filter mailbox names before
+; passing them to rsh/ssh command, thus passing untrusted data to this function
+; with rsh/ssh enabled is insecure.
+;imap.enable_insecure_rsh=0
+
+[intl]
+;intl.default_locale =
+; This directive allows you to produce PHP errors when some error
+; happens within intl functions. The value is the level of the error produced.
+; Default is 0, which does not produce any errors.
+;intl.error_level = E_WARNING
+;intl.use_exceptions = 0
+
+[sqlite3]
+; Directory pointing to SQLite3 extensions
+; https://php.net/sqlite3.extension-dir
+;sqlite3.extension_dir =
+
+; SQLite defensive mode flag (only available from SQLite 3.26+)
+; When the defensive flag is enabled, language features that allow ordinary
+; SQL to deliberately corrupt the database file are disabled. This forbids
+; writing directly to the schema, shadow tables (eg. FTS data tables), or
+; the sqlite_dbpage virtual table.
+; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html
+; (for older SQLite versions, this flag has no use)
+;sqlite3.defensive = 1
+
+[Pcre]
+; PCRE library backtracking limit.
+; https://php.net/pcre.backtrack-limit
+;pcre.backtrack_limit=100000
+
+; PCRE library recursion limit.
+; Please note that if you set this value to a high number you may consume all
+; the available process stack and eventually crash PHP (due to reaching the
+; stack size limit imposed by the Operating System).
+; https://php.net/pcre.recursion-limit
+;pcre.recursion_limit=100000
+
+; Enables or disables JIT compilation of patterns. This requires the PCRE
+; library to be compiled with JIT support.
+;pcre.jit=1
+
+[Pdo]
+; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off"
+; https://php.net/pdo-odbc.connection-pooling
+;pdo_odbc.connection_pooling=strict
+
+[Pdo_mysql]
+; Default socket name for local MySQL connects.  If empty, uses the built-in
+; MySQL defaults.
+pdo_mysql.default_socket=
+
+[Phar]
+; https://php.net/phar.readonly
+;phar.readonly = On
+
+; https://php.net/phar.require-hash
+;phar.require_hash = On
+
+;phar.cache_list =
+
 [mail function]
 ; For Win32 only.
+; https://php.net/smtp
 SMTP = localhost
+; https://php.net/smtp-port
 smtp_port = 25
 
 ; For Win32 only.
+; https://php.net/sendmail-from
 ;sendmail_from = me@example.com
 
 ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
+; https://php.net/sendmail-path
 ;sendmail_path =
 
 ; Force the addition of the specified parameters to be passed as extra parameters
 ; to the sendmail binary. These parameters will always replace the value of
-; the 5th parameter to mail(), even in safe mode.
+; the 5th parameter to mail().
 ;mail.force_extra_parameters =
 
-[SQL]
-sql.safe_mode = Off
+; Add X-PHP-Originating-Script: that will include uid of the script followed by the \
filename +mail.add_x_header = Off
 
+; The path to a log file that will log all mail() calls. Log entries include
+; the full path of the script, line number, To address and headers.
+;mail.log =
+; Log mail to syslog (Event Log on Windows).
+;mail.log = syslog
+
 [ODBC]
+; https://php.net/odbc.default-db
 ;odbc.default_db    =  Not yet implemented
+
+; https://php.net/odbc.default-user
 ;odbc.default_user  =  Not yet implemented
+
+; https://php.net/odbc.default-pw
 ;odbc.default_pw    =  Not yet implemented
 
+; Controls the ODBC cursor model.
+; Default: SQL_CURSOR_STATIC (default).
+;odbc.default_cursortype
+
 ; Allow or prevent persistent links.
+; https://php.net/odbc.allow-persistent
 odbc.allow_persistent = On
 
 ; Check that a connection is still valid before reuse.
+; https://php.net/odbc.check-persistent
 odbc.check_persistent = On
 
 ; Maximum number of persistent links.  -1 means no limit.
+; https://php.net/odbc.max-persistent
 odbc.max_persistent = -1
 
 ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
+; https://php.net/odbc.max-links
 odbc.max_links = -1
 
 ; Handling of LONG fields.  Returns number of bytes to variables.  0 means
 ; passthru.
+; https://php.net/odbc.defaultlrl
 odbc.defaultlrl = 4096
 
 ; Handling of binary data.  0 means passthru, 1 return as is, 2 convert to char.
 ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
-; of uodbc.defaultlrl and uodbc.defaultbinmode
+; of odbc.defaultlrl and odbc.defaultbinmode
+; https://php.net/odbc.defaultbinmode
 odbc.defaultbinmode = 1
 
-[MySQL]
-; Allow or prevent persistent links.
-mysql.allow_persistent = On
+[MySQLi]
 
 ; Maximum number of persistent links.  -1 means no limit.
-mysql.max_persistent = -1
+; https://php.net/mysqli.max-persistent
+mysqli.max_persistent = -1
 
-; Maximum number of links (persistent + non-persistent).  -1 means no limit.
-mysql.max_links = -1
+; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
+; https://php.net/mysqli.allow_local_infile
+;mysqli.allow_local_infile = On
 
-; Default port number for mysql_connect().  If unset, mysql_connect() will use
-; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
-; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
-; at MYSQL_PORT.
-mysql.default_port =
+; It allows the user to specify a folder where files that can be sent via LOAD DATA
+; LOCAL can exist. It is ignored if mysqli.allow_local_infile is enabled.
+;mysqli.local_infile_directory =
 
-; Default socket name for local MySQL connects.  If empty, uses the built-in
-; MySQL defaults.
-mysql.default_socket =
+; Allow or prevent persistent links.
+; https://php.net/mysqli.allow-persistent
+mysqli.allow_persistent = On
 
-; Default host for mysql_connect() (doesn't apply in safe mode).
-mysql.default_host =
-
-; Default user for mysql_connect() (doesn't apply in safe mode).
-mysql.default_user =
-
-; Default password for mysql_connect() (doesn't apply in safe mode).
-; Note that this is generally a *bad* idea to store passwords in this file.
-; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
-; and reveal this password!  And of course, any users with read access to this
-; file will be able to reveal the password as well.
-mysql.default_password =
-
-; Maximum time (in secondes) for connect timeout. -1 means no limit
-mysql.connect_timeout = 60
-
-; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
-; SQL-Errors will be displayed.
-mysql.trace_mode = Off
-
-[MySQLI]
-
 ; Maximum number of links.  -1 means no limit.
+; https://php.net/mysqli.max-links
 mysqli.max_links = -1
 
 ; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
@@ -770,16 +1163,20 @@
 ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
 ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
 ; at MYSQL_PORT.
+; https://php.net/mysqli.default-port
 mysqli.default_port = 3306
 
 ; Default socket name for local MySQL connects.  If empty, uses the built-in
 ; MySQL defaults.
+; https://php.net/mysqli.default-socket
 mysqli.default_socket =
 
-; Default host for mysql_connect() (doesn't apply in safe mode).
+; Default host for mysqli_connect() (doesn't apply in safe mode).
+; https://php.net/mysqli.default-host
 mysqli.default_host =
 
-; Default user for mysql_connect() (doesn't apply in safe mode).
+; Default user for mysqli_connect() (doesn't apply in safe mode).
+; https://php.net/mysqli.default-user
 mysqli.default_user =
 
 ; Default password for mysqli_connect() (doesn't apply in safe mode).
@@ -787,140 +1184,144 @@
 ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
 ; and reveal this password!  And of course, any users with read access to this
 ; file will be able to reveal the password as well.
+; https://php.net/mysqli.default-pw
 mysqli.default_pw =
 
 ; Allow or prevent reconnect
 mysqli.reconnect = Off
 
-[mSQL]
-; Allow or prevent persistent links.
-msql.allow_persistent = On
+; If this option is enabled, closing a persistent connection will rollback
+; any pending transactions of this connection, before it is put back
+; into the persistent connection pool.
+;mysqli.rollback_on_cached_plink = Off
 
-; Maximum number of persistent links.  -1 means no limit.
-msql.max_persistent = -1
+[mysqlnd]
+; Enable / Disable collection of general statistics by mysqlnd which can be
+; used to tune and monitor MySQL operations.
+mysqlnd.collect_statistics = On
 
-; Maximum number of links (persistent+non persistent).  -1 means no limit.
-msql.max_links = -1
+; Enable / Disable collection of memory usage statistics by mysqlnd which can be
+; used to tune and monitor MySQL operations.
+mysqlnd.collect_memory_statistics = Off
 
-[PostgresSQL]
+; Records communication from all extensions using mysqlnd to the specified log
+; file.
+; https://php.net/mysqlnd.debug
+;mysqlnd.debug =
+
+; Defines which queries will be logged.
+;mysqlnd.log_mask = 0
+
+; Default size of the mysqlnd memory pool, which is used by result sets.
+;mysqlnd.mempool_default_size = 16000
+
+; Size of a pre-allocated buffer used when sending commands to MySQL in bytes.
+;mysqlnd.net_cmd_buffer_size = 2048
+
+; Size of a pre-allocated buffer used for reading data sent by the server in
+; bytes.
+;mysqlnd.net_read_buffer_size = 32768
+
+; Timeout for network requests in seconds.
+;mysqlnd.net_read_timeout = 31536000
+
+; SHA-256 Authentication Plugin related. File with the MySQL server public RSA
+; key.
+;mysqlnd.sha256_server_public_key =
+
+[OCI8]
+
+; Connection: Enables privileged connections using external
+; credentials (OCI_SYSOPER, OCI_SYSDBA)
+; https://php.net/oci8.privileged-connect
+;oci8.privileged_connect = Off
+
+; Connection: The maximum number of persistent OCI8 connections per
+; process. Using -1 means no limit.
+; https://php.net/oci8.max-persistent
+;oci8.max_persistent = -1
+
+; Connection: The maximum number of seconds a process is allowed to
+; maintain an idle persistent connection. Using -1 means idle
+; persistent connections will be maintained forever.
+; https://php.net/oci8.persistent-timeout
+;oci8.persistent_timeout = -1
+
+; Connection: The number of seconds that must pass before issuing a
+; ping during oci_pconnect() to check the connection validity. When
+; set to 0, each oci_pconnect() will cause a ping. Using -1 disables
+; pings completely.
+; https://php.net/oci8.ping-interval
+;oci8.ping_interval = 60
+
+; Connection: Set this to a user chosen connection class to be used
+; for all pooled server requests with Oracle 11g Database Resident
+; Connection Pooling (DRCP).  To use DRCP, this value should be set to
+; the same string for all web servers running the same application,
+; the database pool must be configured, and the connection string must
+; specify to use a pooled server.
+;oci8.connection_class =
+
+; High Availability: Using On lets PHP receive Fast Application
+; Notification (FAN) events generated when a database node fails. The
+; database must also be configured to post FAN events.
+;oci8.events = Off
+
+; Tuning: This option enables statement caching, and specifies how
+; many statements to cache. Using 0 disables statement caching.
+; https://php.net/oci8.statement-cache-size
+;oci8.statement_cache_size = 20
+
+; Tuning: Enables statement prefetching and sets the default number of
+; rows that will be fetched automatically after statement execution.
+; https://php.net/oci8.default-prefetch
+;oci8.default_prefetch = 100
+
+; Compatibility. Using On means oci_close() will not close
+; oci_connect() and oci_new_connect() connections.
+; https://php.net/oci8.old-oci-close-semantics
+;oci8.old_oci_close_semantics = Off
+
+[PostgreSQL]
 ; Allow or prevent persistent links.
+; https://php.net/pgsql.allow-persistent
 pgsql.allow_persistent = On
 
 ; Detect broken persistent links always with pg_pconnect().
 ; Auto reset feature requires a little overheads.
+; https://php.net/pgsql.auto-reset-persistent
 pgsql.auto_reset_persistent = Off
 
 ; Maximum number of persistent links.  -1 means no limit.
+; https://php.net/pgsql.max-persistent
 pgsql.max_persistent = -1
 
 ; Maximum number of links (persistent+non persistent).  -1 means no limit.
+; https://php.net/pgsql.max-links
 pgsql.max_links = -1
 
 ; Ignore PostgreSQL backends Notice message or not.
 ; Notice message logging require a little overheads.
+; https://php.net/pgsql.ignore-notice
 pgsql.ignore_notice = 0
 
-; Log PostgreSQL backends Noitce message or not.
+; Log PostgreSQL backends Notice message or not.
 ; Unless pgsql.ignore_notice=0, module cannot log notice message.
+; https://php.net/pgsql.log-notice
 pgsql.log_notice = 0
 
-[Sybase]
-; Allow or prevent persistent links.
-sybase.allow_persistent = On
-
-; Maximum number of persistent links.  -1 means no limit.
-sybase.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent).  -1 means no limit.
-sybase.max_links = -1
-
-;sybase.interface_file = "/usr/sybase/interfaces"
-
-; Minimum error severity to display.
-sybase.min_error_severity = 10
-
-; Minimum message severity to display.
-sybase.min_message_severity = 10
-
-; Compatability mode with old versions of PHP 3.0.
-; If on, this will cause PHP to automatically assign types to results according
-; to their Sybase type, instead of treating them all as strings.  This
-; compatability mode will probably not stay around forever, so try applying
-; whatever necessary changes to your code, and turn it off.
-sybase.compatability_mode = Off
-
-[Sybase-CT]
-; Allow or prevent persistent links.
-sybct.allow_persistent = On
-
-; Maximum number of persistent links.  -1 means no limit.
-sybct.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent).  -1 means no limit.
-sybct.max_links = -1
-
-; Minimum server message severity to display.
-sybct.min_server_severity = 10
-
-; Minimum client message severity to display.
-sybct.min_client_severity = 10
-
-[dbx]
-; returned column names can be converted for compatibility reasons
-; possible values for dbx.colnames_case are
-; "unchanged" (default, if not set)
-; "lowercase"
-; "uppercase"
-; the recommended default is either upper- or lowercase, but
-; unchanged is currently set for backwards compatibility
-dbx.colnames_case = "lowercase"
-
 [bcmath]
 ; Number of decimal digits for all bcmath functions.
+; https://php.net/bcmath.scale
 bcmath.scale = 0
 
 [browscap]
+; https://php.net/browscap
 ;browscap = extra/browscap.ini
 
-[Informix]
-; Default host for ifx_connect() (doesn't apply in safe mode).
-ifx.default_host =
-
-; Default user for ifx_connect() (doesn't apply in safe mode).
-ifx.default_user =
-
-; Default password for ifx_connect() (doesn't apply in safe mode).
-ifx.default_password =
-
-; Allow or prevent persistent links.
-ifx.allow_persistent = On
-
-; Maximum number of persistent links.  -1 means no limit.
-ifx.max_persistent = -1
-
-; Maximum number of links (persistent + non-persistent).  -1 means no limit.
-ifx.max_links = -1
-
-; If on, select statements return the contents of a text blob instead of its id.
-ifx.textasvarchar = 0
-
-; If on, select statements return the contents of a byte blob instead of its id.
-ifx.byteasvarchar = 0
-
-; Trailing blanks are stripped from fixed-length char columns.  May help the
-; life of Informix SE users.
-ifx.charasvarchar = 0
-
-; If on, the contents of text and byte blobs are dumped to a file instead of
-; keeping them in memory.
-ifx.blobinfile = 0
-
-; NULL's are returned as empty strings, unless this is set to 1.  In that case,
-; NULL's are returned as string 'NULL'.
-ifx.nullformat = 0
-
 [Session]
 ; Handler used to store/retrieve data.
+; https://php.net/session.save-handler
 session.save_handler = files
 
 ; Argument passed to save_handler.  In the case of files, this is the path
@@ -927,15 +1328,15 @@
 ; where data files are stored. Note: Windows users have to change this
 ; variable in order to use PHP's session functions.
 ;
-; As of PHP 4.0.1, you can define the path as:
+; The path can be defined as:
 ;
 ;     session.save_path = "N;/path"
 ;
 ; where N is an integer.  Instead of storing all the session files in
 ; /path, what this will do is use subdirectories N-levels deep, and
-; store the session data in those directories.  This is useful if you
-; or your OS have problems with lots of files in one directory, and is
-; a more efficient layout for servers that handle lots of sessions.
+; store the session data in those directories.  This is useful if
+; your OS has problems with many files in one directory, and is
+; a more efficient layout for servers that handle many sessions.
 ;
 ; NOTE 1: PHP will not create this directory structure automatically.
 ;         You can use the script in the ext/session dir for that purpose.
@@ -949,44 +1350,89 @@
 ;
 ; where MODE is the octal representation of the mode. Note that this
 ; does not overwrite the process's umask.
+; https://php.net/session.save-path
 ;session.save_path = "/tmp"
 
+; Whether to use strict session mode.
+; Strict session mode does not accept an uninitialized session ID, and
+; regenerates the session ID if the browser sends an uninitialized session ID.
+; Strict mode protects applications from session fixation via a session adoption
+; vulnerability. It is disabled by default for maximum compatibility, but
+; enabling it is encouraged.
+; https://wiki.php.net/rfc/strict_sessions
+session.use_strict_mode = 0
+
 ; Whether to use cookies.
+; https://php.net/session.use-cookies
 session.use_cookies = 1
 
-; This option enables administrators to make their users invulnerable to
-; attacks which involve passing session ids in URLs; defaults to 0.
-; session.use_only_cookies = 1
+; https://php.net/session.cookie-secure
+;session.cookie_secure =
 
+; This option forces PHP to fetch and use a cookie for storing and maintaining
+; the session id. We encourage this operation as it's very helpful in combating
+; session hijacking when not specifying and managing your own session id. It is
+; not the be-all and end-all of session hijacking defense, but it's a good start.
+; https://php.net/session.use-only-cookies
+session.use_only_cookies = 1
+
 ; Name of the session (used as cookie name).
+; https://php.net/session.name
 session.name = PHPSESSID
 
 ; Initialize session on request startup.
+; https://php.net/session.auto-start
 session.auto_start = 0
 
 ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
+; https://php.net/session.cookie-lifetime
 session.cookie_lifetime = 0
 
 ; The path for which the cookie is valid.
+; https://php.net/session.cookie-path
 session.cookie_path = /
 
 ; The domain for which the cookie is valid.
+; https://php.net/session.cookie-domain
 session.cookie_domain =
 
-; Handler used to serialize data.  php is the standard serializer of PHP.
+; Whether or not to add the httpOnly flag to the cookie, which makes it
+; inaccessible to browser scripting languages such as JavaScript.
+; https://php.net/session.cookie-httponly
+session.cookie_httponly =
+
+; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery \
(CSRF/XSRF) +; Current valid values are "Strict", "Lax" or "None". When using "None",
+; make sure to include the quotes, as `none` is interpreted like `false` in ini \
files. +; https://tools.ietf.org/html/draft-west-first-party-cookies-07
+session.cookie_samesite =
+
+; Handler used to serialize data. php is the standard serializer of PHP.
+; https://php.net/session.serialize-handler
 session.serialize_handler = php
 
-; Define the probability that the 'garbage collection' process is started
-; on every session initialization.
-; The probability is calculated by using gc_probability/gc_divisor,
-; e.g. 1/100 means there is a 1% chance that the GC process starts
-; on each request.
-
+; Defines the probability that the 'garbage collection' process is started on every
+; session initialization. The probability is calculated by using \
gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC \
process starts on each request. +; Default Value: 1
+; Development Value: 1
+; Production Value: 1
+; https://php.net/session.gc-probability
 session.gc_probability = 1
-session.gc_divisor     = 1000
 
+; Defines the probability that the 'garbage collection' process is started on every
+; session initialization. The probability is calculated by using \
gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC \
process starts on each request. +; For high volume production servers, using a value \
of 1000 is a more efficient approach. +; Default Value: 100
+; Development Value: 1000
+; Production Value: 1000
+; https://php.net/session.gc-divisor
+session.gc_divisor = 1000
+
 ; After this number of seconds, stored data will be seen as 'garbage' and
 ; cleaned up by the garbage collection process.
+; https://php.net/session.gc-maxlifetime
 session.gc_maxlifetime = 1440
 
 ; NOTE: If you are using the subdirectory option for storing session files
@@ -993,243 +1439,265 @@
 ;       (see session.save_path above), then garbage collection does *not*
 ;       happen automatically.  You will need to do your own garbage
 ;       collection through a shell script, cron entry, or some other method.
-;       For example, the following script would is the equivalent of
-;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
-;          cd /path/to/sessions; find -cmin +24 | xargs rm
+;       For example, the following script is the equivalent of setting
+;       session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
+;          find /path/to/sessions -cmin +24 -type f | xargs rm
 
-; PHP 4.2 and less have an undocumented feature/bug that allows you to
-; to initialize a session variable in the global scope, albeit register_globals
-; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
-; You can disable the feature and the warning separately. At this time,
-; the warning is only displayed, if bug_compat_42 is enabled.
-
-session.bug_compat_42 = 0
-session.bug_compat_warn = 1
-
 ; Check HTTP Referer to invalidate externally stored URLs containing ids.
 ; HTTP_REFERER has to contain this substring for the session to be
 ; considered as valid.
+; https://php.net/session.referer-check
 session.referer_check =
 
-; How many bytes to read from the file.
-session.entropy_length = 0
-
-; Specified here to create the session id.
-session.entropy_file =
-
-;session.entropy_length = 16
-
-;session.entropy_file = /dev/urandom
-
 ; Set to {nocache,private,public,} to determine HTTP caching aspects
 ; or leave this empty to avoid sending anti-caching headers.
+; https://php.net/session.cache-limiter
 session.cache_limiter = nocache
 
 ; Document expires after n minutes.
+; https://php.net/session.cache-expire
 session.cache_expire = 180
 
 ; trans sid support is disabled by default.
-; Use of trans sid may risk your users security.
+; Use of trans sid may risk your users' security.
 ; Use this option with caution.
 ; - User may send URL contains active session ID
 ;   to other person via. email/irc/etc.
 ; - URL that contains active session ID may be stored
-;   in publically accessible computer.
+;   in publicly accessible computer.
 ; - User may access your site with the same session ID
 ;   always using URL stored in browser's history or bookmarks.
+; https://php.net/session.use-trans-sid
 session.use_trans_sid = 0
 
-; Select a hash function
-; 0: MD5   (128 bits)
-; 1: SHA-1 (160 bits)
-session.hash_function = 0
+; Set session ID character length. This value could be between 22 to 256.
+; Shorter length than default is supported only for compatibility reason.
+; Users should use 32 or more chars.
+; https://php.net/session.sid-length
+; Default Value: 32
+; Development Value: 26
+; Production Value: 26
+session.sid_length = 26
 
-; Define how many bits are stored in each character when converting
-; the binary hash data to something readable.
-;
-; 4 bits: 0-9, a-f
-; 5 bits: 0-9, a-v
-; 6 bits: 0-9, a-z, A-Z, "-", ","
-session.hash_bits_per_character = 5
-
 ; The URL rewriter will look for URLs in a defined set of HTML tags.
-; form/fieldset are special; if you include them here, the rewriter will
+; <form> is special; if you include them here, the rewriter will
 ; add a hidden <input> field with the info which is otherwise appended
-; to URLs.  If you want XHTML conformity, remove the form entry.
+; to URLs. <form> tag's action attribute URL will not be modified
+; unless it is specified.
 ; Note that all valid entries require a "=", even if no value follows.
-url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
+; Default Value: "a=href,area=href,frame=src,form="
+; Development Value: "a=href,area=href,frame=src,form="
+; Production Value: "a=href,area=href,frame=src,form="
+; https://php.net/url-rewriter.tags
+session.trans_sid_tags = "a=href,area=href,frame=src,form="
 
-[MSSQL]
-; Allow or prevent persistent links.
-mssql.allow_persistent = On
+; URL rewriter does not rewrite absolute URLs by default.
+; To enable rewrites for absolute paths, target hosts must be specified
+; at RUNTIME. i.e. use ini_set()
+; <form> tags is special. PHP will check action attribute's URL regardless
+; of session.trans_sid_tags setting.
+; If no host is defined, HTTP_HOST will be used for allowed host.
+; Example value: php.net,www.php.net,wiki.php.net
+; Use "," for multiple hosts. No spaces are allowed.
+; Default Value: ""
+; Development Value: ""
+; Production Value: ""
+;session.trans_sid_hosts=""
 
-; Maximum number of persistent links.  -1 means no limit.
-mssql.max_persistent = -1
+; Define how many bits are stored in each character when converting
+; the binary hash data to something readable.
+; Possible values:
+;   4  (4 bits: 0-9, a-f)
+;   5  (5 bits: 0-9, a-v)
+;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")
+; Default Value: 4
+; Development Value: 5
+; Production Value: 5
+; https://php.net/session.hash-bits-per-character
+session.sid_bits_per_character = 5
 
-; Maximum number of links (persistent+non persistent).  -1 means no limit.
-mssql.max_links = -1
+; Enable upload progress tracking in $_SESSION
+; Default Value: On
+; Development Value: On
+; Production Value: On
+; https://php.net/session.upload-progress.enabled
+;session.upload_progress.enabled = On
 
-; Minimum error severity to display.
-mssql.min_error_severity = 10
+; Cleanup the progress information as soon as all POST data has been read
+; (i.e. upload completed).
+; Default Value: On
+; Development Value: On
+; Production Value: On
+; https://php.net/session.upload-progress.cleanup
+;session.upload_progress.cleanup = On
 
-; Minimum message severity to display.
-mssql.min_message_severity = 10
+; A prefix used for the upload progress key in $_SESSION
+; Default Value: "upload_progress_"
+; Development Value: "upload_progress_"
+; Production Value: "upload_progress_"
+; https://php.net/session.upload-progress.prefix
+;session.upload_progress.prefix = "upload_progress_"
 
-; Compatability mode with old versions of PHP 3.0.
-mssql.compatability_mode = Off
+; The index name (concatenated with the prefix) in $_SESSION
+; containing the upload progress information
+; Default Value: "PHP_SESSION_UPLOAD_PROGRESS"
+; Development Value: "PHP_SESSION_UPLOAD_PROGRESS"
+; Production Value: "PHP_SESSION_UPLOAD_PROGRESS"
+; https://php.net/session.upload-progress.name
+;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
 
-; Connect timeout
-;mssql.connect_timeout = 5
+; How frequently the upload progress should be updated.
+; Given either in percentages (per-file), or in bytes
+; Default Value: "1%"
+; Development Value: "1%"
+; Production Value: "1%"
+; https://php.net/session.upload-progress.freq
+;session.upload_progress.freq =  "1%"
 
-; Query timeout
-;mssql.timeout = 60
+; The minimum delay between updates, in seconds
+; Default Value: 1
+; Development Value: 1
+; Production Value: 1
+; https://php.net/session.upload-progress.min-freq
+;session.upload_progress.min_freq = "1"
 
-; Valid range 0 - 2147483647.  Default = 4096.
-;mssql.textlimit = 4096
+; Only write session data when session data is changed. Enabled by default.
+; https://php.net/session.lazy-write
+;session.lazy_write = On
 
-; Valid range 0 - 2147483647.  Default = 4096.
-;mssql.textsize = 4096
+[Assertion]
+; Switch whether to compile assertions at all (to have no overhead at run-time)
+; -1: Do not compile at all
+;  0: Jump over assertion at run-time
+;  1: Execute assertions
+; Changing from or to a negative value is only possible in php.ini! (For turning \
assertions on and off at run-time, see assert.active, when zend.assertions = 1) +; \
Default Value: 1 +; Development Value: 1
+; Production Value: -1
+; https://php.net/zend.assertions
+zend.assertions = -1
 
-; Limits the number of records in each batch.  0 = all records in one batch.
-;mssql.batchsize = 0
-
-; Specify how datetime and datetim4 columns are returned
-; On => Returns data converted to SQL server settings
-; Off => Returns values as YYYY-MM-DD hh:mm:ss
-;mssql.datetimeconvert = On
-
-; Use NT authentication when connecting to the server
-mssql.secure_connection = Off
-
-; Specify max number of processes. Default = 25
-;mssql.max_procs = 25
-
-[Assertion]
 ; Assert(expr); active by default.
+; https://php.net/assert.active
 ;assert.active = On
 
-; Issue a PHP warning for each failed assertion.
+; Throw an AssertionError on failed assertions
+; https://php.net/assert.exception
+;assert.exception = On
+
+; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if \
active) +; https://php.net/assert.warning
 ;assert.warning = On
 
 ; Don't bail out by default.
+; https://php.net/assert.bail
 ;assert.bail = Off
 
 ; User-function to be called if an assertion fails.
+; https://php.net/assert.callback
 ;assert.callback = 0
 
-; Eval the expression with current error_reporting().  Set to true if you want
-; error_reporting(0) around the eval().
-;assert.quiet_eval = 0
-
-[Ingres II]
-; Allow or prevent persistent links.
-ingres.allow_persistent = On
-
-; Maximum number of persistent links.  -1 means no limit.
-ingres.max_persistent = -1
-
-; Maximum number of links, including persistents.  -1 means no limit.
-ingres.max_links = -1
-
-; Default database (format: [node_id::]dbname[/srv_class]).
-ingres.default_database =
-
-; Default user.
-ingres.default_user =
-
-; Default password.
-ingres.default_password =
-
-[Verisign Payflow Pro]
-; Default Payflow Pro server.
-pfpro.defaulthost = "test-payflow.verisign.com"
-
-; Default port to connect to.
-pfpro.defaultport = 443
-
-; Default timeout in seconds.
-pfpro.defaulttimeout = 30
-
-; Default proxy IP address (if required).
-;pfpro.proxyaddress =
-
-; Default proxy port.
-;pfpro.proxyport =
-
-; Default proxy logon.
-;pfpro.proxylogon =
-
-; Default proxy password.
-;pfpro.proxypassword =
-
-[com]
+[COM]
 ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs
+; https://php.net/com.typelib-file
 ;com.typelib_file =
+
 ; allow Distributed-COM calls
+; https://php.net/com.allow-dcom
 ;com.allow_dcom = true
-; autoregister constants of a components typlib on com_load()
+
+; autoregister constants of a component's typelib on com_load()
+; https://php.net/com.autoregister-typelib
 ;com.autoregister_typelib = true
+
 ; register constants casesensitive
+; https://php.net/com.autoregister-casesensitive
 ;com.autoregister_casesensitive = false
-; show warnings on duplicate constat registrations
+
+; show warnings on duplicate constant registrations
+; https://php.net/com.autoregister-verbose
 ;com.autoregister_verbose = true
 
+; The default character set code-page to use when passing strings to and from COM \
objects. +; Default: system ANSI code page
+;com.code_page=
+
+; The version of the .NET framework to use. The value of the setting are the first \
three parts +; of the framework's version number, separated by dots, and prefixed \
with "v", e.g. "v4.0.30319". +;com.dotnet_version=
+
 [mbstring]
 ; language for internal character representation.
-mbstring.language = UTF-8
+; This affects mb_send_mail() and mbstring.detect_order.
+; https://php.net/mbstring.language
+;mbstring.language = Japanese
 
+; Use of this INI entry is deprecated, use global internal_encoding instead.
 ; internal/script encoding.
-; Some encoding cannot work as internal encoding.
-; (e.g. SJIS, BIG5, ISO-2022-*)
-mbstring.internal_encoding = UTF-8
+; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
+; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.
+; The precedence is: default_charset < internal_encoding < iconv.internal_encoding
+;mbstring.internal_encoding =
 
+; Use of this INI entry is deprecated, use global input_encoding instead.
 ; http input encoding.
-mbstring.http_input = UTF-8
+; mbstring.encoding_translation = On is needed to use this setting.
+; If empty, default_charset or input_encoding or mbstring.input is used.
+; The precedence is: default_charset < input_encoding < mbstring.http_input
+; https://php.net/mbstring.http-input
+;mbstring.http_input =
 
-; http output encoding. mb_output_handler must be
-; registered as output buffer to function
-;mbstring.http_output = SJIS
+; Use of this INI entry is deprecated, use global output_encoding instead.
+; http output encoding.
+; mb_output_handler must be registered as output buffer to function.
+; If empty, default_charset or output_encoding or mbstring.http_output is used.
+; The precedence is: default_charset < output_encoding < mbstring.http_output
+; To use an output encoding conversion, mbstring's output handler must be set
+; otherwise output encoding conversion cannot be performed.
+; https://php.net/mbstring.http-output
+;mbstring.http_output =
 
-; enable automatic encoding translation accoding to
+; enable automatic encoding translation according to
 ; mbstring.internal_encoding setting. Input chars are
 ; converted to internal encoding by setting this to On.
 ; Note: Do _not_ use automatic encoding translation for
 ;       portable libs/applications.
-mbstring.encoding_translation = Off
+; https://php.net/mbstring.encoding-translation
+;mbstring.encoding_translation = Off
 
 ; automatic encoding detection order.
-; auto means
-mbstring.detect_order = UTF-8
+; "auto" detect order is changed according to mbstring.language
+; https://php.net/mbstring.detect-order
+;mbstring.detect_order = auto
 
 ; substitute_character used when character cannot be converted
 ; one from another
-;mbstring.substitute_character = none;
+; https://php.net/mbstring.substitute-character
+;mbstring.substitute_character = none
 
-; overload(replace) single byte functions by mbstring functions.
-; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
-; etc. Possible values are 0,1,2,4 or combination of them.
-; For example, 7 for overload everything.
-; 0: No overload
-; 1: Overload mail() function
-; 2: Overload str*() functions
-; 4: Overload ereg*() functions
-;mbstring.func_overload = 0
+; Enable strict encoding detection.
+;mbstring.strict_detection = Off
 
-[FrontBase]
-;fbsql.allow_persistent = On
-;fbsql.autocommit = On
-;fbsql.default_database =
-;fbsql.default_database_password =
-;fbsql.default_host =
-;fbsql.default_password =
-;fbsql.default_user = "_SYSTEM"
-;fbsql.generate_warnings = Off
-;fbsql.max_connections = 128
-;fbsql.max_links = 128
-;fbsql.max_persistent = -1
-;fbsql.max_results = 128
-;fbsql.batchSize = 1000
+; This directive specifies the regex pattern of content types for which \
mb_output_handler() +; is activated.
+; Default: mbstring.http_output_conv_mimetypes=^(text/|application/xhtml\+xml)
+;mbstring.http_output_conv_mimetypes=
 
+; This directive specifies maximum stack depth for mbstring regular expressions. It \
is similar +; to the pcre.recursion_limit for PCRE.
+;mbstring.regex_stack_limit=100000
+
+; This directive specifies maximum retry count for mbstring regular expressions. It \
is similar +; to the pcre.backtrack_limit for PCRE.
+;mbstring.regex_retry_limit=1000000
+
+[gd]
+; Tell the jpeg decode to ignore warnings and try to create
+; a gd image. The warning will then be displayed as notices
+; disabled by default
+; https://php.net/gd.jpeg-ignore-warning
+;gd.jpeg_ignore_warning = 1
+
 [exif]
 ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
 ; With mbstring support this will automatically be converted into the encoding
@@ -1236,31 +1704,246 @@
 ; given by corresponding encode setting. When empty mbstring.internal_encoding
 ; is used. For the decode settings you can distinguish between motorola and
 ; intel byte order. A decode setting cannot be empty.
+; https://php.net/exif.encode-unicode
 ;exif.encode_unicode = ISO-8859-15
+
+; https://php.net/exif.decode-unicode-motorola
 ;exif.decode_unicode_motorola = UCS-2BE
+
+; https://php.net/exif.decode-unicode-intel
 ;exif.decode_unicode_intel    = UCS-2LE
+
+; https://php.net/exif.encode-jis
 ;exif.encode_jis =
+
+; https://php.net/exif.decode-jis-motorola
 ;exif.decode_jis_motorola = JIS
+
+; https://php.net/exif.decode-jis-intel
 ;exif.decode_jis_intel    = JIS
 
 [Tidy]
 ; The path to a default tidy configuration file to use when using tidy
+; https://php.net/tidy.default-config
 ;tidy.default_config = /usr/local/lib/php/default.tcfg
 
 ; Should tidy clean and repair output automatically?
 ; WARNING: Do not use this option if you are generating non-html content
 ; such as dynamic images
+; https://php.net/tidy.clean-output
 tidy.clean_output = Off
 
 [soap]
 ; Enables or disables WSDL caching feature.
+; https://php.net/soap.wsdl-cache-enabled
 soap.wsdl_cache_enabled=1
+
 ; Sets the directory name where SOAP extension will put cache files.
+; https://php.net/soap.wsdl-cache-dir
 soap.wsdl_cache_dir="/tmp"
-; (time to live) Sets the number of second while cached file will be used 
+
+; (time to live) Sets the number of second while cached file will be used
 ; instead of original one.
+; https://php.net/soap.wsdl-cache-ttl
 soap.wsdl_cache_ttl=86400
 
-; Local Variables:
-; tab-width: 4
-; End:
+; Sets the size of the cache limit. (Max. number of WSDL files to cache)
+soap.wsdl_cache_limit = 5
+
+[sysvshm]
+; A default size of the shared memory segment
+;sysvshm.init_mem = 10000
+
+[ldap]
+; Sets the maximum number of open links or -1 for unlimited.
+ldap.max_links = -1
+
+[dba]
+;dba.default_handler=
+
+[opcache]
+; Determines if Zend OPCache is enabled
+;opcache.enable=1
+
+; Determines if Zend OPCache is enabled for the CLI version of PHP
+;opcache.enable_cli=0
+
+; The OPcache shared memory storage size.
+;opcache.memory_consumption=128
+
+; The amount of memory for interned strings in Mbytes.
+;opcache.interned_strings_buffer=8
+
+; The maximum number of keys (scripts) in the OPcache hash table.
+; Only numbers between 200 and 1000000 are allowed.
+;opcache.max_accelerated_files=10000
+
+; The maximum percentage of "wasted" memory until a restart is scheduled.
+;opcache.max_wasted_percentage=5
+
+; When this directive is enabled, the OPcache appends the current working
+; directory to the script key, thus eliminating possible collisions between
+; files with the same name (basename). Disabling the directive improves
+; performance, but may break existing applications.
+;opcache.use_cwd=1
+
+; When disabled, you must reset the OPcache manually or restart the
+; webserver for changes to the filesystem to take effect.
+;opcache.validate_timestamps=1
+
+; How often (in seconds) to check file timestamps for changes to the shared
+; memory storage allocation. ("1" means validate once per second, but only
+; once per request. "0" means always validate)
+;opcache.revalidate_freq=2
+
+; Enables or disables file search in include_path optimization
+;opcache.revalidate_path=0
+
+; If disabled, all PHPDoc comments are dropped from the code to reduce the
+; size of the optimized code.
+;opcache.save_comments=1
+
+; If enabled, compilation warnings (including notices and deprecations) will
+; be recorded and replayed each time a file is included. Otherwise, compilation
+; warnings will only be emitted when the file is first cached.
+;opcache.record_warnings=0
+
+; Allow file existence override (file_exists, etc.) performance feature.
+;opcache.enable_file_override=0
+
+; A bitmask, where each bit enables or disables the appropriate OPcache
+; passes
+;opcache.optimization_level=0x7FFFBFFF
+
+;opcache.dups_fix=0
+
+; The location of the OPcache blacklist file (wildcards allowed).
+; Each OPcache blacklist file is a text file that holds the names of files
+; that should not be accelerated. The file format is to add each filename
+; to a new line. The filename may be a full path or just a file prefix
+; (i.e., /var/www/x  blacklists all the files and directories in /var/www
+; that start with 'x'). Line starting with a ; are ignored (comments).
+;opcache.blacklist_filename=
+
+; Allows exclusion of large files from being cached. By default all files
+; are cached.
+;opcache.max_file_size=0
+
+; Check the cache checksum each N requests.
+; The default value of "0" means that the checks are disabled.
+;opcache.consistency_checks=0
+
+; How long to wait (in seconds) for a scheduled restart to begin if the cache
+; is not being accessed.
+;opcache.force_restart_timeout=180
+
+; OPcache error_log file name. Empty string assumes "stderr".
+;opcache.error_log=
+
+; All OPcache errors go to the Web server log.
+; By default, only fatal errors (level 0) or errors (level 1) are logged.
+; You can also enable warnings (level 2), info messages (level 3) or
+; debug messages (level 4).
+;opcache.log_verbosity_level=1
+
+; Preferred Shared Memory back-end. Leave empty and let the system decide.
+;opcache.preferred_memory_model=
+
+; Protect the shared memory from unexpected writing during script execution.
+; Useful for internal debugging only.
+;opcache.protect_memory=0
+
+; Allows calling OPcache API functions only from PHP scripts which path is
+; started from specified string. The default "" means no restriction
+;opcache.restrict_api=
+
+; Mapping base of shared memory segments (for Windows only). All the PHP
+; processes have to map shared memory into the same address space. This
+; directive allows to manually fix the "Unable to reattach to base address"
+; errors.
+;opcache.mmap_base=
+
+; Facilitates multiple OPcache instances per user (for Windows only). All PHP
+; processes with the same cache ID and user share an OPcache instance.
+;opcache.cache_id=
+
+; Enables and sets the second level cache directory.
+; It should improve performance when SHM memory is full, at server restart or
+; SHM reset. The default "" disables file based caching.
+;opcache.file_cache=
+
+; Enables or disables opcode caching in shared memory.
+;opcache.file_cache_only=0
+
+; Enables or disables checksum validation when script loaded from file cache.
+;opcache.file_cache_consistency_checks=1
+
+; Implies opcache.file_cache_only=1 for a certain process that failed to
+; reattach to the shared memory (for Windows only). Explicitly enabled file
+; cache is required.
+;opcache.file_cache_fallback=1
+
+; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
+; This should improve performance, but requires appropriate OS configuration.
+;opcache.huge_code_pages=1
+
+; Validate cached file permissions.
+;opcache.validate_permission=0
+
+; Prevent name collisions in chroot'ed environment.
+;opcache.validate_root=0
+
+; If specified, it produces opcode dumps for debugging different stages of
+; optimizations.
+;opcache.opt_debug_level=0
+
+; Specifies a PHP script that is going to be compiled and executed at server
+; start-up.
+; https://php.net/opcache.preload
+;opcache.preload=
+
+; Preloading code as root is not allowed for security reasons. This directive
+; facilitates to let the preloading to be run as another user.
+; https://php.net/opcache.preload_user
+;opcache.preload_user=
+
+; Prevents caching files that are less than this number of seconds old. It
+; protects from caching of incompletely updated files. In case all file updates
+; on your site are atomic, you may increase performance by setting it to "0".
+;opcache.file_update_protection=2
+
+; Absolute path used to store shared lockfiles (for *nix only).
+;opcache.lockfile_path=/tmp
+
+[curl]
+; A default value for the CURLOPT_CAINFO option. This is required to be an
+; absolute path.
+;curl.cainfo =
+
+[openssl]
+; The location of a Certificate Authority (CA) file on the local filesystem
+; to use when verifying the identity of SSL/TLS peers. Most users should
+; not specify a value for this directive as PHP will attempt to use the
+; OS-managed cert stores in its absence. If specified, this value may still
+; be overridden on a per-stream basis via the "cafile" SSL stream context
+; option.
+;openssl.cafile=
+
+; If openssl.cafile is not specified or if the CA file is not found, the
+; directory pointed to by openssl.capath is searched for a suitable
+; certificate. This value must be a correctly hashed certificate directory.
+; Most users should not specify a value for this directive as PHP will
+; attempt to use the OS-managed cert stores in its absence. If specified,
+; this value may still be overridden on a per-stream basis via the "capath"
+; SSL stream context option.
+;openssl.capath=
+
+[ffi]
+; FFI API restriction. Possible values:
+; "preload" - enabled in CLI scripts and preloaded files (default)
+; "false"   - always disabled
+; "true"    - always enabled
+;ffi.enable=preload
+
+; List of headers files to preload, wildcard patterns allowed.
+;ffi.preload=

Copied: trunk/MgDev/cmake/modules/FindUUID.cmake (from rev 9968, \
sandbox/jng/vanilla_swig/cmake/modules/FindUUID.cmake) \
                ===================================================================
--- trunk/MgDev/cmake/modules/FindUUID.cmake	                        (rev 0)
+++ trunk/MgDev/cmake/modules/FindUUID.cmake	2022-10-10 11:14:40 UTC (rev 9977)
@@ -0,0 +1,71 @@
+# - Find UUID
+# Find the native UUID includes and library
+# This module defines
+#  UUID_INCLUDE_DIR, where to find jpeglib.h, etc.
+#  UUID_LIBRARIES, the libraries needed to use UUID.
+#  UUID_FOUND, If false, do not try to use UUID.
+# also defined, but not for general use are
+#  UUID_LIBRARY, where to find the UUID library.
+#
+#  Copyright (c) 2006-2011 Mathieu Malaterre <mathieu.malaterre@gmail.com>
+#
+#  Redistribution and use is allowed according to the terms of the New
+#  BSD license.
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+# On MacOSX we have:
+# $ nm -g /usr/lib/libSystem.dylib | grep uuid_generate
+# 000b3aeb T _uuid_generate
+# 0003e67e T _uuid_generate_random
+# 000b37a1 T _uuid_generate_time
+if(APPLE)
+  set(UUID_LIBRARY_VAR System)
+else()
+  # Linux type:
+  set(UUID_LIBRARY_VAR uuid)
+endif()
+
+find_library(UUID_LIBRARY
+  NAMES ${UUID_LIBRARY_VAR}
+  PATHS /lib /usr/lib /usr/local/lib
+  )
+
+# Must be *after* the lib itself
+set(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK})
+set(CMAKE_FIND_FRAMEWORK NEVER)
+
+find_path(UUID_INCLUDE_DIR uuid/uuid.h
+/usr/local/include
+/usr/include
+)
+
+if (UUID_LIBRARY AND UUID_INCLUDE_DIR)
+  set(UUID_LIBRARIES ${UUID_LIBRARY})
+  set(UUID_FOUND "YES")
+else ()
+  set(UUID_FOUND "NO")
+endif ()
+
+
+if (UUID_FOUND)
+   if (NOT UUID_FIND_QUIETLY)
+      message(STATUS "Found UUID: ${UUID_LIBRARIES}")
+   endif ()
+else ()
+   if (UUID_FIND_REQUIRED)
+      message( "library: ${UUID_LIBRARY}" )
+      message( "include: ${UUID_INCLUDE_DIR}" )
+      message(FATAL_ERROR "Could not find UUID library")
+   endif ()
+endif ()
+
+# Deprecated declarations.
+#set (NATIVE_UUID_INCLUDE_PATH ${UUID_INCLUDE_DIR} )
+#get_filename_component (NATIVE_UUID_LIB_PATH ${UUID_LIBRARY} PATH)
+
+mark_as_advanced(
+  UUID_LIBRARY
+  UUID_INCLUDE_DIR
+  )
+set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
\ No newline at end of file

Modified: trunk/MgDev/cmake_bootstrap.sh
===================================================================
--- trunk/MgDev/cmake_bootstrap.sh	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/cmake_bootstrap.sh	2022-10-10 11:14:40 UTC (rev 9977)
@@ -141,6 +141,33 @@
 echo "INTERNAL_GEOS      = $INTERNAL_GEOS"
 echo "COMMON_SUBSET_ONLY = $COMMON_SUBSET_ONLY"
 
+# Acquire SWIG
+which swig
+# which exits with 0 if swig is found, 1 otherwise
+have_swig=$?
+if [ "$have_swig" != "0" ]; then
+    echo "SWIG not found. Acquiring and building SWIG from source"
+    # If this dir exists, it's a no-op
+    mkdir -p /tmp/download
+    cd /tmp/download || exit
+    if [ ! -f /tmp/download/master.zip ]; then
+        # TODO: Until SWIG 4.1 is actually released, should fix the source archive \
to a particular commit (if it's possible) +        wget \
https://github.com/swig/swig/archive/refs/heads/master.zip +    fi
+    unzip -o master.zip
+    cd /tmp/download/swig-master/ || exit
+    ./autogen.sh
+    check_build
+    ./configure
+    check_build
+    make
+    check_build
+    make install
+    check_build
+else
+    echo "SWIG already installed"
+fi
+
 if [ "$USE_CCACHE" = "1" ]; then
     export CC="ccache gcc"
     export CXX="ccache g++"
@@ -353,7 +380,7 @@
 echo "Has DBXML Library: $HAS_DBXML_LIB"
 echo "Has XQilla Library: $HAS_XQILLA_LIB"
 
-if [ "$COMMON_SUBSET_ONLY" == "1" ]; then
+if [ "$COMMON_SUBSET_ONLY" = "1" ]; then
     cp -Rf "${SOURCE_DIR}/Oem/dbxml" "${OEM_WORK_DIR}/dbxml"
     cd "${OEM_WORK_DIR}/dbxml" || exit
     # The buildall.sh script supports a --build-one flag so we can only build xerces \
and skip everything else

Modified: trunk/MgDev/cmake_linuxapt.sh
===================================================================
--- trunk/MgDev/cmake_linuxapt.sh	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/cmake_linuxapt.sh	2022-10-10 11:14:40 UTC (rev 9977)
@@ -119,10 +119,10 @@
     echo "Created LinuxApt working dir at: $LINUXAPT_WORK_DIR"
 fi
 
-PHP_VER=5.6.40
-HTTPD_VER=2.4.37
+PHP_VER=8.1.9
+HTTPD_VER=2.4.52
 TC_VER=1.2.48
-APR_VER=1.6.5
+APR_VER=1.7.0
 APR_UTIL_VER=1.6.1
 
 HTTPD_PORT=8008
@@ -162,15 +162,17 @@
     cd "$SOURCE_DIR/Oem/LinuxApt" || exit
     echo "Extracting httpd tarballs"
     tar -jxf httpd-${HTTPD_VER}.tar.bz2 -C "${LA_WORKDIR}"
-    #tar -jxf httpd-${HTTPD_VER}-deps.tar.bz2 -C "${LA_WORKDIR}"
+    check_build
     if [ ! -d "${LA_WORKDIR}/httpd-$HTTPD_VER/srclib/apr" ]; then
         echo "Extracting apr tarball"
         tar -jxf apr-$APR_VER.tar.bz2 -C "${LA_WORKDIR}"
+        check_build
         mv "${LA_WORKDIR}/apr-$APR_VER" "${LA_WORKDIR}/httpd-$HTTPD_VER/srclib/apr"
     fi
     if [ ! -d "${LA_WORKDIR}/httpd-$HTTPD_VER/srclib/aprutil" ]; then
         echo "Extracting apr-util tarball"
         tar -jxf apr-util-$APR_UTIL_VER.tar.bz2 -C "${LA_WORKDIR}"
+        check_build
         mv "${LA_WORKDIR}/apr-util-$APR_UTIL_VER" \
"${LA_WORKDIR}/httpd-$HTTPD_VER/srclib/apr-util"  fi
     cd "${HTTPD_WORKDIR}" || exit
@@ -199,12 +201,12 @@
     cd "$SOURCE_DIR/Oem/LinuxApt" || exit
     echo "Extracting PHP tarball"
     tar -jxf php-${PHP_VER}.tar.bz2 -C "${LA_WORKDIR}"
-
+    check_build
     echo "Configuring PHP"
     cd "${PHP_WORKDIR}" || exit
     # TODO: Patch out the use of meta_ccld so ccache can work: \
https://bugs.php.net/bug.php?id=75940  # if/when we finally move to PHP 7, this patch \
                is already applied
-    ./configure --prefix="${MG_INSTALL_WEB_PREFIX}/php" \
--with-apxs2="${MG_INSTALL_WEB_PREFIX}/apache2/bin/apxs" --with-openssl --with-curl \
--enable-xml --enable-wddx --enable-shared --with-zlib-dir="$PHP_ZLIB_DIR" \
--enable-zip --enable-mbstring=all --with-xsl=/usr/lib --with-gd \
--with-png-dir="$PHP_PNG_DIR" --with-jpeg-dir="$PHP_JPEG_DIR" \
--with-freetype-dir="$PHP_FREETYPE_DIR" 2>&1 | tee \
"$LINUXAPT_WORK_DIR/configure_php.log" +    ./configure \
--prefix="${MG_INSTALL_WEB_PREFIX}/php" \
--with-apxs2="${MG_INSTALL_WEB_PREFIX}/apache2/bin/apxs" --with-openssl \
--enable-mbstring --enable-gd --with-jpeg --with-libxml 2>&1 | tee \
"$LINUXAPT_WORK_DIR/configure_php.log"  check_build
     echo "Building PHP. Please wait"
     make 2>&1 | tee "$LINUXAPT_WORK_DIR/make_php.log"
@@ -220,6 +222,7 @@
     cd "$SOURCE_DIR/Oem/LinuxApt" || exit
     echo "Extracting Tomcat Connector tarball"
     tar -zxf tomcat-connectors-${TC_VER}-src.tar.gz -C "${LA_WORKDIR}"
+    check_build
     cd "${TC_WORKDIR}/native" || exit
     echo "Configuring Tomcat Connector"
     ./configure --with-apxs="${MG_INSTALL_WEB_PREFIX}/apache2/bin/apxs" 2>&1 | tee \
"$LINUXAPT_WORK_DIR/configure_tc.log"

Copied: trunk/MgDev/csmap_excludes.txt (from rev 9968, \
sandbox/jng/vanilla_swig/csmap_excludes.txt) \
                ===================================================================
--- trunk/MgDev/csmap_excludes.txt	                        (rev 0)
+++ trunk/MgDev/csmap_excludes.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -0,0 +1,20 @@
+coordsys.asc
+datums.asc
+ellipsoid.asc
+mreg.asc
+category.asc
+cs_comp.c
+cs_dictdiff.c
+OSTN02.txt
+OSTN97.txt
+TKY2JGD.par
+JGD2011V100.par
+.MRT
+compiler.
+cs-map.
+Usa\Geoid96
+Usa\Geoid99
+Usa\Geoid03
+Usa\NSRS2007
+Usa\NSRS2011
+WW15MGH.GRD
\ No newline at end of file

Copied: trunk/MgDev/debug_excludes.txt (from rev 9968, \
sandbox/jng/vanilla_swig/debug_excludes.txt) \
                ===================================================================
Modified: trunk/MgDev/prepare_webtier_components.bat
===================================================================
--- trunk/MgDev/prepare_webtier_components.bat	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/prepare_webtier_components.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -1,7 +1,6 @@
 @echo off
 SET SEVENZ=%CD%\BuildTools\WebTools\7-zip\7z.exe
 SET HTTPD_VER=2.4.52
-SET PHP_VER=5.6.40
 pushd Oem\LinuxApt
 :check_httpd
 if not exist httpd-%HTTPD_VER% goto unpack_httpd
@@ -16,42 +15,9 @@
 if not exist httpd-%HTTPD_VER%\include\http_core.h goto unpack_httpd
 if not exist httpd-%HTTPD_VER%\include\apr_strings.h goto unpack_httpd
 if not exist httpd-%HTTPD_VER%\include\apr_tables.h goto unpack_httpd
-goto check_php
+goto done
 :unpack_httpd
 if not exist httpd-%HTTPD_VER%.tar "%SEVENZ%" x httpd-%HTTPD_VER%.tar.bz2
 "%SEVENZ%" x -y httpd-%HTTPD_VER%.tar
-:check_php
-rem *sigh* there is not a 100% reliable way to nuke a directory in windows from the \
                cmd line to make way 
-rem for a new MapGuide build, meaning we could have empty PHP directories from a \
                previous build that would 
-rem pass the previous iteration of this check to determine if PHP needs to be \
                unpacked. So check for the specific
-rem headers that we know we are going to be using and if a single one of these \
                headers cannot be found then
-rem do the archive unpacking
-if not exist php-%PHP_VER% goto unpack_php
-if not exist php-%PHP_VER%\ext goto unpack_php
-if not exist php-%PHP_VER%\ext\standard goto unpack_php
-if not exist php-%PHP_VER%\ext\standard\info.h goto unpack_php
-if not exist php-%PHP_VER%\main goto unpack_php
-if not exist php-%PHP_VER%\main\php.h goto unpack_php
-if not exist php-%PHP_VER%\main\php_ini.h goto unpack_php
-if not exist php-%PHP_VER%\main\config.w32.h goto unpack_php
-if not exist php-%PHP_VER%\main\win95nt.h goto unpack_php
-if not exist php-%PHP_VER%\TSRM goto unpack_php
-if not exist php-%PHP_VER%\TSRM\readdir.h goto unpack_php
-if not exist php-%PHP_VER%\Zend goto unpack_php
-if not exist php-%PHP_VER%\Zend\zend.h goto unpack_php
-if not exist php-%PHP_VER%\Zend\zend_exceptions.h goto unpack_php
-if not exist php-%PHP_VER%\Zend\zend_API.h goto unpack_php
-goto patch_php_headers
-:unpack_php
-if not exist php-%PHP_VER%.tar "%SEVENZ%" x php-%PHP_VER%.tar.bz2
-"%SEVENZ%" x -y php-%PHP_VER%.tar
-:patch_php_headers
-echo Patching PHP headers
-copy /Y ..\php\main\*.h php-%PHP_VER%\main\
-copy /Y ..\php\TSRM\*.h php-%PHP_VER%\TSRM\
-copy /Y ..\php\Zend\*.h php-%PHP_VER%\Zend\
-:patch_httpd_headers
-echo Patching HTTPD headers
-copy /Y ..\httpd\include\*.h httpd-%HTTPD_VER%\include\
 :done
 popd

Copied: trunk/MgDev/release_excludes.txt (from rev 9968, \
sandbox/jng/vanilla_swig/release_excludes.txt) \
                ===================================================================
--- trunk/MgDev/release_excludes.txt	                        (rev 0)
+++ trunk/MgDev/release_excludes.txt	2022-10-10 11:14:40 UTC (rev 9977)
@@ -0,0 +1,5 @@
+.pdb
+.exp
+.lib
+.iobj
+.ipdb
\ No newline at end of file

Modified: trunk/MgDev/setenvironment64.bat
===================================================================
--- trunk/MgDev/setenvironment64.bat	2022-10-10 10:58:26 UTC (rev 9976)
+++ trunk/MgDev/setenvironment64.bat	2022-10-10 11:14:40 UTC (rev 9977)
@@ -15,6 +15,7 @@
 SET CONFIGURATION=unknown
 SET PLATFORM=unknown
 SET PLATFORM_CLR=unknown
+SET PLATFORM_WIN=unknown
 
 SET PCONF=release
 if not "%1" == "" set PCONF=%1
@@ -24,6 +25,7 @@
 SET CONFIGURATION=Debug
 SET PLATFORM=x64
 SET PLATFORM_CLR=x64
+SET PLATFORM_WIN=Win64
 )
 
 IF "%PCONF%"=="release" (
@@ -31,6 +33,7 @@
 SET CONFIGURATION=Release
 SET PLATFORM=x64
 SET PLATFORM_CLR=x64
+SET PLATFORM_WIN=Win64
 )
 
 if "%TYPEBUILD%"=="unknown" (
@@ -90,6 +93,7 @@
 IF "%GNUWIN32%" == "" SET GNUWIN32=C:\Program Files (x86)\GnuWin32\bin
 IF "%SEVENZ%" == "" SET SEVENZ=%MG_DEV%\BuildTools\WebTools\7-Zip
 IF "%ANT_HOME%" == "" SET ANT_HOME=C:\apache-ant
+IF "%SWIG_DIR%" == "" SET SWIG_DIR=C:\swig\bin
 
 SET PATH=%PATH%;%DOXYGEN%;%GNUWIN32%;%SEVENZ%;%ANT_HOME%\bin
 rem ==================================================
@@ -101,13 +105,13 @@
 call prepare_webtier_components.bat
 
 rem Set the env vars that VS will reference
-SET PHP_SRC=%MG_OEM%\LinuxApt\php-%PHP_VER%
-SET PHP_LIB=%MG_OEM%\php\x64\Release_TS
-SET HTTPD_SRC=%MG_OEM%\LinuxApt\httpd-%HTTPD_VER%
+SET PHP_SRC=%MG_OEM%\php\include
+SET PHP_LIB=%MG_OEM%\php\lib
+SET HTTPD_SRC=%MG_OEM%\httpd
 SET HTTPD_LIB=%MG_OEM%\httpd\lib64
 rem Sanity checks
 if not exist "%PHP_SRC%" echo Environment variable PHP_SRC does not point to a valid \
directory (%PHP_SRC%). Please edit setenvironment64.bat to ensure PHP_SRC points to a \
                valid directory
-if not exist "%PHP_LIB%\php5ts.lib" echo Environment variable PHP_LIB does not point \
to a valid directory (%PHP_LIB%). Could not find php5ts.lib in this directory. Please \
edit setenvironment64.bat to ensure PHP_LIB points to a valid directory +if not exist \
"%PHP_LIB%\php8.lib" echo Environment variable PHP_LIB does not point to a valid \
directory (%PHP_LIB%). Could not find php5ts.lib in this directory. Please edit \
setenvironment64.bat to ensure PHP_LIB points to a valid directory  if not exist \
"%HTTPD_SRC%" echo Environment variable HTTPD_SRC does not point to a valid directory \
(%HTTPD_SRC%). Please edit setenvironment64.bat to ensure HTTPD_SRC points to a valid \
directory  if not exist "%HTTPD_LIB%\libhttpd.lib" echo Environment variable \
HTTPD_LIB does not point to a valid directory (%HTTPD_LIB%). Could not find \
libhttpd.lib in this directory. Please edit setenvironment64.bat to ensure HTTPD_LIB \
points to a valid directory  if not exist "%HTTPD_LIB%\libapr-1.lib" echo Environment \
variable HTTPD_LIB does not point to a valid directory (%HTTPD_LIB%). Could not find \
libapr-1.lib in this directory. Please edit setenvironment64.bat to ensure HTTPD_LIB \
points to a valid directory @@ -130,6 +134,12 @@
 SET MSBUILD_CLEAN=msbuild.exe /nologo /p:Configuration=%CONFIGURATION% \
/p:Platform=%PLATFORM% /t:Clean %MSBUILD_VERBOSITY%  SET ANT=ant
 
+rem The bindings solution (with net6.0 projects) will not build from a clean slate \
without doing a dotnet restore first +if not exist "%CD%\packages\DotNet\Release" \
mkdir "%CD%\packages\DotNet\Release" +pushd %CD%\Bindings\src\Bindings
+dotnet restore --force
+popd
+
 echo ======== Environment Variable Summary =============
 echo PHP_SRC    = %PHP_SRC%
 echo PHP_LIB    = %PHP_LIB%
@@ -147,6 +157,14 @@
 echo DBXML executables: %MG_BUILD_DBXML_EXE_PATH%
 echo mod_mgmapagent.so: %MG_BUILD_MAPAGENT%
 echo ===================================================
+
+if NOT EXIST "%SWIG_DIR%\swig.exe" ( 
+  echo WARNING - swig.exe not found in directory: %SWIG_DIR%
+  echo Make sure that SWIG is installed and that the SWIG_DIR environment variable \
points to the directory where swig.exe resides in +) ELSE (
+  echo swig.exe was found in: %SWIG_DIR% and will be referred to when building \
language bindings +)
+
 echo Type build.bat to build MapGuide
 
 goto done

_______________________________________________
mapguide-commits mailing list
mapguide-commits@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/mapguide-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic