<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>31178</bug_id>
          
          <creation_ts>2015-07-30 17:50:08 +0300</creation_ts>
          <short_desc>Отсутствует поддержка COM/XPCOM интерфейса для С++ кода</short_desc>
          <delta_ts>2015-09-01 18:33:18 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>virtualbox-sdk</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="solo">solo</reporter>
          <assigned_to name="Evgeny Sinelnikov">sin</assigned_to>
          <cc>evg</cc>
    
    <cc>greh</cc>
    
    <cc>nbr</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>152292</commentid>
    <comment_count>0</comment_count>
      <attachid>6326</attachid>
    <who name="solo">solo</who>
    <bug_when>2015-07-30 17:50:08 +0300</bug_when>
    <thetext>Created attachment 6326
Правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile

В пакете virtualbox-sdk отсутствует поддержка COM/XPCOM интерфейса для С++ кода. По факту, это бага апстрима сильно мешающий разработке на С++ (по словам коллег апстрим о нём знает, но исправлять в ближайшее время не планирует).

  Подробности:

1. Пример для С++, присутсвующий в virtualbox-sdk, не собирается:

$ cd /usr/lib64/virtualbox/sdk/bindings/xpcom/samples

$ make DEFS_XPCOM=RT_OS_LINUX
g++ -c -g -fshort-wchar -I../include -I../include/nsprpub -I../include/string -I../include/xpcom -I../include/ipcd -DRT_OS_LINUX -o tstVBoxAPIXPCOM.o tstVBoxAPIXPCOM.cpp
tstVBoxAPIXPCOM.cpp:76:26: fatal error: VBox/com/com.h: Нет такого файла или каталога
compilation terminated.
make: *** [tstVBoxAPIXPCOM.o] Ошибка 1

  Причина -- в коде примера присутствуют инклюды файлов, не попадающих в официальный SDC VirtualBox`а (цитирую tstVBoxAPIXPCOM.cpp):

#include &lt;VBox/com/com.h&gt;
#include &lt;VBox/com/string.h&gt;
#include &lt;VBox/com/array.h&gt;
#include &lt;VBox/com/Guid.h&gt;
#include &lt;VBox/com/ErrorInfo.h&gt;
#include &lt;VBox/com/errorprint.h&gt;

#include &lt;VBox/com/VirtualBox.h&gt;

#include &lt;iprt/stream.h&gt;

2. В самом файле примера, /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/tstVBoxAPIXPCOM.cpp, присутствует указание -- использовать код компонентов самого VirtualBox`а в качестве примеров C++ приложений взаимодействующих с VirtualBox`ом по COM/XPCOM:

 * This sample program is intended to demonstrate the minimal code necessary
 * to use VirtualBox XPCOM API for learning puroses only. The program uses
 * pure XPCOM and doesn&apos;t have any extra dependencies to let you better
 * understand what is going on when a client talks to the VirtualBox core
 * using the XPCOM framework.
 *
 * However, if you want to write a real application, it is highly recommended
 * to use our MS COM XPCOM Glue library and helper C++ classes. This way, you
 * will get at least the following benefits:
 *
 * a) better portability: both the MS COM (used on Windows) and XPCOM (used
 *    everywhere else) VirtualBox client application from the same source code
 *    (including common smart C++ templates for automatic interface pointer
 *    reference counter and string data management);
 * b) simpler XPCOM initialization and shutdown (only a single method call
 *    that does everything right).
 *
 * Currently, there is no separate sample program that uses the VirtualBox MS
 * COM XPCOM Glue library. Please refer to the sources of stock VirtualBox
 * applications such as the VirtualBox GUI frontend or the VBoxManage command
 * line frontend.

  Если указанной рекомендации последовать, то оказывается что для сборки такого рода приложений нужны хидеры, расположенные в каталогах:

а) VirtualBox/include/VBox/com/ (см. http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=tree;f=VirtualBox/include/VBox/com;hb=63c8b1bd1adfb50cb24d7e9a917fe2260157ec8e)

б)  VirtualBox/include/iprt/ (см. http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=tree;f=VirtualBox/include/iprt;h=d028814f1e5230735a3f996c83fa60244440c28f;hb=63c8b1bd1adfb50cb24d7e9a917fe2260157ec8e)

  Если указанные каталоги поместить в /usr/lib64/virtualbox/sdk/bindings/xpcom/include/ (как /usr/lib64/virtualbox/sdk/bindings/xpcom/include/VBox/com/ и /usr/lib64/virtualbox/sdk/bindings/xpcom/include/iprt/) и использовать правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile (в оригинальном tstVBoxAPIXPCOM не линкуется с VBoxRT.so, что приводит к ошибке), пример начинает собираться (пользователь должен иметь право записи в /usr/lib64/virtualbox/sdk/bindings/xpcom/samples):

$ cd /usr/lib64/virtualbox/sdk/bindings/xpcom/samples

$ make DEFS_XPCOM=&quot;RT_OS_LINUX IN_RING3 VBOX_WITH_XPCOM VBOX_WITH_XPCOM_NAMESPACE_CLEANUP&quot;
g++ -c -g -fshort-wchar -I../include -I../include/nsprpub -I../include/string -I../include/xpcom -I../include/ipcd -DRT_OS_LINUX -DIN_RING3 -DVBOX_WITH_XPCOM -DVBOX_WITH_XPCOM_NAMESPACE_CLEANUP -o tstVBoxAPIXPCOM.o tstVBoxAPIXPCOM.cpp
g++ -g -o tstVBoxAPIXPCOM tstVBoxAPIXPCOM.o \
        ../../../..//VBoxXPCOM.so \
        ../../../..//VBoxRT.so \
        -Wl,-rpath ../../../..// \
        -ldl -lpthread

$ ls tstVBoxAPIXPCOM
tstVBoxAPIXPCOM

  Предлагаю помимо virtualbox-sdk собирать и virtualbox-sdk-xpcom, содержащий недостающие хидеры (&lt;sdk&gt;/bindings/xpcom/include/VBox/com/ и &lt;sdk&gt;/bindings/xpcom/include/iprt/). Готов подготовить соответствующее NMU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152627</commentid>
    <comment_count>1</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2015-09-01 18:33:18 +0300</bug_when>
    <thetext>virtualbox-4.3.30-alt2 -&gt; sisyphus:

* Tue Sep 01 2015 Aleksey Avdeev &lt;solo@altlinux&gt; 4.3.30-alt2
- Add subpackage virtualbox-sdk-xpcom (Closes: 31178)
- Add synonyms lowercase (Closes: 31245)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>6326</attachid>
            <date>2015-07-30 17:50:08 +0300</date>
            <delta_ts>2015-07-30 17:50:08 +0300</delta_ts>
            <desc>Правленный /usr/lib64/virtualbox/sdk/bindings/xpcom/samples/Makefile</desc>
            <filename>Makefile</filename>
            <type>text/plain</type>
            <size>1543</size>
            <attacher name="solo">solo</attacher>
            
              <data encoding="base64">IwojIHRzdFZCb3hBUElYUENPTSBtYWtlZmlsZQojCiMKIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
MyBPcmFjbGUgQ29ycG9yYXRpb24KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFZpcnR1YWxCb3gg
T3BlbiBTb3VyY2UgRWRpdGlvbiAoT1NFKSwgYXMKIyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3
LnZpcnR1YWxib3gub3JnLiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsKIyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
CiMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUKIyBGb3VuZGF0aW9uLCBpbiB2ZXJzaW9uIDIgYXMgaXQgY29tZXMgaW4gdGhlICJD
T1BZSU5HIiBmaWxlIG9mIHRoZQojIFZpcnR1YWxCb3ggT1NFIGRpc3RyaWJ1dGlvbi4gVmlydHVh
bEJveCBPU0UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlCiMgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55IGtpbmQuCiMKClBBVEhfWFBDT00g
ICAgID0gLi4KUEFUSF9CSU4gICAgICAgPSAuLi8uLi8uLi8uLi8KCiMgVGhpcyBzZXR0aW5nIG11
c3QgYmUgdGhlIHNhbWUgYXMgdXNlZCB3aGVuIGJ1aWxkaW5nIFZCb3hYUENPTS5zby4KIyBJZiB5
b3UgZ2V0IGEgbG90IG9mIHVucmVzb2x2ZWQgc3ltYm9scywgdHJ5IGNvbW1lbnRpbmcgaXQgb3V0
LgpWQk9YX1dJVEhfWFBDT01fTkFNRVNQQUNFX0NMRUFOVVA9MQoKUEFUSF9YUENPTV9JREwgPSAk
KFBBVEhfWFBDT00pL2lkbApJTkNTX1hQQ09NICAgICA9ICQoUEFUSF9YUENPTSkvaW5jbHVkZSBc
CiAgICAgICAgICAgICAgICAgJChQQVRIX1hQQ09NKS9pbmNsdWRlL25zcHJwdWIgXAogICAgICAg
ICAgICAgICAgICQoUEFUSF9YUENPTSkvaW5jbHVkZS9zdHJpbmcgXAogICAgICAgICAgICAgICAg
ICQoUEFUSF9YUENPTSkvaW5jbHVkZS94cGNvbSBcCiAgICAgICAgICAgICAgICAgJChQQVRIX1hQ
Q09NKS9pbmNsdWRlL2lwY2QKCmlmZGVmIFZCT1hfV0lUSF9YUENPTV9OQU1FU1BBQ0VfQ0xFQU5V
UAogREVGU19YUENPTSAgICs9IFZCT1hfV0lUSF9YUENPTV9OQU1FU1BBQ0VfQ0xFQU5VUAplbmRp
ZgoKCiMKIyBMaW5rIHdpdGggdGhlIHB1YmxpYyBYUENPTSBsaWJyYXJpZXMKIwp0c3RWQm94QVBJ
WFBDT006IHRzdFZCb3hBUElYUENPTS5vCglnKysgLWcgLW8gJEAgJF4gXAoJCSQoUEFUSF9CSU4p
L1ZCb3hYUENPTS5zbyBcCgkJJChQQVRIX0JJTikvVkJveFJULnNvIFwKCQktV2wsLXJwYXRoICQo
UEFUSF9CSU4pLyBcCgkJLWxkbCAtbHB0aHJlYWQKCnRzdFZCb3hBUElYUENPTS5vOiB0c3RWQm94
QVBJWFBDT00uY3BwCglnKysgLWMgLWcgLWZzaG9ydC13Y2hhciAkKGFkZHByZWZpeCAtSSwgJChJ
TkNTX1hQQ09NKSkgJChhZGRwcmVmaXggLUQsICQoREVGU19YUENPTSkpIC1vICRAIHRzdFZCb3hB
UElYUENPTS5jcHAKCmNsZWFuOgoJcm0gLWYgdHN0VkJveEFQSVhQQ09NIHRzdFZCb3hBUElYUENP
TS5vCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>