LINUX.ORG.RU
ФорумGames

Goblin Camp: а нука собери!

 ,


2

3

Мне таки удалось довести Goblib Camp до собираемости на современных дистрибутивах

https://gitlab.com/dhyannataraj/goblin-camp/-/tree/cmake-build

Перед тем как фиксировать это как релиз, предлагаю заинтересованным лицам попробовать это собрать на дистрибутивах отличных от Debian Buster/Stretch amd64, поделится результатами и предложить патчи, если не собирается, но знаете как починить.

Собирать следует ветку cmake-build, инструкция для сборки там под старые chroot контейнеры. Ее следует игнорировать и пользоваться схемой cmake .; make; sudo make install

Предполагаемый список зависимостей

    # apt-get install git build-essential cmake libsdl1.2-dev libsdl-image1.2-dev libsdl-image1.2-dev libboost-system1.55.0 \
    libboost-iostreams1.55-dev libboost-filesystem1.55-dev libboost-python1.55-dev libboost-thread1.55-dev locales

Циферку для boost’а нужно указать актуальную для вашего дистрибутива.

О встреченных проблемах просьба сообщать. Хочется чтобы процесс сборки был максимально простым.

Не заинтересованных лиц, прошу не беспокоится, и проходить мимо ;-)

Ответ на: комментарий от Korchevatel

Итак, предварительный отчёт: cmake .. успешно завёлся после доустановки boost и sdl_image (уже был, собственно, cmake, base и base-devel), запустил make -j12, вроде бы собирается. Сейчас посмотрим, куда заведёт кривая.

Korchevatel ★★★★ ()
Последнее исправление: Korchevatel (всего исправлений: 1)
Ответ на: комментарий от Korchevatel

Выхлоп cmake: https://pastebin.com/4eZMVP9X

Выхлоп make: https://pastebin.com/viTYGBAm

В частности прошу обратить внимание на вот этот участок:

[100%] Linking CXX executable goblin-camp
/usr/bin/ld: CMakeFiles/goblin-camp.dir/Goblin_Camp/src/scripting/Engine.cpp.o: in function `Script::Init(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)':
Engine.cpp:(.text+0x310): undefined reference to `inittime'
/usr/bin/ld: Engine.cpp:(.text+0x315): undefined reference to `init_functools'
/usr/bin/ld: Engine.cpp:(.text+0x31a): undefined reference to `initcStringIO'
/usr/bin/ld: Engine.cpp:(.text+0x31f): undefined reference to `initzlib'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/goblin-camp.dir/build.make:2188: goblin-camp] Error 1
make[1]: *** [CMakeFiles/Makefile2:134: CMakeFiles/goblin-camp.dir/all] Error 2
make: *** [Makefile:150: all] Error 2
Korchevatel ★★★★ ()
Ответ на: комментарий от Korchevatel

Ага… Спасибо…

Так… Это похоже на функции из libpython2.7. У меня это https://packages.debian.org/buster/libpython2.7

Что будет, если поставить libpython2.7 libpython2.7-dev или их аналоги? Или они уже есть и просто по какой-то причине не находятся линкером?

shaplov ★★ ()
Последнее исправление: shaplov (всего исправлений: 2)
Ответ на: комментарий от shaplov

Как раз они у меня есть:

[korchevatel@korch ~]$ ldconfig -p | grep libpython
        libpython3.8.so.1.0 (libc6,x86-64) => /usr/lib/libpython3.8.so.1.0
        libpython3.8.so (libc6,x86-64) => /usr/lib/libpython3.8.so
        libpython3.so (libc6,x86-64) => /usr/lib/libpython3.so
        libpython2.7.so.1.0 (libc6,x86-64) => /usr/lib/libpython2.7.so.1.0
        libpython2.7.so (libc6,x86-64) => /usr/lib/libpython2.7.so

Ламерское предположение: может, причина в 64 битах?

Korchevatel ★★★★ ()
Ответ на: комментарий от shaplov

«Видит» библиотеку:

[korchevatel@korch build]$ cmake ..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Boost: /usr/lib64/cmake/Boost-1.72.0/BoostConfig.cmake (found version "1.72.0") found components: thread system filesystem serialization iostreams 
-- Found Boost: /usr/lib64/cmake/Boost-1.72.0/BoostConfig.cmake (found version "1.72.0") found components: python27 
-- Found Threads: TRUE  
-- Found SDL: /usr/lib/libSDLmain.a;/usr/lib/libSDL.so;-lpthread (found version "1.2.15") 
-- Found SDL_image: /usr/lib/libSDL_image.so (found version "1.2.12") 
-- Found PythonLibs: /usr/lib/libpython2.7.so (found suitable version "2.7.18", minimum required is "2.7") 
-- Found ZLIB: /usr/lib/libz.so (found version "1.2.11") 
CMake Warning (dev) at /usr/share/cmake-3.17/Modules/FindOpenGL.cmake:305 (message):
  Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
  available.  Run "cmake --help-policy CMP0072" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  FindOpenGL found both a legacy GL library:

    OPENGL_gl_LIBRARY: /usr/lib/libGL.so

  and GLVND libraries for OpenGL and GLX:

    OPENGL_opengl_LIBRARY: /usr/lib/libOpenGL.so
    OPENGL_glx_LIBRARY: /usr/lib/libGLX.so

  OpenGL_GL_PREFERENCE has not been set to "GLVND" or "LEGACY", so for
  compatibility with CMake 3.10 and below the legacy GL library will be used.
Call Stack (most recent call first):
  CMakeLists.txt:45 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Found OpenGL: /usr/lib/libOpenGL.so   
-- Found PNG: /usr/lib/libpng.so (found version "1.6.37") 
!!!!!!!!!!!!!!! /usr/lib/libpython2.7.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/korchevatel/goblin-camp/build
Korchevatel ★★★★ ()
Ответ на: комментарий от shaplov

Я немножко не понял вопрос. «Арч» прекрасно ставится в qemu по инструкции с «вики», даю список пакетов, чтобы полегче было: linux base base-devel cmake python2 boost sdl sdl_image grub nano.

Korchevatel ★★★★ ()
Ответ на: комментарий от Korchevatel

Я немножко не понял вопрос. «Арч» прекрасно ставится в qemu по инструкции с «вики»,

Ну просто обычно у дистрибутивов есть не только названия, но и версии… И если какой-то эффект был обнаружен в версии А, то и воспроизводить его тоже надо в версии А.

Но может Арч устроен как-то по-другому…

shaplov ★★ ()
Ответ на: комментарий от shaplov

У «арча» версий нет, «rolling release» же. ПО в нём — всегда свежайшее из возможного. Максимум, что есть — это установочные образы, которые делают каждого первого числа месяца.

Korchevatel ★★★★ ()
Ответ на: комментарий от Korchevatel

Так… Я научился его собирать под Арчем.

Не то чтобы это прибавило ясности, что с этим делать. Но теперь как минимум понятно в чем дело и как его собирать. А как с этим быть дальше, пусть думают дистростроители, если до этого дойдет.

Дело оказалось в том, что в отличии от дебианоидов, в которых все питоновские модули собираются в /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0, в Арче они собираются поштучно в директорию /usr/lib/python2.7/lib-dynload. Вот именно их линкер и не находит.

Как ему объяснить так чтобы находил сам, я не знаю. Но я разобрался как его к этому принудить. Для этого надо в CMakeLists.txt перед target_link_libraries добавить строки

add_library(python_zlib SHARED IMPORTED)
set_property(TARGET python_zlib PROPERTY IMPORTED_LOCATION "/usr/lib/python2.7/lib-dynload/zlib.so")

add_library(python_datetime SHARED IMPORTED)
set_property(TARGET python_datetime PROPERTY IMPORTED_LOCATION "/usr/lib/python2.7/lib-dynload/datetime.so")

add_library(python__functools SHARED IMPORTED)
set_property(TARGET python__functools PROPERTY IMPORTED_LOCATION "/usr/lib/python2.7/lib-dynload/_functools.so")

add_library(python_cStringIO SHARED IMPORTED)
set_property(TARGET python_cStringIO PROPERTY IMPORTED_LOCATION "/usr/lib/python2.7/lib-dynload/cStringIO.so")

И в аргументы самого target_link_libraries добавить

  python_zlib
  python_datetime
  python__functools
  python_cStringIO

После этого начинает собираться.

Ну и на всякий случай, упомяну, что для того чтобы собралось, помимо пакетов перечисленных @Korchevatel я еще доставил mesa и glu. Но возможно это из-за того что у меня была система совсем без графики. Возможно на десктопных версиях они заводятся сами.

shaplov ★★ ()
Ответ на: комментарий от Korchevatel

Пардон, ошибся, это и был исполняемый файл...

Правда, он всё равно не открывается. Лог:

C++ (`Logger.cpp` @ 55), `OpenLogFile`:
	Log opened 2020-May-04 22:07:44
================================
C++ (`Paths.cpp` @ 189), `Init`:
	Personal directory: "/home/korchevatel/.config/goblin-camp"
================================
C++ (`Paths.cpp` @ 190), `Init`:
	Saves directory: "/home/korchevatel/.config/goblin-camp/saves"
================================
C++ (`Paths.cpp` @ 191), `Init`:
	Screenshots directory: "/home/korchevatel/.config/goblin-camp/screenshots"
================================
C++ (`Paths.cpp` @ 192), `Init`:
	Mods directory: "/home/korchevatel/.config/goblin-camp/mods"
================================
C++ (`Paths.cpp` @ 193), `Init`:
	CoreTilesets directory: "/home/korchevatel/goblin-camp/share/games/goblin-camp/lib/tilesets_core"
================================
C++ (`Paths.cpp` @ 194), `Init`:
	Tilesets directory: "/home/korchevatel/.config/goblin-camp/tilesets"
================================
C++ (`Paths.cpp` @ 195), `Init`:
	Executable directory: "/home/korchevatel/goblin-camp/build"
================================
C++ (`Paths.cpp` @ 196), `Init`:
	Global data directory: "/home/korchevatel/goblin-camp/share/games/goblin-camp/"
================================
C++ (`Paths.cpp` @ 197), `Init`:
	Executable: "/home/korchevatel/goblin-camp/build/goblin-camp"
================================
C++ (`Paths.cpp` @ 198), `Init`:
	Config: "/home/korchevatel/.config/goblin-camp/config.py"
================================
C++ (`Paths.cpp` @ 199), `Init`:
	Font: "/home/korchevatel/.config/goblin-camp/terminal.png"
================================
C++ (`Random.cpp` @ 268), `Init`:
	Seeding global random generator with 1588619264
================================
C++ (`Engine.cpp` @ 71), `Init`:
	Initialising the engine.
================================
C++ (`Engine.cpp` @ 83), `Init`:
	Python 2.7.18 (default, Apr 23 2020, 22:32:06) 
[GCC 9.3.0]
================================
C++ (`Engine.cpp` @ 98), `Init`:
	Python Library Path = /home/korchevatel/goblin-camp/share/games/goblin-camp/lib:/usr/lib/python27.zip:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload
================================
C++ (`Engine.cpp` @ 104), `Init`:
	Importing Python modules
================================
C++ (`Engine.cpp` @ 111), `Init`:
	Exposing the API.
================================
C++ (`Engine.cpp` @ 114), `Init`:
	Creating internal namespaces.
================================
C++ (`Engine.cpp` @ 120), `Init`:
	Setting up console namespace. If you get 'No module named XXXX' error message below, check "/home/korchevatel/goblin-camp/share/games/goblin-camp/lib" and make sure that module is really there
================================
C++ (`Engine.cpp` @ 128), `Init`:
	ERROR. File not found: "/home/korchevatel/goblin-camp/share/games/goblin-camp/lib/__gcdevconsole__.py"
================================
C++ (`Logger.cpp` @ 61), `CloseLogFile`:
	Log closed
================================

Видать, ему некоего devconsole не хватает.

Korchevatel ★★★★ ()
Последнее исправление: Korchevatel (всего исправлений: 1)

Update: после sudo make install эта вещь запустилась! Странно, кстати, что до этого не хотел, по идее всё же было (на мой ламерский взгял).

https://ibb.co/nL0mZ4D

Кстати, ярлык имеет неправильный путь к исполняемому файлу. Нужно /usr/local/games/goblin-camp, а не просто goblin-camp.

Korchevatel ★★★★ ()

Почти собрал под макось 10.14, но там нет расширения ARB, да и OpenGL они точно зарубят. Попробовать MoltenGL, что ли, хотя он и за деньги. В идеале, конечно, переписать на SDL2, но кто этим будет заниматься?..

yrs ()