slazav / mapsoft2

Programs for map handling, based on mapsoft2-libs
https://slazav.github.io/mapsoft2/
GNU General Public License v3.0
6 stars 1 forks source link

Не подтягиваются зависимости для сборки ms2conv #49

Closed ioctl-user closed 4 years ago

ioctl-user commented 4 years ago

Ошибка выглядит так: $ make make -C programs/ms2conv make[1]: вход в каталог «/home/ioctl/delme/mapsoft2/programs/ms2conv» Can't find file "tmpdir/tmpdir.h" included in "geo_io.cpp"

Building dependencies: []

Finish building dependencies

g++ -std=gnu++11 -Werror=return-type -O2 -fPIC -I../../modules -c -o ms2conv.o ms2conv.cpp In file included from ../../modules/viewer/gobj.h:6, from ../../modules/geo_render/write_geoimg.h:8, from ms2conv.cpp:10: ../../modules/cairo/cairo_wrapper.h:4:10: фатальная ошибка: cairomm/context.h: Нет такого файла или каталога 4 | #include <cairomm/context.h> | ^~~~~~~ компиляция прервана. make[1]: [<встроенное>: ms2conv.o] Ошибка 1 make[1]: выход из каталога «/home/ioctl/delme/mapsoft2/programs/ms2conv» make: [Makefile:20: ms2conv] Ошибка 2

Это потому, что переменная PKG_CONFIG пустая (что влияет на создание CXXFLAGS посредством запуска pkg-config). В файле programs/ms2conv/Makefile.deps только следующее содержимое:

This file is generated by get_deps program.

1. module source dependencies (recoursive h-file includes):

ms2conv.o: ../../modules/cache/cache.h ../../modules/geo_data/geo_io.h ../../modules/conv/conv_multi.h ../../modules/geom/multiline.h ../../modules/geo_render/gobj_trk.h ../../modules/err/err.h ../../modules/geo_data/filters.h ../../modules/geom/line.h ../../modules/image/image.h ../../modules/geo_render/write_geoimg.h ../../modules/geom/point.h ../../modules/cairo/cairo_wrapper.h ../../modules/conv/conv_base.h ../../modules/image/image_io.h ../../modules/geo_render/gobj_maps.h ../../modules/image/image_colors.h ../../modules/viewer/gobj_multi.h ../../modules/geo_data/conv_geo.h ../../modules/geo_render/gobj_wpts.h ../../modules/viewer/gobj.h ../../modules/geo_data/geo_data.h ../../modules/geom/rect.h ../../modules/image/image_cache.h ../../modules/opt/opt.h ../../modules/getopt/getopt.h ../../modules/conv/conv_aff.h ../../modules/geo_mkref/geo_mkref.h

ioctl-user commented 4 years ago

Не знаю, как отключить автоформатирование.

slazav commented 4 years ago

А pkg-config --cflags cairomm-1.0 срабатывает?

А в modules/cairo/Makefile.deps тоже нет PKG_CONFIG ? (каждый модуль можно отдельно компилить и отлаживать, чтобы не начинать с programs/ms2conv)

Что в этой директории (modules/cairo) говорит ../get_deps .. .

slazav commented 4 years ago

Заметил, что если любой другой библиотеки, например, gtkmm-3.0, то pkg-config не отработает и сборка упадет тоже на #include <cairomm/context.h>

Но у меня при этом get_deps отрабатывает и PKG_CONFIG в Makefile.deps появляется... И сообщение об ошибке от pkg-config тоже есть с правильным указанием, чего не хватает.

slazav commented 4 years ago

отключить автоформатирование можно, если весь текст заключить в тройные кавычки

код

ioctl-user commented 4 years ago
$ pkg-config --cflags cairomm-1.0
-I/usr/include/cairomm-1.0 -I/usr/lib/cairomm-1.0/include -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/libffi-3.2.1/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include
$ ../get_deps .. .
### This file is generated by get_deps program.

# 1. module source dependencies (recoursive h-file includes):

cairo_wrapper.o: ../geom/line.h ./cairo_wrapper.h ../geom/point.h ../geom/rect.h ../image/image.h ../geom/multiline.h ../opt/opt.h ../err/err.h

cairo1.test.o: ../geom/point.h ../err/assert_err.h ../err/err.h ../opt/opt.h ../geom/rect.h ../geom/line.h ./cairo_wrapper.h ../image/image.h ../geom/multiline.h

# 2. sorted module dependencies

MDEPS := err opt geom getopt filename cache image

# 3. a-file list for linking (reverse order)

ADEPS := ../image/image.a ../cache/cache.a ../filename/filename.a ../getopt/getopt.a ../geom/geom.a ../opt/opt.a ../err/err.a

# 4. library dependencies

LDLIBS := 

PKG_CONFIG := libtiff-4 libpng libgif gtkmm-3.0 fontconfig cairomm-ft-1.0 cairomm-1.0 libjpeg jansson
ioctl-user commented 4 years ago

Видимо, проблема была в том, что я удалял папку modules/tmpdir/ для продолжения сборки. После исправления в tmpdir собрался и ms2conv.

slazav commented 4 years ago

Общая идея такая:

Я использую эти самые модули в разных программах, не только в mapsoft2. Про этом удобно хранить их в отдельном репозитории и подключать в виде git submodules. Если я что-то меняю, то все коммитится в правильное место.

Сборочная система устроена так:

Сборка в Альтлинукс (а конкретно, программа gear) принципиально не поддерживает git submodules, поскольку хочет, чтобы все, необходимое для воспроизводимой сборки содержалось в одном коммите. Чтобы это обойти, перед сборкой новой версии модули пакуются в modules.tar (тоже, кстати, с использованием gear) и коммитятся.

Еще есть такой текст: https://slazav.github.io/mapsoft2/modules.ru.htm https://slazav.github.io/mapsoft2/modules.htm