Как скомпилировать ASL (расширенную библиотеку Adobe C ++ GUI) на Linux? - PullRequest
7 голосов
/ 24 июня 2011

Intro

Таким образом, мы провели несколько дней со всей нашей командой, состоящей из 2 человек, включая меня (это означает, что наши усилия были не такими профессиональными, как ваши), на CloudObserver . ASL .

Мы узнали , как скомпилировать ASL на Windows и Mac OS.

Мы создали несколько визуальных /графический графический интерфейс простые учебные пособия по ASL, которые прекрасно работают с Mac OS X и Windows, поэтому мы увидели, что библиотеки Adobe Source работают для создания хотя бы простых пользовательских интерфейсов и диалогов.

Чем мы начали пытаться заставить его работать в Linux.

Мясо

Мы начали с компиляции ASL в Linux, сначала исправив устаревшие asl_1.0.43_net_setup.sh.Это был довольно лёгкий вот наш код:

#!/bin/bash

ASL_DISTRO_NAME=asl_1.0.43.tgz
ASL_NAME=source_release
APL_DISTRO_NAME=apl_1.0.43.tgz
APL_VERSION=1.0.43
APL_NAME=platform_release
ASL_DISTRO_SITE=surfnet.dl.sourceforge.net
BOOST_NAME=boost_1_44_0
BOOST_VERSION=1.44.0
BOOST_DISTRO_NAME="$BOOST_NAME".tar.gz
#-L protects against redirects
CURL_CMD=curl\ -L 
INTEL_TBB_NAME=tbb30_018oss
INTEL_TBB_DISTRO_NAME="$INTEL_TBB_NAME"_src.tgz

# Run a command, and echo before doing so. Also checks the exit
# status and quits if there was an error.
#
# WARNING : Does *not* work when the command uses the redirection operator (>)
#
echo_run ()
{
    echo "$@"
    "$@"
    r=$?
    if test $r -ne 0 ; then
        exit $r
    fi
}

test_path()
{
    hash $1 1>/dev/null 2>/dev/null
}

WD=`pwd`
MACHINE=`uname`
HERE=`dirname $0`

cd $HERE

if [ "$1" != "" ]; then
    ASL_DISTRO_SITE="$1"
fi
#http://surfnet.dl.sourceforge.net/project/adobe-source/adobe-source/1.0.43/asl_1.0.43.tgz
if [ ! -e $ASL_DISTRO_NAME ]; then
   echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/adobe-source/adobe-source/$APL_VERSION/$ASL_DISTRO_NAME -o $ASL_DISTRO_NAME
fi

if [ ! -e $APL_DISTRO_NAME ]; then
   echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/adobe-source/adobe-source/$APL_VERSION/$APL_DISTRO_NAME -o $APL_DISTRO_NAME
fi

if [ ! -e $BOOST_DISTRO_NAME ]; then
    echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/boost/boost/$BOOST_VERSION/$BOOST_DISTRO_NAME -o $BOOST_DISTRO_NAME
fi

if [ ! -e $INTEL_TBB_DISTRO_NAME ]; then
    echo_run ${CURL_CMD} http://www.threadingbuildingblocks.org/uploads/78/154/3.0/$INTEL_TBB_DISTRO_NAME -o $INTEL_TBB_DISTRO_NAME
fi

if [ ! -d adobe_root ]; then
    echo_run mkdir adobe_root
fi

if [ ! -d adobe_root/adobe_source_libraries ]; then
   echo_run tar -xzf $ASL_DISTRO_NAME
   echo_run mv $ASL_NAME adobe_root/adobe_source_libraries
fi

if [ ! -d adobe_root/adobe_platform_libraries ]; then
   echo_run tar -xzf $APL_DISTRO_NAME
   echo_run mv $APL_NAME adobe_root/adobe_platform_libraries
fi

if [ ! -e adobe_root/boost_libraries/INSTALL ]; then
    # move the boost distro into place
    echo_run tar -xzf $BOOST_DISTRO_NAME
    echo_run rm -rf adobe_root/boost_libraries
    echo_run mv $BOOST_NAME adobe_root/boost_libraries
fi

if [ ! -e adobe_root/intel_tbb_libraries/README ]; then
    # move the intel_tbb distro into place
    echo_run tar -xzf $INTEL_TBB_DISTRO_NAME
    echo_run rm -rf adobe_root/intel_tbb_libraries
    echo_run mv $INTEL_TBB_NAME adobe_root/intel_tbb_libraries
fi

cd $HERE
echo_run adobe_root/adobe_source_libraries/tools/patch_boost.sh

if [[ $MACHINE == "Darwin" ]]
then
    cd adobe_root/adobe_platform_libraries
else
    cd adobe_root/adobe_source_libraries
fi

echo_run ../adobe_source_libraries/tools/build.sh

echo Done!

exit 0

Итак, мы создали скомпилированный libasl_dev.a.К сожалению, только это.Это совершенно бесполезно для нас, потому что мы хотим, чтобы имел графический интерфейс , а не только читатель Adam.

Так что нам нужен был какой-то аналог libasl_widgets.dll в Windows - libasl_widgets_dev.a.Я цитирую ASL/platform_release/jamroot.jam

APL не поддерживает gcc cygwin, хотя ASL поддерживает.Только поддерживаемые наборы инструментов для APL - msvc и darwin

. Поэтому Adobe считает, что он поддерживает Linux.Это просто грустно!Способ 2 Грустный!Итак, мы нашли проект кода миссии .

Он был датирован 2006 годом и увеличил 1.33.1, так что это было печально.Также было грустно в здесь

Здесь хранятся внешние библиотеки, которые используются миссией.

Это сохраняет их в нашей сборке, а это значит, что мы надеваемне нужно иметь никаких волшебных скриптов / правил сборки для установки предварительных требований.

Это означает, что у них нет отдельных файлов сборки для библиотек - библиотеки объединяются в проект.Но весь проект компилируется через bjam и внутри проекта Boost, ASL и другие библиотеки подразделяются на проекты .Это означает, что каждый из этих подпроектов компилируется по порядку и в исполняемый файл или в lib.

Но все, что нам действительно нужно от ASL, - это простой графический интерфейс для простых нужд небольшого кроссплатформенного небольшого кроссплатформенного проекта с открытым исходным кодом.Все, что нам было нужно, это кнопка, масштаб (он же слайдер, он же трекбар) и поле ввода текста.И несколько масштабных вариантов будущего развития.Поэтому мы подумали - давайте вытолкнем ASL из проекта missioncode любым доступным нам способом.

Сначала мы попробовали некоторые современные Ubuntu 11 и 11 и OpenSuse (выпуск Mono для VMware от здесь ), который мы используем каждый день.,Но это постоянно терпело неудачу с тоннами ошибок.Итак, мы подумали - давайте скомпилируем его на более ранней версии, более подходящей для ОС возраста проекта.Мы начали с Ubuntu 4 и переходили от версии к версии.Он скомпилирован 6.10 с некоторыми незначительными исправлениями, такими как

diff -crB original/external/adobe/adobe/basic_sheet.hpp modified/external/adobe/adobe/basic_sheet.hpp
*** original/external/adobe/adobe/basic_sheet.hpp   2011-06-25 08:21:48.000000000 +0400
--- modified/external/adobe/adobe/basic_sheet.hpp   2011-06-25 08:24:33.000000000 +0400
***************
*** 13,18 ****
--- 13,19 ----

  #include <deque>
  #include <map>
+ #include <vector>

  #include <adobe/name.hpp>
  #include <adobe/any_regular.hpp>
diff -crB original/external/adobe/source/xstring.cpp modified/external/adobe/source/xstring.cpp
*** original/external/adobe/source/xstring.cpp  2011-06-25 08:21:46.000000000 +0400
--- modified/external/adobe/source/xstring.cpp  2011-06-25 08:24:10.000000000 +0400
***************
*** 331,337 ****
  {
      typedef std::iterator_traits<store_iterator>::difference_type   difference_type;

!     difference_type range_size(boost::size(range));

      if (!range_size) return glossary_m.end();

--- 331,337 ----
  {
      typedef std::iterator_traits<store_iterator>::difference_type   difference_type;

!     difference_type range_size(boost::distance(range));

      if (!range_size) return glossary_m.end();

. У нас был Missioncode, компилирующий ASL с виджетами.Виджеты были полностью созданы кодом миссии augthor, поэтому не было никаких гарантий, если они сработали ... но у нас была скомпилирована полная магистраль кода миссии (также приложение с именем missionPhoto), и приложение работало просто отлично.

Мы пытались скомпилировать нашкод с этим полным ASL, но оказалось, что API-интерфейсы ASL, которые были у нас в окне, не работают в ASL, который у нас был в Windows ... как-то более или менее. = (

не конец

Но все же есть надежда, что любой из вас, дорогие пользователи SO с большим опытом, взглянет на ASL, который есть в MissionCode и в текущем ASL, и предоставит всем нам работающий ASL 1.0.43 для linux.

1 Ответ

4 голосов
/ 30 июня 2011

Похоже, что текущая версия apl не поддерживает сборку для Linux.В документации указано: http://stlab.adobe.com/asl_readme.html#Building_for_Mac.2C_.2ANIX. Также вы можете увидеть это в структуре каталогов apl.Есть каталоги $ APL_ROOT / windows и $ APL_ROOT / macintosh, но нет каталогов, связанных с Linux (что-то вроде gtk, qt и т. Д.)О проекте "код миссии": они используют более старую версию библиотек Adobe (в ней нет разделения на asl, apl и т. Д.).Возможно, что предыдущие версии Adobe Libs поддерживали сборку для Linux (или, возможно, программисты кода миссии добавили spport для gtk самостоятельно).Теоретически, можно добавить поддержку новой платформы, реализовав функциональность, аналогичную реализованной для win и macos (в текущей версии этот код составляет около 6 ... 8 тыс. Строк для каждой из них), но я не думаю, что эта работа будетбыть слишком легкимВо всяком случае, удачи!:)

...