[NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
Dmitry Shurupov
Сообщения: 336
Статус: Open Source geek
ОС: Ubuntu Linux

[NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение Dmitry Shurupov »

Выступая на конференции Oracle OpenWorld 2012, проходящей в эти дни в Сан-Франциско (США), Вим Кокертс (Wim Coekaerts), старший вице-президент Oracle по Linux, заявил, что «его лично задевают» высказывания интернет-пользователей о политике компании в области Linux. «Я часто читаю Slashdot и блоги, где люди заявляют, что мы проприетарная компания, которая просто берёт код и не возвращает ничего обратно [Open Source-проектам и сообществу]. Это задевает меня лично, поскольку мы в действительности делаем много хороших вещей. Всё, что мы делаем, возвращается в [кодовую базу] Linux [и сопутствующих проектов]. Мы действительно помогаем сделать Linux лучше, а не просто копируем», — заявил Кокертс. По словам представителя Oracle, корпорация была готова создать новый Linux-дистрибутив собственными силами, однако решила базироваться на продукции Red Hat: «Мы поддерживаем строгую совместимость с RHEL (Red Hat Enterprise Linux), потому что так проще покупателям. Дело вовсе не в том, что мы нуждаемся в Red Hat для возможности подготовки Linux-дистрибутива. Создание дистрибутива — это очень простая в техническом смысле задача». Кокертс указал на то, что сложности возникают совсем в другом: в привлечении клиентов с их бизнес-приложениями, которые были написаны для функционирования на RHEL. И использование базы Red Hat помогает решить данную проблему. Среди причин, по которым клиенты могут перейти с RHEL на Oracle Linux, были названы: возможность поддержки полного стека программного обеспечения (в первую очередь речь идёт про СУБД Oracle) у одного вендора, экономические выгоды и даже технические преимущества (Ksplice, своя версия ядра Linux с DTrace). По словам Кокертса, многие уже оценили эти плюсы: «Наша клиентская база быстро растет, так что больше мы не являемся маленьким игроком. Сейчас мы в двойке лидеров».

оригинал на www.nixp.ru
По-моему, это еще один повод перейти на Убунту.
Спасибо сказали:
Аватара пользователя
kknight
Сообщения: 756

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение kknight »

Оракл совсем обнаглел.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение yars »

Создание дистрибутива — это очень простая в техническом смысле задача».

Ничего себе! Простая - это когда у вас штат сотрудников, каждый из которых решает узкий круг проблем, например, один иксы собирает, другой Qt. А если, как Патрик, в основном один (пусть с несколькими добровольцами), то это уже отнюдь не просто.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
FlySnake
Сообщения: 992
ОС: openSUSE

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение FlySnake »

yars писал(а):
03.10.2012 13:49
QUOTE писал(а):Создание дистрибутива — это очень простая в техническом смысле задача».

Ничего себе! Простая - это когда у вас штат сотрудников, каждый из которых решает узкий круг проблем, например, один иксы собирает, другой Qt. А если, как Патрик, в основном один (пусть с несколькими добровольцами), то это уже отнюдь не просто.

Они наняли Дениса Попова - теперь это действительно простая задача
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение Crazy »

yars писал(а):
03.10.2012 13:49
Ничего себе! Простая - это когда у вас штат сотрудников, каждый из которых решает узкий круг проблем, например, один иксы собирает, другой Qt. А если, как Патрик, в основном один (пусть с несколькими добровольцами), то это уже отнюдь не просто.

Что там сложного?

Desipere in loco
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение SLEDopit »

Crazy писал(а):
03.10.2012 14:50
Что там сложного?
Огромный объём работы по адаптированию приложений под свой дистрибутив, требующий большое количество человекочасов?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение Crazy »

SLEDopit писал(а):
03.10.2012 16:06
Огромный объём работы по адаптированию приложений под свой дистрибутив, требующий большое количество человекочасов?

Это подобрать обои, темки и т.д.?

Desipere in loco
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение alv »

yars писал(а):
03.10.2012 13:49
А если, как Патрик, в основном один (пусть с несколькими добровольцами), то это уже отнюдь не просто.

Если этот один - Патрик, то как раз просто. Он просто делает то, что считает нужным, и делает хорошо
А когда много - то возникает проблема лебедя, рака и щуки.
Наглядный пример недавнего времени: пока PCLinuxOS собирал фактически один Texstar, было хорошо. Как собралось много лебедей и прочих - стало... да никак стало.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение NickLion »

Crazy писал(а):
03.10.2012 16:38
SLEDopit писал(а):
03.10.2012 16:06
Огромный объём работы по адаптированию приложений под свой дистрибутив, требующий большое количество человекочасов?

Это подобрать обои, темки и т.д.?

Нет, патчи для данного дистрибутива. Сначала их кому-то написать надо, а потом сопровождать.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение deadhead »

оставляю без присмотра: https://oss.oracle.com/
[x] close
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение yars »

Crazy писал(а):
03.10.2012 16:38
Это подобрать обои, темки и т.д.?

И это в том числе, но это ерунда по сравнению с
NickLion писал(а):
03.10.2012 19:11
патчи для данного дистрибутива. Сначала их кому-то написать надо, а потом сопровождать.

Так что, извините, но... Oracle минус один балл (: .
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение Crazy »

NickLion писал(а):
03.10.2012 19:11
Нет, патчи для данного дистрибутива. Сначала их кому-то написать надо, а потом сопровождать.

Что патчит то собираешься, KDE?

yars писал(а):
03.10.2012 20:20
Так что, извините, но... Oracle минус один балл (: .

много видел полезных патчей?

Desipere in loco
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение NickLion »

Crazy писал(а):
03.10.2012 21:06
Что патчит то собираешься, KDE?

В том числе и его (kdebase4):

Код: Выделить всё

Index: kde-baseapps-4.7.98/dolphin/src/dolphinui.rc
===================================================================
--- kde-baseapps-4.7.98.orig/dolphin/src/dolphinui.rc
+++ kde-baseapps-4.7.98/dolphin/src/dolphinui.rc
@@ -88,6 +88,7 @@
         <text context="@title:menu">Main Toolbar</text>
         <Action name="go_back" />
         <Action name="go_forward" />
+        <Action name="go_up" />
         <Separator name="separator_1" />
         <Action name="icons" />
         <Action name="compact" />


Или вот серьёзнее (kdevelop4):

Код: Выделить всё

diff --git a/cmake/modules/FindLibKasten.cmake b/cmake/modules/FindLibKasten.cmake
index 087eedc..9fafd87 100644
--- a/cmake/modules/FindLibKasten.cmake
+++ b/cmake/modules/FindLibKasten.cmake
@@ -1,4 +1,4 @@
-# - Find Kasten libraries, v0 or v1
+# - Find Kasten libraries, v0, v1 or v2
 #
 # This module defines
 #  LIBKASTEN_FOUND - whether the libkasten libraries were found
@@ -12,44 +12,45 @@ if( LIBKASTEN_INCLUDE_DIR AND LIBKASTEN_LIBRARIES AND LIBKASTEN_VERSION )
     set( Kasten_FIND_QUIETLY TRUE )
 endif( LIBKASTEN_INCLUDE_DIR AND LIBKASTEN_LIBRARIES AND LIBKASTEN_VERSION )

-if( LIBKASTEN_FIND_VERSION EQUAL 1 )
-    find_library( KASTEN1_CORE_LIB
+if( LIBKASTEN_FIND_VERSION EQUAL 1 OR LIBKASTEN_FIND_VERSION EQUAL 2)
+    set( KV ${LIBKASTEN_FIND_VERSION} )
+    find_library( KASTEN1OR2_CORE_LIB
         NAMES
-        kasten1core
+        kasten${KV}core
         HINTS
         ${LIB_INSTALL_DIR}
         ${KDE4_LIB_DIR}
     )

-    find_library( KASTEN1_GUI_LIB
+    find_library( KASTEN1OR2_GUI_LIB
         NAMES
-        kasten1gui
+        kasten${KV}gui
         HINTS
         ${LIB_INSTALL_DIR}
         ${KDE4_LIB_DIR}
     )

-    find_library( KASTEN1_CONTROLLERS_LIB
+    find_library( KASTEN1OR2_CONTROLLERS_LIB
         NAMES
-        kasten1controllers
+        kasten${KV}controllers
         HINTS
         ${LIB_INSTALL_DIR}
         ${KDE4_LIB_DIR}
     )

-    find_path( KASTEN1_NORMAL_INCLUDE_DIR
+    find_path( KASTEN1OR2_NORMAL_INCLUDE_DIR
         NAMES
         abstractmodel.h
         PATH_SUFFIXES
-        kasten1
+        kasten${KV}
         HINTS
         ${INCLUDE_INSTALL_DIR}
         ${KDE4_INCLUDE_DIR}
     )

-    find_path( KASTEN1_CAMELCASE_INCLUDE_DIR
+    find_path( KASTEN1OR2_CAMELCASE_INCLUDE_DIR
         NAMES
-        Kasten1/AbstractModel
+        Kasten${KV}/AbstractModel
         PATH_SUFFIXES
         KDE
         HINTS
@@ -58,25 +59,25 @@ if( LIBKASTEN_FIND_VERSION EQUAL 1 )
     )


-    if( KASTEN1_NORMAL_INCLUDE_DIR AND KASTEN1_CAMELCASE_INCLUDE_DIR AND
-        KASTEN1_CORE_LIB AND KASTEN1_GUI_LIB AND KASTEN1_CONTROLLERS_LIB )
+    if( KASTEN1OR2_NORMAL_INCLUDE_DIR AND KASTEN1OR2_CAMELCASE_INCLUDE_DIR AND
+        KASTEN1OR2_CORE_LIB AND KASTEN1OR2_GUI_LIB AND KASTEN1OR2_CONTROLLERS_LIB )
         set( LIBKASTEN_FOUND TRUE )
-    endif( KASTEN1_NORMAL_INCLUDE_DIR AND KASTEN1_CAMELCASE_INCLUDE_DIR AND
-        KASTEN1_CORE_LIB AND KASTEN1_GUI_LIB AND KASTEN1_CONTROLLERS_LIB )
+    endif( KASTEN1OR2_NORMAL_INCLUDE_DIR AND KASTEN1OR2_CAMELCASE_INCLUDE_DIR AND
+        KASTEN1OR2_CORE_LIB AND KASTEN1OR2_GUI_LIB AND KASTEN1OR2_CONTROLLERS_LIB )

     if( LIBKASTEN_FOUND )
-        set( LIBKASTEN_VERSION 1 )
+        set( LIBKASTEN_VERSION ${KV} )
         set( LIBKASTEN_INCLUDE_DIRS
-            ${KASTEN1_NORMAL_INCLUDE_DIR}
-            ${KASTEN1_CAMELCASE_INCLUDE_DIR}
+            ${KASTEN1OR2_NORMAL_INCLUDE_DIR}
+            ${KASTEN1OR2_CAMELCASE_INCLUDE_DIR}
         )
         set( LIBKASTEN_LIBRARIES
-            ${KASTEN1_CORE_LIB}
-            ${KASTEN1_GUI_LIB}
-            ${KASTEN1_CONTROLLERS_LIB}
+            ${KASTEN1OR2_CORE_LIB}
+            ${KASTEN1OR2_GUI_LIB}
+            ${KASTEN1OR2_CONTROLLERS_LIB}
         )
     endif( LIBKASTEN_FOUND )
-endif( LIBKASTEN_FIND_VERSION EQUAL 1 )
+endif( LIBKASTEN_FIND_VERSION EQUAL 1 OR LIBKASTEN_FIND_VERSION EQUAL 2 )

 if( LIBKASTEN_FIND_VERSION EQUAL 0 )
     find_library( LIBKASTENCORE0_LIBRARY
diff --git a/cmake/modules/FindLibOktetaKasten.cmake b/cmake/modules/FindLibOktetaKasten.cmake
index 973f0f1..0985914 100644
--- a/cmake/modules/FindLibOktetaKasten.cmake
+++ b/cmake/modules/FindLibOktetaKasten.cmake
@@ -1,4 +1,4 @@
-# - Find Okteta Kasten libraries, v0 or v1
+# - Find Okteta Kasten libraries, v0, v1 or v2
 #
 # This module defines
 #  LIBOKTETAKASTEN_FOUND - whether the Okteta Kasten libraries were found
@@ -7,66 +7,128 @@
 #  LIBOKTETAKASTEN_INCLUDE_DIRS - the include paths of the Okteta Kasten libraries


-if( LIBOKTETAKASTEN_INCLUDE_DIRS AND LIBOKTETAKASTEN_LIBRARIES AND LIBOKTETAKASTEN_VERSION )
+if( LIBOKTETAKASTEN_INCLUDE_DIRS AND LIBOKTETAKASTEN_LIBRARIES AND LIBOKTETAKASTEN_VERSION AND
+    LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION AND LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION )
     # Already in cache, be silent
     set( OktetaKasten_FIND_QUIETLY TRUE )
-endif( LIBOKTETAKASTEN_INCLUDE_DIRS AND LIBOKTETAKASTEN_LIBRARIES AND LIBOKTETAKASTEN_VERSION )
+endif( LIBOKTETAKASTEN_INCLUDE_DIRS AND LIBOKTETAKASTEN_LIBRARIES AND LIBOKTETAKASTEN_VERSION AND
+       LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION AND LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION )


-# First search version 1
-find_library( LIBOKTETA1KASTEN1CORE_LIBRARY
+# First search version 2
+find_library( LIBOKTETA1KASTEN2CORE_LIBRARY
     NAMES
-    kasten1okteta1core
+    kasten2okteta1core
     HINTS
     ${LIB_INSTALL_DIR}
     ${KDE4_LIB_DIR}
 )

-find_library( LIBOKTETA1KASTEN1GUI_LIBRARY
+find_library( LIBOKTETA1KASTEN2GUI_LIBRARY
     NAMES
-    kasten1okteta1gui
+    kasten2okteta1gui
     HINTS
     ${LIB_INSTALL_DIR}
     ${KDE4_LIB_DIR}
 )

-find_library( LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY
+find_library( LIBOKTETA1KASTEN2CONTROLLERS_LIBRARY
     NAMES
-    kasten1okteta1controllers
+    kasten2okteta1controllers
     HINTS
     ${LIB_INSTALL_DIR}
     ${KDE4_LIB_DIR}
 )


-find_path( LIBOKTETAKASTEN_INCLUDE_DIR
+find_path( LIBOKTETA1KASTEN2_INCLUDE_DIR
     NAMES
     bytearraydocument.h
     PATH_SUFFIXES
-    kasten1/okteta1
+    kasten2/okteta1
     HINTS
     ${INCLUDE_INSTALL_DIR}
     ${KDE4_INCLUDE_DIR}
 )

-if( LIBOKTETAKASTEN_INCLUDE_DIR AND
-    LIBOKTETA1KASTEN1CORE_LIBRARY AND LIBOKTETA1KASTEN1GUI_LIBRARY AND LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY )
+if( LIBOKTETA1KASTEN2_INCLUDE_DIR AND
+    LIBOKTETA1KASTEN2CORE_LIBRARY AND LIBOKTETA1KASTEN2GUI_LIBRARY AND LIBOKTETA1KASTEN2CONTROLLERS_LIBRARY )
     set( LIBOKTETAKASTEN_FOUND  TRUE )
-endif( LIBOKTETAKASTEN_INCLUDE_DIR AND
-    LIBOKTETA1KASTEN1CORE_LIBRARY AND LIBOKTETA1KASTEN1GUI_LIBRARY AND LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY )
+endif( LIBOKTETA1KASTEN2_INCLUDE_DIR AND
+    LIBOKTETA1KASTEN2CORE_LIBRARY AND LIBOKTETA1KASTEN2GUI_LIBRARY AND LIBOKTETA1KASTEN2CONTROLLERS_LIBRARY )

 if( LIBOKTETAKASTEN_FOUND )
-    set( LIBOKTETAKASTEN_VERSION 1 )
+    set( LIBOKTETAKASTEN_VERSION 2 )
+    set( LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION 2 )
+    set( LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION 1 )
     set( LIBOKTETAKASTEN_LIBRARIES
-        ${LIBOKTETA1KASTEN1CORE_LIBRARY}
-        ${LIBOKTETA1KASTEN1GUI_LIBRARY}
-        ${LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY}
+        ${LIBOKTETA1KASTEN2CORE_LIBRARY}
+        ${LIBOKTETA1KASTEN2GUI_LIBRARY}
+        ${LIBOKTETA1KASTEN2CONTROLLERS_LIBRARY}
     )
     set( LIBOKTETAKASTEN_INCLUDE_DIRS
-        ${LIBOKTETAKASTEN_INCLUDE_DIR}
+        ${LIBOKTETA1KASTEN2_INCLUDE_DIR}
     )
 endif( LIBOKTETAKASTEN_FOUND )

+# Then search version 1
+if( NOT LIBOKTETAKASTEN_FOUND )
+    find_library( LIBOKTETA1KASTEN1CORE_LIBRARY
+        NAMES
+        kasten1okteta1core
+        HINTS
+        ${LIB_INSTALL_DIR}
+        ${KDE4_LIB_DIR}
+    )
+
+    find_library( LIBOKTETA1KASTEN1GUI_LIBRARY
+        NAMES
+        kasten1okteta1gui
+        HINTS
+        ${LIB_INSTALL_DIR}
+        ${KDE4_LIB_DIR}
+    )
+
+    find_library( LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY
+        NAMES
+        kasten1okteta1controllers
+        HINTS
+        ${LIB_INSTALL_DIR}
+        ${KDE4_LIB_DIR}
+    )
+
+
+    find_path( LIBOKTETA1KASTEN1_INCLUDE_DIR
+        NAMES
+        bytearraydocument.h
+        PATH_SUFFIXES
+        kasten1/okteta1
+        HINTS
+        ${INCLUDE_INSTALL_DIR}
+        ${KDE4_INCLUDE_DIR}
+    )
+
+    if( LIBOKTETA1KASTEN1_INCLUDE_DIR AND
+        LIBOKTETA1KASTEN1CORE_LIBRARY AND LIBOKTETA1KASTEN1GUI_LIBRARY AND LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY )
+        set( LIBOKTETAKASTEN_FOUND  TRUE )
+    endif( LIBOKTETA1KASTEN1_INCLUDE_DIR AND
+        LIBOKTETA1KASTEN1CORE_LIBRARY AND LIBOKTETA1KASTEN1GUI_LIBRARY AND LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY )
+
+    if( LIBOKTETAKASTEN_FOUND )
+        set( LIBOKTETAKASTEN_VERSION 1 )
+        set( LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION 1 )
+        set( LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION 1 )
+        set( LIBOKTETAKASTEN_LIBRARIES
+            ${LIBOKTETA1KASTEN1CORE_LIBRARY}
+            ${LIBOKTETA1KASTEN1GUI_LIBRARY}
+            ${LIBOKTETA1KASTEN1CONTROLLERS_LIBRARY}
+        )
+        set( LIBOKTETAKASTEN_INCLUDE_DIRS
+            ${LIBOKTETA1KASTEN1_INCLUDE_DIR}
+        )
+    endif( LIBOKTETAKASTEN_FOUND )
+endif( NOT LIBOKTETAKASTEN_FOUND )
+
 # Then search version 0
 if( NOT LIBOKTETAKASTEN_FOUND )
     find_library( LIBOKTETAKASTENCORE0_LIBRARY
@@ -112,6 +174,8 @@ if( NOT LIBOKTETAKASTEN_FOUND )

     if( LIBOKTETAKASTEN_FOUND )
         set( LIBOKTETAKASTEN_VERSION 0 )
+        set( LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION 0 )
+        set( LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION 0 )
         set( LIBOKTETAKASTEN_INCLUDE_DIRS
             ${LIBOKTETAKASTEN0_INCLUDE_DIR}
         )
@@ -138,4 +202,6 @@ mark_as_advanced(
     LIBOKTETAKASTEN_INCLUDE_DIRS
     LIBOKTETAKASTEN_LIBRARIES
     LIBOKTETAKASTEN_VERSION
+    LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION
+    LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION
 )
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 1545d8c..aa0a0e6 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -6,8 +6,8 @@ macro_log_feature( LIBOKTETAKASTEN_FOUND
 )

 if( LIBOKTETAKASTEN_FOUND )
-set( LIBOKTETA_FIND_VERSION ${LIBOKTETAKASTEN_VERSION} )
-set( LIBKASTEN_FIND_VERSION ${LIBOKTETAKASTEN_VERSION} )
+set( LIBOKTETA_FIND_VERSION ${LIBOKTETAKASTEN_NEEDS_OKTETA_VERSION} )
+set( LIBKASTEN_FIND_VERSION ${LIBOKTETAKASTEN_NEEDS_KASTEN_VERSION} )
 macro_optional_find_package( LibOkteta )
 macro_optional_find_package( LibKasten )

@@ -16,7 +16,7 @@ macro_log_feature( LIBOKTETA_FOUND
   "" "Required for building Okteta KDevelop plugin."
 )
 macro_log_feature( LIBKASTEN_FOUND
-  "libkasten v${LIBKASTEN_FIND_VERSION}" "Kasten libraries" "kdesk/okteta/libs" FALSE
+  "libkasten v${LIBKASTEN_FIND_VERSION}" "Kasten libraries" "kdesk/okteta/libs/kasten" FALSE
   "" "Required for building Okteta KDevelop plugin."
 )
 endif( LIBOKTETAKASTEN_FOUND )
diff --git a/utils/okteta/kastentoolviewwidget.cpp b/utils/okteta/kastentoolviewwidget.cpp
index b10974e..6ec4f69 100644
--- a/utils/okteta/kastentoolviewwidget.cpp
+++ b/utils/okteta/kastentoolviewwidget.cpp
@@ -27,7 +27,10 @@
 // Okteta Kasten
 #include <bytearrayview.h>
 // Kasten
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+#include <Kasten2/AbstractToolView>
+#include <Kasten2/AbstractTool>
+#elif KASTEN_VERSION == 1
 #include <Kasten1/AbstractToolView>
 #include <Kasten1/AbstractTool>
 #else
diff --git a/utils/okteta/kdevokteta.rc b/utils/okteta/kdevokteta.rc
index e5314cf..b9ac33c 100644
--- a/utils/okteta/kdevokteta.rc
+++ b/utils/okteta/kdevokteta.rc
@@ -1,5 +1,5 @@
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="okteta" version="1">
+<gui name="okteta" version="2">
 <MenuBar>
   <Menu name="file">
     <Action name="file_save" group="save_merge" /> <!-- TODO: why isn't this offered by the host? -->
@@ -35,34 +35,45 @@
     <Separator group="edit_find_merge" />
     <Action name="goto_offset" group="edit_find_merge" />
   </Menu>
-  <Menu name="view"><text>View</text>
-    <Action name="view_zoom_in" group="view_operations" />
-    <Action name="view_zoom_out" group="view_operations" />
-    <Separator group="view_operations" />
-    <Action name="view_showsnonprinting" group="view_operations" />
-    <Action name="view_lineoffset" group="view_operations" />
-    <Action name="togglecolumns" group="view_operations" />
-    <Separator group="view_operations" />
-    <Action name="view_valuecoding" group="view_operations" />
-    <Action name="view_charencoding" group="view_operations" />
-    <Separator group="view_operations" />
-    <Action name="view_bytesperline" group="view_operations" />
-    <Action name="view_bytespergroup" group="view_operations" />
-    <Action name="resizestyle" group="view_operations" />
-    <Action name="viewmode" group="view_operations" />
+
+  <Menu name="editor">
+
+    <Menu name="view"><text>View</text>
+      <Action name="view_zoom_in" group="view_operations" />
+      <Action name="view_zoom_out" group="view_operations" />
+      <Separator group="view_operations" />
+      <Action name="view_showsnonprinting" group="view_operations" />
+      <Action name="view_lineoffset" group="view_operations" />
+      <Action name="togglecolumns" group="view_operations" />
+      <Separator group="view_operations" />
+      <Action name="view_valuecoding" group="view_operations" />
+      <Action name="view_charencoding" group="view_operations" />
+      <Separator group="view_operations" />
+      <Action name="view_bytesperline" group="view_operations" />
+      <Action name="view_bytespergroup" group="view_operations" />
+      <Action name="resizestyle" group="view_operations" />
+      <Action name="viewmode" group="view_operations" />
+      <Separator/>
+      <Action name="view_profile" />
+    </Menu>
+    <Menu name="bookmarks"><text>Bookmarks</text>
+      <Action name="bookmark_add" />
+      <Action name="bookmark_edit" />
+      <Separator/>
+      <Action name="bookmark_replace" />
+      <Action name="bookmark_remove" />
+      <Action name="bookmark_remove_all" />
+      <Separator/>
+      <Action name="bookmark_previous" />
+      <Action name="bookmark_next" />
+      <Separator/>
+      <ActionList name="bookmark_list" />
+    </Menu>
+
   </Menu>
-  <Menu name="bookmarks"><text>Bookmarks</text>
-    <Action name="bookmark_add" />
-    <Action name="bookmark_edit" />
-    <Separator/>
-    <Action name="bookmark_replace" />
-    <Action name="bookmark_remove" />
-    <Action name="bookmark_remove_all" />
-    <Separator/>
-    <Action name="bookmark_previous" />
-    <Action name="bookmark_next" />
-    <Separator/>
-    <ActionList name="bookmark_list" />
+
+  <Menu name="settings">
+    <Action name="settings_viewprofiles_manage" group="configure_merge" />
   </Menu>
 </MenuBar>

diff --git a/utils/okteta/oktetadocument.cpp b/utils/okteta/oktetadocument.cpp
index abb047d..6af5c11 100644
--- a/utils/okteta/oktetadocument.cpp
+++ b/utils/okteta/oktetadocument.cpp
@@ -23,9 +23,15 @@
 #include "oktetadocument.h"

 // plugin
+#include "oktetaplugin.h"
 #include "oktetaview.h"
 // Okteta
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+#include <kasten2/okteta1/bytearrayviewprofilemanager.h>
+#include <kasten2/okteta1/bytearrayviewprofilesynchronizer.h>
+#include <kasten2/okteta1/bytearrayrawfilesynchronizerfactory.h>
+#include <kasten2/okteta1/bytearraydocument.h>
+#elif KASTEN_VERSION == 1
 #include <kasten1/okteta1/bytearrayrawfilesynchronizerfactory.h>
 #include <kasten1/okteta1/bytearraydocument.h>
 #else
@@ -33,7 +39,13 @@
 #include <kasten/bytearraydocument.h>
 #endif
 // Kasten
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+#include <Kasten2/JobManager>
+#include <Kasten2/AbstractLoadJob>
+#include <Kasten2/AbstractSyncToRemoteJob>
+#include <Kasten2/AbstractSyncFromRemoteJob>
+#include <Kasten2/AbstractModelSynchronizer>
+#elif KASTEN_VERSION == 1
 #include <Kasten1/JobManager>
 #include <Kasten1/AbstractLoadJob>
 #include <Kasten1/AbstractSyncToRemoteJob>
@@ -86,7 +98,11 @@ KTextEditor::Cursor OktetaDocument::cursorPosition() const { return KTextEditor:
 IDocument::DocumentState OktetaDocument::state() const
 {
     return mByteArrayDocument ?
+#if KASTEN_VERSION == 2
+               ( mByteArrayDocument->synchronizer()->localSyncState() == Kasten::LocalHasChanges ?
+#else
                ( mByteArrayDocument->localSyncState() == Kasten::LocalHasChanges ?
+#endif
                    IDocument::Modified :
                    IDocument::Clean ) :
                IDocument::Clean;
@@ -105,7 +121,7 @@ bool OktetaDocument::save( IDocument::DocumentSaveMode mode )

     Kasten::AbstractSyncToRemoteJob* syncJob = synchronizer->startSyncToRemote();
     const bool syncSucceeded =
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 1 || KASTEN_VERSION == 2
         Kasten::JobManager::executeJob( syncJob );
 #else
         Kasten::JobManager::executeJob( syncJob, qApp->activeWindow() );
@@ -127,7 +143,7 @@ void OktetaDocument::reload()

     Kasten::AbstractSyncFromRemoteJob* syncJob = synchronizer->startSyncFromRemote();
     const bool syncSucceeded =
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 1 || KASTEN_VERSION == 2
         Kasten::JobManager::executeJob( syncJob );
 #else
         Kasten::JobManager::executeJob( syncJob, qApp->activeWindow() );
@@ -227,7 +243,10 @@ Sublime::View* OktetaDocument::newView( Sublime::Document* document )
         Kasten::AbstractModelSynchronizer* synchronizer = synchronizerFactory->createSynchronizer();

         Kasten::AbstractLoadJob* loadJob = synchronizer->startLoad( url() );
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+        connect( loadJob, SIGNAL(documentLoaded(Kasten2::AbstractDocument*)),
+                 SLOT(onByteArrayDocumentLoaded(Kasten2::AbstractDocument*)) );
+#elif KASTEN_VERSION == 1
         connect( loadJob, SIGNAL(documentLoaded(Kasten1::AbstractDocument*)),
                  SLOT(onByteArrayDocumentLoaded(Kasten1::AbstractDocument*)) );
 #else
@@ -235,7 +254,7 @@ Sublime::View* OktetaDocument::newView( Sublime::Document* document )
                  SLOT(onByteArrayDocumentLoaded(Kasten::AbstractDocument*)) );
 #endif
     const bool syncSucceeded =
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 1 || KASTEN_VERSION == 2
         Kasten::JobManager::executeJob( loadJob );
 #else
         Kasten::JobManager::executeJob( loadJob, qApp->activeWindow() );
@@ -244,7 +263,15 @@ Sublime::View* OktetaDocument::newView( Sublime::Document* document )
         delete synchronizerFactory;
     }

+#if KASTEN_VERSION == 2
+    Kasten::ByteArrayViewProfileManager* const viewProfileManager = mPlugin->viewProfileManager();
+    Kasten::ByteArrayViewProfileSynchronizer* viewProfileSynchronizer =
+        new Kasten::ByteArrayViewProfileSynchronizer( viewProfileManager );
+    viewProfileSynchronizer->setViewProfileId( viewProfileManager->defaultViewProfileId() );
+    return new OktetaView( this, viewProfileSynchronizer );
+#else
     return new OktetaView( this );
+#endif
 }

 bool OktetaDocument::closeDocument(bool silent)
@@ -257,7 +284,9 @@ void OktetaDocument::onByteArrayDocumentLoaded( Kasten::AbstractDocument* docume
     if( document )
     {
         mByteArrayDocument = static_cast<Kasten::ByteArrayDocument*>( document );
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+        connect( mByteArrayDocument, SIGNAL(localSyncStateChanged(Kasten2::LocalSyncState)),
+#elif KASTEN_VERSION == 1
         connect( mByteArrayDocument, SIGNAL(localSyncStateChanged(Kasten1::LocalSyncState)),
 #else
         connect( mByteArrayDocument, SIGNAL(localSyncStateChanged(Kasten::LocalSyncState)),
diff --git a/utils/okteta/oktetadocument.h b/utils/okteta/oktetadocument.h
index 56eba46..c03573a 100644
--- a/utils/okteta/oktetadocument.h
+++ b/utils/okteta/oktetadocument.h
@@ -85,7 +85,9 @@ class OktetaDocument : public Sublime::UrlDocument, public IDocument
   protected Q_SLOTS:
     void onByteArrayDocumentChanged();
     // Moc is too primitive to know about namespace aliase
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+    void onByteArrayDocumentLoaded( Kasten2::AbstractDocument* document );
+#elif KASTEN_VERSION == 1
     void onByteArrayDocumentLoaded( Kasten1::AbstractDocument* document );
 #else
     void onByteArrayDocumentLoaded( Kasten::AbstractDocument* document );
diff --git a/utils/okteta/oktetaglobal.h b/utils/okteta/oktetaglobal.h
index 0113bbb..857ba55 100644
--- a/utils/okteta/oktetaglobal.h
+++ b/utils/okteta/oktetaglobal.h
@@ -24,7 +24,11 @@
 #define OKTETAGLOBAL_H

 // Adaptions for the different version of Kasten and Okteta
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+namespace Kasten2 {}
+namespace Kasten = Kasten2;
+#define KASTEN_NAMESPACE Kasten2
+#elif KASTEN_VERSION == 1
 namespace Kasten1 {}
 namespace Kasten = Kasten1;
 #define KASTEN_NAMESPACE Kasten1
diff --git a/utils/okteta/oktetaplugin.cpp b/utils/okteta/oktetaplugin.cpp
index c8a7fd4..5691959 100644
--- a/utils/okteta/oktetaplugin.cpp
+++ b/utils/okteta/oktetaplugin.cpp
@@ -45,6 +45,10 @@
 #include <bookmarkstoolfactory.h>
 #include <structurestoolviewfactory.h>
 #include <structurestoolfactory.h>
+// Okteta Kasten
+#if KASTEN_VERSION == 2
+#include <bytearrayviewprofilemanager.h>
+#endif
 // KDev
 #include <project/projectmodel.h>
 #include <interfaces/icore.h>
@@ -77,15 +81,20 @@ void addTool( IUiController* uiController,


 OktetaPlugin::OktetaPlugin( QObject* parent, const QVariantList& args )
-  : IPlugin( OktetaPluginFactory::componentData(), parent ),
-    mDocumentFactory( new OktetaDocumentFactory(this) )
+  : IPlugin( OktetaPluginFactory::componentData(), parent )
+  , mDocumentFactory( new OktetaDocumentFactory(this) )
+#if KASTEN_VERSION == 2
+  , mViewProfileManager( new Kasten::ByteArrayViewProfileManager() )
+#endif
 {
     Q_UNUSED(args)

+#if KASTEN_VERSION == 0 || KASTEN_VERSION == 1
     KLocale* globalLocale = KGlobal::locale();
     globalLocale->insertCatalog( QString::fromLatin1("liboktetacore") );
     globalLocale->insertCatalog( QString::fromLatin1("libkasten") );
     globalLocale->insertCatalog( QString::fromLatin1("liboktetakasten") );
+#endif

     IUiController* uiController = core()->uiController();
     addTool( uiController, new Kasten::ChecksumToolViewFactory(), new Kasten::ChecksumToolFactory() );
diff --git a/utils/okteta/oktetaplugin.h b/utils/okteta/oktetaplugin.h
index 3eec9f7..d848aae 100644
--- a/utils/okteta/oktetaplugin.h
+++ b/utils/okteta/oktetaplugin.h
@@ -23,6 +23,8 @@
 #ifndef OKTETAPLUGIN_H
 #define OKTETAPLUGIN_H

+// Plugin
+#include "oktetaglobal.h"
 // KDev
 #include <interfaces/iplugin.h>
 // Qt
@@ -30,6 +32,10 @@

 class KUrl;

+namespace KASTEN_NAMESPACE
+{
+class ByteArrayViewProfileManager;
+}

 namespace KDevelop
 {
@@ -48,11 +54,19 @@ class OktetaPlugin: public IPlugin
   public: // KDevelop::IPlugin API
     virtual ContextMenuExtension contextMenuExtension( Context* context );

+#if KASTEN_VERSION == 2
+  public:
+    Kasten::ByteArrayViewProfileManager* viewProfileManager() const { return mViewProfileManager; }
+#endif
+
   private Q_SLOTS:
     void onOpenTriggered();

   protected:
     OktetaDocumentFactory* mDocumentFactory;
+#if KASTEN_VERSION == 2
+    Kasten::ByteArrayViewProfileManager* const mViewProfileManager;
+#endif
     QList<KUrl> mContextUrls;
 };

diff --git a/utils/okteta/oktetatoolviewfactory.cpp b/utils/okteta/oktetatoolviewfactory.cpp
index ed0cf13..fffa24e 100644
--- a/utils/okteta/oktetatoolviewfactory.cpp
+++ b/utils/okteta/oktetatoolviewfactory.cpp
@@ -25,7 +25,11 @@
 // plugin
 #include "kastentoolviewwidget.h"
 // Kasten
-#if KASTEN_VERSION == 1
+#if KASTEN_VERSION == 2
+#include <Kasten2/AbstractToolViewFactory>
+#include <Kasten2/AbstractToolFactory>
+#include <Kasten2/AbstractToolView>
+#elif KASTEN_VERSION == 1
 #include <Kasten1/AbstractToolViewFactory>
 #include <Kasten1/AbstractToolFactory>
 #include <Kasten1/AbstractToolView>
diff --git a/utils/okteta/oktetaview.cpp b/utils/okteta/oktetaview.cpp
index 249aaaa..d4142f3 100644
--- a/utils/okteta/oktetaview.cpp
+++ b/utils/okteta/oktetaview.cpp
@@ -33,9 +33,15 @@
 namespace KDevelop
 {

+#if KASTEN_VERSION == 2
+OktetaView::OktetaView( OktetaDocument* document, Kasten::ByteArrayViewProfileSynchronizer* viewProfileSynchronizer )
+  : Sublime::View( document, View::TakeOwnership ),
+    mByteArrayView( new Kasten::ByteArrayView( document->byteArrayDocument(), viewProfileSynchronizer ) )
+#else
 OktetaView::OktetaView( OktetaDocument* document )
   : Sublime::View( document, View::TakeOwnership ),
     mByteArrayView( new Kasten::ByteArrayView( document->byteArrayDocument() ) )
+#endif
 {
 }

diff --git a/utils/okteta/oktetaview.h b/utils/okteta/oktetaview.h
index 29a6b39..6d2e655 100644
--- a/utils/okteta/oktetaview.h
+++ b/utils/okteta/oktetaview.h
@@ -29,6 +29,7 @@
 #include <sublime/view.h>

 namespace KASTEN_NAMESPACE {
+class ByteArrayViewProfileSynchronizer;
 class ByteArrayView;
 }

@@ -43,8 +44,11 @@ class OktetaView : public Sublime::View
   Q_OBJECT

   public:
+#if KASTEN_VERSION == 2
+    OktetaView( OktetaDocument* document, Kasten::ByteArrayViewProfileSynchronizer* viewProfileSynchronizer );
+#else
     explicit OktetaView( OktetaDocument* document );
-
+#endif
     virtual ~OktetaView();

   public:
diff --git a/utils/okteta/oktetawidget.cpp b/utils/okteta/oktetawidget.cpp
index 0fac371..cd020b7 100644
--- a/utils/okteta/oktetawidget.cpp
+++ b/utils/okteta/oktetawidget.cpp
@@ -39,6 +39,10 @@
 #include <viewconfigcontroller.h>
 #include <viewmodecontroller.h>
 #include <viewstatuscontroller.h>
+#if KASTEN_VERSION == 2
+#include <viewprofilecontroller.h>
+#include <viewprofilesmanagecontroller.h>
+#endif
 // Kasten
 #include <readonlycontroller.h>
 // #include <document/readonly/readonlybarcontroller.h>
@@ -54,6 +58,7 @@
 // KDevelop
 #include <sublime/view.h>
 // KDE
+#include <KLocale>
 #include <KAction>
 #include <KStandardAction>
 #include <KActionCollection>
@@ -73,7 +78,7 @@ OktetaWidget::OktetaWidget( QWidget* parent, Kasten::ByteArrayView* byteArrayVie
     setComponentData( plugin->componentData() );
     setXMLFile( "kdevokteta.rc" );

-    setupActions();
+    setupActions(plugin);

     QVBoxLayout* layout = new QVBoxLayout( this );
     layout->setMargin( 0 );
@@ -82,7 +87,7 @@ OktetaWidget::OktetaWidget( QWidget* parent, Kasten::ByteArrayView* byteArrayVie
     setFocusProxy( widget );
 }

-void OktetaWidget::setupActions()
+void OktetaWidget::setupActions(OktetaPlugin* plugin)
 {
     mControllers.append( new Kasten::VersionController(this) );
     mControllers.append( new Kasten::ReadOnlyController(this) );
@@ -103,6 +108,15 @@ void OktetaWidget::setupActions()
     mControllers.append( new Kasten::PrintController( this ) );
     mControllers.append( new Kasten::ViewConfigController(this) );
     mControllers.append( new Kasten::ViewModeController(this) );
+#if KASTEN_VERSION == 2
+    Kasten::ByteArrayViewProfileManager* viewProfileManager = plugin->viewProfileManager();
+    mControllers.append( new Kasten::ViewProfileController(viewProfileManager, mByteArrayView->widget(), this) );
+    mControllers.append( new Kasten::ViewProfilesManageController(this, viewProfileManager, mByteArrayView->widget()) );
+    // update the text of the viewprofiles_manage action, to make clear this is just for byte arrays
+    QAction* viewprofilesManageAction = actionCollection()->action(QLatin1String("settings_viewprofiles_manage"));
+    viewprofilesManageAction->setText( i18nc("@action:inmenu",
+                                             "Manage Byte Array View Profiles...") );
+#endif

 //     Kasten::StatusBar* bottomBar = static_cast<Kasten::StatusBar*>( statusBar() );
 //     mControllers.append( new ViewStatusController(bottomBar) );
@@ -111,7 +125,6 @@ void OktetaWidget::setupActions()

     foreach( Kasten::AbstractXmlGuiController* controller, mControllers )
         controller->setTargetModel( mByteArrayView );
-
 #if 0
     QDesignerFormWindowManagerInterface* manager = mDocument->form()->core()->formWindowManager();
     KActionCollection* ac = actionCollection();
diff --git a/utils/okteta/oktetawidget.h b/utils/okteta/oktetawidget.h
index dfc9907..e62e58e 100644
--- a/utils/okteta/oktetawidget.h
+++ b/utils/okteta/oktetawidget.h
@@ -55,10 +55,10 @@ class OktetaWidget : public QWidget, public KXMLGUIClient
         void editSignals();
         void editTabOrder();
 #endif
-  protected:
-    void setupActions();
+  private:
+    void setupActions(OktetaPlugin* plugin);

-  protected:
+  private:
     Kasten::ByteArrayView* mByteArrayView;
     // TODO: move this to the plugin, per mainwindow
     QList<Kasten::AbstractXmlGuiController*> mControllers;


Для Qt Creator:

Код: Выделить всё

--- src/qtcreatorplugin.pri    2011-11-20 11:58:43.057821655 +0100
+++ src/qtcreatorplugin.pri.new    2011-11-20 11:58:38.461879432 +0100
@@ -63,13 +63,7 @@
         QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../../,-rpath,@executable_path/../
     }
 } else:linux-* {
-    #do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
-    QMAKE_RPATHDIR += \$\$ORIGIN
-    QMAKE_RPATHDIR += \$\$ORIGIN/..
-    QMAKE_RPATHDIR += \$\$ORIGIN/../..
-    IDE_PLUGIN_RPATH = $$join(QMAKE_RPATHDIR, ":")
-    QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${IDE_PLUGIN_RPATH}\'
-    QMAKE_RPATHDIR =
+    QMAKE_RPATHDIR += /usr/$$IDE_LIBRARY_BASENAME/qtcreator
 }


--- src/libs/3rdparty/botan/botan.pri    2012-05-09 14:13:19.000000000 +0200
+++ src/libs/3rdparty/botan/botan.pri    2012-05-13 19:53:16.599828913 +0200
@@ -1,2 +1,2 @@
-INCLUDEPATH *= $$PWD/build
-LIBS *= -l$$qtLibraryName(Botan)
+INCLUDEPATH *= /usr/include
+LIBS *= -lbotan
--- src/libs/libs.pro    2012-05-09 14:13:19.000000000 +0200
+++ src/libs/libs.pro    2012-05-13 19:53:45.854461132 +0200
@@ -5,7 +5,6 @@
 # aggregation and extensionsystem are directly in src.pro
 # because of dependencies of app
 SUBDIRS   = \
-    3rdparty \
     utils \
     utils/process_stub.pro \
     languageutils \


GTK3:

Код: Выделить всё

https://bugzilla.novell.com/show_bug.cgi?id=369696

This patch adds support for /usr/local without setting of GTK_PATH.
/usr/local path preference is a behavior expected by FHS.
This patch cannot be upstreamed as is:
- It needs to be platform dependent.
- It needs to solve situation, when prefix != /usr (and maybe add /usr
  to the search path, but after the default_dir).
- There is no consensus for /usr/local/lib x /usr/local/lib64 yet.
  Defaulting to /usr/local/lib64 may need /usr/local/share/config.site
  file (bnc#382344).

Note that the patch it does not provide solution for bi-arch path clash:
http://bugzilla.gnome.org/show_bug.cgi?id=153848

Index: gtk/gtkmodules.c
===================================================================
--- gtk/gtkmodules.c.orig
+++ gtk/gtkmodules.c
@@ -60,6 +60,7 @@ get_module_path (void)
   gchar *home_gtk_dir = NULL;
   gchar *module_path;
   gchar *default_dir;
+  gchar *local_dir;
   static gchar **result = NULL;

   if (result)
@@ -73,25 +74,32 @@ get_module_path (void)
   exe_prefix = g_getenv ("GTK_EXE_PREFIX");

   if (exe_prefix)
+  {
     default_dir = g_build_filename (exe_prefix, "lib", "gtk-3.0", NULL);
+    local_dir = g_build_filename ("/usr/local", "lib", "gtk-3.0", NULL);
+  }
   else
+  {
     default_dir = g_build_filename (_gtk_get_libdir (), "gtk-3.0", NULL);
+    local_dir = g_build_filename ("/usr/local", SUSE_HACK_LIB, "gtk-3.0", NULL);
+  }

   if (module_path_env && home_gtk_dir)
     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
-                module_path_env, home_gtk_dir, default_dir, NULL);
+                module_path_env, home_gtk_dir, local_dir, default_dir, NULL);
   else if (module_path_env)
     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
-                module_path_env, default_dir, NULL);
+                module_path_env, local_dir, default_dir, NULL);
   else if (home_gtk_dir)
     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
-                home_gtk_dir, default_dir, NULL);
+                home_gtk_dir, local_dir, default_dir, NULL);
   else
     module_path = g_build_path (G_SEARCHPATH_SEPARATOR_S,
-                default_dir, NULL);
+                local_dir, default_dir, NULL);

   g_free (home_gtk_dir);
   g_free (default_dir);
+  g_free (local_dir);

   result = pango_split_file_list (module_path);
   g_free (module_path);
Index: gtk/Makefile.am
===================================================================
--- gtk/Makefile.am.orig
+++ gtk/Makefile.am
@@ -32,8 +32,10 @@ endif
 endif
 endif

+suse_hack_lib=`echo $(libdir) | sed 's:.*/::'`
 AM_CPPFLAGS =                        \
     -DG_LOG_DOMAIN=\"Gtk\"                \
+    -DSUSE_HACK_LIB=\"$(suse_hack_lib)\"        \
     -DGTK_LIBDIR=\"$(libdir)\"            \
     -DGTK_DATADIR=\"$(datadir)\"            \
     -DGTK_DATA_PREFIX=\"$(prefix)\"            \
Index: gtk/Makefile.in
===================================================================
--- gtk/Makefile.in.orig
+++ gtk/Makefile.in
@@ -806,8 +806,10 @@ SUBDIRS = a11y . tests
 @HAVE_CUPS_FALSE@@HAVE_PAPI_CUPS_FALSE@@HAVE_PAPI_TRUE@GTK_PRINT_BACKENDS = file,papi
 @HAVE_CUPS_TRUE@@HAVE_PAPI_CUPS_FALSE@GTK_PRINT_BACKENDS = file,cups
 @HAVE_PAPI_CUPS_TRUE@GTK_PRINT_BACKENDS = file,papi,cups
+suse_hack_lib=`echo $(libdir) | sed 's:.*/::'`
 AM_CPPFLAGS = \
     -DG_LOG_DOMAIN=\"Gtk\"                \
+    -DSUSE_HACK_LIB=\"$(suse_hack_lib)\"        \
     -DGTK_LIBDIR=\"$(libdir)\"            \
     -DGTK_DATADIR=\"$(datadir)\"            \
     -DGTK_DATA_PREFIX=\"$(prefix)\"            \


Index: gtk+-2.90.5/gtk/gtkmodules.c
===================================================================
--- gtk+-2.90.5.orig/gtk/gtkmodules.c
+++ gtk+-2.90.5/gtk/gtkmodules.c
@@ -67,7 +67,7 @@ get_module_path (void)
   if (home_dir)
     home_gtk_dir = g_build_filename (home_dir, ".gtk-3.0", NULL);

-  module_path_env = g_getenv ("GTK_PATH");
+  module_path_env = g_getenv ("GTK_PATH64");
   exe_prefix = g_getenv ("GTK_EXE_PREFIX");

   if (exe_prefix)


Index: gtk+-2.90.6/gtk/gtkfontsel.c
===================================================================
--- gtk+-2.90.6.orig/gtk/deprecated/gtkfontsel.c
+++ gtk+-2.90.6/gtk/deprecated/gtkfontsel.c
@@ -130,6 +130,8 @@ struct _GtkFontSelectionDialogPrivate
 #define FONT_STYLE_LIST_WIDTH    170
 #define FONT_SIZE_LIST_WIDTH    60

+#define DELAY_REAL_SELECTION_MS    75
+
 /* These are what we use as the standard font sizes, for the size list.
  */
 static const guint16 font_sizes[] = {
@@ -612,10 +614,23 @@ static void
 gtk_font_selection_finalize (GObject *object)
 {
   GtkFontSelection *fontsel = GTK_FONT_SELECTION (object);
+  guint selection_timeout;

   gtk_font_selection_ref_family (fontsel, NULL);
   gtk_font_selection_ref_face (fontsel, NULL);

+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "font-selection-timeout"));
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "style-selection-timeout"));
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "size-selection-timeout"));
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
   G_OBJECT_CLASS (gtk_font_selection_parent_class)->finalize (object);
 }

@@ -652,6 +667,9 @@ gtk_font_selection_reload_fonts (GtkFont
       PangoFontDescription *desc;
       desc = gtk_font_selection_get_font_description (fontsel);

+      /* Disable selection timeout */
+      g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (1));
+
       gtk_font_selection_show_available_fonts (fontsel);
       gtk_font_selection_show_available_sizes (fontsel, TRUE);
       gtk_font_selection_show_available_styles (fontsel);
@@ -659,6 +677,9 @@ gtk_font_selection_reload_fonts (GtkFont
       gtk_font_selection_select_font_desc (fontsel, desc, NULL, NULL);
       gtk_font_selection_scroll_to_selection (fontsel);

+      /* Enable selection timeout */
+      g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (0));
+
       pango_font_description_free (desc);
     }
 }
@@ -737,21 +758,26 @@ gtk_font_selection_scroll_on_map (GtkWid
 }

 /* This is called when a family is selected in the list. */
-static void
-gtk_font_selection_select_font (GtkTreeSelection *selection,
-                gpointer          data)
+static gboolean
+gtk_font_selection_real_select_font (gpointer data)
 {
   GtkFontSelection *fontsel;
   GtkFontSelectionPrivate *priv;
+  GtkTreeSelection *selection;
   GtkTreeModel *model;
   GtkTreeIter iter;
 #ifdef INCLUDE_FONT_ENTRIES
   const gchar *family_name;
 #endif

+  if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
+    GDK_THREADS_ENTER ();
+
   fontsel = GTK_FONT_SELECTION (data);
   priv = fontsel->priv;

+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->family_list));
+
   if (gtk_tree_selection_get_selected (selection, &model, &iter))
     {
       PangoFontFamily *family;
@@ -772,6 +798,40 @@ gtk_font_selection_select_font (GtkTreeS

       g_object_unref (family);
     }
+
+  g_object_set_data (G_OBJECT (fontsel), "font-selection-timeout", GUINT_TO_POINTER (0));
+
+  if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
+    GDK_THREADS_LEAVE ();
+
+  /* Remove ourselves */
+  return FALSE;
+}
+
+static void
+gtk_font_selection_select_font (GtkTreeSelection *selection,
+                gpointer          data)
+{
+  GtkFontSelection *fontsel;
+  guint selection_timeout = 0;
+  guint immediate_selection = 0;
+
+  fontsel = GTK_FONT_SELECTION (data);
+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "font-selection-timeout"));
+  immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
+
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
+  if (immediate_selection)
+    {
+      gtk_font_selection_real_select_font (data);
+    }
+  else
+    {
+      selection_timeout = g_timeout_add (DELAY_REAL_SELECTION_MS, gtk_font_selection_real_select_font, data);
+      g_object_set_data (G_OBJECT (fontsel), "font-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+    }
 }

 static int
@@ -977,14 +1037,22 @@ gtk_font_selection_select_best_style (Gt


 /* This is called when a style is selected in the list. */
-static void
-gtk_font_selection_select_style (GtkTreeSelection *selection,
-                 gpointer          data)
+static gboolean
+gtk_font_selection_real_select_style (gpointer data)
 {
   GtkFontSelection *fontsel = GTK_FONT_SELECTION (data);
+  GtkFontSelectionPrivate *priv;
+  GtkTreeSelection *selection;
   GtkTreeModel *model;
   GtkTreeIter iter;

+  if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
+    GDK_THREADS_ENTER ();
+
+  priv = fontsel->priv;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->face_list));
+
   if (gtk_tree_selection_get_selected (selection, &model, &iter))
     {
       PangoFontFace *face;
@@ -996,6 +1064,40 @@ gtk_font_selection_select_style (GtkTree

   gtk_font_selection_show_available_sizes (fontsel, FALSE);
   gtk_font_selection_select_best_size (fontsel);
+
+  g_object_set_data (G_OBJECT (fontsel), "style-selection-timeout", GUINT_TO_POINTER (0));
+
+  if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
+    GDK_THREADS_LEAVE ();
+
+  /* Remove ourselves */
+  return FALSE;
+}
+
+static void
+gtk_font_selection_select_style (GtkTreeSelection *selection,
+                 gpointer          data)
+{
+  GtkFontSelection *fontsel;
+  guint selection_timeout = 0;
+  guint immediate_selection = 0;
+
+  fontsel = GTK_FONT_SELECTION (data);
+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "style-selection-timeout"));
+  immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
+
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
+  if (immediate_selection)
+    {
+      gtk_font_selection_real_select_style (data);
+    }
+  else
+   {
+      selection_timeout = g_timeout_add (DELAY_REAL_SELECTION_MS, gtk_font_selection_real_select_style, data);
+      g_object_set_data (G_OBJECT (fontsel), "style-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+   }
 }

 static void
@@ -1129,20 +1231,62 @@ gtk_font_selection_size_focus_out (GtkWi
 }

 /* This is called when a size is selected in the list. */
-static void
-gtk_font_selection_select_size (GtkTreeSelection *selection,
-                gpointer          data)
+static gboolean
+gtk_font_selection_real_select_size (gpointer data)
 {
   GtkFontSelection *fontsel = GTK_FONT_SELECTION (data);
+  GtkFontSelectionPrivate *priv;
+  GtkTreeSelection *selection;
   GtkTreeModel *model;
   GtkTreeIter iter;
   gint new_size;

+  if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
+    GDK_THREADS_ENTER ();
+
+  priv = fontsel->priv;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->size_list));
+
   if (gtk_tree_selection_get_selected (selection, &model, &iter))
     {
       gtk_tree_model_get (model, &iter, SIZE_COLUMN, &new_size, -1);
       gtk_font_selection_set_size (fontsel, new_size * PANGO_SCALE);
     }
+
+  g_object_set_data (G_OBJECT (fontsel), "size-selection-timeout", GUINT_TO_POINTER (0));
+
+  if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
+    GDK_THREADS_LEAVE ();
+
+  /* Remove ourselves */
+  return FALSE;
+}
+
+static void
+gtk_font_selection_select_size (GtkTreeSelection *selection,
+                gpointer          data)
+{
+  GtkFontSelection *fontsel;
+  guint selection_timeout = 0;
+  guint immediate_selection = 0;
+
+  fontsel = GTK_FONT_SELECTION (data);
+  selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "size-selection-timeout"));
+  immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
+
+  if (selection_timeout)
+    g_source_remove (selection_timeout);
+
+  if (immediate_selection)
+    {
+      gtk_font_selection_real_select_size (data);
+    }
+  else
+    {
+      selection_timeout = g_timeout_add (DELAY_REAL_SELECTION_MS, gtk_font_selection_real_select_size, data);
+      g_object_set_data (G_OBJECT (fontsel), "size-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+    }
 }

 static void
@@ -1444,6 +1588,9 @@ gtk_font_selection_select_font_desc (Gtk
   if (!new_family)
     return FALSE;

+  /* Disable selection timeout */
+  g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (1));
+
   if (pfamily)
     *pfamily = new_family;
   else
@@ -1494,6 +1641,9 @@ gtk_font_selection_select_font_desc (Gtk

   gtk_font_selection_set_size (fontsel, pango_font_description_get_size (new_desc));

+  /* Enable selection timeout */
+  g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (0));
+
   return TRUE;
 }


Продолжаем?
Спасибо сказали:
PVOzerski
Сообщения: 297
ОС: OpenSUSE, ALT Linux

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение PVOzerski »

Crazy писал(а):
03.10.2012 21:06
NickLion писал(а):
03.10.2012 19:11
Нет, патчи для данного дистрибутива. Сначала их кому-то написать надо, а потом сопровождать.

Что патчит то собираешься, KDE?

yars писал(а):
03.10.2012 20:20
Так что, извините, но... Oracle минус один балл (: .

много видел полезных патчей?

Насчет пользы - конечно, не знаю... На самом деле, сравнивать не так просто. Вы, например, ядро ванильное с kernel.org юзаете или дефолтное от Вашего дистра? Наверняка второе, правда? Я вот никогда ставить ванильное даже не пытался.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение Crazy »

NickLion писал(а):
03.10.2012 23:09
Продолжаем?

Конечно, захардкодить путы это серьезный фикс. :laugh:
А остальных дистрибутивах аналогичный патч пишут, или использую готовый кем то созданный?


PVOzerski писал(а):
03.10.2012 23:13
Насчет пользы - конечно, не знаю... На самом деле, сравнивать не так просто. Вы, например, ядро ванильное с kernel.org юзаете или дефолтное от Вашего дистра? Наверняка второе, правда? Я вот никогда ставить ванильное даже не пытался.

Представьте себе, использовал и все работало. А вы сами знаете чем отличается ванильное ядро, от дефолтного?)

Desipere in loco
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение diesel »

PVOzerski писал(а):
03.10.2012 23:13
Насчет пользы - конечно, не знаю... На самом деле, сравнивать не так просто. Вы, например, ядро ванильное с kernel.org юзаете или дефолтное от Вашего дистра? Наверняка второе, правда? Я вот никогда ставить ванильное даже не пытался.

если вы намекаете на то что система вообще нифига не запустится, если вы поставите ванильное ядро - это неправда. в большинстве случаев то что вы соберете из ванильных исходников, будет работать примерно так же, как как аналогичная версия с патчами дистрибутивов. Я когда-то собирал практически все программы которыми пользовался.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [NIXP] Oracle: «Мы действительно помогаем сделать Linux лучше, а не просто копируем»

Сообщение NickLion »

Crazy писал(а):
03.10.2012 23:38
Конечно, захардкодить путы это серьезный фикс. :laugh:

Если внимательно посмотрите, то там не только пути захардкожены. И это только 4 пакета. Даже пути, кто-то это должен делать и потом изменять, программки тоже ведь развиваются. Или те же spec файлы тоже кто-то должен писать. Я не говорю, что собрать дистрибутив = написать программы заново. Но это работа и её не мало.
Спасибо сказали: