Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-11-08

FDO

Бобер, выдыхай!
Я таки скомпилял обертку к FDO для Python. Потратил не меньше трех дней, мазафака. То ли кризис так влияет, то ли у Автодеска всё так нынче делается, но просто (без затей) собрать релиз из исходников не вышло. И это релиз, не альфа и не бета. Отягощает сборку еще тот факт, что под MS Windows все очень плохо с инструментарием — в сравнении с Linux, конечно.

В целом, чтобы собрать из исходников FDO, надо строго выполнить инструкции, записанные в файлике OpenSourceBuild__README.txt и сделать поправки на следующее:
* MS Visual Studio нужно не абы какую, а строго 2008 (она же 9.0) в комплектации C#, C++ профессиональную (или в какую там входят MFC, ATL). Express не пойдет, ибо этих мфц и атл там нету. Мазохисты, вроде меня, могут собрать и экспрессом.
* Python надо строго 2.4, о как.
* Понадобится внести правки в некоторые исходники.
* Понадобится копировать недостающие библиотеки в нужные места руками, в зависимости от ошибок компиляции.
* Надо быть готовым, что соберется не все а только основное :)

В связи с последним замечанием, есть шанс, что сборка не будет работать так хорошо, как хотелось бы (это я буду завтра заценивать, насколько хорошо она работает).

Какие у меня (постфактум) получились изменения в исходниках:

--- C:/d/sdf/fdo/orig/OpenSource_FDO/setenvironment.bat Fri Nov 19 19:44:26 2010
+++ C:/d/sdf/fdo/OpenSource_FDO/setenvironment.bat Mon Nov 07 21:33:02 2011
@@ -1,6 +1,6 @@
-@echo off
+@echo on

 rem
 rem Copyright (C) 2004-2006  Autodesk, Inc.
 rem
 rem This library is free software; you can redistribute it and/or
@@ -27,12 +28,12 @@
 if "%1" == "x86_amd64" goto setvcvarsall
 if "%1" == "x86_ia64"  goto setvcvarsall
 goto usage

 :setvcvarsall
-SET ACTIVENAMECHECK="Microsoft Visual Studio 9"
-SET ACTIVEPATHCHECK="C:\Program Files\Microsoft Visual Studio 9.0\VC"
+SET ACTIVENAMECHECK="Microsoft Visual Studio 10"
+SET ACTIVEPATHCHECK="c:\Program Files\Microsoft Visual Studio 10.0\VC"
 if exist %ACTIVEPATHCHECK% goto VSExist
 SET ACTIVEPATHCHECK="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC"
 if exist %ACTIVEPATHCHECK% goto VSExist

 :VSExist
@@ -98,11 +99,11 @@
 if not exist "%SDEHOME%" SET SDEHOME=
 if exist "%SDEHOME%\bin\sde.dll" SET SDEVER_ARCUNITTEST=92
 if exist "%SDEHOME%\bin\sde91.dll" SET SDEVER_ARCUNITTEST=91

 SET ACTIVENAMECHECK="7-Zip"
-SET ACTIVEPATHCHECK="C:\Program Files\7-Zip"
+SET ACTIVEPATHCHECK="d:\app\7-Zip"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%

 SET ACTIVENAMECHECK="Graphviz"
 SET ACTIVEPATHCHECK="C:\Program Files\ATT\Graphviz\bin"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
@@ -112,23 +113,23 @@
 SET ACTIVEPATHCHECK="C:\Program Files\doxygen\bin"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% documentation package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="GnuWin32 Bison/Sed"
-SET ACTIVEPATHCHECK="c:\Program Files\GnuWin32\bin"
+SET ACTIVEPATHCHECK="c:\d\GnuWin32\bin"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="Python 2.4"
-SET ACTIVEPATHCHECK=C:\progra~1\Python24
-if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=C:\progra~1\Python24
+SET ACTIVEPATHCHECK=C:\Python24
+if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=%ACTIVEPATHCHECK%
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="SWIG 1.3.31"
-SET ACTIVEPATHCHECK=C:\progra~1\swigwin-1.3.31
-if exist %ACTIVEPATHCHECK% SET SWIG_HOME=C:\progra~1\swigwin-1.3.31
+SET ACTIVEPATHCHECK=c:\d\swigwin-1.3.31
+if exist %ACTIVEPATHCHECK% SET SWIG_HOME=%ACTIVEPATHCHECK%
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path

 goto end

--- C:/d/sdf/fdo/orig/OpenSource_FDO/setenvironmentVS10.bat    Tue Mar 30 01:20:03 2010
+++ C:/d/sdf/fdo/OpenSource_FDO/setenvironmentVS10.bat Mon Nov 07 22:35:13 2011
@@ -1,6 +1,6 @@
-@echo off
+@echo on

 rem
 rem Copyright (C) 2004-2006  Autodesk, Inc.
 rem
 rem This library is free software; you can redistribute it and/or
@@ -75,11 +75,11 @@
 if not exist "%FDOGDAL%" SET FDOGDAL=%FDOTHIRDPARTY%\gdal
 if not exist "%FDOGDAL%" echo OPTIONAL FDO environment variable FDOGDAL is not set
 if not exist "%FDOGDAL%" SET FDOGDAL=

 SET ACTIVENAMECHECK="7-Zip"
-SET ACTIVEPATHCHECK="C:\Program Files\7-Zip"
+SET ACTIVEPATHCHECK=d:\app\7-Zip
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%

 SET ACTIVENAMECHECK="Graphviz"
 SET ACTIVEPATHCHECK="C:\Program Files\ATT\Graphviz\bin"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
@@ -89,23 +89,23 @@
 SET ACTIVEPATHCHECK="C:\Program Files\doxygen\bin"
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% documentation package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="GnuWin32 Bison/Sed"
-SET ACTIVEPATHCHECK="c:\Program Files\GnuWin32\bin"
+SET ACTIVEPATHCHECK=c:\d\GnuWin32\bin
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="Python 2.4"
-SET ACTIVEPATHCHECK=C:\progra~1\Python24
-if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=C:\progra~1\Python24
+SET ACTIVEPATHCHECK=C:\Python24
+if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=%ACTIVEPATHCHECK%
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path

 SET ACTIVENAMECHECK="SWIG 1.3.31"
-SET ACTIVEPATHCHECK=C:\progra~1\swigwin-1.3.31
-if exist %ACTIVEPATHCHECK% SET SWIG_HOME=C:\progra~1\swigwin-1.3.31
+SET ACTIVEPATHCHECK=c:\d\swigwin-1.3.31
+if exist %ACTIVEPATHCHECK% SET SWIG_HOME=%ACTIVEPATHCHECK%
 if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK%
 if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path

 goto end

--- C:/d/sdf/fdo/orig/OpenSource_FDO/Fdo/Python/Resource/FdoWrapper.rc Wed Feb 16 18:43:18 2011
+++ C:/d/sdf/fdo/OpenSource_FDO/Fdo/Python/Resource/FdoWrapper.rc  Mon Nov 07 22:37:54 2011
@@ -5,11 +5,12 @@
 #define APSTUDIO_READONLY_SYMBOLS
 /////////////////////////////////////////////////////////////////////////////
 //
 // Generated from the TEXTINCLUDE 2 resource.
 //
-#include "afxres.h"
+//#include "afxres.h"
+#include "winresrc.h"

 /////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS

 /////////////////////////////////////////////////////////////////////////////
--- C:/d/sdf/fdo/orig/OpenSource_FDO/Fdo/Python/Swig/Fdo/FdoIncludes.i Wed Jan 06 04:06:08 2010
+++ C:/d/sdf/fdo/OpenSource_FDO/Fdo/Python/Swig/Fdo/FdoIncludes.i  Mon Nov 07 22:57:32 2011
@@ -432,11 +432,14 @@

 %include "Fdo/Schema/SchemaException.h"
 %include "Fdo/Schema/ClassDefinition.h"
 %include "Fdo/Schema/AutogenerationException.h"
 %include "Fdo/Schema/Class.h"
+
+%ignore FdoClassCapabilities::Set;
 %include "Fdo/Schema/ClassCapabilities.h"
+
 %include "Fdo/Schema/ClassCollection.h"
 %include "Fdo/Schema/ClassType.h"
 %include "Fdo/Schema/DataPropertyDefinition.h"
 %include "Fdo/Schema/DataPropertyDefinitionCollection.h"
 %include "Fdo/Schema/DataType.h"
--- C:/d/sdf/fdo/orig/OpenSource_FDO/Thirdparty/apache/xalan/projects/Win32/Res/AllInOne/AllInOne.rc   Wed Mar 24 22:43:20 2010
+++ C:/d/sdf/fdo/OpenSource_FDO/Thirdparty/apache/xalan/projects/Win32/Res/AllInOne/AllInOne.rc    Mon Nov 07 22:37:54 2011
@@ -5,11 +5,12 @@
 #define APSTUDIO_READONLY_SYMBOLS
 /////////////////////////////////////////////////////////////////////////////
 //
 // Generated from the TEXTINCLUDE 2 resource.
 //
-#include "afxres.h"
+//#include "afxres.h"
+#include "winresrc.h"


 /////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS


И скрипт сборки:
@echo off
chcp 1251 > nul
set wd=%~dp0
pushd "%wd%"
set NLS_LANG=AMERICAN_CIS.UTF8
set PYTHONPATH=
@cls

set INCLUDE=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include;%INCLUDE%
set LIBPATH=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib;%LIBPATH%
set LIB=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib;%LIB%
set SWIG_HOME=c:\d\swigwin-1.3.31
set PYTHON_HOME=c:\Python24
set PYTHON_INCLUDE=%PYTHON_HOME%\include
set PYTHON_LIB=%PYTHON_HOME%\libs\python24.lib
set FDO=c:\d\sdf\fdo\OpenSource_FDO
set FDOTHIRDPARTY=%FDO%\Thirdparty
SET FDOUTILITIES=%FDO%\Utilities
SET XALANROOT=%FDOTHIRDPARTY%\apache\xalan
SET XERCESCROOT=%FDOTHIRDPARTY%\apache\xerces
SET NLSDIR=%FDOTHIRDPARTY%\apache\xalan\src\xalanc\NLS
SET ACTIVEPATHCHECK=d:\app\7-Zip

set path=%path%;c:\WINDOWS\Microsoft.NET\Framework\v3.5;c:\d\GnuWin32\bin;c:\Python24;c:\d\swigwin-1.3.31;c:\d\Microsoft SDKs\Windows\v7.1\Bin

@REM ~ goto TEST

call setenvironmentVS10.bat x86>nul
set
@REM ~ call build_thirdparty.bat -w sdf -w fdo
call build_thirdparty.bat -a clean
set
@REM ~ call build.bat -py=build
call build.bat -a clean
exit

:TEST
set FDO=c:\d\sdf\fdo\OpenSource_FDO\fdo
set path=c:\d\sdf\fdo\OpenSource_FDO\Utilities\ExpressionEngine\Bin\Win32\Release;%path%
pushd Fdo\Python\UnitTest
call UnitTests.cmd
popd
exit


C:\d\sdf\fdo\OpenSource_FDO\Fdo\Python\UnitTest>python Src/main.py
Testing ApplySchemaTest...
Testing CapabilitiesTest:Capabilities...
Testing ClientServicesTest:ClientServices...
Testing ClientServicesTest:ConnectionCreation...
Testing CommandTest:ApplySchemaCommandCreation...
Testing CommandTest:InsertCommandCreation...
Testing CommandTest:SelectCommandCreation...
Testing LOBTest...
Testing StringBufferTest...
Testing TypeMapTest:Enumerations...
Testing TypeMapTest:Exceptions...
Testing TypeMapTest:PrimitiveArrays...
Testing TypeMapTest:Primitives...
----------------------------------------------------------------------
Ran 13 tests in 0.070s
OK


Видно, что я пытался использовать MS Visual Studio 10 (это была одна из попыток), но пусть это никого не смущает. Использование Студии 2008 жестко зашито в конфигах FDO и компиляла реально Студия 2008 Express.

Послевкусие после сборки фдо довольно гнусное. Как то я не ожидал, что сборка free проекта потребует наличия сильно небесплатной Студии (да еще и конкретной, старой версии!), плюс еще и неслабой правки вручную. Нехорошо это.

Ненавижу Автодеск :)

sgillies.net/blog/400/fdo-and-python

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)