- [x] Check that .net error messages are being read (https://github.com/jumpinjackie/mapguide-api-bindings/issues/35) - [x] Explore whether our current instability is due to invalid class layout assumptions due to stubbing ACE_Recursive_Thread_Mutex to avoid leaking ACE headers - [x] Generate XML documentation for our .net wrapper binding projects - [ ] Make sure we can build debug bindings - [x] Fix up inconsistent stack direction in C# exceptions (C++ call stack are printed downwards, C# call stack is printed upwards) - [ ] Add memory leak test (ref: https://www.mail-archive.com/mapguide-users@lists.osgeo.org/msg26357.html) and see if this still happens - [x] Check in test case admin tool - [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 - [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 - [x] Consolidate TestCommon and TestMapGuideApi .net projects to unified netstandard2.0 libraries - [x] Tidy mg_exception_callback to no longer take an exception class name argument (it is no longer used or necessary) - [x] Add sanity test for all class ids generated by ClassMapGen - Either - ( ) Add CentOS 6 Dockerfile that - Install SWIG and common libs tarball (from docker build system) - Install same compilers/tools as the same docker image used to produce the common libs tarball - Generate and build the .net/Java SWIG glue libraries - Copy the compiled libs out of the docker container and into the same native library staging area for Java/.net - (x) OR: Update our common libs dockerfile in (https://github.com/jumpinjackie/mapguide-fdo-docker-build) to perform the above tasks - [x] Refactor current .net test suite to reference these nuget packages - [x] Verify test suite still passes (Windows) - [x] Verify test suite still passes (Windows, legacy .net Framework) - [ ] Verify test suite still passes (Linux) - [ ] Remove monolithic binding upon verification of test suite across all supported platforms - Automatic class id generation (https://github.com/jumpinjackie/mapguide-api-bindings/issues/34) - [x] Add SWIG preprocessor that controls whether the class id header should be included - [x] Run SWIG in XML mode to produce an XML of the MapGuide API surface - [x] Update ClassMapGen tool to generate class id files for .net/Java/PHP based on this XML file - [x] Because we've flattened the exception hierarchy, IMake needs to rewrite \exception directives to say in [Java/C#] that it throws MgException with any of the following exception codes - Test Suite - [x] Sync up current test data under /UnitTest to match what is in GitHub repo - [x] Add test data setup script for .net/Java test suites to copy the synced up test data under /UnitTest to the location the test suite is expecting - [ ] Try using beta/prerelease DockPanelSuite for MgTestAdmin - Java binding - [ ] Running javadoc against the generated sources produces many errors. See if we can fix them - [x] Verify test suite still passes (Windows) - [x] Tomcat/JSP now working on Linux, but none of the JSP code compiles (lots of cannot be resolved) - [ ] Verify test suite still passes (Linux) - [ ] Migrate to SWIG 4.1.0 (https://github.com/jumpinjackie/mapguide-api-bindings/issues/36) - [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) - [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 - [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 - ( ) 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 - [x] 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 - [ ] See if later git master builds of SWIG address this issue, allowing us to revert these renames - 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/) - Java: javadoc (part of the JDK) - .net: docfx (https://dotnet.github.io/docfx/) - [ ] Implement a static umbrella landing site that is the gateway to the 3 generated outputs - mg-desktop - [x] Rename to MgPortable/mg-portable - [ ] Add SWIG glue library that layers on top of the existing Foundation/Geometry/PlatformBase glue projects - [ ] Add new OSGeo.MapGuide.Portable .net project for the .net portion of the SWIG glue - [ ] Implement a sample asp.net core application that confirms the feasibility of using mg-portable for web applications in addition to desktop applications - Either: - ( ) Migrate the viewer winforms library to target .net 6.0 - ( ) Or maintain 2 versions of this library, a new .net 6.0 version of the library and a legacy full framework version - [ ] Port over Java binding - [ ] Fix up run_tests.bat/run_tests.sh to work with new layout - Old code cleanup/consolidation - [x] Remove old IMake - [x] Remove old binding projects from WebTier - [ ] Fold FoundationTest into mgserver test suite - [x] Remove SQLite and its related projects from Oem