Как скомпилировать ASL (расширенную библиотеку Adobe C++ GUI) на Linux?

вступление

Таким образом, мы провели несколько дней со всей нашей командой, состоящей из 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. К сожалению, только это. Что совершенно бесполезно для нас, потому что мы хотим иметь графический интерфейс, а не только читателя Адама.

Итак, нам нужен был какой-то аналог 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, так что это было грустно. Также было грустно здесь

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

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

Это означает, что у них нет отдельных файлов сборки для библиотек - библиотеки объединяются в проект. Но весь проект компилируется через 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 ответ


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

Другие вопросы по тегам