From 1e44748f763e05c402b0a473996b0902b4938cfe Mon Sep 17 00:00:00 2001
From: Ansgar Philippsen <ansgar.philippsen@gmail.com>
Date: Mon, 19 Nov 2012 12:02:24 -0500
Subject: [PATCH] refactored python startup files for ost and dng

there are now three startup files; ost_startup.py (former init_cl.py) initializes non-gui ost; dng_startup (former init.py) initializes dng; and gosty_startup initializes gosty (some issues remain what to put into dng_startup as opposed to gosty_startup). also, files are now properly placed into site-packages/ost (on osx and linux)
---
 .../code_fragments/surf/test_surf_clip.py     | 18 +++++++++
 modules/gui/pymod/CMakeLists.txt              |  1 +
 modules/gui/pymod/gosty_startup.py            |  6 +++
 modules/gui/src/gosty.cc                      | 37 +++++++++++--------
 scripts/CMakeLists.txt                        |  6 +--
 scripts/dng.bat.in                            |  3 +-
 scripts/dng.in                                |  2 +-
 scripts/{init.py => dng_startup.py}           |  0
 scripts/ost.bat.in                            |  2 +-
 scripts/ost.in                                |  2 +-
 scripts/ost_config.in                         |  2 +-
 scripts/{init_cl.py => ost_startup.py}        | 11 ++++--
 12 files changed, 63 insertions(+), 27 deletions(-)
 create mode 100644 examples/code_fragments/surf/test_surf_clip.py
 create mode 100644 modules/gui/pymod/gosty_startup.py
 rename scripts/{init.py => dng_startup.py} (100%)
 rename scripts/{init_cl.py => ost_startup.py} (88%)

diff --git a/examples/code_fragments/surf/test_surf_clip.py b/examples/code_fragments/surf/test_surf_clip.py
new file mode 100644
index 000000000..6cdfdf3c5
--- /dev/null
+++ b/examples/code_fragments/surf/test_surf_clip.py
@@ -0,0 +1,18 @@
+struct=io.LoadEntity("sdh.pdb")
+surf=io.LoadSurface("sdh","msms")
+surf.Attach(struct,5.0)
+go=gfx.Surface("surf",surf)
+# this is broken
+#go.clip=True
+#go.clip_plane=geom.Vec4(0,0,-1,-130)
+# this works, z offset to near clipping plane, must be >0
+go.clip_offset=1
+go.solid=True
+go.solid_color=gfx.RGB(1,1,0)
+
+scene.rtc=geom.Mat4(0.914075, -0.355397, 0.195293, 29.688, 0.405471, 0.7934, -0.45397, 19.9405, 0.00639453, 0.494153, 0.869337, 73.0075, 0, 0, -143.077, 1)
+
+scene.Add(go)
+scene.SetCenter(go.GetCenter())
+scene.Autoslab()
+scene.auto_autoslab=False
diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt
index 4ac7f7cfe..50ee93141 100644
--- a/modules/gui/pymod/CMakeLists.txt
+++ b/modules/gui/pymod/CMakeLists.txt
@@ -86,6 +86,7 @@ set(OST_GUI_PYMOD_MODULES
   traj.py
   helpwidget.py
   table.py
+  gosty_startup.py
 )
 
 set(OST_GUI_PYMOD_DNG_MODULES
diff --git a/modules/gui/pymod/gosty_startup.py b/modules/gui/pymod/gosty_startup.py
new file mode 100644
index 000000000..029dc1970
--- /dev/null
+++ b/modules/gui/pymod/gosty_startup.py
@@ -0,0 +1,6 @@
+from ost import *
+from ost import gui
+gui_mode=True
+scene=gfx.Scene()
+scene.Stereo=gfx.Stereo
+
diff --git a/modules/gui/src/gosty.cc b/modules/gui/src/gosty.cc
index a0be0fae0..4fa44a3b4 100644
--- a/modules/gui/src/gosty.cc
+++ b/modules/gui/src/gosty.cc
@@ -106,25 +106,23 @@ String get_ost_root()
   return dir.path().toStdString();
 }
 
-void setup_python_search_path(const String& root, PythonInterpreter& pi)
+String setup_python_search_path(const String& root, PythonInterpreter& pi)
 {
   std::stringstream site_pkgs;
   site_pkgs << "python" << PY_MAJOR_VERSION << "." << PY_MINOR_VERSION;
 #ifdef _MSC_VER
-  pi.AppendModulePath(QString::fromStdString(root+"\\lib\\"+site_pkgs.str()
-                                             +"\\site-packages"));
+  String loc=root+"\\lib\\"+site_pkgs.str()+"\\site-packages";
 #else  
-#  if (defined(__ppc64__) || defined(__x86_64__)) && !defined(__APPLE__)
-  pi.AppendModulePath(QString::fromStdString(root+"/lib64/"+
-                                             site_pkgs.str()+
-                                             "/site-packages"));
-#  else
-  pi.AppendModulePath(QString::fromStdString(root+"/lib/"+
-                                             site_pkgs.str()+
-                                             "/site-packages"));
-#  endif
+# if (defined(__ppc64__) || defined(__x86_64__)) && !defined(__APPLE__)
+  String loc=root+"/lib64/"+site_pkgs.str()+"/site-packages";
+# else
+  String loc=root+"/lib/"+site_pkgs.str()+"/site-packages";
+# endif
 #endif
+  pi.AppendModulePath(QString::fromStdString(loc));
+  // dng is an interactive python session, so add '.' to search path
   pi.AppendModulePath(".");  
+  return loc;
 }
   
 int setup_resources(QApplication& app) 
@@ -186,9 +184,18 @@ int init_python_interpreter()
                      console_logger,
                      SLOT(AppendOutput(unsigned int, const QString &)));
   }  
-  setup_python_search_path(root, py);
-  py.RunCommand("from ost import *");
-  py.RunCommand("gui_mode=True");
+  String python_loc=setup_python_search_path(root, py);
+  //py.RunCommand("from ost import *");
+  //py.RunCommand("gui_mode=True");
+  std::stringstream cmd;
+  cmd << "execfile('" << python_loc;
+#ifdef _MSC_VER
+  cmd << "\\ost\\gui\\";
+#else  
+  cmd << "/ost/gui/";
+#endif
+  cmd << "gosty_startup.py')";
+  py.RunCommand(QString::fromStdString(cmd.str()));
   return 0;
 }
 
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index 12b81a310..9d47c8e0b 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -31,11 +31,11 @@ if (NOT ENABLE_STATIC)
   endif()
 
   set(INIT_SCRIPTS 
-    init_cl.py
+    ost_startup.py
   )
-  set(SPD "${LIB_DIR}/python${PYTHON_VERSION}/site-packages")
+  set(SPD "${LIB_DIR}/python${PYTHON_VERSION}/site-packages/ost")
   if (ENABLE_GUI)
-    list(APPEND INIT_SCRIPTS init.py)
+    list(APPEND INIT_SCRIPTS dng_startup.py)
   endif()
   copy_if_different("${CMAKE_CURRENT_SOURCE_DIR}" "${STAGE_DIR}/${SPD}" 
                   "${INIT_SCRIPTS}" "python init scripts" ost_scripts)
diff --git a/scripts/dng.bat.in b/scripts/dng.bat.in
index fba653b93..e6c2c7c7a 100644
--- a/scripts/dng.bat.in
+++ b/scripts/dng.bat.in
@@ -27,5 +27,4 @@ echo Starting DNG in %BIN_DIR%
 
 set DNG_ROOT=%BIN_DIR%\..
 set PATH=%BIN_DIR%;%DNG_ROOT%\@LIBDIR@\@BUILD_TYPE@;%DNG_ROOT%\@LIBDIR@;%DNG_ROOT%\bin\@BUILD_TYPE@;%PATH%
-REM "%BIN_DIR%\@BUILD_TYPE@\gosty.exe" %DNG_ROOT%\@LIBDIR@\openstructure\init.py ost %*
-"%BIN_DIR%\@BUILD_TYPE@\gosty.exe" "%DNG_ROOT%\@LIBDIR@\openstructure\init.py" ost %*
+"%BIN_DIR%\@BUILD_TYPE@\gosty.exe" "%DNG_ROOT%\@LIBDIR@\openstructure\dng_startup" ost %*
diff --git a/scripts/dng.in b/scripts/dng.in
index d1d7096fc..d43153538 100755
--- a/scripts/dng.in
+++ b/scripts/dng.in
@@ -28,4 +28,4 @@ fi
 BIN_DIR=`dirname "$SCRIPT_NAME"`
 source "$BIN_DIR/../@LIBEXEC_PATH@/ost_config"
 
-$BIN_DIR/../@LIBEXEC_PATH@/gosty $DNG_INITDIR/init.py dng $opts
+$BIN_DIR/../@LIBEXEC_PATH@/gosty $DNG_INITDIR/dng_startup.py dng $opts
diff --git a/scripts/init.py b/scripts/dng_startup.py
similarity index 100%
rename from scripts/init.py
rename to scripts/dng_startup.py
diff --git a/scripts/ost.bat.in b/scripts/ost.bat.in
index 27fb91247..006fffe52 100644
--- a/scripts/ost.bat.in
+++ b/scripts/ost.bat.in
@@ -50,6 +50,6 @@ if "%1" == "" (
   echo passing commandline options %opts% to ost
 )
 
-call "%pyexec%" %interact_% "%DNG_ROOT%\@LIBDIR@\openstructure\init_cl.py" %opts%
+call "%pyexec%" %interact_% "%DNG_ROOT%\@LIBDIR@\openstructure\ost_startup.py" %opts%
 
 
diff --git a/scripts/ost.in b/scripts/ost.in
index bea69d9ec..dcbe81d4e 100755
--- a/scripts/ost.in
+++ b/scripts/ost.in
@@ -31,6 +31,6 @@ BIN_DIR=`dirname "$SCRIPT_NAME"`
 
 source "$BIN_DIR/../@LIBEXEC_PATH@/ost_config"
 
-$pyexec $interactive "$DNG_ROOT/@LIBDIR@/python@PYTHON_VERSION@/site-packages/init_cl.py" $opts
+$pyexec $interactive "$DNG_ROOT/@LIBDIR@/python@PYTHON_VERSION@/site-packages/ost/ost_startup.py" $opts
 RC=$?
 exit $RC
diff --git a/scripts/ost_config.in b/scripts/ost_config.in
index f756d7cd3..1b84852e9 100644
--- a/scripts/ost_config.in
+++ b/scripts/ost_config.in
@@ -24,7 +24,7 @@
 export DNG_ROOT=`cd "$BIN_DIR/..";pwd`
 export DNG_BINDIR="$DNG_ROOT/bin"
 export DNG_LIBDIR="$DNG_ROOT/@LIBDIR@"
-export DNG_INITDIR="$DNG_LIBDIR/python@PYTHON_VERSION@/site-packages"
+export DNG_INITDIR="$DNG_LIBDIR/python@PYTHON_VERSION@/site-packages/ost/"
 
 export PATH="$DNG_BINDIR:${PATH}"
 export DYLD_FRAMEWORK_PATH="$DNG_LIBDIR:${DYLD_FRAMEWORK_PATH}"
diff --git a/scripts/init_cl.py b/scripts/ost_startup.py
similarity index 88%
rename from scripts/init_cl.py
rename to scripts/ost_startup.py
index 2c7a04810..1287ec1fb 100644
--- a/scripts/init_cl.py
+++ b/scripts/ost_startup.py
@@ -27,21 +27,25 @@ parser.disable_interspersed_args()
 (options, args) = parser.parse_args()
 
 _site_packs='python%d.%d/site-packages' % sys.version_info[0:2]
+_base_dir=os.getenv('DNG_ROOT')
 if platform.machine()=='x86_64':
-  sys.path.insert(0, os.path.join(os.getenv('DNG_ROOT'), 'lib64', _site_packs))
+  sys.path.insert(0, os.path.join(_base_dir, 'lib64', _site_packs))
 else:
-  sys.path.insert(0,os.path.join(os.getenv('DNG_ROOT'), 'lib', _site_packs))
+  sys.path.insert(0,os.path.join(_base_dir, 'lib', _site_packs))
      
 from ost import *
 import ost
 try:
   from ost import gfx
   ost.scene = gfx.Scene()
+  scene=gfx.Scene()
   ost.scene.Stereo=gfx.Stereo
+  scene.Stereo=gfx.Stereo
 except ImportError:
+  print "ost build without gfx"
   pass
 
-ost.SetPrefixPath(os.getenv('DNG_ROOT'))
+ost.SetPrefixPath(_base_dir)
 def _InitRuleBasedBuilder():
   compound_lib_path=os.path.join(ost.GetSharedDataPath(), 'compounds.chemlib')
   if os.path.exists(compound_lib_path):
@@ -79,6 +83,7 @@ else:
 
 PushVerbosityLevel(options.vlevel)
 
+# this should probably only be added when running an interactive shell
 sys.path.append(".")
 
 if len(parser.rargs)>0 :
-- 
GitLab