From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <43E36294.6050405@solin.spb.ru> Date: Fri, 03 Feb 2006 17:03:00 +0300 From: Aleksey Avdeev User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050815) X-Accept-Language: ru-ru, ru MIME-Version: 1.0 To: ALT Devel discussion list References: <43D5181C.7050405@altlinux.ru> <43D51B68.2030201@altlinux.ru> <43D602D8.3040207@altlinux.ru> <20060124104141.GZ11208@osdn.org.ua> <43D60B4E.6080909@altlinux.ru> <20060124115713.GC20273@mithraen.dimline.ru> <43D8E0CD.7040800@vzljot.ru> <43D9025B.5080306@altlinux.ru> <43D9041B.80203@altlinux.ru> <43D9CEEE.4040600@altlinux.ru> <43D9D90E.3020802@altlinux.ru> In-Reply-To: <43D9D90E.3020802@altlinux.ru> Content-Type: multipart/mixed; boundary="------------030803000402070900020904" Subject: [devel] I: Makefile* =?koi8-r?b?xMzRIHN2biDSxdDP2snUwdLJ0SAod2FzOiAgYXBh?= =?koi8-r?b?Y2hlMik=?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Feb 2006 14:02:57 -0000 Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------030803000402070900020904 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit Ivan Fedorov пишет: > Sviatoslav Sviridov пишет: > ... >> >> Какой subversion имеется ввиду? > > > svn://malta.altlinux.ru/trunk/ Посмотрел я на него, и на ... И решил, привести свой репозитарий () к подобному виду. Структура уже успела устареть (рядом -- обсуждения более вкусных вариантов), но Makefile* -- могут оказаться полезными. Основные отличия: 1. Вместо подключения внешних репозитариев -- по make update производится переключение <имя>/Makefile{,.common} (svn sw) на svn-build-common/Makefile{,.common}.project соответствующего уровня. От внешних ссылок отказался, т. к. не придумал как корректно разрулить множественность путей к репозитарию: у меня репозитарий доступен под разными адресами, и есть места где доступен только 1, без альтернативный, вариант (в разных местах -- различный). 2. Имена файлов с исходниками/патчами -- выдираются из спека (rpm -bE). 3. Предусмотрена адаптация под условия конкретного пакета (через Makefile.{pre,post}) 3. make clean -- чистит всё, отсутствующее в svn. Структура: /trunk /trunk/Makefile -- незначительно изменён относительно оригинала (приложен как Makefile) /trunk/svn-build-common -- Makefile* автоматизации (разработка) /trunk/svn-build-common/Makefile.project -- оригинал Makefile проекта ( trunk/ProjectTemplate/Makefile). Приложен к письму. /trunk/svn-build-common/Makefile.common.project -- оригинал Makefile.common проекта ( trunk/ProjectTemplate/Makefile.common). Приложен к письму. /trunk/ProjectTemplate -- шаблон проекта (реальный проект -- его рихованая копия) /trunk/ProjectTemplate/Makefile -- копия Makefile.project /trunk/ProjectTemplate/Makefile.common -- копия Makefile.common.project /trunk/ProjectTemplate/Makefile.pre -- для подмены умолчаний (inсlude в начале Makefile.common), может отсутствовать (по умолчанию -- список переменных штатно допустимых к подмене). (Набор переменных рассчитан на переименование/объединение подкаталогов, задание имени спека, и т. д.. ;-)) Приложен к письму. /trunk/ProjectTemplate/Makefile.post -- рихтовка по месту (inсlude в конце Makefile.common), может отсутствовать (по умолчанию -- пуст). /trunk/ProjectTemplate/incoming -- отправляемое в incoming (может отсутствовать) /trunk/ProjectTemplate/{S,}RPMS -- результаты сборки (могут отсутствовать) /trunk/ProjectTemplate/{SPECS,SOURCES} -- обязательны /branches/SubversionForSPECS -- бранчи элементов автоматизации /branches/SubversionForSPECS/AntonFarygin -- честно украдено с ) :-) /branches/SubversionForSPECS/solo -- то что у меня вышло из вышележащего. /tags/SubversionForSPECS /tags/SubversionForSPECS/v0.2 -- версия без явных ошибок в Makefile.* (apache2 -- у меня ими собрался) -- С уважением. Алексей. --------------030803000402070900020904 Content-Type: text/plain; name="Makefile" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile" SUBDIRS = $(wildcard */) clean_SUBDIRS = $(addprefix clean_SUBDIRS_, $(SUBDIRS)) .PHONY: all clean clean_all $(clean_SUBDIRS) all: clean: clean_all clean_all: $(clean_SUBDIRS) $(clean_SUBDIRS): - $(MAKE) clean -C $(patsubst clean_SUBDIRS_%, %, $@) --------------030803000402070900020904 Content-Type: text/plain; name="Makefile.project" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile.project" # Standart Makefiles SVNBINDCOMMON := svn-build-common/ MAKEFILES_NAME := Makefile Makefile.common ST_MAKEFILES_NAME := $(addsuffix .project, $(MAKEFILES_NAME)) get_url = $(shell svn info $(1)|fgrep URL:|head -n 1|cut -f2 -d' ') chk_name = $(filter $(1), $(notdir $(call get_url, $(1)))) URL := $(call get_url, .) ST_URL := $(addprefix $(dir $(URL)), $(SVNBINDCOMMON)) sw_MAKEFILES_ALL := $(addprefix sw_MAKEFILE_, $(MAKEFILES_NAME)) sw_MAKEFILES := $(addprefix sw_MAKEFILE_, $(foreach makefile, $(MAKEFILES_NAME), \ $(call chk_name, $(makefile)))) .PHONY: update $(sw_MAKEFILES_ALL) -include Makefile.common update: $(sw_MAKEFILES) svn update $(wildcard *) $(sw_MAKEFILES_ALL): svn sw $(addprefix $(ST_URL), $(addsuffix .project, \ $(patsubst sw_MAKEFILE_%, %, $@))) $(patsubst sw_MAKEFILE_%, %, $@) --------------030803000402070900020904 Content-Type: text/plain; name="Makefile.common.project" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile.common.project" -include Makefile.pre TOPDIR := $(shell pwd) PACKAGE := $(if $(strip $(PACKAGE)), $(firstword $(PACKAGE)), $(shell basename $(TOPDIR))) SPECNAME := $(if $(strip $(SPECNAME)), $(firstword $(SPECNAME)), $(addsuffix .spec, ${PACKAGE})) SPECDIR := $(if $(strip $(SPECDIR)), $(firstword $(SPECDIR)), SPECS) SPEC := $(if $(strip $(SPEC)), $(firstword $(SPEC)), $(addprefix $(SPECDIR)/, $(SPECNAME))) SOURCEDIR := $(if $(strip $(SOURCEDIR)), $(firstword $(SOURCEDIR)), SOURCES) TMPDIR := $(if $(strip $(TMPDIR)), $(firstword $(TMPDIR)), TMP) TMPEXPORTDIR := $(if $(strip $(TMPEXPORTDIR)), $(firstword $(TMPEXPORTDIR)), $(addprefix $(TMPDIR)/, export)) BUILDDIR := $(if $(strip $(BUILDDIR)), $(firstword $(BUILDDIR)), BUILD) RPMDIR := $(if $(strip $(RPMDIR)), $(firstword $(RPMDIR)), RPM) SRPMDIR := $(if $(strip $(SRPMDIR)), $(firstword $(SRPMDIR)), SRPM) # rpm dirs RPMTOPDIR := $(if $(strip $(RPMTOPDIR)), $(firstword $(RPMTOPDIR)), $(TOPDIR)) RPMTMPDIR := $(if $(strip $(RPMTMPDIR)), $(firstword $(RPMTMPDIR)), $(addprefix $(RPMTOPDIR)/, $(TMPDIR))) RPMSOURCEDIR := $(if $(strip $(RPMSOURCEDIR)), $(firstword $(RPMSOURCEDIR)), \ $(addprefix $(RPMTOPDIR)/, $(SOURCEDIR))) RPMBUILDDIR := $(if $(strip $(RPMBUILDDIR)), $(firstword $(RPMBUILDDIR)), $(addprefix $(RPMTOPDIR)/, $(BUILDDIR))) RPMRPMDIR := $(if $(strip $(RPMRPMDIR)), $(firstword $(RPMRPMDIR)), $(addprefix $(RPMTOPDIR)/, $(RPMDIR))) RPMSRPMDIR := $(if $(strip $(RPMSRPMDIR)), $(firstword $(RPMSRPMDIR)), $(addprefix $(RPMTOPDIR)/, $(SRPMDIR))) .PHONY: all ba bs bp binary source buildreq tarball clean # all target all: $(SPEC) tarball rpmbuild -ba \ --define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \ --define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \ --define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC) ba: all bs: source bb: binary bp: $(SPEC) tarball rpmbuild -bp \ --define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \ --define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \ --define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC) binary: $(SPEC) tarball rpmbuild -bb \ --define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \ --define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \ --define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC) source: $(SPEC) tarball rpmbuild -bs \ --define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \ --define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \ --define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC) buildreq: $(SPEC) tarball buildreq --args=" \ --define \"_topdir $(RPMTOPDIR)\" --define \"_tmpdir $(RPMTMPDIR)\" \ --define \"_sourcedir $(RPMSOURCEDIR)\" --define \"_builddir $(RPMBUILDDIR)\" \ --define \"_rpmdir $(RPMRPMDIR)\" --define \"_srcrpmdir $(RPMSRPMDIR)\"" $(SPEC) SUBDIRS = $(wildcard $(SOURCEDIR) $(BUILDDIR) $(RPMDIR) $(SRPMDIR) $(TMPDIR)) CLEANS = $(foreach name, $(sort $(addsuffix /*, $(SUBDIRS)) $(SUBDIRS) $(wildcard *)), \ $(if $(strip $(call get_url, $(name))), , $(name))) clean: rm -Rf $(CLEANS) ifneq ($(strip $(wildcard $(SPEC))), ) SPECURLSORCES := $(shell rpm -bE $(SPEC) 2>/dev/null | \ sed -n -e '/^Source[0-9]*\:/{s/^Source[0-9]*:[[:space:]]*//;p}') SPECSORCES := $(notdir $(SPECURLSORCES)) SPECURLPATCHS := $(shell rpm -bE $(SPEC) 2>/dev/null | \ sed -n -e '/^Patch[0-9]*\:/{s/^Patch[0-9]*:[[:space:]]*//;p}') SPECPATCHS := $(notdir $(SPECURLPATCHS)) SOURCE := $(addprefix $(RPMSOURCEDIR)/, $(SPECSORCES) $(SPECPATCHS)) UNCOMPRESSED := $(if $(strip $(UNCOMPRESSED)), $(firstword $(UNCOMPRESSED)), UNCOMPRESSED) ifneq ($(strip $(wildcard $(UNCOMPRESSED))), ) VERSION := $(shell rpm -q --specfile --qf "%{VERSION}\n" $(SPEC)|head -1) TARBASENAME := $(addprefix $(PACKAGE)-, $(VERSION)) TAR := $(addprefix $(RPMSOURCEDIR)/, $(addsuffix .tar.bz2, $(TARBASENAME))) $(TAR): - rm -Rf $(TMPEXPORTDIR) mkdir -p $(TMPEXPORTDIR) svn export $(call get_url, $(UNCOMPRESSED)) $(addprefix $(TMPEXPORTDIR)/, $(TARBASENAME)) pushd $(TMPEXPORTDIR);tar cvfj $@ $(TARBASENAME);popd endif endif tarball: $(SOURCE) mkdir -p $(TMPEXPORTDIR) $(SPEC): $(error "No spec: $@") -include Makefile.post --------------030803000402070900020904 Content-Type: text/plain; name="Makefile.pre" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile.pre" # Consts for Makefile.common PACKAGE := SPECNAME := SPECDIR := SPEC := SOURCEDIR := TMPDIR := TMPEXPORTDIR := BUILDDIR := RPMDIR := SRPMDIR := # rpm dirs RPMTOPDIR := RPMTMPDIR := RPMSOURCEDIR := RPMBUILDDIR := RPMRPMDIR := RPMSRPMDIR := --------------030803000402070900020904--