Compile kent source as dynamic library: Difference between revisions

From genomewiki
Jump to navigationJump to search
(Created page with " cd src/lib make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0 gcc -shared -o kent.so *.o font/*.o -lz -lpng")
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
To run kent src functions from python, you need to compile the tree with -fPIC. It's easier to deactivate the various libraries:
   cd src/lib
   cd src/lib
   make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0
   make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0
   gcc -shared -o kent.so *.o font/*.o -lz -lpng
   gcc -shared -o kent.so *.o font/*.o -lz -lpng
Now you can create a stub for all functions in the kent source library:
  python --version # make sure we have python >2.5 installed, usually the case except old Redhat versions
  pip install ctypesgen
  ctypesgen.py ../inc/*.h -lkent.so -o kent.py
 
And then call kent source functions in your python script:
  import kent
  p = kent.pslLoadAll("test.psl")
  print p.contents.blockCount
  kent.freeMem(p) # remember that all objects we get back have to be freed, these are normal C structs, not python objects
Most functions return pointers to structs, not data directly, so you will usually have to use the .contents attribute to get the data.

Latest revision as of 20:31, 20 May 2013

To run kent src functions from python, you need to compile the tree with -fPIC. It's easier to deactivate the various libraries:

 cd src/lib
 make USE_SAMTABIX=0 USE_TABIX=0 USE_BAM=0 CFLAGS=-fPIC USE_SSL=0
 gcc -shared -o kent.so *.o font/*.o -lz -lpng

Now you can create a stub for all functions in the kent source library:

 python --version # make sure we have python >2.5 installed, usually the case except old Redhat versions
 pip install ctypesgen
 ctypesgen.py ../inc/*.h -lkent.so -o kent.py
 

And then call kent source functions in your python script:

 import kent
 p = kent.pslLoadAll("test.psl")
 print p.contents.blockCount
 kent.freeMem(p) # remember that all objects we get back have to be freed, these are normal C structs, not python objects

Most functions return pointers to structs, not data directly, so you will usually have to use the .contents attribute to get the data.