Страница 1 из 1
Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 20:40:08
goshanecr
Добрый день товарищи!
Несколько раз возникало желание создать порт чего-нибудь кажущегося нужным в FreeBSD, лазил по интернету в поисках подробного руководства и конечно же все ссылки ведут в
хендбук.
Читал, но то ли руки растут не от туда, то ли мозг работает не в том направлении, то ли не работает вообще, но сделать ничего так и не удалось. Вроде смотришь Makefile в портах, там написано то всего ничего и всё собирается в итоге. Вот подумал может попробовать научиться портированию программ в фрю при помощи интерактивной помощи знатоков на этом форуме. Чувствуется что кто-нибудь обязательно пошлёт курить хендбук, говорю честно читал, пытался вникнуть но что-то руки так и не поднялись и не появилось понимания с чего же начать.
Если кто-то решится помочь, просто давать какие-то доходчивые объяснения непонятных моментов, разъяснить логику и т.д. то это будет полезным наглядным примером разжёванным и ясным.
Очередная цель для портирования появилась когда в линуксе разгадывал
головоломки.
1. Скачал
исходники
2. распаковал, почитал README. Сказано что требуется для игрушек этих GTK, и в случае портирования под какую-то отличную от Linux. OSX, Windows и ещё чего-то платформ, надо править mkfiles.pl который и создаёт Makefile для сборки приложения под разные платформы.
Ну и втупил собственно. Прошу не злиться на просьбу дилетанта разъяснить суть процесса, но вдруг кто-то готов потратить чуть-чуть времени и нервов
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 20:45:42
hizel
ну и где ваши наработки?
вы выбрали не очень удачное начало, кстати
с начала просто соберите, а уже потом делайте порт
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 21:32:26
hizel
там пёрл файл похоже для вендузятников вских
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 22:27:21
goshanecr
hizel Вот ты как ответил, я сразу понял что надо начинать делать для начала. Итак:
1. Попробовал собрать зайдя в папку с распакованными исходниками и сделав make
пошлёл вывод с массой ошибок в которых были ненайденные библиотеки типа gtk/gtk.h и т.п. с этим разобрался добавив пути в Makefile:
Было:
Код: Выделить всё
CFLAGS := -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ `$(GTK_CONFIG) --cflags` $(CFLAGS)
После указания пути ко всем библиотекам (это видимо потом и будет в качестве необходимых для сборки порта зависимостей) стало:
Код: Выделить всё
CFLAGS := -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ \
-I/usr/local/include/gtk-2.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 \
`$(GTK_CONFIG) --cflags` $(CFLAGS)
библиотеки искались одна за другой в выводе make а затем чтобы найти путь по которому они есть у меня:
В итоге вывод make стал таким:
Код: Выделить всё
/mnt/400gb/Gosha/BSD-PORTS/Tatham_puzzle/src/puzzles-r8972/>make
cc -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ -I/usr/local/include/gtk-2.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 `sh -c 'pkg-config gtk+-2.0 2>/dev/null || gtk-config ' --cflags` -O2 -pipe -msse -msse2 -msse3 -mmmx -m3dnow -mtune=athlon64 -fno-strict-aliasing -march=athlon-mp -c ./blackbox.c -o blackbox.o
Illegal option --
cc -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ -I/usr/local/include/gtk-2.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 `sh -c 'pkg-config gtk+-2.0 2>/dev/null || gtk-config ' --cflags` -O2 -pipe -msse -msse2 -msse3 -mmmx -m3dnow -mtune=athlon64 -fno-strict-aliasing -march=athlon-mp -c icons/blackbox-icon.c -o blackbox-icon.o
Illegal option --
cc -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ -I/usr/local/include/gtk-2.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 `sh -c 'pkg-config gtk+-2.0 2>/dev/null || gtk-config ' --cflags` -O2 -pipe -msse -msse2 -msse3 -mmmx -m3dnow -mtune=athlon64 -fno-strict-aliasing -march=athlon-mp -c ./drawing.c -o drawing.o
Illegal option --
cc -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ -I/usr/local/include/gtk-2.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/cairo -I/usr/local/include/atk-1.0 `sh -c 'pkg-config gtk+-2.0 2>/dev/null || gtk-config ' --cflags` -O2 -pipe -msse -msse2 -msse3 -mmmx -m3dnow -mtune=athlon64 -fno-strict-aliasing -march=athlon-mp -c ./gtk.c -o gtk.o
Illegal option --
cc1: warnings being treated as errors
./gtk.c: In function 'main':
./gtk.c:2401: warning: 'error' may be used uninitialized in this function
*** Error code 1
Stop in /mnt/400gb/Gosha/BSD-PORTS/Tatham_puzzle/src/puzzles-r8972.
Вижу вроде что предупреждения считаются за ошибки и ещё какая-то иллегальная опция, но как это решить не знаю. Не программер я, ну или очень не шибкий
Как дальше решать?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 22:41:03
hizel
исходники еще и не собираются
я в Makefile изменил
-GTK_CONFIG = sh -c 'pkg-config gtk+-2.0 $$0 2>/dev/null || gtk-config $$0'
+GTK_CONFIG = pkg-config gtk+-2.0
исходники вообще должны собираться?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-18 23:01:20
hizel
кстати собирается без всяких пендантиков, -Wall и -Werror
и естественно собирать через gmake
вот теперь можете портерс хэндбук раскуривать
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 12:54:24
hizel
у меня собралось, а у вас?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 16:17:49
Гость
Будешь делать порт, поменяй `:=' на `+=' в CFLAGS, а также потри -O2, -g, -Werror.
-Werror (точнее -Wall) слишком привязан к компилятору. Например, на gcc45 и clang ты некоторых варнингов не увидишь.
-O2 для портов наследуется из CFLAGS в (sys.mk и make.conf)
-g наследуется из DEBUG_FLAGS (bsd.port.mk и make.conf)
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 16:59:53
goshanecr
hizel писал(а):у меня собралось, а у вас?
У меня тоже собралось, сейчас жую хендбук
Гость писал(а):Будешь делать порт, поменяй `:=' на `+=' в CFLAGS, а также потри -O2, -g, -Werror.
-Werror (точнее -Wall) слишком привязан к компилятору. Например, на gcc45 и clang ты некоторых варнингов не увидишь.
-O2 для портов наследуется из CFLAGS в (sys.mk и make.conf)
-g наследуется из DEBUG_FLAGS (bsd.port.mk и make.conf)
Ок, подмутим
Спасибо за помощь
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 17:23:11
goshanecr
Товарищи, имя дистрибутивного файла puzzles-r8972.tar.gz, мне в Makefile порта можно указать PORTVERSION=r8972 или надо указать имя файла в DISTFILES?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 18:28:08
hizel
проще r8972
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 18:47:24
goshanecr
Так я тоже сначала думал так написать, потом прочитал что надо оформлять порт чрезвычайно аккуратно, что с косяками не примут, а в хендбуке только чисто циферные примеры этой переменной оказались а дальше написано "нестандартные именования пакетов в DISTFILES"
Спасибо!
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 20:16:12
goshanecr
А стоит ли для данного набора игр сделать возможность выбора какие из них устанавливать? Или такое усложнение для такого простого порта не к месту?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 20:32:43
hizel
двигались бы вы от простого к сложному,не усложняйте себе жизнь :]
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 20:53:51
goshanecr
Да так то вроде тут просто всё. Вопрос вот возник, среди скомпилированных мгр, есть например игра net и у меня в /usr/local/bin есть "самбовый" net, как разрулить эту ситуацию? В хендбуке написано что можно свой PREFIX указать, но делать это чрезвычайно не рекомендуется. Что-нибудь навроде PREFIX=${LOCALBASE}/bin/puzzles можно указать?
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 21:33:38
Гость
можной пойти по стопам
sysutils/coreutils и использовать префикс в имени. Иначе можно задолбаться заполнять CONFLICTS.
Код: Выделить всё
--- Makefile~
+++ Makefile
@@ -3,24 +3,20 @@
# This file was created by `mkfiles.pl' from the `Recipe' file.
# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.
-# You can define this path to point at your tools if you need to
-# TOOLPATH = /opt/gcc/bin
-CC := $(TOOLPATH)$(CC)
# You can manually set this to `gtk-config' or `pkg-config gtk+-1.2'
# (depending on what works on your system) if you want to enforce
# building with GTK 1.2, or you can set it to `pkg-config gtk+-2.0'
# if you want to enforce 2.0. The default is to try 2.0 and fall back
# to 1.2 if it isn't found.
-GTK_CONFIG = sh -c 'pkg-config gtk+-2.0 $$0 2>/dev/null || gtk-config $$0'
+GTK_CONFIG = pkg-config gtk+-2.0
-CFLAGS := -O2 -Wall -Werror -ansi -pedantic -g -I./ -Iicons/ `$(GTK_CONFIG) \
- --cflags` $(CFLAGS)
+CFLAGS += -Wall -ansi -pedantic -I./ -Iicons/ `$(GTK_CONFIG) --cflags`
XLIBS = `$(GTK_CONFIG) --libs`
ULIBS =#
INSTALL=install
INSTALL_PROGRAM=$(INSTALL)
INSTALL_DATA=$(INSTALL)
-prefix=/usr/local
+prefix?=/usr/local
exec_prefix=$(prefix)
bindir=$(exec_prefix)/bin
gamesdir=$(exec_prefix)/games
@@ -617,7 +613,10 @@ GAMES += untangle
version.o: version.c version2.def
$(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c
version2.def: FORCE
- if test -z "$(VER)" && test -f manifest && md5sum -c manifest; then \
+ @if test -z "$(VER)" && test -f manifest && while read md5sum file; do \
+ if [ "`md5 -r $$file`" != "$$md5sum $$file" ]; then \
+ echo "*** checksum mismatch: $$file"; \
+ fi; done <manifest; then \
cat version.def > version2.def.new; \
elif test -z "$(VER)" && test -d .svn && svnversion . >/dev/null 2>&1; then \
echo "-DREVISION=`svnversion .`" >version2.def.new; \
@@ -632,7 +631,7 @@ version2.def: FORCE
.PHONY: FORCE
install:
for i in $(GAMES); do \
- $(INSTALL_PROGRAM) -m 755 $$i $(DESTDIR)$(gamesdir)/$$i \
+ $(INSTALL_PROGRAM) -m 755 $$i $(DESTDIR)$(bindir)/puzzles-$$i \
|| exit 1; \
done
Код: Выделить всё
$ export prefix=$HOME/aaa
$ mkdir -p $prefix/bin
$ gmake -j3
$ gmake install
$ ls -1 $prefix/bin
puzzles-blackbox
puzzles-bridges
puzzles-cube
puzzles-dominosa
puzzles-fifteen
puzzles-filling
puzzles-flip
puzzles-galaxies
puzzles-guess
puzzles-inertia
puzzles-keen
puzzles-lightup
puzzles-loopy
puzzles-magnets
puzzles-map
puzzles-mines
puzzles-net
puzzles-netslide
puzzles-pattern
puzzles-pegs
puzzles-rect
puzzles-samegame
puzzles-signpost
puzzles-singles
puzzles-sixteen
puzzles-slant
puzzles-solo
puzzles-tents
puzzles-towers
puzzles-twiddle
puzzles-unequal
puzzles-untangle
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 21:40:44
Гость
goshanecr писал(а):Товарищи, имя дистрибутивного файла puzzles-r8972.tar.gz, мне в Makefile порта можно указать PORTVERSION=r8972 или надо указать имя файла в DISTFILES?
Можно сделать так
Код: Выделить всё
PORTNAME= puzzles
PORTVERSION= 8972
DISTVERSIONPREFIX= r
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 22:05:56
goshanecr
Ух... Всё за меня сделали а я в итоге учусь
Re: Создание порта приложения для FreeBSD
Добавлено: 2010-08-19 23:39:07
Гость
Не все. На создание скелета порта обычно уходит больше времени, чем на исправление багов компиляции/инсталляции.
Конфликты имен - не единственная деталь, коя плохо расписана в handbook. Подобные вопросы лучше спрашивать на freebsd-ports@. Там больше шанс, что вредный совет заметят.